From 6bd1086761f0533f98ca91027454333b4f95cf14 Mon Sep 17 00:00:00 2001 From: Elliot Braem Date: Fri, 18 Oct 2024 16:40:54 -0400 Subject: [PATCH 01/75] feat: add docker and docker-compose to run coordinater and app nodes (#815) Co-authored-by: Fico <70634661+fbozic@users.noreply.github.com> --- .gitignore | 1 + Dockerfile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.gitignore b/.gitignore index c1a4db68c..46f0a05fe 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ coverage/ dist/ lib/ node_modules/ +certs/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..1993b3c54 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +# Use an official Rust image as the base +FROM rust:latest + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + zlib1g-dev \ + libsnappy-dev \ + libbz2-dev \ + liblz4-dev \ + libzstd-dev \ + clang \ + libclang-dev \ + curl \ + build-essential \ + pkg-config \ + jq + +# Install Node.js (version 20) and pnpm +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get install -y nodejs && \ + npm install -g pnpm + +# Set the working directory +WORKDIR /app + +# Copy only necessary files for building dependencies +COPY Cargo.toml Cargo.lock ./ +COPY crates ./crates +COPY contracts ./contracts +COPY apps ./apps +COPY node-ui ./node-ui +COPY packages ./packages + +# Build the node UI +WORKDIR /app/node-ui +RUN pnpm install && pnpm run build + +# Build the merod binary +WORKDIR /app +RUN cargo build --release -p merod + +# Set the binary as the entrypoint +ENTRYPOINT ["/app/target/release/merod"] + +# Default command (can be overridden in docker-compose) +CMD ["--help"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..9f28d3a08 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,41 @@ +version: '3.8' + +services: + coordinator_init: + image: merod:latest + command: > + --node-name coordinator --home /data init --server-host 0.0.0.0 --server-port 2427 --swarm-port 2527 + volumes: + - ./data:/data + + coordinator_run: + image: merod:latest + ports: + - "2427:2427" + - "2527:2527" + command: > + --node-name coordinator --home /data run --node-type coordinator + volumes: + - ./data:/data + depends_on: + - coordinator_init + + app_node_init: + image: merod:latest + command: > + --node-name node1 --home /data init --server-host 0.0.0.0 --server-port 2428 --swarm-port 2528 + volumes: + - ./data:/data + + app_node_run: + image: merod:latest + ports: + - "2428:2428" + - "2528:2528" + command: > + --node-name node1 --home /data run + volumes: + - ./data:/data + - ./certs:/certs + depends_on: + - app_node_init From 32c992f0fdb456a62c0d78f2716911395d35ffe4 Mon Sep 17 00:00:00 2001 From: Fico <70634661+fbozic@users.noreply.github.com> Date: Wed, 23 Oct 2024 13:50:56 +0200 Subject: [PATCH 02/75] chore: cargo format (#821) Co-authored-by: Matej Vukosav --- crates/meroctl/src/cli/context/create.rs | 3 +-- crates/meroctl/src/cli/jsonrpc.rs | 2 +- crates/meroctl/src/common.rs | 3 +-- crates/meroctl/src/main.rs | 2 +- crates/merod/src/cli/init.rs | 6 +++--- crates/merod/src/cli/relay.rs | 2 +- crates/merod/src/cli/run.rs | 2 +- crates/node/src/interactive_cli/call.rs | 5 +++-- crates/node/src/interactive_cli/context.rs | 2 +- crates/node/src/interactive_cli/gc.rs | 5 +++-- crates/node/src/interactive_cli/identity.rs | 3 ++- crates/node/src/interactive_cli/peers.rs | 3 ++- crates/node/src/interactive_cli/pool.rs | 4 ++-- crates/node/src/interactive_cli/state.rs | 3 ++- crates/node/src/interactive_cli/store.rs | 1 - crates/node/src/interactive_cli/transactions.rs | 3 ++- crates/server/src/admin/handlers/context/get_contexts.rs | 5 +++-- 17 files changed, 29 insertions(+), 25 deletions(-) diff --git a/crates/meroctl/src/cli/context/create.rs b/crates/meroctl/src/cli/context/create.rs index 1b08e5457..503345025 100644 --- a/crates/meroctl/src/cli/context/create.rs +++ b/crates/meroctl/src/cli/context/create.rs @@ -23,8 +23,7 @@ use tokio::runtime::Handle; use tokio::sync::mpsc; use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, load_config}; -use crate::common::{get_response, multiaddr_to_url, RequestType}; +use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] pub struct CreateCommand { diff --git a/crates/meroctl/src/cli/jsonrpc.rs b/crates/meroctl/src/cli/jsonrpc.rs index ea9f37827..d31075595 100644 --- a/crates/meroctl/src/cli/jsonrpc.rs +++ b/crates/meroctl/src/cli/jsonrpc.rs @@ -1,3 +1,4 @@ +use calimero_config::ConfigFile; use calimero_primitives::context::ContextId; use calimero_server_primitives::jsonrpc::{ MutateRequest, QueryRequest, Request, RequestId, RequestPayload, Version, @@ -8,7 +9,6 @@ use serde_json::Value; use super::RootArgs; use crate::common::{get_response, multiaddr_to_url, RequestType}; -use calimero_config::ConfigFile; #[derive(Debug, Parser)] pub struct JsonRpcCommand { diff --git a/crates/meroctl/src/common.rs b/crates/meroctl/src/common.rs index 65fc7b095..1b0015dcd 100644 --- a/crates/meroctl/src/common.rs +++ b/crates/meroctl/src/common.rs @@ -1,3 +1,4 @@ +use calimero_config::ConfigFile; use camino::Utf8Path; use chrono::Utc; use eyre::{bail, eyre, Result as EyreResult}; @@ -7,8 +8,6 @@ use libp2p::Multiaddr; use reqwest::{Client, Response, Url}; use serde::Serialize; -use calimero_config::ConfigFile; - pub fn multiaddr_to_url(multiaddr: &Multiaddr, api_path: &str) -> EyreResult { #[expect(clippy::wildcard_enum_match_arm, reason = "Acceptable here")] let (ip, port, scheme) = multiaddr.iter().fold( diff --git a/crates/meroctl/src/main.rs b/crates/meroctl/src/main.rs index 4a90645e3..051e2c59a 100644 --- a/crates/meroctl/src/main.rs +++ b/crates/meroctl/src/main.rs @@ -1,6 +1,6 @@ -use calimero_server as _; use std::env::var; +use calimero_server as _; use clap::Parser; use eyre::Result as EyreResult; use tracing_subscriber::fmt::layer; diff --git a/crates/merod/src/cli/init.rs b/crates/merod/src/cli/init.rs index 7ab24a8e5..cf159e287 100644 --- a/crates/merod/src/cli/init.rs +++ b/crates/merod/src/cli/init.rs @@ -2,6 +2,9 @@ use core::net::IpAddr; use core::time::Duration; use std::fs::{create_dir, create_dir_all}; +use calimero_config::{ + BlobStoreConfig, ConfigFile, DataStoreConfig as StoreConfigFile, NetworkConfig, ServerConfig, +}; use calimero_context::config::ContextConfig; use calimero_context_config::client::config::{ ContextConfigClientConfig, ContextConfigClientLocalSigner, ContextConfigClientNew, @@ -28,9 +31,6 @@ use tracing::{info, warn}; use url::Url; use crate::{cli, defaults}; -use calimero_config::{ - BlobStoreConfig, ConfigFile, DataStoreConfig as StoreConfigFile, NetworkConfig, ServerConfig, -}; /// Initialize node configuration #[derive(Debug, Parser)] diff --git a/crates/merod/src/cli/relay.rs b/crates/merod/src/cli/relay.rs index 161e2661f..d8a07bd24 100644 --- a/crates/merod/src/cli/relay.rs +++ b/crates/merod/src/cli/relay.rs @@ -6,6 +6,7 @@ use axum::http::status::StatusCode; use axum::response::IntoResponse; use axum::routing::post; use axum::{Json, Router}; +use calimero_config::ConfigFile; use calimero_context_config::client::relayer::RelayRequest; use calimero_context_config::client::{near, Transport, TransportRequest}; use clap::{Parser, ValueEnum}; @@ -16,7 +17,6 @@ use tokio::sync::{mpsc, oneshot}; use tracing::{debug, info, warn}; use super::RootArgs; -use calimero_config::ConfigFile; pub const DEFAULT_PORT: u16 = 63529; // Mero-rELAY = MELAY pub const DEFAULT_ADDR: SocketAddr = diff --git a/crates/merod/src/cli/run.rs b/crates/merod/src/cli/run.rs index 7d56caa13..58898ca15 100644 --- a/crates/merod/src/cli/run.rs +++ b/crates/merod/src/cli/run.rs @@ -1,4 +1,5 @@ use calimero_blobstore::config::BlobStoreConfig; +use calimero_config::ConfigFile; use calimero_network::config::NetworkConfig; use calimero_node::{start, NodeConfig}; use calimero_node_primitives::NodeType as PrimitiveNodeType; @@ -8,7 +9,6 @@ use clap::{Parser, ValueEnum}; use eyre::{bail, Result as EyreResult}; use crate::cli::RootArgs; -use calimero_config::ConfigFile; /// Run a node #[derive(Debug, Parser)] diff --git a/crates/node/src/interactive_cli/call.rs b/crates/node/src/interactive_cli/call.rs index 3062dfb2f..6ff6b2664 100644 --- a/crates/node/src/interactive_cli/call.rs +++ b/crates/node/src/interactive_cli/call.rs @@ -1,11 +1,12 @@ -use calimero_primitives::{identity::PublicKey, transaction::Transaction}; +use calimero_primitives::identity::PublicKey; +use calimero_primitives::transaction::Transaction; use clap::Parser; +use eyre::Result; use owo_colors::OwoColorize; use serde_json::Value; use tokio::sync::oneshot; use crate::Node; -use eyre::Result; #[derive(Debug, Parser)] pub struct CallCommand { diff --git a/crates/node/src/interactive_cli/context.rs b/crates/node/src/interactive_cli/context.rs index 2323d46a0..c85e01903 100644 --- a/crates/node/src/interactive_cli/context.rs +++ b/crates/node/src/interactive_cli/context.rs @@ -1,9 +1,9 @@ +use core::str::FromStr; use std::mem::replace; use calimero_primitives::hash::Hash; use calimero_store::key::ContextMeta as ContextMetaKey; use clap::{Parser, Subcommand}; -use core::str::FromStr; use eyre::Result; use owo_colors::OwoColorize; diff --git a/crates/node/src/interactive_cli/gc.rs b/crates/node/src/interactive_cli/gc.rs index 162f03660..6474de5f7 100644 --- a/crates/node/src/interactive_cli/gc.rs +++ b/crates/node/src/interactive_cli/gc.rs @@ -1,8 +1,9 @@ use clap::Parser; +use eyre::Result; use owo_colors::OwoColorize; -use crate::{transaction_pool::TransactionPool, Node}; -use eyre::Result; +use crate::transaction_pool::TransactionPool; +use crate::Node; #[derive(Debug, Parser)] #[allow(missing_copy_implementations)] diff --git a/crates/node/src/interactive_cli/identity.rs b/crates/node/src/interactive_cli/identity.rs index 6d31ef6fd..a1be72441 100644 --- a/crates/node/src/interactive_cli/identity.rs +++ b/crates/node/src/interactive_cli/identity.rs @@ -1,9 +1,10 @@ +use std::str::FromStr; + use calimero_primitives::context::ContextId; use calimero_store::key::ContextIdentity as ContextIdentityKey; use clap::{Parser, Subcommand}; use eyre::Result; use owo_colors::OwoColorize; -use std::str::FromStr; use crate::Node; diff --git a/crates/node/src/interactive_cli/peers.rs b/crates/node/src/interactive_cli/peers.rs index a59a43157..7f8e47cee 100644 --- a/crates/node/src/interactive_cli/peers.rs +++ b/crates/node/src/interactive_cli/peers.rs @@ -1,9 +1,10 @@ +use std::sync::Arc; + use calimero_network::client::NetworkClient; use clap::Parser; use eyre::Result; use libp2p::gossipsub::TopicHash; use owo_colors::OwoColorize; -use std::sync::Arc; #[derive(Debug, Parser)] pub struct PeersCommand { diff --git a/crates/node/src/interactive_cli/pool.rs b/crates/node/src/interactive_cli/pool.rs index 25060cd48..1dbc44967 100644 --- a/crates/node/src/interactive_cli/pool.rs +++ b/crates/node/src/interactive_cli/pool.rs @@ -1,10 +1,10 @@ -use crate::Node; - use clap::Parser; use eyre::Result; use owo_colors::OwoColorize; use serde_json::{from_slice as from_json_slice, Value}; +use crate::Node; + #[derive(Debug, Parser)] #[allow(missing_copy_implementations)] pub struct PoolCommand; diff --git a/crates/node/src/interactive_cli/state.rs b/crates/node/src/interactive_cli/state.rs index 5b156a703..918e23d07 100644 --- a/crates/node/src/interactive_cli/state.rs +++ b/crates/node/src/interactive_cli/state.rs @@ -1,4 +1,5 @@ -use calimero_primitives::{context::ContextId, hash::Hash}; +use calimero_primitives::context::ContextId; +use calimero_primitives::hash::Hash; use calimero_store::key::ContextState as ContextStateKey; use clap::Parser; use eyre::Result; diff --git a/crates/node/src/interactive_cli/store.rs b/crates/node/src/interactive_cli/store.rs index 31e2a74a9..bba70bd85 100644 --- a/crates/node/src/interactive_cli/store.rs +++ b/crates/node/src/interactive_cli/store.rs @@ -1,7 +1,6 @@ use calimero_primitives::hash::Hash; use calimero_store::key::ContextState as ContextStateKey; use clap::Parser; - use eyre::Result; use owo_colors::OwoColorize; diff --git a/crates/node/src/interactive_cli/transactions.rs b/crates/node/src/interactive_cli/transactions.rs index d8a54c4bb..9b9ef1d1c 100644 --- a/crates/node/src/interactive_cli/transactions.rs +++ b/crates/node/src/interactive_cli/transactions.rs @@ -1,6 +1,7 @@ use std::str::FromStr; -use calimero_primitives::{context::ContextId, hash::Hash}; +use calimero_primitives::context::ContextId; +use calimero_primitives::hash::Hash; use calimero_store::key::ContextTransaction as ContextTransactionKey; use clap::Parser; use eyre::Result; diff --git a/crates/server/src/admin/handlers/context/get_contexts.rs b/crates/server/src/admin/handlers/context/get_contexts.rs index 5b3b19f3c..599e73703 100644 --- a/crates/server/src/admin/handlers/context/get_contexts.rs +++ b/crates/server/src/admin/handlers/context/get_contexts.rs @@ -1,11 +1,12 @@ use std::sync::Arc; -use crate::admin::service::{parse_api_error, ApiResponse}; -use crate::AdminState; use axum::response::IntoResponse; use axum::Extension; use calimero_server_primitives::admin::GetContextsResponse; +use crate::admin::service::{parse_api_error, ApiResponse}; +use crate::AdminState; + pub async fn handler(Extension(state): Extension>) -> impl IntoResponse { // todo! experiment with Interior: WriteLayer let contexts = state From 83e64512724af301ec090a97f4e92d5a08f30d1e Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Wed, 23 Oct 2024 16:16:37 +0200 Subject: [PATCH 03/75] fix: compile errors (#852) --- contracts/registry/src/lib.rs | 4 +- crates/config/src/lib.rs | 67 ++++++++++++++++++++++++ crates/context/src/lib.rs | 9 ++-- crates/meroctl/src/cli/context/watch.rs | 2 + crates/merod/src/cli/init.rs | 39 ++++++-------- crates/network/src/discovery.rs | 4 +- crates/network/src/discovery/state.rs | 28 +++++----- crates/node/src/catchup/blobs.rs | 1 + crates/node/src/interactive_cli.rs | 2 + crates/node/src/interactive_cli/gc.rs | 3 +- crates/node/src/interactive_cli/pool.rs | 3 +- crates/node/src/interactive_cli/store.rs | 3 +- 12 files changed, 120 insertions(+), 45 deletions(-) diff --git a/contracts/registry/src/lib.rs b/contracts/registry/src/lib.rs index 630b1590d..c2ec234ee 100644 --- a/contracts/registry/src/lib.rs +++ b/contracts/registry/src/lib.rs @@ -101,9 +101,7 @@ impl PackageManager { } fn calculate_id_hash(name: &str, owner_account: AccountId) -> String { - hex::encode(env::sha256( - format!("{}:{}", name, owner_account).as_bytes(), - )) + hex::encode(env::sha256(format!("{name}:{owner_account}").as_bytes())) } pub fn add_release( diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 683c8e719..63aaf49ed 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -13,6 +13,7 @@ use serde::{Deserialize, Serialize}; const CONFIG_FILE: &str = "config.toml"; #[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] pub struct ConfigFile { #[serde( with = "calimero_primitives::identity::serde_identity", @@ -31,6 +32,7 @@ pub struct ConfigFile { } #[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] pub struct NetworkConfig { pub swarm: SwarmConfig, @@ -45,7 +47,26 @@ pub struct NetworkConfig { pub catchup: CatchupConfig, } +impl NetworkConfig { + pub fn new( + swarm: SwarmConfig, + bootstrap: BootstrapConfig, + discovery: DiscoveryConfig, + server: ServerConfig, + catchup: CatchupConfig, + ) -> Self { + Self { + swarm, + server, + bootstrap, + discovery, + catchup, + } + } +} + #[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] pub struct ServerConfig { pub listen: Vec, @@ -59,17 +80,63 @@ pub struct ServerConfig { pub websocket: Option, } +impl ServerConfig { + pub fn new( + listen: Vec, + admin: Option, + jsonrpc: Option, + websocket: Option, + ) -> Self { + Self { + listen, + admin, + jsonrpc, + websocket, + } + } +} + #[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] pub struct DataStoreConfig { pub path: Utf8PathBuf, } +impl DataStoreConfig { + pub fn new(path: Utf8PathBuf) -> Self { + Self { path } + } +} + #[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] pub struct BlobStoreConfig { pub path: Utf8PathBuf, } +impl BlobStoreConfig { + pub fn new(path: Utf8PathBuf) -> Self { + Self { path } + } +} + impl ConfigFile { + pub fn new( + identity: identity::Keypair, + datastore: DataStoreConfig, + blobstore: BlobStoreConfig, + context: ContextConfig, + network: NetworkConfig, + ) -> Self { + Self { + identity, + datastore, + blobstore, + context, + network, + } + } + pub fn exists(dir: &Utf8Path) -> bool { dir.join(CONFIG_FILE).is_file() } diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 1e7edfd65..ee5275fdf 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -744,15 +744,18 @@ impl ContextManager { } #[expect(clippy::similar_names, reason = "Different enough")] - pub async fn install_application_from_stream( + pub async fn install_application_from_stream( &self, expected_size: u64, - stream: impl AsyncRead, + stream: AR, source: &ApplicationSource, metadata: Vec, // hash: Hash, // todo! BlobMgr should return hash of content - ) -> EyreResult { + ) -> EyreResult + where + AR: AsyncRead, + { let (blob_id, size) = self .blob_manager .put_sized(Some(Size::Exact(expected_size)), stream) diff --git a/crates/meroctl/src/cli/context/watch.rs b/crates/meroctl/src/cli/context/watch.rs index f2b0f4e78..f4953f96a 100644 --- a/crates/meroctl/src/cli/context/watch.rs +++ b/crates/meroctl/src/cli/context/watch.rs @@ -16,6 +16,8 @@ pub struct WatchCommand { } impl WatchCommand { + #[allow(clippy::print_stderr, reason = "TODO")] + #[allow(clippy::print_stdout, reason = "TODO")] pub async fn run(self, args: RootArgs) -> EyreResult<()> { let config = load_config(&args.home, &args.node_name)?; diff --git a/crates/merod/src/cli/init.rs b/crates/merod/src/cli/init.rs index cf159e287..1600a0211 100644 --- a/crates/merod/src/cli/init.rs +++ b/crates/merod/src/cli/init.rs @@ -164,15 +164,11 @@ impl InitCommand { .relayer_url .unwrap_or_else(defaults::default_relayer_url); - let config = ConfigFile { + let config = ConfigFile::new( identity, - datastore: StoreConfigFile { - path: "data".into(), - }, - blobstore: BlobStoreConfig { - path: "blobs".into(), - }, - context: ContextConfig { + StoreConfigFile::new("data".into()), + BlobStoreConfig::new("blobs".into()), + ContextConfig { client: ContextConfigClientConfig { signer: ContextConfigClientSigner { selected: ContextConfigClientSelectedSigner::Relayer, @@ -196,32 +192,31 @@ impl InitCommand { }, }, }, - network: NetworkConfig { - swarm: SwarmConfig::new(listen), - bootstrap: BootstrapConfig::new(BootstrapNodes::new(boot_nodes)), - discovery: DiscoveryConfig::new( + NetworkConfig::new( + SwarmConfig::new(listen), + BootstrapConfig::new(BootstrapNodes::new(boot_nodes)), + DiscoveryConfig::new( mdns, RendezvousConfig::new(self.rendezvous_registrations_limit), RelayConfig::new(self.relay_registrations_limit), ), - server: ServerConfig { - listen: self - .server_host + ServerConfig::new( + self.server_host .into_iter() .map(|host| Multiaddr::from(host).with(Protocol::Tcp(self.server_port))) .collect(), - admin: Some(AdminConfig::new(true)), - jsonrpc: Some(JsonRpcConfig::new(true)), - websocket: Some(WsConfig::new(true)), - }, - catchup: CatchupConfig::new( + Some(AdminConfig::new(true)), + Some(JsonRpcConfig::new(true)), + Some(WsConfig::new(true)), + ), + CatchupConfig::new( 50, Duration::from_secs(2), Duration::from_secs(2), Duration::from_millis(thread_rng().gen_range(0..1001)), ), - }, - }; + ), + ); config.save(&path)?; diff --git a/crates/network/src/discovery.rs b/crates/network/src/discovery.rs index d2d841aa5..e775592dd 100644 --- a/crates/network/src/discovery.rs +++ b/crates/network/src/discovery.rs @@ -198,7 +198,9 @@ impl EventLoop { RendezvousRegistrationStatus::Expired if candidate.is_none() => { candidate = Some(peer_id); } - _ => {} + RendezvousRegistrationStatus::Requested + | RendezvousRegistrationStatus::Registered + | RendezvousRegistrationStatus::Expired => {} } } } diff --git a/crates/network/src/discovery/state.rs b/crates/network/src/discovery/state.rs index 2706c4c6a..07a1b25be 100644 --- a/crates/network/src/discovery/state.rs +++ b/crates/network/src/discovery/state.rs @@ -176,7 +176,8 @@ impl DiscoveryState { match rendezvous_info.registration_status() { RendezvousRegistrationStatus::Requested | RendezvousRegistrationStatus::Registered => acc + 1, - _ => acc, + RendezvousRegistrationStatus::Discovered + | RendezvousRegistrationStatus::Expired => acc, } } else { acc @@ -186,20 +187,21 @@ impl DiscoveryState { } pub(crate) fn is_relay_reservation_required(&self, max: usize) -> bool { - let sum = - self.get_relay_peer_ids() - .filter_map(|peer_id| self.get_peer_info(&peer_id)) - .fold(0, |acc, peer_info| { - if let Some(rendezvous_info) = peer_info.relay() { - match rendezvous_info.reservation_status() { - RelayReservationStatus::Accepted - | RelayReservationStatus::Requested => acc + 1, - _ => acc, + let sum = self + .get_relay_peer_ids() + .filter_map(|peer_id| self.get_peer_info(&peer_id)) + .fold(0, |acc, peer_info| { + if let Some(rendezvous_info) = peer_info.relay() { + match rendezvous_info.reservation_status() { + RelayReservationStatus::Accepted | RelayReservationStatus::Requested => { + acc + 1 } - } else { - acc + RelayReservationStatus::Discovered | RelayReservationStatus::Expired => acc, } - }); + } else { + acc + } + }); sum < max } } diff --git a/crates/node/src/catchup/blobs.rs b/crates/node/src/catchup/blobs.rs index 435cfd3a7..73b7787ca 100644 --- a/crates/node/src/catchup/blobs.rs +++ b/crates/node/src/catchup/blobs.rs @@ -16,6 +16,7 @@ pub struct ApplicationBlobChunkSender { } impl ApplicationBlobChunkSender { + #[allow(clippy::integer_division, reason = "TODO")] pub(crate) fn new(stream: Box) -> Self { // Stream messages are encoded with length delimited codec. // Calculate batch size based on the maximum message size and blob chunk size. diff --git a/crates/node/src/interactive_cli.rs b/crates/node/src/interactive_cli.rs index de3ba9dbc..885db87c2 100644 --- a/crates/node/src/interactive_cli.rs +++ b/crates/node/src/interactive_cli.rs @@ -19,12 +19,14 @@ use clap::{Parser, Subcommand}; use crate::Node; #[derive(Debug, Parser)] +#[non_exhaustive] pub struct RootCommand { #[command(subcommand)] pub action: SubCommands, } #[derive(Debug, Subcommand)] +#[non_exhaustive] pub enum SubCommands { Application(applications::ApplicationCommand), Call(call::CallCommand), diff --git a/crates/node/src/interactive_cli/gc.rs b/crates/node/src/interactive_cli/gc.rs index 6474de5f7..c412b6150 100644 --- a/crates/node/src/interactive_cli/gc.rs +++ b/crates/node/src/interactive_cli/gc.rs @@ -6,7 +6,8 @@ use crate::transaction_pool::TransactionPool; use crate::Node; #[derive(Debug, Parser)] -#[allow(missing_copy_implementations)] +#[allow(missing_copy_implementations, reason = "TODO")] +#[non_exhaustive] pub struct GarbageCollectCommand; impl GarbageCollectCommand { pub async fn run(self, node: &mut Node) -> Result<()> { diff --git a/crates/node/src/interactive_cli/pool.rs b/crates/node/src/interactive_cli/pool.rs index 1dbc44967..c56e66606 100644 --- a/crates/node/src/interactive_cli/pool.rs +++ b/crates/node/src/interactive_cli/pool.rs @@ -6,7 +6,8 @@ use serde_json::{from_slice as from_json_slice, Value}; use crate::Node; #[derive(Debug, Parser)] -#[allow(missing_copy_implementations)] +#[allow(missing_copy_implementations, reason = "TODO")] +#[non_exhaustive] pub struct PoolCommand; impl PoolCommand { diff --git a/crates/node/src/interactive_cli/store.rs b/crates/node/src/interactive_cli/store.rs index bba70bd85..1a06c20b6 100644 --- a/crates/node/src/interactive_cli/store.rs +++ b/crates/node/src/interactive_cli/store.rs @@ -7,7 +7,8 @@ use owo_colors::OwoColorize; use crate::Node; #[derive(Debug, Parser)] -#[allow(missing_copy_implementations)] +#[allow(missing_copy_implementations, reason = "TODO")] +#[non_exhaustive] pub struct StoreCommand; impl StoreCommand { From 8970a7845211c564560ba73c14a16512cc1a2f8e Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Wed, 23 Oct 2024 18:58:04 +0200 Subject: [PATCH 04/75] fix: style ci check (#853) --- .github/actions/style/action.yml | 36 +++++++++++++++++++++++++------- .github/workflows/rust.yml | 6 +++--- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/.github/actions/style/action.yml b/.github/actions/style/action.yml index 5cb1607e8..e81a9315d 100644 --- a/.github/actions/style/action.yml +++ b/.github/actions/style/action.yml @@ -3,12 +3,18 @@ description: 'Run linter and formatter' runs: using: 'composite' steps: + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v45 + # Check for Markdown/MDX changes - name: Check for Markdown/MDX changes + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} shell: bash run: | echo "Checking for Markdown/MDX changes..." - if git diff --cached --name-only | grep -qE '\.mdx?$'; then + if echo "$ALL_CHANGED_FILES" | grep -qE '\.mdx?$'; then if ! pnpm check:md; then echo "Markdown or MDX files are not properly formatted." exit 1 # Exit with a non-zero status code to indicate failure @@ -17,17 +23,25 @@ runs: # Check for Rust code changes and run Rust formatting - name: Check for Rust code changes + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} shell: bash run: | echo "Checking for Rust code changes..." - if git diff --cached --name-only | grep -qE '\.rs$'; then + if echo "$ALL_CHANGED_FILES" | grep -q '\.rs$'; then echo "Running checks for the Rust code..." - rustup install nightly + + # Install the nightly toolchain + rustup toolchain install nightly + + # Install rustfmt for the nightly toolchain + rustup component add rustfmt --toolchain nightly + if ! cargo +nightly fmt -- --check; then echo "Rust code is not properly formatted." exit 1 # Exit with a non-zero status code if formatting fails fi - if ! cargo clippy -- -D warnings; then + if ! cargo clippy; then echo "Rust code is not properly linted." exit 1 # Exit with a non-zero status code if formatting fails fi @@ -36,9 +50,12 @@ runs: # Check for changes in the 'node-ui' directory and run formatting/linting - name: Check for changes in node-ui shell: bash + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | - echo "Checking for changes in node-ui..." - if git diff --cached --name-only | grep -q '^node-ui/'; then + echo "Checking for changes in node-ui files" + if echo "$ALL_CHANGED_FILES" | grep -q '^node-ui/'; then + echo "Running checks for the node-ui..." cd node-ui if ! pnpm prettier:check .; then echo "Prettier found unformatted files in node-ui." @@ -54,9 +71,12 @@ runs: # Check for changes in the 'packages/calimero-sdk' directory and run formatting/linting - name: Check for changes in calimero-sdk shell: bash + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | - echo "Checking for changes in calimero-sdk..." - if git diff --cached --name-only | grep -q '^packages/calimero-sdk/'; then + echo "Checking for changes in calimero-sdk files" + if echo "$ALL_CHANGED_FILES" | grep -q '^packages/calimero-sdk/'; then + echo "Running checks for the calimero-sdk files" cd packages/calimero-sdk if ! pnpm prettier:check .; then echo "Prettier found unformatted files in calimero-sdk." diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 030ee9117..752d9cd1e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -33,12 +33,12 @@ jobs: - name: Build node-ui run: pnpm --filter ./node-ui run build + - name: Setup rust toolchain + run: rustup toolchain install stable --profile minimal + - name: Run code style checks uses: ./.github/actions/style - - uses: actions-rust-lang/setup-rust-toolchain@v1 - - run: rustup toolchain install stable --profile minimal - - name: Setup rust cache uses: Swatinem/rust-cache@v2 From 846ac7dd2e6e5dbd8683ff8485ddbba93c648996 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 15 Oct 2024 00:48:51 +0100 Subject: [PATCH 05/75] feat: Finalised Data trait and associated design (#763) - Removed the temporary Data struct and implemented a proper Data trait in its place. This temporarily has an associated type called Child, to specify the (one-dimensional) type of children. - Added element() and element_mut() methods to obtain the Element that the Data type owns. - Added id() and path() methods for convenience to pass through from Data to Element. - Added documentation to explain the design choices behind the implemented structure. - Removed the Element.data property and matching data() method, as Element will no longer own or have any reference to Data; Data needs to own Element for the chosen design pattern. - Updated the Element.update_data() method to no longer accept Data, as it does not have access to it. Renamed it to simply update() to reflect this. - Added a NoChildren type to be used (for now) for those types that have no children. - Made some Interface functions generic around D: Data - these are calculate_merkle_hash(), children_of(), find_by_id(), find_by_path(), find_children_by_id(), and save(). - Updated Interface.children_of() to return types of Data::Child. - Updated tests and added new tests as appropriate. --- crates/storage/src/address.rs | 6 +- crates/storage/src/entities.rs | 373 +++++++++++++++++++++++--- crates/storage/src/interface.rs | 215 ++++++++------- crates/storage/src/tests/common.rs | 98 +++++++ crates/storage/src/tests/entities.rs | 118 +++++--- crates/storage/src/tests/interface.rs | 168 ++++++------ 6 files changed, 728 insertions(+), 250 deletions(-) diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index 87b2ea295..def9a507e 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -33,7 +33,7 @@ use uuid::{Bytes, Uuid}; /// system operation. Abstracting the true type away provides a level of /// insulation that is useful for any future changes. /// -#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] +#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct Id(Uuid); impl Id { @@ -150,7 +150,7 @@ impl From for Uuid { /// There is no formal limit to the levels of hierarchy allowed, but in practice /// this is limited to 255 levels (assuming a single byte per segment name). /// -#[derive(Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] +#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct Path { /// A list of path segment offsets, where offset `0` is assumed, and not /// stored. @@ -528,7 +528,7 @@ impl TryFrom for Path { } /// Errors that can occur when working with [`Path`]s. -#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, ThisError)] +#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Ord, PartialOrd, ThisError)] #[non_exhaustive] pub enum PathError { /// The path is empty. diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 2f11a6e51..97b7c3c92 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -6,23 +6,278 @@ //! the storage system. These are the building blocks that are used to construct //! the hierarchy of the storage, and to apply updates to the elements. //! +//! # Design +//! +//! There are a number of requirements that need to be catered for by the +//! solution, and it is worth exploring some of the possible structures and +//! approaches that have been considered. +//! +//! ## Considerations +//! +//! Let's examine first principles: +//! +//! 1. `Element`s are saved, and `Element`s are structs, with system metadata. +//! 2. `Element`s also contain user data, represented by `Data`. +//! 3. User types need to have an easy interface, using an `AtomicUnit` +//! annotation. +//! +//! It is possible that `Element` should be a trait, and that the `AtomicUnit` +//! trait should be a superset of `Element`, and that the `AtomicUnit` proc +//! macro would then apply both `Element` and `AtomicUnit`. However, this would +//! still need a `Data` struct to be constructed, owned by the `Element`. +//! +//! Therefore, if we say that `Element` remains a struct, for simplicity, then +//! what exactly is being annotated? If the user creates a `Person`, is that +//! `Person` an `Element` or an `AtomicUnit`? +//! +//! It seems that the `Person` must be an `AtomicUnit`, which means it cannot +//! *be* `Data` with this structure, as it would need to *contain* `Data`. Now, +//! it initially seemed that `AtomicUnit` should extend `Data`. But if +//! `AtomicUnit` is the `Data`, then the `Person` annotation would be misleading +//! if it was applying to the internal `Data` and not to the `Person`. This +//! would not be idiomatic nor a good pattern to follow. +//! +//! So... if the `Person` is in fact the `AtomicUnit`, and it has data fields, +//! where do we get `Data` from now? We can't really have `Data` being an +//! `Element`, so `Data` has to be owned by `Element`, and where does the +//! `Element` come from? +//! +//! The relationship between these entities is critical to get right. As much as +//! possible of the internals should be abstracted away from the user, with the +//! presented interface being as simple as possible. +//! +//! ## Option One +//! +//! - `Person` is an `AtomicUnit`. +//! - `Person` defines fields — some marked as private. +//! - To satisfy `AtomicUnit`, `Person` has a `storage` field added. +//! - `Person.storage` is an `Element`, and contains a `PersonData` struct. +//! - `PersonData` is constructed by the macro, and contains a copy of the +//! fields from `Person` that are not private. These fields could +//! potentially be borrowed, referencing the fields on the `Element`. +//! - It's then unclear if `Person` (i.e. `AtomicUnit`) needs a `save()` +//! method, or whether it should be passed to `Interface`. +//! +//! This suffers from a number of issues, including: +//! +//! - The `Person` is now a leaky abstraction, as it exposes the internals of +//! the `Element` and `PersonData`. +//! - The `Person` is now a pain to work with, as it has to be constructed in +//! a specific way, including the construction of `PersonData`. +//! - The very existence of `PersonData` is icky. +//! +//! ## Option Two +//! +//! - `Person` is an `AtomicUnit`. +//! - `Person` defines fields — some marked as private. +//! - `Element` becomes a trait instead of a struct. +//! - `AtomicUnit` demands `Element`. +//! - `Person` is now therefore an `Element`. +//! - `Person.data` contains a `PersonData` struct. +//! - `PersonData` is constructed by the macro, and contains a copy of the +//! fields from `Person` that are not private. Again, these fields could +//! potentially be borrowed, referencing the fields on the `Element`. +//! - `Person` does not appear to need a `save()` now, as `Interface.save()` +//! accepts `Element`, and therefore `Person`. +//! +//! This is also problematic: +//! +//! - The `Element` has a lot on it, which clutters up the `Person`. +//! - It exposes the internals, which is undesirable. +//! +//! ## Option Three +//! +//! - `Person` is an `AtomicUnit`. +//! - `Person` defines fields — some marked as private. +//! - `Element` remains a struct. +//! - `Interface` accepts `Data` not `Element`. +//! - `AtomicUnit` extends `Data`. +//! - `Person` is therefore `Data`. +//! - `Person` has a `storage` field added, to hold an `Element`. +//! - A circular reference is carefully created between `Person` and +//! `Element`, with `Element` holding a weak reference to `Person`, and +//! `Person` having a strong reference to (or ownership of) `Element`. +//! - When accepting `Data`, i.e. a `Person` here, the `Interface` can call +//! through `Person.storage` to get to the `Element`, and the `Element` can +//! access the `Data` through the [`Weak`](std::sync::Weak). +//! - The macro does not need to create another struct, and the saving logic +//! can skip the fields marked as private. +//! - `Person` does not appear to need a `save()`, as `Interface.save()` does +//! not need to be changed. +//! +//! The disadvantages of this approach are: +//! +//! - The circular reference is a bit of a pain, and could be a source of +//! bugs. +//! - In order to achieve the circular reference, the `Element` would need to +//! wrap the `Data` in a [`Weak`](std::sync::Weak), which means that all use +//! of the `Data` would need to be through the reference-counted pointer, +//! which implies wrapping `Data` in an [`Arc`](std::sync::Arc) upon +//! construction. +//! - In order to gain mutability, some kind of mutex or read-write lock would +//! be required. Imposing a predetermined mutex type would be undesirable, +//! as the user may have their own requirements. It's also an annoying +//! imposition. +//! - Due to the `Data` (i.e. `Person`) being wrapped in an [`Arc`](std::sync::Arc), +//! [`Default`] cannot be implemented. +//! +//! ## Option Four +//! +//! - `Person` is an `AtomicUnit`. +//! - `Person` defines fields — some marked as private. +//! - `Element` remains a struct. +//! - `Interface` accepts `Data` not `Element`. +//! - `AtomicUnit` extends `Data`. +//! - `Person` is therefore `Data`. +//! - `Person` has a `storage` field added, to hold (and own) an `Element`. +//! - When accepting `Data`, i.e. a `Person` here, the `Interface` can call +//! through `Person.storage` to get to the `Element`. +//! - The macro does not need to create another struct, and the saving logic +//! can skip the fields marked as private. +//! - `Person` does not appear to need a `save()`, as `Interface.save()` does +//! not need to be changed. +//! +//! This is essentially the same as Option Three, but without the circular +//! reference. The disadvantages are: +//! +//! - There is no way for the `Element` to access the `Data` directly. This +//! forces a different approach to those operations that require `Data`. +//! - The `Element`'s operations can accept a `Data` instead of looking it up +//! directly, but this loses structural assurance of the relationship. +//! +//! Passing the `Data` to the `Element`'s operations does work around the first +//! issue, albeit in a slightly unwieldy way. The second issue can be mitigated +//! by performing a check that the `Element` owned by the passed-in `Data` is +//! the same instance as the `Element` that the operation is being called on. +//! Although this is a runtime logic check, it is a simple one, and can be +//! entirely contained within the internal logic, which remains unexposed. +//! +//! ## Option Five +//! +//! For the sake of completeness, it's worth noting that technically another +//! option would be to use generics, such as `Element`, but this leads +//! to unnecessary complexity at this stage (including the potential to have to +//! use phantom data), with no tangible benefits. Therefore this has not been +//! discussed in detail here, although it has been carefully considered. +//! +//! ## Conclusion +//! +//! Option Four is the approach chosen, as it balances all of the following +//! aspirations: +//! +//! - Simple to use. +//! - Allows full ownership and mutability of the user's types. +//! - Abstracts all storage functionality to the storage internals. +//! - Achieves reliability. +//! - Allows implementation of [`Default`] and similar without unexpected +//! constraints. +//! - Does not clutter the user's types. +//! - Does not expose the internals of the storage system. +//! - Does not require a circular reference. +//! - Does not impose a mutex type. +//! - Does not force a predetermined mutex type. +//! - Does not require a separate struct to be constructed. +//! - Does not require references to, or clones of, saved data. +//! +//! Not having a reference back to the `Data` from the `Element` is a slight +//! trade-off, but it is a small one, sacrificing a little structural assurance +//! and direct access for a simpler design with fewer impositions. The internal +//! validation check is simple, and it is best to promote the elegance of the +//! user interface over that of the internals — if there are a couple of hoops +//! to jump through then it is best for these to be in the library code. +//! #[cfg(test)] #[path = "tests/entities.rs"] mod tests; -use core::fmt::{self, Display, Formatter}; +use core::fmt::{self, Debug, Display, Formatter}; use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{BorshDeserialize, BorshSerialize}; use crate::address::{Id, Path}; -/// The primary data for an [`Element`], that is, the data that the consumer -/// application has stored in the [`Element`]. -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] -#[non_exhaustive] -pub struct Data; +/// The primary data for the [`Element`]. +/// +/// This is the primary data for the [`Element`], that is, the data that the +/// consumer application has stored in the [`Element`]. This is the data that +/// the [`Element`] is primarily concerned with, and for the management of which +/// the [`Element`] exists. +/// +/// This trait represents a common denominator for the various specific traits +/// such as [`AtomicUnit`] that are used to denote exactly what the [`Element`] +/// is representing. +/// +/// # Pass-through methods +/// +/// The [`Data`] trait contains a number of pass-through methods that are +/// implemented for convenience, addressing the inner [`Element`]. Potentially +/// most of the [`Element`] methods could be added, or even [`Deref`](std::ops::Deref) +/// implemented, but for now only the most useful and least likely to be +/// contentious methods are included, to keep the interface simple and focused. +/// +pub trait Data: + BorshDeserialize + BorshSerialize + Clone + Debug + PartialEq + PartialOrd + Send + Sync +{ + /// The associated type of any children that the [`Element`] may have. If + /// the node type is not one that can have any children, the [`NoChildren`] + /// type can be used. *Note that this is potentially a temporary measure to + /// allow for a simplified initial implementation of child functionality, + /// and will be refined in forthcoming iterations.* + type Child: Data; + + /// The associated [`Element`]. + /// + /// The [`Element`] contains additional metadata and storage-related + /// identification and other information for the primary data, keeping it + /// abstracted and separate from the primary data itself. + /// + /// # See also + /// + /// * [`element_mut()`](Data::element_mut()) + /// + fn element(&self) -> ∈ + + /// The associated [`Element`], with mutability. + /// + /// This function is used to obtain a mutable reference to the [`Element`] + /// that contains the primary data. + /// + /// # See also + /// + /// * [`element()`](Data::element()) + /// + fn element_mut(&mut self) -> &mut Element; + + /// The unique identifier for the [`Element`]. + /// + /// This is a convenience function that passes through to [`Element::id()`]. + /// See that method for more information. + /// + /// # See also + /// + /// * [`Element::id()`] + /// + #[must_use] + fn id(&self) -> Id { + self.element().id() + } + + /// The path to the [`Element`] in the hierarchy. + /// + /// This is a convenience function that passes through to + /// [`Element::path()`]. See that method for more information. + /// + /// # See also + /// + /// * [`Element::path()`] + /// + #[must_use] + fn path(&self) -> Path { + self.element().path() + } +} /// Represents an [`Element`] in the storage. /// @@ -51,7 +306,21 @@ pub struct Data; /// hashes that represent the sum of all data at that part in the hierarchy and /// below. /// -/// # Structure +/// # Internal structure +/// +/// The primary data for the [`Element`], that is, the data that the consumer +/// application has stored in the [`Element`], cannot be directly accessed by +/// the [`Element`]. This is because that data is the focus of the user +/// operations, and it is desirable to keep the [`Element`] as entirely +/// self-contained. Therefore [`Data`] contains an [`Element`], purely to +/// promote this focus and separation. +/// +/// For this reason, any [`Element`] methods that require access to the primary +/// data require the [`Data`] to be passed in, and need to check and ensure that +/// the [`Element`] owned by the [`Data`] is the same instance as the +/// [`Element`] that the operation is being called on. +/// +/// # Storage structure /// /// TODO: Update when the `child_ids` field is replaced with an index. /// @@ -89,7 +358,7 @@ pub struct Data; /// key-value stores. Therefore, this approach and other similar patterns are /// not suitable for our use case. /// -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] #[non_exhaustive] pub struct Element { /// The unique identifier for the [`Element`]. @@ -101,10 +370,6 @@ pub struct Element { /// in place and usable, and establish a basis to test against and enhance. pub(crate) child_ids: Vec, - /// The primary data for the [`Element`], that is, the data that the - /// consumer application has stored in the [`Element`]. - data: Data, - /// Whether the [`Element`] is dirty, i.e. has been modified since it was /// last saved. pub(crate) is_dirty: bool, @@ -169,7 +434,6 @@ impl Element { Self { id: Id::new(), child_ids: Vec::new(), - data: Data {}, is_dirty: true, metadata: Metadata { created_at: timestamp, @@ -185,8 +449,8 @@ impl Element { /// This gets only the IDs of the children of the [`Element`], which are the /// [`Element`]s that are directly below this [`Element`] in the hierarchy. /// - /// TODO: This method will likely move to the [`Interface`] when the index - /// is implemented. + /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) + /// when the index is implemented. /// #[must_use] pub fn child_ids(&self) -> Vec { @@ -199,25 +463,13 @@ impl Element { self.metadata.created_at } - /// The primary data for the [`Element`]. - /// - /// This gets the primary data for the [`Element`], that is, the data that - /// the consumer application has stored in the [`Element`]. This is the data - /// that the [`Element`] is primarily concerned with, and for the management - /// of which the [`Element`] exists. - /// - #[must_use] - pub const fn data(&self) -> &Data { - &self.data - } - /// Whether the [`Element`] has children. /// /// This checks whether the [`Element`] has children, which are the /// [`Element`]s that are directly below this [`Element`] in the hierarchy. /// - /// TODO: This method will likely move to the [`Interface`] when the index - /// is implemented. + /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) + /// when the index is implemented. /// #[must_use] pub fn has_children(&self) -> bool { @@ -272,29 +524,34 @@ impl Element { self.path.clone() } - /// Updates the data for the [`Element`]. + /// Updates the metadata for the [`Element`]. + /// + /// This updates the metadata for the [`Element`], and marks the [`Element`] + /// as dirty. This is used to indicate that the [`Element`] has been + /// modified since it was last saved, and that it needs to be saved again in + /// order to persist the changes. + /// + /// It updates the [`updated_at()`](Element::updated_at()) timestamp to + /// reflect the time that the [`Element`] was last updated (this is part of + /// the metadata). /// - /// This updates the data for the [`Element`], and marks the [`Element`] as - /// dirty. This is used to indicate that the [`Element`] has been modified - /// since it was last saved, and that it needs to be saved again in order to - /// persist the changes. + /// **IMPORTANT**: It does not update the actual data itself, as it has no + /// way of accessing this. Therefore, this method should be called after + /// updating the data. /// - /// It also updates the [`updated_at()`](Element::updated_at()) timestamp to - /// reflect the time that the [`Element`] was last updated. + /// TODO: Add data parameter back in, and also accept old data as well as + /// new data, to compare the values and determine if there has been an + /// update. /// /// # Merkle hash /// - /// The Merkles hash will NOT be updated when the data is updated. It will + /// The Merkle hash will NOT be updated when the data is updated. It will /// also not be cleared. Rather, it will continue to represent the state of /// the *stored* data, until the data changes are saved, at which point the /// hash will be recalculated and updated. The way to tell if the hash is /// up-to-date is simply to check the [`is_dirty()`](Element::is_dirty()) /// flag. /// - /// # Parameters - /// - /// * `data` - The new data for the [`Element`]. - /// /// # Panics /// /// This method can technically panic if the system time goes backwards, to @@ -305,8 +562,7 @@ impl Element { reason = "Impossible to overflow in normal circumstances" )] #[expect(clippy::expect_used, reason = "Effectively infallible here")] - pub fn update_data(&mut self, data: Data) { - self.data = data; + pub fn update(&mut self) { self.is_dirty = true; self.metadata.updated_at = SystemTime::now() .duration_since(UNIX_EPOCH) @@ -352,7 +608,7 @@ impl Display for Element { /// Using a [`u64`] timestamp allows for 585 years from the Unix epoch, at /// nanosecond precision. This is more than sufficient for our current needs. /// -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] #[non_exhaustive] pub struct Metadata { /// When the [`Element`] was first created. Note that this is a global @@ -375,3 +631,32 @@ impl Metadata { self.created_at = created_at; } } + +/// A [`Data`] type that has no children. +/// +/// This is a special type to represent the type of the children of a [`Data`] +/// type that has no children, in the absence of being able to use something +/// like `None` to represent no type. +/// +/// *Note that this is potentially a temporary measure to allow for a simplified +/// initial implementation of child functionality, and will be refined in +/// forthcoming iterations.* +/// +#[derive(BorshDeserialize, BorshSerialize, Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)] +#[expect( + clippy::exhaustive_structs, + reason = "Exhaustive - this will never have fields" +)] +pub struct NoChildren; + +impl Data for NoChildren { + type Child = Self; + + fn element(&self) -> &Element { + unimplemented!() + } + + fn element_mut(&mut self) -> &mut Element { + unimplemented!() + } +} diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 6729ec4bf..750b0955a 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -16,7 +16,7 @@ mod tests; use std::io::Error as IoError; use std::sync::Arc; -use borsh::{to_vec, BorshDeserialize}; +use borsh::to_vec; use calimero_store::key::Storage as StorageKey; use calimero_store::layer::{ReadLayer, WriteLayer}; use calimero_store::slice::Slice; @@ -27,7 +27,7 @@ use sha2::{Digest, Sha256}; use thiserror::Error as ThisError; use crate::address::{Id, Path}; -use crate::entities::Element; +use crate::entities::Data; /// The primary interface for the storage system. #[derive(Debug, Clone)] @@ -51,66 +51,72 @@ impl Interface { } } - /// Calculates the Merkle hash for the [`Element`]. - /// - /// This calculates the Merkle hash for the [`Element`], which is a - /// cryptographic hash of the significant data in the "scope" of the - /// [`Element`], and is used to determine whether the data has changed and - /// is valid. It is calculated by hashing the substantive data in the - /// [`Element`], along with the hashes of the children of the [`Element`], + /// Calculates the Merkle hash for the [`Element`](crate::entities::Element). + /// + /// This calculates the Merkle hash for the + /// [`Element`](crate::entities::Element), which is a cryptographic hash of + /// the significant data in the "scope" of the [`Element`](crate::entities::Element), + /// and is used to determine whether the data has changed and is valid. It + /// is calculated by hashing the substantive data in the [`Element`](crate::entities::Element), + /// along with the hashes of the children of the [`Element`](crate::entities::Element), /// thereby representing the state of the entire hierarchy below the - /// [`Element`]. + /// [`Element`](crate::entities::Element). /// - /// This method is called automatically when the [`Element`] is updated, but - /// can also be called manually if required. + /// This method is called automatically when the [`Element`](crate::entities::Element) + /// is updated, but can also be called manually if required. /// /// # Significant data /// - /// The data considered "significant" to the state of the [`Element`], and - /// any change to which is considered to constitute a change in the state of - /// the [`Element`], is: - /// - /// - The ID of the [`Element`]. This should never change. Arguably, this - /// could be omitted, but at present it means that empty elements are - /// given meaningful hashes. - /// - The primary [`Data`] of the [`Element`]. This is the data that the - /// consumer application has stored in the [`Element`], and is the - /// focus of the [`Element`]. - /// - The metadata of the [`Element`]. This is the system-managed - /// properties that are used to process the [`Element`], but are not - /// part of the primary data. Arguably the Merkle hash could be - /// considered part of the metadata, but it is not included in the - /// [`Data`] struct at present (as it obviously should not contribute - /// to the hash, i.e. itself). + /// The data considered "significant" to the state of the [`Element`](crate::entities::Element), + /// and any change to which is considered to constitute a change in the + /// state of the [`Element`](crate::entities::Element), is: + /// + /// - The ID of the [`Element`](crate::entities::Element). This should + /// never change. Arguably, this could be omitted, but at present it + /// means that empty elements are given meaningful hashes. + /// - The primary [`Data`] of the [`Element`](crate::entities::Element). + /// This is the data that the consumer application has stored in the + /// [`Element`](crate::entities::Element), and is the focus of the + /// [`Element`](crate::entities::Element). + /// - The metadata of the [`Element`](crate::entities::Element). This is + /// the system-managed properties that are used to process the + /// [`Element`](crate::entities::Element), but are not part of the + /// primary data. Arguably the Merkle hash could be considered part of + /// the metadata, but it is not included in the [`Data`] struct at + /// present (as it obviously should not contribute to the hash, i.e. + /// itself). /// /// # Parameters /// - /// * `element` - The [`Element`] to calculate the Merkle hash for. + /// * `element` - The [`Element`](crate::entities::Element) to calculate the + /// Merkle hash for. /// /// # Errors /// /// If there is a problem in serialising the data, an error will be /// returned. /// - pub fn calculate_merkle_hash_for(&self, element: &Element) -> Result<[u8; 32], StorageError> { + pub fn calculate_merkle_hash_for(&self, entity: &D) -> Result<[u8; 32], StorageError> { let mut hasher = Sha256::new(); - hasher.update(element.id().as_bytes()); - hasher.update(&to_vec(&element.data()).map_err(StorageError::SerializationError)?); - hasher.update(&to_vec(&element.metadata).map_err(StorageError::SerializationError)?); + hasher.update(entity.id().as_bytes()); + hasher.update(&to_vec(&entity).map_err(StorageError::SerializationError)?); + hasher + .update(&to_vec(&entity.element().metadata).map_err(StorageError::SerializationError)?); - for child in self.children_of(element)? { - hasher.update(child.merkle_hash); + for child in self.children_of(entity)? { + hasher.update(child.element().merkle_hash); } Ok(hasher.finalize().into()) } - /// The children of the [`Element`]. + /// The children of the [`Element`](crate::entities::Element). /// - /// This gets the children of the [`Element`], which are the [`Element`]s - /// that are directly below this [`Element`] in the hierarchy. This is a - /// simple method that returns the children as a list, and does not provide - /// any filtering or ordering. + /// This gets the children of the [`Element`](crate::entities::Element), + /// which are the [`Element`](crate::entities::Element)s that are directly + /// below this [`Element`](crate::entities::Element) in the hierarchy. This + /// is a simple method that returns the children as a list, and does not + /// provide any filtering or ordering. /// /// Notably, there is no real concept of ordering in the storage system, as /// the records are not ordered in any way. They are simply stored in the @@ -139,29 +145,33 @@ impl Interface { /// /// # Parameters /// - /// * `element` - The [`Element`] to get the children of. + /// * `element` - The [`Element`](crate::entities::Element) to get the + /// children of. /// /// # Errors /// /// If an error occurs when interacting with the storage system, or a child - /// [`Element`] cannot be found, an error will be returned. + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. /// - pub fn children_of(&self, element: &Element) -> Result, StorageError> { + pub fn children_of(&self, entity: &D) -> Result, StorageError> { let mut children = Vec::new(); - for id in element.child_ids() { + for id in entity.element().child_ids() { children.push(self.find_by_id(id)?.ok_or(StorageError::NotFound(id))?); } Ok(children) } - /// Finds an [`Element`] by its unique identifier. + /// Finds an [`Element`](crate::entities::Element) by its unique identifier. /// - /// This will always retrieve a single [`Element`], if it exists, regardless - /// of where it may be in the hierarchy, or what state it may be in. + /// This will always retrieve a single [`Element`](crate::entities::Element), + /// if it exists, regardless of where it may be in the hierarchy, or what + /// state it may be in. /// /// # Parameters /// - /// * `id` - The unique identifier of the [`Element`] to find. + /// * `id` - The unique identifier of the [`Element`](crate::entities::Element) + /// to find. /// /// # Errors /// @@ -169,7 +179,7 @@ impl Interface { /// will be returned. /// #[expect(clippy::significant_drop_tightening, reason = "False positive")] - pub fn find_by_id(&self, id: Id) -> Result, StorageError> { + pub fn find_by_id(&self, id: Id) -> Result, StorageError> { // TODO: It seems fairly bizarre/unexpected that the put() method is sync // TODO: and not async. The reasons and intentions need checking here, in // TODO: case this find() method should be async and wrap the blocking call @@ -187,105 +197,114 @@ impl Interface { match value { Some(slice) => { - let mut element = - Element::try_from_slice(&slice).map_err(StorageError::DeserializationError)?; + let mut entity = + D::try_from_slice(&slice).map_err(StorageError::DeserializationError)?; // TODO: This is needed for now, as the field gets stored. Later we will // TODO: implement a custom serialiser that will skip this field along with // TODO: any others that should not be stored. - element.is_dirty = false; - Ok(Some(element)) + entity.element_mut().is_dirty = false; + Ok(Some(entity)) } None => Ok(None), } } - /// Finds one or more [`Element`]s by path in the hierarchy. + /// Finds one or more [`Element`](crate::entities::Element)s by path in the + /// hierarchy. /// - /// This will retrieve all [`Element`]s that exist at the specified path in - /// the hierarchy. This may be a single item, or multiple items if there are - /// multiple [`Element`]s at the same path. + /// This will retrieve all [`Element`](crate::entities::Element)s that exist + /// at the specified path in the hierarchy. This may be a single item, or + /// multiple items if there are multiple [`Element`](crate::entities::Element)s + /// at the same path. /// /// # Parameters /// - /// * `path` - The path to the [`Element`]s to find. + /// * `path` - The path to the [`Element`](crate::entities::Element)s to + /// find. /// /// # Errors /// /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn find_by_path(&self, _path: &Path) -> Result, StorageError> { + pub fn find_by_path(&self, _path: &Path) -> Result, StorageError> { unimplemented!() } - /// Finds the children of an [`Element`] by its unique identifier. + /// Finds the children of an [`Element`](crate::entities::Element) by its + /// unique identifier. /// - /// This will retrieve all [`Element`]s that are children of the specified - /// [`Element`]. This may be a single item, or multiple items if there are - /// multiple children. Notably, it will return [`None`] if the [`Element`] + /// This will retrieve all [`Element`](crate::entities::Element)s that are + /// children of the specified [`Element`](crate::entities::Element). This + /// may be a single item, or multiple items if there are multiple children. + /// Notably, it will return [`None`] if the [`Element`](crate::entities::Element) /// in question does not exist. /// /// # Parameters /// - /// * `id` - The unique identifier of the [`Element`] to find the children - /// of. + /// * `id` - The unique identifier of the [`Element`](crate::entities::Element) + /// to find the children of. /// /// # Errors /// /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn find_children_by_id(&self, _id: Id) -> Result>, StorageError> { + pub fn find_children_by_id(&self, _id: Id) -> Result>, StorageError> { unimplemented!() } - /// Saves an [`Element`] to the storage system. + /// Saves an [`Element`](crate::entities::Element) to the storage system. /// - /// This will save the provided [`Element`] to the storage system. If the - /// record already exists, it will be updated with the new data. If the - /// record does not exist, it will be created. + /// This will save the provided [`Element`](crate::entities::Element) to the + /// storage system. If the record already exists, it will be updated with + /// the new data. If the record does not exist, it will be created. /// /// # Update guard /// - /// If the provided [`Element`] is older than the existing record, the - /// update will be ignored, and the existing record will be kept. The - /// Boolean return value indicates whether the record was saved or not; a - /// value of `false` indicates that the record was not saved due to this - /// guard check — any other reason will be due to an error, and returned as - /// such. + /// If the provided [`Element`](crate::entities::Element) is older than the + /// existing record, the update will be ignored, and the existing record + /// will be kept. The Boolean return value indicates whether the record was + /// saved or not; a value of `false` indicates that the record was not saved + /// due to this guard check — any other reason will be due to an error, and + /// returned as such. /// /// # Dirty flag /// - /// Note, if the [`Element`] is not marked as dirty, it will not be saved, - /// but `true` will be returned. In this case, the record is considered to - /// be up-to-date and does not need saving, and so the save operation is - /// effectively a no-op. If necessary, this can be checked before calling - /// [`save()](Element::save()) by calling [`is_dirty()](Element::is_dirty()). + /// Note, if the [`Element`](crate::entities::Element) is not marked as + /// dirty, it will not be saved, but `true` will be returned. In this case, + /// the record is considered to be up-to-date and does not need saving, and + /// so the save operation is effectively a no-op. If necessary, this can be + /// checked before calling [`save()](crate::entities::Element::save()) by + /// calling [`is_dirty()](crate::entities::Element::is_dirty()). /// /// # Merkle hash /// - /// The Merkle hash of the [`Element`] is calculated before saving, and - /// stored in the [`Element`] itself. This is used to determine whether the - /// data of the [`Element`] or its children has changed, and is used to - /// validate the stored data. + /// The Merkle hash of the [`Element`](crate::entities::Element) is + /// calculated before saving, and stored in the [`Element`](crate::entities::Element) + /// itself. This is used to determine whether the data of the [`Element`](crate::entities::Element) + /// or its children has changed, and is used to validate the stored data. /// - /// Note that if the [`Element`] does not need saving, or cannot be saved, - /// then the Merkle hash will not be updated. This way the hash only ever - /// represents the state of the data that is actually stored. + /// Note that if the [`Element`](crate::entities::Element) does not need + /// saving, or cannot be saved, then the Merkle hash will not be updated. + /// This way the hash only ever represents the state of the data that is + /// actually stored. /// /// # Parameters /// - /// * `id` - The unique identifier of the [`Element`] to save. - /// * `element` - The [`Element`] whose data should be saved. This will be - /// serialised and stored in the storage system. + /// * `id` - The unique identifier of the [`Element`](crate::entities::Element) + /// to save. + /// * `element` - The [`Element`](crate::entities::Element) whose data + /// should be saved. This will be serialised and stored in the + /// storage system. /// /// # Errors /// /// If an error occurs when serialising data or interacting with the storage /// system, an error will be returned. /// - pub fn save(&self, id: Id, element: &mut Element) -> Result { - if !element.is_dirty() { + pub fn save(&self, id: Id, entity: &mut D) -> Result { + if !entity.element().is_dirty() { return Ok(true); } // It is possible that the record gets added or updated after the call to @@ -294,14 +313,14 @@ impl Interface { // is considered acceptable. If this becomes a problem, we should change // the RwLock to a ReentrantMutex, or reimplement the get() logic here to // occur within the write lock. But this seems unnecessary at present. - if let Some(existing) = self.find_by_id(id)? { - if existing.metadata.updated_at >= element.metadata.updated_at { + if let Some(mut existing) = self.find_by_id::(id)? { + if existing.element_mut().metadata.updated_at >= entity.element().metadata.updated_at { return Ok(false); } } // TODO: Need to propagate the change up the tree, i.e. trigger a // TODO: recalculation for the ancestors. - element.merkle_hash = self.calculate_merkle_hash_for(element)?; + entity.element_mut().merkle_hash = self.calculate_merkle_hash_for(entity)?; // TODO: It seems fairly bizarre/unexpected that the put() method is sync // TODO: and not async. The reasons and intentions need checking here, in @@ -312,10 +331,10 @@ impl Interface { .write() .put( &StorageKey::new(id.into()), - Slice::from(to_vec(element).map_err(StorageError::SerializationError)?), + Slice::from(to_vec(entity).map_err(StorageError::SerializationError)?), ) .map_err(StorageError::StoreError)?; - element.is_dirty = false; + entity.element_mut().is_dirty = false; Ok(true) } diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index e5119f533..907866b62 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -1,11 +1,13 @@ use std::sync::LazyLock; +use borsh::{BorshDeserialize, BorshSerialize}; use calimero_store::config::StoreConfig; use calimero_store::db::RocksDB; use calimero_store::Store; use tempfile::{tempdir, TempDir}; use crate::address::Id; +use crate::entities::{Data, Element, NoChildren}; /// A set of non-empty test UUIDs. pub const TEST_UUID: [[u8; 16]; 5] = [ @@ -27,6 +29,102 @@ pub static TEST_ID: LazyLock<[Id; 5]> = LazyLock::new(|| { ] }); +/// For tests against empty data structs. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] +pub struct EmptyData { + pub storage: Element, +} + +impl Data for EmptyData { + type Child = NoChildren; + + fn element(&self) -> &Element { + &self.storage + } + + fn element_mut(&mut self) -> &mut Element { + &mut self.storage + } +} + +/// A simple page with a title, and paragraphs as children. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] +pub struct Page { + pub title: String, + pub storage: Element, +} + +impl Page { + /// Creates a new page with a title from an existing element. + pub fn new_from_element(title: &str, element: Element) -> Self { + Self { + title: title.to_owned(), + storage: element, + } + } +} + +impl Data for Page { + type Child = Paragraph; + + fn element(&self) -> &Element { + &self.storage + } + + fn element_mut(&mut self) -> &mut Element { + &mut self.storage + } +} + +/// A simple paragraph with text. No children. Belongs to a page. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] +pub struct Paragraph { + pub text: String, + pub storage: Element, +} + +impl Paragraph { + /// Creates a new paragraph with text, from an existing element. + pub fn new_from_element(text: &str, element: Element) -> Self { + Self { + text: text.to_owned(), + storage: element, + } + } +} + +impl Data for Paragraph { + type Child = NoChildren; + + fn element(&self) -> &Element { + &self.storage + } + + fn element_mut(&mut self) -> &mut Element { + &mut self.storage + } +} + +/// A simple person example struct. No children. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] +pub struct Person { + pub name: String, + pub age: u8, + pub storage: Element, +} + +impl Data for Person { + type Child = NoChildren; + + fn element(&self) -> &Element { + &self.storage + } + + fn element_mut(&mut self) -> &mut Element { + &mut self.storage + } +} + /// Creates a new temporary store for testing. /// /// This function creates a new temporary directory and opens a new store in it, diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index 918875cc1..67e04db15 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -2,14 +2,63 @@ use claims::{assert_ge, assert_le}; use super::*; use crate::interface::Interface; -use crate::tests::common::create_test_store; +use crate::tests::common::{create_test_store, Person}; #[cfg(test)] -mod data__constructor { +mod data__public_methods { + use super::*; + #[test] - #[ignore] - fn new() { - todo!() + fn element() { + let path = Path::new("::root::node::leaf").unwrap(); + let element = Element::new(&path); + let person = Person { + name: "Alice".to_owned(), + age: 30, + storage: element.clone(), + }; + assert_eq!(person.element(), &element); + } + + #[test] + fn element_mut() { + let path = Path::new("::root::node::leaf").unwrap(); + let element = Element::new(&path); + let mut person = Person { + name: "Bob".to_owned(), + age: 40, + storage: element.clone(), + }; + assert!(element.is_dirty); + assert!(person.element().is_dirty); + person.element_mut().is_dirty = false; + assert!(element.is_dirty); + assert!(!person.element().is_dirty); + } + + #[test] + fn id() { + let path = Path::new("::root::node::leaf").unwrap(); + let element = Element::new(&path); + let id = element.id; + let person = Person { + name: "Eve".to_owned(), + age: 20, + storage: element, + }; + assert_eq!(person.id(), id); + } + + #[test] + fn path() { + let path = Path::new("::root::node::leaf").unwrap(); + let element = Element::new(&path); + let person = Person { + name: "Steve".to_owned(), + age: 50, + storage: element, + }; + assert_eq!(person.path(), path); } } @@ -66,12 +115,6 @@ mod element__public_methods { assert_le!(element.created_at(), timestamp2); } - #[test] - #[ignore] - fn data() { - todo!() - } - #[test] fn has_children() { let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); @@ -93,14 +136,19 @@ mod element__public_methods { fn is_dirty() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); assert!(element.is_dirty()); - assert!(interface.save(element.id(), &mut element).unwrap()); - assert!(!element.is_dirty()); + let mut person = Person { + name: "Alice".to_owned(), + age: 30, + storage: element, + }; + assert!(interface.save(person.element().id(), &mut person).unwrap()); + assert!(!person.element().is_dirty()); - element.update_data(Data {}); - assert!(element.is_dirty()); + person.element_mut().update(); + assert!(person.element().is_dirty()); } #[test] @@ -117,17 +165,22 @@ mod element__public_methods { } #[test] - fn update_data() { + fn update() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let updated_at = element.metadata.updated_at; - assert!(interface.save(element.id(), &mut element).unwrap()); - assert!(!element.is_dirty); - - element.update_data(Data {}); - assert!(element.is_dirty); - assert_ge!(element.metadata.updated_at, updated_at); + let mut person = Person { + name: "Bob".to_owned(), + age: 40, + storage: element, + }; + assert!(interface.save(person.element().id(), &mut person).unwrap()); + assert!(!person.element().is_dirty); + + person.element_mut().update(); + assert!(person.element().is_dirty); + assert_ge!(person.element().metadata.updated_at, updated_at); } #[test] @@ -136,21 +189,26 @@ mod element__public_methods { .duration_since(UNIX_EPOCH) .unwrap() .as_nanos() as u64; - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut person = Person { + name: "Eve".to_owned(), + age: 20, + storage: element, + }; let timestamp2 = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_nanos() as u64; - assert_ge!(element.updated_at(), timestamp1); - assert_le!(element.updated_at(), timestamp2); + assert_ge!(person.element().updated_at(), timestamp1); + assert_le!(person.element().updated_at(), timestamp2); - element.update_data(Data {}); + person.element_mut().update(); let timestamp3 = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_nanos() as u64; - assert_ge!(element.updated_at(), timestamp2); - assert_le!(element.updated_at(), timestamp3); + assert_ge!(person.element().updated_at(), timestamp2); + assert_le!(person.element().updated_at(), timestamp3); } } diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 3979da4ac..3b7a3a1c5 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -1,8 +1,8 @@ use claims::{assert_none, assert_ok}; use super::*; -use crate::entities::Data; -use crate::tests::common::{create_test_store, TEST_ID}; +use crate::entities::{Data, Element}; +use crate::tests::common::{create_test_store, EmptyData, Page, Paragraph, TEST_ID}; #[cfg(test)] mod interface__constructor { @@ -28,11 +28,14 @@ mod interface__public_methods { element.set_id(TEST_ID[0]); element.metadata.set_created_at(timestamp); element.metadata.updated_at = timestamp; + let data = EmptyData { + storage: element.clone(), + }; - let hash = interface.calculate_merkle_hash_for(&element).unwrap(); + let hash = interface.calculate_merkle_hash_for(&data).unwrap(); assert_eq!( hex::encode(hash), - "480f2ebbbccb3883d80bceebdcda48f1f8c1577e1f219b6213d61048f54473d6" + "aefc29aae587eb4a3bc44cb29dc30624db9936566aa2f0d0df1cd07793a94e6e" ); } @@ -45,40 +48,44 @@ mod interface__public_methods { element.set_id(TEST_ID[0]); element.metadata.set_created_at(1_765_432_100_123_456_789); element.metadata.updated_at = timestamp; - assert!(interface.save(element.id(), &mut element).unwrap()); - let mut child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let mut child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let mut child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); - child1.set_id(TEST_ID[1]); - child2.set_id(TEST_ID[2]); - child3.set_id(TEST_ID[3]); - child1.metadata.set_created_at(timestamp); - child2.metadata.set_created_at(timestamp); - child3.metadata.set_created_at(timestamp); - child1.metadata.updated_at = timestamp; - child2.metadata.updated_at = timestamp; - child3.metadata.updated_at = timestamp; - assert!(interface.save(child1.id(), &mut child1).unwrap()); - assert!(interface.save(child2.id(), &mut child2).unwrap()); - assert!(interface.save(child3.id(), &mut child3).unwrap()); - element.child_ids = vec![child1.id(), child2.id(), child3.id()]; - assert!(interface.save(element.id(), &mut element).unwrap()); + let mut page = Page::new_from_element("Node", element); + assert!(interface.save(page.id(), &mut page).unwrap()); + let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); + let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); + let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para2 = Paragraph::new_from_element("Leaf2", child2); + let mut para3 = Paragraph::new_from_element("Leaf3", child3); + para1.element_mut().set_id(TEST_ID[1]); + para2.element_mut().set_id(TEST_ID[2]); + para3.element_mut().set_id(TEST_ID[3]); + para1.element_mut().metadata.set_created_at(timestamp); + para2.element_mut().metadata.set_created_at(timestamp); + para3.element_mut().metadata.set_created_at(timestamp); + para1.element_mut().metadata.updated_at = timestamp; + para2.element_mut().metadata.updated_at = timestamp; + para3.element_mut().metadata.updated_at = timestamp; + assert!(interface.save(para1.id(), &mut para1).unwrap()); + assert!(interface.save(para2.id(), &mut para2).unwrap()); + assert!(interface.save(para3.id(), &mut para3).unwrap()); + page.element_mut().child_ids = vec![para1.id(), para2.id(), para3.id()]; + assert!(interface.save(page.id(), &mut page).unwrap()); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&child1).unwrap()), - "807554028555897b6fa91f7538e48eee2d43720c5093c0a96ed393175ef95358", + hex::encode(interface.calculate_merkle_hash_for(¶1).unwrap()), + "a93a438ee86aee5ae8b89207e41dff50aa4c7a2e4854bebb56399dd78cbb1b3c", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&child2).unwrap()), - "d695f0f9ac154d051b4ea87ec7bab761538f41b4a8539921baa23d6540c6c09f", + hex::encode(interface.calculate_merkle_hash_for(¶2).unwrap()), + "c3800c5d62756a45d03934b150526728a4e2d880274c04dda8a2c574847c8639", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&child3).unwrap()), - "7dca2754b8d6d95cdb08d37306191fdd72ba1a9d9a549c0d63d018dd98298a39", + hex::encode(interface.calculate_merkle_hash_for(¶3).unwrap()), + "ce9ec97a0f52e9a2ecfd0e7e5c35da4330746d22c373d65f9ff28c4931ea1210", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&element).unwrap()), - "b145cd6657adc20fdcf410ff9a194cb28836ef7cfdd70ef6abdb69c689246418", + hex::encode(interface.calculate_merkle_hash_for(&page).unwrap()), + "9b042f16801a9acfe607b01e626f5642ce15d5da893d00a19d751f48caccc5e6", ); } @@ -86,21 +93,25 @@ mod interface__public_methods { fn children_of() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node").unwrap()); - assert!(interface.save(element.id(), &mut element).unwrap()); - assert_eq!(interface.children_of(&element).unwrap(), vec![]); - - let mut child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let mut child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let mut child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); - assert!(interface.save(child1.id(), &mut child1).unwrap()); - assert!(interface.save(child2.id(), &mut child2).unwrap()); - assert!(interface.save(child3.id(), &mut child3).unwrap()); - element.child_ids = vec![child1.id(), child2.id(), child3.id()]; - assert!(interface.save(element.id(), &mut element).unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", element); + assert!(interface.save(page.id(), &mut page).unwrap()); + assert_eq!(interface.children_of(&page).unwrap(), vec![]); + + let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); + let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); + let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para2 = Paragraph::new_from_element("Leaf2", child2); + let mut para3 = Paragraph::new_from_element("Leaf3", child3); + assert!(interface.save(para1.id(), &mut para1).unwrap()); + assert!(interface.save(para2.id(), &mut para2).unwrap()); + assert!(interface.save(para3.id(), &mut para3).unwrap()); + page.element_mut().child_ids = vec![para1.id(), para2.id(), para3.id()]; + assert!(interface.save(page.id(), &mut page).unwrap()); assert_eq!( - interface.children_of(&element).unwrap(), - vec![child1, child2, child3] + interface.children_of(&page).unwrap(), + vec![para1, para2, para3] ); } @@ -108,11 +119,12 @@ mod interface__public_methods { fn find_by_id__existent() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let id = element.id(); - assert!(interface.save(id, &mut element).unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut para = Paragraph::new_from_element("Leaf", element); + let id = para.id(); + assert!(interface.save(id, &mut para).unwrap()); - assert_eq!(interface.find_by_id(id).unwrap(), Some(element)); + assert_eq!(interface.find_by_id(id).unwrap(), Some(para)); } #[test] @@ -120,7 +132,7 @@ mod interface__public_methods { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - assert_none!(interface.find_by_id(Id::new()).unwrap()); + assert_none!(interface.find_by_id::(Id::new()).unwrap()); } #[test] @@ -139,63 +151,69 @@ mod interface__public_methods { fn test_save__basic() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut para = Paragraph::new_from_element("Leaf", element); - assert_ok!(interface.save(element.id(), &mut element)); + assert_ok!(interface.save(para.id(), &mut para)); } #[test] fn test_save__multiple() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element1 = Element::new(&Path::new("::root::node1").unwrap()); - let mut element2 = Element::new(&Path::new("::root::node2").unwrap()); + let element1 = Element::new(&Path::new("::root::node1").unwrap()); + let element2 = Element::new(&Path::new("::root::node2").unwrap()); + let mut page1 = Page::new_from_element("Node1", element1); + let mut page2 = Page::new_from_element("Node2", element2); - assert!(interface.save(element1.id(), &mut element1).unwrap()); - assert!(interface.save(element2.id(), &mut element2).unwrap()); - assert_eq!(interface.find_by_id(element1.id()).unwrap(), Some(element1)); - assert_eq!(interface.find_by_id(element2.id()).unwrap(), Some(element2)); + assert!(interface.save(page1.id(), &mut page1).unwrap()); + assert!(interface.save(page2.id(), &mut page2).unwrap()); + assert_eq!(interface.find_by_id(page1.id()).unwrap(), Some(page1)); + assert_eq!(interface.find_by_id(page2.id()).unwrap(), Some(page2)); } #[test] fn test_save__not_dirty() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let id = element.id(); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut para = Paragraph::new_from_element("Leaf", element); + let id = para.id(); - assert!(interface.save(id, &mut element).unwrap()); - element.update_data(Data {}); - assert!(interface.save(id, &mut element).unwrap()); + assert!(interface.save(id, &mut para).unwrap()); + para.element_mut().update(); + assert!(interface.save(id, &mut para).unwrap()); } #[test] fn test_save__too_old() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element1 = Element::new(&Path::new("::root::node::leaf").unwrap()); - let mut element2 = element1.clone(); - let id = element1.id(); + let element1 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut para1 = Paragraph::new_from_element("Leaf", element1); + let mut para2 = para1.clone(); + let id = para1.id(); - assert!(interface.save(id, &mut element1).unwrap()); - element1.update_data(Data {}); - element2.update_data(Data {}); - assert!(interface.save(id, &mut element2).unwrap()); - assert!(!interface.save(id, &mut element1).unwrap()); + assert!(interface.save(id, &mut para1).unwrap()); + para1.element_mut().update(); + para2.element_mut().update(); + assert!(interface.save(id, &mut para1).unwrap()); + assert!(!interface.save(id, &mut para2).unwrap()); } #[test] fn test_save__update_existing() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let id = element.id(); - assert!(interface.save(id, &mut element).unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut para = Paragraph::new_from_element("Leaf", element); + let id = para.id(); + assert!(interface.save(id, &mut para).unwrap()); // TODO: Modify the element's data and check it changed - assert!(interface.save(id, &mut element).unwrap()); - assert_eq!(interface.find_by_id(id).unwrap(), Some(element)); + assert!(interface.save(id, &mut para).unwrap()); + assert_eq!(interface.find_by_id(id).unwrap(), Some(para)); } #[test] From 102713c1ebab938517df4391ccb672a71c17ad34 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 15 Oct 2024 00:53:38 +0100 Subject: [PATCH 06/75] feat: Added AtomicUnit macro and trait (#764) Added AtomicUnit macro and trait - Added a new AtomicUnit marker trait. - Added a new storage-macros crate, to contain the macros needed for presenting the high-level developer interface. - Added an AtomicUnit proc macro to automatically derive AtomicUnit and Data traits for a struct. Added test-utils crate - Created a new test-utils crate, to contain common functions and data structures for the purpose of testing. - Moved common functionality that has a wider scope from storage::common to tests-utils::storage. --- Cargo.lock | 22 +- Cargo.toml | 2 + crates/storage-macros/Cargo.toml | 27 ++ crates/storage-macros/src/lib.rs | 290 ++++++++++++++++ crates/storage-macros/tests/atomic_unit.rs | 326 ++++++++++++++++++ .../tests/compile_fail/atomic_unit.rs | 30 ++ .../tests/compile_fail/atomic_unit.stderr | 10 + crates/storage/Cargo.toml | 3 +- crates/storage/src/entities.rs | 10 + crates/storage/src/tests/common.rs | 31 -- crates/storage/src/tests/entities.rs | 3 +- crates/storage/src/tests/interface.rs | 3 +- crates/test-utils/Cargo.toml | 16 + crates/test-utils/src/lib.rs | 3 + crates/test-utils/src/storage.rs | 33 ++ 15 files changed, 774 insertions(+), 35 deletions(-) create mode 100644 crates/storage-macros/Cargo.toml create mode 100644 crates/storage-macros/src/lib.rs create mode 100644 crates/storage-macros/tests/atomic_unit.rs create mode 100644 crates/storage-macros/tests/compile_fail/atomic_unit.rs create mode 100644 crates/storage-macros/tests/compile_fail/atomic_unit.stderr create mode 100644 crates/test-utils/Cargo.toml create mode 100644 crates/test-utils/src/lib.rs create mode 100644 crates/test-utils/src/storage.rs diff --git a/Cargo.lock b/Cargo.lock index 0c0d90b50..566aea5e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1122,17 +1122,29 @@ version = "0.1.0" dependencies = [ "borsh", "calimero-store", + "calimero-test-utils", "claims", "eyre", "fixedstr", "hex", "parking_lot", "sha2", - "tempfile", "thiserror", "uuid 1.10.0", ] +[[package]] +name = "calimero-storage-macros" +version = "0.1.0" +dependencies = [ + "borsh", + "calimero-storage", + "calimero-test-utils", + "quote", + "syn 2.0.72", + "trybuild", +] + [[package]] name = "calimero-store" version = "0.1.0" @@ -1151,6 +1163,14 @@ dependencies = [ "thunderdome", ] +[[package]] +name = "calimero-test-utils" +version = "0.1.0" +dependencies = [ + "calimero-store", + "tempfile", +] + [[package]] name = "camino" version = "1.1.7" diff --git a/Cargo.toml b/Cargo.toml index aec88a5c6..320f7288d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,8 +24,10 @@ members = [ "./crates/server", "./crates/server-primitives", "./crates/storage", + "./crates/storage-macros", "./crates/store", "./crates/store/blobs", + "./crates/test-utils", "./apps/kv-store", "./apps/only-peers", diff --git a/crates/storage-macros/Cargo.toml b/crates/storage-macros/Cargo.toml new file mode 100644 index 000000000..9061af569 --- /dev/null +++ b/crates/storage-macros/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "calimero-storage-macros" +version = "0.1.0" +authors.workspace = true +edition.workspace = true +repository.workspace = true +license.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +proc-macro = true + +[dependencies] +borsh.workspace = true +quote.workspace = true +syn.workspace = true + +calimero-storage = { path = "../storage" } + +[dev-dependencies] +trybuild.workspace = true + +calimero-test-utils = { path = "../test-utils" } + +[lints] +workspace = true diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs new file mode 100644 index 000000000..ba4afff3e --- /dev/null +++ b/crates/storage-macros/src/lib.rs @@ -0,0 +1,290 @@ +use borsh as _; +/// For documentation links +use calimero_storage as _; +use proc_macro::TokenStream; +use quote::{format_ident, quote}; +use syn::{parse_macro_input, parse_quote, Data, DeriveInput, Fields, Type}; + +#[cfg(test)] +mod integration_tests_package_usage { + use {borsh as _, calimero_storage as _, calimero_test_utils as _, trybuild as _}; +} + +/// Derives the [`AtomicUnit`](calimero_storage::entities::AtomicUnit) trait for +/// a struct. +/// +/// This macro automatically implements the [`AtomicUnit`](calimero_storage::entities::AtomicUnit) +/// trait for a struct, which extends the [`Data`](calimero_storage::entities::Data) +/// trait. +/// +/// # Requirements +/// +/// The following are mandatory requirements for the struct: +/// +/// - A private `storage` field of type [`Element`](calimero_storage::entities::Element). +/// This is needed as the [`Data`](calimero_storage::entities::Data)-based +/// struct needs to own an [`Element`](calimero_storage::entities::Element). +/// +/// # Generated implementations +/// +/// This macro will generate the following implementations: +/// +/// - [`Data`](calimero_storage::entities::Data) trait implementation. +/// - [`AtomicUnit`](calimero_storage::entities::AtomicUnit) trait +/// implementation. +/// - Getter and setter methods for each field. These help to ensure that the +/// access to the fields is controlled, and that any changes to the fields +/// are reflected in the [`Element`](calimero_storage::entities::Element)'s +/// state. +/// - [`BorshSerialize`](borsh::BorshSerialize) and [`BorshDeserialize`](borsh::BorshDeserialize) +/// will be implemented for the struct, so they should be omitted from the +/// struct definition. +/// +/// # Struct attributes +/// +/// * `#[children]` - An optional attribute to specify the child type for the +/// struct, written as `#[children(ChildType)]`. If the +/// attribute or its value are omitted, then the child type +/// will default to [`NoChildren`](calimero_storage::entities::NoChildren). +/// +/// # Field attributes +/// +/// * `#[collection]` - Indicates that the field is a collection of other +/// [`Data`] types. +/// * `#[private]` - Designates fields that are local-only, and so should not +/// be shared with other nodes in the network. These fields +/// will not be serialised or included in the Merkle hash +/// calculation. Note that being local-only is not the same +/// as applying permissions via ACLs to share with only the +/// current user — these fields are not shared at all. +/// * `#[skip]` - Can be applied to fields that should not be serialised +/// or included in the Merkle hash calculation. These fields +/// will be completely ignored by the storage system, and +/// not even have getters and setters implemented. +/// * `#[storage]` - Indicates that the field is the storage element for the +/// struct. This is a mandatory field, and if it is missing, +/// there will be a panic during compilation. The name is +/// arbitrary, but the type has to be an [`Element`](calimero_storage::entities::Element). +/// +/// Note that fields marked with `#[private]` or `#[skip]` must have [`Default`] +/// implemented so that they can be initialised when deserialising. +/// +/// TODO: The `#[collection]` attribute is not yet implemented, and the +/// `#[private]` attribute is implemented with the same functionality as +/// `#[skip]`, but in future these will be differentiated. +/// +/// # Getters and setters +/// +/// The macro will generate getter and setter methods for each field. These +/// methods will allow the struct to control access to its fields, and ensure +/// that any changes to the fields are reflected in the [`Element`](calimero_storage::entities::Element)'s +/// state. +/// +/// The getter methods will have the same name as the field, and the setter +/// methods will be prefixed with `set_`. For example, given a field `name`, the +/// getter method will be `name()`, and the setter method will be `set_name()`. +/// +/// The setter methods will return a boolean indicating whether the update was +/// carried out. Note that this is more an indication of change than it is of +/// error — if the value is the same as the current value, the update will not +/// be carried out, and the method will return `false`. +/// +/// # Examples +/// +/// ``` +/// use calimero_storage::entities::Element; +/// use calimero_storage_macros::AtomicUnit; +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[children(Paragraph)] +/// struct Page { +/// title: String, +/// #[private] +/// secret: String, +/// #[storage] +/// storage: Element, +/// } +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Paragraph { +/// text: String, +/// #[storage] +/// storage: Element, +/// } +/// ``` +/// +/// TODO: Once multiple child types are supported, this example will represent +/// the correct approach. +/// +/// ```ignore +/// use calimero_storage::entities::Element; +/// use calimero_storage_macros::AtomicUnit; +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Person { +/// name: String, +/// age: u32, +/// #[private] +/// secret: String, +/// #[collection] +/// friends: Vec, +/// #[storage] +/// storage: Element, +/// } +/// ``` +/// +/// # Panics +/// +/// This macro will panic during compilation if: +/// +/// - It is applied to anything other than a struct +/// - The struct has unnamed fields +/// - The struct does not have a field annotated as `#[storage]` +/// - The struct has fields with types that do not implement [`Default`] +/// - The struct already has methods with the same names as the generated +/// getter and setter methods +/// +#[expect( + clippy::too_many_lines, + reason = "Okay for now - will be restructured later" +)] +#[proc_macro_derive(AtomicUnit, attributes(children, collection, private, skip, storage))] +pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as DeriveInput); + let name = &input.ident; + let child_type = input + .attrs + .iter() + .find_map(|attr| { + if attr.path().is_ident("children") { + attr.parse_args::().ok() + } else { + None + } + }) + .unwrap_or_else(|| parse_quote!(calimero_storage::entities::NoChildren)); + + let fields = match &input.data { + Data::Struct(data) => &data.fields, + Data::Enum(_) | Data::Union(_) => panic!("AtomicUnit can only be derived for structs"), + }; + + let named_fields = match fields { + Fields::Named(fields) => &fields.named, + Fields::Unnamed(_) | Fields::Unit => { + panic!("AtomicUnit can only be derived for structs with named fields") + } + }; + + // Find the field marked with the #[storage] attribute + let storage_field = named_fields + .iter() + .find(|f| f.attrs.iter().any(|attr| attr.path().is_ident("storage"))) + .expect("You must designate one field with #[storage] for the Element"); + + let storage_ident = storage_field.ident.as_ref().unwrap(); + let storage_ty = &storage_field.ty; + + let field_implementations = named_fields + .iter() + .filter_map(|f| { + let ident = f.ident.as_ref().unwrap(); + let ty = &f.ty; + + let skip = f.attrs.iter().any(|attr| attr.path().is_ident("skip")); + + if skip || ident == storage_ident { + None + } else { + let getter = format_ident!("{}", ident); + let setter = format_ident!("set_{}", ident); + + Some(quote! { + pub fn #getter(&self) -> &#ty { + &self.#ident + } + + pub fn #setter(&mut self, value: #ty) -> bool { + if self.#ident == value { + false + } else { + self.#ident = value; + self.#storage_ident.update(); + true + } + } + }) + } + }) + .collect::>(); + + let serializable_fields: Vec<_> = named_fields + .iter() + .filter(|f| { + !f.attrs + .iter() + .any(|attr| attr.path().is_ident("skip") || attr.path().is_ident("private")) + && f.ident.as_ref().unwrap() != storage_ident + }) + .map(|f| f.ident.as_ref().unwrap()) + .collect(); + + let skipped_fields: Vec<_> = named_fields + .iter() + .filter(|f| { + f.attrs + .iter() + .any(|attr| attr.path().is_ident("skip") || attr.path().is_ident("private")) + }) + .map(|f| f.ident.as_ref().unwrap()) + .collect(); + + let deserialize_impl = quote! { + impl borsh::BorshDeserialize for #name { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + let #storage_ident = #storage_ty::deserialize_reader(reader)?; + Ok(Self { + #storage_ident, + #(#serializable_fields: borsh::BorshDeserialize::deserialize_reader(reader)?,)* + #(#skipped_fields: Default::default(),)* + }) + } + } + }; + + let serialize_impl = quote! { + impl borsh::BorshSerialize for #name { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + borsh::BorshSerialize::serialize(&self.#storage_ident, writer)?; + #(borsh::BorshSerialize::serialize(&self.#serializable_fields, writer)?;)* + Ok(()) + } + } + }; + + let expanded = quote! { + impl #name { + #(#field_implementations)* + } + + impl calimero_storage::entities::Data for #name { + type Child = #child_type; + + fn element(&self) -> &calimero_storage::entities::Element { + &self.#storage_ident + } + + fn element_mut(&mut self) -> &mut calimero_storage::entities::Element { + &mut self.#storage_ident + } + } + + impl calimero_storage::entities::AtomicUnit for #name {} + + #deserialize_impl + + #serialize_impl + }; + + TokenStream::from(expanded) +} diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs new file mode 100644 index 000000000..c08790ec9 --- /dev/null +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -0,0 +1,326 @@ +#![allow(unused_crate_dependencies, reason = "Creates a lot of noise")] +// Lints specifically disabled for integration tests +#![allow( + non_snake_case, + unreachable_pub, + clippy::cast_lossless, + clippy::cast_precision_loss, + clippy::cognitive_complexity, + clippy::default_numeric_fallback, + clippy::exhaustive_enums, + clippy::exhaustive_structs, + clippy::expect_used, + clippy::indexing_slicing, + clippy::let_underscore_must_use, + clippy::let_underscore_untyped, + clippy::missing_assert_message, + clippy::missing_panics_doc, + clippy::mod_module_files, + clippy::must_use_candidate, + clippy::panic, + clippy::print_stdout, + clippy::tests_outside_test_module, + clippy::unwrap_in_result, + clippy::unwrap_used, + reason = "Not useful in tests" +)] + +use borsh::{to_vec, BorshDeserialize}; +use calimero_storage::address::Path; +use calimero_storage::entities::{Data, Element, NoChildren}; +use calimero_storage::interface::Interface; +use calimero_storage_macros::AtomicUnit; +use calimero_test_utils::storage::create_test_store; + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Child { + content: String, + #[storage] + storage: Element, +} + +impl Child { + fn new(path: &Path) -> Self { + Self { + content: String::new(), + storage: Element::new(path), + } + } +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Child)] +struct Parent { + title: String, + #[storage] + storage: Element, +} + +impl Parent { + fn new(path: &Path) -> Self { + Self { + title: String::new(), + storage: Element::new(path), + } + } +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Private { + public: String, + #[private] + private: String, + #[storage] + storage: Element, +} + +impl Private { + fn new(path: &Path) -> Self { + Self { + public: String::new(), + private: String::new(), + storage: Element::new(path), + } + } +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Simple { + name: String, + value: i32, + #[storage] + storage: Element, +} + +impl Simple { + fn new(path: &Path) -> Self { + Self { + name: String::new(), + value: 0, + storage: Element::new(path), + } + } +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Skipped { + included: String, + #[skip] + skipped: String, + #[storage] + storage: Element, +} + +impl Skipped { + fn new(path: &Path) -> Self { + Self { + included: String::new(), + skipped: String::new(), + storage: Element::new(path), + } + } +} + +#[cfg(test)] +mod basics { + use super::*; + + #[test] + fn creation() { + let path = Path::new("::root::node").unwrap(); + let unit = Simple::new(&path); + + assert_eq!(unit.path(), path); + assert_eq!(unit.element().path(), path); + assert!(unit.element().is_dirty()); + } + + #[test] + fn getters() { + let path = Path::new("::root::node").unwrap(); + let unit = Simple::new(&path); + + assert_eq!(unit.name(), ""); + assert_eq!(unit.value(), &0); + } + + #[test] + fn setters__set() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + + _ = unit.set_name("Test Name".to_owned()); + _ = unit.set_value(42); + + assert_eq!(unit.name(), "Test Name"); + assert_eq!(unit.value(), &42); + } + + #[test] + fn setters__confirm_set() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + assert_ne!(unit.name(), "Test Name"); + assert_ne!(unit.value(), &42); + + assert!(unit.set_name("Test Name".to_owned())); + assert!(unit.set_value(42)); + assert_eq!(unit.name(), "Test Name"); + assert_eq!(unit.value(), &42); + } + + #[test] + fn setters__confirm_not_set() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + assert_ne!(unit.name(), "Test Name"); + assert_ne!(unit.value(), &42); + + assert!(unit.set_name("Test Name".to_owned())); + assert!(unit.set_value(42)); + assert_eq!(unit.name(), "Test Name"); + assert_eq!(unit.value(), &42); + assert!(!unit.set_name("Test Name".to_owned())); + assert!(!unit.set_value(42)); + } + + #[test] + fn setters__confirm_set_dirty() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + assert!(interface.save(unit.id(), &mut unit).unwrap()); + assert!(!unit.element().is_dirty()); + + assert!(unit.set_name("Test Name".to_owned())); + assert!(unit.element().is_dirty()); + } + + #[test] + fn setters__confirm_not_set_not_dirty() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + assert!(interface.save(unit.id(), &mut unit).unwrap()); + assert!(!unit.element().is_dirty()); + + assert!(unit.set_name("Test Name".to_owned())); + assert!(unit.element().is_dirty()); + assert!(interface.save(unit.id(), &mut unit).unwrap()); + assert!(!unit.set_name("Test Name".to_owned())); + assert!(!unit.element().is_dirty()); + } +} + +#[cfg(test)] +mod visibility { + use super::*; + + #[test] + fn private_field() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Private::new(&path); + + _ = unit.set_public("Public".to_owned()); + _ = unit.set_private("Private".to_owned()); + + let serialized = to_vec(&unit).unwrap(); + let deserialized = Private::try_from_slice(&serialized).unwrap(); + + assert_eq!(unit.public(), deserialized.public()); + assert_ne!(unit.private(), deserialized.private()); + assert_eq!(deserialized.private(), ""); + } + + #[test] + fn public_field() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + + _ = unit.set_name("Public".to_owned()); + + let serialized = to_vec(&unit).unwrap(); + let deserialized = Simple::try_from_slice(&serialized).unwrap(); + + assert_eq!(unit.name(), deserialized.name()); + } + + #[test] + fn skipped_field() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Skipped::new(&path); + + _ = unit.set_included("Public".to_owned()); + // Skipping fields also skips the setters + // _ = unit.set_skipped("Skipped".to_owned()); + unit.skipped = "Skipped".to_owned(); + + let serialized = to_vec(&unit).unwrap(); + let deserialized = Skipped::try_from_slice(&serialized).unwrap(); + + assert_eq!(unit.included(), deserialized.included()); + // Skipping fields also skips the getters + // assert_ne!(unit.skipped(), deserialized.skipped()); + assert_ne!(unit.skipped, deserialized.skipped); + assert_eq!(deserialized.skipped, ""); + } +} + +#[cfg(test)] +mod hierarchy { + use super::*; + + #[test] + fn parent_child() { + let parent_path = Path::new("::root::node").unwrap(); + let mut parent = Parent::new(&parent_path); + _ = parent.set_title("Parent Title".to_owned()); + + let child_path = Path::new("::root::node::leaf").unwrap(); + let mut child = Child::new(&child_path); + _ = child.set_content("Child Content".to_owned()); + + assert_eq!(parent.title(), "Parent Title"); + + // TODO: Add in tests for loading and checking children + } + + #[test] + fn no_children() { + let _unit: Simple = Simple::new(&Path::new("::root::node").unwrap()); + let _: Option<::Child> = None::; + } + + #[test] + fn compile_fail() { + trybuild::TestCases::new().compile_fail("tests/compile_fail/atomic_unit.rs"); + } +} + +#[cfg(test)] +mod traits { + use super::*; + + #[test] + fn serialization_and_deserialization() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + + _ = unit.set_name("Test Name".to_owned()); + _ = unit.set_value(42); + + let serialized = to_vec(&unit).unwrap(); + let deserialized = Simple::try_from_slice(&serialized).unwrap(); + + assert_eq!(unit, deserialized); + assert_eq!(unit.id(), deserialized.id()); + assert_eq!(unit.name(), deserialized.name()); + assert_eq!(unit.path(), deserialized.path()); + assert_eq!(unit.value(), deserialized.value()); + assert_eq!(unit.element().id(), deserialized.element().id()); + assert_eq!(unit.element().path(), deserialized.element().path()); + assert_eq!(unit.element().metadata(), deserialized.element().metadata()); + } +} diff --git a/crates/storage-macros/tests/compile_fail/atomic_unit.rs b/crates/storage-macros/tests/compile_fail/atomic_unit.rs new file mode 100644 index 000000000..21e755fa4 --- /dev/null +++ b/crates/storage-macros/tests/compile_fail/atomic_unit.rs @@ -0,0 +1,30 @@ +use calimero_storage::address::Path; +use calimero_storage::entities::Element; +use calimero_storage::interface::Interface; +use calimero_storage_macros::AtomicUnit; +use calimero_test_utils::storage::create_test_store; + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Child { + #[storage] + storage: Element, +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Child)] +struct Parent { + #[storage] + storage: Element, +} + +fn main() { + fn child_type_specification() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let parent: Parent = Parent { storage: Element::new(&Path::new("::root::node").unwrap()) }; + let _: Vec = interface.children_of(&parent).unwrap(); + + // This should fail to compile if the child type is incorrect + let _: Vec = interface.children_of(&parent).unwrap(); + } +} diff --git a/crates/storage-macros/tests/compile_fail/atomic_unit.stderr b/crates/storage-macros/tests/compile_fail/atomic_unit.stderr new file mode 100644 index 000000000..c2c726ae9 --- /dev/null +++ b/crates/storage-macros/tests/compile_fail/atomic_unit.stderr @@ -0,0 +1,10 @@ +error[E0308]: mismatched types + --> tests/compile_fail/atomic_unit.rs:28:30 + | +28 | let _: Vec = interface.children_of(&parent).unwrap(); + | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` + | | + | expected due to this + | + = note: expected struct `Vec` + found struct `Vec` diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 90cfd3d33..1e5b42266 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -20,7 +20,8 @@ calimero-store = { path = "../store", features = ["datatypes"] } [dev-dependencies] claims.workspace = true hex.workspace = true -tempfile.workspace = true + +calimero-test-utils = { path = "../test-utils" } [lints] workspace = true diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 97b7c3c92..b50d1211e 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -198,6 +198,16 @@ use borsh::{BorshDeserialize, BorshSerialize}; use crate::address::{Id, Path}; +/// Represents an atomic unit in the storage system. +/// +/// An atomic unit is a self-contained piece of data that can be stored and +/// retrieved as a single entity. It extends the [`Data`] trait with additional +/// methods specific to how it's stored and identified in the system. +/// +/// This is a marker trait, and does not have any special functionality. +/// +pub trait AtomicUnit: Data {} + /// The primary data for the [`Element`]. /// /// This is the primary data for the [`Element`], that is, the data that the diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index 907866b62..c0d944a09 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -1,10 +1,6 @@ use std::sync::LazyLock; use borsh::{BorshDeserialize, BorshSerialize}; -use calimero_store::config::StoreConfig; -use calimero_store::db::RocksDB; -use calimero_store::Store; -use tempfile::{tempdir, TempDir}; use crate::address::Id; use crate::entities::{Data, Element, NoChildren}; @@ -124,30 +120,3 @@ impl Data for Person { &mut self.storage } } - -/// Creates a new temporary store for testing. -/// -/// This function creates a new temporary directory and opens a new store in it, -/// returning the store and the directory. The directory and its test data will -/// be cleaned up when the test completes. -/// -#[must_use] -pub fn create_test_store() -> (Store, TempDir) { - // Note: It would be nice to have a way to test against an in-memory store, - // but InMemoryDB is not integrated with Store and there's currently no way - // to support both. It may be that the Database trait is later applied to - // InMemoryDB as well as RocksDB, in which case the storage Interface could - // be changed to work against Database implementations and not just Store. - let temp_dir = tempdir().expect("Could not create temp dir"); - let config = StoreConfig::new( - temp_dir - .path() - .to_path_buf() - .try_into() - .expect("Invalid UTF-8 path"), - ); - ( - Store::open::(&config).expect("Could not create store"), - temp_dir, - ) -} diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index 67e04db15..edd650eaa 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -1,8 +1,9 @@ +use calimero_test_utils::storage::create_test_store; use claims::{assert_ge, assert_le}; use super::*; use crate::interface::Interface; -use crate::tests::common::{create_test_store, Person}; +use crate::tests::common::Person; #[cfg(test)] mod data__public_methods { diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 3b7a3a1c5..8cf290706 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -1,8 +1,9 @@ +use calimero_test_utils::storage::create_test_store; use claims::{assert_none, assert_ok}; use super::*; use crate::entities::{Data, Element}; -use crate::tests::common::{create_test_store, EmptyData, Page, Paragraph, TEST_ID}; +use crate::tests::common::{EmptyData, Page, Paragraph, TEST_ID}; #[cfg(test)] mod interface__constructor { diff --git a/crates/test-utils/Cargo.toml b/crates/test-utils/Cargo.toml new file mode 100644 index 000000000..41da6c327 --- /dev/null +++ b/crates/test-utils/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "calimero-test-utils" +version = "0.1.0" +authors.workspace = true +edition.workspace = true +repository.workspace = true +license.workspace = true +publish = false + +[dependencies] +tempfile.workspace = true + +calimero-store = { path = "../store", features = ["datatypes"] } + +[lints] +workspace = true diff --git a/crates/test-utils/src/lib.rs b/crates/test-utils/src/lib.rs new file mode 100644 index 000000000..a97bee91b --- /dev/null +++ b/crates/test-utils/src/lib.rs @@ -0,0 +1,3 @@ +//! Test utilities and data structures for use in the Calimero crates. + +pub mod storage; diff --git a/crates/test-utils/src/storage.rs b/crates/test-utils/src/storage.rs new file mode 100644 index 000000000..be004f2c6 --- /dev/null +++ b/crates/test-utils/src/storage.rs @@ -0,0 +1,33 @@ +//! Structs for testing storage. + +use calimero_store::config::StoreConfig; +use calimero_store::db::RocksDB; +use calimero_store::Store; +use tempfile::{tempdir, TempDir}; + +/// Creates a new temporary store for testing. +/// +/// This function creates a new temporary directory and opens a new store in it, +/// returning the store and the directory. The directory and its test data will +/// be cleaned up when the test completes. +/// +#[must_use] +pub fn create_test_store() -> (Store, TempDir) { + // Note: It would be nice to have a way to test against an in-memory store, + // but InMemoryDB is not integrated with Store and there's currently no way + // to support both. It may be that the Database trait is later applied to + // InMemoryDB as well as RocksDB, in which case the storage Interface could + // be changed to work against Database implementations and not just Store. + let temp_dir = tempdir().expect("Could not create temp dir"); + let config = StoreConfig::new( + temp_dir + .path() + .to_path_buf() + .try_into() + .expect("Invalid UTF-8 path"), + ); + ( + Store::open::(&config).expect("Could not create store"), + temp_dir, + ) +} From d21677791687388138037ee18ee9742e7f33f4fa Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 15 Oct 2024 01:17:07 +0100 Subject: [PATCH 07/75] feat: Added Collection macro and trait (#765) Added Collection macro and trait - Added a new Collection trait. This features a Child: Data type taken from the Data trait, plus child_ids() and has_children() methods taken from the Element struct. - Added a Collection proc macro to automatically derive the Collection trait for a struct. - Updated Interface.children_of() to accept a Collection instead of Data implementation. - Removed Child: Data from the Data trait, as this is now handled by the Collection trait. - Removed the child_ids property and the child_ids() and has_children() methods from Element, as these are now handled by the Collection trait. - Removed the NoChildren struct, as this is no longer necessary now that the Collection trait is available. - Removed the #[children] attribute from the AtomicUnit proc macro, as this is now handled through the Collection macro. - Added documentation to explain the design choices behind the implemented structure. Updated Merkle hashing - Added calculate_merkle_hash() and calculate_full_merkle_hash() to the Data trait, abstracting the Merkle hash calculation out to the implementors. This is beneficial for control, but also allows the functionality to be constructed at compile-time with the knowledge that the proc macros have. - Updated Interface.calculate_merkle_hash_for() to call the new calculate_full_merkle_hash() function. This also has a new parameter to pass through, determining whether cached hashes should be used. - Updated the AtomicUnit macro to implement the new functions. - Amended the AtomicUnit macro to not update metadata upon change. --- Cargo.lock | 1 + crates/storage-macros/src/lib.rs | 284 ++++++++++++++++-- crates/storage-macros/tests/atomic_unit.rs | 106 ++++--- crates/storage-macros/tests/collection.rs | 283 +++++++++++++++++ .../{atomic_unit.rs => collection.rs} | 22 +- .../{atomic_unit.stderr => collection.stderr} | 6 +- crates/storage/Cargo.toml | 1 + crates/storage/src/entities.rs | 245 ++++++++++----- crates/storage/src/interface.rs | 44 +-- crates/storage/src/lib.rs | 10 + crates/storage/src/tests/common.rs | 122 +++++++- crates/storage/src/tests/entities.rs | 174 +++++++++-- crates/storage/src/tests/interface.rs | 28 +- 13 files changed, 1110 insertions(+), 216 deletions(-) create mode 100644 crates/storage-macros/tests/collection.rs rename crates/storage-macros/tests/compile_fail/{atomic_unit.rs => collection.rs} (52%) rename crates/storage-macros/tests/compile_fail/{atomic_unit.stderr => collection.stderr} (57%) diff --git a/Cargo.lock b/Cargo.lock index 566aea5e1..1c944d353 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1121,6 +1121,7 @@ name = "calimero-storage" version = "0.1.0" dependencies = [ "borsh", + "calimero-storage-macros", "calimero-store", "calimero-test-utils", "claims", diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index ba4afff3e..1bfae61a9 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -3,7 +3,7 @@ use borsh as _; use calimero_storage as _; use proc_macro::TokenStream; use quote::{format_ident, quote}; -use syn::{parse_macro_input, parse_quote, Data, DeriveInput, Fields, Type}; +use syn::{parse_macro_input, Data, DeriveInput, Fields, Type}; #[cfg(test)] mod integration_tests_package_usage { @@ -42,10 +42,7 @@ mod integration_tests_package_usage { /// /// # Struct attributes /// -/// * `#[children]` - An optional attribute to specify the child type for the -/// struct, written as `#[children(ChildType)]`. If the -/// attribute or its value are omitted, then the child type -/// will default to [`NoChildren`](calimero_storage::entities::NoChildren). +/// None. /// /// # Field attributes /// @@ -96,7 +93,6 @@ mod integration_tests_package_usage { /// use calimero_storage_macros::AtomicUnit; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -/// #[children(Paragraph)] /// struct Page { /// title: String, /// #[private] @@ -104,13 +100,6 @@ mod integration_tests_package_usage { /// #[storage] /// storage: Element, /// } -/// -/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -/// struct Paragraph { -/// text: String, -/// #[storage] -/// storage: Element, -/// } /// ``` /// /// TODO: Once multiple child types are supported, this example will represent @@ -144,6 +133,13 @@ mod integration_tests_package_usage { /// - The struct already has methods with the same names as the generated /// getter and setter methods /// +/// # See also +/// +/// * [`Collection`] - For defining a collection of child elements, for use with +/// [`AtomicUnit`] (the parent and children are all atomic +/// units, with the collection being the grouping mechanism +/// at field level on the parent). +/// #[expect( clippy::too_many_lines, reason = "Okay for now - will be restructured later" @@ -152,17 +148,6 @@ mod integration_tests_package_usage { pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; - let child_type = input - .attrs - .iter() - .find_map(|attr| { - if attr.path().is_ident("children") { - attr.parse_args::().ok() - } else { - None - } - }) - .unwrap_or_else(|| parse_quote!(calimero_storage::entities::NoChildren)); let fields = match &input.data { Data::Struct(data) => &data.fields, @@ -191,6 +176,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { let ident = f.ident.as_ref().unwrap(); let ty = &f.ty; + let private = f.attrs.iter().any(|attr| attr.path().is_ident("private")); let skip = f.attrs.iter().any(|attr| attr.path().is_ident("skip")); if skip || ident == storage_ident { @@ -199,6 +185,17 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { let getter = format_ident!("{}", ident); let setter = format_ident!("set_{}", ident); + let setter_action = if private { + quote! { + self.#ident = value; + } + } else { + quote! { + self.#ident = value; + self.#storage_ident.update(); + } + }; + Some(quote! { pub fn #getter(&self) -> &#ty { &self.#ident @@ -208,8 +205,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { if self.#ident == value { false } else { - self.#ident = value; - self.#storage_ident.update(); + #setter_action true } } @@ -229,6 +225,39 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { .map(|f| f.ident.as_ref().unwrap()) .collect(); + let regular_fields: Vec<_> = named_fields + .iter() + .filter(|f| { + !f.attrs.iter().any(|attr| { + attr.path().is_ident("skip") + || attr.path().is_ident("private") + || attr.path().is_ident("collection") + || attr.path().is_ident("storage") + }) + }) + .map(|f| f.ident.as_ref().unwrap()) + .collect(); + + let collection_fields: Vec<_> = named_fields + .iter() + .filter(|f| { + f.attrs + .iter() + .any(|attr| attr.path().is_ident("collection")) + }) + .map(|f| f.ident.as_ref().unwrap()) + .collect(); + + let collection_field_types: Vec<_> = named_fields + .iter() + .filter(|f| { + f.attrs + .iter() + .any(|attr| attr.path().is_ident("collection")) + }) + .map(|f| f.ty.clone()) + .collect(); + let skipped_fields: Vec<_> = named_fields .iter() .filter(|f| { @@ -268,7 +297,50 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { } impl calimero_storage::entities::Data for #name { - type Child = #child_type; + fn calculate_full_merkle_hash( + &self, + interface: &calimero_storage::interface::Interface, + recalculate: bool, + ) -> Result<[u8; 32], calimero_storage::interface::StorageError> { + use calimero_storage::exports::Digest; + use calimero_storage::entities::Collection; + let mut hasher = calimero_storage::exports::Sha256::new(); + hasher.update(&self.calculate_merkle_hash()?); + + // Hash collection fields + #( + for child_id in self.#collection_fields.child_ids() { + let child = interface.find_by_id + ::<<#collection_field_types as calimero_storage::entities::Collection>::Child>(*child_id)? + .ok_or_else(|| calimero_storage::interface::StorageError::NotFound(*child_id))?; + if recalculate { + hasher.update(&child.calculate_full_merkle_hash(interface, recalculate)?); + } else { + hasher.update(&child.element().merkle_hash()); + } + + } + )* + + Ok(hasher.finalize().into()) + } + + fn calculate_merkle_hash(&self) -> Result<[u8; 32], calimero_storage::interface::StorageError> { + use calimero_storage::exports::Digest; + let mut hasher = calimero_storage::exports::Sha256::new(); + hasher.update(self.element().id().as_bytes()); + #( + hasher.update( + &borsh::to_vec(&self.#regular_fields) + .map_err(calimero_storage::interface::StorageError::SerializationError)? + ); + )* + hasher.update( + &borsh::to_vec(&self.element().metadata()) + .map_err(calimero_storage::interface::StorageError::SerializationError)? + ); + Ok(hasher.finalize().into()) + } fn element(&self) -> &calimero_storage::entities::Element { &self.#storage_ident @@ -288,3 +360,161 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { TokenStream::from(expanded) } + +/// Derives the [`Collection`](calimero_storage::entities::Collection) trait for +/// a struct. +/// +/// This macro will automatically implement the [`Collection`](calimero_storage::entities::Collection) +/// trait for the struct it's applied to. +/// +/// # Requirements +/// +/// The following are mandatory requirements for the struct: +/// +/// - A `#[children(Type)]` attribute to specify the type of the children in +/// the [`Collection`](calimero_storage::entities::Collection). +/// - A private `child_ids` field of type [`Id`](calimero_storage::address::Id). +/// This is needed as the [`Collection`](calimero_storage::entities::Collection) +/// needs to own its child IDs so that they can be serialised into the +/// [`Data`](calimero_storage::entities::Data)-based [`Element`](calimero_storage::entities::Element) +/// struct that owns the [`Collection`](calimero_storage::entities::Collection). +/// +/// # Generated implementations +/// +/// This macro will generate the following implementations: +/// +/// - [`Collection`](calimero_storage::entities::Collection) trait +/// implementation. +/// - [`BorshSerialize`](borsh::BorshSerialize) and [`BorshDeserialize`](borsh::BorshDeserialize) +/// will be implemented for the struct, so they should be omitted from the +/// struct definition. +/// +/// # Struct attributes +/// +/// * `#[children]` - A mandatory attribute to specify the child type for the +/// struct, written as `#[children(ChildType)]`. Neither the +/// attribute nor its value can be omitted. +/// +/// # Field attributes +/// +/// * `#[child_ids]` - Indicates that the field is the storage element for the +/// child ids. This is a mandatory field, and if it is +/// missing, there will be a panic during compilation. The +/// name is arbitrary, but the type has to be an [`Id`](calimero_storage::address::Id). +/// +/// # Examples +/// +/// ``` +/// use calimero_storage_macros::{AtomicUnit, Collection}; +/// use calimero_storage::address::Id; +/// use calimero_storage::entities::{Data, Element}; +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Book { +/// title: String, +/// pages: Pages, +/// #[storage] +/// storage: Element, +/// } +/// +/// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[children(Page)] +/// struct Pages { +/// #[child_ids] +/// child_ids: Vec, +/// } +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Page { +/// content: String, +/// #[storage] +/// storage: Element, +/// } +/// ``` +/// +/// # Panics +/// +/// This macro will panic during compilation if: +/// +/// - It is applied to anything other than a struct +/// - The struct has unnamed fields +/// - The `#[children(Type)]` attribute is missing or invalid +/// - The struct does not have a field annotated as `#[child_ids]` +/// +/// # See also +/// +/// * [`AtomicUnit`] - For defining a single atomic unit of data that either +/// stands alone, or owns one or more collections, or is a +/// child in a collection. +#[proc_macro_derive(Collection, attributes(children, child_ids))] +pub fn collection_derive(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as DeriveInput); + let name = &input.ident; + let child_type = input + .attrs + .iter() + .find(|attr| attr.path().is_ident("children")) + .and_then(|attr| attr.parse_args::().ok()) + .expect("Collection derive requires #[children(Type)] attribute"); + + let fields = match &input.data { + Data::Struct(data) => &data.fields, + Data::Enum(_) | Data::Union(_) => panic!("Collection can only be derived for structs"), + }; + + let named_fields = match fields { + Fields::Named(fields) => &fields.named, + Fields::Unnamed(_) | Fields::Unit => { + panic!("Collection can only be derived for structs with named fields") + } + }; + + // Find the field marked with the #[child_ids] attribute + let child_ids_field = named_fields + .iter() + .find(|f| f.attrs.iter().any(|attr| attr.path().is_ident("child_ids"))) + .expect("You must designate one field with #[child_ids] for the Collection"); + + let child_ids_ident = child_ids_field.ident.as_ref().unwrap(); + let child_ids_ty = &child_ids_field.ty; + let child_ids_type = syn::parse2::(quote! { #child_ids_ty }).unwrap(); + + let deserialize_impl = quote! { + impl borsh::BorshDeserialize for #name { + fn deserialize_reader(reader: &mut R) -> std::io::Result { + let #child_ids_ident = <#child_ids_type as borsh::BorshDeserialize>::deserialize_reader(reader)?; + Ok(Self { + #child_ids_ident, + }) + } + } + }; + + let serialize_impl = quote! { + impl borsh::BorshSerialize for #name { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + borsh::BorshSerialize::serialize(&self.#child_ids_ident, writer) + } + } + }; + + let expanded = quote! { + impl calimero_storage::entities::Collection for #name { + type Child = #child_type; + + fn child_ids(&self) -> &Vec { + &self.#child_ids_ident + } + + fn has_children(&self) -> bool { + !self.#child_ids_ident.is_empty() + } + } + + #deserialize_impl + + #serialize_impl + }; + + TokenStream::from(expanded) +} diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs index c08790ec9..41cea45e9 100644 --- a/crates/storage-macros/tests/atomic_unit.rs +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -27,44 +27,12 @@ use borsh::{to_vec, BorshDeserialize}; use calimero_storage::address::Path; -use calimero_storage::entities::{Data, Element, NoChildren}; +use calimero_storage::entities::{Data, Element}; +use calimero_storage::exports::{Digest, Sha256}; use calimero_storage::interface::Interface; use calimero_storage_macros::AtomicUnit; use calimero_test_utils::storage::create_test_store; -#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -struct Child { - content: String, - #[storage] - storage: Element, -} - -impl Child { - fn new(path: &Path) -> Self { - Self { - content: String::new(), - storage: Element::new(path), - } - } -} - -#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -#[children(Child)] -struct Parent { - title: String, - #[storage] - storage: Element, -} - -impl Parent { - fn new(path: &Path) -> Self { - Self { - title: String::new(), - storage: Element::new(path), - } - } -} - #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] struct Private { public: String, @@ -269,33 +237,73 @@ mod visibility { } #[cfg(test)] -mod hierarchy { +mod hashing { use super::*; #[test] - fn parent_child() { - let parent_path = Path::new("::root::node").unwrap(); - let mut parent = Parent::new(&parent_path); - _ = parent.set_title("Parent Title".to_owned()); + fn private_field() { + let path = Path::new("::root::node::leaf").unwrap(); + let mut unit = Private::new(&path); + + _ = unit.set_public("Public".to_owned()); + _ = unit.set_private("Private".to_owned()); + + let mut hasher = Sha256::new(); + hasher.update(unit.id().as_bytes()); + hasher.update(&to_vec(&unit.public).unwrap()); + hasher.update(&to_vec(&unit.element().metadata()).unwrap()); + let expected_hash: [u8; 32] = hasher.finalize().into(); - let child_path = Path::new("::root::node::leaf").unwrap(); - let mut child = Child::new(&child_path); - _ = child.set_content("Child Content".to_owned()); + assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); - assert_eq!(parent.title(), "Parent Title"); + _ = unit.set_private("Test 1".to_owned()); + assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); - // TODO: Add in tests for loading and checking children + _ = unit.set_public("Test 2".to_owned()); + assert_ne!(unit.calculate_merkle_hash().unwrap(), expected_hash); } #[test] - fn no_children() { - let _unit: Simple = Simple::new(&Path::new("::root::node").unwrap()); - let _: Option<::Child> = None::; + fn public_field() { + let path = Path::new("::root::node::leaf").unwrap(); + let mut unit = Simple::new(&path); + + _ = unit.set_name("Public".to_owned()); + _ = unit.set_value(42); + + let mut hasher = Sha256::new(); + hasher.update(unit.id().as_bytes()); + hasher.update(&to_vec(&unit.name).unwrap()); + hasher.update(&to_vec(&unit.value).unwrap()); + hasher.update(&to_vec(&unit.element().metadata()).unwrap()); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); } #[test] - fn compile_fail() { - trybuild::TestCases::new().compile_fail("tests/compile_fail/atomic_unit.rs"); + fn skipped_field() { + let path = Path::new("::root::node::leaf").unwrap(); + let mut unit = Skipped::new(&path); + + _ = unit.set_included("Public".to_owned()); + // Skipping fields also skips the setters + // _ = unit.set_skipped("Skipped".to_owned()); + unit.skipped = "Skipped".to_owned(); + + let mut hasher = Sha256::new(); + hasher.update(unit.id().as_bytes()); + hasher.update(&to_vec(&unit.included()).unwrap()); + hasher.update(&to_vec(&unit.element().metadata()).unwrap()); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); + + unit.skipped = "Test 1".to_owned(); + assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); + + _ = unit.set_included("Test 2".to_owned()); + assert_ne!(unit.calculate_merkle_hash().unwrap(), expected_hash); } } diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs new file mode 100644 index 000000000..d90539bb8 --- /dev/null +++ b/crates/storage-macros/tests/collection.rs @@ -0,0 +1,283 @@ +#![allow(unused_crate_dependencies, reason = "Creates a lot of noise")] +// Lints specifically disabled for integration tests +#![allow( + non_snake_case, + unreachable_pub, + clippy::cast_lossless, + clippy::cast_precision_loss, + clippy::cognitive_complexity, + clippy::default_numeric_fallback, + clippy::exhaustive_enums, + clippy::exhaustive_structs, + clippy::expect_used, + clippy::indexing_slicing, + clippy::let_underscore_must_use, + clippy::let_underscore_untyped, + clippy::missing_assert_message, + clippy::missing_panics_doc, + clippy::mod_module_files, + clippy::must_use_candidate, + clippy::panic, + clippy::print_stdout, + clippy::tests_outside_test_module, + clippy::unwrap_in_result, + clippy::unwrap_used, + reason = "Not useful in tests" +)] + +use borsh::{to_vec, BorshDeserialize}; +use calimero_storage::address::{Id, Path}; +use calimero_storage::entities::{Data, Element}; +use calimero_storage::exports::{Digest, Sha256}; +use calimero_storage::interface::Interface; +use calimero_storage_macros::{AtomicUnit, Collection}; +use calimero_test_utils::storage::create_test_store; + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Child { + content: String, + #[storage] + storage: Element, +} + +impl Child { + fn new(path: &Path) -> Self { + Self { + content: String::new(), + storage: Element::new(path), + } + } +} + +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Child)] +struct Group { + #[child_ids] + child_ids: Vec, +} + +impl Group { + fn new() -> Self { + Self { + child_ids: Vec::new(), + } + } +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Parent { + title: String, + #[collection] + children: Group, + #[storage] + storage: Element, +} + +impl Parent { + fn new(path: &Path) -> Self { + Self { + title: String::new(), + children: Group::new(), + storage: Element::new(path), + } + } +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +struct Simple { + name: String, + value: i32, + #[storage] + storage: Element, +} + +impl Simple { + fn new(path: &Path) -> Self { + Self { + name: String::new(), + value: 0, + storage: Element::new(path), + } + } +} + +#[cfg(test)] +mod hierarchy { + use super::*; + + #[test] + fn parent_child() { + let parent_path = Path::new("::root::node").unwrap(); + let mut parent = Parent::new(&parent_path); + _ = parent.set_title("Parent Title".to_owned()); + + let child_path = Path::new("::root::node::leaf").unwrap(); + let mut child = Child::new(&child_path); + _ = child.set_content("Child Content".to_owned()); + + assert_eq!(parent.title(), "Parent Title"); + + // TODO: Add in tests for loading and checking children + } + + #[test] + fn compile_fail() { + trybuild::TestCases::new().compile_fail("tests/compile_fail/collection.rs"); + } +} + +#[cfg(test)] +mod hashing { + use super::*; + + #[test] + fn calculate_full_merkle_hash__cached_values() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let mut parent = Parent::new(&Path::new("::root::node").unwrap()); + _ = parent.set_title("Parent Title".to_owned()); + assert!(interface.save(parent.id(), &mut parent).unwrap()); + assert_eq!(interface.children_of(&parent.children).unwrap(), vec![]); + + let mut child1 = Child::new(&Path::new("::root::node::leaf1").unwrap()); + let mut child2 = Child::new(&Path::new("::root::node::leaf2").unwrap()); + let mut child3 = Child::new(&Path::new("::root::node::leaf3").unwrap()); + _ = child1.set_content("Child 1 Content".to_owned()); + _ = child2.set_content("Child 2 Content".to_owned()); + _ = child3.set_content("Child 3 Content".to_owned()); + assert!(interface.save(child1.id(), &mut child1).unwrap()); + assert!(interface.save(child2.id(), &mut child2).unwrap()); + assert!(interface.save(child3.id(), &mut child3).unwrap()); + parent.children.child_ids = vec![child1.id(), child2.id(), child3.id()]; + assert!(interface.save(parent.id(), &mut parent).unwrap()); + + let mut hasher0 = Sha256::new(); + hasher0.update(parent.id().as_bytes()); + hasher0.update(&to_vec(&parent.title).unwrap()); + hasher0.update(&to_vec(&parent.element().metadata()).unwrap()); + let expected_hash0: [u8; 32] = hasher0.finalize().into(); + + let mut hasher1 = Sha256::new(); + hasher1.update(child1.id().as_bytes()); + hasher1.update(&to_vec(&child1.content).unwrap()); + hasher1.update(&to_vec(&child1.element().metadata()).unwrap()); + let expected_hash1: [u8; 32] = hasher1.finalize().into(); + let mut hasher1b = Sha256::new(); + hasher1b.update(expected_hash1); + let expected_hash1b: [u8; 32] = hasher1b.finalize().into(); + + let mut hasher2 = Sha256::new(); + hasher2.update(child2.id().as_bytes()); + hasher2.update(&to_vec(&child2.content).unwrap()); + hasher2.update(&to_vec(&child2.element().metadata()).unwrap()); + let expected_hash2: [u8; 32] = hasher2.finalize().into(); + let mut hasher2b = Sha256::new(); + hasher2b.update(expected_hash2); + let expected_hash2b: [u8; 32] = hasher2b.finalize().into(); + + let mut hasher3 = Sha256::new(); + hasher3.update(child3.id().as_bytes()); + hasher3.update(&to_vec(&child3.content).unwrap()); + hasher3.update(&to_vec(&child3.element().metadata()).unwrap()); + let expected_hash3: [u8; 32] = hasher3.finalize().into(); + let mut hasher3b = Sha256::new(); + hasher3b.update(expected_hash3); + let expected_hash3b: [u8; 32] = hasher3b.finalize().into(); + + let mut hasher = Sha256::new(); + hasher.update(&expected_hash0); + hasher.update(&expected_hash1b); + hasher.update(&expected_hash2b); + hasher.update(&expected_hash3b); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(parent.calculate_merkle_hash().unwrap(), expected_hash0); + assert_eq!( + child1 + .calculate_full_merkle_hash(&interface, false) + .unwrap(), + expected_hash1b + ); + assert_eq!( + child2 + .calculate_full_merkle_hash(&interface, false) + .unwrap(), + expected_hash2b + ); + assert_eq!( + child3 + .calculate_full_merkle_hash(&interface, false) + .unwrap(), + expected_hash3b + ); + assert_eq!( + parent + .calculate_full_merkle_hash(&interface, false) + .unwrap(), + expected_hash + ); + } + + #[test] + #[ignore] + fn calculate_full_merkle_hash__recalculated_values() { + // TODO: Later, tests should be added for recalculating the hashes, and + // TODO: especially checking when the data has been interfered with or + // TODO: otherwise arrived at an invalid state. + todo!() + } + + #[test] + fn calculate_merkle_hash__child() { + let mut child = Child::new(&Path::new("::root::node::leaf").unwrap()); + _ = child.set_content("Child Content".to_owned()); + + let mut hasher = Sha256::new(); + hasher.update(child.id().as_bytes()); + hasher.update(&to_vec(&child.content).unwrap()); + hasher.update(&to_vec(&child.element().metadata()).unwrap()); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(child.calculate_merkle_hash().unwrap(), expected_hash); + } + + #[test] + fn calculate_merkle_hash__parent() { + let mut parent = Parent::new(&Path::new("::root::node").unwrap()); + _ = parent.set_title("Parent Title".to_owned()); + + let mut hasher = Sha256::new(); + hasher.update(parent.id().as_bytes()); + hasher.update(&to_vec(&parent.title).unwrap()); + hasher.update(&to_vec(&parent.element().metadata()).unwrap()); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(parent.calculate_merkle_hash().unwrap(), expected_hash); + } +} + +#[cfg(test)] +mod traits { + use super::*; + + #[test] + fn serialization_and_deserialization() { + let path = Path::new("::root::node").unwrap(); + let mut unit = Simple::new(&path); + + _ = unit.set_name("Test Name".to_owned()); + _ = unit.set_value(42); + + let serialized = to_vec(&unit).unwrap(); + let deserialized = Simple::try_from_slice(&serialized).unwrap(); + + assert_eq!(unit, deserialized); + assert_eq!(unit.id(), deserialized.id()); + assert_eq!(unit.name(), deserialized.name()); + assert_eq!(unit.path(), deserialized.path()); + assert_eq!(unit.value(), deserialized.value()); + assert_eq!(unit.element().id(), deserialized.element().id()); + assert_eq!(unit.element().path(), deserialized.element().path()); + assert_eq!(unit.element().metadata(), deserialized.element().metadata()); + } +} diff --git a/crates/storage-macros/tests/compile_fail/atomic_unit.rs b/crates/storage-macros/tests/compile_fail/collection.rs similarity index 52% rename from crates/storage-macros/tests/compile_fail/atomic_unit.rs rename to crates/storage-macros/tests/compile_fail/collection.rs index 21e755fa4..c61689154 100644 --- a/crates/storage-macros/tests/compile_fail/atomic_unit.rs +++ b/crates/storage-macros/tests/compile_fail/collection.rs @@ -1,7 +1,7 @@ -use calimero_storage::address::Path; +use calimero_storage::address::{Id, Path}; use calimero_storage::entities::Element; use calimero_storage::interface::Interface; -use calimero_storage_macros::AtomicUnit; +use calimero_storage_macros::{AtomicUnit, Collection}; use calimero_test_utils::storage::create_test_store; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] @@ -10,9 +10,16 @@ struct Child { storage: Element, } -#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] #[children(Child)] +struct Group { + #[child_ids] + child_ids: Vec, +} + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] struct Parent { + group: Group, #[storage] storage: Element, } @@ -21,10 +28,13 @@ fn main() { fn child_type_specification() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); - let parent: Parent = Parent { storage: Element::new(&Path::new("::root::node").unwrap()) }; - let _: Vec = interface.children_of(&parent).unwrap(); + let parent: Parent = Parent { + group: Group { child_ids: vec![] }, + storage: Element::new(&Path::new("::root::node").unwrap()), + }; + let _: Vec = interface.children_of(&parent.group).unwrap(); // This should fail to compile if the child type is incorrect - let _: Vec = interface.children_of(&parent).unwrap(); + let _: Vec = interface.children_of(&parent.group).unwrap(); } } diff --git a/crates/storage-macros/tests/compile_fail/atomic_unit.stderr b/crates/storage-macros/tests/compile_fail/collection.stderr similarity index 57% rename from crates/storage-macros/tests/compile_fail/atomic_unit.stderr rename to crates/storage-macros/tests/compile_fail/collection.stderr index c2c726ae9..a085fd1bc 100644 --- a/crates/storage-macros/tests/compile_fail/atomic_unit.stderr +++ b/crates/storage-macros/tests/compile_fail/collection.stderr @@ -1,8 +1,8 @@ error[E0308]: mismatched types - --> tests/compile_fail/atomic_unit.rs:28:30 + --> tests/compile_fail/collection.rs:38:30 | -28 | let _: Vec = interface.children_of(&parent).unwrap(); - | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` +38 | let _: Vec = interface.children_of(&parent.group).unwrap(); + | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` | | | expected due to this | diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 1e5b42266..ae2f9d701 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -21,6 +21,7 @@ calimero-store = { path = "../store", features = ["datatypes"] } claims.workspace = true hex.workspace = true +calimero-storage-macros = { path = "../storage-macros" } calimero-test-utils = { path = "../test-utils" } [lints] diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index b50d1211e..0b99d2e87 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -6,7 +6,7 @@ //! the storage system. These are the building blocks that are used to construct //! the hierarchy of the storage, and to apply updates to the elements. //! -//! # Design +//! # Design: Elements, data, and atomic units //! //! There are a number of requirements that need to be catered for by the //! solution, and it is worth exploring some of the possible structures and @@ -186,6 +186,27 @@ //! user interface over that of the internals — if there are a couple of hoops //! to jump through then it is best for these to be in the library code. //! +//! # Design: Collections +//! +//! There are three main ways to implement the collection functionality, i.e. +//! where a parent [`Element`] has children. These are: +//! +//! 1. **Struct-based**: Annotate the struct as being a `Collection`, meaning +//! it can then have children. In this situation the child type is supplied +//! as an associated type. This is the most straightforward approach, but +//! it does not allow for the parent to have multiple types of children. +//! +//! 2. **Enum-based**: E.g. `enum ChildType { Page(Page), Author(Author) }`. +//! This is more flexible, but it requires a match to determine the child +//! type, and although the type formality is good in some ways, it adds +//! a level of complexity and maintenance that is not desirable. +//! +//! 3. **Field-based**: E.g. `entity.pages` and `entity.authors` annotated as +//! `Collection`, with some way to look up which fields are needed. This is +//! the most flexible, and the easiest developer interface to use. +//! +//! The approach taken is Option 3, for the reasons given above. +//! #[cfg(test)] #[path = "tests/entities.rs"] @@ -197,6 +218,7 @@ use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{BorshDeserialize, BorshSerialize}; use crate::address::{Id, Path}; +use crate::interface::{Interface, StorageError}; /// Represents an atomic unit in the storage system. /// @@ -206,8 +228,96 @@ use crate::address::{Id, Path}; /// /// This is a marker trait, and does not have any special functionality. /// +/// # Examples +/// +/// ``` +/// use calimero_storage::entities::Element; +/// use calimero_storage_macros::AtomicUnit; +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Page { +/// title: String, +/// #[private] +/// secret: String, +/// #[storage] +/// storage: Element, +/// } +/// ``` +/// pub trait AtomicUnit: Data {} +/// A collection of child elements in the storage system. +/// +/// [`Collection`]s are logical groupings of child [`Element`]s. They do not +/// have their own storage or [`Element`], but instead provide a way to +/// logically group and access child elements of a specific type. +/// +/// # Examples +/// +/// ``` +/// use calimero_storage_macros::{AtomicUnit, Collection}; +/// use calimero_storage::address::Id; +/// use calimero_storage::entities::{Data, Element}; +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Book { +/// title: String, +/// pages: Pages, +/// #[storage] +/// storage: Element, +/// } +/// +/// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[children(Page)] +/// struct Pages { +/// #[child_ids] +/// child_ids: Vec, +/// } +/// +/// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// struct Page { +/// content: String, +/// #[storage] +/// storage: Element, +/// } +/// ``` +/// +pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { + /// The associated type of any children that the [`Collection`] may have. + type Child: Data; + + /// The unique identifiers of the children of the [`Collection`]. + /// + /// This gets only the IDs of the children of the [`Collection`], which are + /// the [`Element`]s that are directly below the [`Collection`] in the + /// hierarchy. + /// + /// The order of the IDs is not guaranteed to be stable between calls. + /// + /// This is considered somewhat temporary, as there are efficiency gains to + /// be made by storing this list elsewhere — but for now, it helps to get + /// the data in place and usable, and establish a basis to test against and + /// enhance. + /// + /// TODO: This method will likely move to the [`Interface`] when the index + /// is implemented. + /// + #[must_use] + fn child_ids(&self) -> &Vec; + + /// Whether the [`Collection`] has children. + /// + /// This checks whether the [`Collection`] has children, which are the + /// [`Element`]s that are directly below the [`Collection`] in the + /// hierarchy. + /// + /// TODO: This method will likely move to the [`Interface`] when the index + /// is implemented. + /// + #[must_use] + fn has_children(&self) -> bool; +} + /// The primary data for the [`Element`]. /// /// This is the primary data for the [`Element`], that is, the data that the @@ -230,12 +340,61 @@ pub trait AtomicUnit: Data {} pub trait Data: BorshDeserialize + BorshSerialize + Clone + Debug + PartialEq + PartialOrd + Send + Sync { - /// The associated type of any children that the [`Element`] may have. If - /// the node type is not one that can have any children, the [`NoChildren`] - /// type can be used. *Note that this is potentially a temporary measure to - /// allow for a simplified initial implementation of child functionality, - /// and will be refined in forthcoming iterations.* - type Child: Data; + /// Calculates the Merkle hash of the [`Element`], including descendants. + /// + /// This method calculates the Merkle hash of the [`Data`] for the + /// [`Element`], which should be based on any regular and collection fields, + /// but ignore skipped fields, private fields, and the storage field. + /// + /// Specifically, this should include the hashes of the children of the + /// various collection fields. + /// + /// # Parameters + /// + /// * `interface` - The [`Interface`] to use for looking up children. + /// * `recalculate` - Whether to recalculate or use the cached value for + /// child hashes. Under normal circumstances, the cached + /// value should be used, as it is more efficient. The + /// option to recalculate is provided for situations when + /// the entire subtree needs revalidating. + /// + /// # Errors + /// + /// This method will return an error if there is a problem calculating the + /// hash, or looking up children. + /// + /// # See also + /// + /// * [`calculate_merkle_hash()`](Data::calculate_merkle_hash()) + /// + fn calculate_full_merkle_hash( + &self, + interface: &Interface, + recalculate: bool, + ) -> Result<[u8; 32], StorageError>; + + /// Calculates the Merkle hash of the [`Element`]. + /// + /// This method calculates the Merkle hash of the [`Data`] for the + /// [`Element`], which should be based on any regular fields, but ignore + /// skipped fields, private fields, collections, and the storage field (but + /// include the metadata). + /// + /// **IMPORTANT NOTE**: Collection fields do need to be included in the hash + /// calculation, but that is a job for the caller to combine, and this + /// method therefore only calculates the hash of available data (as hashing + /// the children would involve recursive lookups). + /// + /// # Errors + /// + /// This method will return an error if there is a problem calculating the + /// hash. + /// + /// # See also + /// + /// * [`calculate_full_merkle_hash()`](Data::calculate_full_merkle_hash()) + /// + fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError>; /// The associated [`Element`]. /// @@ -298,8 +457,8 @@ pub trait Data: /// /// Note, this is modelled as a single entity called "Element" rather than /// separating into separate "Node" and "Leaf" entities, to simplify the -/// handling via the storage [`Interface`](crate::interface::Interface). The -/// actual nature of the [`Element`] can be determined by inspection. +/// handling via the storage [`Interface`]. The actual nature of the [`Element`] +/// can be determined by inspection. /// /// # Updates /// @@ -374,12 +533,6 @@ pub struct Element { /// The unique identifier for the [`Element`]. id: Id, - /// The unique identifiers of the children of the [`Element`]. This is - /// considered somewhat temporary, as there are efficiency gains to be made - /// by storing this list elsewhere — but for now, it helps to get the data - /// in place and usable, and establish a basis to test against and enhance. - pub(crate) child_ids: Vec, - /// Whether the [`Element`] is dirty, i.e. has been modified since it was /// last saved. pub(crate) is_dirty: bool, @@ -443,7 +596,6 @@ impl Element { .as_nanos() as u64; Self { id: Id::new(), - child_ids: Vec::new(), is_dirty: true, metadata: Metadata { created_at: timestamp, @@ -454,38 +606,12 @@ impl Element { } } - /// The unique identifiers of the children of the [`Element`]. - /// - /// This gets only the IDs of the children of the [`Element`], which are the - /// [`Element`]s that are directly below this [`Element`] in the hierarchy. - /// - /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) - /// when the index is implemented. - /// - #[must_use] - pub fn child_ids(&self) -> Vec { - self.child_ids.clone() - } - /// The timestamp when the [`Element`] was first created. #[must_use] pub const fn created_at(&self) -> u64 { self.metadata.created_at } - /// Whether the [`Element`] has children. - /// - /// This checks whether the [`Element`] has children, which are the - /// [`Element`]s that are directly below this [`Element`] in the hierarchy. - /// - /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) - /// when the index is implemented. - /// - #[must_use] - pub fn has_children(&self) -> bool { - !self.child_ids.is_empty() - } - /// The unique identifier for the [`Element`]. /// /// This is the unique identifier for the [`Element`], which can always be @@ -509,6 +635,12 @@ impl Element { self.is_dirty } + /// Current Merkle hash of the [`Element`]. + #[must_use] + pub const fn merkle_hash(&self) -> [u8; 32] { + self.merkle_hash + } + /// The metadata for the [`Element`]. /// /// This gets the metadata for the [`Element`]. This represents a range of @@ -641,32 +773,3 @@ impl Metadata { self.created_at = created_at; } } - -/// A [`Data`] type that has no children. -/// -/// This is a special type to represent the type of the children of a [`Data`] -/// type that has no children, in the absence of being able to use something -/// like `None` to represent no type. -/// -/// *Note that this is potentially a temporary measure to allow for a simplified -/// initial implementation of child functionality, and will be refined in -/// forthcoming iterations.* -/// -#[derive(BorshDeserialize, BorshSerialize, Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)] -#[expect( - clippy::exhaustive_structs, - reason = "Exhaustive - this will never have fields" -)] -pub struct NoChildren; - -impl Data for NoChildren { - type Child = Self; - - fn element(&self) -> &Element { - unimplemented!() - } - - fn element_mut(&mut self) -> &mut Element { - unimplemented!() - } -} diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 750b0955a..30dfa4c37 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -23,11 +23,10 @@ use calimero_store::slice::Slice; use calimero_store::Store; use eyre::Report; use parking_lot::RwLock; -use sha2::{Digest, Sha256}; use thiserror::Error as ThisError; use crate::address::{Id, Path}; -use crate::entities::Data; +use crate::entities::{Collection, Data}; /// The primary interface for the storage system. #[derive(Debug, Clone)] @@ -86,28 +85,30 @@ impl Interface { /// present (as it obviously should not contribute to the hash, i.e. /// itself). /// + /// Note that private data is not considered significant, as it is not part + /// of the shared state, and therefore does not contribute to the hash. + /// /// # Parameters /// - /// * `element` - The [`Element`](crate::entities::Element) to calculate the - /// Merkle hash for. + /// * `element` - The [`Element`](crate::entities::Element) to calculate + /// the Merkle hash for. + /// * `recalculate` - Whether to recalculate or use the cached value for + /// child hashes. Under normal circumstances, the cached + /// value should be used, as it is more efficient. The + /// option to recalculate is provided for situations when + /// the entire subtree needs revalidating. /// /// # Errors /// /// If there is a problem in serialising the data, an error will be /// returned. /// - pub fn calculate_merkle_hash_for(&self, entity: &D) -> Result<[u8; 32], StorageError> { - let mut hasher = Sha256::new(); - hasher.update(entity.id().as_bytes()); - hasher.update(&to_vec(&entity).map_err(StorageError::SerializationError)?); - hasher - .update(&to_vec(&entity.element().metadata).map_err(StorageError::SerializationError)?); - - for child in self.children_of(entity)? { - hasher.update(child.element().merkle_hash); - } - - Ok(hasher.finalize().into()) + pub fn calculate_merkle_hash_for( + &self, + entity: &D, + recalculate: bool, + ) -> Result<[u8; 32], StorageError> { + entity.calculate_full_merkle_hash(self, recalculate) } /// The children of the [`Element`](crate::entities::Element). @@ -154,10 +155,13 @@ impl Interface { /// [`Element`](crate::entities::Element) cannot be found, an error will be /// returned. /// - pub fn children_of(&self, entity: &D) -> Result, StorageError> { + pub fn children_of( + &self, + collection: &C, + ) -> Result, StorageError> { let mut children = Vec::new(); - for id in entity.element().child_ids() { - children.push(self.find_by_id(id)?.ok_or(StorageError::NotFound(id))?); + for id in collection.child_ids() { + children.push(self.find_by_id(*id)?.ok_or(StorageError::NotFound(*id))?); } Ok(children) } @@ -320,7 +324,7 @@ impl Interface { } // TODO: Need to propagate the change up the tree, i.e. trigger a // TODO: recalculation for the ancestors. - entity.element_mut().merkle_hash = self.calculate_merkle_hash_for(entity)?; + entity.element_mut().merkle_hash = self.calculate_merkle_hash_for(entity, false)?; // TODO: It seems fairly bizarre/unexpected that the put() method is sync // TODO: and not async. The reasons and intentions need checking here, in diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index fd0960e53..59b539781 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -65,8 +65,18 @@ pub mod address; pub mod entities; pub mod interface; +/// Re-exported types, mostly for use in macros (for convenience). +pub mod exports { + pub use sha2::{Digest, Sha256}; +} + /// Shared test functionality. #[cfg(test)] pub mod tests { pub mod common; } + +#[cfg(test)] +mod doc_tests_package_usage { + use calimero_storage_macros as _; +} diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index c0d944a09..6d6411e09 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -1,9 +1,11 @@ use std::sync::LazyLock; -use borsh::{BorshDeserialize, BorshSerialize}; +use borsh::{to_vec, BorshDeserialize, BorshSerialize}; +use sha2::{Digest, Sha256}; use crate::address::Id; -use crate::entities::{Data, Element, NoChildren}; +use crate::entities::{AtomicUnit, Collection, Data, Element}; +use crate::interface::{Interface, StorageError}; /// A set of non-empty test UUIDs. pub const TEST_UUID: [[u8; 16]; 5] = [ @@ -32,7 +34,22 @@ pub struct EmptyData { } impl Data for EmptyData { - type Child = NoChildren; + fn calculate_full_merkle_hash( + &self, + _interface: &Interface, + _recalculate: bool, + ) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(&self.calculate_merkle_hash()?); + Ok(hasher.finalize().into()) + } + + fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(self.element().id().as_bytes()); + hasher.update(&to_vec(&self.element().metadata).map_err(StorageError::SerializationError)?); + Ok(hasher.finalize().into()) + } fn element(&self) -> &Element { &self.storage @@ -47,6 +64,7 @@ impl Data for EmptyData { #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] pub struct Page { pub title: String, + pub paragraphs: Paragraphs, pub storage: Element, } @@ -55,13 +73,45 @@ impl Page { pub fn new_from_element(title: &str, element: Element) -> Self { Self { title: title.to_owned(), + paragraphs: Paragraphs::new(), storage: element, } } } +impl AtomicUnit for Page {} + impl Data for Page { - type Child = Paragraph; + fn calculate_full_merkle_hash( + &self, + interface: &Interface, + recalculate: bool, + ) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(&self.calculate_merkle_hash()?); + + // Hash collection fields + for child_id in self.paragraphs.child_ids() { + let child = interface + .find_by_id::<::Child>(*child_id)? + .ok_or_else(|| StorageError::NotFound(*child_id))?; + if recalculate { + hasher.update(&child.calculate_full_merkle_hash(interface, recalculate)?); + } else { + hasher.update(&child.element().merkle_hash()); + } + } + + Ok(hasher.finalize().into()) + } + + fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(self.element().id().as_bytes()); + hasher.update(&to_vec(&self.title).map_err(StorageError::SerializationError)?); + hasher.update(&to_vec(&self.element().metadata).map_err(StorageError::SerializationError)?); + Ok(hasher.finalize().into()) + } fn element(&self) -> &Element { &self.storage @@ -89,8 +139,26 @@ impl Paragraph { } } +impl AtomicUnit for Paragraph {} + impl Data for Paragraph { - type Child = NoChildren; + fn calculate_full_merkle_hash( + &self, + _interface: &Interface, + _recalculate: bool, + ) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(&self.calculate_merkle_hash()?); + Ok(hasher.finalize().into()) + } + + fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(self.element().id().as_bytes()); + hasher.update(&to_vec(&self.text).map_err(StorageError::SerializationError)?); + hasher.update(&to_vec(&self.element().metadata).map_err(StorageError::SerializationError)?); + Ok(hasher.finalize().into()) + } fn element(&self) -> &Element { &self.storage @@ -101,6 +169,31 @@ impl Data for Paragraph { } } +/// A collection of paragraphs for a page. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] +pub struct Paragraphs { + pub child_ids: Vec, +} + +impl Paragraphs { + /// Creates a new paragraph collection. + pub fn new() -> Self { + Self { child_ids: vec![] } + } +} + +impl Collection for Paragraphs { + type Child = Paragraph; + + fn child_ids(&self) -> &Vec { + &self.child_ids + } + + fn has_children(&self) -> bool { + !self.child_ids.is_empty() + } +} + /// A simple person example struct. No children. #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] pub struct Person { @@ -110,7 +203,24 @@ pub struct Person { } impl Data for Person { - type Child = NoChildren; + fn calculate_full_merkle_hash( + &self, + _interface: &Interface, + _recalculate: bool, + ) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(&self.calculate_merkle_hash()?); + Ok(hasher.finalize().into()) + } + + fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { + let mut hasher = Sha256::new(); + hasher.update(self.element().id().as_bytes()); + hasher.update(&to_vec(&self.name).map_err(StorageError::SerializationError)?); + hasher.update(&to_vec(&self.age).map_err(StorageError::SerializationError)?); + hasher.update(&to_vec(&self.element().metadata).map_err(StorageError::SerializationError)?); + Ok(hasher.finalize().into()) + } fn element(&self) -> &Element { &self.storage diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index edd650eaa..11ce8dded 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -1,14 +1,148 @@ +use borsh::to_vec; use calimero_test_utils::storage::create_test_store; use claims::{assert_ge, assert_le}; +use sha2::{Digest, Sha256}; use super::*; use crate::interface::Interface; -use crate::tests::common::Person; +use crate::tests::common::{Page, Paragraph, Paragraphs, Person}; + +#[cfg(test)] +mod collection__public_methods { + use super::*; + + #[test] + fn child_ids() { + let child_ids = vec![Id::new(), Id::new(), Id::new()]; + let mut paras = Paragraphs::new(); + paras.child_ids = child_ids.clone(); + assert_eq!(paras.child_ids(), ¶s.child_ids); + assert_eq!(paras.child_ids(), &child_ids); + } + + #[test] + fn has_children() { + let mut paras = Paragraphs::new(); + assert!(!paras.has_children()); + + let child_ids = vec![Id::new(), Id::new(), Id::new()]; + paras.child_ids = child_ids; + assert!(paras.has_children()); + } +} #[cfg(test)] mod data__public_methods { use super::*; + #[test] + fn calculate_full_merkle_hash__cached_values() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", element); + assert!(interface.save(page.id(), &mut page).unwrap()); + assert_eq!(interface.children_of(&page.paragraphs).unwrap(), vec![]); + + let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); + let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); + let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para2 = Paragraph::new_from_element("Leaf2", child2); + let mut para3 = Paragraph::new_from_element("Leaf3", child3); + assert!(interface.save(para1.id(), &mut para1).unwrap()); + assert!(interface.save(para2.id(), &mut para2).unwrap()); + assert!(interface.save(para3.id(), &mut para3).unwrap()); + page.paragraphs.child_ids = vec![para1.id(), para2.id(), para3.id()]; + assert!(interface.save(page.id(), &mut page).unwrap()); + + let mut hasher0 = Sha256::new(); + hasher0.update(page.id().as_bytes()); + hasher0.update(&to_vec(&page.title).unwrap()); + hasher0.update(&to_vec(&page.element().metadata).unwrap()); + let expected_hash0: [u8; 32] = hasher0.finalize().into(); + + let mut hasher1 = Sha256::new(); + hasher1.update(para1.id().as_bytes()); + hasher1.update(&to_vec(¶1.text).unwrap()); + hasher1.update(&to_vec(¶1.element().metadata).unwrap()); + let expected_hash1: [u8; 32] = hasher1.finalize().into(); + let mut hasher1b = Sha256::new(); + hasher1b.update(expected_hash1); + let expected_hash1b: [u8; 32] = hasher1b.finalize().into(); + + let mut hasher2 = Sha256::new(); + hasher2.update(para2.id().as_bytes()); + hasher2.update(&to_vec(¶2.text).unwrap()); + hasher2.update(&to_vec(¶2.element().metadata).unwrap()); + let expected_hash2: [u8; 32] = hasher2.finalize().into(); + let mut hasher2b = Sha256::new(); + hasher2b.update(expected_hash2); + let expected_hash2b: [u8; 32] = hasher2b.finalize().into(); + + let mut hasher3 = Sha256::new(); + hasher3.update(para3.id().as_bytes()); + hasher3.update(&to_vec(¶3.text).unwrap()); + hasher3.update(&to_vec(¶3.element().metadata).unwrap()); + let expected_hash3: [u8; 32] = hasher3.finalize().into(); + let mut hasher3b = Sha256::new(); + hasher3b.update(expected_hash3); + let expected_hash3b: [u8; 32] = hasher3b.finalize().into(); + + let mut hasher = Sha256::new(); + hasher.update(&expected_hash0); + hasher.update(&expected_hash1b); + hasher.update(&expected_hash2b); + hasher.update(&expected_hash3b); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(page.calculate_merkle_hash().unwrap(), expected_hash0); + assert_eq!( + para1.calculate_full_merkle_hash(&interface, false).unwrap(), + expected_hash1b + ); + assert_eq!( + para2.calculate_full_merkle_hash(&interface, false).unwrap(), + expected_hash2b + ); + assert_eq!( + para3.calculate_full_merkle_hash(&interface, false).unwrap(), + expected_hash3b + ); + assert_eq!( + page.calculate_full_merkle_hash(&interface, false).unwrap(), + expected_hash + ); + } + + #[test] + #[ignore] + fn calculate_full_merkle_hash__recalculated_values() { + // TODO: Later, tests should be added for recalculating the hashes, and + // TODO: especially checking when the data has been interfered with or + // TODO: otherwise arrived at an invalid state. + todo!() + } + + #[test] + fn calculate_merkle_hash() { + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let person = Person { + name: "Alice".to_owned(), + age: 30, + storage: element.clone(), + }; + + let mut hasher = Sha256::new(); + hasher.update(person.id().as_bytes()); + hasher.update(&to_vec(&person.name).unwrap()); + hasher.update(&to_vec(&person.age).unwrap()); + hasher.update(&to_vec(&person.element().metadata).unwrap()); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(person.calculate_merkle_hash().unwrap(), expected_hash); + } + #[test] fn element() { let path = Path::new("::root::node::leaf").unwrap(); @@ -92,15 +226,6 @@ mod element__constructor { mod element__public_methods { use super::*; - #[test] - fn child_ids() { - let child_ids = vec![Id::new(), Id::new(), Id::new()]; - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - element.child_ids = child_ids.clone(); - assert_eq!(element.child_ids(), element.child_ids); - assert_eq!(element.child_ids(), child_ids); - } - #[test] fn created_at() { let timestamp1 = SystemTime::now() @@ -116,16 +241,6 @@ mod element__public_methods { assert_le!(element.created_at(), timestamp2); } - #[test] - fn has_children() { - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - assert!(!element.has_children()); - - let child_ids = vec![Id::new(), Id::new(), Id::new()]; - element.child_ids = child_ids; - assert!(element.has_children()); - } - #[test] fn id() { let path = Path::new("::root::node::leaf").unwrap(); @@ -152,6 +267,25 @@ mod element__public_methods { assert!(person.element().is_dirty()); } + #[test] + fn merkle_hash() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let mut person = Person { + name: "Steve".to_owned(), + age: 50, + storage: element.clone(), + }; + let expected_hash = person + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + assert_ne!(person.element().merkle_hash(), expected_hash); + + assert!(interface.save(person.element().id(), &mut person).unwrap()); + assert_eq!(person.element().merkle_hash(), expected_hash); + } + #[test] #[ignore] fn metadata() { diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 8cf290706..f4a2f1756 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -33,10 +33,10 @@ mod interface__public_methods { storage: element.clone(), }; - let hash = interface.calculate_merkle_hash_for(&data).unwrap(); + let hash = interface.calculate_merkle_hash_for(&data, false).unwrap(); assert_eq!( hex::encode(hash), - "aefc29aae587eb4a3bc44cb29dc30624db9936566aa2f0d0df1cd07793a94e6e" + "173f9a17aa3c6acdad8cdaf06cea4aa4eb7c87cb99e07507a417d6588e679607" ); } @@ -69,24 +69,24 @@ mod interface__public_methods { assert!(interface.save(para1.id(), &mut para1).unwrap()); assert!(interface.save(para2.id(), &mut para2).unwrap()); assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.element_mut().child_ids = vec![para1.id(), para2.id(), para3.id()]; + page.paragraphs.child_ids = vec![para1.id(), para2.id(), para3.id()]; assert!(interface.save(page.id(), &mut page).unwrap()); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶1).unwrap()), - "a93a438ee86aee5ae8b89207e41dff50aa4c7a2e4854bebb56399dd78cbb1b3c", + hex::encode(interface.calculate_merkle_hash_for(¶1, false).unwrap()), + "9c4d6363cca5bdb5829f0aa832b573d6befd26227a0e2c3cc602edd9fda88db1", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶2).unwrap()), - "c3800c5d62756a45d03934b150526728a4e2d880274c04dda8a2c574847c8639", + hex::encode(interface.calculate_merkle_hash_for(¶2, false).unwrap()), + "449f30903c94a488f1767b91bc6626fafd82189130cf41e427f96df19a727d8b", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶3).unwrap()), - "ce9ec97a0f52e9a2ecfd0e7e5c35da4330746d22c373d65f9ff28c4931ea1210", + hex::encode(interface.calculate_merkle_hash_for(¶3, false).unwrap()), + "43098decf78bf10dc4c31191a5f59d277ae524859583e48689482c9ba85c5f61", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&page).unwrap()), - "9b042f16801a9acfe607b01e626f5642ce15d5da893d00a19d751f48caccc5e6", + hex::encode(interface.calculate_merkle_hash_for(&page, false).unwrap()), + "7593806c462bfadd97ed5228a3a60e492cce4b725f2c0e72e6e5b0f7996ee394", ); } @@ -97,7 +97,7 @@ mod interface__public_methods { let element = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", element); assert!(interface.save(page.id(), &mut page).unwrap()); - assert_eq!(interface.children_of(&page).unwrap(), vec![]); + assert_eq!(interface.children_of(&page.paragraphs).unwrap(), vec![]); let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); @@ -108,10 +108,10 @@ mod interface__public_methods { assert!(interface.save(para1.id(), &mut para1).unwrap()); assert!(interface.save(para2.id(), &mut para2).unwrap()); assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.element_mut().child_ids = vec![para1.id(), para2.id(), para3.id()]; + page.paragraphs.child_ids = vec![para1.id(), para2.id(), para3.id()]; assert!(interface.save(page.id(), &mut page).unwrap()); assert_eq!( - interface.children_of(&page).unwrap(), + interface.children_of(&page.paragraphs).unwrap(), vec![para1, para2, para3] ); } From e9a4196da3753ae1dd0143e33058d5563ccf418c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 15 Oct 2024 01:20:54 +0100 Subject: [PATCH 08/75] feat: Interface sync (#768) Added ChildInfo - Added a ChildInfo struct to encapsulate basic information about the children of an Element, which needs to be stored with the Element. At present this is the child Element's ID and Merkle hash. - Renamed the child_ids() method and #[child_ids] field attribute to child_info. - Amended the AtomicUnit implementation of Interface.calculate_full_merkle_hash() to only load from the database if recursing, and to otherwise use the now-available stored hash. Added Data.collections() - Added a collections() method to the Data trait, to return a list of all collections with ChildInfo for all their children. Added Interface.compare_trees() - Added an Action enum to represent the various actions that can be required as a result of tree comparison, in order to sync. - Added Interface.compare_trees() to perform a comparison on tree data and emit local and remote action lists. - Added documentation to explain the design choices behind the implemented approach. Added Interface.apply_action() - Added an Interface.apply_action() method, to carry out CRDT actions. - Added entity payload to Action::Add and Action::Update. - Added a new Interface::find_by_id_raw() function to find without deserialising, for efficient passthrough (prevents reserialising). --- Cargo.lock | 31 ++ Cargo.toml | 1 + crates/storage-macros/src/lib.rs | 74 +-- crates/storage-macros/tests/collection.rs | 16 +- .../tests/compile_fail/collection.rs | 10 +- crates/storage/Cargo.toml | 2 + crates/storage/src/entities.rs | 95 +++- crates/storage/src/interface.rs | 473 +++++++++++++++++- crates/storage/src/tests/common.rs | 42 +- crates/storage/src/tests/entities.rs | 102 +++- crates/storage/src/tests/interface.rs | 307 +++++++++++- 11 files changed, 1061 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1c944d353..9ea9c1e3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1132,6 +1132,7 @@ dependencies = [ "sha2", "thiserror", "uuid 1.10.0", + "velcro", ] [[package]] @@ -8310,6 +8311,36 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "velcro" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c6a51883ba1034757307e06dc4856cd5439ecf6804ce6c90d13d49496196fc" +dependencies = [ + "velcro_macros", +] + +[[package]] +name = "velcro_core" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "742cf45d07989b7614877e083602a8973890c75a81f47216b238d2f326ec916c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "velcro_macros" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b23c806d7b49977e6e12ee6d120ac01dcab702b51c652fdf1a6709ab5b8868c" +dependencies = [ + "syn 1.0.109", + "velcro_core", +] + [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index 320f7288d..0186341fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -121,6 +121,7 @@ trybuild = "1.0" ureq = "2.9.7" url = "2.5.2" uuid = { version = "1.10.0", features = ["v4"] } +velcro = "0.5.4" wasmer = "4.2.5" wasmer-types = "4.2.5" web3 = "0.19.0" diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index 1bfae61a9..980cd4c6e 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -309,14 +309,14 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { // Hash collection fields #( - for child_id in self.#collection_fields.child_ids() { - let child = interface.find_by_id - ::<<#collection_field_types as calimero_storage::entities::Collection>::Child>(*child_id)? - .ok_or_else(|| calimero_storage::interface::StorageError::NotFound(*child_id))?; + for info in self.#collection_fields.child_info() { if recalculate { + let child = interface.find_by_id + ::<<#collection_field_types as calimero_storage::entities::Collection>::Child>(info.id())? + .ok_or_else(|| calimero_storage::interface::StorageError::NotFound(info.id()))?; hasher.update(&child.calculate_full_merkle_hash(interface, recalculate)?); } else { - hasher.update(&child.element().merkle_hash()); + hasher.update(&info.merkle_hash()); } } @@ -342,6 +342,18 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { Ok(hasher.finalize().into()) } + fn collections(&self) -> std::collections::HashMap> { + use calimero_storage::entities::Collection; + let mut collections = std::collections::HashMap::new(); + #( + collections.insert( + stringify!(#collection_fields).to_owned(), + self.#collection_fields.child_info().clone() + ); + )* + collections + } + fn element(&self) -> &calimero_storage::entities::Element { &self.#storage_ident } @@ -373,7 +385,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// /// - A `#[children(Type)]` attribute to specify the type of the children in /// the [`Collection`](calimero_storage::entities::Collection). -/// - A private `child_ids` field of type [`Id`](calimero_storage::address::Id). +/// - A private `child_info` field of type [`ChildInfo`](calimero_storage::entities::ChildInfo). /// This is needed as the [`Collection`](calimero_storage::entities::Collection) /// needs to own its child IDs so that they can be serialised into the /// [`Data`](calimero_storage::entities::Data)-based [`Element`](calimero_storage::entities::Element) @@ -397,17 +409,17 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// /// # Field attributes /// -/// * `#[child_ids]` - Indicates that the field is the storage element for the -/// child ids. This is a mandatory field, and if it is -/// missing, there will be a panic during compilation. The -/// name is arbitrary, but the type has to be an [`Id`](calimero_storage::address::Id). +/// * `#[child_info]` - Indicates that the field is the storage element for the +/// child info, i.e. the IDs and Merkle hashes. This is a +/// mandatory field, and if it is missing, there will be a +/// panic during compilation. The name is arbitrary, but the +/// type has to be `HashMap<`. /// /// # Examples /// /// ``` /// use calimero_storage_macros::{AtomicUnit, Collection}; -/// use calimero_storage::address::Id; -/// use calimero_storage::entities::{Data, Element}; +/// use calimero_storage::entities::{ChildInfo, Data, Element}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] /// struct Book { @@ -420,8 +432,8 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] /// #[children(Page)] /// struct Pages { -/// #[child_ids] -/// child_ids: Vec, +/// #[child_info] +/// child_info: Vec, /// } /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] @@ -439,14 +451,14 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// - It is applied to anything other than a struct /// - The struct has unnamed fields /// - The `#[children(Type)]` attribute is missing or invalid -/// - The struct does not have a field annotated as `#[child_ids]` +/// - The struct does not have a field annotated as `#[child_info]` /// /// # See also /// /// * [`AtomicUnit`] - For defining a single atomic unit of data that either /// stands alone, or owns one or more collections, or is a /// child in a collection. -#[proc_macro_derive(Collection, attributes(children, child_ids))] +#[proc_macro_derive(Collection, attributes(children, child_info))] pub fn collection_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; @@ -469,22 +481,26 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { } }; - // Find the field marked with the #[child_ids] attribute - let child_ids_field = named_fields + // Find the field marked with the #[child_info] attribute + let child_info_field = named_fields .iter() - .find(|f| f.attrs.iter().any(|attr| attr.path().is_ident("child_ids"))) - .expect("You must designate one field with #[child_ids] for the Collection"); + .find(|f| { + f.attrs + .iter() + .any(|attr| attr.path().is_ident("child_info")) + }) + .expect("You must designate one field with #[child_info] for the Collection"); - let child_ids_ident = child_ids_field.ident.as_ref().unwrap(); - let child_ids_ty = &child_ids_field.ty; - let child_ids_type = syn::parse2::(quote! { #child_ids_ty }).unwrap(); + let child_info_ident = child_info_field.ident.as_ref().unwrap(); + let child_info_ty = &child_info_field.ty; + let child_info_type = syn::parse2::(quote! { #child_info_ty }).unwrap(); let deserialize_impl = quote! { impl borsh::BorshDeserialize for #name { fn deserialize_reader(reader: &mut R) -> std::io::Result { - let #child_ids_ident = <#child_ids_type as borsh::BorshDeserialize>::deserialize_reader(reader)?; + let #child_info_ident = <#child_info_type as borsh::BorshDeserialize>::deserialize_reader(reader)?; Ok(Self { - #child_ids_ident, + #child_info_ident, }) } } @@ -493,7 +509,7 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { let serialize_impl = quote! { impl borsh::BorshSerialize for #name { fn serialize(&self, writer: &mut W) -> std::io::Result<()> { - borsh::BorshSerialize::serialize(&self.#child_ids_ident, writer) + borsh::BorshSerialize::serialize(&self.#child_info_ident, writer) } } }; @@ -502,12 +518,12 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { impl calimero_storage::entities::Collection for #name { type Child = #child_type; - fn child_ids(&self) -> &Vec { - &self.#child_ids_ident + fn child_info(&self) -> &Vec { + &self.#child_info_ident } fn has_children(&self) -> bool { - !self.#child_ids_ident.is_empty() + !self.#child_info_ident.is_empty() } } diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs index d90539bb8..405b91469 100644 --- a/crates/storage-macros/tests/collection.rs +++ b/crates/storage-macros/tests/collection.rs @@ -26,8 +26,8 @@ )] use borsh::{to_vec, BorshDeserialize}; -use calimero_storage::address::{Id, Path}; -use calimero_storage::entities::{Data, Element}; +use calimero_storage::address::Path; +use calimero_storage::entities::{ChildInfo, Data, Element}; use calimero_storage::exports::{Digest, Sha256}; use calimero_storage::interface::Interface; use calimero_storage_macros::{AtomicUnit, Collection}; @@ -52,14 +52,14 @@ impl Child { #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] #[children(Child)] struct Group { - #[child_ids] - child_ids: Vec, + #[child_info] + child_info: Vec, } impl Group { fn new() -> Self { Self { - child_ids: Vec::new(), + child_info: Vec::new(), } } } @@ -148,7 +148,11 @@ mod hashing { assert!(interface.save(child1.id(), &mut child1).unwrap()); assert!(interface.save(child2.id(), &mut child2).unwrap()); assert!(interface.save(child3.id(), &mut child3).unwrap()); - parent.children.child_ids = vec![child1.id(), child2.id(), child3.id()]; + parent.children.child_info = vec![ + ChildInfo::new(child1.id(), child1.element().merkle_hash()), + ChildInfo::new(child2.id(), child2.element().merkle_hash()), + ChildInfo::new(child3.id(), child3.element().merkle_hash()), + ]; assert!(interface.save(parent.id(), &mut parent).unwrap()); let mut hasher0 = Sha256::new(); diff --git a/crates/storage-macros/tests/compile_fail/collection.rs b/crates/storage-macros/tests/compile_fail/collection.rs index c61689154..dd27bbadb 100644 --- a/crates/storage-macros/tests/compile_fail/collection.rs +++ b/crates/storage-macros/tests/compile_fail/collection.rs @@ -1,5 +1,5 @@ -use calimero_storage::address::{Id, Path}; -use calimero_storage::entities::Element; +use calimero_storage::address::Path; +use calimero_storage::entities::{ChildInfo, Element}; use calimero_storage::interface::Interface; use calimero_storage_macros::{AtomicUnit, Collection}; use calimero_test_utils::storage::create_test_store; @@ -13,8 +13,8 @@ struct Child { #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] #[children(Child)] struct Group { - #[child_ids] - child_ids: Vec, + #[child_info] + child_info: Vec, } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] @@ -29,7 +29,7 @@ fn main() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); let parent: Parent = Parent { - group: Group { child_ids: vec![] }, + group: Group { child_info: vec![] }, storage: Element::new(&Path::new("::root::node").unwrap()), }; let _: Vec = interface.children_of(&parent.group).unwrap(); diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index ae2f9d701..4e74be6d7 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -10,6 +10,7 @@ license.workspace = true borsh.workspace = true eyre.workspace = true fixedstr.workspace = true +hex.workspace = true parking_lot.workspace = true sha2.workspace = true thiserror.workspace = true @@ -20,6 +21,7 @@ calimero-store = { path = "../store", features = ["datatypes"] } [dev-dependencies] claims.workspace = true hex.workspace = true +velcro.workspace = true calimero-storage-macros = { path = "../storage-macros" } calimero-test-utils = { path = "../test-utils" } diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 0b99d2e87..c783a3d0b 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -213,6 +213,7 @@ mod tests; use core::fmt::{self, Debug, Display, Formatter}; +use std::collections::HashMap; use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{BorshDeserialize, BorshSerialize}; @@ -256,8 +257,7 @@ pub trait AtomicUnit: Data {} /// /// ``` /// use calimero_storage_macros::{AtomicUnit, Collection}; -/// use calimero_storage::address::Id; -/// use calimero_storage::entities::{Data, Element}; +/// use calimero_storage::entities::{ChildInfo, Data, Element}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] /// struct Book { @@ -270,8 +270,8 @@ pub trait AtomicUnit: Data {} /// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] /// #[children(Page)] /// struct Pages { -/// #[child_ids] -/// child_ids: Vec, +/// #[child_info] +/// child_info: Vec, /// } /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] @@ -286,13 +286,13 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { /// The associated type of any children that the [`Collection`] may have. type Child: Data; - /// The unique identifiers of the children of the [`Collection`]. + /// Information about the children of the [`Collection`]. /// - /// This gets only the IDs of the children of the [`Collection`], which are - /// the [`Element`]s that are directly below the [`Collection`] in the - /// hierarchy. + /// This gets the IDs and Merkle hashes of the children of the + /// [`Collection`], which are the [`Element`]s that are directly below the + /// [`Collection`] in the hierarchy. /// - /// The order of the IDs is not guaranteed to be stable between calls. + /// The order of the results is guaranteed to be stable between calls. /// /// This is considered somewhat temporary, as there are efficiency gains to /// be made by storing this list elsewhere — but for now, it helps to get @@ -303,7 +303,7 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { /// is implemented. /// #[must_use] - fn child_ids(&self) -> &Vec; + fn child_info(&self) -> &Vec; /// Whether the [`Collection`] has children. /// @@ -396,6 +396,14 @@ pub trait Data: /// fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError>; + /// Information about the [`Collection`]s present in the [`Data`]. + /// + /// This method allows details about the subtree structure and children to + /// be obtained. It does not return the actual [`Collection`] types, but + /// provides their names and child information. + /// + fn collections(&self) -> HashMap>; + /// The associated [`Element`]. /// /// The [`Element`] contains additional metadata and storage-related @@ -448,6 +456,63 @@ pub trait Data: } } +/// Summary information for the child of an [`Element`] in the storage. +/// +/// This struct contains minimal information about a child of an [`Element`], to +/// be stored with the associated [`Data`]. The primary purpose is to maintain +/// an authoritative list of the children of the [`Element`], and the secondary +/// purpose is to make information such as the Merkle hash trivially available +/// and prevent the need for repeated lookups. +/// +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[non_exhaustive] +pub struct ChildInfo { + /// The unique identifier for the child [`Element`]. + id: Id, + + /// The Merkle hash of the child [`Element`]. This is a cryptographic hash + /// of the significant data in the "scope" of the child [`Element`], and is + /// used to determine whether the data has changed and is valid. + pub(crate) merkle_hash: [u8; 32], +} + +impl ChildInfo { + /// Creates a new [`ChildInfo`]. + #[must_use] + pub const fn new(id: Id, merkle_hash: [u8; 32]) -> Self { + Self { id, merkle_hash } + } + + /// The unique identifier for the child [`Element`]. + /// + /// This is the unique identifier for the child [`Element`], which can + /// always be used to locate the [`Element`] in the storage system. It is + /// generated when the [`Element`] is first created, and never changes. It + /// is reflected onto all other systems and so is universally consistent. + /// + #[must_use] + pub const fn id(&self) -> Id { + self.id + } + + /// Current Merkle hash of the [`Element`]. + #[must_use] + pub const fn merkle_hash(&self) -> [u8; 32] { + self.merkle_hash + } +} + +impl Display for ChildInfo { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + write!( + f, + "ChildInfo {}: {}", + self.id, + hex::encode(self.merkle_hash) + ) + } +} + /// Represents an [`Element`] in the storage. /// /// This is a simple model of an [`Element`] in the storage system, with a @@ -491,13 +556,13 @@ pub trait Data: /// /// # Storage structure /// -/// TODO: Update when the `child_ids` field is replaced with an index. +/// TODO: Update when the `child_info` field is replaced with an index. /// -/// At present the [`Element`] has a `child_ids` field, which memoises the IDs -/// of the children. This is because it is better than traversing the whole -/// database to find the children (!). +/// At present the [`Data`] trait has a `child_info` field, which memoises the +/// IDs and Merkle hashes of the children. This is because it is better than +/// traversing the whole database to find the children (!). /// -/// Having a `child_ids` field is however non-optimal — this should come from +/// Having a `child_info` field is however non-optimal — this should come from /// outside the struct. We should be able to look up the children by path, and /// so given that the path is the primary method of determining that an /// [`Element`] is a child of another, this should be the mechanism relied upon. diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 30dfa4c37..c70914366 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -8,15 +8,217 @@ //! means of interacting with the storage system, rather than the ActiveRecord //! pattern where the model is the primary means of interaction. //! +//! # Synchronisation +//! +//! There are two main mechanisms involved in synchronisation: +//! +//! 1. **Direct changes**: When a change is made locally, the resulting +//! actions need to be propagated to other nodes. +//! 2. **Comparison**: When a comparison is made between two nodes, the +//! resulting actions need to be taken to bring the nodes into sync. +//! +//! The entry points for synchronisation are therefore either the +//! [`apply_action()`](Interface::apply_action()) method, to carry out actions; +//! or the [`compare_trees()`](Interface::compare_trees()) method, to compare +//! two nodes, which will emit actions to pass to [`apply_action()`](Interface::apply_action()) +//! on either the local or remote node, or both. +//! +//! ## CRDT model +//! +//! Calimero primarily uses operation-based CRDTs, also called commutative +//! replicated data types (CmRDTs). This means that the order of operations does +//! not matter, and the outcome will be the same regardless of the order in +//! which the operations are applied. +//! +//! It is worth noting that the orthodox CmRDT model does not feature or require +//! a comparison activity, as there is an operating assumption that all updates +//! have been carried out fully and reliably. +//! +//! The alternative CRDT approach is state-based, also called convergent +//! replicated data types (CvRDTs). This is a comparison-based approach, but the +//! downside is that this model requires the full state to be transmitted +//! between nodes, which can be costly. Although this approach is easier to +//! implement, and fits well with gossip protocols, it is not as efficient as +//! the operation-based model. +//! +//! The standard choice therefore comes down to: +//! +//! - Use CmRDTs and guarantee that all updates are carried out fully and +//! reliably, are not dropped or duplicated, and are replayed in causal +//! order. +//! - Use CvRDTs and accept the additional bandwidth cost of transmitting the +//! full state for every single CRDT. +//! +//! It does not fit the Calimero objectives to transmit the entire state for +//! every update, but there is also no guarantee that all updates will be +//! carried out fully and reliably. Therefore, Calimero uses a hybrid approach +//! that represents the best of both worlds. +//! +//! In the first instance, operations are emitted (in the form of [`Action`]s) +//! whenever a change is made. These operations are then propagated to other +//! nodes, where they are executed. This is the CmRDT model. +//! +//! However, there are cases where a node may have missed an update, for +//! instance, if it was offline. In this case, the node will be out of sync with +//! the rest of the network. To bring the node back into sync, a comparison is +//! made between the local node and a remote node, and the resulting actions are +//! executed. This is the CvRDT model. +//! +//! The storage system maintains a set of Merkle hashes, which are stored +//! against each element, and represent the state of the element and its +//! children. The Merkle hash for an element can therefore be used to trivially +//! determine whether an element or any of its descendants have changed, +//! without actually needing to compare every entity in the tree. +//! +//! Therefore, when a comparison is carried out it is not a full state +//! comparison, but a comparison of the immediate data and metadata of given +//! element(s). This is sufficient to determine whether the nodes are in sync, +//! and to generate the actions needed to bring them into sync. If there is any +//! deviation detected, the comparison will recurse into the children of the +//! element(s) in question, and generate further actions as necessary — but this +//! will only ever examine those descendent entities for which the Merkle hash +//! differs. +//! +//! We can therefore summarise this position as being: Calimero uses a CmRDT +//! model for direct changes, and a CvRDT model for comparison as a fallback +//! mechanism to bring nodes back into sync when needed. +//! +//! ## Direct changes +//! +//! When a change is made locally, the resulting actions need to be propagated +//! to other nodes. An action list will be generated, which can be made up of +//! [`Add`](Action::Add), [`Delete`](Action::Delete), and [`Update`](Action::Update) +//! actions. These actions are then propagated to all the other nodes in the +//! network, where they are executed using the [`apply_action()`](Interface::apply_action()) +//! method. +//! +//! This is a straightforward process, as the actions are known and are fully +//! self-contained without any wider impact. Order does not strictly matter, as +//! the actions are commutative, and the outcome will be the same regardless of +//! the order in which they are applied. Any conflicts are handled using the +//! last-write-wins strategy. +//! +//! There are certain cases where a mis-ordering of action, which is +//! essentially the same as having missing actions, can result in an invalid +//! state. For instance, if a child is added before the parent, the parent will +//! not exist and the child will be orphaned. In this situation we can either +//! ignore the child, or we can block its addition until the parent has been +//! added, or we can store it as an orphaned entity to be resolved later. At +//! present we follow the last approach, as it aligns well with the use of +//! comparisons to bring nodes back into sync. We therefore know that the node +//! will _eventually_ become consistent, which is all we guarantee. +//! +//! TODO: Examine whether this is the right approach, or whether we should for +//! TODO: instance block and do a comparison on the parent to ensure that local +//! TODO: state is as consistent as possible. +//! +//! Providing all generated actions are carried out, all nodes will eventually +//! be in sync, without any need for comparisons, transmission of full states, +//! or a transaction model (which requires linear history, and therefore +//! becomes mathematically unsuitable for large distributed systems). +//! +//! ## Comparison +//! +//! There are a number of situations under which a comparison may be needed: +//! +//! 1. A node has missed an update, and needs to be brought back into sync +//! (i.e. there is a gap in the instruction set). +//! 2. A node has been offline, and needs to be brought back into sync (i.e. +//! all instructions since a certain point have been missed). +//! 3. A discrepancy has been detected between two nodes, and they need to be +//! brought back into sync. +//! +//! A comparison is primarily triggered from a catch-up as a proactive measure, +//! i.e. without knowing if any changes exist, but can also arise at any point +//! if a discrepancy is detected. +//! +//! When performing a comparison, the data we have is the result of the entity +//! being serialised by the remote note, passed to us, and deserialised, so it +//! should be comparable in structure to having loaded it from the local +//! database. +//! +//! We therefore have access to the data and metadata, which includes the +//! immediate fields of the entity (i.e. the [`AtomicUnit`](crate::entities::AtomicUnit)) +//! and also a list of the children. +//! +//! The stored list of children contains their Merkle hashes, thereby allowing +//! us to check all children in one operation instead of needing to load each +//! child in turn, as that would require remote data for each child, and that +//! would not be as efficient. +//! +//! - If a child exists on both sides and the hash is different, we recurse +//! into a comparison for that child. +//! +//! - If a child is missing on one side then we can go with the side that has +//! the latest parent and add or remove the child. +//! +//! Notably, in the case of there being a missing child, the resolution +//! mechanism does expose a small risk of erroneous outcome. For instance, if +//! the local node has had a child added, and has been offline, and the parent +//! has been updated remotely — in this situation, in the absence of any other +//! activity, a comparison (e.g. a catch-up when coming back online) would +//! result in losing the child, as the remote node would not have the child in +//! its list of children. This edge case should usually be handled by the +//! specific add and remove events generated at the time of the original +//! activity, which should get propagated independently of a sync. However, +//! there are three extended options that can be implemented: +//! +//! 1. Upon catch-up, any local list of actions can be held and replayed +//! locally after synchronisation. Alone, this would not correct the +//! situation, due to last-write-wins rules, but additional logic could be +//! considered for this particular situation. +//! 2. During or after performing a comparison, all local children for an +//! entity can be loaded by path and checked against the parent's list of +//! children. If there are any deviations then appropriate action can be +//! taken. This does not fully cater for the edge case, and again would not +//! correct the situation on its own, but additional logic could be added. +//! 3. A special kind of "deleted" element could be added to the system, which +//! would store metadata for checking. This would be beneficial as it would +//! allow differentiation between a missing child and a deleted child, +//! which is the main problem exposed by the edge case. However, although +//! this represents a full solution from a data mechanism perspective, it +//! would not be desirable to store deleted entries permanently. It would +//! be best combined with a cut-off constraint, that would limit the time +//! period in which a catch-up can be performed, and after which the +//! deleted entities would be purged. This does add complexity not only in +//! the effect on the wider system of implementing that constraint, but +//! also in the need for garbage collection to remove the deleted entities. +//! This would likely be better conducted the next time the parent entity +//! is updated, but there are a number of factors to consider here. +//! 4. Another way to potentially handle situations of this nature is to +//! combine multiple granular updates into an atomic group operation that +//! ensures that all updates are applied together. However, this remains to +//! be explored, as it may not fit with the wider system design. +//! +//! Due to the potential complexity, this edge case is not currently mitigated, +//! but will be the focus of future development. +//! +//! TODO: Assess the best approach for handling this edge case in a way that +//! TODO: fits with the wider system design, and add extended tests for it. +//! +//! The outcome of a comparison is that the calling code receives a list of +//! actions, which can be [`Add`](Action::Add), [`Delete`](Action::Delete), +//! [`Update`](Action::Update), and [`Compare`](Action::Compare). The first +//! three are the same as propagating the consequences of direct changes, but +//! the comparison action is a special case that arises when a child entity is +//! found to differ between the two nodes, whereupon the comparison process +//! needs to recursively descend into the parts of the subtree found to differ. +//! +//! The calling code is then responsible for going away and obtaining the +//! information necessary to carry out the next comparison action if there is +//! one, as well as relaying the generated action list. +//! #[cfg(test)] #[path = "tests/interface.rs"] mod tests; +use core::fmt::Debug; +use std::collections::HashMap; use std::io::Error as IoError; use std::sync::Arc; -use borsh::to_vec; +use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use calimero_store::key::Storage as StorageKey; use calimero_store::layer::{ReadLayer, WriteLayer}; use calimero_store::slice::Slice; @@ -28,6 +230,52 @@ use thiserror::Error as ThisError; use crate::address::{Id, Path}; use crate::entities::{Collection, Data}; +/// Actions to be taken during synchronisation. +/// +/// The following variants represent the possible actions arising from either a +/// direct change or a comparison between two nodes. +/// +/// - **Direct change**: When a direct change is made, in other words, when +/// there is local activity that results in data modification to propagate +/// to other nodes, the possible resulting actions are [`Add`](Action::Add), +/// [`Delete`](Action::Delete), and [`Update`](Action::Update). A comparison +/// is not needed in this case, as the deltas are known, and assuming all of +/// the actions are carried out, the nodes will be in sync. +/// +/// - **Comparison**: When a comparison is made between two nodes, the +/// possible resulting actions are [`Add`](Action::Add), [`Delete`](Action::Delete), +/// [`Update`](Action::Update), and [`Compare`](Action::Compare). The extra +/// comparison action arises in the case of tree traversal, where a child +/// entity is found to differ between the two nodes. In this case, the child +/// entity is compared, and the resulting actions are added to the list of +/// actions to be taken. This process is recursive. +/// +/// Note: Some actions contain the full entity, and not just the entity ID, as +/// the actions will often be in context of data that is not available locally +/// and cannot be sourced otherwise. The actions are stored in serialised form +/// because of type restrictions, and they are due to be sent around the network +/// anyway. +/// +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[expect(clippy::exhaustive_enums, reason = "Exhaustive")] +pub enum Action { + /// Add an entity with the given ID. + Add(Id, Vec), + + /// Compare the given entity. Note that this results in a direct comparison + /// of the specific entity in question, including data that is immediately + /// available to it, such as the hashes of its children. This may well + /// result in further actions being generated if children differ, leading to + /// a recursive comparison. + Compare(Id), + + /// Delete an entity with the given ID. + Delete(Id), + + /// Update the entity with the given ID. + Update(Id, Vec), +} + /// The primary interface for the storage system. #[derive(Debug, Clone)] #[non_exhaustive] @@ -50,6 +298,50 @@ impl Interface { } } + /// Applies an [`Action`] to the storage system. + /// + /// This function accepts a single incoming [`Action`] and applies it to the + /// storage system. The action is deserialised into the specified type, and + /// then applied as appropriate. + /// + /// Note: In order to call this function, the caller needs to know the type + /// of the entity that the action is for, and this type must implement the + /// [`Data`] trait. One of the possible ways to achieve this is to use the + /// path information externally to match against the entity type, using + /// knowledge available in the system. It is also possible to extend this + /// function to deal with the type being indicated in the serialised data, + /// if appropriate, or in the ID or accompanying metadata. + /// + /// TODO: Establish whether any additional data encoding is needed, to help + /// TODO: with deserialisation. + /// + /// # Parameters + /// + /// * `action` - The [`Action`] to apply to the storage system. + /// + /// # Errors + /// + /// If there is an error when deserialising into the specified type, or when + /// applying the [`Action`], an error will be returned. + /// + pub fn apply_action(&self, action: Action) -> Result<(), StorageError> { + match action { + Action::Add(id, serialized_data) | Action::Update(id, serialized_data) => { + let mut entity = D::try_from_slice(&serialized_data) + .map_err(StorageError::DeserializationError)?; + _ = self.save(id, &mut entity)?; + } + Action::Compare(_) => return Err(StorageError::ActionNotAllowed("Compare".to_owned())), + Action::Delete(id) => { + let mut store = self.store.write(); + store + .delete(&StorageKey::new(id.into())) + .map_err(StorageError::StoreError)?; + } + } + Ok(()) + } + /// Calculates the Merkle hash for the [`Element`](crate::entities::Element). /// /// This calculates the Merkle hash for the @@ -111,13 +403,12 @@ impl Interface { entity.calculate_full_merkle_hash(self, recalculate) } - /// The children of the [`Element`](crate::entities::Element). + /// The children of the [`Collection`]. /// - /// This gets the children of the [`Element`](crate::entities::Element), - /// which are the [`Element`](crate::entities::Element)s that are directly - /// below this [`Element`](crate::entities::Element) in the hierarchy. This - /// is a simple method that returns the children as a list, and does not - /// provide any filtering or ordering. + /// This gets the children of the [`Collection`], which are the [`Element`](crate::entities::Element)s + /// that are directly below the [`Collection`]'s owner in the hierarchy. + /// This is a simple method that returns the children as a list, and does + /// not provide any filtering or ordering. /// /// Notably, there is no real concept of ordering in the storage system, as /// the records are not ordered in any way. They are simply stored in the @@ -126,18 +417,21 @@ impl Interface { /// /// # Determinism /// - /// TODO: Update when the `child_ids` field is replaced with an index. + /// TODO: Update when the `child_info` field is replaced with an index. /// /// Depending on the source, simply looping through the children may be /// non-deterministic. At present we are using a [`Vec`], which is /// deterministic, but this is a temporary measure, and the order of /// children under a given path is not enforced, and therefore - /// non-deterministic. When the `child_ids` field is replaced with an index, - /// the order will be enforced using `created_at` timestamp and/or ID. + /// non-deterministic. + /// + /// When the `child_info` field is replaced with an index, the order may be + /// enforced using `created_at` timestamp, which then allows performance + /// optimisations with sharding and other techniques. /// /// # Performance /// - /// TODO: Update when the `child_ids` field is replaced with an index. + /// TODO: Update when the `child_info` field is replaced with an index. /// /// Looping through children and combining their hashes into the parent is /// logically correct. However, it does necessitate loading all the children @@ -146,8 +440,7 @@ impl Interface { /// /// # Parameters /// - /// * `element` - The [`Element`](crate::entities::Element) to get the - /// children of. + /// * `collection` - The [`Collection`] to get the children of. /// /// # Errors /// @@ -160,12 +453,129 @@ impl Interface { collection: &C, ) -> Result, StorageError> { let mut children = Vec::new(); - for id in collection.child_ids() { - children.push(self.find_by_id(*id)?.ok_or(StorageError::NotFound(*id))?); + for info in collection.child_info() { + children.push( + self.find_by_id(info.id())? + .ok_or(StorageError::NotFound(info.id()))?, + ); } Ok(children) } + /// Compares a foreign entity with a local one. + /// + /// This function compares a foreign entity, usually from a remote node, + /// with the version available in the tree in local storage, if present, and + /// generates a list of [`Action`]s to perform on the local tree, the + /// foreign tree, or both, to bring the two trees into sync. + /// + /// The tuple returned is composed of two lists of actions: the first list + /// contains the actions to be performed on the local tree, and the second + /// list contains the actions to be performed on the foreign tree. + /// + /// # Parameters + /// + /// * `foreign_entity` - The foreign entity to compare against the local + /// version. This will usually be from a remote node. + /// + /// # Errors + /// + /// This function will return an error if there are issues accessing local + /// data or if there are problems during the comparison process. + /// + pub fn compare_trees( + &self, + foreign_entity: &D, + ) -> Result<(Vec, Vec), StorageError> { + let mut actions = (vec![], vec![]); + let Some(local_entity) = self.find_by_id::(foreign_entity.id())? else { + // Local entity doesn't exist, so we need to add it + actions.0.push(Action::Add( + foreign_entity.id(), + to_vec(foreign_entity).map_err(StorageError::SerializationError)?, + )); + return Ok(actions); + }; + + if local_entity.element().merkle_hash() == foreign_entity.element().merkle_hash() { + return Ok(actions); + } + if local_entity.element().updated_at() <= foreign_entity.element().updated_at() { + actions.0.push(Action::Update( + local_entity.id(), + to_vec(foreign_entity).map_err(StorageError::SerializationError)?, + )); + } else { + actions.1.push(Action::Update( + foreign_entity.id(), + to_vec(&local_entity).map_err(StorageError::SerializationError)?, + )); + } + + let local_collections = local_entity.collections(); + let foreign_collections = foreign_entity.collections(); + + #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] + for (local_coll_name, local_children) in &local_collections { + if let Some(foreign_children) = foreign_collections.get(local_coll_name) { + let local_child_map: HashMap<_, _> = local_children + .iter() + .map(|child| (child.id(), child.merkle_hash())) + .collect(); + let foreign_child_map: HashMap<_, _> = foreign_children + .iter() + .map(|child| (child.id(), child.merkle_hash())) + .collect(); + + #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] + for (id, local_hash) in &local_child_map { + match foreign_child_map.get(id) { + Some(foreign_hash) if local_hash != foreign_hash => { + actions.0.push(Action::Compare(*id)); + actions.1.push(Action::Compare(*id)); + } + None => { + // We need to fetch the child entity and serialize it + if let Some(local_child) = self.find_by_id_raw(*id)? { + actions.1.push(Action::Add(*id, local_child)); + } + } + // Hashes match, no action needed + _ => {} + } + } + + #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] + for id in foreign_child_map.keys() { + if !local_child_map.contains_key(id) { + // We can't get the full data for the foreign child, so we flag it for comparison + actions.1.push(Action::Compare(*id)); + } + } + } else { + // The entire collection is missing from the foreign entity + for child in local_children { + if let Some(local_child) = self.find_by_id_raw(child.id())? { + actions.1.push(Action::Add(child.id(), local_child)); + } + } + } + } + + // Check for collections in the foreign entity that don't exist locally + #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] + for (foreign_coll_name, foreign_children) in &foreign_collections { + if !local_collections.contains_key(foreign_coll_name) { + for child in foreign_children { + // We can't get the full data for the foreign child, so we flag it for comparison + actions.1.push(Action::Compare(child.id())); + } + } + } + + Ok(actions) + } + /// Finds an [`Element`](crate::entities::Element) by its unique identifier. /// /// This will always retrieve a single [`Element`](crate::entities::Element), @@ -213,6 +623,35 @@ impl Interface { } } + /// Finds an [`Element`](crate::entities::Element) by its unique identifier + /// without deserialising it. + /// + /// This will always retrieve a single [`Element`](crate::entities::Element), + /// if it exists, regardless of where it may be in the hierarchy, or what + /// state it may be in. + /// + /// Notably it returns the raw [`Slice`] without attempting to deserialise + /// it into a [`Data`] type. + /// + /// # Parameters + /// + /// * `id` - The unique identifier of the [`Element`](crate::entities::Element) + /// to find. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + #[expect(clippy::significant_drop_tightening, reason = "False positive")] + pub fn find_by_id_raw(&self, id: Id) -> Result>, StorageError> { + let store = self.store.read(); + let value = store + .get(&StorageKey::new(id.into())) + .map_err(StorageError::StoreError)?; + Ok(value.map(|slice| slice.to_vec())) + } + /// Finds one or more [`Element`](crate::entities::Element)s by path in the /// hierarchy. /// @@ -363,6 +802,10 @@ impl Interface { #[derive(Debug, ThisError)] #[non_exhaustive] pub enum StorageError { + /// The requested action is not allowed. + #[error("Action not allowed: {0}")] + ActionNotAllowed(String), + /// An error occurred during serialization. #[error("Deserialization error: {0}")] DeserializationError(IoError), diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index 6d6411e09..146fcb05c 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -1,10 +1,12 @@ +use std::collections::HashMap; use std::sync::LazyLock; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use sha2::{Digest, Sha256}; +use velcro::hash_map; use crate::address::Id; -use crate::entities::{AtomicUnit, Collection, Data, Element}; +use crate::entities::{AtomicUnit, ChildInfo, Collection, Data, Element}; use crate::interface::{Interface, StorageError}; /// A set of non-empty test UUIDs. @@ -51,6 +53,10 @@ impl Data for EmptyData { Ok(hasher.finalize().into()) } + fn collections(&self) -> HashMap> { + HashMap::new() + } + fn element(&self) -> &Element { &self.storage } @@ -91,14 +97,14 @@ impl Data for Page { hasher.update(&self.calculate_merkle_hash()?); // Hash collection fields - for child_id in self.paragraphs.child_ids() { - let child = interface - .find_by_id::<::Child>(*child_id)? - .ok_or_else(|| StorageError::NotFound(*child_id))?; + for info in self.paragraphs.child_info() { if recalculate { + let child = interface + .find_by_id::<::Child>(info.id())? + .ok_or_else(|| StorageError::NotFound(info.id()))?; hasher.update(&child.calculate_full_merkle_hash(interface, recalculate)?); } else { - hasher.update(&child.element().merkle_hash()); + hasher.update(&info.merkle_hash()); } } @@ -113,6 +119,12 @@ impl Data for Page { Ok(hasher.finalize().into()) } + fn collections(&self) -> HashMap> { + hash_map! { + "paragraphs".to_owned(): self.paragraphs.child_info.clone() + } + } + fn element(&self) -> &Element { &self.storage } @@ -160,6 +172,10 @@ impl Data for Paragraph { Ok(hasher.finalize().into()) } + fn collections(&self) -> HashMap> { + HashMap::new() + } + fn element(&self) -> &Element { &self.storage } @@ -172,25 +188,25 @@ impl Data for Paragraph { /// A collection of paragraphs for a page. #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] pub struct Paragraphs { - pub child_ids: Vec, + pub child_info: Vec, } impl Paragraphs { /// Creates a new paragraph collection. pub fn new() -> Self { - Self { child_ids: vec![] } + Self { child_info: vec![] } } } impl Collection for Paragraphs { type Child = Paragraph; - fn child_ids(&self) -> &Vec { - &self.child_ids + fn child_info(&self) -> &Vec { + &self.child_info } fn has_children(&self) -> bool { - !self.child_ids.is_empty() + !self.child_info.is_empty() } } @@ -222,6 +238,10 @@ impl Data for Person { Ok(hasher.finalize().into()) } + fn collections(&self) -> HashMap> { + HashMap::new() + } + fn element(&self) -> &Element { &self.storage } diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index 11ce8dded..28b525df7 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -2,6 +2,7 @@ use borsh::to_vec; use calimero_test_utils::storage::create_test_store; use claims::{assert_ge, assert_le}; use sha2::{Digest, Sha256}; +use velcro::hash_map; use super::*; use crate::interface::Interface; @@ -12,12 +13,16 @@ mod collection__public_methods { use super::*; #[test] - fn child_ids() { - let child_ids = vec![Id::new(), Id::new(), Id::new()]; + fn child_info() { + let child_info = vec![ + ChildInfo::new(Id::new(), Sha256::digest(b"1").into()), + ChildInfo::new(Id::new(), Sha256::digest(b"2").into()), + ChildInfo::new(Id::new(), Sha256::digest(b"3").into()), + ]; let mut paras = Paragraphs::new(); - paras.child_ids = child_ids.clone(); - assert_eq!(paras.child_ids(), ¶s.child_ids); - assert_eq!(paras.child_ids(), &child_ids); + paras.child_info = child_info.clone(); + assert_eq!(paras.child_info(), ¶s.child_info); + assert_eq!(paras.child_info(), &child_info); } #[test] @@ -25,8 +30,12 @@ mod collection__public_methods { let mut paras = Paragraphs::new(); assert!(!paras.has_children()); - let child_ids = vec![Id::new(), Id::new(), Id::new()]; - paras.child_ids = child_ids; + let child_info = vec![ + ChildInfo::new(Id::new(), Sha256::digest(b"1").into()), + ChildInfo::new(Id::new(), Sha256::digest(b"2").into()), + ChildInfo::new(Id::new(), Sha256::digest(b"3").into()), + ]; + paras.child_info = child_info; assert!(paras.has_children()); } } @@ -53,7 +62,11 @@ mod data__public_methods { assert!(interface.save(para1.id(), &mut para1).unwrap()); assert!(interface.save(para2.id(), &mut para2).unwrap()); assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_ids = vec![para1.id(), para2.id(), para3.id()]; + page.paragraphs.child_info = vec![ + ChildInfo::new(para1.id(), para1.element().merkle_hash()), + ChildInfo::new(para2.id(), para2.element().merkle_hash()), + ChildInfo::new(para3.id(), para3.element().merkle_hash()), + ]; assert!(interface.save(page.id(), &mut page).unwrap()); let mut hasher0 = Sha256::new(); @@ -143,6 +156,22 @@ mod data__public_methods { assert_eq!(person.calculate_merkle_hash().unwrap(), expected_hash); } + #[test] + fn collections() { + let parent = Element::new(&Path::new("::root::node").unwrap()); + let page = Page::new_from_element("Node", parent); + assert_eq!( + page.collections(), + hash_map! { + "paragraphs".to_owned(): page.paragraphs.child_info().clone() + } + ); + + let child = Element::new(&Path::new("::root::node::leaf").unwrap()); + let para = Paragraph::new_from_element("Leaf", child); + assert_eq!(para.collections(), HashMap::new()); + } + #[test] fn element() { let path = Path::new("::root::node::leaf").unwrap(); @@ -197,6 +226,63 @@ mod data__public_methods { } } +#[cfg(test)] +mod child_info__constructor { + use super::*; + + #[test] + fn new() { + let id = Id::new(); + let hash = Sha256::digest(b"1").into(); + let info = ChildInfo::new(id, hash); + assert_eq!(info.id, id); + assert_eq!(info.merkle_hash, hash); + } +} + +#[cfg(test)] +mod child_info__public_methods { + use super::*; + + #[test] + fn id() { + let info = ChildInfo::new(Id::new(), Sha256::digest(b"1").into()); + assert_eq!(info.id(), info.id); + } + + #[test] + fn merkle_hash() { + let info = ChildInfo::new(Id::new(), Sha256::digest(b"1").into()); + assert_eq!(info.merkle_hash(), info.merkle_hash); + } +} + +#[cfg(test)] +mod child_info__traits { + use super::*; + + #[test] + fn display() { + let info = ChildInfo::new(Id::new(), Sha256::digest(b"1").into()); + assert_eq!( + format!("{info}"), + format!( + "ChildInfo {}: {}", + info.id(), + hex::encode(info.merkle_hash()) + ) + ); + assert_eq!( + info.to_string(), + format!( + "ChildInfo {}: {}", + info.id(), + hex::encode(info.merkle_hash()) + ) + ); + } +} + #[cfg(test)] mod element__constructor { use super::*; diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index f4a2f1756..f2f16525b 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -1,8 +1,11 @@ +use std::thread::sleep; +use std::time::Duration; + use calimero_test_utils::storage::create_test_store; use claims::{assert_none, assert_ok}; use super::*; -use crate::entities::{Data, Element}; +use crate::entities::{ChildInfo, Data, Element}; use crate::tests::common::{EmptyData, Page, Paragraph, TEST_ID}; #[cfg(test)] @@ -69,7 +72,11 @@ mod interface__public_methods { assert!(interface.save(para1.id(), &mut para1).unwrap()); assert!(interface.save(para2.id(), &mut para2).unwrap()); assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_ids = vec![para1.id(), para2.id(), para3.id()]; + page.paragraphs.child_info = vec![ + ChildInfo::new(para1.id(), para1.element().merkle_hash()), + ChildInfo::new(para2.id(), para2.element().merkle_hash()), + ChildInfo::new(para3.id(), para3.element().merkle_hash()), + ]; assert!(interface.save(page.id(), &mut page).unwrap()); assert_eq!( @@ -108,7 +115,11 @@ mod interface__public_methods { assert!(interface.save(para1.id(), &mut para1).unwrap()); assert!(interface.save(para2.id(), &mut para2).unwrap()); assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_ids = vec![para1.id(), para2.id(), para3.id()]; + page.paragraphs.child_info = vec![ + ChildInfo::new(para1.id(), para1.calculate_merkle_hash().unwrap()), + ChildInfo::new(para2.id(), para2.calculate_merkle_hash().unwrap()), + ChildInfo::new(para3.id(), para3.calculate_merkle_hash().unwrap()), + ]; assert!(interface.save(page.id(), &mut page).unwrap()); assert_eq!( interface.children_of(&page.paragraphs).unwrap(), @@ -136,6 +147,12 @@ mod interface__public_methods { assert_none!(interface.find_by_id::(Id::new()).unwrap()); } + #[test] + #[ignore] + fn find_by_id_raw() { + todo!() + } + #[test] #[ignore] fn find_by_path() { @@ -244,3 +261,287 @@ mod interface__public_methods { todo!() } } + +#[cfg(test)] +mod interface__apply_actions { + use super::*; + + #[test] + fn apply_action__add() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let serialized = to_vec(&page).unwrap(); + let action = Action::Add(page.id(), serialized); + + assert!(interface.apply_action::(action).is_ok()); + + // Verify the page was added + let retrieved_page = interface.find_by_id::(page.id()).unwrap(); + assert!(retrieved_page.is_some()); + assert_eq!(retrieved_page.unwrap().title, "Test Page"); + } + + #[test] + fn apply_action__update() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let mut page = + Page::new_from_element("Old Title", Element::new(&Path::new("::test").unwrap())); + assert!(interface.save(page.id(), &mut page).unwrap()); + + page.title = "New Title".to_owned(); + page.element_mut().update(); + let serialized = to_vec(&page).unwrap(); + let action = Action::Update(page.id(), serialized); + + assert!(interface.apply_action::(action).is_ok()); + + // Verify the page was updated + let retrieved_page = interface.find_by_id::(page.id()).unwrap().unwrap(); + assert_eq!(retrieved_page.title, "New Title"); + } + + #[test] + fn apply_action__delete() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let mut page = + Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + assert!(interface.save(page.id(), &mut page).unwrap()); + + let action = Action::Delete(page.id()); + + assert!(interface.apply_action::(action).is_ok()); + + // Verify the page was deleted + let retrieved_page = interface.find_by_id::(page.id()).unwrap(); + assert!(retrieved_page.is_none()); + } + + #[test] + fn apply_action__compare() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let action = Action::Compare(page.id()); + + // Compare should fail + assert!(interface.apply_action::(action).is_err()); + } + + #[test] + fn apply_action__wrong_type() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let serialized = to_vec(&page).unwrap(); + let action = Action::Add(page.id(), serialized); + + // Trying to apply a Page action as if it were a Paragraph should fail + assert!(interface.apply_action::(action).is_err()); + } + + #[test] + fn apply_action__non_existent_update() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let serialized = to_vec(&page).unwrap(); + let action = Action::Update(page.id(), serialized); + + // Updating a non-existent page should still succeed (it will be added) + assert!(interface.apply_action::(action).is_ok()); + + // Verify the page was added + let retrieved_page = interface.find_by_id::(page.id()).unwrap(); + assert!(retrieved_page.is_some()); + assert_eq!(retrieved_page.unwrap().title, "Test Page"); + } +} + +#[cfg(test)] +mod interface__comparison { + use super::*; + + #[test] + fn compare_trees__identical() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut local = Page::new_from_element("Test Page", element); + let mut foreign = local.clone(); + + assert!(interface.save(local.id(), &mut local).unwrap()); + foreign.element_mut().merkle_hash = foreign + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + assert_eq!( + local.element().merkle_hash(), + foreign.element().merkle_hash() + ); + + let result = interface.compare_trees(&foreign).unwrap(); + assert_eq!(result, (vec![], vec![])); + } + + #[test] + fn compare_trees__local_newer() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut local = Page::new_from_element("Test Page", element.clone()); + let mut foreign = Page::new_from_element("Old Test Page", element); + + // Make local newer + sleep(Duration::from_millis(10)); + local.element_mut().update(); + + assert!(interface.save(local.id(), &mut local).unwrap()); + foreign.element_mut().merkle_hash = foreign + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + + let result = interface.compare_trees(&foreign).unwrap(); + assert_eq!( + result, + ( + vec![], + vec![Action::Update(local.id(), to_vec(&local).unwrap())] + ) + ); + } + + #[test] + fn compare_trees__foreign_newer() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut local = Page::new_from_element("Old Test Page", element.clone()); + let mut foreign = Page::new_from_element("Test Page", element); + + assert!(interface.save(local.id(), &mut local).unwrap()); + foreign.element_mut().merkle_hash = foreign + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + + // Make foreign newer + sleep(Duration::from_millis(10)); + foreign.element_mut().update(); + + let result = interface.compare_trees(&foreign).unwrap(); + assert_eq!( + result, + ( + vec![Action::Update(foreign.id(), to_vec(&foreign).unwrap())], + vec![] + ) + ); + } + + #[test] + fn compare_trees__with_collections() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + + let page_element = Element::new(&Path::new("::root::node").unwrap()); + let para1_element = Element::new(&Path::new("::root::node::leaf1").unwrap()); + let para2_element = Element::new(&Path::new("::root::node::leaf2").unwrap()); + let para3_element = Element::new(&Path::new("::root::node::leaf3").unwrap()); + + let mut local_page = Page::new_from_element("Local Page", page_element.clone()); + let mut local_para1 = + Paragraph::new_from_element("Local Paragraph 1", para1_element.clone()); + let mut local_para2 = Paragraph::new_from_element("Local Paragraph 2", para2_element); + + let mut foreign_page = Page::new_from_element("Foreign Page", page_element); + let mut foreign_para1 = Paragraph::new_from_element("Updated Paragraph 1", para1_element); + let mut foreign_para3 = Paragraph::new_from_element("Foreign Paragraph 3", para3_element); + + local_page.paragraphs.child_info = vec![ + ChildInfo::new( + local_para1.id(), + local_para1.calculate_merkle_hash().unwrap(), + ), + ChildInfo::new( + local_para2.id(), + local_para2.calculate_merkle_hash().unwrap(), + ), + ]; + + foreign_page.paragraphs.child_info = vec![ + ChildInfo::new( + local_para1.id(), + foreign_para1.calculate_merkle_hash().unwrap(), + ), + ChildInfo::new( + foreign_para3.id(), + foreign_para3.calculate_merkle_hash().unwrap(), + ), + ]; + + assert!(interface.save(local_page.id(), &mut local_page).unwrap()); + assert!(interface.save(local_para1.id(), &mut local_para1).unwrap()); + assert!(interface.save(local_para2.id(), &mut local_para2).unwrap()); + foreign_page.element_mut().merkle_hash = foreign_page + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + foreign_para1.element_mut().merkle_hash = foreign_para1 + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + foreign_para3.element_mut().merkle_hash = foreign_para3 + .calculate_full_merkle_hash(&interface, false) + .unwrap(); + + let (local_actions, mut foreign_actions) = interface.compare_trees(&foreign_page).unwrap(); + foreign_actions.sort(); + + assert_eq!( + local_actions, + vec![ + // Page needs update due to different child structure + Action::Update(foreign_page.id(), to_vec(&foreign_page).unwrap()), + // Para1 needs comparison due to different hash + Action::Compare(local_para1.id()), + ] + ); + local_para2.element_mut().is_dirty = true; + assert_eq!( + foreign_actions, + vec![ + // Para2 needs to be added to foreign + Action::Add(local_para2.id(), to_vec(&local_para2).unwrap()), + // Para3 needs to be added locally, but we don't have the data, so we compare + Action::Compare(foreign_para3.id()), + // Para1 needs comparison due to different hash + Action::Compare(local_para1.id()), + ] + ); + + // Compare the updated para1 + let (local_para1_actions, foreign_para1_actions) = + interface.compare_trees(&foreign_para1).unwrap(); + + assert_eq!( + local_para1_actions, + vec![Action::Update( + foreign_para1.id(), + to_vec(&foreign_para1).unwrap() + )] + ); + assert_eq!(foreign_para1_actions, vec![]); + + // Compare para3 which doesn't exist locally + let (local_para3_actions, foreign_para3_actions) = + interface.compare_trees(&foreign_para3).unwrap(); + + assert_eq!( + local_para3_actions, + vec![Action::Add( + foreign_para3.id(), + to_vec(&foreign_para3).unwrap() + )] + ); + assert_eq!(foreign_para3_actions, vec![]); + } +} From 463a24d31b7dc9fca659c0ddf70752f2f45b4e9f Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 15 Oct 2024 01:25:16 +0100 Subject: [PATCH 09/75] chore: Removed use of Interface from Data (#774) - Use of Interface has been removed from the Data trait. This is to allow a potential further decoupling whereby the Data trait might be supplied more independently (under investigation). This is therefore a precursor to a potential removal of hashing operations from the Data trait. - Removed Data.calculate_full_merkle_hash() and moved its logic to Interface.calculate_merkle_hash_for(), which previously called it. - Data.calculate_merkle_hash() has been retained for now, and may be removed in a future update. Data.calculate_merkle_hash_for_child() has been added to complement it. - Changed Data.collections() to return a BTreeMap due to the changes in logic, as order is now important in that logic due to the changes made. --- Cargo.lock | 29 ++- Cargo.toml | 1 + crates/storage-macros/src/lib.rs | 49 ++-- crates/storage-macros/tests/collection.rs | 103 -------- crates/storage/Cargo.toml | 1 + crates/storage/src/entities.rs | 78 +++--- crates/storage/src/interface.rs | 34 ++- crates/storage/src/tests/common.rs | 114 ++++----- crates/storage/src/tests/entities.rs | 162 +++++------- crates/storage/src/tests/interface.rs | 296 ++++++++++++++-------- 10 files changed, 411 insertions(+), 456 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ea9c1e3c..f7f3baafc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1128,6 +1128,7 @@ dependencies = [ "eyre", "fixedstr", "hex", + "indexmap 2.6.0", "parking_lot", "sha2", "thiserror", @@ -2742,7 +2743,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.3.0", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2761,7 +2762,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.3.0", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2793,6 +2794,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + [[package]] name = "headers" version = "0.3.9" @@ -3429,12 +3436,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.3.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", "serde", ] @@ -6961,7 +6968,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.3.0", + "indexmap 2.6.0", "serde", "serde_derive", "serde_json", @@ -6999,7 +7006,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -7856,7 +7863,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.6.0", "toml_datetime", "winnow 0.5.40", ] @@ -7867,7 +7874,7 @@ version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", @@ -8553,7 +8560,7 @@ dependencies = [ "bytesize", "derive_builder", "hex", - "indexmap 2.3.0", + "indexmap 2.6.0", "schemars", "semver", "serde", @@ -8639,7 +8646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" dependencies = [ "bitflags 2.6.0", - "indexmap 2.3.0", + "indexmap 2.6.0", "semver", ] diff --git a/Cargo.toml b/Cargo.toml index 0186341fd..8bb2ee166 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,6 +66,7 @@ http = "1.1.0" http-serde = "2.1.1" ic-canister-sig-creation = "1.1" ic-signature-verification = "0.2" +indexmap = "2.6.0" jsonwebtoken = "9.3.0" libp2p = "0.53.2" libp2p-stream = "0.1.0-alpha.1" diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index 980cd4c6e..c367598e4 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -297,34 +297,6 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { } impl calimero_storage::entities::Data for #name { - fn calculate_full_merkle_hash( - &self, - interface: &calimero_storage::interface::Interface, - recalculate: bool, - ) -> Result<[u8; 32], calimero_storage::interface::StorageError> { - use calimero_storage::exports::Digest; - use calimero_storage::entities::Collection; - let mut hasher = calimero_storage::exports::Sha256::new(); - hasher.update(&self.calculate_merkle_hash()?); - - // Hash collection fields - #( - for info in self.#collection_fields.child_info() { - if recalculate { - let child = interface.find_by_id - ::<<#collection_field_types as calimero_storage::entities::Collection>::Child>(info.id())? - .ok_or_else(|| calimero_storage::interface::StorageError::NotFound(info.id()))?; - hasher.update(&child.calculate_full_merkle_hash(interface, recalculate)?); - } else { - hasher.update(&info.merkle_hash()); - } - - } - )* - - Ok(hasher.finalize().into()) - } - fn calculate_merkle_hash(&self) -> Result<[u8; 32], calimero_storage::interface::StorageError> { use calimero_storage::exports::Digest; let mut hasher = calimero_storage::exports::Sha256::new(); @@ -342,9 +314,26 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { Ok(hasher.finalize().into()) } - fn collections(&self) -> std::collections::HashMap> { + fn calculate_merkle_hash_for_child( + &self, + collection: &str, + slice: &[u8], + ) -> Result<[u8; 32], calimero_storage::interface::StorageError> { + match collection { + #( + stringify!(#collection_fields) => { + let child = <#collection_field_types as calimero_storage::entities::Collection>::Child::try_from_slice(slice) + .map_err(|e| calimero_storage::interface::StorageError::DeserializationError(e))?; + child.calculate_merkle_hash() + }, + )* + _ => Err(calimero_storage::interface::StorageError::UnknownCollectionType(collection.to_owned())), + } + } + + fn collections(&self) -> std::collections::BTreeMap> { use calimero_storage::entities::Collection; - let mut collections = std::collections::HashMap::new(); + let mut collections = std::collections::BTreeMap::new(); #( collections.insert( stringify!(#collection_fields).to_owned(), diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs index 405b91469..6cca4d1c3 100644 --- a/crates/storage-macros/tests/collection.rs +++ b/crates/storage-macros/tests/collection.rs @@ -29,9 +29,7 @@ use borsh::{to_vec, BorshDeserialize}; use calimero_storage::address::Path; use calimero_storage::entities::{ChildInfo, Data, Element}; use calimero_storage::exports::{Digest, Sha256}; -use calimero_storage::interface::Interface; use calimero_storage_macros::{AtomicUnit, Collection}; -use calimero_test_utils::storage::create_test_store; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] struct Child { @@ -130,107 +128,6 @@ mod hierarchy { mod hashing { use super::*; - #[test] - fn calculate_full_merkle_hash__cached_values() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); - let mut parent = Parent::new(&Path::new("::root::node").unwrap()); - _ = parent.set_title("Parent Title".to_owned()); - assert!(interface.save(parent.id(), &mut parent).unwrap()); - assert_eq!(interface.children_of(&parent.children).unwrap(), vec![]); - - let mut child1 = Child::new(&Path::new("::root::node::leaf1").unwrap()); - let mut child2 = Child::new(&Path::new("::root::node::leaf2").unwrap()); - let mut child3 = Child::new(&Path::new("::root::node::leaf3").unwrap()); - _ = child1.set_content("Child 1 Content".to_owned()); - _ = child2.set_content("Child 2 Content".to_owned()); - _ = child3.set_content("Child 3 Content".to_owned()); - assert!(interface.save(child1.id(), &mut child1).unwrap()); - assert!(interface.save(child2.id(), &mut child2).unwrap()); - assert!(interface.save(child3.id(), &mut child3).unwrap()); - parent.children.child_info = vec![ - ChildInfo::new(child1.id(), child1.element().merkle_hash()), - ChildInfo::new(child2.id(), child2.element().merkle_hash()), - ChildInfo::new(child3.id(), child3.element().merkle_hash()), - ]; - assert!(interface.save(parent.id(), &mut parent).unwrap()); - - let mut hasher0 = Sha256::new(); - hasher0.update(parent.id().as_bytes()); - hasher0.update(&to_vec(&parent.title).unwrap()); - hasher0.update(&to_vec(&parent.element().metadata()).unwrap()); - let expected_hash0: [u8; 32] = hasher0.finalize().into(); - - let mut hasher1 = Sha256::new(); - hasher1.update(child1.id().as_bytes()); - hasher1.update(&to_vec(&child1.content).unwrap()); - hasher1.update(&to_vec(&child1.element().metadata()).unwrap()); - let expected_hash1: [u8; 32] = hasher1.finalize().into(); - let mut hasher1b = Sha256::new(); - hasher1b.update(expected_hash1); - let expected_hash1b: [u8; 32] = hasher1b.finalize().into(); - - let mut hasher2 = Sha256::new(); - hasher2.update(child2.id().as_bytes()); - hasher2.update(&to_vec(&child2.content).unwrap()); - hasher2.update(&to_vec(&child2.element().metadata()).unwrap()); - let expected_hash2: [u8; 32] = hasher2.finalize().into(); - let mut hasher2b = Sha256::new(); - hasher2b.update(expected_hash2); - let expected_hash2b: [u8; 32] = hasher2b.finalize().into(); - - let mut hasher3 = Sha256::new(); - hasher3.update(child3.id().as_bytes()); - hasher3.update(&to_vec(&child3.content).unwrap()); - hasher3.update(&to_vec(&child3.element().metadata()).unwrap()); - let expected_hash3: [u8; 32] = hasher3.finalize().into(); - let mut hasher3b = Sha256::new(); - hasher3b.update(expected_hash3); - let expected_hash3b: [u8; 32] = hasher3b.finalize().into(); - - let mut hasher = Sha256::new(); - hasher.update(&expected_hash0); - hasher.update(&expected_hash1b); - hasher.update(&expected_hash2b); - hasher.update(&expected_hash3b); - let expected_hash: [u8; 32] = hasher.finalize().into(); - - assert_eq!(parent.calculate_merkle_hash().unwrap(), expected_hash0); - assert_eq!( - child1 - .calculate_full_merkle_hash(&interface, false) - .unwrap(), - expected_hash1b - ); - assert_eq!( - child2 - .calculate_full_merkle_hash(&interface, false) - .unwrap(), - expected_hash2b - ); - assert_eq!( - child3 - .calculate_full_merkle_hash(&interface, false) - .unwrap(), - expected_hash3b - ); - assert_eq!( - parent - .calculate_full_merkle_hash(&interface, false) - .unwrap(), - expected_hash - ); - } - - #[test] - #[ignore] - fn calculate_full_merkle_hash__recalculated_values() { - // TODO: Later, tests should be added for recalculating the hashes, and - // TODO: especially checking when the data has been interfered with or - // TODO: otherwise arrived at an invalid state. - todo!() - } - #[test] fn calculate_merkle_hash__child() { let mut child = Child::new(&Path::new("::root::node::leaf").unwrap()); diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 4e74be6d7..402de1f03 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -11,6 +11,7 @@ borsh.workspace = true eyre.workspace = true fixedstr.workspace = true hex.workspace = true +indexmap.workspace = true parking_lot.workspace = true sha2.workspace = true thiserror.workspace = true diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index c783a3d0b..b30940f50 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -213,13 +213,13 @@ mod tests; use core::fmt::{self, Debug, Display, Formatter}; -use std::collections::HashMap; +use std::collections::BTreeMap; use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{BorshDeserialize, BorshSerialize}; use crate::address::{Id, Path}; -use crate::interface::{Interface, StorageError}; +use crate::interface::StorageError; /// Represents an atomic unit in the storage system. /// @@ -299,8 +299,8 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { /// the data in place and usable, and establish a basis to test against and /// enhance. /// - /// TODO: This method will likely move to the [`Interface`] when the index - /// is implemented. + /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) + /// when the index is implemented. /// #[must_use] fn child_info(&self) -> &Vec; @@ -311,8 +311,8 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { /// [`Element`]s that are directly below the [`Collection`] in the /// hierarchy. /// - /// TODO: This method will likely move to the [`Interface`] when the index - /// is implemented. + /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) + /// when the index is implemented. /// #[must_use] fn has_children(&self) -> bool; @@ -340,61 +340,55 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { pub trait Data: BorshDeserialize + BorshSerialize + Clone + Debug + PartialEq + PartialOrd + Send + Sync { - /// Calculates the Merkle hash of the [`Element`], including descendants. + /// Calculates the Merkle hash of the [`Element`]. /// /// This method calculates the Merkle hash of the [`Data`] for the - /// [`Element`], which should be based on any regular and collection fields, - /// but ignore skipped fields, private fields, and the storage field. - /// - /// Specifically, this should include the hashes of the children of the - /// various collection fields. - /// - /// # Parameters + /// [`Element`], which should be based on any regular fields, but ignore + /// skipped fields, private fields, collections, and the storage field (but + /// include the metadata). /// - /// * `interface` - The [`Interface`] to use for looking up children. - /// * `recalculate` - Whether to recalculate or use the cached value for - /// child hashes. Under normal circumstances, the cached - /// value should be used, as it is more efficient. The - /// option to recalculate is provided for situations when - /// the entire subtree needs revalidating. + /// **IMPORTANT NOTE**: Collection fields do need to be included in the hash + /// calculation, but that is a job for the caller to combine, and this + /// method therefore only calculates the hash of available data (as hashing + /// the children would involve recursive lookups). /// /// # Errors /// /// This method will return an error if there is a problem calculating the - /// hash, or looking up children. + /// hash. /// /// # See also /// - /// * [`calculate_merkle_hash()`](Data::calculate_merkle_hash()) + /// * [`calculate_merkle_hash_for_child()`](Data::calculate_merkle_hash_for_child()) /// - fn calculate_full_merkle_hash( - &self, - interface: &Interface, - recalculate: bool, - ) -> Result<[u8; 32], StorageError>; + fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError>; - /// Calculates the Merkle hash of the [`Element`]. + /// Calculates the Merkle hash of a child of the [`Element`]. /// - /// This method calculates the Merkle hash of the [`Data`] for the - /// [`Element`], which should be based on any regular fields, but ignore - /// skipped fields, private fields, collections, and the storage field (but - /// include the metadata). + /// This method calculates the Merkle hash of the specified child of the + /// [`Element`]. /// - /// **IMPORTANT NOTE**: Collection fields do need to be included in the hash - /// calculation, but that is a job for the caller to combine, and this - /// method therefore only calculates the hash of available data (as hashing - /// the children would involve recursive lookups). + /// # Parameters + /// + /// * `collection` - The name of the collection to calculate the hash for. + /// * `slice` - The slice of data to calculate the hash for. This will + /// get deserialised into the appropriate type, and the + /// hash will be calculated based on the data. /// /// # Errors /// /// This method will return an error if there is a problem calculating the - /// hash. + /// hash, or looking up children. /// /// # See also /// - /// * [`calculate_full_merkle_hash()`](Data::calculate_full_merkle_hash()) + /// * [`calculate_merkle_hash()`](Data::calculate_merkle_hash()) /// - fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError>; + fn calculate_merkle_hash_for_child( + &self, + collection: &str, + slice: &[u8], + ) -> Result<[u8; 32], StorageError>; /// Information about the [`Collection`]s present in the [`Data`]. /// @@ -402,7 +396,7 @@ pub trait Data: /// be obtained. It does not return the actual [`Collection`] types, but /// provides their names and child information. /// - fn collections(&self) -> HashMap>; + fn collections(&self) -> BTreeMap>; /// The associated [`Element`]. /// @@ -522,8 +516,8 @@ impl Display for ChildInfo { /// /// Note, this is modelled as a single entity called "Element" rather than /// separating into separate "Node" and "Leaf" entities, to simplify the -/// handling via the storage [`Interface`]. The actual nature of the [`Element`] -/// can be determined by inspection. +/// handling via the storage [`Interface`](crate::interface::Interface). The +/// actual nature of the [`Element`] can be determined by inspection. /// /// # Updates /// diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index c70914366..b04ab7202 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -214,7 +214,6 @@ mod tests; use core::fmt::Debug; -use std::collections::HashMap; use std::io::Error as IoError; use std::sync::Arc; @@ -224,7 +223,9 @@ use calimero_store::layer::{ReadLayer, WriteLayer}; use calimero_store::slice::Slice; use calimero_store::Store; use eyre::Report; +use indexmap::IndexMap; use parking_lot::RwLock; +use sha2::{Digest, Sha256}; use thiserror::Error as ThisError; use crate::address::{Id, Path}; @@ -400,7 +401,24 @@ impl Interface { entity: &D, recalculate: bool, ) -> Result<[u8; 32], StorageError> { - entity.calculate_full_merkle_hash(self, recalculate) + let mut hasher = Sha256::new(); + hasher.update(entity.calculate_merkle_hash()?); + + for (collection_name, children) in entity.collections() { + for child_info in children { + let child_hash = if recalculate { + let child_data = self + .find_by_id_raw(child_info.id())? + .ok_or_else(|| StorageError::NotFound(child_info.id()))?; + entity.calculate_merkle_hash_for_child(&collection_name, &child_data)? + } else { + child_info.merkle_hash() + }; + hasher.update(child_hash); + } + } + + Ok(hasher.finalize().into()) } /// The children of the [`Collection`]. @@ -515,19 +533,17 @@ impl Interface { let local_collections = local_entity.collections(); let foreign_collections = foreign_entity.collections(); - #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] for (local_coll_name, local_children) in &local_collections { if let Some(foreign_children) = foreign_collections.get(local_coll_name) { - let local_child_map: HashMap<_, _> = local_children + let local_child_map: IndexMap<_, _> = local_children .iter() .map(|child| (child.id(), child.merkle_hash())) .collect(); - let foreign_child_map: HashMap<_, _> = foreign_children + let foreign_child_map: IndexMap<_, _> = foreign_children .iter() .map(|child| (child.id(), child.merkle_hash())) .collect(); - #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] for (id, local_hash) in &local_child_map { match foreign_child_map.get(id) { Some(foreign_hash) if local_hash != foreign_hash => { @@ -545,7 +561,6 @@ impl Interface { } } - #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] for id in foreign_child_map.keys() { if !local_child_map.contains_key(id) { // We can't get the full data for the foreign child, so we flag it for comparison @@ -563,7 +578,6 @@ impl Interface { } // Check for collections in the foreign entity that don't exist locally - #[expect(clippy::iter_over_hash_type, reason = "Order doesn't matter here")] for (foreign_coll_name, foreign_children) in &foreign_collections { if !local_collections.contains_key(foreign_coll_name) { for child in foreign_children { @@ -831,4 +845,8 @@ pub enum StorageError { /// TODO: An error from the Store. #[error("Store error: {0}")] StoreError(#[from] Report), + + /// An unknown collection type was specified. + #[error("Unknown collection type: {0}")] + UnknownCollectionType(String), } diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index 146fcb05c..e766dd290 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -1,13 +1,13 @@ -use std::collections::HashMap; +use std::collections::BTreeMap; use std::sync::LazyLock; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use sha2::{Digest, Sha256}; -use velcro::hash_map; +use velcro::btree_map; use crate::address::Id; use crate::entities::{AtomicUnit, ChildInfo, Collection, Data, Element}; -use crate::interface::{Interface, StorageError}; +use crate::interface::StorageError; /// A set of non-empty test UUIDs. pub const TEST_UUID: [[u8; 16]; 5] = [ @@ -36,16 +36,6 @@ pub struct EmptyData { } impl Data for EmptyData { - fn calculate_full_merkle_hash( - &self, - _interface: &Interface, - _recalculate: bool, - ) -> Result<[u8; 32], StorageError> { - let mut hasher = Sha256::new(); - hasher.update(&self.calculate_merkle_hash()?); - Ok(hasher.finalize().into()) - } - fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { let mut hasher = Sha256::new(); hasher.update(self.element().id().as_bytes()); @@ -53,8 +43,16 @@ impl Data for EmptyData { Ok(hasher.finalize().into()) } - fn collections(&self) -> HashMap> { - HashMap::new() + fn calculate_merkle_hash_for_child( + &self, + collection: &str, + _slice: &[u8], + ) -> Result<[u8; 32], StorageError> { + Err(StorageError::UnknownCollectionType(collection.to_owned())) + } + + fn collections(&self) -> BTreeMap> { + BTreeMap::new() } fn element(&self) -> &Element { @@ -88,29 +86,6 @@ impl Page { impl AtomicUnit for Page {} impl Data for Page { - fn calculate_full_merkle_hash( - &self, - interface: &Interface, - recalculate: bool, - ) -> Result<[u8; 32], StorageError> { - let mut hasher = Sha256::new(); - hasher.update(&self.calculate_merkle_hash()?); - - // Hash collection fields - for info in self.paragraphs.child_info() { - if recalculate { - let child = interface - .find_by_id::<::Child>(info.id())? - .ok_or_else(|| StorageError::NotFound(info.id()))?; - hasher.update(&child.calculate_full_merkle_hash(interface, recalculate)?); - } else { - hasher.update(&info.merkle_hash()); - } - } - - Ok(hasher.finalize().into()) - } - fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { let mut hasher = Sha256::new(); hasher.update(self.element().id().as_bytes()); @@ -119,8 +94,23 @@ impl Data for Page { Ok(hasher.finalize().into()) } - fn collections(&self) -> HashMap> { - hash_map! { + fn calculate_merkle_hash_for_child( + &self, + collection: &str, + slice: &[u8], + ) -> Result<[u8; 32], StorageError> { + match collection { + "paragraphs" => { + let child = ::Child::try_from_slice(slice) + .map_err(|e| StorageError::DeserializationError(e))?; + child.calculate_merkle_hash() + } + _ => Err(StorageError::UnknownCollectionType(collection.to_owned())), + } + } + + fn collections(&self) -> BTreeMap> { + btree_map! { "paragraphs".to_owned(): self.paragraphs.child_info.clone() } } @@ -154,16 +144,6 @@ impl Paragraph { impl AtomicUnit for Paragraph {} impl Data for Paragraph { - fn calculate_full_merkle_hash( - &self, - _interface: &Interface, - _recalculate: bool, - ) -> Result<[u8; 32], StorageError> { - let mut hasher = Sha256::new(); - hasher.update(&self.calculate_merkle_hash()?); - Ok(hasher.finalize().into()) - } - fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { let mut hasher = Sha256::new(); hasher.update(self.element().id().as_bytes()); @@ -172,8 +152,16 @@ impl Data for Paragraph { Ok(hasher.finalize().into()) } - fn collections(&self) -> HashMap> { - HashMap::new() + fn calculate_merkle_hash_for_child( + &self, + collection: &str, + _slice: &[u8], + ) -> Result<[u8; 32], StorageError> { + Err(StorageError::UnknownCollectionType(collection.to_owned())) + } + + fn collections(&self) -> BTreeMap> { + BTreeMap::new() } fn element(&self) -> &Element { @@ -219,16 +207,6 @@ pub struct Person { } impl Data for Person { - fn calculate_full_merkle_hash( - &self, - _interface: &Interface, - _recalculate: bool, - ) -> Result<[u8; 32], StorageError> { - let mut hasher = Sha256::new(); - hasher.update(&self.calculate_merkle_hash()?); - Ok(hasher.finalize().into()) - } - fn calculate_merkle_hash(&self) -> Result<[u8; 32], StorageError> { let mut hasher = Sha256::new(); hasher.update(self.element().id().as_bytes()); @@ -238,8 +216,16 @@ impl Data for Person { Ok(hasher.finalize().into()) } - fn collections(&self) -> HashMap> { - HashMap::new() + fn calculate_merkle_hash_for_child( + &self, + collection: &str, + _slice: &[u8], + ) -> Result<[u8; 32], StorageError> { + Err(StorageError::UnknownCollectionType(collection.to_owned())) + } + + fn collections(&self) -> BTreeMap> { + BTreeMap::new() } fn element(&self) -> &Element { diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index 28b525df7..d1aef68a1 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -2,7 +2,7 @@ use borsh::to_vec; use calimero_test_utils::storage::create_test_store; use claims::{assert_ge, assert_le}; use sha2::{Digest, Sha256}; -use velcro::hash_map; +use velcro::btree_map; use super::*; use crate::interface::Interface; @@ -44,99 +44,6 @@ mod collection__public_methods { mod data__public_methods { use super::*; - #[test] - fn calculate_full_merkle_hash__cached_values() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); - let element = Element::new(&Path::new("::root::node").unwrap()); - let mut page = Page::new_from_element("Node", element); - assert!(interface.save(page.id(), &mut page).unwrap()); - assert_eq!(interface.children_of(&page.paragraphs).unwrap(), vec![]); - - let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); - let mut para1 = Paragraph::new_from_element("Leaf1", child1); - let mut para2 = Paragraph::new_from_element("Leaf2", child2); - let mut para3 = Paragraph::new_from_element("Leaf3", child3); - assert!(interface.save(para1.id(), &mut para1).unwrap()); - assert!(interface.save(para2.id(), &mut para2).unwrap()); - assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_info = vec![ - ChildInfo::new(para1.id(), para1.element().merkle_hash()), - ChildInfo::new(para2.id(), para2.element().merkle_hash()), - ChildInfo::new(para3.id(), para3.element().merkle_hash()), - ]; - assert!(interface.save(page.id(), &mut page).unwrap()); - - let mut hasher0 = Sha256::new(); - hasher0.update(page.id().as_bytes()); - hasher0.update(&to_vec(&page.title).unwrap()); - hasher0.update(&to_vec(&page.element().metadata).unwrap()); - let expected_hash0: [u8; 32] = hasher0.finalize().into(); - - let mut hasher1 = Sha256::new(); - hasher1.update(para1.id().as_bytes()); - hasher1.update(&to_vec(¶1.text).unwrap()); - hasher1.update(&to_vec(¶1.element().metadata).unwrap()); - let expected_hash1: [u8; 32] = hasher1.finalize().into(); - let mut hasher1b = Sha256::new(); - hasher1b.update(expected_hash1); - let expected_hash1b: [u8; 32] = hasher1b.finalize().into(); - - let mut hasher2 = Sha256::new(); - hasher2.update(para2.id().as_bytes()); - hasher2.update(&to_vec(¶2.text).unwrap()); - hasher2.update(&to_vec(¶2.element().metadata).unwrap()); - let expected_hash2: [u8; 32] = hasher2.finalize().into(); - let mut hasher2b = Sha256::new(); - hasher2b.update(expected_hash2); - let expected_hash2b: [u8; 32] = hasher2b.finalize().into(); - - let mut hasher3 = Sha256::new(); - hasher3.update(para3.id().as_bytes()); - hasher3.update(&to_vec(¶3.text).unwrap()); - hasher3.update(&to_vec(¶3.element().metadata).unwrap()); - let expected_hash3: [u8; 32] = hasher3.finalize().into(); - let mut hasher3b = Sha256::new(); - hasher3b.update(expected_hash3); - let expected_hash3b: [u8; 32] = hasher3b.finalize().into(); - - let mut hasher = Sha256::new(); - hasher.update(&expected_hash0); - hasher.update(&expected_hash1b); - hasher.update(&expected_hash2b); - hasher.update(&expected_hash3b); - let expected_hash: [u8; 32] = hasher.finalize().into(); - - assert_eq!(page.calculate_merkle_hash().unwrap(), expected_hash0); - assert_eq!( - para1.calculate_full_merkle_hash(&interface, false).unwrap(), - expected_hash1b - ); - assert_eq!( - para2.calculate_full_merkle_hash(&interface, false).unwrap(), - expected_hash2b - ); - assert_eq!( - para3.calculate_full_merkle_hash(&interface, false).unwrap(), - expected_hash3b - ); - assert_eq!( - page.calculate_full_merkle_hash(&interface, false).unwrap(), - expected_hash - ); - } - - #[test] - #[ignore] - fn calculate_full_merkle_hash__recalculated_values() { - // TODO: Later, tests should be added for recalculating the hashes, and - // TODO: especially checking when the data has been interfered with or - // TODO: otherwise arrived at an invalid state. - todo!() - } - #[test] fn calculate_merkle_hash() { let element = Element::new(&Path::new("::root::node::leaf").unwrap()); @@ -156,20 +63,79 @@ mod data__public_methods { assert_eq!(person.calculate_merkle_hash().unwrap(), expected_hash); } + #[test] + fn calculate_merkle_hash_for_child__valid() { + let parent = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", parent); + let child1 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let para1 = Paragraph::new_from_element("Leaf1", child1); + + page.paragraphs + .child_info + .push(ChildInfo::new(para1.element().id(), [0; 32])); + let para1_slice = to_vec(¶1).unwrap(); + let para1_hash = page + .calculate_merkle_hash_for_child("paragraphs", ¶1_slice) + .unwrap(); + let expected_hash1 = para1.calculate_merkle_hash().unwrap(); + assert_eq!(para1_hash, expected_hash1); + + let child2 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let para2 = Paragraph::new_from_element("Leaf2", child2); + let para2_slice = to_vec(¶2).unwrap(); + let para2_hash = page + .calculate_merkle_hash_for_child("paragraphs", ¶2_slice) + .unwrap(); + assert_ne!(para2_hash, para1_hash); + } + + #[test] + fn calculate_merkle_hash_for_child__invalid() { + let parent = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", parent); + let child1 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let para1 = Paragraph::new_from_element("Leaf1", child1); + + page.paragraphs + .child_info + .push(ChildInfo::new(para1.element().id(), [0; 32])); + let invalid_slice = &[0, 1, 2, 3]; + let result = page.calculate_merkle_hash_for_child("paragraphs", invalid_slice); + assert!(matches!(result, Err(StorageError::DeserializationError(_)))); + } + + #[test] + fn calculate_merkle_hash_for_child__unknown_collection() { + let parent = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", parent); + let child = Element::new(&Path::new("::root::node::leaf").unwrap()); + let para = Paragraph::new_from_element("Leaf", child); + + page.paragraphs + .child_info + .push(ChildInfo::new(para.element().id(), [0; 32])); + let para_slice = to_vec(¶).unwrap(); + let result = page.calculate_merkle_hash_for_child("unknown_collection", ¶_slice); + assert!(matches!( + result, + Err(StorageError::UnknownCollectionType(_)) + )); + } + #[test] fn collections() { let parent = Element::new(&Path::new("::root::node").unwrap()); let page = Page::new_from_element("Node", parent); assert_eq!( page.collections(), - hash_map! { + btree_map! { "paragraphs".to_owned(): page.paragraphs.child_info().clone() } ); let child = Element::new(&Path::new("::root::node::leaf").unwrap()); let para = Paragraph::new_from_element("Leaf", child); - assert_eq!(para.collections(), HashMap::new()); + assert_eq!(para.collections(), BTreeMap::new()); } #[test] @@ -363,9 +329,7 @@ mod element__public_methods { age: 50, storage: element.clone(), }; - let expected_hash = person - .calculate_full_merkle_hash(&interface, false) - .unwrap(); + let expected_hash = interface.calculate_merkle_hash_for(&person, false).unwrap(); assert_ne!(person.element().merkle_hash(), expected_hash); assert!(interface.save(person.element().id(), &mut person).unwrap()); diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index f2f16525b..aafa04cc4 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -23,80 +23,6 @@ mod interface__constructor { mod interface__public_methods { use super::*; - #[test] - fn calculate_merkle_hash_for__empty_record() { - let timestamp = 1_765_432_100_123_456_789; - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - element.set_id(TEST_ID[0]); - element.metadata.set_created_at(timestamp); - element.metadata.updated_at = timestamp; - let data = EmptyData { - storage: element.clone(), - }; - - let hash = interface.calculate_merkle_hash_for(&data, false).unwrap(); - assert_eq!( - hex::encode(hash), - "173f9a17aa3c6acdad8cdaf06cea4aa4eb7c87cb99e07507a417d6588e679607" - ); - } - - #[test] - fn calculate_merkle_hash_for__with_children() { - let timestamp = 1_765_432_100_123_456_789; - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); - let mut element = Element::new(&Path::new("::root::node").unwrap()); - element.set_id(TEST_ID[0]); - element.metadata.set_created_at(1_765_432_100_123_456_789); - element.metadata.updated_at = timestamp; - let mut page = Page::new_from_element("Node", element); - assert!(interface.save(page.id(), &mut page).unwrap()); - let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); - let mut para1 = Paragraph::new_from_element("Leaf1", child1); - let mut para2 = Paragraph::new_from_element("Leaf2", child2); - let mut para3 = Paragraph::new_from_element("Leaf3", child3); - para1.element_mut().set_id(TEST_ID[1]); - para2.element_mut().set_id(TEST_ID[2]); - para3.element_mut().set_id(TEST_ID[3]); - para1.element_mut().metadata.set_created_at(timestamp); - para2.element_mut().metadata.set_created_at(timestamp); - para3.element_mut().metadata.set_created_at(timestamp); - para1.element_mut().metadata.updated_at = timestamp; - para2.element_mut().metadata.updated_at = timestamp; - para3.element_mut().metadata.updated_at = timestamp; - assert!(interface.save(para1.id(), &mut para1).unwrap()); - assert!(interface.save(para2.id(), &mut para2).unwrap()); - assert!(interface.save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_info = vec![ - ChildInfo::new(para1.id(), para1.element().merkle_hash()), - ChildInfo::new(para2.id(), para2.element().merkle_hash()), - ChildInfo::new(para3.id(), para3.element().merkle_hash()), - ]; - assert!(interface.save(page.id(), &mut page).unwrap()); - - assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶1, false).unwrap()), - "9c4d6363cca5bdb5829f0aa832b573d6befd26227a0e2c3cc602edd9fda88db1", - ); - assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶2, false).unwrap()), - "449f30903c94a488f1767b91bc6626fafd82189130cf41e427f96df19a727d8b", - ); - assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶3, false).unwrap()), - "43098decf78bf10dc4c31191a5f59d277ae524859583e48689482c9ba85c5f61", - ); - assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&page, false).unwrap()), - "7593806c462bfadd97ed5228a3a60e492cce4b725f2c0e72e6e5b0f7996ee394", - ); - } - #[test] fn children_of() { let (db, _dir) = create_test_store(); @@ -166,7 +92,7 @@ mod interface__public_methods { } #[test] - fn test_save__basic() { + fn save__basic() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); @@ -176,7 +102,7 @@ mod interface__public_methods { } #[test] - fn test_save__multiple() { + fn save__multiple() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); let element1 = Element::new(&Path::new("::root::node1").unwrap()); @@ -191,7 +117,7 @@ mod interface__public_methods { } #[test] - fn test_save__not_dirty() { + fn save__not_dirty() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); @@ -204,7 +130,7 @@ mod interface__public_methods { } #[test] - fn test_save__too_old() { + fn save__too_old() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); let element1 = Element::new(&Path::new("::root::node::leaf").unwrap()); @@ -213,14 +139,15 @@ mod interface__public_methods { let id = para1.id(); assert!(interface.save(id, &mut para1).unwrap()); - para1.element_mut().update(); para2.element_mut().update(); + sleep(Duration::from_millis(1)); + para1.element_mut().update(); assert!(interface.save(id, &mut para1).unwrap()); assert!(!interface.save(id, &mut para2).unwrap()); } #[test] - fn test_save__update_existing() { + fn save__update_existing() { let (db, _dir) = create_test_store(); let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); @@ -236,21 +163,21 @@ mod interface__public_methods { #[test] #[ignore] - fn test_save__update_merkle_hash() { + fn save__update_merkle_hash() { // TODO: This is best done when there's data todo!() } #[test] #[ignore] - fn test_save__update_merkle_hash_with_children() { + fn save__update_merkle_hash_with_children() { // TODO: This is best done when there's data todo!() } #[test] #[ignore] - fn test_save__update_merkle_hash_with_parents() { + fn save__update_merkle_hash_with_parents() { // TODO: This is best done when there's data todo!() } @@ -373,8 +300,8 @@ mod interface__comparison { let mut foreign = local.clone(); assert!(interface.save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = foreign - .calculate_full_merkle_hash(&interface, false) + foreign.element_mut().merkle_hash = interface + .calculate_merkle_hash_for(&foreign, false) .unwrap(); assert_eq!( local.element().merkle_hash(), @@ -398,8 +325,8 @@ mod interface__comparison { local.element_mut().update(); assert!(interface.save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = foreign - .calculate_full_merkle_hash(&interface, false) + foreign.element_mut().merkle_hash = interface + .calculate_merkle_hash_for(&foreign, false) .unwrap(); let result = interface.compare_trees(&foreign).unwrap(); @@ -421,8 +348,8 @@ mod interface__comparison { let mut foreign = Page::new_from_element("Test Page", element); assert!(interface.save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = foreign - .calculate_full_merkle_hash(&interface, false) + foreign.element_mut().merkle_hash = interface + .calculate_merkle_hash_for(&foreign, false) .unwrap(); // Make foreign newer @@ -483,18 +410,17 @@ mod interface__comparison { assert!(interface.save(local_page.id(), &mut local_page).unwrap()); assert!(interface.save(local_para1.id(), &mut local_para1).unwrap()); assert!(interface.save(local_para2.id(), &mut local_para2).unwrap()); - foreign_page.element_mut().merkle_hash = foreign_page - .calculate_full_merkle_hash(&interface, false) + foreign_page.element_mut().merkle_hash = interface + .calculate_merkle_hash_for(&foreign_page, false) .unwrap(); - foreign_para1.element_mut().merkle_hash = foreign_para1 - .calculate_full_merkle_hash(&interface, false) + foreign_para1.element_mut().merkle_hash = interface + .calculate_merkle_hash_for(&foreign_para1, false) .unwrap(); - foreign_para3.element_mut().merkle_hash = foreign_para3 - .calculate_full_merkle_hash(&interface, false) + foreign_para3.element_mut().merkle_hash = interface + .calculate_merkle_hash_for(&foreign_para3, false) .unwrap(); - let (local_actions, mut foreign_actions) = interface.compare_trees(&foreign_page).unwrap(); - foreign_actions.sort(); + let (local_actions, foreign_actions) = interface.compare_trees(&foreign_page).unwrap(); assert_eq!( local_actions, @@ -509,12 +435,12 @@ mod interface__comparison { assert_eq!( foreign_actions, vec![ + // Para1 needs comparison due to different hash + Action::Compare(local_para1.id()), // Para2 needs to be added to foreign Action::Add(local_para2.id(), to_vec(&local_para2).unwrap()), // Para3 needs to be added locally, but we don't have the data, so we compare Action::Compare(foreign_para3.id()), - // Para1 needs comparison due to different hash - Action::Compare(local_para1.id()), ] ); @@ -545,3 +471,175 @@ mod interface__comparison { assert_eq!(foreign_para3_actions, vec![]); } } + +#[cfg(test)] +mod hashing { + use super::*; + + #[test] + fn calculate_merkle_hash_for__empty_record() { + let timestamp = 1_765_432_100_123_456_789; + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); + element.set_id(TEST_ID[0]); + element.metadata.set_created_at(timestamp); + element.metadata.updated_at = timestamp; + let data = EmptyData { + storage: element.clone(), + }; + + let hash = interface.calculate_merkle_hash_for(&data, false).unwrap(); + assert_eq!( + hex::encode(hash), + "173f9a17aa3c6acdad8cdaf06cea4aa4eb7c87cb99e07507a417d6588e679607" + ); + } + + #[test] + fn calculate_merkle_hash_for__with_children() { + let timestamp = 1_765_432_100_123_456_789; + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let mut element = Element::new(&Path::new("::root::node").unwrap()); + element.set_id(TEST_ID[0]); + element.metadata.set_created_at(1_765_432_100_123_456_789); + element.metadata.updated_at = timestamp; + let mut page = Page::new_from_element("Node", element); + assert!(interface.save(page.id(), &mut page).unwrap()); + let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); + let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); + let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para2 = Paragraph::new_from_element("Leaf2", child2); + let mut para3 = Paragraph::new_from_element("Leaf3", child3); + para1.element_mut().set_id(TEST_ID[1]); + para2.element_mut().set_id(TEST_ID[2]); + para3.element_mut().set_id(TEST_ID[3]); + para1.element_mut().metadata.set_created_at(timestamp); + para2.element_mut().metadata.set_created_at(timestamp); + para3.element_mut().metadata.set_created_at(timestamp); + para1.element_mut().metadata.updated_at = timestamp; + para2.element_mut().metadata.updated_at = timestamp; + para3.element_mut().metadata.updated_at = timestamp; + assert!(interface.save(para1.id(), &mut para1).unwrap()); + assert!(interface.save(para2.id(), &mut para2).unwrap()); + assert!(interface.save(para3.id(), &mut para3).unwrap()); + page.paragraphs.child_info = vec![ + ChildInfo::new(para1.id(), para1.element().merkle_hash()), + ChildInfo::new(para2.id(), para2.element().merkle_hash()), + ChildInfo::new(para3.id(), para3.element().merkle_hash()), + ]; + assert!(interface.save(page.id(), &mut page).unwrap()); + + assert_eq!( + hex::encode(interface.calculate_merkle_hash_for(¶1, false).unwrap()), + "9c4d6363cca5bdb5829f0aa832b573d6befd26227a0e2c3cc602edd9fda88db1", + ); + assert_eq!( + hex::encode(interface.calculate_merkle_hash_for(¶2, false).unwrap()), + "449f30903c94a488f1767b91bc6626fafd82189130cf41e427f96df19a727d8b", + ); + assert_eq!( + hex::encode(interface.calculate_merkle_hash_for(¶3, false).unwrap()), + "43098decf78bf10dc4c31191a5f59d277ae524859583e48689482c9ba85c5f61", + ); + assert_eq!( + hex::encode(interface.calculate_merkle_hash_for(&page, false).unwrap()), + "7593806c462bfadd97ed5228a3a60e492cce4b725f2c0e72e6e5b0f7996ee394", + ); + } + + #[test] + fn calculate_merkle_hash_for__cached_values() { + let (db, _dir) = create_test_store(); + let interface = Interface::new(db); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", element); + assert!(interface.save(page.id(), &mut page).unwrap()); + assert_eq!(interface.children_of(&page.paragraphs).unwrap(), vec![]); + + let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); + let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); + let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para2 = Paragraph::new_from_element("Leaf2", child2); + let mut para3 = Paragraph::new_from_element("Leaf3", child3); + assert!(interface.save(para1.id(), &mut para1).unwrap()); + assert!(interface.save(para2.id(), &mut para2).unwrap()); + assert!(interface.save(para3.id(), &mut para3).unwrap()); + page.paragraphs.child_info = vec![ + ChildInfo::new(para1.id(), para1.element().merkle_hash()), + ChildInfo::new(para2.id(), para2.element().merkle_hash()), + ChildInfo::new(para3.id(), para3.element().merkle_hash()), + ]; + assert!(interface.save(page.id(), &mut page).unwrap()); + + let mut hasher0 = Sha256::new(); + hasher0.update(page.id().as_bytes()); + hasher0.update(&to_vec(&page.title).unwrap()); + hasher0.update(&to_vec(&page.element().metadata()).unwrap()); + let expected_hash0: [u8; 32] = hasher0.finalize().into(); + + let mut hasher1 = Sha256::new(); + hasher1.update(para1.id().as_bytes()); + hasher1.update(&to_vec(¶1.text).unwrap()); + hasher1.update(&to_vec(¶1.element().metadata()).unwrap()); + let expected_hash1: [u8; 32] = hasher1.finalize().into(); + let mut hasher1b = Sha256::new(); + hasher1b.update(expected_hash1); + let expected_hash1b: [u8; 32] = hasher1b.finalize().into(); + + let mut hasher2 = Sha256::new(); + hasher2.update(para2.id().as_bytes()); + hasher2.update(&to_vec(¶2.text).unwrap()); + hasher2.update(&to_vec(¶2.element().metadata()).unwrap()); + let expected_hash2: [u8; 32] = hasher2.finalize().into(); + let mut hasher2b = Sha256::new(); + hasher2b.update(expected_hash2); + let expected_hash2b: [u8; 32] = hasher2b.finalize().into(); + + let mut hasher3 = Sha256::new(); + hasher3.update(para3.id().as_bytes()); + hasher3.update(&to_vec(¶3.text).unwrap()); + hasher3.update(&to_vec(¶3.element().metadata()).unwrap()); + let expected_hash3: [u8; 32] = hasher3.finalize().into(); + let mut hasher3b = Sha256::new(); + hasher3b.update(expected_hash3); + let expected_hash3b: [u8; 32] = hasher3b.finalize().into(); + + let mut hasher = Sha256::new(); + hasher.update(&expected_hash0); + hasher.update(&expected_hash1b); + hasher.update(&expected_hash2b); + hasher.update(&expected_hash3b); + let expected_hash: [u8; 32] = hasher.finalize().into(); + + assert_eq!(page.calculate_merkle_hash().unwrap(), expected_hash0); + assert_eq!( + interface.calculate_merkle_hash_for(¶1, false).unwrap(), + expected_hash1b + ); + assert_eq!( + interface.calculate_merkle_hash_for(¶2, false).unwrap(), + expected_hash2b + ); + assert_eq!( + interface.calculate_merkle_hash_for(¶3, false).unwrap(), + expected_hash3b + ); + assert_eq!( + interface.calculate_merkle_hash_for(&page, false).unwrap(), + expected_hash + ); + } + + #[test] + #[ignore] + fn calculate_merkle_hash_for__recalculated_values() { + // TODO: Later, tests should be added for recalculating the hashes, and + // TODO: especially checking when the data has been interfered with or + // TODO: otherwise arrived at an invalid state. + todo!() + } +} From 60f93a4b7c86a1be3cc590ca16e4e63faf2d2992 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 16 Oct 2024 13:15:19 +0100 Subject: [PATCH 10/75] feat: WASM extras (#799) Added `storage_remove()` - Added `storage_remove()`, which was missing. Added `generate_uuid()` host function - Added a `generate_uuid()` host function. This is necessary because the guest does not have randomness available. Added `time_now()` host function - Added a `time_now()` host function. This is necessary because the guest does not have randomness available. --- Cargo.lock | 3 + Cargo.toml | 2 +- crates/node/src/runtime_compat.rs | 18 ++++++ crates/runtime/Cargo.toml | 1 + crates/runtime/src/logic.rs | 83 ++++++++++++++++++++++++++++ crates/runtime/src/logic/imports.rs | 4 ++ crates/runtime/src/store.rs | 7 ++- crates/sdk/Cargo.toml | 4 ++ crates/sdk/src/env.rs | 47 ++++++++++++++++ crates/sdk/src/sys.rs | 3 + crates/storage/Cargo.toml | 3 + crates/storage/src/tests/entities.rs | 2 + 12 files changed, 173 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7f3baafc..af6027078 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1013,6 +1013,7 @@ dependencies = [ "serde_json", "thiserror", "ureq", + "uuid 1.10.0", "wasmer", "wasmer-types", ] @@ -1027,6 +1028,7 @@ dependencies = [ "serde", "serde_json", "trybuild", + "uuid 1.10.0", ] [[package]] @@ -8304,6 +8306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom", + "serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8bb2ee166..ceeb58ca8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -121,7 +121,7 @@ tracing-subscriber = "0.3.17" trybuild = "1.0" ureq = "2.9.7" url = "2.5.2" -uuid = { version = "1.10.0", features = ["v4"] } +uuid = { version = "1.10.0", features = ["serde"] } velcro = "0.5.4" wasmer = "4.2.5" wasmer-types = "4.2.5" diff --git a/crates/node/src/runtime_compat.rs b/crates/node/src/runtime_compat.rs index 142f1010a..745caef7d 100644 --- a/crates/node/src/runtime_compat.rs +++ b/crates/node/src/runtime_compat.rs @@ -83,6 +83,24 @@ impl Storage for RuntimeCompatStore<'_, '_> { Some(slice.into_boxed().into_vec()) } + fn remove(&mut self, key: &Key) -> Option> { + let key = self.state_key(key)?; + + let RuntimeCompatStoreInner::Write(store) = &mut self.inner else { + unimplemented!("Can not remove from read-only store."); + }; + + let old = store + .get(key) + .ok() + .flatten() + .map(|slice| slice.into_boxed().into_vec()); + + store.delete(key).ok()?; + + old + } + fn set(&mut self, key: Key, value: Value) -> Option { let key = self.state_key(&key)?; diff --git a/crates/runtime/Cargo.toml b/crates/runtime/Cargo.toml index 25fe66b34..9e2a55d9c 100644 --- a/crates/runtime/Cargo.toml +++ b/crates/runtime/Cargo.toml @@ -14,6 +14,7 @@ owo-colors = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"] } thiserror.workspace = true ureq.workspace = true +uuid = { workspace = true, features = ["serde", "v4"] } wasmer.workspace = true wasmer-types.workspace = true diff --git a/crates/runtime/src/logic.rs b/crates/runtime/src/logic.rs index b9a519e06..7ee9b7d8c 100644 --- a/crates/runtime/src/logic.rs +++ b/crates/runtime/src/logic.rs @@ -2,10 +2,12 @@ #![allow(clippy::mem_forget, reason = "Safe for now")] use core::num::NonZeroU64; +use std::time::{SystemTime, UNIX_EPOCH}; use borsh::from_slice as from_borsh_slice; use ouroboros::self_referencing; use serde::Serialize; +use uuid::Uuid; use crate::constraint::{Constrained, MaxU64}; use crate::errors::{FunctionCallError, HostError, Location, PanicContext}; @@ -136,6 +138,17 @@ impl<'a> VMLogic<'a> { } .build() } + + /// Generates a new UUID using v4 standard. + /// + /// This function generates a new UUID using the v4 standard. The UUID is + /// dependent on randomness, which is not available inside the guest + /// runtime. Therefore the guest needs to request this from the host. + /// + #[must_use] + pub fn generate_uuid(&self) -> Uuid { + Uuid::new_v4() + } } #[derive(Debug, Serialize)] @@ -358,6 +371,32 @@ impl VMHostFunctions<'_> { Ok(0) } + pub fn storage_remove( + &mut self, + key_ptr: u64, + key_len: u64, + register_id: u64, + ) -> VMLogicResult { + let logic = self.borrow_logic(); + + if key_len > logic.limits.max_storage_key_size.get() { + return Err(HostError::KeyLengthOverflow.into()); + } + + let key = self.read_guest_memory(key_ptr, key_len)?; + + if let Some(value) = logic.storage.get(&key) { + self.with_logic_mut(|logic| { + drop(logic.storage.remove(&key)); + logic.registers.set(logic.limits, register_id, value) + })?; + + return Ok(1); + } + + Ok(0) + } + pub fn storage_write( &mut self, key_ptr: u64, @@ -439,4 +478,48 @@ impl VMHostFunctions<'_> { self.with_logic_mut(|logic| logic.registers.set(logic.limits, register_id, data))?; Ok(status) } + + /// Generates a new UUID using v4 standard. + /// + /// This function generates a new UUID by calling the host. The UUID is + /// dependent on randomness, which is not available inside the guest + /// runtime. Therefore the guest needs to request this from the host. + /// + pub fn generate_uuid(&mut self, register_id: u64) -> VMLogicResult<()> { + self.with_logic_mut(|logic| { + let uuid = logic.generate_uuid(); + logic + .registers + .set(logic.limits, register_id, uuid.into_bytes()) + })?; + Ok(()) + } + + /// Gets the current time. + /// + /// This function obtains the current time as a nanosecond timestamp, as + /// [`SystemTime`] is not available inside the guest runtime. Therefore the + /// guest needs to request this from the host. + /// + #[expect( + clippy::cast_possible_truncation, + reason = "Impossible to overflow in normal circumstances" + )] + #[expect( + clippy::expect_used, + clippy::unwrap_in_result, + reason = "Effectively infallible here" + )] + pub fn time_now(&mut self, register_id: u64) -> VMLogicResult<()> { + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards to before the Unix epoch!") + .as_nanos() as u64; + self.with_logic_mut(|logic| { + logic + .registers + .set(logic.limits, register_id, now.to_le_bytes()) + })?; + Ok(()) + } } diff --git a/crates/runtime/src/logic/imports.rs b/crates/runtime/src/logic/imports.rs index 7bb299f0a..90ac54970 100644 --- a/crates/runtime/src/logic/imports.rs +++ b/crates/runtime/src/logic/imports.rs @@ -50,6 +50,7 @@ impl VMLogic<'_> { register_id: u64, ) -> u32; fn storage_read(key_ptr: u64, key_len: u64, register_id: u64) -> u32; + fn storage_remove(key_ptr: u64, key_len: u64, register_id: u64) -> u32; fn fetch( url_ptr: u64, @@ -62,6 +63,9 @@ impl VMLogic<'_> { body_len: u64, register_id: u64 ) -> u32; + + fn generate_uuid(register_id: u64); + fn time_now(register_id: u64); } } } diff --git a/crates/runtime/src/store.rs b/crates/runtime/src/store.rs index 97226c570..5733141ed 100644 --- a/crates/runtime/src/store.rs +++ b/crates/runtime/src/store.rs @@ -7,6 +7,7 @@ pub type Value = Vec; pub trait Storage: Debug { fn get(&self, key: &Key) -> Option; fn set(&mut self, key: Key, value: Value) -> Option; + fn remove(&mut self, key: &Key) -> Option>; // fn remove(&mut self, key: &[u8]); fn has(&self, key: &Key) -> bool; } @@ -26,9 +27,9 @@ impl Storage for InMemoryStorage { } // todo! revisit this, should we return the value by default? - // fn remove(&mut self, key: &[u8]) { - // self.inner.remove(key); - // } + fn remove(&mut self, key: &Key) -> Option> { + self.inner.remove(key) + } fn has(&self, key: &Key) -> bool { self.inner.contains_key(key) diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 024281bf8..ee1837b4d 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -11,9 +11,13 @@ borsh = { workspace = true, features = ["derive"] } cfg-if.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true +uuid.workspace = true calimero-sdk-macros = { path = "./macros" } +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +uuid = { workspace = true, features = ["serde", "v4"] } + [dev-dependencies] trybuild.workspace = true diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index b0fbc8650..459e202d4 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -1,6 +1,9 @@ use std::panic::set_hook; +#[cfg(not(target_arch = "wasm32"))] +use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{from_slice as from_borsh_slice, to_vec as to_borsh_vec}; +use uuid::Uuid; use crate::event::AppEvent; use crate::state::AppState; @@ -189,3 +192,47 @@ pub fn state_write(state: &T) { }; let _ = storage_write(STATE_KEY, &data); } + +/// Generate a new random UUID v4. +#[inline] +#[must_use] +pub fn generate_uuid() -> Uuid { + #[cfg(target_arch = "wasm32")] + { + unsafe { sys::generate_uuid(DATA_REGISTER) }; + Uuid::from_slice(&read_register_sized::<16>(DATA_REGISTER).expect("Must have UUID")) + .expect("UUID must be valid") + } + #[cfg(not(target_arch = "wasm32"))] + { + Uuid::new_v4() + } +} + +/// Gets the current time. +#[inline] +#[must_use] +pub fn time_now() -> u64 { + #[cfg(target_arch = "wasm32")] + { + unsafe { sys::time_now(DATA_REGISTER) }; + u64::from_le_bytes( + read_register(DATA_REGISTER) + .expect("Must have time") + .try_into() + .expect("Invalid time bytes"), + ) + } + #[cfg(not(target_arch = "wasm32"))] + #[expect( + clippy::cast_possible_truncation, + reason = "Impossible to overflow in normal circumstances" + )] + #[expect(clippy::expect_used, reason = "Effectively infallible here")] + { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards to before the Unix epoch!") + .as_nanos() as u64 + } +} diff --git a/crates/sdk/src/sys.rs b/crates/sdk/src/sys.rs index 50d3ff6e9..abd94734b 100644 --- a/crates/sdk/src/sys.rs +++ b/crates/sdk/src/sys.rs @@ -21,6 +21,7 @@ wasm_imports! { fn emit(event: Event<'_>); // -- fn storage_read(key: Buffer<'_>, register_id: RegisterId) -> Bool; + fn storage_remove(key: Buffer<'_>, register_id: RegisterId) -> Bool; fn storage_write(key: Buffer<'_>, value: Buffer<'_>, register_id: RegisterId) -> Bool; // -- fn fetch( @@ -30,6 +31,8 @@ wasm_imports! { body: Buffer<'_>, register_id: RegisterId ) -> Bool; + fn generate_uuid(register_id: RegisterId); + fn time_now(register_id: RegisterId); } } diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 402de1f03..c15e444e8 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -19,6 +19,9 @@ uuid.workspace = true calimero-store = { path = "../store", features = ["datatypes"] } +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +uuid = { workspace = true, features = ["serde", "v4"] } + [dev-dependencies] claims.workspace = true hex.workspace = true diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index d1aef68a1..2049b7c23 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -1,3 +1,5 @@ +use std::time::{SystemTime, UNIX_EPOCH}; + use borsh::to_vec; use calimero_test_utils::storage::create_test_store; use claims::{assert_ge, assert_le}; From 9483289fa069a26de0f4c18b48caefad961968cf Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 16 Oct 2024 13:29:17 +0100 Subject: [PATCH 11/75] feat: Presented storage through SDK (#781) Presented storage through SDK - Changed the `storage` crate to be accessible through the SDK for direct use by guest runtimes. - Removed the `store` parameter from `Interface::new()`, as it will now use the central store provided to the guest and available through `env` functions. - Removed conversion to/from `StorageKey` for `Id`, as this is no longer accessible due to the move to the SDK. - Added mock storage to use during non-WASM testing, where the guest env's storage is not available. - Added non-WASM calls into the mocked storage from `env`. Made `Interface` fully static - `Interface` no longer needs to be instantiated, and so use of `self` has been removed, along with the `new()` constructor. Updated `storage` to use WASM-compatible functions - Updated `storage` to use WASM-compatible functions for time and UUID. --- Cargo.lock | 6 +- crates/sdk/Cargo.toml | 1 + crates/sdk/src/env.rs | 37 ++- crates/sdk/src/lib.rs | 9 + crates/sdk/src/tests/mocks.rs | 24 ++ crates/storage-macros/Cargo.toml | 2 - crates/storage-macros/src/lib.rs | 2 +- crates/storage-macros/tests/atomic_unit.rs | 11 +- .../tests/compile_fail/collection.rs | 7 +- .../tests/compile_fail/collection.stderr | 6 +- crates/storage/Cargo.toml | 4 +- crates/storage/src/address.rs | 16 +- crates/storage/src/entities.rs | 22 +- crates/storage/src/interface.rs | 118 +++------- crates/storage/src/tests/entities.rs | 15 +- crates/storage/src/tests/interface.rs | 222 +++++++----------- 16 files changed, 200 insertions(+), 302 deletions(-) create mode 100644 crates/sdk/src/tests/mocks.rs diff --git a/Cargo.lock b/Cargo.lock index af6027078..352bd1e35 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1025,6 +1025,7 @@ dependencies = [ "borsh", "calimero-sdk-macros", "cfg-if 1.0.0", + "hex", "serde", "serde_json", "trybuild", @@ -1123,15 +1124,13 @@ name = "calimero-storage" version = "0.1.0" dependencies = [ "borsh", + "calimero-sdk", "calimero-storage-macros", - "calimero-store", - "calimero-test-utils", "claims", "eyre", "fixedstr", "hex", "indexmap 2.6.0", - "parking_lot", "sha2", "thiserror", "uuid 1.10.0", @@ -1144,7 +1143,6 @@ version = "0.1.0" dependencies = [ "borsh", "calimero-storage", - "calimero-test-utils", "quote", "syn 2.0.72", "trybuild", diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index ee1837b4d..581e57c8c 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -9,6 +9,7 @@ license.workspace = true [dependencies] borsh = { workspace = true, features = ["derive"] } cfg-if.workspace = true +hex.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true uuid.workspace = true diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index 459e202d4..5ec917587 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -6,6 +6,8 @@ use borsh::{from_slice as from_borsh_slice, to_vec as to_borsh_vec}; use uuid::Uuid; use crate::event::AppEvent; +#[cfg(not(target_arch = "wasm32"))] +use crate::mocks::{mock_storage_read, mock_storage_remove, mock_storage_write}; use crate::state::AppState; use crate::sys; use crate::sys::{ @@ -162,6 +164,7 @@ pub fn emit(event: &T) { unsafe { sys::emit(Event::new(&kind, &data)) } } +#[cfg(target_arch = "wasm32")] #[inline] pub fn storage_read(key: &[u8]) -> Option> { unsafe { sys::storage_read(Buffer::from(key), DATA_REGISTER) } @@ -170,6 +173,29 @@ pub fn storage_read(key: &[u8]) -> Option> { .then(|| read_register(DATA_REGISTER).unwrap_or_else(expected_register)) } +#[cfg(not(target_arch = "wasm32"))] +#[expect(clippy::print_stdout, reason = "Only used in testing")] +#[must_use] +pub fn storage_read(key: &[u8]) -> Option> { + println!("storage_read: {:?}", hex::encode(key)); + mock_storage_read(key) +} + +#[cfg(target_arch = "wasm32")] +#[inline] +pub fn storage_remove(key: &[u8]) -> bool { + unsafe { sys::storage_remove(Buffer::from(key), DATA_REGISTER).try_into() } + .unwrap_or_else(expected_boolean) +} + +#[cfg(not(target_arch = "wasm32"))] +#[expect(clippy::print_stdout, reason = "Only used in testing")] +#[must_use] +pub fn storage_remove(key: &[u8]) -> bool { + println!("storage_remove: {:?}", hex::encode(key)); + mock_storage_remove(key) +} + #[must_use] pub fn state_read() -> Option { let data = storage_read(STATE_KEY)?; @@ -179,18 +205,27 @@ pub fn state_read() -> Option { } } +#[cfg(target_arch = "wasm32")] #[inline] pub fn storage_write(key: &[u8], value: &[u8]) -> bool { unsafe { sys::storage_write(Buffer::from(key), Buffer::from(value), DATA_REGISTER).try_into() } .unwrap_or_else(expected_boolean) } +#[cfg(not(target_arch = "wasm32"))] +#[expect(clippy::print_stdout, reason = "Only used in testing")] +#[must_use] +pub fn storage_write(key: &[u8], value: &[u8]) -> bool { + println!("storage_write: {:?}", hex::encode(key)); + mock_storage_write(key, value) +} + pub fn state_write(state: &T) { let data = match to_borsh_vec(state) { Ok(data) => data, Err(err) => panic_str(&format!("Cannot serialize app state: {err:?}")), }; - let _ = storage_write(STATE_KEY, &data); + _ = storage_write(STATE_KEY, &data); } /// Generate a new random UUID v4. diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index df3133294..f07d9fe04 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -10,11 +10,20 @@ pub mod app { pub use calimero_sdk_macros::{destroy, emit, event, init, logic, state}; } +#[cfg(not(target_arch = "wasm32"))] +#[path = "tests/mocks.rs"] +mod mocks; + #[doc(hidden)] pub mod __private { pub use crate::returns::{IntoResult, WrappedReturn}; } +#[doc(hidden)] +mod wasm_mocks_package_usage { + use hex as _; +} + #[cfg(test)] mod integration_tests_package_usage { use trybuild as _; diff --git a/crates/sdk/src/tests/mocks.rs b/crates/sdk/src/tests/mocks.rs new file mode 100644 index 000000000..2bef54753 --- /dev/null +++ b/crates/sdk/src/tests/mocks.rs @@ -0,0 +1,24 @@ +use std::collections::HashMap; +use std::sync::{OnceLock, RwLock}; + +static MOCK_STORAGE: OnceLock, Vec>>> = OnceLock::new(); + +fn get_mock_storage() -> &'static RwLock, Vec>> { + MOCK_STORAGE.get_or_init(|| RwLock::new(HashMap::new())) +} + +pub fn mock_storage_read(key: &[u8]) -> Option> { + get_mock_storage().read().unwrap().get(key).cloned() +} + +pub fn mock_storage_remove(key: &[u8]) -> bool { + get_mock_storage().write().unwrap().remove(key).is_some() +} + +pub fn mock_storage_write(key: &[u8], value: &[u8]) -> bool { + get_mock_storage() + .write() + .unwrap() + .insert(key.to_vec(), value.to_vec()) + .is_some() +} diff --git a/crates/storage-macros/Cargo.toml b/crates/storage-macros/Cargo.toml index 9061af569..6e66f3521 100644 --- a/crates/storage-macros/Cargo.toml +++ b/crates/storage-macros/Cargo.toml @@ -21,7 +21,5 @@ calimero-storage = { path = "../storage" } [dev-dependencies] trybuild.workspace = true -calimero-test-utils = { path = "../test-utils" } - [lints] workspace = true diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index c367598e4..23cecc00d 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -7,7 +7,7 @@ use syn::{parse_macro_input, Data, DeriveInput, Fields, Type}; #[cfg(test)] mod integration_tests_package_usage { - use {borsh as _, calimero_storage as _, calimero_test_utils as _, trybuild as _}; + use {borsh as _, calimero_storage as _, trybuild as _}; } /// Derives the [`AtomicUnit`](calimero_storage::entities::AtomicUnit) trait for diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs index 41cea45e9..31b17905c 100644 --- a/crates/storage-macros/tests/atomic_unit.rs +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -31,7 +31,6 @@ use calimero_storage::entities::{Data, Element}; use calimero_storage::exports::{Digest, Sha256}; use calimero_storage::interface::Interface; use calimero_storage_macros::AtomicUnit; -use calimero_test_utils::storage::create_test_store; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] struct Private { @@ -154,11 +153,9 @@ mod basics { #[test] fn setters__confirm_set_dirty() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let path = Path::new("::root::node").unwrap(); let mut unit = Simple::new(&path); - assert!(interface.save(unit.id(), &mut unit).unwrap()); + assert!(Interface::save(unit.id(), &mut unit).unwrap()); assert!(!unit.element().is_dirty()); assert!(unit.set_name("Test Name".to_owned())); @@ -167,16 +164,14 @@ mod basics { #[test] fn setters__confirm_not_set_not_dirty() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let path = Path::new("::root::node").unwrap(); let mut unit = Simple::new(&path); - assert!(interface.save(unit.id(), &mut unit).unwrap()); + assert!(Interface::save(unit.id(), &mut unit).unwrap()); assert!(!unit.element().is_dirty()); assert!(unit.set_name("Test Name".to_owned())); assert!(unit.element().is_dirty()); - assert!(interface.save(unit.id(), &mut unit).unwrap()); + assert!(Interface::save(unit.id(), &mut unit).unwrap()); assert!(!unit.set_name("Test Name".to_owned())); assert!(!unit.element().is_dirty()); } diff --git a/crates/storage-macros/tests/compile_fail/collection.rs b/crates/storage-macros/tests/compile_fail/collection.rs index dd27bbadb..641d63b1a 100644 --- a/crates/storage-macros/tests/compile_fail/collection.rs +++ b/crates/storage-macros/tests/compile_fail/collection.rs @@ -2,7 +2,6 @@ use calimero_storage::address::Path; use calimero_storage::entities::{ChildInfo, Element}; use calimero_storage::interface::Interface; use calimero_storage_macros::{AtomicUnit, Collection}; -use calimero_test_utils::storage::create_test_store; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] struct Child { @@ -26,15 +25,13 @@ struct Parent { fn main() { fn child_type_specification() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let parent: Parent = Parent { group: Group { child_info: vec![] }, storage: Element::new(&Path::new("::root::node").unwrap()), }; - let _: Vec = interface.children_of(&parent.group).unwrap(); + let _: Vec = Interface::children_of(&parent.group).unwrap(); // This should fail to compile if the child type is incorrect - let _: Vec = interface.children_of(&parent.group).unwrap(); + let _: Vec = Interface::children_of(&parent.group).unwrap(); } } diff --git a/crates/storage-macros/tests/compile_fail/collection.stderr b/crates/storage-macros/tests/compile_fail/collection.stderr index a085fd1bc..23cceaa5a 100644 --- a/crates/storage-macros/tests/compile_fail/collection.stderr +++ b/crates/storage-macros/tests/compile_fail/collection.stderr @@ -1,8 +1,8 @@ error[E0308]: mismatched types - --> tests/compile_fail/collection.rs:38:30 + --> tests/compile_fail/collection.rs:35:30 | -38 | let _: Vec = interface.children_of(&parent.group).unwrap(); - | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` +35 | let _: Vec = Interface::children_of(&parent.group).unwrap(); + | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` | | | expected due to this | diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index c15e444e8..181d76db8 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -12,12 +12,11 @@ eyre.workspace = true fixedstr.workspace = true hex.workspace = true indexmap.workspace = true -parking_lot.workspace = true sha2.workspace = true thiserror.workspace = true uuid.workspace = true -calimero-store = { path = "../store", features = ["datatypes"] } +calimero-sdk = { path = "../sdk" } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] uuid = { workspace = true, features = ["serde", "v4"] } @@ -28,7 +27,6 @@ hex.workspace = true velcro.workspace = true calimero-storage-macros = { path = "../storage-macros" } -calimero-test-utils = { path = "../test-utils" } [lints] workspace = true diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index def9a507e..46390533e 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -13,7 +13,7 @@ use core::fmt::{self, Debug, Display, Formatter}; use std::io::{Error as IoError, ErrorKind as IoErrorKind, Read, Write}; use borsh::{BorshDeserialize, BorshSerialize}; -use calimero_store::key::Storage as StorageKey; +use calimero_sdk::env::generate_uuid; use fixedstr::Flexstr; use thiserror::Error as ThisError; use uuid::{Bytes, Uuid}; @@ -48,7 +48,7 @@ impl Id { /// #[must_use] pub fn new() -> Self { - Self(Uuid::new_v4()) + Self(generate_uuid()) } /// Returns a slice of 16 octets containing the value. @@ -98,18 +98,6 @@ impl Display for Id { } } -impl From for StorageKey { - fn from(id: Id) -> Self { - Self::new(*id.0.as_bytes()) - } -} - -impl From for Id { - fn from(storage: StorageKey) -> Self { - Self(Uuid::from_bytes(storage.id())) - } -} - impl From<[u8; 16]> for Id { fn from(bytes: [u8; 16]) -> Self { Self(Uuid::from_bytes(bytes)) diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index b30940f50..76d1c2206 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -214,9 +214,9 @@ mod tests; use core::fmt::{self, Debug, Display, Formatter}; use std::collections::BTreeMap; -use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{BorshDeserialize, BorshSerialize}; +use calimero_sdk::env::time_now; use crate::address::{Id, Path}; use crate::interface::StorageError; @@ -644,15 +644,7 @@ impl Element { /// #[must_use] pub fn new(path: &Path) -> Self { - #[expect( - clippy::cast_possible_truncation, - reason = "Impossible to overflow in normal circumstances" - )] - #[expect(clippy::expect_used, reason = "Effectively infallible here")] - let timestamp = SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards to before the Unix epoch!") - .as_nanos() as u64; + let timestamp = time_now(); Self { id: Id::new(), is_dirty: true, @@ -758,17 +750,9 @@ impl Element { /// This method can technically panic if the system time goes backwards, to /// before the Unix epoch, which should never ever happen! /// - #[expect( - clippy::cast_possible_truncation, - reason = "Impossible to overflow in normal circumstances" - )] - #[expect(clippy::expect_used, reason = "Effectively infallible here")] pub fn update(&mut self) { self.is_dirty = true; - self.metadata.updated_at = SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards to before the Unix epoch!") - .as_nanos() as u64; + self.metadata.updated_at = time_now(); } /// The timestamp when the [`Element`] was last updated. diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index b04ab7202..abae1311a 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -215,16 +215,11 @@ mod tests; use core::fmt::Debug; use std::io::Error as IoError; -use std::sync::Arc; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; -use calimero_store::key::Storage as StorageKey; -use calimero_store::layer::{ReadLayer, WriteLayer}; -use calimero_store::slice::Slice; -use calimero_store::Store; +use calimero_sdk::env::{storage_read, storage_remove, storage_write}; use eyre::Report; use indexmap::IndexMap; -use parking_lot::RwLock; use sha2::{Digest, Sha256}; use thiserror::Error as ThisError; @@ -278,27 +273,11 @@ pub enum Action { } /// The primary interface for the storage system. -#[derive(Debug, Clone)] +#[derive(Debug, Default, Clone)] #[non_exhaustive] -pub struct Interface { - /// The backing store to use for the storage interface. - store: Arc>, -} +pub struct Interface; impl Interface { - /// Creates a new instance of the [`Interface`]. - /// - /// # Parameters - /// - /// * `store` - The backing store to use for the storage interface. - /// - #[must_use] - pub fn new(store: Store) -> Self { - Self { - store: Arc::new(RwLock::new(store)), - } - } - /// Applies an [`Action`] to the storage system. /// /// This function accepts a single incoming [`Action`] and applies it to the @@ -325,19 +304,16 @@ impl Interface { /// If there is an error when deserialising into the specified type, or when /// applying the [`Action`], an error will be returned. /// - pub fn apply_action(&self, action: Action) -> Result<(), StorageError> { + pub fn apply_action(action: Action) -> Result<(), StorageError> { match action { Action::Add(id, serialized_data) | Action::Update(id, serialized_data) => { let mut entity = D::try_from_slice(&serialized_data) .map_err(StorageError::DeserializationError)?; - _ = self.save(id, &mut entity)?; + _ = Self::save(id, &mut entity)?; } Action::Compare(_) => return Err(StorageError::ActionNotAllowed("Compare".to_owned())), Action::Delete(id) => { - let mut store = self.store.write(); - store - .delete(&StorageKey::new(id.into())) - .map_err(StorageError::StoreError)?; + _ = storage_remove(id.to_string().as_bytes()); } } Ok(()) @@ -397,7 +373,6 @@ impl Interface { /// returned. /// pub fn calculate_merkle_hash_for( - &self, entity: &D, recalculate: bool, ) -> Result<[u8; 32], StorageError> { @@ -407,8 +382,7 @@ impl Interface { for (collection_name, children) in entity.collections() { for child_info in children { let child_hash = if recalculate { - let child_data = self - .find_by_id_raw(child_info.id())? + let child_data = Self::find_by_id_raw(child_info.id())? .ok_or_else(|| StorageError::NotFound(child_info.id()))?; entity.calculate_merkle_hash_for_child(&collection_name, &child_data)? } else { @@ -466,16 +440,10 @@ impl Interface { /// [`Element`](crate::entities::Element) cannot be found, an error will be /// returned. /// - pub fn children_of( - &self, - collection: &C, - ) -> Result, StorageError> { + pub fn children_of(collection: &C) -> Result, StorageError> { let mut children = Vec::new(); for info in collection.child_info() { - children.push( - self.find_by_id(info.id())? - .ok_or(StorageError::NotFound(info.id()))?, - ); + children.push(Self::find_by_id(info.id())?.ok_or(StorageError::NotFound(info.id()))?); } Ok(children) } @@ -502,11 +470,10 @@ impl Interface { /// data or if there are problems during the comparison process. /// pub fn compare_trees( - &self, foreign_entity: &D, ) -> Result<(Vec, Vec), StorageError> { let mut actions = (vec![], vec![]); - let Some(local_entity) = self.find_by_id::(foreign_entity.id())? else { + let Some(local_entity) = Self::find_by_id::(foreign_entity.id())? else { // Local entity doesn't exist, so we need to add it actions.0.push(Action::Add( foreign_entity.id(), @@ -552,7 +519,7 @@ impl Interface { } None => { // We need to fetch the child entity and serialize it - if let Some(local_child) = self.find_by_id_raw(*id)? { + if let Some(local_child) = Self::find_by_id_raw(*id)? { actions.1.push(Action::Add(*id, local_child)); } } @@ -570,7 +537,7 @@ impl Interface { } else { // The entire collection is missing from the foreign entity for child in local_children { - if let Some(local_child) = self.find_by_id_raw(child.id())? { + if let Some(local_child) = Self::find_by_id_raw(child.id())? { actions.1.push(Action::Add(child.id(), local_child)); } } @@ -606,22 +573,8 @@ impl Interface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - #[expect(clippy::significant_drop_tightening, reason = "False positive")] - pub fn find_by_id(&self, id: Id) -> Result, StorageError> { - // TODO: It seems fairly bizarre/unexpected that the put() method is sync - // TODO: and not async. The reasons and intentions need checking here, in - // TODO: case this find() method should be async and wrap the blocking call - // TODO: with spawn_blocking(). However, this is not straightforward at - // TODO: present because Slice uses Rc internally for some reason. - // TODO: let value = spawn_blocking(|| { - // TODO: self.store.read() - // TODO: .get(&StorageKey::new((*id).into())) - // TODO: .map_err(StorageError::StoreError) - // TODO: }).await.map_err(|err| StorageError::DispatchError(err.to_string()))??; - let store = self.store.read(); - let value = store - .get(&StorageKey::new(id.into())) - .map_err(StorageError::StoreError)?; + pub fn find_by_id(id: Id) -> Result, StorageError> { + let value = storage_read(id.to_string().as_bytes()); match value { Some(slice) => { @@ -644,8 +597,8 @@ impl Interface { /// if it exists, regardless of where it may be in the hierarchy, or what /// state it may be in. /// - /// Notably it returns the raw [`Slice`] without attempting to deserialise - /// it into a [`Data`] type. + /// Notably it returns the raw bytes without attempting to deserialise them + /// into a [`Data`] type. /// /// # Parameters /// @@ -657,13 +610,8 @@ impl Interface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - #[expect(clippy::significant_drop_tightening, reason = "False positive")] - pub fn find_by_id_raw(&self, id: Id) -> Result>, StorageError> { - let store = self.store.read(); - let value = store - .get(&StorageKey::new(id.into())) - .map_err(StorageError::StoreError)?; - Ok(value.map(|slice| slice.to_vec())) + pub fn find_by_id_raw(id: Id) -> Result>, StorageError> { + Ok(storage_read(id.to_string().as_bytes())) } /// Finds one or more [`Element`](crate::entities::Element)s by path in the @@ -684,7 +632,7 @@ impl Interface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn find_by_path(&self, _path: &Path) -> Result, StorageError> { + pub fn find_by_path(_path: &Path) -> Result, StorageError> { unimplemented!() } @@ -707,7 +655,7 @@ impl Interface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn find_children_by_id(&self, _id: Id) -> Result>, StorageError> { + pub fn find_children_by_id(_id: Id) -> Result>, StorageError> { unimplemented!() } @@ -760,7 +708,7 @@ impl Interface { /// If an error occurs when serialising data or interacting with the storage /// system, an error will be returned. /// - pub fn save(&self, id: Id, entity: &mut D) -> Result { + pub fn save(id: Id, entity: &mut D) -> Result { if !entity.element().is_dirty() { return Ok(true); } @@ -770,27 +718,19 @@ impl Interface { // is considered acceptable. If this becomes a problem, we should change // the RwLock to a ReentrantMutex, or reimplement the get() logic here to // occur within the write lock. But this seems unnecessary at present. - if let Some(mut existing) = self.find_by_id::(id)? { + if let Some(mut existing) = Self::find_by_id::(id)? { if existing.element_mut().metadata.updated_at >= entity.element().metadata.updated_at { return Ok(false); } } // TODO: Need to propagate the change up the tree, i.e. trigger a // TODO: recalculation for the ancestors. - entity.element_mut().merkle_hash = self.calculate_merkle_hash_for(entity, false)?; - - // TODO: It seems fairly bizarre/unexpected that the put() method is sync - // TODO: and not async. The reasons and intentions need checking here, in - // TODO: case this save() method should be async and wrap the blocking call - // TODO: with spawn_blocking(). However, this is not straightforward at - // TODO: present because Slice uses Rc internally for some reason. - self.store - .write() - .put( - &StorageKey::new(id.into()), - Slice::from(to_vec(entity).map_err(StorageError::SerializationError)?), - ) - .map_err(StorageError::StoreError)?; + entity.element_mut().merkle_hash = Self::calculate_merkle_hash_for(entity, false)?; + + _ = storage_write( + id.to_string().as_bytes(), + &to_vec(entity).map_err(StorageError::SerializationError)?, + ); entity.element_mut().is_dirty = false; Ok(true) } @@ -807,7 +747,7 @@ impl Interface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn validate(&self) -> Result<(), StorageError> { + pub fn validate() -> Result<(), StorageError> { unimplemented!() } } diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index 2049b7c23..d276ff8b8 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -1,7 +1,6 @@ use std::time::{SystemTime, UNIX_EPOCH}; use borsh::to_vec; -use calimero_test_utils::storage::create_test_store; use claims::{assert_ge, assert_le}; use sha2::{Digest, Sha256}; use velcro::btree_map; @@ -304,8 +303,6 @@ mod element__public_methods { #[test] fn is_dirty() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); assert!(element.is_dirty()); @@ -314,7 +311,7 @@ mod element__public_methods { age: 30, storage: element, }; - assert!(interface.save(person.element().id(), &mut person).unwrap()); + assert!(Interface::save(person.element().id(), &mut person).unwrap()); assert!(!person.element().is_dirty()); person.element_mut().update(); @@ -323,18 +320,16 @@ mod element__public_methods { #[test] fn merkle_hash() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let mut person = Person { name: "Steve".to_owned(), age: 50, storage: element.clone(), }; - let expected_hash = interface.calculate_merkle_hash_for(&person, false).unwrap(); + let expected_hash = Interface::calculate_merkle_hash_for(&person, false).unwrap(); assert_ne!(person.element().merkle_hash(), expected_hash); - assert!(interface.save(person.element().id(), &mut person).unwrap()); + assert!(Interface::save(person.element().id(), &mut person).unwrap()); assert_eq!(person.element().merkle_hash(), expected_hash); } @@ -353,8 +348,6 @@ mod element__public_methods { #[test] fn update() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let updated_at = element.metadata.updated_at; let mut person = Person { @@ -362,7 +355,7 @@ mod element__public_methods { age: 40, storage: element, }; - assert!(interface.save(person.element().id(), &mut person).unwrap()); + assert!(Interface::save(person.element().id(), &mut person).unwrap()); assert!(!person.element().is_dirty); person.element_mut().update(); diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index aafa04cc4..6fa599c45 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -1,36 +1,22 @@ use std::thread::sleep; use std::time::Duration; -use calimero_test_utils::storage::create_test_store; use claims::{assert_none, assert_ok}; use super::*; use crate::entities::{ChildInfo, Data, Element}; use crate::tests::common::{EmptyData, Page, Paragraph, TEST_ID}; -#[cfg(test)] -mod interface__constructor { - use super::*; - - #[test] - fn new() { - let (db, _dir) = create_test_store(); - drop(Interface::new(db)); - } -} - #[cfg(test)] mod interface__public_methods { use super::*; #[test] fn children_of() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", element); - assert!(interface.save(page.id(), &mut page).unwrap()); - assert_eq!(interface.children_of(&page.paragraphs).unwrap(), vec![]); + assert!(Interface::save(page.id(), &mut page).unwrap()); + assert_eq!(Interface::children_of(&page.paragraphs).unwrap(), vec![]); let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); @@ -38,39 +24,34 @@ mod interface__public_methods { let mut para1 = Paragraph::new_from_element("Leaf1", child1); let mut para2 = Paragraph::new_from_element("Leaf2", child2); let mut para3 = Paragraph::new_from_element("Leaf3", child3); - assert!(interface.save(para1.id(), &mut para1).unwrap()); - assert!(interface.save(para2.id(), &mut para2).unwrap()); - assert!(interface.save(para3.id(), &mut para3).unwrap()); + assert!(Interface::save(para1.id(), &mut para1).unwrap()); + assert!(Interface::save(para2.id(), &mut para2).unwrap()); + assert!(Interface::save(para3.id(), &mut para3).unwrap()); page.paragraphs.child_info = vec![ ChildInfo::new(para1.id(), para1.calculate_merkle_hash().unwrap()), ChildInfo::new(para2.id(), para2.calculate_merkle_hash().unwrap()), ChildInfo::new(para3.id(), para3.calculate_merkle_hash().unwrap()), ]; - assert!(interface.save(page.id(), &mut page).unwrap()); + assert!(Interface::save(page.id(), &mut page).unwrap()); assert_eq!( - interface.children_of(&page.paragraphs).unwrap(), + Interface::children_of(&page.paragraphs).unwrap(), vec![para1, para2, para3] ); } #[test] fn find_by_id__existent() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let mut para = Paragraph::new_from_element("Leaf", element); let id = para.id(); - assert!(interface.save(id, &mut para).unwrap()); + assert!(Interface::save(id, &mut para).unwrap()); - assert_eq!(interface.find_by_id(id).unwrap(), Some(para)); + assert_eq!(Interface::find_by_id(id).unwrap(), Some(para)); } #[test] fn find_by_id__non_existent() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); - - assert_none!(interface.find_by_id::(Id::new()).unwrap()); + assert_none!(Interface::find_by_id::(Id::new()).unwrap()); } #[test] @@ -93,72 +74,62 @@ mod interface__public_methods { #[test] fn save__basic() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let mut para = Paragraph::new_from_element("Leaf", element); - assert_ok!(interface.save(para.id(), &mut para)); + assert_ok!(Interface::save(para.id(), &mut para)); } #[test] fn save__multiple() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element1 = Element::new(&Path::new("::root::node1").unwrap()); let element2 = Element::new(&Path::new("::root::node2").unwrap()); let mut page1 = Page::new_from_element("Node1", element1); let mut page2 = Page::new_from_element("Node2", element2); - assert!(interface.save(page1.id(), &mut page1).unwrap()); - assert!(interface.save(page2.id(), &mut page2).unwrap()); - assert_eq!(interface.find_by_id(page1.id()).unwrap(), Some(page1)); - assert_eq!(interface.find_by_id(page2.id()).unwrap(), Some(page2)); + assert!(Interface::save(page1.id(), &mut page1).unwrap()); + assert!(Interface::save(page2.id(), &mut page2).unwrap()); + assert_eq!(Interface::find_by_id(page1.id()).unwrap(), Some(page1)); + assert_eq!(Interface::find_by_id(page2.id()).unwrap(), Some(page2)); } #[test] fn save__not_dirty() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let mut para = Paragraph::new_from_element("Leaf", element); let id = para.id(); - assert!(interface.save(id, &mut para).unwrap()); + assert!(Interface::save(id, &mut para).unwrap()); para.element_mut().update(); - assert!(interface.save(id, &mut para).unwrap()); + assert!(Interface::save(id, &mut para).unwrap()); } #[test] fn save__too_old() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element1 = Element::new(&Path::new("::root::node::leaf").unwrap()); let mut para1 = Paragraph::new_from_element("Leaf", element1); let mut para2 = para1.clone(); let id = para1.id(); - assert!(interface.save(id, &mut para1).unwrap()); + assert!(Interface::save(id, &mut para1).unwrap()); para2.element_mut().update(); sleep(Duration::from_millis(1)); para1.element_mut().update(); - assert!(interface.save(id, &mut para1).unwrap()); - assert!(!interface.save(id, &mut para2).unwrap()); + assert!(Interface::save(id, &mut para1).unwrap()); + assert!(!Interface::save(id, &mut para2).unwrap()); } #[test] fn save__update_existing() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node::leaf").unwrap()); let mut para = Paragraph::new_from_element("Leaf", element); let id = para.id(); - assert!(interface.save(id, &mut para).unwrap()); + assert!(Interface::save(id, &mut para).unwrap()); // TODO: Modify the element's data and check it changed - assert!(interface.save(id, &mut para).unwrap()); - assert_eq!(interface.find_by_id(id).unwrap(), Some(para)); + assert!(Interface::save(id, &mut para).unwrap()); + assert_eq!(Interface::find_by_id(id).unwrap(), Some(para)); } #[test] @@ -195,93 +166,81 @@ mod interface__apply_actions { #[test] fn apply_action__add() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let serialized = to_vec(&page).unwrap(); let action = Action::Add(page.id(), serialized); - assert!(interface.apply_action::(action).is_ok()); + assert!(Interface::apply_action::(action).is_ok()); // Verify the page was added - let retrieved_page = interface.find_by_id::(page.id()).unwrap(); + let retrieved_page = Interface::find_by_id::(page.id()).unwrap(); assert!(retrieved_page.is_some()); assert_eq!(retrieved_page.unwrap().title, "Test Page"); } #[test] fn apply_action__update() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let mut page = Page::new_from_element("Old Title", Element::new(&Path::new("::test").unwrap())); - assert!(interface.save(page.id(), &mut page).unwrap()); + assert!(Interface::save(page.id(), &mut page).unwrap()); page.title = "New Title".to_owned(); page.element_mut().update(); let serialized = to_vec(&page).unwrap(); let action = Action::Update(page.id(), serialized); - assert!(interface.apply_action::(action).is_ok()); + assert!(Interface::apply_action::(action).is_ok()); // Verify the page was updated - let retrieved_page = interface.find_by_id::(page.id()).unwrap().unwrap(); + let retrieved_page = Interface::find_by_id::(page.id()).unwrap().unwrap(); assert_eq!(retrieved_page.title, "New Title"); } #[test] fn apply_action__delete() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let mut page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); - assert!(interface.save(page.id(), &mut page).unwrap()); + assert!(Interface::save(page.id(), &mut page).unwrap()); let action = Action::Delete(page.id()); - assert!(interface.apply_action::(action).is_ok()); + assert!(Interface::apply_action::(action).is_ok()); // Verify the page was deleted - let retrieved_page = interface.find_by_id::(page.id()).unwrap(); + let retrieved_page = Interface::find_by_id::(page.id()).unwrap(); assert!(retrieved_page.is_none()); } #[test] fn apply_action__compare() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let action = Action::Compare(page.id()); // Compare should fail - assert!(interface.apply_action::(action).is_err()); + assert!(Interface::apply_action::(action).is_err()); } #[test] fn apply_action__wrong_type() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let serialized = to_vec(&page).unwrap(); let action = Action::Add(page.id(), serialized); // Trying to apply a Page action as if it were a Paragraph should fail - assert!(interface.apply_action::(action).is_err()); + assert!(Interface::apply_action::(action).is_err()); } #[test] fn apply_action__non_existent_update() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let serialized = to_vec(&page).unwrap(); let action = Action::Update(page.id(), serialized); // Updating a non-existent page should still succeed (it will be added) - assert!(interface.apply_action::(action).is_ok()); + assert!(Interface::apply_action::(action).is_ok()); // Verify the page was added - let retrieved_page = interface.find_by_id::(page.id()).unwrap(); + let retrieved_page = Interface::find_by_id::(page.id()).unwrap(); assert!(retrieved_page.is_some()); assert_eq!(retrieved_page.unwrap().title, "Test Page"); } @@ -293,29 +252,24 @@ mod interface__comparison { #[test] fn compare_trees__identical() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node").unwrap()); let mut local = Page::new_from_element("Test Page", element); let mut foreign = local.clone(); - assert!(interface.save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = interface - .calculate_merkle_hash_for(&foreign, false) - .unwrap(); + assert!(Interface::save(local.id(), &mut local).unwrap()); + foreign.element_mut().merkle_hash = + Interface::calculate_merkle_hash_for(&foreign, false).unwrap(); assert_eq!( local.element().merkle_hash(), foreign.element().merkle_hash() ); - let result = interface.compare_trees(&foreign).unwrap(); + let result = Interface::compare_trees(&foreign).unwrap(); assert_eq!(result, (vec![], vec![])); } #[test] fn compare_trees__local_newer() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node").unwrap()); let mut local = Page::new_from_element("Test Page", element.clone()); let mut foreign = Page::new_from_element("Old Test Page", element); @@ -324,12 +278,11 @@ mod interface__comparison { sleep(Duration::from_millis(10)); local.element_mut().update(); - assert!(interface.save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = interface - .calculate_merkle_hash_for(&foreign, false) - .unwrap(); + assert!(Interface::save(local.id(), &mut local).unwrap()); + foreign.element_mut().merkle_hash = + Interface::calculate_merkle_hash_for(&foreign, false).unwrap(); - let result = interface.compare_trees(&foreign).unwrap(); + let result = Interface::compare_trees(&foreign).unwrap(); assert_eq!( result, ( @@ -341,22 +294,19 @@ mod interface__comparison { #[test] fn compare_trees__foreign_newer() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node").unwrap()); let mut local = Page::new_from_element("Old Test Page", element.clone()); let mut foreign = Page::new_from_element("Test Page", element); - assert!(interface.save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = interface - .calculate_merkle_hash_for(&foreign, false) - .unwrap(); + assert!(Interface::save(local.id(), &mut local).unwrap()); + foreign.element_mut().merkle_hash = + Interface::calculate_merkle_hash_for(&foreign, false).unwrap(); // Make foreign newer sleep(Duration::from_millis(10)); foreign.element_mut().update(); - let result = interface.compare_trees(&foreign).unwrap(); + let result = Interface::compare_trees(&foreign).unwrap(); assert_eq!( result, ( @@ -368,9 +318,6 @@ mod interface__comparison { #[test] fn compare_trees__with_collections() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); - let page_element = Element::new(&Path::new("::root::node").unwrap()); let para1_element = Element::new(&Path::new("::root::node::leaf1").unwrap()); let para2_element = Element::new(&Path::new("::root::node::leaf2").unwrap()); @@ -407,20 +354,17 @@ mod interface__comparison { ), ]; - assert!(interface.save(local_page.id(), &mut local_page).unwrap()); - assert!(interface.save(local_para1.id(), &mut local_para1).unwrap()); - assert!(interface.save(local_para2.id(), &mut local_para2).unwrap()); - foreign_page.element_mut().merkle_hash = interface - .calculate_merkle_hash_for(&foreign_page, false) - .unwrap(); - foreign_para1.element_mut().merkle_hash = interface - .calculate_merkle_hash_for(&foreign_para1, false) - .unwrap(); - foreign_para3.element_mut().merkle_hash = interface - .calculate_merkle_hash_for(&foreign_para3, false) - .unwrap(); - - let (local_actions, foreign_actions) = interface.compare_trees(&foreign_page).unwrap(); + assert!(Interface::save(local_page.id(), &mut local_page).unwrap()); + assert!(Interface::save(local_para1.id(), &mut local_para1).unwrap()); + assert!(Interface::save(local_para2.id(), &mut local_para2).unwrap()); + foreign_page.element_mut().merkle_hash = + Interface::calculate_merkle_hash_for(&foreign_page, false).unwrap(); + foreign_para1.element_mut().merkle_hash = + Interface::calculate_merkle_hash_for(&foreign_para1, false).unwrap(); + foreign_para3.element_mut().merkle_hash = + Interface::calculate_merkle_hash_for(&foreign_para3, false).unwrap(); + + let (local_actions, foreign_actions) = Interface::compare_trees(&foreign_page).unwrap(); assert_eq!( local_actions, @@ -446,7 +390,7 @@ mod interface__comparison { // Compare the updated para1 let (local_para1_actions, foreign_para1_actions) = - interface.compare_trees(&foreign_para1).unwrap(); + Interface::compare_trees(&foreign_para1).unwrap(); assert_eq!( local_para1_actions, @@ -459,7 +403,7 @@ mod interface__comparison { // Compare para3 which doesn't exist locally let (local_para3_actions, foreign_para3_actions) = - interface.compare_trees(&foreign_para3).unwrap(); + Interface::compare_trees(&foreign_para3).unwrap(); assert_eq!( local_para3_actions, @@ -479,8 +423,6 @@ mod hashing { #[test] fn calculate_merkle_hash_for__empty_record() { let timestamp = 1_765_432_100_123_456_789; - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); element.set_id(TEST_ID[0]); element.metadata.set_created_at(timestamp); @@ -489,7 +431,7 @@ mod hashing { storage: element.clone(), }; - let hash = interface.calculate_merkle_hash_for(&data, false).unwrap(); + let hash = Interface::calculate_merkle_hash_for(&data, false).unwrap(); assert_eq!( hex::encode(hash), "173f9a17aa3c6acdad8cdaf06cea4aa4eb7c87cb99e07507a417d6588e679607" @@ -499,14 +441,12 @@ mod hashing { #[test] fn calculate_merkle_hash_for__with_children() { let timestamp = 1_765_432_100_123_456_789; - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let mut element = Element::new(&Path::new("::root::node").unwrap()); element.set_id(TEST_ID[0]); element.metadata.set_created_at(1_765_432_100_123_456_789); element.metadata.updated_at = timestamp; let mut page = Page::new_from_element("Node", element); - assert!(interface.save(page.id(), &mut page).unwrap()); + assert!(Interface::save(page.id(), &mut page).unwrap()); let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); @@ -522,42 +462,40 @@ mod hashing { para1.element_mut().metadata.updated_at = timestamp; para2.element_mut().metadata.updated_at = timestamp; para3.element_mut().metadata.updated_at = timestamp; - assert!(interface.save(para1.id(), &mut para1).unwrap()); - assert!(interface.save(para2.id(), &mut para2).unwrap()); - assert!(interface.save(para3.id(), &mut para3).unwrap()); + assert!(Interface::save(para1.id(), &mut para1).unwrap()); + assert!(Interface::save(para2.id(), &mut para2).unwrap()); + assert!(Interface::save(para3.id(), &mut para3).unwrap()); page.paragraphs.child_info = vec![ ChildInfo::new(para1.id(), para1.element().merkle_hash()), ChildInfo::new(para2.id(), para2.element().merkle_hash()), ChildInfo::new(para3.id(), para3.element().merkle_hash()), ]; - assert!(interface.save(page.id(), &mut page).unwrap()); + assert!(Interface::save(page.id(), &mut page).unwrap()); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶1, false).unwrap()), + hex::encode(Interface::calculate_merkle_hash_for(¶1, false).unwrap()), "9c4d6363cca5bdb5829f0aa832b573d6befd26227a0e2c3cc602edd9fda88db1", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶2, false).unwrap()), + hex::encode(Interface::calculate_merkle_hash_for(¶2, false).unwrap()), "449f30903c94a488f1767b91bc6626fafd82189130cf41e427f96df19a727d8b", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(¶3, false).unwrap()), + hex::encode(Interface::calculate_merkle_hash_for(¶3, false).unwrap()), "43098decf78bf10dc4c31191a5f59d277ae524859583e48689482c9ba85c5f61", ); assert_eq!( - hex::encode(interface.calculate_merkle_hash_for(&page, false).unwrap()), + hex::encode(Interface::calculate_merkle_hash_for(&page, false).unwrap()), "7593806c462bfadd97ed5228a3a60e492cce4b725f2c0e72e6e5b0f7996ee394", ); } #[test] fn calculate_merkle_hash_for__cached_values() { - let (db, _dir) = create_test_store(); - let interface = Interface::new(db); let element = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", element); - assert!(interface.save(page.id(), &mut page).unwrap()); - assert_eq!(interface.children_of(&page.paragraphs).unwrap(), vec![]); + assert!(Interface::save(page.id(), &mut page).unwrap()); + assert_eq!(Interface::children_of(&page.paragraphs).unwrap(), vec![]); let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); @@ -565,15 +503,15 @@ mod hashing { let mut para1 = Paragraph::new_from_element("Leaf1", child1); let mut para2 = Paragraph::new_from_element("Leaf2", child2); let mut para3 = Paragraph::new_from_element("Leaf3", child3); - assert!(interface.save(para1.id(), &mut para1).unwrap()); - assert!(interface.save(para2.id(), &mut para2).unwrap()); - assert!(interface.save(para3.id(), &mut para3).unwrap()); + assert!(Interface::save(para1.id(), &mut para1).unwrap()); + assert!(Interface::save(para2.id(), &mut para2).unwrap()); + assert!(Interface::save(para3.id(), &mut para3).unwrap()); page.paragraphs.child_info = vec![ ChildInfo::new(para1.id(), para1.element().merkle_hash()), ChildInfo::new(para2.id(), para2.element().merkle_hash()), ChildInfo::new(para3.id(), para3.element().merkle_hash()), ]; - assert!(interface.save(page.id(), &mut page).unwrap()); + assert!(Interface::save(page.id(), &mut page).unwrap()); let mut hasher0 = Sha256::new(); hasher0.update(page.id().as_bytes()); @@ -617,19 +555,19 @@ mod hashing { assert_eq!(page.calculate_merkle_hash().unwrap(), expected_hash0); assert_eq!( - interface.calculate_merkle_hash_for(¶1, false).unwrap(), + Interface::calculate_merkle_hash_for(¶1, false).unwrap(), expected_hash1b ); assert_eq!( - interface.calculate_merkle_hash_for(¶2, false).unwrap(), + Interface::calculate_merkle_hash_for(¶2, false).unwrap(), expected_hash2b ); assert_eq!( - interface.calculate_merkle_hash_for(¶3, false).unwrap(), + Interface::calculate_merkle_hash_for(¶3, false).unwrap(), expected_hash3b ); assert_eq!( - interface.calculate_merkle_hash_for(&page, false).unwrap(), + Interface::calculate_merkle_hash_for(&page, false).unwrap(), expected_hash ); } From f2db37eb293840e1a9657833294a98ddc563b15d Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 16 Oct 2024 13:47:42 +0100 Subject: [PATCH 12/75] feat: Added indexing (#792) Added Merkle tree indexing - Added index module to the storage crate, to take care of all index management. For now this is registration of the IDs and hashes of nodes in the tree. For any nodes that have children, their child collections are stored in the index data - this means it no longer has to be stored in the Data side, reducing the amount of serialised data in the Action payloads, and also opening this up for various performance optimisations that can take place in the Index without affecting the data side. - Added an Index struct acting as an interface to the indexing, along with an EntityIndex struct for representing the data that gets stored. This is currently the ID, parent ID, child information (the IDs and hashes of all children, by collection), plus the hash of the node-local data and the full hash of the node's data plus its children. This should be sufficient for offloading many operations onto the index, but does not replace primary production of the data hashes, which still needs to occur on the Data-implementing type. Equally, knowledge of child collections also still has to come from the type knowledge. - Updated Interface::children_of() to take a parent ID, to hook in to the new Index functionality. - Implemented Interface::find_children_by_id() now that the Index is present to allow it nicely. - Added add_child_to(), child_info_for(), has_children(), parent_of(), generate_comparison_data(), remove_child_from(), and root() functions to Interface, to map through to use the new Index functionality. - Removed Collection.child_info() and has_children(), as these are now handled through the Interface as planned. - Removed Interface::calculate_merkle_hash_for() as this is now handled by the Index. - Added Data::is_root() to indicate if a type represents the root of the modelled hierarchy. - Added #[root] designator to the AtomicUnit macro. - Added a ComparisonData struct to encapsulate the information that gets exchanged between nodes to perform a comparison, now that this is no longer available from the entity directly. Added ForeignInterface functionality - Added a StorageAdaptor trait to handle abstraction of the storage source, allowing it to be changed. - Added a MainStorage struct, used by the main Interface, now itself called MainInterface, but with a type alias to provide ease of use as Interface. - Added a ForeignInterface with ForeignStorage, for use in tests, to allow modelling of a separate data hierarchy representing another node's data. --- Cargo.lock | 2 + crates/sdk/src/tests/mocks.rs | 24 +- crates/storage-macros/Cargo.toml | 1 + crates/storage-macros/src/lib.rs | 121 ++-- crates/storage-macros/tests/atomic_unit.rs | 9 +- crates/storage-macros/tests/collection.rs | 13 +- .../tests/compile_fail/collection.rs | 14 +- .../tests/compile_fail/collection.stderr | 6 +- crates/storage/Cargo.toml | 1 + crates/storage/src/address.rs | 5 +- crates/storage/src/entities.rs | 60 +- crates/storage/src/index.rs | 465 +++++++++++++ crates/storage/src/interface.rs | 538 +++++++++++---- crates/storage/src/lib.rs | 5 + crates/storage/src/tests/common.rs | 38 +- crates/storage/src/tests/entities.rs | 70 +- crates/storage/src/tests/index.rs | 613 ++++++++++++++++++ crates/storage/src/tests/interface.rs | 372 ++++------- crates/storage/src/tests/mocks.rs | 37 ++ 19 files changed, 1808 insertions(+), 586 deletions(-) create mode 100644 crates/storage/src/index.rs create mode 100644 crates/storage/src/tests/index.rs create mode 100644 crates/storage/src/tests/mocks.rs diff --git a/Cargo.lock b/Cargo.lock index 352bd1e35..fa38aec81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1131,6 +1131,7 @@ dependencies = [ "fixedstr", "hex", "indexmap 2.6.0", + "serde", "sha2", "thiserror", "uuid 1.10.0", @@ -1142,6 +1143,7 @@ name = "calimero-storage-macros" version = "0.1.0" dependencies = [ "borsh", + "calimero-sdk", "calimero-storage", "quote", "syn 2.0.72", diff --git a/crates/sdk/src/tests/mocks.rs b/crates/sdk/src/tests/mocks.rs index 2bef54753..9da4a23cf 100644 --- a/crates/sdk/src/tests/mocks.rs +++ b/crates/sdk/src/tests/mocks.rs @@ -1,24 +1,24 @@ +use core::cell::RefCell; use std::collections::HashMap; -use std::sync::{OnceLock, RwLock}; +use std::thread_local; -static MOCK_STORAGE: OnceLock, Vec>>> = OnceLock::new(); - -fn get_mock_storage() -> &'static RwLock, Vec>> { - MOCK_STORAGE.get_or_init(|| RwLock::new(HashMap::new())) +thread_local! { + static MOCK_STORAGE: RefCell, Vec>> = RefCell::new(HashMap::new()); } pub fn mock_storage_read(key: &[u8]) -> Option> { - get_mock_storage().read().unwrap().get(key).cloned() + MOCK_STORAGE.with(|storage| storage.borrow().get(key).cloned()) } pub fn mock_storage_remove(key: &[u8]) -> bool { - get_mock_storage().write().unwrap().remove(key).is_some() + MOCK_STORAGE.with(|storage| storage.borrow_mut().remove(key).is_some()) } pub fn mock_storage_write(key: &[u8], value: &[u8]) -> bool { - get_mock_storage() - .write() - .unwrap() - .insert(key.to_vec(), value.to_vec()) - .is_some() + MOCK_STORAGE.with(|storage| { + storage + .borrow_mut() + .insert(key.to_vec(), value.to_vec()) + .is_some() + }) } diff --git a/crates/storage-macros/Cargo.toml b/crates/storage-macros/Cargo.toml index 6e66f3521..261f0b361 100644 --- a/crates/storage-macros/Cargo.toml +++ b/crates/storage-macros/Cargo.toml @@ -20,6 +20,7 @@ calimero-storage = { path = "../storage" } [dev-dependencies] trybuild.workspace = true +calimero-sdk = { path = "../sdk" } [lints] workspace = true diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index 23cecc00d..ffe265aa3 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -7,7 +7,7 @@ use syn::{parse_macro_input, Data, DeriveInput, Fields, Type}; #[cfg(test)] mod integration_tests_package_usage { - use {borsh as _, calimero_storage as _, trybuild as _}; + use {borsh as _, calimero_sdk as _, calimero_storage as _, trybuild as _}; } /// Derives the [`AtomicUnit`](calimero_storage::entities::AtomicUnit) trait for @@ -42,7 +42,8 @@ mod integration_tests_package_usage { /// /// # Struct attributes /// -/// None. +/// * `#[root]` - Indicates that the type represents a root in the hierarchy, +/// and doesn't have a parent. /// /// # Field attributes /// @@ -66,9 +67,8 @@ mod integration_tests_package_usage { /// Note that fields marked with `#[private]` or `#[skip]` must have [`Default`] /// implemented so that they can be initialised when deserialising. /// -/// TODO: The `#[collection]` attribute is not yet implemented, and the -/// `#[private]` attribute is implemented with the same functionality as -/// `#[skip]`, but in future these will be differentiated. +/// TODO: The `#[private]` attribute is implemented with the same functionality +/// as `#[skip]`, but in future these will be differentiated. /// /// # Getters and setters /// @@ -102,12 +102,9 @@ mod integration_tests_package_usage { /// } /// ``` /// -/// TODO: Once multiple child types are supported, this example will represent -/// the correct approach. -/// -/// ```ignore +/// ``` /// use calimero_storage::entities::Element; -/// use calimero_storage_macros::AtomicUnit; +/// use calimero_storage_macros::{AtomicUnit, Collection}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] /// struct Person { @@ -116,10 +113,14 @@ mod integration_tests_package_usage { /// #[private] /// secret: String, /// #[collection] -/// friends: Vec, +/// friends: Friends, /// #[storage] /// storage: Element, /// } +/// +/// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[children(Person)] +/// struct Friends; /// ``` /// /// # Panics @@ -144,10 +145,14 @@ mod integration_tests_package_usage { clippy::too_many_lines, reason = "Okay for now - will be restructured later" )] -#[proc_macro_derive(AtomicUnit, attributes(children, collection, private, skip, storage))] +#[proc_macro_derive( + AtomicUnit, + attributes(children, collection, private, root, skip, storage) +)] pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; + let is_root = input.attrs.iter().any(|attr| attr.path().is_ident("root")); let fields = match &input.data { Data::Struct(data) => &data.fields, @@ -269,12 +274,12 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { .collect(); let deserialize_impl = quote! { - impl borsh::BorshDeserialize for #name { + impl calimero_sdk::borsh::BorshDeserialize for #name { fn deserialize_reader(reader: &mut R) -> std::io::Result { let #storage_ident = #storage_ty::deserialize_reader(reader)?; Ok(Self { #storage_ident, - #(#serializable_fields: borsh::BorshDeserialize::deserialize_reader(reader)?,)* + #(#serializable_fields: calimero_sdk::borsh::BorshDeserialize::deserialize_reader(reader)?,)* #(#skipped_fields: Default::default(),)* }) } @@ -282,15 +287,29 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { }; let serialize_impl = quote! { - impl borsh::BorshSerialize for #name { + impl calimero_sdk::borsh::BorshSerialize for #name { fn serialize(&self, writer: &mut W) -> std::io::Result<()> { - borsh::BorshSerialize::serialize(&self.#storage_ident, writer)?; - #(borsh::BorshSerialize::serialize(&self.#serializable_fields, writer)?;)* + calimero_sdk::borsh::BorshSerialize::serialize(&self.#storage_ident, writer)?; + #(calimero_sdk::borsh::BorshSerialize::serialize(&self.#serializable_fields, writer)?;)* Ok(()) } } }; + let root_impl = if is_root { + quote! { + fn is_root() -> bool { + true + } + } + } else { + quote! { + fn is_root() -> bool { + false + } + } + }; + let expanded = quote! { impl #name { #(#field_implementations)* @@ -319,6 +338,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { collection: &str, slice: &[u8], ) -> Result<[u8; 32], calimero_storage::interface::StorageError> { + use calimero_sdk::borsh::BorshDeserialize; match collection { #( stringify!(#collection_fields) => { @@ -337,7 +357,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { #( collections.insert( stringify!(#collection_fields).to_owned(), - self.#collection_fields.child_info().clone() + calimero_storage::interface::Interface::child_info_for(self.id(), &self.#collection_fields).unwrap_or_default() ); )* collections @@ -350,6 +370,8 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { fn element_mut(&mut self) -> &mut calimero_storage::entities::Element { &mut self.#storage_ident } + + #root_impl } impl calimero_storage::entities::AtomicUnit for #name {} @@ -374,11 +396,6 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// /// - A `#[children(Type)]` attribute to specify the type of the children in /// the [`Collection`](calimero_storage::entities::Collection). -/// - A private `child_info` field of type [`ChildInfo`](calimero_storage::entities::ChildInfo). -/// This is needed as the [`Collection`](calimero_storage::entities::Collection) -/// needs to own its child IDs so that they can be serialised into the -/// [`Data`](calimero_storage::entities::Data)-based [`Element`](calimero_storage::entities::Element) -/// struct that owns the [`Collection`](calimero_storage::entities::Collection). /// /// # Generated implementations /// @@ -398,17 +415,13 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// /// # Field attributes /// -/// * `#[child_info]` - Indicates that the field is the storage element for the -/// child info, i.e. the IDs and Merkle hashes. This is a -/// mandatory field, and if it is missing, there will be a -/// panic during compilation. The name is arbitrary, but the -/// type has to be `HashMap<`. +/// None. /// /// # Examples /// /// ``` /// use calimero_storage_macros::{AtomicUnit, Collection}; -/// use calimero_storage::entities::{ChildInfo, Data, Element}; +/// use calimero_storage::entities::{Data, Element}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] /// struct Book { @@ -420,10 +433,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// /// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] /// #[children(Page)] -/// struct Pages { -/// #[child_info] -/// child_info: Vec, -/// } +/// struct Pages; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] /// struct Page { @@ -440,14 +450,13 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// - It is applied to anything other than a struct /// - The struct has unnamed fields /// - The `#[children(Type)]` attribute is missing or invalid -/// - The struct does not have a field annotated as `#[child_info]` /// /// # See also /// /// * [`AtomicUnit`] - For defining a single atomic unit of data that either /// stands alone, or owns one or more collections, or is a /// child in a collection. -#[proc_macro_derive(Collection, attributes(children, child_info))] +#[proc_macro_derive(Collection, attributes(children))] pub fn collection_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; @@ -458,39 +467,15 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { .and_then(|attr| attr.parse_args::().ok()) .expect("Collection derive requires #[children(Type)] attribute"); - let fields = match &input.data { - Data::Struct(data) => &data.fields, + match &input.data { + Data::Struct(_) => {} Data::Enum(_) | Data::Union(_) => panic!("Collection can only be derived for structs"), - }; - - let named_fields = match fields { - Fields::Named(fields) => &fields.named, - Fields::Unnamed(_) | Fields::Unit => { - panic!("Collection can only be derived for structs with named fields") - } - }; - - // Find the field marked with the #[child_info] attribute - let child_info_field = named_fields - .iter() - .find(|f| { - f.attrs - .iter() - .any(|attr| attr.path().is_ident("child_info")) - }) - .expect("You must designate one field with #[child_info] for the Collection"); - - let child_info_ident = child_info_field.ident.as_ref().unwrap(); - let child_info_ty = &child_info_field.ty; - let child_info_type = syn::parse2::(quote! { #child_info_ty }).unwrap(); + } let deserialize_impl = quote! { impl borsh::BorshDeserialize for #name { fn deserialize_reader(reader: &mut R) -> std::io::Result { - let #child_info_ident = <#child_info_type as borsh::BorshDeserialize>::deserialize_reader(reader)?; - Ok(Self { - #child_info_ident, - }) + Ok(Self {}) } } }; @@ -498,7 +483,7 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { let serialize_impl = quote! { impl borsh::BorshSerialize for #name { fn serialize(&self, writer: &mut W) -> std::io::Result<()> { - borsh::BorshSerialize::serialize(&self.#child_info_ident, writer) + Ok(()) } } }; @@ -507,12 +492,8 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { impl calimero_storage::entities::Collection for #name { type Child = #child_type; - fn child_info(&self) -> &Vec { - &self.#child_info_ident - } - - fn has_children(&self) -> bool { - !self.#child_info_ident.is_empty() + fn name(&self) -> &str { + stringify!(#name) } } diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs index 31b17905c..5b52b832c 100644 --- a/crates/storage-macros/tests/atomic_unit.rs +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -33,6 +33,7 @@ use calimero_storage::interface::Interface; use calimero_storage_macros::AtomicUnit; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[root] struct Private { public: String, #[private] @@ -52,6 +53,7 @@ impl Private { } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[root] struct Simple { name: String, value: i32, @@ -70,6 +72,7 @@ impl Simple { } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[root] struct Skipped { included: String, #[skip] @@ -155,7 +158,7 @@ mod basics { fn setters__confirm_set_dirty() { let path = Path::new("::root::node").unwrap(); let mut unit = Simple::new(&path); - assert!(Interface::save(unit.id(), &mut unit).unwrap()); + assert!(Interface::save(&mut unit).unwrap()); assert!(!unit.element().is_dirty()); assert!(unit.set_name("Test Name".to_owned())); @@ -166,12 +169,12 @@ mod basics { fn setters__confirm_not_set_not_dirty() { let path = Path::new("::root::node").unwrap(); let mut unit = Simple::new(&path); - assert!(Interface::save(unit.id(), &mut unit).unwrap()); + assert!(Interface::save(&mut unit).unwrap()); assert!(!unit.element().is_dirty()); assert!(unit.set_name("Test Name".to_owned())); assert!(unit.element().is_dirty()); - assert!(Interface::save(unit.id(), &mut unit).unwrap()); + assert!(Interface::save(&mut unit).unwrap()); assert!(!unit.set_name("Test Name".to_owned())); assert!(!unit.element().is_dirty()); } diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs index 6cca4d1c3..0a504a10b 100644 --- a/crates/storage-macros/tests/collection.rs +++ b/crates/storage-macros/tests/collection.rs @@ -27,7 +27,7 @@ use borsh::{to_vec, BorshDeserialize}; use calimero_storage::address::Path; -use calimero_storage::entities::{ChildInfo, Data, Element}; +use calimero_storage::entities::{Data, Element}; use calimero_storage::exports::{Digest, Sha256}; use calimero_storage_macros::{AtomicUnit, Collection}; @@ -49,20 +49,16 @@ impl Child { #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] #[children(Child)] -struct Group { - #[child_info] - child_info: Vec, -} +struct Group; impl Group { fn new() -> Self { - Self { - child_info: Vec::new(), - } + Self {} } } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[root] struct Parent { title: String, #[collection] @@ -82,6 +78,7 @@ impl Parent { } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[root] struct Simple { name: String, value: i32, diff --git a/crates/storage-macros/tests/compile_fail/collection.rs b/crates/storage-macros/tests/compile_fail/collection.rs index 641d63b1a..8b79f3fb3 100644 --- a/crates/storage-macros/tests/compile_fail/collection.rs +++ b/crates/storage-macros/tests/compile_fail/collection.rs @@ -1,5 +1,5 @@ use calimero_storage::address::Path; -use calimero_storage::entities::{ChildInfo, Element}; +use calimero_storage::entities::{Data, Element}; use calimero_storage::interface::Interface; use calimero_storage_macros::{AtomicUnit, Collection}; @@ -11,12 +11,10 @@ struct Child { #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] #[children(Child)] -struct Group { - #[child_info] - child_info: Vec, -} +struct Group; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[root] struct Parent { group: Group, #[storage] @@ -26,12 +24,12 @@ struct Parent { fn main() { fn child_type_specification() { let parent: Parent = Parent { - group: Group { child_info: vec![] }, + group: Group {}, storage: Element::new(&Path::new("::root::node").unwrap()), }; - let _: Vec = Interface::children_of(&parent.group).unwrap(); + let _: Vec = Interface::children_of(parent.id(), &parent.group).unwrap(); // This should fail to compile if the child type is incorrect - let _: Vec = Interface::children_of(&parent.group).unwrap(); + let _: Vec = Interface::children_of(parent.id(), &parent.group).unwrap(); } } diff --git a/crates/storage-macros/tests/compile_fail/collection.stderr b/crates/storage-macros/tests/compile_fail/collection.stderr index 23cceaa5a..72173c9b7 100644 --- a/crates/storage-macros/tests/compile_fail/collection.stderr +++ b/crates/storage-macros/tests/compile_fail/collection.stderr @@ -1,8 +1,8 @@ error[E0308]: mismatched types - --> tests/compile_fail/collection.rs:35:30 + --> tests/compile_fail/collection.rs:33:30 | -35 | let _: Vec = Interface::children_of(&parent.group).unwrap(); - | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` +33 | let _: Vec = Interface::children_of(parent.id(), &parent.group).unwrap(); + | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` | | | expected due to this | diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 181d76db8..519301f69 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -12,6 +12,7 @@ eyre.workspace = true fixedstr.workspace = true hex.workspace = true indexmap.workspace = true +serde.workspace = true sha2.workspace = true thiserror.workspace = true uuid.workspace = true diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index 46390533e..d12f20fb4 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -15,6 +15,7 @@ use std::io::{Error as IoError, ErrorKind as IoErrorKind, Read, Write}; use borsh::{BorshDeserialize, BorshSerialize}; use calimero_sdk::env::generate_uuid; use fixedstr::Flexstr; +use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; use uuid::{Bytes, Uuid}; @@ -33,7 +34,7 @@ use uuid::{Bytes, Uuid}; /// system operation. Abstracting the true type away provides a level of /// insulation that is useful for any future changes. /// -#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] pub struct Id(Uuid); impl Id { @@ -478,7 +479,7 @@ impl BorshDeserialize for Path { impl BorshSerialize for Path { fn serialize(&self, writer: &mut W) -> Result<(), IoError> { - self.to_string().serialize(writer) + BorshSerialize::serialize(&self.to_string(), writer) } } diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 76d1c2206..49e362602 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -217,6 +217,7 @@ use std::collections::BTreeMap; use borsh::{BorshDeserialize, BorshSerialize}; use calimero_sdk::env::time_now; +use serde::{Deserialize, Serialize}; use crate::address::{Id, Path}; use crate::interface::StorageError; @@ -269,10 +270,7 @@ pub trait AtomicUnit: Data {} /// /// #[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] /// #[children(Page)] -/// struct Pages { -/// #[child_info] -/// child_info: Vec, -/// } +/// struct Pages; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] /// struct Page { @@ -286,36 +284,11 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { /// The associated type of any children that the [`Collection`] may have. type Child: Data; - /// Information about the children of the [`Collection`]. - /// - /// This gets the IDs and Merkle hashes of the children of the - /// [`Collection`], which are the [`Element`]s that are directly below the - /// [`Collection`] in the hierarchy. - /// - /// The order of the results is guaranteed to be stable between calls. - /// - /// This is considered somewhat temporary, as there are efficiency gains to - /// be made by storing this list elsewhere — but for now, it helps to get - /// the data in place and usable, and establish a basis to test against and - /// enhance. - /// - /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) - /// when the index is implemented. - /// - #[must_use] - fn child_info(&self) -> &Vec; - - /// Whether the [`Collection`] has children. - /// - /// This checks whether the [`Collection`] has children, which are the - /// [`Element`]s that are directly below the [`Collection`] in the - /// hierarchy. + /// The name of this [`Collection`]. /// - /// TODO: This method will likely move to the [`Interface`](crate::interface::Interface) - /// when the index is implemented. + /// This is used to identify the collection when updating the index. /// - #[must_use] - fn has_children(&self) -> bool; + fn name(&self) -> &str; } /// The primary data for the [`Element`]. @@ -435,6 +408,14 @@ pub trait Data: self.element().id() } + /// Whether the [`Element`] is a root. + /// + /// This should return `true` for any types that should sit at the top of + /// the hierarchy; and `false` for all other types, i.e. ones that can have + /// parents. + /// + fn is_root() -> bool; + /// The path to the [`Element`] in the hierarchy. /// /// This is a convenience function that passes through to @@ -458,7 +439,20 @@ pub trait Data: /// purpose is to make information such as the Merkle hash trivially available /// and prevent the need for repeated lookups. /// -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[derive( + BorshDeserialize, + BorshSerialize, + Clone, + Copy, + Debug, + Deserialize, + Eq, + Hash, + Ord, + PartialEq, + PartialOrd, + Serialize, +)] #[non_exhaustive] pub struct ChildInfo { /// The unique identifier for the child [`Element`]. diff --git a/crates/storage/src/index.rs b/crates/storage/src/index.rs new file mode 100644 index 000000000..819bd9cc9 --- /dev/null +++ b/crates/storage/src/index.rs @@ -0,0 +1,465 @@ +//! Indexing system for efficient tree navigation. + +#[cfg(test)] +#[path = "tests/index.rs"] +mod tests; + +use core::marker::PhantomData; +use std::collections::BTreeMap; + +use borsh::{to_vec, BorshDeserialize, BorshSerialize}; +use sha2::{Digest, Sha256}; + +use crate::address::Id; +use crate::entities::ChildInfo; +use crate::interface::{StorageAdaptor, StorageError}; + +/// Stored index information for an entity in the storage system. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +struct EntityIndex { + /// Unique identifier of the entity. + id: Id, + + /// Identifier of the parent entity, if any. + parent_id: Option, + + /// Information about the child entities, including their [`Id`]s and Merkle + /// hashes, organised by collection name. + children: BTreeMap>, + + /// Merkle hash of the entity and its descendants. + full_hash: [u8; 32], + + /// Merkle hash of the entity's immediate data only. This gets combined with + /// the hashes of its children to form the full hash. + own_hash: [u8; 32], +} + +/// Manages the indexing system for efficient tree navigation. +pub(crate) struct Index(PhantomData); + +impl Index { + /// Adds a child to a collection in the index. + /// + /// Most entities will get added in this fashion, as nearly all will have + /// parents. Only root entities are added without a parent. + /// + /// # Parameters + /// + /// * `parent_id` - The [`Id`] of the parent entity. + /// * `collection` - The name of the collection to which the child is to be + /// added. + /// * `child` - The [`ChildInfo`] of the child entity to be added. + /// + /// # Errors + /// + /// If there's an issue retrieving or saving the index information, an error + /// will be returned. + /// + /// # See also + /// + /// * [`add_root()`](Index::add_root()) + /// * [`remove_child_from()`](Index::remove_child_from()) + /// + pub(crate) fn add_child_to( + parent_id: Id, + collection: &str, + child: ChildInfo, + ) -> Result<(), StorageError> { + let mut parent_index = + Self::get_index(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; + + let mut child_index = Self::get_index(child.id())?.unwrap_or_else(|| EntityIndex { + id: child.id(), + parent_id: None, + children: BTreeMap::new(), + full_hash: [0; 32], + own_hash: [0; 32], + }); + child_index.parent_id = Some(parent_id); + child_index.own_hash = child.merkle_hash(); + Self::save_index(&child_index)?; + child_index.full_hash = Self::calculate_full_merkle_hash_for(child.id(), false)?; + Self::save_index(&child_index)?; + + parent_index + .children + .entry(collection.to_owned()) + .or_insert_with(Vec::new) + .push(ChildInfo::new(child.id(), child_index.full_hash)); + Self::save_index(&parent_index)?; + parent_index.full_hash = Self::calculate_full_merkle_hash_for(parent_id, false)?; + Self::save_index(&parent_index)?; + + Self::recalculate_ancestor_hashes_for(parent_id)?; + Ok(()) + } + + /// Adds an index for a root entity. + /// + /// Although entities can be added arbitrarily, adding one without a parent + /// makes it a root. Therefore, this is named to make that clear. + /// + /// # Parameters + /// + /// * `root` - The [`Id`] and Merkle hash of the entity to be added. + /// + /// # Errors + /// + /// If there's an issue retrieving or saving the index information, an error + /// will be returned. + /// + /// # See also + /// + /// * [`add_child_to()`](Index::add_child_to()) + /// + pub(crate) fn add_root(root: ChildInfo) -> Result<(), StorageError> { + let mut index = Self::get_index(root.id())?.unwrap_or_else(|| EntityIndex { + id: root.id(), + parent_id: None, + children: BTreeMap::new(), + full_hash: [0; 32], + own_hash: [0; 32], + }); + index.own_hash = root.merkle_hash(); + Self::save_index(&index)?; + Ok(()) + } + + /// Calculates the Merkle hash for the entity. + /// + /// This calculates the Merkle hash for the entity, which is a cryptographic + /// hash of the significant data in the "scope" of the entity, and is used + /// to determine whether the data has changed and is valid. It is calculated + /// by hashing the substantive data in the entity, along with the hashes of + /// the children of the entity, thereby representing the state of the entire + /// hierarchy below the entity. + /// + /// This method is called automatically when the entity is updated, but can + /// also be called manually if required. + /// + /// # Significant data + /// + /// The data considered "significant" to the state of the entity, and any + /// change to which is considered to constitute a change in the state of the + /// entity, is: + /// + /// - The ID of the entity. This should never change. Arguably, this could + /// be omitted, but at present it means that empty elements are given + /// meaningful hashes. + /// - The primary [`Data`] of the entity. This is the data that the + /// consumer application has stored in the entity, and is the focus of + /// the entity. + /// - The metadata of the entity. This is the system-managed properties + /// that are used to process the entity, but are not part of the primary + /// data. Arguably the Merkle hash could be considered part of the + /// metadata, but it is not included in the [`Data`] struct at present + /// (as it obviously should not contribute to the hash, i.e. itself). + /// + /// Note that private data is not considered significant, as it is not part + /// of the shared state, and therefore does not contribute to the hash. + /// + /// # Parameters + /// + /// * `id` - The unique identifier of the entity for which to + /// calculate the Merkle hash for. + /// * `recalculate` - Whether to recalculate or use the cached value for + /// child hashes. Under normal circumstances, the cached + /// value should be used, as it is more efficient. The + /// option to recalculate is provided for situations when + /// the entire subtree needs revalidating. + /// + /// # Errors + /// + /// If there is a problem in serialising the data, an error will be + /// returned. + /// + pub(crate) fn calculate_full_merkle_hash_for( + id: Id, + recalculate: bool, + ) -> Result<[u8; 32], StorageError> { + let own_hash = Self::get_hashes_for(id)? + .ok_or(StorageError::IndexNotFound(id))? + .1; + let mut hasher = Sha256::new(); + hasher.update(own_hash); + + for collection_name in Self::get_collection_names_for(id)? { + for child in Self::get_children_of(id, &collection_name)? { + let child_hash = if recalculate { + Self::calculate_full_merkle_hash_for(child.id(), true)? + } else { + child.merkle_hash() + }; + hasher.update(child_hash); + } + } + + Ok(hasher.finalize().into()) + } + + /// Retrieves the children of a given entity. + /// + /// # Parameters + /// + /// * `parent_id` - The [`Id`] of the entity whose children are to be + /// retrieved. + /// * `collection` - The name of the collection from which to retrieve the + /// children. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + pub(crate) fn get_children_of( + parent_id: Id, + collection: &str, + ) -> Result, StorageError> { + Ok(Self::get_index(parent_id)? + .ok_or(StorageError::IndexNotFound(parent_id))? + .children + .get(collection) + .cloned() + .unwrap_or_default()) + } + + /// Retrieves the collection names of a given entity. + /// + /// # Parameters + /// + /// * `parent_id` - The [`Id`] of the entity that owns the collections. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + pub(crate) fn get_collection_names_for(parent_id: Id) -> Result, StorageError> { + Ok(Self::get_index(parent_id)? + .ok_or(StorageError::IndexNotFound(parent_id))? + .children + .keys() + .cloned() + .collect()) + } + + /// Retrieves the Merkel hashes of a given entity. + /// + /// This function returns a tuple of the "own" hash and the "full" hash of + /// the entity. The "own" hash is the hash of the entity's immediate data + /// only, while the "full" hash includes the hashes of its descendants. + /// + /// # Parameters + /// + /// * `id` - The [`Id`] of the entity whose Merkle hashes are to be + /// retrieved. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + #[expect(clippy::type_complexity, reason = "Not too complex")] + pub(crate) fn get_hashes_for(id: Id) -> Result, StorageError> { + Ok(Self::get_index(id)?.map(|index| (index.full_hash, index.own_hash))) + } + + /// Retrieves the index information for an entity. + /// + /// # Parameters + /// + /// * `id` - The [`Id`] of the entity whose index information is to be + /// retrieved. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + fn get_index(id: Id) -> Result, StorageError> { + let key = format!("index:{id}"); + match S::storage_read(key.as_bytes()) { + Some(data) => Ok(Some( + EntityIndex::try_from_slice(&data).map_err(StorageError::DeserializationError)?, + )), + None => Ok(None), + } + } + + /// Retrieves the ID of the parent of a given entity. + /// + /// # Parameters + /// + /// * `child_id` - The [`Id`] of the entity whose parent is to be retrieved. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + pub(crate) fn get_parent_id(child_id: Id) -> Result, StorageError> { + Ok(Self::get_index(child_id)?.and_then(|index| index.parent_id)) + } + + /// Whether the collection has children. + /// + /// # Parameters + /// + /// * `parent_id` - The [`Id`] of the parent entity. + /// * `collection` - The name of the collection to which the child is to be + /// added. + /// + /// # Errors + /// + /// If there's an issue retrieving or saving the index information, an error + /// will be returned. + /// + pub(crate) fn has_children(parent_id: Id, collection: &str) -> Result { + let parent_index = + Self::get_index(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; + + Ok(parent_index + .children + .get(collection) + .map_or(false, |children| !children.is_empty())) + } + + /// Recalculates the Merkle hashes of the ancestors of the entity. + /// + /// This function recalculates the Merkle hashes of the ancestors of the + /// entity with the specified ID. This is done by recalculating the Merkle + /// hash of the entity's parent, plus its children, and then repeating this + /// recursively up the hierarchy. + /// + /// # Parameters + /// + /// * `id` - The ID of the entity whose ancestors' hashes should be updated. + /// + pub(crate) fn recalculate_ancestor_hashes_for(id: Id) -> Result<(), StorageError> { + let mut current_id = id; + + while let Some(parent_id) = Self::get_parent_id(current_id)? { + let mut parent_index = + Self::get_index(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; + + // Update the child's hash in the parent's children list + for children in &mut parent_index.children.values_mut() { + if let Some(child) = children.iter_mut().find(|c| c.id() == current_id) { + let new_child_hash = Self::calculate_full_merkle_hash_for(current_id, false)?; + if child.merkle_hash() != new_child_hash { + *child = ChildInfo::new(current_id, new_child_hash); + } + break; + } + } + + // Recalculate the parent's full hash + Self::save_index(&parent_index)?; + let new_parent_hash = Self::calculate_full_merkle_hash_for(parent_id, false)?; + parent_index.full_hash = new_parent_hash; + Self::save_index(&parent_index)?; + current_id = parent_id; + } + + Ok(()) + } + + /// Removes a child from a collection in the index. + /// + /// Note that removing a child from the index also deletes the child. To + /// move a child to a different parent, just add it to the new parent. + /// + /// # Parameters + /// + /// * `parent_id` - The [`Id`] of the parent entity. + /// * `collection` - The name of the collection from which the child is to + /// be removed. + /// * `child_id` - The [`Id`] of the child entity to be removed. + /// + /// # Errors + /// + /// If there's an issue retrieving or saving the index information, an error + /// will be returned. + /// + /// # See also + /// + /// * [`add_child_to()`](Index::add_child_to()) + /// + pub(crate) fn remove_child_from( + parent_id: Id, + collection: &str, + child_id: Id, + ) -> Result<(), StorageError> { + let mut parent_index = + Self::get_index(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; + + if let Some(children) = parent_index.children.get_mut(collection) { + children.retain(|child| child.id() != child_id); + } + + Self::save_index(&parent_index)?; + parent_index.full_hash = Self::calculate_full_merkle_hash_for(parent_id, false)?; + Self::save_index(&parent_index)?; + + Self::remove_index(child_id); + + Self::recalculate_ancestor_hashes_for(parent_id)?; + Ok(()) + } + + /// Removes the index information for an entity. + /// + /// # Parameters + /// + /// * `index` - The [`EntityIndex`] to be saved. + /// + fn remove_index(id: Id) { + let key = format!("index:{id}"); + _ = S::storage_remove(key.as_bytes()); + } + + /// Saves the index information for an entity. + /// + /// # Parameters + /// + /// * `index` - The [`EntityIndex`] to be saved. + /// + /// # Errors + /// + /// If there's an issue with serialisation, an error will be returned. + /// + fn save_index(index: &EntityIndex) -> Result<(), StorageError> { + let key = format!("index:{}", index.id); + _ = S::storage_write( + key.as_bytes(), + &to_vec(index).map_err(StorageError::SerializationError)?, + ); + Ok(()) + } + + /// Updates the Merkle hash for an indexed entity. + /// + /// This accepts the Merkle hash for the entity's "own" hash only, i.e. not + /// including descendants. The "full" hash including those descendants is + /// then calculated and returned. + /// + /// # Parameters + /// + /// * `id` - The [`Id`] of the entity being updated. + /// * `merkle_hash` - The new Merkle hash for the entity. + /// + /// # Errors + /// + /// If there's an issue updating or saving the index, an error will be + /// returned. + /// + pub(crate) fn update_hash_for(id: Id, merkle_hash: [u8; 32]) -> Result<[u8; 32], StorageError> { + let mut index = Self::get_index(id)?.ok_or(StorageError::IndexNotFound(id))?; + index.own_hash = merkle_hash; + Self::save_index(&index)?; + index.full_hash = Self::calculate_full_merkle_hash_for(id, false)?; + Self::save_index(&index)?; + Ok(index.full_hash) + } +} diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index abae1311a..4c2561f8a 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -214,17 +214,23 @@ mod tests; use core::fmt::Debug; +use core::marker::PhantomData; +use std::collections::BTreeMap; use std::io::Error as IoError; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use calimero_sdk::env::{storage_read, storage_remove, storage_write}; use eyre::Report; use indexmap::IndexMap; -use sha2::{Digest, Sha256}; +use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; use crate::address::{Id, Path}; -use crate::entities::{Collection, Data}; +use crate::entities::{ChildInfo, Collection, Data}; +use crate::index::Index; + +/// Convenient type alias for the main storage system. +pub type Interface = MainInterface; /// Actions to be taken during synchronisation. /// @@ -272,12 +278,72 @@ pub enum Action { Update(Id, Vec), } +/// Data that is used for comparison between two nodes. +#[derive( + BorshDeserialize, + BorshSerialize, + Clone, + Debug, + Deserialize, + Eq, + Hash, + Ord, + PartialEq, + PartialOrd, + Serialize, +)] +pub struct ComparisonData { + /// The unique identifier of the entity being compared. + id: Id, + + /// The Merkle hash of the entity's own data, without any descendants. + own_hash: [u8; 32], + + /// The Merkle hash of the entity's complete data, including child hashes. + full_hash: [u8; 32], + + /// The list of children of the entity, with their IDs and hashes, + /// organised by collection name. + children: BTreeMap>, +} + /// The primary interface for the storage system. #[derive(Debug, Default, Clone)] +#[expect(private_bounds, reason = "The StorageAdaptor is for internal use only")] #[non_exhaustive] -pub struct Interface; +pub struct MainInterface(PhantomData); + +#[expect(private_bounds, reason = "The StorageAdaptor is for internal use only")] +impl MainInterface { + /// Adds a child to a collection. + /// + /// # Parameters + /// + /// * `parent_id` - The ID of the parent entity that owns the + /// [`Collection`]. + /// * `collection` - The [`Collection`] to which the child should be added. + /// * `child` - The child entity to add. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn add_child_to( + parent_id: Id, + collection: &mut C, + child: &mut D, + ) -> Result { + let own_hash = child.calculate_merkle_hash()?; + >::add_child_to( + parent_id, + collection.name(), + ChildInfo::new(child.id(), own_hash), + )?; + child.element_mut().merkle_hash = >::update_hash_for(child.id(), own_hash)?; + Self::save(child) + } -impl Interface { /// Applies an [`Action`] to the storage system. /// /// This function accepts a single incoming [`Action`] and applies it to the @@ -306,95 +372,19 @@ impl Interface { /// pub fn apply_action(action: Action) -> Result<(), StorageError> { match action { - Action::Add(id, serialized_data) | Action::Update(id, serialized_data) => { + Action::Add(_id, serialized_data) | Action::Update(_id, serialized_data) => { let mut entity = D::try_from_slice(&serialized_data) .map_err(StorageError::DeserializationError)?; - _ = Self::save(id, &mut entity)?; + _ = Self::save(&mut entity)?; } Action::Compare(_) => return Err(StorageError::ActionNotAllowed("Compare".to_owned())), Action::Delete(id) => { - _ = storage_remove(id.to_string().as_bytes()); + _ = S::storage_remove(id.as_bytes()); } } Ok(()) } - /// Calculates the Merkle hash for the [`Element`](crate::entities::Element). - /// - /// This calculates the Merkle hash for the - /// [`Element`](crate::entities::Element), which is a cryptographic hash of - /// the significant data in the "scope" of the [`Element`](crate::entities::Element), - /// and is used to determine whether the data has changed and is valid. It - /// is calculated by hashing the substantive data in the [`Element`](crate::entities::Element), - /// along with the hashes of the children of the [`Element`](crate::entities::Element), - /// thereby representing the state of the entire hierarchy below the - /// [`Element`](crate::entities::Element). - /// - /// This method is called automatically when the [`Element`](crate::entities::Element) - /// is updated, but can also be called manually if required. - /// - /// # Significant data - /// - /// The data considered "significant" to the state of the [`Element`](crate::entities::Element), - /// and any change to which is considered to constitute a change in the - /// state of the [`Element`](crate::entities::Element), is: - /// - /// - The ID of the [`Element`](crate::entities::Element). This should - /// never change. Arguably, this could be omitted, but at present it - /// means that empty elements are given meaningful hashes. - /// - The primary [`Data`] of the [`Element`](crate::entities::Element). - /// This is the data that the consumer application has stored in the - /// [`Element`](crate::entities::Element), and is the focus of the - /// [`Element`](crate::entities::Element). - /// - The metadata of the [`Element`](crate::entities::Element). This is - /// the system-managed properties that are used to process the - /// [`Element`](crate::entities::Element), but are not part of the - /// primary data. Arguably the Merkle hash could be considered part of - /// the metadata, but it is not included in the [`Data`] struct at - /// present (as it obviously should not contribute to the hash, i.e. - /// itself). - /// - /// Note that private data is not considered significant, as it is not part - /// of the shared state, and therefore does not contribute to the hash. - /// - /// # Parameters - /// - /// * `element` - The [`Element`](crate::entities::Element) to calculate - /// the Merkle hash for. - /// * `recalculate` - Whether to recalculate or use the cached value for - /// child hashes. Under normal circumstances, the cached - /// value should be used, as it is more efficient. The - /// option to recalculate is provided for situations when - /// the entire subtree needs revalidating. - /// - /// # Errors - /// - /// If there is a problem in serialising the data, an error will be - /// returned. - /// - pub fn calculate_merkle_hash_for( - entity: &D, - recalculate: bool, - ) -> Result<[u8; 32], StorageError> { - let mut hasher = Sha256::new(); - hasher.update(entity.calculate_merkle_hash()?); - - for (collection_name, children) in entity.collections() { - for child_info in children { - let child_hash = if recalculate { - let child_data = Self::find_by_id_raw(child_info.id())? - .ok_or_else(|| StorageError::NotFound(child_info.id()))?; - entity.calculate_merkle_hash_for_child(&collection_name, &child_data)? - } else { - child_info.merkle_hash() - }; - hasher.update(child_hash); - } - } - - Ok(hasher.finalize().into()) - } - /// The children of the [`Collection`]. /// /// This gets the children of the [`Collection`], which are the [`Element`](crate::entities::Element)s @@ -432,6 +422,8 @@ impl Interface { /// /// # Parameters /// + /// * `parent_id` - The ID of the parent entity that owns the + /// [`Collection`]. /// * `collection` - The [`Collection`] to get the children of. /// /// # Errors @@ -440,14 +432,53 @@ impl Interface { /// [`Element`](crate::entities::Element) cannot be found, an error will be /// returned. /// - pub fn children_of(collection: &C) -> Result, StorageError> { + pub fn children_of( + parent_id: Id, + collection: &C, + ) -> Result, StorageError> { + let children_info = >::get_children_of(parent_id, collection.name())?; let mut children = Vec::new(); - for info in collection.child_info() { - children.push(Self::find_by_id(info.id())?.ok_or(StorageError::NotFound(info.id()))?); + for child_info in children_info { + if let Some(child) = Self::find_by_id(child_info.id())? { + children.push(child); + } } Ok(children) } + /// The basic info for children of the [`Collection`]. + /// + /// This gets basic info for children of the [`Collection`], which are the + /// [`Element`](crate::entities::Element)s that are directly below the + /// [`Collection`]'s owner in the hierarchy. This is a simple method that + /// returns the children as a list, and does not provide any filtering or + /// ordering. + /// + /// See [`children_of()`](Interface::children_of()) for more information. + /// + /// # Parameters + /// + /// * `parent_id` - The ID of the parent entity that owns the + /// [`Collection`]. + /// * `collection` - The [`Collection`] to get the children of. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + /// # See also + /// + /// [`children_of()`](Interface::children_of()) + /// + pub fn child_info_for( + parent_id: Id, + collection: &C, + ) -> Result, StorageError> { + >::get_children_of(parent_id, collection.name()) + } + /// Compares a foreign entity with a local one. /// /// This function compares a foreign entity, usually from a remote node, @@ -471,7 +502,12 @@ impl Interface { /// pub fn compare_trees( foreign_entity: &D, + foreign_index_data: &ComparisonData, ) -> Result<(Vec, Vec), StorageError> { + if foreign_entity.id() != foreign_index_data.id { + return Err(StorageError::IdentifierMismatch(foreign_index_data.id)); + } + let mut actions = (vec![], vec![]); let Some(local_entity) = Self::find_by_id::(foreign_entity.id())? else { // Local entity doesn't exist, so we need to add it @@ -482,26 +518,38 @@ impl Interface { return Ok(actions); }; - if local_entity.element().merkle_hash() == foreign_entity.element().merkle_hash() { + let (local_full_hash, local_own_hash) = >::get_hashes_for(local_entity.id())? + .ok_or(StorageError::IndexNotFound(local_entity.id()))?; + + // Compare full Merkle hashes + if local_entity.element().merkle_hash() == foreign_entity.element().merkle_hash() + || local_full_hash == foreign_index_data.full_hash + { return Ok(actions); } - if local_entity.element().updated_at() <= foreign_entity.element().updated_at() { - actions.0.push(Action::Update( - local_entity.id(), - to_vec(foreign_entity).map_err(StorageError::SerializationError)?, - )); - } else { - actions.1.push(Action::Update( - foreign_entity.id(), - to_vec(&local_entity).map_err(StorageError::SerializationError)?, - )); + + // Compare own hashes and timestamps + if local_own_hash != foreign_index_data.own_hash { + if local_entity.element().updated_at() <= foreign_entity.element().updated_at() { + actions.0.push(Action::Update( + local_entity.id(), + to_vec(foreign_entity).map_err(StorageError::SerializationError)?, + )); + } else { + actions.1.push(Action::Update( + foreign_entity.id(), + to_vec(&local_entity).map_err(StorageError::SerializationError)?, + )); + } } + // The list of collections from the type will be the same on both sides, as + // the type is the same. let local_collections = local_entity.collections(); - let foreign_collections = foreign_entity.collections(); + // Compare children for (local_coll_name, local_children) in &local_collections { - if let Some(foreign_children) = foreign_collections.get(local_coll_name) { + if let Some(foreign_children) = foreign_index_data.children.get(local_coll_name) { let local_child_map: IndexMap<_, _> = local_children .iter() .map(|child| (child.id(), child.merkle_hash())) @@ -518,7 +566,6 @@ impl Interface { actions.1.push(Action::Compare(*id)); } None => { - // We need to fetch the child entity and serialize it if let Some(local_child) = Self::find_by_id_raw(*id)? { actions.1.push(Action::Add(*id, local_child)); } @@ -530,7 +577,9 @@ impl Interface { for id in foreign_child_map.keys() { if !local_child_map.contains_key(id) { - // We can't get the full data for the foreign child, so we flag it for comparison + // Child exists in foreign but not locally, compare. + // We can't get the full data for the foreign child, so we flag it for + // comparison. actions.1.push(Action::Compare(*id)); } } @@ -545,7 +594,7 @@ impl Interface { } // Check for collections in the foreign entity that don't exist locally - for (foreign_coll_name, foreign_children) in &foreign_collections { + for (foreign_coll_name, foreign_children) in &foreign_index_data.children { if !local_collections.contains_key(foreign_coll_name) { for child in foreign_children { // We can't get the full data for the foreign child, so we flag it for comparison @@ -574,7 +623,7 @@ impl Interface { /// will be returned. /// pub fn find_by_id(id: Id) -> Result, StorageError> { - let value = storage_read(id.to_string().as_bytes()); + let value = S::storage_read(id.as_bytes()); match value { Some(slice) => { @@ -611,7 +660,7 @@ impl Interface { /// will be returned. /// pub fn find_by_id_raw(id: Id) -> Result>, StorageError> { - Ok(storage_read(id.to_string().as_bytes())) + Ok(S::storage_read(id.as_bytes())) } /// Finds one or more [`Element`](crate::entities::Element)s by path in the @@ -647,16 +696,140 @@ impl Interface { /// /// # Parameters /// - /// * `id` - The unique identifier of the [`Element`](crate::entities::Element) - /// to find the children of. + /// * `parent_id` - The unique identifier of the [`Element`](crate::entities::Element) + /// to find the children of. + /// * `collection` - The name of the [`Collection`] to find the children of. /// /// # Errors /// /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn find_children_by_id(_id: Id) -> Result>, StorageError> { - unimplemented!() + pub fn find_children_by_id( + parent_id: Id, + collection: &str, + ) -> Result, StorageError> { + let child_infos = >::get_children_of(parent_id, collection)?; + let mut children = Vec::new(); + for child_info in child_infos { + if let Some(child) = Self::find_by_id(child_info.id())? { + children.push(child); + } + } + Ok(children) + } + + /// Generates comparison data for an entity. + /// + /// This function generates comparison data for the specified entity, which + /// includes the entity's own hash, the full hash of the entity and its + /// children, and the IDs and hashes of the children themselves. + /// + /// # Parameters + /// + /// * `entity` - The entity to generate comparison data for. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn generate_comparison_data(entity: &D) -> Result { + let (full_hash, own_hash) = >::get_hashes_for(entity.id())? + .ok_or(StorageError::IndexNotFound(entity.id()))?; + + let children = entity + .collections() + .into_keys() + .map(|collection_name| { + >::get_children_of(entity.id(), &collection_name) + .map(|children| (collection_name.clone(), children)) + }) + .collect::, _>>()?; + Ok(ComparisonData { + id: entity.id(), + own_hash, + full_hash, + children, + }) + } + + /// Whether the [`Collection`] has children. + /// + /// This checks whether the [`Collection`] of the specified entity has + /// children, which are the entities that are directly below the entity's + /// [`Collection`] in the hierarchy. + /// + /// # Parameters + /// + /// * `parent_id` - The unique identifier of the entity to check for + /// children. + /// * `collection` - The [`Collection`] to check for children. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn has_children( + parent_id: Id, + collection: &C, + ) -> Result { + >::has_children(parent_id, collection.name()) + } + + /// Retrieves the parent entity of a given entity. + /// + /// # Parameters + /// + /// * `child_id` - The [`Id`] of the entity whose parent is to be retrieved. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn parent_of(child_id: Id) -> Result, StorageError> { + >::get_parent_id(child_id)? + .map_or_else(|| Ok(None), |parent_id| Self::find_by_id(parent_id)) + } + + /// Removes a child from a collection. + /// + /// # Parameters + /// + /// * `parent_id` - The ID of the parent entity that owns the + /// [`Collection`]. + /// * `collection` - The collection from which the child should be removed. + /// * `child_id` - The ID of the child entity to remove. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn remove_child_from( + parent_id: Id, + collection: &mut C, + child_id: Id, + ) -> Result { + >::remove_child_from(parent_id, collection.name(), child_id)?; + Ok(S::storage_remove(child_id.as_bytes())) + } + + /// Retrieves the root entity for a given context. + /// + /// # Parameters + /// + /// * `context_id` - An identifier for the context whose root is to be retrieved. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn root(context_id: &[u8; 16]) -> Result, StorageError> { + Self::find_by_id(context_id.into()) } /// Saves an [`Element`](crate::entities::Element) to the storage system. @@ -683,6 +856,21 @@ impl Interface { /// checked before calling [`save()](crate::entities::Element::save()) by /// calling [`is_dirty()](crate::entities::Element::is_dirty()). /// + /// # Hierarchy + /// + /// It's important to be aware of the hierarchy when saving an entity. If + /// the entity is a child, it must have a parent, and the parent must exist + /// in the storage system. If the parent does not exist, the child will not + /// be saved, and an error will be returned. + /// + /// If the entity is a root, it will be saved as a root, and the parent ID + /// will be set to [`None`]. + /// + /// When creating a new child entity, it's important to call + /// [`add_child_to()`](Interface::add_child_to()) in order to create and + /// associate the child with the parent. Thereafter, [`save()`](Interface::save()) + /// can be called to save updates to the child entity. + /// /// # Merkle hash /// /// The Merkle hash of the [`Element`](crate::entities::Element) is @@ -697,8 +885,6 @@ impl Interface { /// /// # Parameters /// - /// * `id` - The unique identifier of the [`Element`](crate::entities::Element) - /// to save. /// * `element` - The [`Element`](crate::entities::Element) whose data /// should be saved. This will be serialised and stored in the /// storage system. @@ -708,29 +894,32 @@ impl Interface { /// If an error occurs when serialising data or interacting with the storage /// system, an error will be returned. /// - pub fn save(id: Id, entity: &mut D) -> Result { + pub fn save(entity: &mut D) -> Result { if !entity.element().is_dirty() { return Ok(true); } - // It is possible that the record gets added or updated after the call to - // this find() method, and before the put() to save the new data... however, - // this is very unlikely under our current operating model, and so the risk - // is considered acceptable. If this becomes a problem, we should change - // the RwLock to a ReentrantMutex, or reimplement the get() logic here to - // occur within the write lock. But this seems unnecessary at present. - if let Some(mut existing) = Self::find_by_id::(id)? { - if existing.element_mut().metadata.updated_at >= entity.element().metadata.updated_at { + let id = entity.id(); + + if !D::is_root() && >::get_parent_id(id)?.is_none() { + return Err(StorageError::CannotCreateOrphan(id)); + } + + if let Some(existing) = Self::find_by_id::(id)? { + if existing.element().metadata.updated_at >= entity.element().metadata.updated_at { return Ok(false); } + } else if D::is_root() { + >::add_root(ChildInfo::new(id, [0_u8; 32]))?; } - // TODO: Need to propagate the change up the tree, i.e. trigger a - // TODO: recalculation for the ancestors. - entity.element_mut().merkle_hash = Self::calculate_merkle_hash_for(entity, false)?; - _ = storage_write( - id.to_string().as_bytes(), + let own_hash = entity.calculate_merkle_hash()?; + entity.element_mut().merkle_hash = >::update_hash_for(id, own_hash)?; + + _ = S::storage_write( + id.as_bytes(), &to_vec(entity).map_err(StorageError::SerializationError)?, ); + entity.element_mut().is_dirty = false; Ok(true) } @@ -752,6 +941,66 @@ impl Interface { } } +/// The main storage system. +/// +/// This is the default storage system, and is used for the main storage +/// operations in the system. It uses the environment's storage system to +/// perform the actual storage operations. +/// +/// It is the only one intended for use in production, with other options being +/// implemented internally for testing purposes. +/// +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +#[non_exhaustive] +pub struct MainStorage; + +impl StorageAdaptor for MainStorage { + fn storage_read(key: &[u8]) -> Option> { + storage_read(key) + } + + fn storage_remove(key: &[u8]) -> bool { + storage_remove(key) + } + + fn storage_write(key: &[u8], value: &[u8]) -> bool { + storage_write(key, value) + } +} + +/// Determines where the ultimate storage system is located. +/// +/// This trait is mainly used to allow for a different storage location to be +/// used for key operations during testing, such as modelling a foreign node's +/// data store. +/// +pub(crate) trait StorageAdaptor { + /// Reads data from persistent storage. + /// + /// # Parameters + /// + /// * `key` - The key to read data from. + /// + fn storage_read(key: &[u8]) -> Option>; + + /// Removes data from persistent storage. + /// + /// # Parameters + /// + /// * `key` - The key to remove. + /// + fn storage_remove(key: &[u8]) -> bool; + + /// Writes data to persistent storage. + /// + /// # Parameters + /// + /// * `key` - The key to write data to. + /// * `value` - The data to write. + /// + fn storage_write(key: &[u8], value: &[u8]) -> bool; +} + /// Errors that can occur when working with the storage system. #[derive(Debug, ThisError)] #[non_exhaustive] @@ -760,6 +1009,12 @@ pub enum StorageError { #[error("Action not allowed: {0}")] ActionNotAllowed(String), + /// An attempt was made to create an orphan, i.e. an entity that has not + /// been registered as either a root or having a parent. This was probably + /// cause by calling `save()` without calling `add_child_to()` first. + #[error("Cannot create orphan with ID: {0}")] + CannotCreateOrphan(Id), + /// An error occurred during serialization. #[error("Deserialization error: {0}")] DeserializationError(IoError), @@ -768,10 +1023,25 @@ pub enum StorageError { #[error("Dispatch error: {0}")] DispatchError(String), + /// The ID of the entity supplied does not match the ID in the accompanying + /// comparison data. + #[error("ID mismatch in comparison data for ID: {0}")] + IdentifierMismatch(Id), + /// TODO: An error during tree validation. #[error("Invalid data was found for ID: {0}")] InvalidDataFound(Id), + /// An index entry already exists for the specified entity. This would + /// indicate a bug in the system. + #[error("Index already exists for ID: {0}")] + IndexAlreadyExists(Id), + + /// An index entry was not found for the specified entity. This would + /// indicate a bug in the system. + #[error("Index not found for ID: {0}")] + IndexNotFound(Id), + /// The requested record was not found, but in the context it was asked for, /// it was expected to be found and so this represents an error or some kind /// of inconsistency in the stored data. @@ -790,3 +1060,23 @@ pub enum StorageError { #[error("Unknown collection type: {0}")] UnknownCollectionType(String), } + +impl Serialize for StorageError { + fn serialize(&self, serializer: S) -> Result { + match *self { + Self::ActionNotAllowed(ref err) + | Self::DispatchError(ref err) + | Self::UnknownCollectionType(ref err) => serializer.serialize_str(err), + Self::DeserializationError(ref err) | Self::SerializationError(ref err) => { + serializer.serialize_str(&err.to_string()) + } + Self::CannotCreateOrphan(id) + | Self::IndexAlreadyExists(id) + | Self::IndexNotFound(id) + | Self::IdentifierMismatch(id) + | Self::InvalidDataFound(id) + | Self::NotFound(id) => serializer.serialize_str(&id.to_string()), + Self::StoreError(ref err) => serializer.serialize_str(&err.to_string()), + } + } +} diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 59b539781..2f5417382 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -63,6 +63,7 @@ pub mod address; pub mod entities; +pub mod index; pub mod interface; /// Re-exported types, mostly for use in macros (for convenience). @@ -70,6 +71,10 @@ pub mod exports { pub use sha2::{Digest, Sha256}; } +#[cfg(test)] +#[path = "tests/mocks.rs"] +mod mocks; + /// Shared test functionality. #[cfg(test)] pub mod tests { diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index e766dd290..4bd25047c 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -7,7 +7,7 @@ use velcro::btree_map; use crate::address::Id; use crate::entities::{AtomicUnit, ChildInfo, Collection, Data, Element}; -use crate::interface::StorageError; +use crate::interface::{Interface, StorageError}; /// A set of non-empty test UUIDs. pub const TEST_UUID: [[u8; 16]; 5] = [ @@ -62,6 +62,10 @@ impl Data for EmptyData { fn element_mut(&mut self) -> &mut Element { &mut self.storage } + + fn is_root() -> bool { + true + } } /// A simple page with a title, and paragraphs as children. @@ -100,7 +104,7 @@ impl Data for Page { slice: &[u8], ) -> Result<[u8; 32], StorageError> { match collection { - "paragraphs" => { + "Paragraphs" => { let child = ::Child::try_from_slice(slice) .map_err(|e| StorageError::DeserializationError(e))?; child.calculate_merkle_hash() @@ -111,7 +115,7 @@ impl Data for Page { fn collections(&self) -> BTreeMap> { btree_map! { - "paragraphs".to_owned(): self.paragraphs.child_info.clone() + "Paragraphs".to_owned(): Interface::child_info_for(self.id(), &self.paragraphs).unwrap_or_default(), } } @@ -122,6 +126,10 @@ impl Data for Page { fn element_mut(&mut self) -> &mut Element { &mut self.storage } + + fn is_root() -> bool { + true + } } /// A simple paragraph with text. No children. Belongs to a page. @@ -171,30 +179,28 @@ impl Data for Paragraph { fn element_mut(&mut self) -> &mut Element { &mut self.storage } + + fn is_root() -> bool { + false + } } /// A collection of paragraphs for a page. -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] -pub struct Paragraphs { - pub child_info: Vec, -} +#[derive(BorshDeserialize, BorshSerialize, Clone, Copy, Debug, Eq, PartialEq, PartialOrd)] +pub struct Paragraphs; impl Paragraphs { /// Creates a new paragraph collection. pub fn new() -> Self { - Self { child_info: vec![] } + Self {} } } impl Collection for Paragraphs { type Child = Paragraph; - fn child_info(&self) -> &Vec { - &self.child_info - } - - fn has_children(&self) -> bool { - !self.child_info.is_empty() + fn name(&self) -> &'static str { + "Paragraphs" } } @@ -235,4 +241,8 @@ impl Data for Person { fn element_mut(&mut self) -> &mut Element { &mut self.storage } + + fn is_root() -> bool { + true + } } diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index d276ff8b8..dedb3ead8 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -6,7 +6,8 @@ use sha2::{Digest, Sha256}; use velcro::btree_map; use super::*; -use crate::interface::Interface; +use crate::index::Index; +use crate::interface::{Interface, MainStorage}; use crate::tests::common::{Page, Paragraph, Paragraphs, Person}; #[cfg(test)] @@ -14,30 +15,9 @@ mod collection__public_methods { use super::*; #[test] - fn child_info() { - let child_info = vec![ - ChildInfo::new(Id::new(), Sha256::digest(b"1").into()), - ChildInfo::new(Id::new(), Sha256::digest(b"2").into()), - ChildInfo::new(Id::new(), Sha256::digest(b"3").into()), - ]; - let mut paras = Paragraphs::new(); - paras.child_info = child_info.clone(); - assert_eq!(paras.child_info(), ¶s.child_info); - assert_eq!(paras.child_info(), &child_info); - } - - #[test] - fn has_children() { - let mut paras = Paragraphs::new(); - assert!(!paras.has_children()); - - let child_info = vec![ - ChildInfo::new(Id::new(), Sha256::digest(b"1").into()), - ChildInfo::new(Id::new(), Sha256::digest(b"2").into()), - ChildInfo::new(Id::new(), Sha256::digest(b"3").into()), - ]; - paras.child_info = child_info; - assert!(paras.has_children()); + fn name() { + let paras = Paragraphs::new(); + assert_eq!(paras.name(), "Paragraphs"); } } @@ -69,14 +49,13 @@ mod data__public_methods { let parent = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", parent); let child1 = Element::new(&Path::new("::root::node::leaf").unwrap()); - let para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + assert!(Interface::save(&mut page).unwrap()); - page.paragraphs - .child_info - .push(ChildInfo::new(para1.element().id(), [0; 32])); + assert!(Interface::add_child_to(page.id(), &mut page.paragraphs, &mut para1).unwrap()); let para1_slice = to_vec(¶1).unwrap(); let para1_hash = page - .calculate_merkle_hash_for_child("paragraphs", ¶1_slice) + .calculate_merkle_hash_for_child("Paragraphs", ¶1_slice) .unwrap(); let expected_hash1 = para1.calculate_merkle_hash().unwrap(); assert_eq!(para1_hash, expected_hash1); @@ -85,7 +64,7 @@ mod data__public_methods { let para2 = Paragraph::new_from_element("Leaf2", child2); let para2_slice = to_vec(¶2).unwrap(); let para2_hash = page - .calculate_merkle_hash_for_child("paragraphs", ¶2_slice) + .calculate_merkle_hash_for_child("Paragraphs", ¶2_slice) .unwrap(); assert_ne!(para2_hash, para1_hash); } @@ -95,13 +74,12 @@ mod data__public_methods { let parent = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", parent); let child1 = Element::new(&Path::new("::root::node::leaf").unwrap()); - let para1 = Paragraph::new_from_element("Leaf1", child1); + let mut para1 = Paragraph::new_from_element("Leaf1", child1); + assert!(Interface::save(&mut page).unwrap()); - page.paragraphs - .child_info - .push(ChildInfo::new(para1.element().id(), [0; 32])); + assert!(Interface::add_child_to(page.id(), &mut page.paragraphs, &mut para1).unwrap()); let invalid_slice = &[0, 1, 2, 3]; - let result = page.calculate_merkle_hash_for_child("paragraphs", invalid_slice); + let result = page.calculate_merkle_hash_for_child("Paragraphs", invalid_slice); assert!(matches!(result, Err(StorageError::DeserializationError(_)))); } @@ -110,11 +88,10 @@ mod data__public_methods { let parent = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", parent); let child = Element::new(&Path::new("::root::node::leaf").unwrap()); - let para = Paragraph::new_from_element("Leaf", child); + let mut para = Paragraph::new_from_element("Leaf", child); + assert!(Interface::save(&mut page).unwrap()); - page.paragraphs - .child_info - .push(ChildInfo::new(para.element().id(), [0; 32])); + assert!(Interface::add_child_to(page.id(), &mut page.paragraphs, &mut para).unwrap()); let para_slice = to_vec(¶).unwrap(); let result = page.calculate_merkle_hash_for_child("unknown_collection", ¶_slice); assert!(matches!( @@ -130,7 +107,7 @@ mod data__public_methods { assert_eq!( page.collections(), btree_map! { - "paragraphs".to_owned(): page.paragraphs.child_info().clone() + "Paragraphs".to_owned(): Interface::child_info_for(page.id(), &page.paragraphs).unwrap_or_default(), } ); @@ -311,7 +288,7 @@ mod element__public_methods { age: 30, storage: element, }; - assert!(Interface::save(person.element().id(), &mut person).unwrap()); + assert!(Interface::save(&mut person).unwrap()); assert!(!person.element().is_dirty()); person.element_mut().update(); @@ -326,10 +303,11 @@ mod element__public_methods { age: 50, storage: element.clone(), }; - let expected_hash = Interface::calculate_merkle_hash_for(&person, false).unwrap(); - assert_ne!(person.element().merkle_hash(), expected_hash); + assert_eq!(person.element().merkle_hash(), [0_u8; 32]); - assert!(Interface::save(person.element().id(), &mut person).unwrap()); + assert!(Interface::save(&mut person).unwrap()); + let expected_hash = + >::calculate_full_merkle_hash_for(person.id(), false).unwrap(); assert_eq!(person.element().merkle_hash(), expected_hash); } @@ -355,7 +333,7 @@ mod element__public_methods { age: 40, storage: element, }; - assert!(Interface::save(person.element().id(), &mut person).unwrap()); + assert!(Interface::save(&mut person).unwrap()); assert!(!person.element().is_dirty); person.element_mut().update(); diff --git a/crates/storage/src/tests/index.rs b/crates/storage/src/tests/index.rs new file mode 100644 index 000000000..accf144f2 --- /dev/null +++ b/crates/storage/src/tests/index.rs @@ -0,0 +1,613 @@ +use super::*; +use crate::interface::MainStorage; +use crate::tests::common::TEST_ID; + +mod index__public_methods { + use super::*; + + #[test] + fn add_child_to() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.own_hash, root_hash); + assert!(root_index.parent_id.is_none()); + assert!(root_index.children.is_empty()); + + let collection_name = "Books"; + let child_id = Id::new(); + let child_own_hash = [2_u8; 32]; + let child_full_hash: [u8; 32] = + hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") + .unwrap() + .try_into() + .unwrap(); + + assert!(>::add_child_to( + root_id, + collection_name, + ChildInfo::new(child_id, child_own_hash) + ) + .is_ok()); + + let updated_root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(updated_root_index.id, root_id); + assert_eq!(updated_root_index.own_hash, root_hash); + assert!(updated_root_index.parent_id.is_none()); + assert_eq!(updated_root_index.children.len(), 1); + assert_eq!( + updated_root_index.children[collection_name][0], + ChildInfo::new(child_id, child_full_hash) + ); + + let child_index = >::get_index(child_id).unwrap().unwrap(); + assert_eq!(child_index.id, child_id); + assert_eq!(child_index.own_hash, child_own_hash); + assert_eq!(child_index.parent_id, Some(root_id)); + assert!(child_index.children.is_empty()); + } + + #[test] + fn add_root() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.own_hash, root_hash); + assert!(root_index.parent_id.is_none()); + assert!(root_index.children.is_empty()); + } + + #[test] + fn get_children_of__single_collection() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let collection_name = "Books"; + let child1_id = Id::new(); + let child1_own_hash = [2_u8; 32]; + let child1_full_hash: [u8; 32] = + hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") + .unwrap() + .try_into() + .unwrap(); + + let child2_id = Id::new(); + let child2_own_hash = [3_u8; 32]; + let child2_full_hash: [u8; 32] = + hex::decode("648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b") + .unwrap() + .try_into() + .unwrap(); + + assert!(>::add_child_to( + root_id, + collection_name, + ChildInfo::new(child1_id, child1_own_hash) + ) + .is_ok()); + assert!(>::add_child_to( + root_id, + collection_name, + ChildInfo::new(child2_id, child2_own_hash) + ) + .is_ok()); + + let children = >::get_children_of(root_id, collection_name).unwrap(); + assert_eq!(children.len(), 2); + assert_eq!(children[0], ChildInfo::new(child1_id, child1_full_hash)); + assert_eq!(children[1], ChildInfo::new(child2_id, child2_full_hash)); + } + + #[test] + fn get_children_of__two_collections() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let collection1_name = "Pages"; + let child1_id = Id::new(); + let child1_own_hash = [2_u8; 32]; + let child1_full_hash: [u8; 32] = + hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") + .unwrap() + .try_into() + .unwrap(); + let child2_id = Id::new(); + let child2_own_hash = [3_u8; 32]; + let child2_full_hash: [u8; 32] = + hex::decode("648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b") + .unwrap() + .try_into() + .unwrap(); + + let collection2_name = "Reviews"; + let child3_id = Id::new(); + let child3_own_hash = [4_u8; 32]; + let child3_full_hash: [u8; 32] = + hex::decode("9f4fb68f3e1dac82202f9aa581ce0bbf1f765df0e9ac3c8c57e20f685abab8ed") + .unwrap() + .try_into() + .unwrap(); + + assert!(>::add_child_to( + root_id, + collection1_name, + ChildInfo::new(child1_id, child1_own_hash) + ) + .is_ok()); + assert!(>::add_child_to( + root_id, + collection1_name, + ChildInfo::new(child2_id, child2_own_hash) + ) + .is_ok()); + assert!(>::add_child_to( + root_id, + collection2_name, + ChildInfo::new(child3_id, child3_own_hash) + ) + .is_ok()); + + let children1 = >::get_children_of(root_id, collection1_name).unwrap(); + assert_eq!(children1.len(), 2); + assert_eq!(children1[0], ChildInfo::new(child1_id, child1_full_hash)); + assert_eq!(children1[1], ChildInfo::new(child2_id, child2_full_hash)); + let children2 = >::get_children_of(root_id, collection2_name).unwrap(); + assert_eq!(children2.len(), 1); + assert_eq!(children2[0], ChildInfo::new(child3_id, child3_full_hash)); + } + + #[test] + fn get_collection_names_for() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let collection1_name = "Pages"; + let collection2_name = "Chapters"; + let mut collection_names = vec![collection1_name.to_owned(), collection2_name.to_owned()]; + collection_names.sort(); + let child1_id = Id::new(); + let child1_own_hash = [2_u8; 32]; + let child2_id = Id::new(); + let child2_own_hash = [3_u8; 32]; + + assert!(>::add_child_to( + root_id, + collection1_name, + ChildInfo::new(child1_id, child1_own_hash) + ) + .is_ok()); + assert!(>::add_child_to( + root_id, + collection2_name, + ChildInfo::new(child2_id, child2_own_hash) + ) + .is_ok()); + + assert_eq!( + >::get_collection_names_for(root_id).unwrap(), + collection_names + ); + } + + #[test] + fn get_hashes_for() { + let root_id = TEST_ID[0]; + let root_own_hash = [1_u8; 32]; + let root_full_hash = [0_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_own_hash)).is_ok()); + + assert_eq!( + >::get_hashes_for(root_id) + .unwrap() + .unwrap(), + (root_full_hash, root_own_hash) + ); + } + + #[test] + fn get_parent_id() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.own_hash, root_hash); + assert!(root_index.parent_id.is_none()); + assert!(root_index.children.is_empty()); + + let collection_name = "Books"; + let child_id = Id::new(); + let child_own_hash = [2_u8; 32]; + + assert!(>::add_child_to( + root_id, + collection_name, + ChildInfo::new(child_id, child_own_hash) + ) + .is_ok()); + + assert_eq!( + >::get_parent_id(child_id).unwrap(), + Some(root_id) + ); + assert_eq!(>::get_parent_id(root_id).unwrap(), None); + } + + #[test] + fn has_children() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + let collection_name = "Books"; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(!>::has_children(root_id, collection_name).unwrap()); + + let child_id = Id::new(); + let child_own_hash = [2_u8; 32]; + + assert!(>::add_child_to( + root_id, + collection_name, + ChildInfo::new(child_id, child_own_hash) + ) + .is_ok()); + assert!(>::has_children(root_id, collection_name).unwrap()); + } + + #[test] + fn remove_child_from() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.own_hash, root_hash); + assert!(root_index.parent_id.is_none()); + assert!(root_index.children.is_empty()); + + let collection_name = "Books"; + let child_id = Id::new(); + let child_own_hash = [2_u8; 32]; + + assert!(>::add_child_to( + root_id, + collection_name, + ChildInfo::new(child_id, child_own_hash) + ) + .is_ok()); + assert!( + >::remove_child_from(root_id, collection_name, child_id).is_ok() + ); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert!(root_index.children[collection_name].is_empty()); + assert!(>::get_index(child_id).unwrap().is_none()); + } +} + +mod index__private_methods { + use super::*; + + #[test] + fn get_and_save_index() { + let id = Id::new(); + let hash1 = [1_u8; 32]; + let hash2 = [2_u8; 32]; + assert!(>::get_index(id).unwrap().is_none()); + + let index = EntityIndex { + id, + parent_id: None, + children: BTreeMap::new(), + full_hash: hash1, + own_hash: hash2, + }; + >::save_index(&index).unwrap(); + + assert_eq!(>::get_index(id).unwrap().unwrap(), index); + } + + #[test] + fn save_and_remove_index() { + let id = Id::new(); + let hash1 = [1_u8; 32]; + let hash2 = [2_u8; 32]; + assert!(>::get_index(id).unwrap().is_none()); + + let index = EntityIndex { + id, + parent_id: None, + children: BTreeMap::new(), + full_hash: hash1, + own_hash: hash2, + }; + >::save_index(&index).unwrap(); + assert_eq!(>::get_index(id).unwrap().unwrap(), index); + + >::remove_index(id); + assert!(>::get_index(id).unwrap().is_none()); + } +} + +#[cfg(test)] +mod hashing { + use super::*; + + #[test] + fn calculate_full_merkle_hash_for__with_children() { + let root_id = TEST_ID[0]; + assert!(>::add_root(ChildInfo::new(TEST_ID[0], [0_u8; 32])).is_ok()); + + let collection_name = "Children"; + let child1_id = TEST_ID[1]; + let child1_hash = [1_u8; 32]; + let child1_info = ChildInfo::new(child1_id, child1_hash); + assert!(>::add_child_to(root_id, collection_name, child1_info).is_ok()); + let child2_id = TEST_ID[2]; + let child2_hash = [2_u8; 32]; + let child2_info = ChildInfo::new(child2_id, child2_hash); + assert!(>::add_child_to(root_id, collection_name, child2_info).is_ok()); + let child3_id = TEST_ID[3]; + let child3_hash = [3_u8; 32]; + let child3_info = ChildInfo::new(child3_id, child3_hash); + assert!(>::add_child_to(root_id, collection_name, child3_info).is_ok()); + + assert_eq!( + hex::encode( + >::calculate_full_merkle_hash_for(child1_id, false).unwrap() + ), + "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793", + ); + assert_eq!( + hex::encode( + >::calculate_full_merkle_hash_for(child2_id, false).unwrap() + ), + "75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a", + ); + assert_eq!( + hex::encode( + >::calculate_full_merkle_hash_for(child3_id, false).unwrap() + ), + "648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b", + ); + assert_eq!( + hex::encode( + >::calculate_full_merkle_hash_for(root_id, false).unwrap() + ), + "866edea6f7ce51612ad0ea3bcde93b2494d77e8c466bc2a69817a6443f2a57f0", + ); + } + + #[test] + fn recalculate_ancestor_hashes_for() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + let child_collection_name = "Books"; + let grandchild_collection_name = "Pages"; + let greatgrandchild_collection_name = "Paragraphs"; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.full_hash, [0_u8; 32]); + + let child_id = Id::new(); + let child_hash = [2_u8; 32]; + let child_info = ChildInfo::new(child_id, child_hash); + assert!( + >::add_child_to(root_id, child_collection_name, child_info).is_ok() + ); + + let root_index_with_child = >::get_index(root_id).unwrap().unwrap(); + let child_index = >::get_index(child_id).unwrap().unwrap(); + assert_eq!( + hex::encode(root_index_with_child.full_hash), + "3f18867aec61c1c3cd3ca1b8a0ff42612a8dd0ad83f3e59055e3b9ba737e31d9" + ); + assert_eq!( + hex::encode(child_index.full_hash), + "75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a" + ); + + let grandchild_id = Id::new(); + let grandchild_hash = [3_u8; 32]; + let grandchild_info = ChildInfo::new(grandchild_id, grandchild_hash); + assert!(>::add_child_to( + child_id, + grandchild_collection_name, + grandchild_info + ) + .is_ok()); + + let root_index_with_grandchild = >::get_index(root_id).unwrap().unwrap(); + let child_index_with_grandchild = + >::get_index(child_id).unwrap().unwrap(); + let grandchild_index = >::get_index(grandchild_id) + .unwrap() + .unwrap(); + assert_eq!( + hex::encode(root_index_with_grandchild.full_hash), + "2504baa308dcb51f7046815258e36cd4a83d34c6b1d5f1cc1b8ffa321e40f0c6" + ); + assert_eq!( + hex::encode(child_index_with_grandchild.full_hash), + "80c2b6364721221e7f87028c0482e1e16f49a29889e357c8acab8cb26d4d99da" + ); + assert_eq!( + hex::encode(grandchild_index.full_hash), + "648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b" + ); + + let greatgrandchild_id = Id::new(); + let greatgrandchild_hash = [4_u8; 32]; + let greatgrandchild_info = ChildInfo::new(greatgrandchild_id, greatgrandchild_hash); + assert!(>::add_child_to( + grandchild_id, + greatgrandchild_collection_name, + greatgrandchild_info + ) + .is_ok()); + + let root_index_with_greatgrandchild = + >::get_index(root_id).unwrap().unwrap(); + let child_index_with_greatgrandchild = + >::get_index(child_id).unwrap().unwrap(); + let grandchild_index_with_greatgrandchild = >::get_index(grandchild_id) + .unwrap() + .unwrap(); + let mut greatgrandchild_index = >::get_index(greatgrandchild_id) + .unwrap() + .unwrap(); + assert_eq!( + hex::encode(root_index_with_greatgrandchild.full_hash), + "6bdcb2f1a98eba952d3b2cf43c8bb36eb6a50b853d5b49dea089775e17d67b27" + ); + assert_eq!( + hex::encode(child_index_with_greatgrandchild.full_hash), + "8aca1399f292c2ed8dfaba100a7885c7ac108b7b6b32f10d4a3e9c05fd7c38c0" + ); + assert_eq!( + hex::encode(grandchild_index_with_greatgrandchild.full_hash), + "135605b30fda6d313c472745c4445edb4e8c619cdcc24caa2352c12aacd18a76" + ); + assert_eq!( + hex::encode(greatgrandchild_index.full_hash), + "9f4fb68f3e1dac82202f9aa581ce0bbf1f765df0e9ac3c8c57e20f685abab8ed" + ); + + greatgrandchild_index.own_hash = [9_u8; 32]; + >::save_index(&greatgrandchild_index).unwrap(); + greatgrandchild_index.full_hash = + >::calculate_full_merkle_hash_for(greatgrandchild_id, false) + .unwrap(); + >::save_index(&greatgrandchild_index).unwrap(); + + >::recalculate_ancestor_hashes_for(greatgrandchild_id).unwrap(); + + let updated_root_index_with_greatgrandchild = + >::get_index(root_id).unwrap().unwrap(); + let updated_child_index_with_greatgrandchild = + >::get_index(child_id).unwrap().unwrap(); + let updated_grandchild_index_with_greatgrandchild = + >::get_index(grandchild_id) + .unwrap() + .unwrap(); + let updated_greatgrandchild_index = >::get_index(greatgrandchild_id) + .unwrap() + .unwrap(); + assert_eq!( + hex::encode(updated_root_index_with_greatgrandchild.full_hash), + "f61c8077c7875e38a3cbdce3b3d4ce40a5a18add8ce386803760484772bcb85b" + ); + assert_eq!( + hex::encode(updated_child_index_with_greatgrandchild.full_hash), + "abef09c52909317783e0c582553a8fb19124249d93f8878cf131b8dd28fbb4bf" + ); + assert_eq!( + hex::encode(updated_grandchild_index_with_greatgrandchild.full_hash), + "97b2d3a1682881ec11e747f3dd4c242a33f8cff6c6d6224e1dd23278eef35554" + ); + assert_eq!( + hex::encode(updated_greatgrandchild_index.full_hash), + "8c0cc17a04942cc4f8e0fe0b302606d3108860c126428ba2ceeb5f9ed41c2b05" + ); + + greatgrandchild_index.own_hash = [99_u8; 32]; + >::save_index(&greatgrandchild_index).unwrap(); + greatgrandchild_index.full_hash = + >::calculate_full_merkle_hash_for(greatgrandchild_id, false) + .unwrap(); + >::save_index(&greatgrandchild_index).unwrap(); + + >::recalculate_ancestor_hashes_for(greatgrandchild_id).unwrap(); + + let updated_root_index_with_greatgrandchild = + >::get_index(root_id).unwrap().unwrap(); + let updated_child_index_with_greatgrandchild = + >::get_index(child_id).unwrap().unwrap(); + let updated_grandchild_index_with_greatgrandchild = + >::get_index(grandchild_id) + .unwrap() + .unwrap(); + let updated_greatgrandchild_index = >::get_index(greatgrandchild_id) + .unwrap() + .unwrap(); + assert_eq!( + hex::encode(updated_root_index_with_greatgrandchild.full_hash), + "0483e0a8a3c3002a94c3ce2e1f7fcadae4b2dc29e2dee9752b9caa683dfe39fc" + ); + assert_eq!( + hex::encode(updated_child_index_with_greatgrandchild.full_hash), + "a7bad731e6767c36725a7c592174fdfe799c6bc32e92cc0f455e6ec5f6e5d42b" + ); + assert_eq!( + hex::encode(updated_grandchild_index_with_greatgrandchild.full_hash), + "67eb9aff17a7db347e4c56264042dcfb1f4e465f70abb56a2108571316435ea5" + ); + assert_eq!( + hex::encode(updated_greatgrandchild_index.full_hash), + "cd93782b7fb95559de14f738b65988af85d41dc1565f7c7d1ed2d035665b519c" + ); + } + + #[test] + fn update_hash_for__full() { + let root_id = Id::new(); + let root_hash0 = [0_u8; 32]; + let root_hash1 = [1_u8; 32]; + let root_hash2 = [2_u8; 32]; + let root_full_hash: [u8; 32] = + hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") + .unwrap() + .try_into() + .unwrap(); + + assert!(>::add_root(ChildInfo::new(root_id, root_hash1)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.full_hash, root_hash0); + + assert!(>::update_hash_for(root_id, root_hash2).is_ok()); + let updated_root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(updated_root_index.id, root_id); + assert_eq!(updated_root_index.full_hash, root_full_hash); + } + + #[test] + fn update_hash_for__own() { + let root_id = Id::new(); + let root_hash1 = [1_u8; 32]; + let root_hash2 = [2_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash1)).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.own_hash, root_hash1); + + assert!(>::update_hash_for(root_id, root_hash2).is_ok()); + let updated_root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(updated_root_index.id, root_id); + assert_eq!(updated_root_index.own_hash, root_hash2); + } +} diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 6fa599c45..64b033fa1 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -4,8 +4,9 @@ use std::time::Duration; use claims::{assert_none, assert_ok}; use super::*; -use crate::entities::{ChildInfo, Data, Element}; -use crate::tests::common::{EmptyData, Page, Paragraph, TEST_ID}; +use crate::entities::{Data, Element}; +use crate::mocks::ForeignInterface; +use crate::tests::common::{Page, Paragraph}; #[cfg(test)] mod interface__public_methods { @@ -15,8 +16,11 @@ mod interface__public_methods { fn children_of() { let element = Element::new(&Path::new("::root::node").unwrap()); let mut page = Page::new_from_element("Node", element); - assert!(Interface::save(page.id(), &mut page).unwrap()); - assert_eq!(Interface::children_of(&page.paragraphs).unwrap(), vec![]); + assert!(Interface::save(&mut page).unwrap()); + assert_eq!( + Interface::children_of(page.id(), &page.paragraphs).unwrap(), + vec![] + ); let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); @@ -24,29 +28,24 @@ mod interface__public_methods { let mut para1 = Paragraph::new_from_element("Leaf1", child1); let mut para2 = Paragraph::new_from_element("Leaf2", child2); let mut para3 = Paragraph::new_from_element("Leaf3", child3); - assert!(Interface::save(para1.id(), &mut para1).unwrap()); - assert!(Interface::save(para2.id(), &mut para2).unwrap()); - assert!(Interface::save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_info = vec![ - ChildInfo::new(para1.id(), para1.calculate_merkle_hash().unwrap()), - ChildInfo::new(para2.id(), para2.calculate_merkle_hash().unwrap()), - ChildInfo::new(para3.id(), para3.calculate_merkle_hash().unwrap()), - ]; - assert!(Interface::save(page.id(), &mut page).unwrap()); + assert!(Interface::save(&mut page).unwrap()); + assert!(Interface::add_child_to(page.id(), &mut page.paragraphs, &mut para1).unwrap()); + assert!(Interface::add_child_to(page.id(), &mut page.paragraphs, &mut para2).unwrap()); + assert!(Interface::add_child_to(page.id(), &mut page.paragraphs, &mut para3).unwrap()); assert_eq!( - Interface::children_of(&page.paragraphs).unwrap(), + Interface::children_of(page.id(), &page.paragraphs).unwrap(), vec![para1, para2, para3] ); } #[test] fn find_by_id__existent() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let mut para = Paragraph::new_from_element("Leaf", element); - let id = para.id(); - assert!(Interface::save(id, &mut para).unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Leaf", element); + let id = page.id(); + assert!(Interface::save(&mut page).unwrap()); - assert_eq!(Interface::find_by_id(id).unwrap(), Some(para)); + assert_eq!(Interface::find_by_id(id).unwrap(), Some(page)); } #[test] @@ -74,10 +73,10 @@ mod interface__public_methods { #[test] fn save__basic() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let mut para = Paragraph::new_from_element("Leaf", element); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", element); - assert_ok!(Interface::save(para.id(), &mut para)); + assert_ok!(Interface::save(&mut page)); } #[test] @@ -87,49 +86,47 @@ mod interface__public_methods { let mut page1 = Page::new_from_element("Node1", element1); let mut page2 = Page::new_from_element("Node2", element2); - assert!(Interface::save(page1.id(), &mut page1).unwrap()); - assert!(Interface::save(page2.id(), &mut page2).unwrap()); + assert!(Interface::save(&mut page1).unwrap()); + assert!(Interface::save(&mut page2).unwrap()); assert_eq!(Interface::find_by_id(page1.id()).unwrap(), Some(page1)); assert_eq!(Interface::find_by_id(page2.id()).unwrap(), Some(page2)); } #[test] fn save__not_dirty() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let mut para = Paragraph::new_from_element("Leaf", element); - let id = para.id(); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", element); - assert!(Interface::save(id, &mut para).unwrap()); - para.element_mut().update(); - assert!(Interface::save(id, &mut para).unwrap()); + assert!(Interface::save(&mut page).unwrap()); + page.element_mut().update(); + assert!(Interface::save(&mut page).unwrap()); } #[test] fn save__too_old() { - let element1 = Element::new(&Path::new("::root::node::leaf").unwrap()); - let mut para1 = Paragraph::new_from_element("Leaf", element1); - let mut para2 = para1.clone(); - let id = para1.id(); + let element1 = Element::new(&Path::new("::root::node").unwrap()); + let mut page1 = Page::new_from_element("Node", element1); + let mut page2 = page1.clone(); - assert!(Interface::save(id, &mut para1).unwrap()); - para2.element_mut().update(); + assert!(Interface::save(&mut page1).unwrap()); + page2.element_mut().update(); sleep(Duration::from_millis(1)); - para1.element_mut().update(); - assert!(Interface::save(id, &mut para1).unwrap()); - assert!(!Interface::save(id, &mut para2).unwrap()); + page1.element_mut().update(); + assert!(Interface::save(&mut page1).unwrap()); + assert!(!Interface::save(&mut page2).unwrap()); } #[test] fn save__update_existing() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); - let mut para = Paragraph::new_from_element("Leaf", element); - let id = para.id(); - assert!(Interface::save(id, &mut para).unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap()); + let mut page = Page::new_from_element("Node", element); + let id = page.id(); + assert!(Interface::save(&mut page).unwrap()); // TODO: Modify the element's data and check it changed - assert!(Interface::save(id, &mut para).unwrap()); - assert_eq!(Interface::find_by_id(id).unwrap(), Some(para)); + assert!(Interface::save(&mut page).unwrap()); + assert_eq!(Interface::find_by_id(id).unwrap(), Some(page)); } #[test] @@ -182,7 +179,7 @@ mod interface__apply_actions { fn apply_action__update() { let mut page = Page::new_from_element("Old Title", Element::new(&Path::new("::test").unwrap())); - assert!(Interface::save(page.id(), &mut page).unwrap()); + assert!(Interface::save(&mut page).unwrap()); page.title = "New Title".to_owned(); page.element_mut().update(); @@ -200,7 +197,7 @@ mod interface__apply_actions { fn apply_action__delete() { let mut page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); - assert!(Interface::save(page.id(), &mut page).unwrap()); + assert!(Interface::save(&mut page).unwrap()); let action = Action::Delete(page.id()); @@ -256,15 +253,18 @@ mod interface__comparison { let mut local = Page::new_from_element("Test Page", element); let mut foreign = local.clone(); - assert!(Interface::save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = - Interface::calculate_merkle_hash_for(&foreign, false).unwrap(); + assert!(Interface::save(&mut local).unwrap()); + assert!(ForeignInterface::save(&mut foreign).unwrap()); assert_eq!( local.element().merkle_hash(), foreign.element().merkle_hash() ); - let result = Interface::compare_trees(&foreign).unwrap(); + let result = Interface::compare_trees( + &foreign, + &ForeignInterface::generate_comparison_data(&foreign).unwrap(), + ) + .unwrap(); assert_eq!(result, (vec![], vec![])); } @@ -274,15 +274,18 @@ mod interface__comparison { let mut local = Page::new_from_element("Test Page", element.clone()); let mut foreign = Page::new_from_element("Old Test Page", element); + assert!(ForeignInterface::save(&mut foreign).unwrap()); + // Make local newer sleep(Duration::from_millis(10)); local.element_mut().update(); + assert!(Interface::save(&mut local).unwrap()); - assert!(Interface::save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = - Interface::calculate_merkle_hash_for(&foreign, false).unwrap(); - - let result = Interface::compare_trees(&foreign).unwrap(); + let result = Interface::compare_trees( + &foreign, + &ForeignInterface::generate_comparison_data(&foreign).unwrap(), + ) + .unwrap(); assert_eq!( result, ( @@ -298,15 +301,18 @@ mod interface__comparison { let mut local = Page::new_from_element("Old Test Page", element.clone()); let mut foreign = Page::new_from_element("Test Page", element); - assert!(Interface::save(local.id(), &mut local).unwrap()); - foreign.element_mut().merkle_hash = - Interface::calculate_merkle_hash_for(&foreign, false).unwrap(); + assert!(Interface::save(&mut local).unwrap()); // Make foreign newer sleep(Duration::from_millis(10)); foreign.element_mut().update(); + assert!(ForeignInterface::save(&mut foreign).unwrap()); - let result = Interface::compare_trees(&foreign).unwrap(); + let result = Interface::compare_trees( + &foreign, + &ForeignInterface::generate_comparison_data(&foreign).unwrap(), + ) + .unwrap(); assert_eq!( result, ( @@ -332,39 +338,39 @@ mod interface__comparison { let mut foreign_para1 = Paragraph::new_from_element("Updated Paragraph 1", para1_element); let mut foreign_para3 = Paragraph::new_from_element("Foreign Paragraph 3", para3_element); - local_page.paragraphs.child_info = vec![ - ChildInfo::new( - local_para1.id(), - local_para1.calculate_merkle_hash().unwrap(), - ), - ChildInfo::new( - local_para2.id(), - local_para2.calculate_merkle_hash().unwrap(), - ), - ]; - - foreign_page.paragraphs.child_info = vec![ - ChildInfo::new( - local_para1.id(), - foreign_para1.calculate_merkle_hash().unwrap(), - ), - ChildInfo::new( - foreign_para3.id(), - foreign_para3.calculate_merkle_hash().unwrap(), - ), - ]; - - assert!(Interface::save(local_page.id(), &mut local_page).unwrap()); - assert!(Interface::save(local_para1.id(), &mut local_para1).unwrap()); - assert!(Interface::save(local_para2.id(), &mut local_para2).unwrap()); - foreign_page.element_mut().merkle_hash = - Interface::calculate_merkle_hash_for(&foreign_page, false).unwrap(); - foreign_para1.element_mut().merkle_hash = - Interface::calculate_merkle_hash_for(&foreign_para1, false).unwrap(); - foreign_para3.element_mut().merkle_hash = - Interface::calculate_merkle_hash_for(&foreign_para3, false).unwrap(); - - let (local_actions, foreign_actions) = Interface::compare_trees(&foreign_page).unwrap(); + assert!(Interface::save(&mut local_page).unwrap()); + assert!(Interface::add_child_to( + local_page.id(), + &mut local_page.paragraphs, + &mut local_para1 + ) + .unwrap()); + assert!(Interface::add_child_to( + local_page.id(), + &mut local_page.paragraphs, + &mut local_para2 + ) + .unwrap()); + + assert!(ForeignInterface::save(&mut foreign_page).unwrap()); + assert!(ForeignInterface::add_child_to( + foreign_page.id(), + &mut foreign_page.paragraphs, + &mut foreign_para1 + ) + .unwrap()); + assert!(ForeignInterface::add_child_to( + foreign_page.id(), + &mut foreign_page.paragraphs, + &mut foreign_para3 + ) + .unwrap()); + + let (local_actions, foreign_actions) = Interface::compare_trees( + &foreign_page, + &ForeignInterface::generate_comparison_data(&foreign_page).unwrap(), + ) + .unwrap(); assert_eq!( local_actions, @@ -389,8 +395,11 @@ mod interface__comparison { ); // Compare the updated para1 - let (local_para1_actions, foreign_para1_actions) = - Interface::compare_trees(&foreign_para1).unwrap(); + let (local_para1_actions, foreign_para1_actions) = Interface::compare_trees( + &foreign_para1, + &ForeignInterface::generate_comparison_data(&foreign_para1).unwrap(), + ) + .unwrap(); assert_eq!( local_para1_actions, @@ -402,8 +411,11 @@ mod interface__comparison { assert_eq!(foreign_para1_actions, vec![]); // Compare para3 which doesn't exist locally - let (local_para3_actions, foreign_para3_actions) = - Interface::compare_trees(&foreign_para3).unwrap(); + let (local_para3_actions, foreign_para3_actions) = Interface::compare_trees( + &foreign_para3, + &ForeignInterface::generate_comparison_data(&foreign_para3).unwrap(), + ) + .unwrap(); assert_eq!( local_para3_actions, @@ -415,169 +427,3 @@ mod interface__comparison { assert_eq!(foreign_para3_actions, vec![]); } } - -#[cfg(test)] -mod hashing { - use super::*; - - #[test] - fn calculate_merkle_hash_for__empty_record() { - let timestamp = 1_765_432_100_123_456_789; - let mut element = Element::new(&Path::new("::root::node::leaf").unwrap()); - element.set_id(TEST_ID[0]); - element.metadata.set_created_at(timestamp); - element.metadata.updated_at = timestamp; - let data = EmptyData { - storage: element.clone(), - }; - - let hash = Interface::calculate_merkle_hash_for(&data, false).unwrap(); - assert_eq!( - hex::encode(hash), - "173f9a17aa3c6acdad8cdaf06cea4aa4eb7c87cb99e07507a417d6588e679607" - ); - } - - #[test] - fn calculate_merkle_hash_for__with_children() { - let timestamp = 1_765_432_100_123_456_789; - let mut element = Element::new(&Path::new("::root::node").unwrap()); - element.set_id(TEST_ID[0]); - element.metadata.set_created_at(1_765_432_100_123_456_789); - element.metadata.updated_at = timestamp; - let mut page = Page::new_from_element("Node", element); - assert!(Interface::save(page.id(), &mut page).unwrap()); - let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); - let mut para1 = Paragraph::new_from_element("Leaf1", child1); - let mut para2 = Paragraph::new_from_element("Leaf2", child2); - let mut para3 = Paragraph::new_from_element("Leaf3", child3); - para1.element_mut().set_id(TEST_ID[1]); - para2.element_mut().set_id(TEST_ID[2]); - para3.element_mut().set_id(TEST_ID[3]); - para1.element_mut().metadata.set_created_at(timestamp); - para2.element_mut().metadata.set_created_at(timestamp); - para3.element_mut().metadata.set_created_at(timestamp); - para1.element_mut().metadata.updated_at = timestamp; - para2.element_mut().metadata.updated_at = timestamp; - para3.element_mut().metadata.updated_at = timestamp; - assert!(Interface::save(para1.id(), &mut para1).unwrap()); - assert!(Interface::save(para2.id(), &mut para2).unwrap()); - assert!(Interface::save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_info = vec![ - ChildInfo::new(para1.id(), para1.element().merkle_hash()), - ChildInfo::new(para2.id(), para2.element().merkle_hash()), - ChildInfo::new(para3.id(), para3.element().merkle_hash()), - ]; - assert!(Interface::save(page.id(), &mut page).unwrap()); - - assert_eq!( - hex::encode(Interface::calculate_merkle_hash_for(¶1, false).unwrap()), - "9c4d6363cca5bdb5829f0aa832b573d6befd26227a0e2c3cc602edd9fda88db1", - ); - assert_eq!( - hex::encode(Interface::calculate_merkle_hash_for(¶2, false).unwrap()), - "449f30903c94a488f1767b91bc6626fafd82189130cf41e427f96df19a727d8b", - ); - assert_eq!( - hex::encode(Interface::calculate_merkle_hash_for(¶3, false).unwrap()), - "43098decf78bf10dc4c31191a5f59d277ae524859583e48689482c9ba85c5f61", - ); - assert_eq!( - hex::encode(Interface::calculate_merkle_hash_for(&page, false).unwrap()), - "7593806c462bfadd97ed5228a3a60e492cce4b725f2c0e72e6e5b0f7996ee394", - ); - } - - #[test] - fn calculate_merkle_hash_for__cached_values() { - let element = Element::new(&Path::new("::root::node").unwrap()); - let mut page = Page::new_from_element("Node", element); - assert!(Interface::save(page.id(), &mut page).unwrap()); - assert_eq!(Interface::children_of(&page.paragraphs).unwrap(), vec![]); - - let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); - let mut para1 = Paragraph::new_from_element("Leaf1", child1); - let mut para2 = Paragraph::new_from_element("Leaf2", child2); - let mut para3 = Paragraph::new_from_element("Leaf3", child3); - assert!(Interface::save(para1.id(), &mut para1).unwrap()); - assert!(Interface::save(para2.id(), &mut para2).unwrap()); - assert!(Interface::save(para3.id(), &mut para3).unwrap()); - page.paragraphs.child_info = vec![ - ChildInfo::new(para1.id(), para1.element().merkle_hash()), - ChildInfo::new(para2.id(), para2.element().merkle_hash()), - ChildInfo::new(para3.id(), para3.element().merkle_hash()), - ]; - assert!(Interface::save(page.id(), &mut page).unwrap()); - - let mut hasher0 = Sha256::new(); - hasher0.update(page.id().as_bytes()); - hasher0.update(&to_vec(&page.title).unwrap()); - hasher0.update(&to_vec(&page.element().metadata()).unwrap()); - let expected_hash0: [u8; 32] = hasher0.finalize().into(); - - let mut hasher1 = Sha256::new(); - hasher1.update(para1.id().as_bytes()); - hasher1.update(&to_vec(¶1.text).unwrap()); - hasher1.update(&to_vec(¶1.element().metadata()).unwrap()); - let expected_hash1: [u8; 32] = hasher1.finalize().into(); - let mut hasher1b = Sha256::new(); - hasher1b.update(expected_hash1); - let expected_hash1b: [u8; 32] = hasher1b.finalize().into(); - - let mut hasher2 = Sha256::new(); - hasher2.update(para2.id().as_bytes()); - hasher2.update(&to_vec(¶2.text).unwrap()); - hasher2.update(&to_vec(¶2.element().metadata()).unwrap()); - let expected_hash2: [u8; 32] = hasher2.finalize().into(); - let mut hasher2b = Sha256::new(); - hasher2b.update(expected_hash2); - let expected_hash2b: [u8; 32] = hasher2b.finalize().into(); - - let mut hasher3 = Sha256::new(); - hasher3.update(para3.id().as_bytes()); - hasher3.update(&to_vec(¶3.text).unwrap()); - hasher3.update(&to_vec(¶3.element().metadata()).unwrap()); - let expected_hash3: [u8; 32] = hasher3.finalize().into(); - let mut hasher3b = Sha256::new(); - hasher3b.update(expected_hash3); - let expected_hash3b: [u8; 32] = hasher3b.finalize().into(); - - let mut hasher = Sha256::new(); - hasher.update(&expected_hash0); - hasher.update(&expected_hash1b); - hasher.update(&expected_hash2b); - hasher.update(&expected_hash3b); - let expected_hash: [u8; 32] = hasher.finalize().into(); - - assert_eq!(page.calculate_merkle_hash().unwrap(), expected_hash0); - assert_eq!( - Interface::calculate_merkle_hash_for(¶1, false).unwrap(), - expected_hash1b - ); - assert_eq!( - Interface::calculate_merkle_hash_for(¶2, false).unwrap(), - expected_hash2b - ); - assert_eq!( - Interface::calculate_merkle_hash_for(¶3, false).unwrap(), - expected_hash3b - ); - assert_eq!( - Interface::calculate_merkle_hash_for(&page, false).unwrap(), - expected_hash - ); - } - - #[test] - #[ignore] - fn calculate_merkle_hash_for__recalculated_values() { - // TODO: Later, tests should be added for recalculating the hashes, and - // TODO: especially checking when the data has been interfered with or - // TODO: otherwise arrived at an invalid state. - todo!() - } -} diff --git a/crates/storage/src/tests/mocks.rs b/crates/storage/src/tests/mocks.rs new file mode 100644 index 000000000..dec45cc4a --- /dev/null +++ b/crates/storage/src/tests/mocks.rs @@ -0,0 +1,37 @@ +use std::cell::RefCell; +use std::collections::HashMap; + +use crate::index::Index; +use crate::interface::{MainInterface, StorageAdaptor}; + +thread_local! { + static FOREIGN_STORAGE: RefCell, Vec>> = RefCell::new(HashMap::new()); +} + +pub(crate) type ForeignInterface = MainInterface; + +#[expect(dead_code, reason = "Here to be used by tests")] +pub(crate) type ForeignIndex = Index; + +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +#[non_exhaustive] +pub(crate) struct ForeignStorage; + +impl StorageAdaptor for ForeignStorage { + fn storage_read(key: &[u8]) -> Option> { + FOREIGN_STORAGE.with(|storage| storage.borrow().get(key).cloned()) + } + + fn storage_remove(key: &[u8]) -> bool { + FOREIGN_STORAGE.with(|storage| storage.borrow_mut().remove(key).is_some()) + } + + fn storage_write(key: &[u8], value: &[u8]) -> bool { + FOREIGN_STORAGE.with(|storage| { + storage + .borrow_mut() + .insert(key.to_vec(), value.to_vec()) + .is_some() + }) + } +} From c824963dac9aac8cdf9f3c9747c1be8a2368e7c9 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 16 Oct 2024 16:41:19 +0100 Subject: [PATCH 13/75] feat: Add ancestor hashes and type IDs (#800) Added type ID to entities - Added a type_id() method to the Data trait, to provide a unique type ID per implemented Data type, formalising the approach to type identification. - Added a type_id parameter to Index::add_child_to() and Index::root(). Added ancestor hashes to Action - Added ancestor information to Action::Add, Delete, and Update. This allows the ancestor hashes to be checked after applying an action, to see if further syncing is needed. - Added an ancestors field to ComparisonData. This will be useful for checking the higher tree levels in some cases. - Added get_ancestors_of() and get_type_id() to Index. The type ID is now formalised as a u8. - Changed the Action id field to be a u8, to match type_id. - Made the Action variants into struct variants for greater clarity. Changed apply_action() to check ancestors - Amended the behaviour of Interface::apply_action() to check the recalculated ancestor hashes of an updated entity after applying the update, and indicate if any of the ancestors need re-syncing as a result (based on the expectation that the hashes will all match). --- crates/storage-macros/src/lib.rs | 30 ++- crates/storage-macros/tests/atomic_unit.rs | 3 + crates/storage-macros/tests/collection.rs | 3 + .../tests/compile_fail/collection.rs | 2 + .../tests/compile_fail/collection.stderr | 4 +- crates/storage/src/entities.rs | 16 ++ crates/storage/src/index.rs | 58 +++++- crates/storage/src/interface.rs | 181 ++++++++++++++---- crates/storage/src/tests/common.rs | 16 ++ crates/storage/src/tests/index.rs | 171 ++++++++++++++--- crates/storage/src/tests/interface.rs | 121 ++++++++++-- 11 files changed, 505 insertions(+), 100 deletions(-) diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index ffe265aa3..5e683f585 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -3,7 +3,7 @@ use borsh as _; use calimero_storage as _; use proc_macro::TokenStream; use quote::{format_ident, quote}; -use syn::{parse_macro_input, Data, DeriveInput, Fields, Type}; +use syn::{parse_macro_input, Data, DeriveInput, Fields, LitInt, Type}; #[cfg(test)] mod integration_tests_package_usage { @@ -42,8 +42,14 @@ mod integration_tests_package_usage { /// /// # Struct attributes /// -/// * `#[root]` - Indicates that the type represents a root in the hierarchy, -/// and doesn't have a parent. +/// * `#[root]` - Indicates that the type represents a root in the +/// hierarchy, and doesn't have a parent. This is an +/// optional attribute. +/// * `#[type_id(n)]` - Indicates the type ID for the struct. This is a +/// mandatory attribute, and the value `n` must be a `u8`. +/// This is used to differentiate between different types +/// of structs when deserialising, and each type should have +/// a unique ID. /// /// # Field attributes /// @@ -93,6 +99,7 @@ mod integration_tests_package_usage { /// use calimero_storage_macros::AtomicUnit; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(43)] /// struct Page { /// title: String, /// #[private] @@ -107,6 +114,7 @@ mod integration_tests_package_usage { /// use calimero_storage_macros::{AtomicUnit, Collection}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(44)] /// struct Person { /// name: String, /// age: u32, @@ -147,12 +155,20 @@ mod integration_tests_package_usage { )] #[proc_macro_derive( AtomicUnit, - attributes(children, collection, private, root, skip, storage) + attributes(children, collection, private, root, skip, storage, type_id) )] pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; let is_root = input.attrs.iter().any(|attr| attr.path().is_ident("root")); + let type_id = input + .attrs + .iter() + .find(|attr| attr.path().is_ident("type_id")) + .and_then(|attr| attr.parse_args::().ok()) + .expect("AtomicUnit derive requires a #[type_id(n)] attribute, where n is a u8") + .base10_parse::() + .expect("type_id must be a valid u8"); let fields = match &input.data { Data::Struct(data) => &data.fields, @@ -372,6 +388,10 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { } #root_impl + + fn type_id() -> u8 { + #type_id + } } impl calimero_storage::entities::AtomicUnit for #name {} @@ -424,6 +444,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// use calimero_storage::entities::{Data, Element}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(42)] /// struct Book { /// title: String, /// pages: Pages, @@ -436,6 +457,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// struct Pages; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(43)] /// struct Page { /// content: String, /// #[storage] diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs index 5b52b832c..8f67f911d 100644 --- a/crates/storage-macros/tests/atomic_unit.rs +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -34,6 +34,7 @@ use calimero_storage_macros::AtomicUnit; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] #[root] +#[type_id(1)] struct Private { public: String, #[private] @@ -54,6 +55,7 @@ impl Private { #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] #[root] +#[type_id(2)] struct Simple { name: String, value: i32, @@ -73,6 +75,7 @@ impl Simple { #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] #[root] +#[type_id(3)] struct Skipped { included: String, #[skip] diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs index 0a504a10b..f67afad44 100644 --- a/crates/storage-macros/tests/collection.rs +++ b/crates/storage-macros/tests/collection.rs @@ -32,6 +32,7 @@ use calimero_storage::exports::{Digest, Sha256}; use calimero_storage_macros::{AtomicUnit, Collection}; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(22)] struct Child { content: String, #[storage] @@ -58,6 +59,7 @@ impl Group { } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(21)] #[root] struct Parent { title: String, @@ -78,6 +80,7 @@ impl Parent { } #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(23)] #[root] struct Simple { name: String, diff --git a/crates/storage-macros/tests/compile_fail/collection.rs b/crates/storage-macros/tests/compile_fail/collection.rs index 8b79f3fb3..565a0f8eb 100644 --- a/crates/storage-macros/tests/compile_fail/collection.rs +++ b/crates/storage-macros/tests/compile_fail/collection.rs @@ -4,6 +4,7 @@ use calimero_storage::interface::Interface; use calimero_storage_macros::{AtomicUnit, Collection}; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(2)] struct Child { #[storage] storage: Element, @@ -15,6 +16,7 @@ struct Group; #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] #[root] +#[type_id(1)] struct Parent { group: Group, #[storage] diff --git a/crates/storage-macros/tests/compile_fail/collection.stderr b/crates/storage-macros/tests/compile_fail/collection.stderr index 72173c9b7..eeb500f05 100644 --- a/crates/storage-macros/tests/compile_fail/collection.stderr +++ b/crates/storage-macros/tests/compile_fail/collection.stderr @@ -1,7 +1,7 @@ error[E0308]: mismatched types - --> tests/compile_fail/collection.rs:33:30 + --> tests/compile_fail/collection.rs:35:30 | -33 | let _: Vec = Interface::children_of(parent.id(), &parent.group).unwrap(); +35 | let _: Vec = Interface::children_of(parent.id(), &parent.group).unwrap(); | ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec`, found `Vec` | | | expected due to this diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 49e362602..a5492f407 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -237,6 +237,7 @@ use crate::interface::StorageError; /// use calimero_storage_macros::AtomicUnit; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(43)] /// struct Page { /// title: String, /// #[private] @@ -261,6 +262,7 @@ pub trait AtomicUnit: Data {} /// use calimero_storage::entities::{ChildInfo, Data, Element}; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(42)] /// struct Book { /// title: String, /// pages: Pages, @@ -273,6 +275,7 @@ pub trait AtomicUnit: Data {} /// struct Pages; /// /// #[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +/// #[type_id(43)] /// struct Page { /// content: String, /// #[storage] @@ -429,6 +432,19 @@ pub trait Data: fn path(&self) -> Path { self.element().path() } + + /// The type identifier of the entity. + /// + /// This is noted so that the entity can be deserialised correctly in the + /// absence of other semantic information. It is intended that the [`Path`] + /// will be used to help with this at some point, but at present paths are + /// not fully utilised. + /// + /// The value returned is arbitrary, and is up to the implementer to decide + /// what it should be. It is recommended that it be unique for each type of + /// entity. + /// + fn type_id() -> u8; } /// Summary information for the child of an [`Element`] in the storage. diff --git a/crates/storage/src/index.rs b/crates/storage/src/index.rs index 819bd9cc9..2f30a41b6 100644 --- a/crates/storage/src/index.rs +++ b/crates/storage/src/index.rs @@ -33,6 +33,12 @@ struct EntityIndex { /// Merkle hash of the entity's immediate data only. This gets combined with /// the hashes of its children to form the full hash. own_hash: [u8; 32], + + /// Type identifier of the entity. This is noted so that the entity can be + /// deserialised correctly in the absence of other semantic information. It + /// is intended that the [`Path`](crate::address::Path) will be used to help + /// with this at some point, but at present paths are not fully utilised. + type_id: u8, } /// Manages the indexing system for efficient tree navigation. @@ -50,6 +56,7 @@ impl Index { /// * `collection` - The name of the collection to which the child is to be /// added. /// * `child` - The [`ChildInfo`] of the child entity to be added. + /// * `type_id` - The type identifier of the entity. /// /// # Errors /// @@ -65,6 +72,7 @@ impl Index { parent_id: Id, collection: &str, child: ChildInfo, + type_id: u8, ) -> Result<(), StorageError> { let mut parent_index = Self::get_index(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; @@ -75,6 +83,7 @@ impl Index { children: BTreeMap::new(), full_hash: [0; 32], own_hash: [0; 32], + type_id, }); child_index.parent_id = Some(parent_id); child_index.own_hash = child.merkle_hash(); @@ -113,13 +122,14 @@ impl Index { /// /// * [`add_child_to()`](Index::add_child_to()) /// - pub(crate) fn add_root(root: ChildInfo) -> Result<(), StorageError> { + pub(crate) fn add_root(root: ChildInfo, type_id: u8) -> Result<(), StorageError> { let mut index = Self::get_index(root.id())?.unwrap_or_else(|| EntityIndex { id: root.id(), parent_id: None, children: BTreeMap::new(), full_hash: [0; 32], own_hash: [0; 32], + type_id, }); index.own_hash = root.merkle_hash(); Self::save_index(&index)?; @@ -198,6 +208,35 @@ impl Index { Ok(hasher.finalize().into()) } + /// Retrieves the ancestors of a given entity. + /// + /// Retrieves information about the ancestors of the entity, with their IDs + /// and hashes. The order is from the immediate parent to the root, so index + /// zero will be the parent, and the last index will be the root. + /// + /// # Parameters + /// + /// * `id` - The [`Id`] of the entity whose ancestors are to be retrieved. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + pub(crate) fn get_ancestors_of(id: Id) -> Result, StorageError> { + let mut ancestors = Vec::new(); + let mut current_id = id; + + while let Some(parent_id) = Self::get_parent_id(current_id)? { + let (parent_full_hash, _) = + Self::get_hashes_for(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; + ancestors.push(ChildInfo::new(parent_id, parent_full_hash)); + current_id = parent_id; + } + + Ok(ancestors) + } + /// Retrieves the children of a given entity. /// /// # Parameters @@ -302,6 +341,23 @@ impl Index { Ok(Self::get_index(child_id)?.and_then(|index| index.parent_id)) } + /// Retrieves the type of the given entity. + /// + /// # Parameters + /// + /// * `id` - The [`Id`] of the entity whose type is to be retrieved. + /// + /// # Errors + /// + /// If there's an issue retrieving or deserialising the index information, + /// an error will be returned. + /// + pub(crate) fn get_type_id(id: Id) -> Result { + Ok(Self::get_index(id)? + .ok_or(StorageError::IndexNotFound(id))? + .type_id) + } + /// Whether the collection has children. /// /// # Parameters diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 4c2561f8a..54b848432 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -258,24 +258,72 @@ pub type Interface = MainInterface; /// because of type restrictions, and they are due to be sent around the network /// anyway. /// -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +/// Note: This enum contains the entity type, for passing to the guest for +/// processing along with the ID and data. +/// +#[derive( + BorshDeserialize, + BorshSerialize, + Clone, + Debug, + Deserialize, + Eq, + Hash, + Ord, + PartialEq, + PartialOrd, + Serialize, +)] #[expect(clippy::exhaustive_enums, reason = "Exhaustive")] pub enum Action { - /// Add an entity with the given ID. - Add(Id, Vec), - - /// Compare the given entity. Note that this results in a direct comparison - /// of the specific entity in question, including data that is immediately - /// available to it, such as the hashes of its children. This may well - /// result in further actions being generated if children differ, leading to - /// a recursive comparison. - Compare(Id), + /// Add an entity with the given ID, type, and data. + Add { + /// Unique identifier of the entity. + id: Id, + + /// Type identifier of the entity. + type_id: u8, + + /// Serialised data of the entity. + data: Vec, + + /// Details of the ancestors of the entity. + ancestors: Vec, + }, + + /// Compare the entity with the given ID and type. Note that this results in + /// a direct comparison of the specific entity in question, including data + /// that is immediately available to it, such as the hashes of its children. + /// This may well result in further actions being generated if children + /// differ, leading to a recursive comparison. + Compare { + /// Unique identifier of the entity. + id: Id, + }, /// Delete an entity with the given ID. - Delete(Id), + Delete { + /// Unique identifier of the entity. + id: Id, + + /// Details of the ancestors of the entity. + ancestors: Vec, + }, + + /// Update the entity with the given ID and type to have the supplied data. + Update { + /// Unique identifier of the entity. + id: Id, + + /// Type identifier of the entity. + type_id: u8, - /// Update the entity with the given ID. - Update(Id, Vec), + /// Serialised data of the entity. + data: Vec, + + /// Details of the ancestors of the entity. + ancestors: Vec, + }, } /// Data that is used for comparison between two nodes. @@ -302,6 +350,11 @@ pub struct ComparisonData { /// The Merkle hash of the entity's complete data, including child hashes. full_hash: [u8; 32], + /// The list of ancestors of the entity, with their IDs and hashes. The + /// order is from the immediate parent to the root, so index zero will be + /// the parent, and the last index will be the root. + ancestors: Vec, + /// The list of children of the entity, with their IDs and hashes, /// organised by collection name. children: BTreeMap>, @@ -339,6 +392,7 @@ impl MainInterface { parent_id, collection.name(), ChildInfo::new(child.id(), own_hash), + D::type_id(), )?; child.element_mut().merkle_hash = >::update_hash_for(child.id(), own_hash)?; Self::save(child) @@ -358,8 +412,10 @@ impl MainInterface { /// function to deal with the type being indicated in the serialised data, /// if appropriate, or in the ID or accompanying metadata. /// - /// TODO: Establish whether any additional data encoding is needed, to help - /// TODO: with deserialisation. + /// After applying the [`Action`], the ancestor hashes will be recalculated, + /// and this function will compare them against the expected hashes. If any + /// of the hashes do not match, the ID of the first entity with a mismatched + /// hash will be returned — i.e. the nearest ancestor. /// /// # Parameters /// @@ -370,19 +426,36 @@ impl MainInterface { /// If there is an error when deserialising into the specified type, or when /// applying the [`Action`], an error will be returned. /// - pub fn apply_action(action: Action) -> Result<(), StorageError> { - match action { - Action::Add(_id, serialized_data) | Action::Update(_id, serialized_data) => { - let mut entity = D::try_from_slice(&serialized_data) - .map_err(StorageError::DeserializationError)?; + pub fn apply_action(action: Action) -> Result, StorageError> { + let ancestors = match action { + Action::Add { + data, ancestors, .. + } + | Action::Update { + data, ancestors, .. + } => { + let mut entity = + D::try_from_slice(&data).map_err(StorageError::DeserializationError)?; _ = Self::save(&mut entity)?; + ancestors + } + Action::Compare { .. } => { + return Err(StorageError::ActionNotAllowed("Compare".to_owned())) } - Action::Compare(_) => return Err(StorageError::ActionNotAllowed("Compare".to_owned())), - Action::Delete(id) => { + Action::Delete { id, ancestors, .. } => { _ = S::storage_remove(id.as_bytes()); + ancestors + } + }; + + for ancestor in &ancestors { + let (current_hash, _) = >::get_hashes_for(ancestor.id())? + .ok_or(StorageError::IndexNotFound(ancestor.id()))?; + if current_hash != ancestor.merkle_hash() { + return Ok(Some(ancestor.id())); } } - Ok(()) + Ok(None) } /// The children of the [`Collection`]. @@ -511,10 +584,12 @@ impl MainInterface { let mut actions = (vec![], vec![]); let Some(local_entity) = Self::find_by_id::(foreign_entity.id())? else { // Local entity doesn't exist, so we need to add it - actions.0.push(Action::Add( - foreign_entity.id(), - to_vec(foreign_entity).map_err(StorageError::SerializationError)?, - )); + actions.0.push(Action::Add { + id: foreign_entity.id(), + type_id: D::type_id(), + data: to_vec(foreign_entity).map_err(StorageError::SerializationError)?, + ancestors: foreign_index_data.ancestors.clone(), + }); return Ok(actions); }; @@ -531,15 +606,19 @@ impl MainInterface { // Compare own hashes and timestamps if local_own_hash != foreign_index_data.own_hash { if local_entity.element().updated_at() <= foreign_entity.element().updated_at() { - actions.0.push(Action::Update( - local_entity.id(), - to_vec(foreign_entity).map_err(StorageError::SerializationError)?, - )); + actions.0.push(Action::Update { + id: local_entity.id(), + type_id: D::type_id(), + data: to_vec(foreign_entity).map_err(StorageError::SerializationError)?, + ancestors: foreign_index_data.ancestors.clone(), + }); } else { - actions.1.push(Action::Update( - foreign_entity.id(), - to_vec(&local_entity).map_err(StorageError::SerializationError)?, - )); + actions.1.push(Action::Update { + id: foreign_entity.id(), + type_id: D::type_id(), + data: to_vec(&local_entity).map_err(StorageError::SerializationError)?, + ancestors: >::get_ancestors_of(local_entity.id())?, + }); } } @@ -562,12 +641,17 @@ impl MainInterface { for (id, local_hash) in &local_child_map { match foreign_child_map.get(id) { Some(foreign_hash) if local_hash != foreign_hash => { - actions.0.push(Action::Compare(*id)); - actions.1.push(Action::Compare(*id)); + actions.0.push(Action::Compare { id: *id }); + actions.1.push(Action::Compare { id: *id }); } None => { if let Some(local_child) = Self::find_by_id_raw(*id)? { - actions.1.push(Action::Add(*id, local_child)); + actions.1.push(Action::Add { + id: *id, + type_id: >::get_type_id(*id)?, + data: local_child, + ancestors: >::get_ancestors_of(local_entity.id())?, + }); } } // Hashes match, no action needed @@ -580,14 +664,19 @@ impl MainInterface { // Child exists in foreign but not locally, compare. // We can't get the full data for the foreign child, so we flag it for // comparison. - actions.1.push(Action::Compare(*id)); + actions.1.push(Action::Compare { id: *id }); } } } else { // The entire collection is missing from the foreign entity for child in local_children { if let Some(local_child) = Self::find_by_id_raw(child.id())? { - actions.1.push(Action::Add(child.id(), local_child)); + actions.1.push(Action::Add { + id: child.id(), + type_id: >::get_type_id(child.id())?, + data: local_child, + ancestors: >::get_ancestors_of(local_entity.id())?, + }); } } } @@ -598,7 +687,7 @@ impl MainInterface { if !local_collections.contains_key(foreign_coll_name) { for child in foreign_children { // We can't get the full data for the foreign child, so we flag it for comparison - actions.1.push(Action::Compare(child.id())); + actions.1.push(Action::Compare { id: child.id() }); } } } @@ -738,6 +827,7 @@ impl MainInterface { let (full_hash, own_hash) = >::get_hashes_for(entity.id())? .ok_or(StorageError::IndexNotFound(entity.id()))?; + let ancestors = >::get_ancestors_of(entity.id())?; let children = entity .collections() .into_keys() @@ -746,10 +836,12 @@ impl MainInterface { .map(|children| (collection_name.clone(), children)) }) .collect::, _>>()?; + Ok(ComparisonData { id: entity.id(), own_hash, full_hash, + ancestors, children, }) } @@ -909,7 +1001,7 @@ impl MainInterface { return Ok(false); } } else if D::is_root() { - >::add_root(ChildInfo::new(id, [0_u8; 32]))?; + >::add_root(ChildInfo::new(id, [0_u8; 32]), D::type_id())?; } let own_hash = entity.calculate_merkle_hash()?; @@ -1059,6 +1151,10 @@ pub enum StorageError { /// An unknown collection type was specified. #[error("Unknown collection type: {0}")] UnknownCollectionType(String), + + /// An unknown type was specified. + #[error("Unknown type: {0}")] + UnknownType(u8), } impl Serialize for StorageError { @@ -1077,6 +1173,7 @@ impl Serialize for StorageError { | Self::InvalidDataFound(id) | Self::NotFound(id) => serializer.serialize_str(&id.to_string()), Self::StoreError(ref err) => serializer.serialize_str(&err.to_string()), + Self::UnknownType(err) => serializer.serialize_u8(err), } } } diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index 4bd25047c..f2c2a99d9 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -66,6 +66,10 @@ impl Data for EmptyData { fn is_root() -> bool { true } + + fn type_id() -> u8 { + 101 + } } /// A simple page with a title, and paragraphs as children. @@ -130,6 +134,10 @@ impl Data for Page { fn is_root() -> bool { true } + + fn type_id() -> u8 { + 102 + } } /// A simple paragraph with text. No children. Belongs to a page. @@ -183,6 +191,10 @@ impl Data for Paragraph { fn is_root() -> bool { false } + + fn type_id() -> u8 { + 103 + } } /// A collection of paragraphs for a page. @@ -245,4 +257,8 @@ impl Data for Person { fn is_root() -> bool { true } + + fn type_id() -> u8 { + 104 + } } diff --git a/crates/storage/src/tests/index.rs b/crates/storage/src/tests/index.rs index accf144f2..7d84383eb 100644 --- a/crates/storage/src/tests/index.rs +++ b/crates/storage/src/tests/index.rs @@ -10,7 +10,7 @@ mod index__public_methods { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.id, root_id); @@ -30,7 +30,8 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection_name, - ChildInfo::new(child_id, child_own_hash) + ChildInfo::new(child_id, child_own_hash), + 2, ) .is_ok()); @@ -56,7 +57,7 @@ mod index__public_methods { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.id, root_id); @@ -65,12 +66,86 @@ mod index__public_methods { assert!(root_index.children.is_empty()); } + #[test] + fn get_ancestors_of() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + let child_collection_name = "Books"; + let grandchild_collection_name = "Pages"; + let greatgrandchild_collection_name = "Paragraphs"; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); + + let child_id = Id::new(); + let child_hash = [2_u8; 32]; + let child_info = ChildInfo::new(child_id, child_hash); + assert!( + >::add_child_to(root_id, child_collection_name, child_info, 2) + .is_ok() + ); + + let grandchild_id = Id::new(); + let grandchild_hash = [3_u8; 32]; + let grandchild_info = ChildInfo::new(grandchild_id, grandchild_hash); + assert!(>::add_child_to( + child_id, + grandchild_collection_name, + grandchild_info, + 3, + ) + .is_ok()); + + let greatgrandchild_id = Id::new(); + let greatgrandchild_hash = [4_u8; 32]; + let greatgrandchild_info = ChildInfo::new(greatgrandchild_id, greatgrandchild_hash); + assert!(>::add_child_to( + grandchild_id, + greatgrandchild_collection_name, + greatgrandchild_info, + 4, + ) + .is_ok()); + + let ancestors = >::get_ancestors_of(greatgrandchild_id).unwrap(); + assert_eq!(ancestors.len(), 3); + assert_eq!( + ancestors[0], + ChildInfo::new( + grandchild_id, + >::get_hashes_for(grandchild_id) + .unwrap() + .unwrap() + .0 + ) + ); + assert_eq!( + ancestors[1], + ChildInfo::new( + child_id, + >::get_hashes_for(child_id) + .unwrap() + .unwrap() + .0 + ) + ); + assert_eq!( + ancestors[2], + ChildInfo::new( + root_id, + >::get_hashes_for(root_id) + .unwrap() + .unwrap() + .0 + ) + ); + } + #[test] fn get_children_of__single_collection() { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let collection_name = "Books"; let child1_id = Id::new(); @@ -92,13 +167,15 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection_name, - ChildInfo::new(child1_id, child1_own_hash) + ChildInfo::new(child1_id, child1_own_hash), + 2, ) .is_ok()); assert!(>::add_child_to( root_id, collection_name, - ChildInfo::new(child2_id, child2_own_hash) + ChildInfo::new(child2_id, child2_own_hash), + 2, ) .is_ok()); @@ -113,7 +190,7 @@ mod index__public_methods { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let collection1_name = "Pages"; let child1_id = Id::new(); @@ -143,19 +220,22 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection1_name, - ChildInfo::new(child1_id, child1_own_hash) + ChildInfo::new(child1_id, child1_own_hash), + 2, ) .is_ok()); assert!(>::add_child_to( root_id, collection1_name, - ChildInfo::new(child2_id, child2_own_hash) + ChildInfo::new(child2_id, child2_own_hash), + 2, ) .is_ok()); assert!(>::add_child_to( root_id, collection2_name, - ChildInfo::new(child3_id, child3_own_hash) + ChildInfo::new(child3_id, child3_own_hash), + 2, ) .is_ok()); @@ -173,7 +253,7 @@ mod index__public_methods { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let collection1_name = "Pages"; let collection2_name = "Chapters"; @@ -187,13 +267,15 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection1_name, - ChildInfo::new(child1_id, child1_own_hash) + ChildInfo::new(child1_id, child1_own_hash), + 2, ) .is_ok()); assert!(>::add_child_to( root_id, collection2_name, - ChildInfo::new(child2_id, child2_own_hash) + ChildInfo::new(child2_id, child2_own_hash), + 2, ) .is_ok()); @@ -209,7 +291,7 @@ mod index__public_methods { let root_own_hash = [1_u8; 32]; let root_full_hash = [0_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_own_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_own_hash), 1).is_ok()); assert_eq!( >::get_hashes_for(root_id) @@ -224,7 +306,7 @@ mod index__public_methods { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.id, root_id); @@ -239,7 +321,8 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection_name, - ChildInfo::new(child_id, child_own_hash) + ChildInfo::new(child_id, child_own_hash), + 2, ) .is_ok()); @@ -250,13 +333,28 @@ mod index__public_methods { assert_eq!(>::get_parent_id(root_id).unwrap(), None); } + #[test] + fn get_type_id() { + let root_id = Id::new(); + let root_hash = [1_u8; 32]; + + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 99).is_ok()); + + let root_index = >::get_index(root_id).unwrap().unwrap(); + assert_eq!(root_index.id, root_id); + assert_eq!(root_index.own_hash, root_hash); + assert_eq!(root_index.type_id, 99); + + assert_eq!(>::get_type_id(root_id).unwrap(), 99,); + } + #[test] fn has_children() { let root_id = Id::new(); let root_hash = [1_u8; 32]; let collection_name = "Books"; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); assert!(!>::has_children(root_id, collection_name).unwrap()); let child_id = Id::new(); @@ -265,7 +363,8 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection_name, - ChildInfo::new(child_id, child_own_hash) + ChildInfo::new(child_id, child_own_hash), + 2, ) .is_ok()); assert!(>::has_children(root_id, collection_name).unwrap()); @@ -276,7 +375,7 @@ mod index__public_methods { let root_id = Id::new(); let root_hash = [1_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.id, root_id); @@ -291,7 +390,8 @@ mod index__public_methods { assert!(>::add_child_to( root_id, collection_name, - ChildInfo::new(child_id, child_own_hash) + ChildInfo::new(child_id, child_own_hash), + 2, ) .is_ok()); assert!( @@ -320,6 +420,7 @@ mod index__private_methods { children: BTreeMap::new(), full_hash: hash1, own_hash: hash2, + type_id: 1, }; >::save_index(&index).unwrap(); @@ -339,6 +440,7 @@ mod index__private_methods { children: BTreeMap::new(), full_hash: hash1, own_hash: hash2, + type_id: 1, }; >::save_index(&index).unwrap(); assert_eq!(>::get_index(id).unwrap().unwrap(), index); @@ -355,21 +457,27 @@ mod hashing { #[test] fn calculate_full_merkle_hash_for__with_children() { let root_id = TEST_ID[0]; - assert!(>::add_root(ChildInfo::new(TEST_ID[0], [0_u8; 32])).is_ok()); + assert!(>::add_root(ChildInfo::new(TEST_ID[0], [0_u8; 32]), 1).is_ok()); let collection_name = "Children"; let child1_id = TEST_ID[1]; let child1_hash = [1_u8; 32]; let child1_info = ChildInfo::new(child1_id, child1_hash); - assert!(>::add_child_to(root_id, collection_name, child1_info).is_ok()); + assert!( + >::add_child_to(root_id, collection_name, child1_info, 2).is_ok() + ); let child2_id = TEST_ID[2]; let child2_hash = [2_u8; 32]; let child2_info = ChildInfo::new(child2_id, child2_hash); - assert!(>::add_child_to(root_id, collection_name, child2_info).is_ok()); + assert!( + >::add_child_to(root_id, collection_name, child2_info, 2).is_ok() + ); let child3_id = TEST_ID[3]; let child3_hash = [3_u8; 32]; let child3_info = ChildInfo::new(child3_id, child3_hash); - assert!(>::add_child_to(root_id, collection_name, child3_info).is_ok()); + assert!( + >::add_child_to(root_id, collection_name, child3_info, 2).is_ok() + ); assert_eq!( hex::encode( @@ -405,7 +513,7 @@ mod hashing { let grandchild_collection_name = "Pages"; let greatgrandchild_collection_name = "Paragraphs"; - assert!(>::add_root(ChildInfo::new(root_id, root_hash)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.full_hash, [0_u8; 32]); @@ -414,7 +522,8 @@ mod hashing { let child_hash = [2_u8; 32]; let child_info = ChildInfo::new(child_id, child_hash); assert!( - >::add_child_to(root_id, child_collection_name, child_info).is_ok() + >::add_child_to(root_id, child_collection_name, child_info, 2) + .is_ok() ); let root_index_with_child = >::get_index(root_id).unwrap().unwrap(); @@ -434,7 +543,8 @@ mod hashing { assert!(>::add_child_to( child_id, grandchild_collection_name, - grandchild_info + grandchild_info, + 3, ) .is_ok()); @@ -463,7 +573,8 @@ mod hashing { assert!(>::add_child_to( grandchild_id, greatgrandchild_collection_name, - greatgrandchild_info + greatgrandchild_info, + 4, ) .is_ok()); @@ -581,7 +692,7 @@ mod hashing { .try_into() .unwrap(); - assert!(>::add_root(ChildInfo::new(root_id, root_hash1)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash1), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.id, root_id); @@ -599,7 +710,7 @@ mod hashing { let root_hash1 = [1_u8; 32]; let root_hash2 = [2_u8; 32]; - assert!(>::add_root(ChildInfo::new(root_id, root_hash1)).is_ok()); + assert!(>::add_root(ChildInfo::new(root_id, root_hash1), 1).is_ok()); let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.id, root_id); diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 64b033fa1..11ca92f47 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -165,7 +165,12 @@ mod interface__apply_actions { fn apply_action__add() { let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let serialized = to_vec(&page).unwrap(); - let action = Action::Add(page.id(), serialized); + let action = Action::Add { + id: page.id(), + type_id: 102, + data: serialized, + ancestors: vec![], + }; assert!(Interface::apply_action::(action).is_ok()); @@ -184,7 +189,12 @@ mod interface__apply_actions { page.title = "New Title".to_owned(); page.element_mut().update(); let serialized = to_vec(&page).unwrap(); - let action = Action::Update(page.id(), serialized); + let action = Action::Update { + id: page.id(), + type_id: 102, + data: serialized, + ancestors: vec![], + }; assert!(Interface::apply_action::(action).is_ok()); @@ -199,7 +209,10 @@ mod interface__apply_actions { Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); assert!(Interface::save(&mut page).unwrap()); - let action = Action::Delete(page.id()); + let action = Action::Delete { + id: page.id(), + ancestors: vec![], + }; assert!(Interface::apply_action::(action).is_ok()); @@ -211,7 +224,7 @@ mod interface__apply_actions { #[test] fn apply_action__compare() { let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); - let action = Action::Compare(page.id()); + let action = Action::Compare { id: page.id() }; // Compare should fail assert!(Interface::apply_action::(action).is_err()); @@ -221,7 +234,12 @@ mod interface__apply_actions { fn apply_action__wrong_type() { let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let serialized = to_vec(&page).unwrap(); - let action = Action::Add(page.id(), serialized); + let action = Action::Add { + id: page.id(), + type_id: 102, + data: serialized, + ancestors: vec![], + }; // Trying to apply a Page action as if it were a Paragraph should fail assert!(Interface::apply_action::(action).is_err()); @@ -231,7 +249,12 @@ mod interface__apply_actions { fn apply_action__non_existent_update() { let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); let serialized = to_vec(&page).unwrap(); - let action = Action::Update(page.id(), serialized); + let action = Action::Update { + id: page.id(), + type_id: 102, + data: serialized, + ancestors: vec![], + }; // Updating a non-existent page should still succeed (it will be added) assert!(Interface::apply_action::(action).is_ok()); @@ -290,7 +313,12 @@ mod interface__comparison { result, ( vec![], - vec![Action::Update(local.id(), to_vec(&local).unwrap())] + vec![Action::Update { + id: local.id(), + type_id: 102, + data: to_vec(&local).unwrap(), + ancestors: vec![] + }] ) ); } @@ -316,7 +344,12 @@ mod interface__comparison { assert_eq!( result, ( - vec![Action::Update(foreign.id(), to_vec(&foreign).unwrap())], + vec![Action::Update { + id: foreign.id(), + type_id: 102, + data: to_vec(&foreign).unwrap(), + ancestors: vec![] + }], vec![] ) ); @@ -376,9 +409,16 @@ mod interface__comparison { local_actions, vec![ // Page needs update due to different child structure - Action::Update(foreign_page.id(), to_vec(&foreign_page).unwrap()), + Action::Update { + id: foreign_page.id(), + type_id: 102, + data: to_vec(&foreign_page).unwrap(), + ancestors: vec![] + }, // Para1 needs comparison due to different hash - Action::Compare(local_para1.id()), + Action::Compare { + id: local_para1.id() + }, ] ); local_para2.element_mut().is_dirty = true; @@ -386,11 +426,20 @@ mod interface__comparison { foreign_actions, vec![ // Para1 needs comparison due to different hash - Action::Compare(local_para1.id()), + Action::Compare { + id: local_para1.id() + }, // Para2 needs to be added to foreign - Action::Add(local_para2.id(), to_vec(&local_para2).unwrap()), + Action::Add { + id: local_para2.id(), + type_id: 103, + data: to_vec(&local_para2).unwrap(), + ancestors: vec![] + }, // Para3 needs to be added locally, but we don't have the data, so we compare - Action::Compare(foreign_para3.id()), + Action::Compare { + id: foreign_para3.id() + }, ] ); @@ -401,12 +450,27 @@ mod interface__comparison { ) .unwrap(); + // Here, para1 has been updated, but also para2 is present locally and para3 + // is present remotely. So the ancestor hashes will not match, and will + // trigger a recomparison. + let local_para1_ancestor_hash = { + let Action::Update { ancestors, .. } = local_para1_actions[0].clone() else { + panic!("Expected an update action"); + }; + ancestors[0].merkle_hash() + }; + assert_ne!( + local_para1_ancestor_hash, + foreign_page.element().merkle_hash() + ); assert_eq!( local_para1_actions, - vec![Action::Update( - foreign_para1.id(), - to_vec(&foreign_para1).unwrap() - )] + vec![Action::Update { + id: foreign_para1.id(), + type_id: 103, + data: to_vec(&foreign_para1).unwrap(), + ancestors: vec![ChildInfo::new(foreign_page.id(), local_para1_ancestor_hash,)], + }] ); assert_eq!(foreign_para1_actions, vec![]); @@ -417,12 +481,27 @@ mod interface__comparison { ) .unwrap(); + // Here, para3 is present remotely but not locally, and also para2 is + // present locally and not remotely, and para1 has been updated. So the + // ancestor hashes will not match, and will trigger a recomparison. + let local_para3_ancestor_hash = { + let Action::Add { ancestors, .. } = local_para3_actions[0].clone() else { + panic!("Expected an update action"); + }; + ancestors[0].merkle_hash() + }; + assert_ne!( + local_para3_ancestor_hash, + foreign_page.element().merkle_hash() + ); assert_eq!( local_para3_actions, - vec![Action::Add( - foreign_para3.id(), - to_vec(&foreign_para3).unwrap() - )] + vec![Action::Add { + id: foreign_para3.id(), + type_id: 103, + data: to_vec(&foreign_para3).unwrap(), + ancestors: vec![ChildInfo::new(foreign_page.id(), local_para3_ancestor_hash,)], + }] ); assert_eq!(foreign_para3_actions, vec![]); } From c648d2bfb0c72ad62e044e992f4dc0ba475d21fc Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Fri, 18 Oct 2024 10:23:52 +0300 Subject: [PATCH 14/75] chore: adjusted approach to host functions (#808) NOTE: TESTS ARE CURRENTLY BROKEN. - Removed VMLogic::generate_uuid. - Removed UUID dependency from runtime & SDK. - Generalized sys::generate_uuid to sys::random_bytes. - Optimized sized data exchanged between the runtime and the SDK, skipping register heap allocations & copying. --- Cargo.lock | 2 -- crates/runtime/Cargo.toml | 2 +- crates/runtime/src/logic.rs | 46 +++++++++----------------- crates/runtime/src/logic/imports.rs | 4 +-- crates/sdk/Cargo.toml | 4 --- crates/sdk/src/env.rs | 50 +++++++++-------------------- crates/sdk/src/sys.rs | 5 +-- crates/storage/src/address.rs | 3 +- 8 files changed, 37 insertions(+), 79 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fa38aec81..dd756a8d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1013,7 +1013,6 @@ dependencies = [ "serde_json", "thiserror", "ureq", - "uuid 1.10.0", "wasmer", "wasmer-types", ] @@ -1029,7 +1028,6 @@ dependencies = [ "serde", "serde_json", "trybuild", - "uuid 1.10.0", ] [[package]] diff --git a/crates/runtime/Cargo.toml b/crates/runtime/Cargo.toml index 9e2a55d9c..7011fe539 100644 --- a/crates/runtime/Cargo.toml +++ b/crates/runtime/Cargo.toml @@ -11,10 +11,10 @@ borsh = { workspace = true, features = ["derive"] } fragile.workspace = true ouroboros.workspace = true owo-colors = { workspace = true, optional = true } +rand.workspace = true serde = { workspace = true, features = ["derive"] } thiserror.workspace = true ureq.workspace = true -uuid = { workspace = true, features = ["serde", "v4"] } wasmer.workspace = true wasmer-types.workspace = true diff --git a/crates/runtime/src/logic.rs b/crates/runtime/src/logic.rs index 7ee9b7d8c..39742a325 100644 --- a/crates/runtime/src/logic.rs +++ b/crates/runtime/src/logic.rs @@ -6,8 +6,8 @@ use std::time::{SystemTime, UNIX_EPOCH}; use borsh::from_slice as from_borsh_slice; use ouroboros::self_referencing; +use rand::RngCore; use serde::Serialize; -use uuid::Uuid; use crate::constraint::{Constrained, MaxU64}; use crate::errors::{FunctionCallError, HostError, Location, PanicContext}; @@ -138,17 +138,6 @@ impl<'a> VMLogic<'a> { } .build() } - - /// Generates a new UUID using v4 standard. - /// - /// This function generates a new UUID using the v4 standard. The UUID is - /// dependent on randomness, which is not available inside the guest - /// runtime. Therefore the guest needs to request this from the host. - /// - #[must_use] - pub fn generate_uuid(&self) -> Uuid { - Uuid::new_v4() - } } #[derive(Debug, Serialize)] @@ -479,19 +468,12 @@ impl VMHostFunctions<'_> { Ok(status) } - /// Generates a new UUID using v4 standard. - /// - /// This function generates a new UUID by calling the host. The UUID is - /// dependent on randomness, which is not available inside the guest - /// runtime. Therefore the guest needs to request this from the host. - /// - pub fn generate_uuid(&mut self, register_id: u64) -> VMLogicResult<()> { - self.with_logic_mut(|logic| { - let uuid = logic.generate_uuid(); - logic - .registers - .set(logic.limits, register_id, uuid.into_bytes()) - })?; + pub fn random_bytes(&mut self, ptr: u64, len: u64) -> VMLogicResult<()> { + let mut buf = vec![0; usize::try_from(len).map_err(|_| HostError::IntegerOverflow)?]; + + rand::thread_rng().fill_bytes(&mut buf); + self.borrow_memory().write(ptr, &buf)?; + Ok(()) } @@ -510,16 +492,18 @@ impl VMHostFunctions<'_> { clippy::unwrap_in_result, reason = "Effectively infallible here" )] - pub fn time_now(&mut self, register_id: u64) -> VMLogicResult<()> { + pub fn time_now(&mut self, ptr: u64, len: u64) -> VMLogicResult<()> { + if len != 8 { + return Err(HostError::InvalidMemoryAccess.into()); + } + let now = SystemTime::now() .duration_since(UNIX_EPOCH) .expect("Time went backwards to before the Unix epoch!") .as_nanos() as u64; - self.with_logic_mut(|logic| { - logic - .registers - .set(logic.limits, register_id, now.to_le_bytes()) - })?; + + self.borrow_memory().write(ptr, &now.to_le_bytes())?; + Ok(()) } } diff --git a/crates/runtime/src/logic/imports.rs b/crates/runtime/src/logic/imports.rs index 90ac54970..efd2a58bc 100644 --- a/crates/runtime/src/logic/imports.rs +++ b/crates/runtime/src/logic/imports.rs @@ -64,8 +64,8 @@ impl VMLogic<'_> { register_id: u64 ) -> u32; - fn generate_uuid(register_id: u64); - fn time_now(register_id: u64); + fn random_bytes(ptr: u64, len: u64); + fn time_now(ptr: u64, len: u64); } } } diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 581e57c8c..870c75e83 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -12,13 +12,9 @@ cfg-if.workspace = true hex.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true -uuid.workspace = true calimero-sdk-macros = { path = "./macros" } -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -uuid = { workspace = true, features = ["serde", "v4"] } - [dev-dependencies] trybuild.workspace = true diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index 5ec917587..d12c6ceea 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -1,9 +1,6 @@ use std::panic::set_hook; -#[cfg(not(target_arch = "wasm32"))] -use std::time::{SystemTime, UNIX_EPOCH}; use borsh::{from_slice as from_borsh_slice, to_vec as to_borsh_vec}; -use uuid::Uuid; use crate::event::AppEvent; #[cfg(not(target_arch = "wasm32"))] @@ -108,6 +105,10 @@ fn read_register_sized(register_id: RegisterId) -> Option<[u8; N let mut buffer = [0; N]; + #[expect( + clippy::needless_borrows_for_generic_args, + reason = "we don't want to copy the buffer, but write to the same one that's returned" + )] let succeed: bool = unsafe { sys::read_register(register_id, BufferMut::new(&mut buffer)) .try_into() @@ -228,46 +229,25 @@ pub fn state_write(state: &T) { _ = storage_write(STATE_KEY, &data); } -/// Generate a new random UUID v4. +/// Fill the buffer with random bytes. #[inline] -#[must_use] -pub fn generate_uuid() -> Uuid { - #[cfg(target_arch = "wasm32")] - { - unsafe { sys::generate_uuid(DATA_REGISTER) }; - Uuid::from_slice(&read_register_sized::<16>(DATA_REGISTER).expect("Must have UUID")) - .expect("UUID must be valid") - } - #[cfg(not(target_arch = "wasm32"))] - { - Uuid::new_v4() - } +pub fn random_bytes(buf: &mut [u8]) { + unsafe { sys::random_bytes(BufferMut::new(buf)) } } /// Gets the current time. #[inline] #[must_use] pub fn time_now() -> u64 { - #[cfg(target_arch = "wasm32")] - { - unsafe { sys::time_now(DATA_REGISTER) }; - u64::from_le_bytes( - read_register(DATA_REGISTER) - .expect("Must have time") - .try_into() - .expect("Invalid time bytes"), - ) - } - #[cfg(not(target_arch = "wasm32"))] + let mut bytes = [0; 8]; + #[expect( - clippy::cast_possible_truncation, - reason = "Impossible to overflow in normal circumstances" + clippy::needless_borrows_for_generic_args, + reason = "we don't want to copy the buffer, but write to the same one that's returned" )] - #[expect(clippy::expect_used, reason = "Effectively infallible here")] - { - SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards to before the Unix epoch!") - .as_nanos() as u64 + unsafe { + sys::time_now(BufferMut::new(&mut bytes)); } + + u64::from_le_bytes(bytes) } diff --git a/crates/sdk/src/sys.rs b/crates/sdk/src/sys.rs index abd94734b..fe7d07946 100644 --- a/crates/sdk/src/sys.rs +++ b/crates/sdk/src/sys.rs @@ -31,8 +31,9 @@ wasm_imports! { body: Buffer<'_>, register_id: RegisterId ) -> Bool; - fn generate_uuid(register_id: RegisterId); - fn time_now(register_id: RegisterId); + // -- + fn random_bytes(buf: BufferMut<'_>); + fn time_now(buf: BufferMut<'_>); } } diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index d12f20fb4..cefcca6aa 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -13,7 +13,6 @@ use core::fmt::{self, Debug, Display, Formatter}; use std::io::{Error as IoError, ErrorKind as IoErrorKind, Read, Write}; use borsh::{BorshDeserialize, BorshSerialize}; -use calimero_sdk::env::generate_uuid; use fixedstr::Flexstr; use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; @@ -49,7 +48,7 @@ impl Id { /// #[must_use] pub fn new() -> Self { - Self(generate_uuid()) + unimplemented!() } /// Returns a slice of 16 octets containing the value. From ad9e36089cb4585eb1f28c3ac088bed539d3cfc2 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Fri, 18 Oct 2024 10:42:41 +0300 Subject: [PATCH 15/75] chore: relocated storage mocks (#812) - Defined functional mocks in the storage crate as opposed to the SDK. This is one approach to resolving it which conditionally includes calimero_sdk, using it when we're targeting wasm, and mocking it out when we aren't. --- Cargo.lock | 3 +- crates/sdk/Cargo.toml | 1 - crates/sdk/src/env.rs | 29 ----- crates/sdk/src/lib.rs | 9 -- crates/sdk/src/tests/mocks.rs | 24 ----- crates/storage/Cargo.toml | 8 +- crates/storage/src/address.rs | 6 +- crates/storage/src/entities.rs | 2 +- crates/storage/src/env.rs | 148 ++++++++++++++++++++++++++ crates/storage/src/index.rs | 14 ++- crates/storage/src/interface.rs | 74 ++----------- crates/storage/src/lib.rs | 8 +- crates/storage/src/store.rs | 135 +++++++++++++++++++++++ crates/storage/src/tests/entities.rs | 3 +- crates/storage/src/tests/index.rs | 2 +- crates/storage/src/tests/interface.rs | 4 +- crates/storage/src/tests/mocks.rs | 37 ------- 17 files changed, 317 insertions(+), 190 deletions(-) delete mode 100644 crates/sdk/src/tests/mocks.rs create mode 100644 crates/storage/src/env.rs create mode 100644 crates/storage/src/store.rs delete mode 100644 crates/storage/src/tests/mocks.rs diff --git a/Cargo.lock b/Cargo.lock index dd756a8d5..625f614e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1024,7 +1024,6 @@ dependencies = [ "borsh", "calimero-sdk-macros", "cfg-if 1.0.0", - "hex", "serde", "serde_json", "trybuild", @@ -1129,6 +1128,7 @@ dependencies = [ "fixedstr", "hex", "indexmap 2.6.0", + "rand 0.8.5", "serde", "sha2", "thiserror", @@ -8303,7 +8303,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ - "getrandom", "serde", ] diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 870c75e83..024281bf8 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -9,7 +9,6 @@ license.workspace = true [dependencies] borsh = { workspace = true, features = ["derive"] } cfg-if.workspace = true -hex.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index d12c6ceea..702d5057f 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -3,8 +3,6 @@ use std::panic::set_hook; use borsh::{from_slice as from_borsh_slice, to_vec as to_borsh_vec}; use crate::event::AppEvent; -#[cfg(not(target_arch = "wasm32"))] -use crate::mocks::{mock_storage_read, mock_storage_remove, mock_storage_write}; use crate::state::AppState; use crate::sys; use crate::sys::{ @@ -165,7 +163,6 @@ pub fn emit(event: &T) { unsafe { sys::emit(Event::new(&kind, &data)) } } -#[cfg(target_arch = "wasm32")] #[inline] pub fn storage_read(key: &[u8]) -> Option> { unsafe { sys::storage_read(Buffer::from(key), DATA_REGISTER) } @@ -174,29 +171,12 @@ pub fn storage_read(key: &[u8]) -> Option> { .then(|| read_register(DATA_REGISTER).unwrap_or_else(expected_register)) } -#[cfg(not(target_arch = "wasm32"))] -#[expect(clippy::print_stdout, reason = "Only used in testing")] -#[must_use] -pub fn storage_read(key: &[u8]) -> Option> { - println!("storage_read: {:?}", hex::encode(key)); - mock_storage_read(key) -} - -#[cfg(target_arch = "wasm32")] #[inline] pub fn storage_remove(key: &[u8]) -> bool { unsafe { sys::storage_remove(Buffer::from(key), DATA_REGISTER).try_into() } .unwrap_or_else(expected_boolean) } -#[cfg(not(target_arch = "wasm32"))] -#[expect(clippy::print_stdout, reason = "Only used in testing")] -#[must_use] -pub fn storage_remove(key: &[u8]) -> bool { - println!("storage_remove: {:?}", hex::encode(key)); - mock_storage_remove(key) -} - #[must_use] pub fn state_read() -> Option { let data = storage_read(STATE_KEY)?; @@ -206,21 +186,12 @@ pub fn state_read() -> Option { } } -#[cfg(target_arch = "wasm32")] #[inline] pub fn storage_write(key: &[u8], value: &[u8]) -> bool { unsafe { sys::storage_write(Buffer::from(key), Buffer::from(value), DATA_REGISTER).try_into() } .unwrap_or_else(expected_boolean) } -#[cfg(not(target_arch = "wasm32"))] -#[expect(clippy::print_stdout, reason = "Only used in testing")] -#[must_use] -pub fn storage_write(key: &[u8], value: &[u8]) -> bool { - println!("storage_write: {:?}", hex::encode(key)); - mock_storage_write(key, value) -} - pub fn state_write(state: &T) { let data = match to_borsh_vec(state) { Ok(data) => data, diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index f07d9fe04..df3133294 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -10,20 +10,11 @@ pub mod app { pub use calimero_sdk_macros::{destroy, emit, event, init, logic, state}; } -#[cfg(not(target_arch = "wasm32"))] -#[path = "tests/mocks.rs"] -mod mocks; - #[doc(hidden)] pub mod __private { pub use crate::returns::{IntoResult, WrappedReturn}; } -#[doc(hidden)] -mod wasm_mocks_package_usage { - use hex as _; -} - #[cfg(test)] mod integration_tests_package_usage { use trybuild as _; diff --git a/crates/sdk/src/tests/mocks.rs b/crates/sdk/src/tests/mocks.rs deleted file mode 100644 index 9da4a23cf..000000000 --- a/crates/sdk/src/tests/mocks.rs +++ /dev/null @@ -1,24 +0,0 @@ -use core::cell::RefCell; -use std::collections::HashMap; -use std::thread_local; - -thread_local! { - static MOCK_STORAGE: RefCell, Vec>> = RefCell::new(HashMap::new()); -} - -pub fn mock_storage_read(key: &[u8]) -> Option> { - MOCK_STORAGE.with(|storage| storage.borrow().get(key).cloned()) -} - -pub fn mock_storage_remove(key: &[u8]) -> bool { - MOCK_STORAGE.with(|storage| storage.borrow_mut().remove(key).is_some()) -} - -pub fn mock_storage_write(key: &[u8], value: &[u8]) -> bool { - MOCK_STORAGE.with(|storage| { - storage - .borrow_mut() - .insert(key.to_vec(), value.to_vec()) - .is_some() - }) -} diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 519301f69..bb96a9248 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -7,26 +7,28 @@ repository.workspace = true license.workspace = true [dependencies] -borsh.workspace = true +borsh = { workspace = true, features = ["derive"] } eyre.workspace = true fixedstr.workspace = true hex.workspace = true indexmap.workspace = true -serde.workspace = true +serde = { workspace = true, features = ["derive"] } sha2.workspace = true thiserror.workspace = true uuid.workspace = true +[target.'cfg(target_arch = "wasm32")'.dependencies] calimero-sdk = { path = "../sdk" } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -uuid = { workspace = true, features = ["serde", "v4"] } +rand.workspace = true [dev-dependencies] claims.workspace = true hex.workspace = true velcro.workspace = true +calimero-sdk = { path = "../sdk" } calimero-storage-macros = { path = "../storage-macros" } [lints] diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index cefcca6aa..71e126697 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -18,6 +18,8 @@ use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; use uuid::{Bytes, Uuid}; +use crate::env::random_bytes; + /// Globally-unique identifier for an [`Element`](crate::entities::Element). /// /// This is unique across the entire context, across all devices and all time. @@ -48,7 +50,9 @@ impl Id { /// #[must_use] pub fn new() -> Self { - unimplemented!() + let mut bytes = [0; 16]; + random_bytes(&mut bytes); + Self(uuid::Builder::from_random_bytes(bytes).into_uuid()) } /// Returns a slice of 16 octets containing the value. diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index a5492f407..fcb54735c 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -216,10 +216,10 @@ use core::fmt::{self, Debug, Display, Formatter}; use std::collections::BTreeMap; use borsh::{BorshDeserialize, BorshSerialize}; -use calimero_sdk::env::time_now; use serde::{Deserialize, Serialize}; use crate::address::{Id, Path}; +use crate::env::time_now; use crate::interface::StorageError; /// Represents an atomic unit in the storage system. diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs new file mode 100644 index 000000000..6cdba612d --- /dev/null +++ b/crates/storage/src/env.rs @@ -0,0 +1,148 @@ +//! Environment bindings for the storage crate. + +use crate::store::Key; + +#[cfg(target_arch = "wasm32")] +use calimero_vm as imp; + +#[cfg(not(target_arch = "wasm32"))] +use mocked as imp; + +/// Reads data from persistent storage. +/// +/// # Parameters +/// +/// * `key` - The key to read data from. +/// +#[must_use] +pub fn storage_read(key: Key) -> Option> { + imp::storage_read(key) +} + +/// Removes data from persistent storage. +/// +/// # Parameters +/// +/// * `key` - The key to remove. +/// +#[must_use] +pub fn storage_remove(key: Key) -> bool { + imp::storage_remove(key) +} + +/// Writes data to persistent storage. +/// +/// # Parameters +/// +/// * `key` - The key to write data to. +/// * `value` - The data to write. +/// +#[must_use] +pub fn storage_write(key: Key, value: &[u8]) -> bool { + imp::storage_write(key, value) +} + +/// Fill the buffer with random bytes. +/// +/// # Parameters +/// +/// * `buf` - The buffer to fill with random bytes. +/// +pub fn random_bytes(buf: &mut [u8]) { + imp::random_bytes(buf); +} + +/// Get the current time. +/// +#[must_use] +pub fn time_now() -> u64 { + imp::time_now() +} + +#[cfg(target_arch = "wasm32")] +mod calimero_vm { + use calimero_sdk::env; + + use crate::store::Key; + + /// Reads data from persistent storage. + /// + pub(super) fn storage_read(key: Key) -> Option> { + env::storage_read(&key.to_bytes()) + } + + /// Removes data from persistent storage. + /// + pub(super) fn storage_remove(key: Key) -> bool { + env::storage_remove(&key.to_bytes()) + } + + /// Writes data to persistent storage. + /// + pub(super) fn storage_write(key: Key, value: &[u8]) -> bool { + env::storage_write(&key.to_bytes(), value) + } + + /// Fills the buffer with random bytes. + pub(super) fn random_bytes(buf: &mut [u8]) { + env::random_bytes(buf) + } + + /// Gets the current time. + /// + /// This function obtains the current time as a nanosecond timestamp. + /// + pub(super) fn time_now() -> u64 { + env::time_now() + } +} + +#[cfg(not(target_arch = "wasm32"))] +mod mocked { + use std::time::{SystemTime, UNIX_EPOCH}; + + use rand::RngCore; + + use crate::store::{Key, MockedStorage, StorageAdaptor}; + + type DefaultStore = MockedStorage<{ usize::MAX }>; + + /// Reads data from persistent storage. + /// + pub(super) fn storage_read(key: Key) -> Option> { + DefaultStore::storage_read(key) + } + + /// Removes data from persistent storage. + /// + pub(super) fn storage_remove(key: Key) -> bool { + DefaultStore::storage_remove(key) + } + + /// Writes data to persistent storage. + /// + pub(super) fn storage_write(key: Key, value: &[u8]) -> bool { + DefaultStore::storage_write(key, value) + } + + /// Fills the buffer with random bytes. + pub(super) fn random_bytes(buf: &mut [u8]) { + rand::thread_rng().fill_bytes(buf); + } + + /// Gets the current time. + /// + /// This function obtains the current time as a nanosecond timestamp. + /// + #[expect( + clippy::cast_possible_truncation, + reason = "Impossible to overflow in normal circumstances" + )] + #[expect(clippy::expect_used, reason = "Effectively infallible here")] + pub(super) fn time_now() -> u64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards to before the Unix epoch!") + .as_nanos() as u64 + } +} diff --git a/crates/storage/src/index.rs b/crates/storage/src/index.rs index 2f30a41b6..b75b34b9f 100644 --- a/crates/storage/src/index.rs +++ b/crates/storage/src/index.rs @@ -4,15 +4,16 @@ #[path = "tests/index.rs"] mod tests; -use core::marker::PhantomData; use std::collections::BTreeMap; +use std::marker::PhantomData; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use sha2::{Digest, Sha256}; use crate::address::Id; use crate::entities::ChildInfo; -use crate::interface::{StorageAdaptor, StorageError}; +use crate::interface::StorageError; +use crate::store::{Key, StorageAdaptor}; /// Stored index information for an entity in the storage system. #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] @@ -317,8 +318,7 @@ impl Index { /// an error will be returned. /// fn get_index(id: Id) -> Result, StorageError> { - let key = format!("index:{id}"); - match S::storage_read(key.as_bytes()) { + match S::storage_read(Key::Index(id)) { Some(data) => Ok(Some( EntityIndex::try_from_slice(&data).map_err(StorageError::DeserializationError)?, )), @@ -471,8 +471,7 @@ impl Index { /// * `index` - The [`EntityIndex`] to be saved. /// fn remove_index(id: Id) { - let key = format!("index:{id}"); - _ = S::storage_remove(key.as_bytes()); + _ = S::storage_remove(Key::Index(id)); } /// Saves the index information for an entity. @@ -486,9 +485,8 @@ impl Index { /// If there's an issue with serialisation, an error will be returned. /// fn save_index(index: &EntityIndex) -> Result<(), StorageError> { - let key = format!("index:{}", index.id); _ = S::storage_write( - key.as_bytes(), + Key::Index(index.id), &to_vec(index).map_err(StorageError::SerializationError)?, ); Ok(()) diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 54b848432..332f8cd47 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -214,12 +214,11 @@ mod tests; use core::fmt::Debug; -use core::marker::PhantomData; use std::collections::BTreeMap; use std::io::Error as IoError; +use std::marker::PhantomData; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; -use calimero_sdk::env::{storage_read, storage_remove, storage_write}; use eyre::Report; use indexmap::IndexMap; use serde::{Deserialize, Serialize}; @@ -228,6 +227,7 @@ use thiserror::Error as ThisError; use crate::address::{Id, Path}; use crate::entities::{ChildInfo, Collection, Data}; use crate::index::Index; +use crate::store::{Key, MainStorage, StorageAdaptor}; /// Convenient type alias for the main storage system. pub type Interface = MainInterface; @@ -443,7 +443,7 @@ impl MainInterface { return Err(StorageError::ActionNotAllowed("Compare".to_owned())) } Action::Delete { id, ancestors, .. } => { - _ = S::storage_remove(id.as_bytes()); + _ = S::storage_remove(Key::Entry(id)); ancestors } }; @@ -712,7 +712,7 @@ impl MainInterface { /// will be returned. /// pub fn find_by_id(id: Id) -> Result, StorageError> { - let value = S::storage_read(id.as_bytes()); + let value = S::storage_read(Key::Entry(id)); match value { Some(slice) => { @@ -749,7 +749,7 @@ impl MainInterface { /// will be returned. /// pub fn find_by_id_raw(id: Id) -> Result>, StorageError> { - Ok(S::storage_read(id.as_bytes())) + Ok(S::storage_read(Key::Entry(id))) } /// Finds one or more [`Element`](crate::entities::Element)s by path in the @@ -906,7 +906,7 @@ impl MainInterface { child_id: Id, ) -> Result { >::remove_child_from(parent_id, collection.name(), child_id)?; - Ok(S::storage_remove(child_id.as_bytes())) + Ok(S::storage_remove(Key::Entry(child_id))) } /// Retrieves the root entity for a given context. @@ -1008,7 +1008,7 @@ impl MainInterface { entity.element_mut().merkle_hash = >::update_hash_for(id, own_hash)?; _ = S::storage_write( - id.as_bytes(), + Key::Entry(id), &to_vec(entity).map_err(StorageError::SerializationError)?, ); @@ -1033,66 +1033,6 @@ impl MainInterface { } } -/// The main storage system. -/// -/// This is the default storage system, and is used for the main storage -/// operations in the system. It uses the environment's storage system to -/// perform the actual storage operations. -/// -/// It is the only one intended for use in production, with other options being -/// implemented internally for testing purposes. -/// -#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] -#[non_exhaustive] -pub struct MainStorage; - -impl StorageAdaptor for MainStorage { - fn storage_read(key: &[u8]) -> Option> { - storage_read(key) - } - - fn storage_remove(key: &[u8]) -> bool { - storage_remove(key) - } - - fn storage_write(key: &[u8], value: &[u8]) -> bool { - storage_write(key, value) - } -} - -/// Determines where the ultimate storage system is located. -/// -/// This trait is mainly used to allow for a different storage location to be -/// used for key operations during testing, such as modelling a foreign node's -/// data store. -/// -pub(crate) trait StorageAdaptor { - /// Reads data from persistent storage. - /// - /// # Parameters - /// - /// * `key` - The key to read data from. - /// - fn storage_read(key: &[u8]) -> Option>; - - /// Removes data from persistent storage. - /// - /// # Parameters - /// - /// * `key` - The key to remove. - /// - fn storage_remove(key: &[u8]) -> bool; - - /// Writes data to persistent storage. - /// - /// # Parameters - /// - /// * `key` - The key to write data to. - /// * `value` - The data to write. - /// - fn storage_write(key: &[u8], value: &[u8]) -> bool; -} - /// Errors that can occur when working with the storage system. #[derive(Debug, ThisError)] #[non_exhaustive] diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 2f5417382..6463355e2 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -63,18 +63,16 @@ pub mod address; pub mod entities; +pub mod env; pub mod index; pub mod interface; +pub mod store; /// Re-exported types, mostly for use in macros (for convenience). pub mod exports { pub use sha2::{Digest, Sha256}; } -#[cfg(test)] -#[path = "tests/mocks.rs"] -mod mocks; - /// Shared test functionality. #[cfg(test)] pub mod tests { @@ -83,5 +81,5 @@ pub mod tests { #[cfg(test)] mod doc_tests_package_usage { - use calimero_storage_macros as _; + use {calimero_sdk as _, calimero_storage_macros as _}; } diff --git a/crates/storage/src/store.rs b/crates/storage/src/store.rs new file mode 100644 index 000000000..e4064d715 --- /dev/null +++ b/crates/storage/src/store.rs @@ -0,0 +1,135 @@ +//! Storage operations. + +use crate::{ + address::Id, + env::{storage_read, storage_remove, storage_write}, +}; + +/// A key for storage operations. +/// +#[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub enum Key { + /// An index key. + /// + Index(Id), + /// An entry key. + /// + Entry(Id), +} + +impl Key { + /// Converts the key to a byte array. + /// + pub fn to_bytes(&self) -> [u8; 17] { + let mut bytes = [0; 17]; + match self { + Key::Index(id) => { + bytes[0] = 0; + bytes[1..17].copy_from_slice(id.as_bytes()); + } + Key::Entry(id) => { + bytes[0] = 1; + bytes[1..17].copy_from_slice(id.as_bytes()); + } + } + bytes + } +} + +/// Determines where the ultimate storage system is located. +/// +/// This trait is mainly used to allow for a different storage location to be +/// used for key operations during testing, such as modelling a foreign node's +/// data store. +/// +pub(crate) trait StorageAdaptor { + /// Reads data from persistent storage. + /// + /// # Parameters + /// + /// * `key` - The key to read data from. + /// + fn storage_read(key: Key) -> Option>; + + /// Removes data from persistent storage. + /// + /// # Parameters + /// + /// * `key` - The key to remove. + /// + fn storage_remove(key: Key) -> bool; + + /// Writes data to persistent storage. + /// + /// # Parameters + /// + /// * `key` - The key to write data to. + /// * `value` - The data to write. + /// + fn storage_write(key: Key, value: &[u8]) -> bool; +} + +/// The main storage system. +/// +/// This is the default storage system, and is used for the main storage +/// operations in the system. It uses the environment's storage system to +/// perform the actual storage operations. +/// +/// It is the only one intended for use in production, with other options being +/// implemented internally for testing purposes. +/// +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +#[non_exhaustive] +pub struct MainStorage; + +impl StorageAdaptor for MainStorage { + fn storage_read(key: Key) -> Option> { + storage_read(key) + } + + fn storage_remove(key: Key) -> bool { + storage_remove(key) + } + + fn storage_write(key: Key, value: &[u8]) -> bool { + storage_write(key, value) + } +} + +#[cfg(any(test, not(target_arch = "wasm32")))] +pub(crate) use mocked::MockedStorage; + +#[cfg(any(test, not(target_arch = "wasm32")))] +mod mocked { + use core::cell::RefCell; + use std::collections::BTreeMap; + + use super::{Key, StorageAdaptor}; + + type Scope = usize; + + thread_local! { + static STORAGE: RefCell>> = RefCell::new(BTreeMap::new()); + } + + pub(crate) struct MockedStorage; + + impl StorageAdaptor for MockedStorage { + fn storage_read(key: Key) -> Option> { + STORAGE.with(|storage| storage.borrow().get(&(SCOPE, key)).cloned()) + } + + fn storage_remove(key: Key) -> bool { + STORAGE.with(|storage| storage.borrow_mut().remove(&(SCOPE, key)).is_some()) + } + + fn storage_write(key: Key, value: &[u8]) -> bool { + STORAGE.with(|storage| { + storage + .borrow_mut() + .insert((SCOPE, key), value.to_vec()) + .is_some() + }) + } + } +} diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index dedb3ead8..3810bcb7e 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -7,7 +7,8 @@ use velcro::btree_map; use super::*; use crate::index::Index; -use crate::interface::{Interface, MainStorage}; +use crate::interface::Interface; +use crate::store::MainStorage; use crate::tests::common::{Page, Paragraph, Paragraphs, Person}; #[cfg(test)] diff --git a/crates/storage/src/tests/index.rs b/crates/storage/src/tests/index.rs index 7d84383eb..4b2f40336 100644 --- a/crates/storage/src/tests/index.rs +++ b/crates/storage/src/tests/index.rs @@ -1,5 +1,5 @@ use super::*; -use crate::interface::MainStorage; +use crate::store::MainStorage; use crate::tests::common::TEST_ID; mod index__public_methods { diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 11ca92f47..1f16e2a86 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -5,7 +5,7 @@ use claims::{assert_none, assert_ok}; use super::*; use crate::entities::{Data, Element}; -use crate::mocks::ForeignInterface; +use crate::store::MockedStorage; use crate::tests::common::{Page, Paragraph}; #[cfg(test)] @@ -270,6 +270,8 @@ mod interface__apply_actions { mod interface__comparison { use super::*; + type ForeignInterface = MainInterface>; + #[test] fn compare_trees__identical() { let element = Element::new(&Path::new("::root::node").unwrap()); diff --git a/crates/storage/src/tests/mocks.rs b/crates/storage/src/tests/mocks.rs deleted file mode 100644 index dec45cc4a..000000000 --- a/crates/storage/src/tests/mocks.rs +++ /dev/null @@ -1,37 +0,0 @@ -use std::cell::RefCell; -use std::collections::HashMap; - -use crate::index::Index; -use crate::interface::{MainInterface, StorageAdaptor}; - -thread_local! { - static FOREIGN_STORAGE: RefCell, Vec>> = RefCell::new(HashMap::new()); -} - -pub(crate) type ForeignInterface = MainInterface; - -#[expect(dead_code, reason = "Here to be used by tests")] -pub(crate) type ForeignIndex = Index; - -#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] -#[non_exhaustive] -pub(crate) struct ForeignStorage; - -impl StorageAdaptor for ForeignStorage { - fn storage_read(key: &[u8]) -> Option> { - FOREIGN_STORAGE.with(|storage| storage.borrow().get(key).cloned()) - } - - fn storage_remove(key: &[u8]) -> bool { - FOREIGN_STORAGE.with(|storage| storage.borrow_mut().remove(key).is_some()) - } - - fn storage_write(key: &[u8], value: &[u8]) -> bool { - FOREIGN_STORAGE.with(|storage| { - storage - .borrow_mut() - .insert(key.to_vec(), value.to_vec()) - .is_some() - }) - } -} From 1bfd479828e054ab851a5fa78a47504689760cd9 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 18 Oct 2024 12:07:08 +0100 Subject: [PATCH 16/75] fix: Fixed up approaches, docs, and linting (#802) --- crates/storage/src/env.rs | 13 +++---------- crates/storage/src/index.rs | 2 +- crates/storage/src/interface.rs | 2 +- crates/storage/src/store.rs | 30 ++++++++++++++++-------------- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index 6cdba612d..34134173c 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -1,13 +1,12 @@ //! Environment bindings for the storage crate. -use crate::store::Key; - #[cfg(target_arch = "wasm32")] use calimero_vm as imp; - #[cfg(not(target_arch = "wasm32"))] use mocked as imp; +use crate::store::Key; + /// Reads data from persistent storage. /// /// # Parameters @@ -53,7 +52,6 @@ pub fn random_bytes(buf: &mut [u8]) { } /// Get the current time. -/// #[must_use] pub fn time_now() -> u64 { imp::time_now() @@ -66,19 +64,16 @@ mod calimero_vm { use crate::store::Key; /// Reads data from persistent storage. - /// pub(super) fn storage_read(key: Key) -> Option> { env::storage_read(&key.to_bytes()) } /// Removes data from persistent storage. - /// pub(super) fn storage_remove(key: Key) -> bool { env::storage_remove(&key.to_bytes()) } /// Writes data to persistent storage. - /// pub(super) fn storage_write(key: Key, value: &[u8]) -> bool { env::storage_write(&key.to_bytes(), value) } @@ -105,22 +100,20 @@ mod mocked { use crate::store::{Key, MockedStorage, StorageAdaptor}; + /// The default storage system. type DefaultStore = MockedStorage<{ usize::MAX }>; /// Reads data from persistent storage. - /// pub(super) fn storage_read(key: Key) -> Option> { DefaultStore::storage_read(key) } /// Removes data from persistent storage. - /// pub(super) fn storage_remove(key: Key) -> bool { DefaultStore::storage_remove(key) } /// Writes data to persistent storage. - /// pub(super) fn storage_write(key: Key, value: &[u8]) -> bool { DefaultStore::storage_write(key, value) } diff --git a/crates/storage/src/index.rs b/crates/storage/src/index.rs index b75b34b9f..ed8e431db 100644 --- a/crates/storage/src/index.rs +++ b/crates/storage/src/index.rs @@ -4,8 +4,8 @@ #[path = "tests/index.rs"] mod tests; +use core::marker::PhantomData; use std::collections::BTreeMap; -use std::marker::PhantomData; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use sha2::{Digest, Sha256}; diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 332f8cd47..89e67901e 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -214,9 +214,9 @@ mod tests; use core::fmt::Debug; +use core::marker::PhantomData; use std::collections::BTreeMap; use std::io::Error as IoError; -use std::marker::PhantomData; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use eyre::Report; diff --git a/crates/storage/src/store.rs b/crates/storage/src/store.rs index e4064d715..a7c356efd 100644 --- a/crates/storage/src/store.rs +++ b/crates/storage/src/store.rs @@ -1,33 +1,30 @@ //! Storage operations. -use crate::{ - address::Id, - env::{storage_read, storage_remove, storage_write}, -}; +use crate::address::Id; +use crate::env::{storage_read, storage_remove, storage_write}; /// A key for storage operations. -/// -#[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +#[non_exhaustive] pub enum Key { /// An index key. - /// Index(Id), + /// An entry key. - /// Entry(Id), } impl Key { /// Converts the key to a byte array. - /// + #[must_use] pub fn to_bytes(&self) -> [u8; 17] { let mut bytes = [0; 17]; - match self { - Key::Index(id) => { + match *self { + Self::Index(id) => { bytes[0] = 0; bytes[1..17].copy_from_slice(id.as_bytes()); } - Key::Entry(id) => { + Self::Entry(id) => { bytes[0] = 1; bytes[1..17].copy_from_slice(id.as_bytes()); } @@ -99,19 +96,24 @@ impl StorageAdaptor for MainStorage { #[cfg(any(test, not(target_arch = "wasm32")))] pub(crate) use mocked::MockedStorage; +/// The mocked storage system. #[cfg(any(test, not(target_arch = "wasm32")))] -mod mocked { +pub(crate) mod mocked { use core::cell::RefCell; use std::collections::BTreeMap; use super::{Key, StorageAdaptor}; + /// The scope of the storage system, which allows for multiple storage + /// systems to be used in parallel. type Scope = usize; thread_local! { - static STORAGE: RefCell>> = RefCell::new(BTreeMap::new()); + static STORAGE: RefCell>> = const { RefCell::new(BTreeMap::new()) }; } + /// The mocked storage system. + #[expect(clippy::redundant_pub_crate, reason = "Needed here")] pub(crate) struct MockedStorage; impl StorageAdaptor for MockedStorage { From b0299a7a3f31996b2f32cf1a178774bc53e13f0d Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 23 Oct 2024 09:34:08 +0100 Subject: [PATCH 17/75] feat: Interface remaining integrations (#782) --- Cargo.lock | 6 +- Cargo.toml | 50 +- apps/kv-store/Cargo.toml | 2 + apps/kv-store/src/lib.rs | 29 +- crates/context/src/lib.rs | 8 +- crates/merod/Cargo.toml | 1 - crates/merod/src/cli/run.rs | 27 +- crates/network/Cargo.toml | 1 - crates/network/src/config.rs | 4 - crates/node-primitives/src/lib.rs | 41 +- crates/node/Cargo.toml | 2 + crates/node/README.md | 70 --- crates/node/src/catchup.rs | 231 ++------ .../catchup/{transactions.rs => actions.rs} | 22 +- crates/node/src/interactive_cli.rs | 6 - crates/node/src/interactive_cli/call.rs | 39 +- crates/node/src/interactive_cli/context.rs | 7 +- crates/node/src/interactive_cli/gc.rs | 27 - crates/node/src/interactive_cli/pool.rs | 46 -- crates/node/src/lib.rs | 560 +++++++----------- crates/node/src/transaction_pool.rs | 59 -- crates/node/src/types.rs | 63 +- crates/primitives/src/context.rs | 10 +- crates/primitives/src/lib.rs | 1 - crates/primitives/src/transaction.rs | 34 -- crates/runtime/src/errors.rs | 2 +- crates/runtime/src/logic.rs | 19 + crates/runtime/src/logic/imports.rs | 2 + crates/runtime/src/store.rs | 1 - crates/sdk/macros/src/logic/method.rs | 12 +- crates/sdk/src/env.rs | 26 +- crates/sdk/src/sys.rs | 1 + crates/storage-macros/src/lib.rs | 8 +- crates/storage/Cargo.toml | 1 - crates/storage/src/address.rs | 9 +- crates/storage/src/entities.rs | 16 + crates/storage/src/env.rs | 27 + crates/storage/src/integration.rs | 32 + crates/storage/src/interface.rs | 81 ++- crates/storage/src/lib.rs | 1 + crates/store/src/types.rs | 2 +- crates/store/src/types/context.rs | 15 +- 42 files changed, 574 insertions(+), 1027 deletions(-) rename crates/node/src/catchup/{transactions.rs => actions.rs} (65%) delete mode 100644 crates/node/src/interactive_cli/gc.rs delete mode 100644 crates/node/src/interactive_cli/pool.rs delete mode 100644 crates/node/src/transaction_pool.rs delete mode 100644 crates/primitives/src/transaction.rs create mode 100644 crates/storage/src/integration.rs diff --git a/Cargo.lock b/Cargo.lock index 625f614e8..b88870baa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -914,7 +914,6 @@ name = "calimero-network" version = "0.1.0" dependencies = [ "bytes", - "calimero-node-primitives", "calimero-primitives", "eyre", "futures-util", @@ -935,6 +934,7 @@ dependencies = [ name = "calimero-node" version = "0.1.0" dependencies = [ + "borsh", "calimero-blobstore", "calimero-context", "calimero-network", @@ -942,6 +942,7 @@ dependencies = [ "calimero-primitives", "calimero-runtime", "calimero-server", + "calimero-storage", "calimero-store", "camino", "clap", @@ -3657,6 +3658,8 @@ name = "kv-store" version = "0.1.0" dependencies = [ "calimero-sdk", + "calimero-storage", + "calimero-storage-macros", ] [[package]] @@ -4496,7 +4499,6 @@ dependencies = [ "calimero-context-config", "calimero-network", "calimero-node", - "calimero-node-primitives", "calimero-server", "calimero-store", "camino", diff --git a/Cargo.toml b/Cargo.toml index ceeb58ca8..8214b3c2d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,33 +8,33 @@ license-file = "LICENSE.md" [workspace] resolver = "2" members = [ - "./crates/config", - "./crates/context", - "./crates/context/config", - "./crates/meroctl", - "./crates/merod", - "./crates/network", - "./crates/node", - "./crates/node-primitives", - "./crates/primitives", - "./crates/runtime", - "./crates/sdk", - "./crates/sdk/libs/near", - "./crates/sdk/macros", - "./crates/server", - "./crates/server-primitives", - "./crates/storage", - "./crates/storage-macros", - "./crates/store", - "./crates/store/blobs", - "./crates/test-utils", + "./crates/config", + "./crates/context", + "./crates/context/config", + "./crates/meroctl", + "./crates/merod", + "./crates/network", + "./crates/node", + "./crates/node-primitives", + "./crates/primitives", + "./crates/runtime", + "./crates/sdk", + "./crates/sdk/libs/near", + "./crates/sdk/macros", + "./crates/server", + "./crates/server-primitives", + "./crates/storage", + "./crates/storage-macros", + "./crates/store", + "./crates/store/blobs", + "./crates/test-utils", - "./apps/kv-store", - "./apps/only-peers", - "./apps/gen-ext", + "./apps/kv-store", + "./apps/only-peers", + "./apps/gen-ext", - "./contracts/context-config", - "./contracts/registry", + "./contracts/context-config", + "./contracts/registry", ] [workspace.dependencies] diff --git a/apps/kv-store/Cargo.toml b/apps/kv-store/Cargo.toml index 7ffe91112..377238438 100644 --- a/apps/kv-store/Cargo.toml +++ b/apps/kv-store/Cargo.toml @@ -11,3 +11,5 @@ crate-type = ["cdylib"] [dependencies] calimero-sdk = { path = "../../crates/sdk" } +calimero-storage = { path = "../../crates/storage" } +calimero-storage-macros = { path = "../../crates/storage-macros" } diff --git a/apps/kv-store/src/lib.rs b/apps/kv-store/src/lib.rs index f446ceadb..558492558 100644 --- a/apps/kv-store/src/lib.rs +++ b/apps/kv-store/src/lib.rs @@ -1,13 +1,29 @@ use std::collections::hash_map::{Entry as HashMapEntry, HashMap}; -use calimero_sdk::borsh::{BorshDeserialize, BorshSerialize}; use calimero_sdk::{app, env}; +use calimero_storage::entities::{Data, Element}; +use calimero_storage_macros::{AtomicUnit, Collection}; #[app::state(emits = for<'a> Event<'a>)] -#[derive(BorshDeserialize, BorshSerialize, Default)] -#[borsh(crate = "calimero_sdk::borsh")] +#[derive(AtomicUnit, Clone, Debug, PartialEq, PartialOrd)] +#[root] +#[type_id(1)] pub struct KvStore { - items: HashMap, + items: Vec, + #[storage] + storage: Element, +} + +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Value)] +pub struct Values; + +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(2)] +pub struct Value { + value: String, + #[storage] + storage: Element, } #[app::event] @@ -22,7 +38,10 @@ pub enum Event<'a> { impl KvStore { #[app::init] pub fn init() -> KvStore { - KvStore::default() + KvStore { + items: Vec::new(), + storage: Element::root(), + } } pub fn set(&mut self, key: String, value: String) { diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index ee5275fdf..4586760f7 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -238,7 +238,7 @@ impl ContextManager { &ContextMetaKey::new(context.id), &ContextMetaValue::new( ApplicationMetaKey::new(context.application_id), - context.last_transaction_hash.into(), + context.root_hash.into(), ), )?; @@ -424,7 +424,7 @@ impl ContextManager { Ok(Some(Context::new( *context_id, ctx_meta.application.application_id(), - ctx_meta.last_transaction_hash.into(), + ctx_meta.root_hash.into(), ))) } @@ -611,7 +611,7 @@ impl ContextManager { contexts.push(Context::new( key.context_id(), value.application.application_id(), - value.last_transaction_hash.into(), + value.root_hash.into(), )); } } @@ -621,7 +621,7 @@ impl ContextManager { contexts.push(Context::new( k.context_id(), v.application.application_id(), - v.last_transaction_hash.into(), + v.root_hash.into(), )); } diff --git a/crates/merod/Cargo.toml b/crates/merod/Cargo.toml index eb74323dd..4fbbb39a8 100644 --- a/crates/merod/Cargo.toml +++ b/crates/merod/Cargo.toml @@ -34,7 +34,6 @@ calimero-context = { path = "../context" } calimero-context-config = { path = "../context/config", features = ["client"] } calimero-node = { path = "../node" } calimero-network = { path = "../network" } -calimero-node-primitives = { path = "../node-primitives" } calimero-server = { path = "../server", features = ["jsonrpc", "websocket", "admin"] } calimero-store = { path = "../store" } diff --git a/crates/merod/src/cli/run.rs b/crates/merod/src/cli/run.rs index 58898ca15..a023280ec 100644 --- a/crates/merod/src/cli/run.rs +++ b/crates/merod/src/cli/run.rs @@ -2,37 +2,16 @@ use calimero_blobstore::config::BlobStoreConfig; use calimero_config::ConfigFile; use calimero_network::config::NetworkConfig; use calimero_node::{start, NodeConfig}; -use calimero_node_primitives::NodeType as PrimitiveNodeType; use calimero_server::config::ServerConfig; use calimero_store::config::StoreConfig; -use clap::{Parser, ValueEnum}; +use clap::Parser; use eyre::{bail, Result as EyreResult}; use crate::cli::RootArgs; /// Run a node #[derive(Debug, Parser)] -pub struct RunCommand { - #[clap(long, value_name = "TYPE")] - #[clap(value_enum, default_value_t)] - pub node_type: NodeType, -} - -#[derive(Clone, Copy, Debug, Default, ValueEnum)] -pub enum NodeType { - #[default] - Peer, - Coordinator, -} - -impl From for PrimitiveNodeType { - fn from(value: NodeType) -> Self { - match value { - NodeType::Peer => Self::Peer, - NodeType::Coordinator => Self::Coordinator, - } - } -} +pub struct RunCommand; impl RunCommand { pub async fn run(self, root_args: RootArgs) -> EyreResult<()> { @@ -47,10 +26,8 @@ impl RunCommand { start(NodeConfig::new( path.clone(), config.identity.clone(), - self.node_type.into(), NetworkConfig::new( config.identity.clone(), - self.node_type.into(), config.network.swarm, config.network.bootstrap, config.network.discovery, diff --git a/crates/network/Cargo.toml b/crates/network/Cargo.toml index 7c325b976..64c5ccccc 100644 --- a/crates/network/Cargo.toml +++ b/crates/network/Cargo.toml @@ -37,7 +37,6 @@ tokio = { workspace = true, features = ["io-util", "macros"] } tokio-util = { workspace = true, features = ["codec", "compat"] } tracing.workspace = true -calimero-node-primitives = { path = "../node-primitives" } calimero-primitives = { path = "../primitives" } [dev-dependencies] diff --git a/crates/network/src/config.rs b/crates/network/src/config.rs index 4e99038e2..41c4ab59f 100644 --- a/crates/network/src/config.rs +++ b/crates/network/src/config.rs @@ -1,7 +1,6 @@ use core::fmt::{self, Formatter}; use core::time::Duration; -use calimero_node_primitives::NodeType; use libp2p::identity::Keypair; use libp2p::rendezvous::Namespace; use multiaddr::{Multiaddr, Protocol}; @@ -29,7 +28,6 @@ pub const CALIMERO_DEV_BOOT_NODES: &[&str] = &[ #[non_exhaustive] pub struct NetworkConfig { pub identity: Keypair, - pub node_type: NodeType, pub swarm: SwarmConfig, pub bootstrap: BootstrapConfig, @@ -41,7 +39,6 @@ impl NetworkConfig { #[must_use] pub const fn new( identity: Keypair, - node_type: NodeType, swarm: SwarmConfig, bootstrap: BootstrapConfig, discovery: DiscoveryConfig, @@ -49,7 +46,6 @@ impl NetworkConfig { ) -> Self { Self { identity, - node_type, swarm, bootstrap, discovery, diff --git a/crates/node-primitives/src/lib.rs b/crates/node-primitives/src/lib.rs index ca31bd0ef..fb56d074f 100644 --- a/crates/node-primitives/src/lib.rs +++ b/crates/node-primitives/src/lib.rs @@ -6,23 +6,6 @@ use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; use tokio::sync::{mpsc, oneshot}; -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub enum NodeType { - Peer, - Coordinator, -} - -impl NodeType { - #[must_use] - pub const fn is_coordinator(&self) -> bool { - match *self { - Self::Coordinator => true, - Self::Peer => false, - } - } -} - #[derive(Debug)] #[non_exhaustive] pub struct ExecutionRequest { @@ -72,29 +55,9 @@ pub type ServerSender = mpsc::Sender; #[serde(tag = "type", content = "data")] #[non_exhaustive] pub enum CallError { - Query(QueryCallError), - Mutate(MutateCallError), - ContextNotFound { context_id: ContextId }, -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize, ThisError)] -#[error("QueryCallError")] -#[serde(tag = "type", content = "data")] -#[non_exhaustive] -pub enum QueryCallError { - ApplicationNotInstalled { application_id: ApplicationId }, - InternalError, -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize, ThisError)] -#[error("MutateCallError")] -#[serde(tag = "type", content = "data")] -#[expect(variant_size_differences, reason = "This doesn't matter here")] -#[non_exhaustive] -pub enum MutateCallError { - InvalidNodeType { node_type: NodeType }, ApplicationNotInstalled { application_id: ApplicationId }, NoConnectedPeers, - TransactionRejected, + ActionRejected, InternalError, + ContextNotFound { context_id: ContextId }, } diff --git a/crates/node/Cargo.toml b/crates/node/Cargo.toml index ae808418a..690a96e26 100644 --- a/crates/node/Cargo.toml +++ b/crates/node/Cargo.toml @@ -7,6 +7,7 @@ repository.workspace = true license.workspace = true [dependencies] +borsh.workspace = true camino = { workspace = true, features = ["serde1"] } clap.workspace = true eyre.workspace = true @@ -28,6 +29,7 @@ calimero-node-primitives = { path = "../node-primitives" } calimero-primitives = { path = "../primitives" } calimero-runtime = { path = "../runtime" } calimero-server = { path = "../server", features = ["jsonrpc", "websocket", "admin"] } +calimero-storage = { path = "../storage" } calimero-store = { path = "../store", features = ["datatypes"] } [lints] diff --git a/crates/node/README.md b/crates/node/README.md index 64076ab30..9e52df0ad 100644 --- a/crates/node/README.md +++ b/crates/node/README.md @@ -2,9 +2,7 @@ - [Introduction](#introduction) - [Core components](#core-components) - - [NodeType](#nodetype) - [Store](#store) - - [TransactionPool](#transactionpool) - [Core flows](#core-flows) - [Transaction handling](#transaction-handling) - [Coordinator joining ceremony](#coordinator-joining-ceremony) @@ -23,9 +21,7 @@ interactive CLI. ```mermaid classDiagram Node : +PeerId id - Node : +NodeType typ Node : +Store store - Node : +TransacitonPool tx_pool Node : +ContextManager ctx_manager Node : +NetworkClient network_client Node : +Sender[NodeEvents] node_events @@ -33,11 +29,6 @@ classDiagram Node: +handle_call() ``` -### NodeType - -`NodeType` is an enum that represents the type of the node. It can be either -`Coordinator` or `Peer`. - ### Store `Store` is a struct that is used to interact with the underlying storage. The @@ -58,69 +49,8 @@ Important structs in the store are: - `ContextMeta`: https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/store/src/types/context.rs#L16 -### TransactionPool - -`TransactionPool` is a struct that holds all the transactions that are not yet -executed. Transaction pool stores transactions in a `BTreeMap` with the key -being the hash of the transaction. `TransactionPoolEntry` is a struct that holds -the transaction, the sender of a transaction and the outcomen sender channel. - ## Core flows -### Transaction handling - -The following diagram illustrates the process of mutate request handling in the -Calimero Node. Components involved in the process are: - -- Client: The client that sends the request to the server. The only component - outside the node binary. -- Server: Represent `server` crate. -- Node: Represents `node` crate. -- Network: Represents `network` crate. NetworkClient is used to push commands to - the network, while NetworkEvent(s) are used to notify the node. -- Runtime: Represents `runtime` crate. The runtime is responsible for running a - method on a loaded WASM. - -Notable structs: - -- `MutateRequest` from the server primitives: - https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/server-primitives/src/jsonrpc.rs#L194 -- `ExecutionRequest` from the node primitives: - https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/node-primitives/src/lib.rs#L28 -- `Transaction` from the primitives: - https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/primitives/src/transaction.rs#L9 -- `TransactionConfirmation` from the node: - https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/node/src/types.rs#L18 -- `NetworkEvent` from the network: - https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/network/src/types.rs#L10 -- `Context` from the the primitives: - https://github.com/calimero-network/core/blob/37bd68d67ca9024c008bb4746809a10edd8d9750/crates/primitives/src/context.rs#L180 - -```mermaid -sequenceDiagram - Client->>+Server: Send via HTTP - MutateRequest - Server->>+Node: Send via mpsc channel - ExecutionRequest - Node->>Network: Publish via pubsub - Transaction - - Node->>Node: Store Transaction in TransactionPool - - Network->>Node: NetworkEvent(Message(TransactionConfirmation)) - Node->>Node: Remove Transaction from TransactionPool - Node->>+ContextManager: GetContext - ContextManager->>-Node: Context - Node->>+ContextManager: LoadApplicationBlob - ContextManager->>-Node: Vec - - Node->>+Runtime: Run(Blob, Method, VMContext, Storage) - Runtime->>-Node: Outcome - Node->>+Storage: CommitChanges - Storage->>-Node: Result - Node->>Node: Persist Transaction - - Node->>-Server: Result - Server->>-Client: Response(Result) -``` - ### Catchup The catchup process is initiated by the `ClientPeer` by opening a stream to the diff --git a/crates/node/src/catchup.rs b/crates/node/src/catchup.rs index f2683f164..cfe7723af 100644 --- a/crates/node/src/catchup.rs +++ b/crates/node/src/catchup.rs @@ -1,13 +1,8 @@ -use std::collections::VecDeque; use std::io::{Error as StdIoError, ErrorKind as StdIoErrorKind}; use calimero_network::stream::{Message, Stream}; -use calimero_node_primitives::NodeType; use calimero_primitives::application::Application; use calimero_primitives::context::{Context, ContextId}; -use calimero_primitives::hash::Hash; -use calimero_primitives::transaction::Transaction; -use calimero_store::key::ContextTransaction as ContextTransactionKey; use eyre::{bail, Result as EyreResult}; use futures_util::io::BufReader; use futures_util::stream::poll_fn; @@ -24,16 +19,14 @@ use tracing::{error, info, warn}; use url::Url; use crate::catchup::blobs::ApplicationBlobChunkSender; -use crate::catchup::transactions::TransactionsBatchSender; -use crate::transaction_pool::TransactionPoolEntry; use crate::types::{ - CatchupApplicationBlobChunk, CatchupApplicationBlobRequest, CatchupError, CatchupStreamMessage, - CatchupTransactionsBatch, CatchupTransactionsRequest, TransactionStatus, TransactionWithStatus, + ActionMessage, CatchupActionsBatch, CatchupApplicationBlobChunk, CatchupApplicationBlobRequest, + CatchupError, CatchupStreamMessage, CatchupSyncRequest, }; use crate::Node; +mod actions; mod blobs; -mod transactions; impl Node { pub(crate) async fn handle_opened_stream(&self, mut stream: Box) -> EyreResult<()> { @@ -42,13 +35,11 @@ impl Node { }; match from_json_slice(&message?.data)? { - CatchupStreamMessage::TransactionsRequest(req) => { - self.handle_transaction_catchup(req, stream).await - } + CatchupStreamMessage::SyncRequest(req) => self.handle_action_catchup(req, stream).await, CatchupStreamMessage::ApplicationBlobRequest(req) => { self.handle_blob_catchup(req, stream).await } - message @ (CatchupStreamMessage::TransactionsBatch(_) + message @ (CatchupStreamMessage::ActionsBatch(_) | CatchupStreamMessage::ApplicationBlobChunk(_) | CatchupStreamMessage::Error(_)) => { bail!("Unexpected message: {:?}", message) @@ -90,9 +81,9 @@ impl Node { } #[expect(clippy::too_many_lines, reason = "TODO: Will be refactored")] - async fn handle_transaction_catchup( + async fn handle_action_catchup( &self, - request: CatchupTransactionsRequest, + request: CatchupSyncRequest, mut stream: Box, ) -> EyreResult<()> { let Some(context) = self.ctx_manager.get_context(&request.context_id)? else { @@ -108,111 +99,17 @@ impl Node { info!( request=?request, - last_transaction_hash=%context.last_transaction_hash, - "Processing transaction catchup request", + root_hash=%context.root_hash, + "Processing context catchup request", ); - let handle = self.store.handle(); - - if request.last_executed_transaction_hash != Hash::default() - && !handle.has(&ContextTransactionKey::new( - request.context_id, - request.last_executed_transaction_hash.into(), - ))? - { - let message = to_json_vec(&CatchupStreamMessage::Error( - CatchupError::TransactionNotFound { - transaction_hash: request.last_executed_transaction_hash, - }, - ))?; - stream.send(Message::new(message)).await?; - - return Ok(()); - }; - - if context.last_transaction_hash == request.last_executed_transaction_hash - && self.tx_pool.is_empty() - { - return Ok(()); - } - - let mut hashes = VecDeque::new(); - - let mut last_transaction_hash = context.last_transaction_hash; - - while last_transaction_hash != Hash::default() - && last_transaction_hash != request.last_executed_transaction_hash - { - let key = ContextTransactionKey::new(request.context_id, last_transaction_hash.into()); - - let Some(transaction) = handle.get(&key)? else { - error!( - context_id=%request.context_id, - %last_transaction_hash, - "Context transaction not found, our transaction chain might be corrupted" - ); - - let message = - to_json_vec(&CatchupStreamMessage::Error(CatchupError::InternalError))?; - stream.send(Message::new(message)).await?; - - return Ok(()); - }; - - hashes.push_front(last_transaction_hash); - - last_transaction_hash = transaction.prior_hash.into(); - } + let _handle = self.store.handle(); - let mut batch_writer = TransactionsBatchSender::new(request.batch_size, stream); - - for hash in hashes { - let key = ContextTransactionKey::new(request.context_id, hash.into()); - let Some(transaction) = handle.get(&key)? else { - error!( - context_id=%request.context_id, - ?hash, - "Context transaction not found after the initial check. This is most likely a BUG!" - ); - batch_writer - .flush_with_error(CatchupError::InternalError) - .await?; - return Ok(()); - }; - - batch_writer - .send(TransactionWithStatus { - transaction_hash: hash, - transaction: Transaction::new( - request.context_id, - transaction.method.into(), - transaction.payload.into(), - Hash::from(transaction.prior_hash), - transaction.executor_public_key.into(), - ), - status: TransactionStatus::Executed, - }) - .await?; + // TODO: If the root hashes don't match, we need to start a comparison + if context.root_hash != request.root_hash { + bail!("Root hash mismatch: TODO"); } - for (hash, TransactionPoolEntry { transaction, .. }) in self.tx_pool.iter() { - batch_writer - .send(TransactionWithStatus { - transaction_hash: *hash, - transaction: Transaction::new( - request.context_id, - transaction.method.clone(), - transaction.payload.clone(), - transaction.prior_hash, - transaction.executor_public_key, - ), - status: TransactionStatus::Pending, - }) - .await?; - } - - batch_writer.flush().await?; - Ok(()) } @@ -244,6 +141,11 @@ impl Node { info!(%context_id, %peer_id, "Interval triggered catchup successfully finished"); } + // TODO: Is this even needed now? Can it be removed? In theory, a sync will + // TODO: take place so long as there is a comparison - i.e. it will send + // TODO: everything back and forth until everything matches. But, for e.g. a + // TODO: first-time sync, that would be slower than just sending everything + // TODO: all at once. So... could this be utilised for that? pub(crate) async fn perform_catchup( &mut self, context_id: ContextId, @@ -265,8 +167,7 @@ impl Node { .await?; } - self.perform_transaction_catchup(chosen_peer, &mut context) - .await + self.perform_action_catchup(chosen_peer, &mut context).await } async fn perform_blob_catchup( @@ -354,8 +255,8 @@ impl Node { CatchupStreamMessage::ApplicationBlobChunk(chunk) => { tx.send(chunk).await?; } - message @ (CatchupStreamMessage::TransactionsBatch(_) - | CatchupStreamMessage::TransactionsRequest(_) + message @ (CatchupStreamMessage::ActionsBatch(_) + | CatchupStreamMessage::SyncRequest(_) | CatchupStreamMessage::ApplicationBlobRequest(_)) => { warn!("Ignoring unexpected message: {:?}", message); } @@ -377,20 +278,19 @@ impl Node { handle.await? } - async fn perform_transaction_catchup( + async fn perform_action_catchup( &mut self, chosen_peer: PeerId, context: &mut Context, ) -> EyreResult<()> { - let request = CatchupTransactionsRequest { + let request = CatchupSyncRequest { context_id: context.id, - last_executed_transaction_hash: context.last_transaction_hash, - batch_size: self.network_client.catchup_config.batch_size, + root_hash: context.root_hash, }; let mut stream = self.network_client.open_stream(chosen_peer).await?; - let data = to_json_vec(&CatchupStreamMessage::TransactionsRequest(request))?; + let data = to_json_vec(&CatchupStreamMessage::SyncRequest(request))?; stream.send(Message::new(data)).await?; @@ -403,96 +303,51 @@ impl Node { { Ok(message) => match message { Some(message) => match from_json_slice(&message?.data)? { - CatchupStreamMessage::TransactionsBatch(batch) => { - self.apply_transactions_batch(chosen_peer, context, batch) + CatchupStreamMessage::ActionsBatch(batch) => { + self.apply_actions_batch(chosen_peer, context, batch) .await?; } message @ (CatchupStreamMessage::ApplicationBlobChunk(_) - | CatchupStreamMessage::TransactionsRequest(_) + | CatchupStreamMessage::SyncRequest(_) | CatchupStreamMessage::ApplicationBlobRequest(_)) => { warn!("Ignoring unexpected message: {:?}", message); } CatchupStreamMessage::Error(err) => { - error!(?err, "Received error during transaction catchup"); + error!(?err, "Received error during action catchup"); bail!(err); } }, None => break, }, - Err(err) => bail!("Failed to await transactions catchup message: {}", err), + Err(err) => bail!("Failed to await actions catchup message: {}", err), } } Ok(()) } - async fn apply_transactions_batch( + async fn apply_actions_batch( &mut self, - chosen_peer: PeerId, + // TODO: How should this be used? + _chosen_peer: PeerId, context: &mut Context, - batch: CatchupTransactionsBatch, + batch: CatchupActionsBatch, ) -> EyreResult<()> { info!( context_id=%context.id, - transactions=%batch.transactions.len(), - "Processing catchup transactions batch" + actions=%batch.actions.len(), + "Processing catchup actions batch" ); - for TransactionWithStatus { - transaction_hash, - transaction, - status, - } in batch.transactions + for ActionMessage { + actions, + public_key, + .. + } in batch.actions { - if context.last_transaction_hash != transaction.prior_hash { - bail!( - "Transaction '{}' from the catchup batch doesn't build on last transaction '{}'", - transaction_hash, - context.last_transaction_hash, - ); - }; - - match status { - TransactionStatus::Pending => match self.typ { - NodeType::Peer => { - let _ = self.tx_pool.insert( - chosen_peer, - Transaction::new( - context.id, - transaction.method, - transaction.payload, - transaction.prior_hash, - transaction.executor_public_key, - ), - None, - )?; - } - NodeType::Coordinator => { - let _ = self - .validate_pending_transaction(context, transaction, transaction_hash) - .await?; - - drop(self.tx_pool.remove(&transaction_hash)); - } - _ => bail!("Unexpected node type"), - }, - TransactionStatus::Executed => match self.typ { - NodeType::Peer => { - drop( - self.execute_transaction(context, transaction, transaction_hash) - .await?, - ); - - drop(self.tx_pool.remove(&transaction_hash)); - } - NodeType::Coordinator => { - self.persist_transaction(context, transaction, transaction_hash)?; - } - _ => bail!("Unexpected node type"), - }, + for action in actions { + self.apply_action(context, &action, public_key).await?; } - - context.last_transaction_hash = transaction_hash; } Ok(()) diff --git a/crates/node/src/catchup/transactions.rs b/crates/node/src/catchup/actions.rs similarity index 65% rename from crates/node/src/catchup/transactions.rs rename to crates/node/src/catchup/actions.rs index 7bc91aaee..641a69ea8 100644 --- a/crates/node/src/catchup/transactions.rs +++ b/crates/node/src/catchup/actions.rs @@ -5,17 +5,15 @@ use eyre::Result as EyreResult; use futures_util::SinkExt; use serde_json::to_vec as to_json_vec; -use crate::types::{ - CatchupError, CatchupStreamMessage, CatchupTransactionsBatch, TransactionWithStatus, -}; +use crate::types::{ActionMessage, CatchupActionsBatch, CatchupError, CatchupStreamMessage}; -pub struct TransactionsBatchSender { +pub struct ActionsBatchSender { batch_size: u8, - batch: Vec, + batch: Vec, stream: Box, } -impl TransactionsBatchSender { +impl ActionsBatchSender { pub(crate) fn new(batch_size: u8, stream: Box) -> Self { Self { batch_size, @@ -24,12 +22,12 @@ impl TransactionsBatchSender { } } - pub(crate) async fn send(&mut self, tx_with_status: TransactionWithStatus) -> EyreResult<()> { - self.batch.push(tx_with_status); + pub(crate) async fn send(&mut self, action_message: ActionMessage) -> EyreResult<()> { + self.batch.push(action_message); if self.batch.len() == self.batch_size as usize { - let message = CatchupStreamMessage::TransactionsBatch(CatchupTransactionsBatch { - transactions: take(&mut self.batch), + let message = CatchupStreamMessage::ActionsBatch(CatchupActionsBatch { + actions: take(&mut self.batch), }); let message = to_json_vec(&message)?; @@ -44,8 +42,8 @@ impl TransactionsBatchSender { pub(crate) async fn flush(&mut self) -> EyreResult<()> { if !self.batch.is_empty() { - let message = CatchupStreamMessage::TransactionsBatch(CatchupTransactionsBatch { - transactions: take(&mut self.batch), + let message = CatchupStreamMessage::ActionsBatch(CatchupActionsBatch { + actions: take(&mut self.batch), }); let message = to_json_vec(&message)?; diff --git a/crates/node/src/interactive_cli.rs b/crates/node/src/interactive_cli.rs index 885db87c2..8e57ea2bf 100644 --- a/crates/node/src/interactive_cli.rs +++ b/crates/node/src/interactive_cli.rs @@ -7,10 +7,8 @@ mod applications; pub mod call; pub mod context; -pub mod gc; pub mod identity; pub mod peers; -pub mod pool; pub mod state; pub mod store; pub mod transactions; @@ -31,10 +29,8 @@ pub enum SubCommands { Application(applications::ApplicationCommand), Call(call::CallCommand), Context(context::ContextCommand), - Gc(gc::GarbageCollectCommand), Identity(identity::IdentityCommand), Peers(peers::PeersCommand), - Pool(pool::PoolCommand), Store(store::StoreCommand), State(state::StateCommand), Transactions(transactions::TransactionsCommand), @@ -57,10 +53,8 @@ pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { SubCommands::Application(application) => application.run(node).await, SubCommands::Call(call) => call.run(node).await, SubCommands::Context(context) => context.run(node).await, - SubCommands::Gc(gc) => gc.run(node).await, SubCommands::Identity(identity) => identity.run(node).await, SubCommands::Peers(peers) => peers.run(node.network_client.clone().into()).await, - SubCommands::Pool(pool) => pool.run(node).await, SubCommands::State(state) => state.run(node).await, SubCommands::Store(store) => store.run(node).await, SubCommands::Transactions(transactions) => transactions.run(node).await, diff --git a/crates/node/src/interactive_cli/call.rs b/crates/node/src/interactive_cli/call.rs index 6ff6b2664..9cf6ee8ac 100644 --- a/crates/node/src/interactive_cli/call.rs +++ b/crates/node/src/interactive_cli/call.rs @@ -1,7 +1,7 @@ +use calimero_node_primitives::ExecutionRequest; +use calimero_primitives::context::ContextId; use calimero_primitives::identity::PublicKey; -use calimero_primitives::transaction::Transaction; use clap::Parser; -use eyre::Result; use owo_colors::OwoColorize; use serde_json::Value; use tokio::sync::oneshot; @@ -10,48 +10,35 @@ use crate::Node; #[derive(Debug, Parser)] pub struct CallCommand { - context_id: String, + context_id: ContextId, method: String, payload: Value, executor_key: PublicKey, } impl CallCommand { - pub async fn run(self, node: &mut Node) -> Result<()> { + pub async fn run(self, node: &mut Node) -> eyre::Result<()> { let ind = ">>".blue(); let (outcome_sender, outcome_receiver) = oneshot::channel(); - let Ok(context_id) = self.context_id.parse() else { - println!("{} invalid context id: {}", ind, self.context_id); + let Ok(Some(context)) = node.ctx_manager.get_context(&self.context_id) else { + println!("{} context not found: {}", ind, self.context_id); return Ok(()); }; - let Ok(Some(context)) = node.ctx_manager.get_context(&context_id) else { - println!("{} context not found: {}", ind, context_id); - return Ok(()); - }; - - let tx = Transaction::new( + node.handle_call(ExecutionRequest::new( context.id, self.method.to_owned(), - serde_json::to_string(&self.payload)?.into_bytes(), - context.last_transaction_hash, + serde_json::to_vec(&self.payload)?, self.executor_key, - ); - - let tx_hash = match node.call_mutate(&context, tx, outcome_sender).await { - Ok(tx_hash) => tx_hash, - Err(e) => { - println!("{} failed to execute transaction: {:?}", ind, e); - return Ok(()); - } - }; - - println!("{} scheduled transaction! {:?}", ind, tx_hash); + outcome_sender, + None, + )) + .await; drop(tokio::spawn(async move { if let Ok(outcome_result) = outcome_receiver.await { - println!("{} {:?}", ind, tx_hash); + println!("{}", ind); match outcome_result { Ok(outcome) => { diff --git a/crates/node/src/interactive_cli/context.rs b/crates/node/src/interactive_cli/context.rs index c85e01903..b920fdf41 100644 --- a/crates/node/src/interactive_cli/context.rs +++ b/crates/node/src/interactive_cli/context.rs @@ -58,11 +58,8 @@ impl ContextCommand { for (k, v) in handle.iter::()?.entries() { let (k, v) = (k?, v?); - let (cx, app_id, last_tx) = ( - k.context_id(), - v.application.application_id(), - v.last_transaction_hash, - ); + let (cx, app_id, last_tx) = + (k.context_id(), v.application.application_id(), v.root_hash); let entry = format!( "{c1:44} | {c2:44} | {c3}", c1 = cx, diff --git a/crates/node/src/interactive_cli/gc.rs b/crates/node/src/interactive_cli/gc.rs deleted file mode 100644 index c412b6150..000000000 --- a/crates/node/src/interactive_cli/gc.rs +++ /dev/null @@ -1,27 +0,0 @@ -use clap::Parser; -use eyre::Result; -use owo_colors::OwoColorize; - -use crate::transaction_pool::TransactionPool; -use crate::Node; - -#[derive(Debug, Parser)] -#[allow(missing_copy_implementations, reason = "TODO")] -#[non_exhaustive] -pub struct GarbageCollectCommand; -impl GarbageCollectCommand { - pub async fn run(self, node: &mut Node) -> Result<()> { - let ind = ">>".blue(); - if node.tx_pool.transactions.is_empty() { - println!("{ind} Transaction pool is empty."); - } else { - println!( - "{ind} Garbage collecting {} transactions.", - node.tx_pool.transactions.len().cyan() - ); - node.tx_pool = TransactionPool::default(); - } - - Ok(()) - } -} diff --git a/crates/node/src/interactive_cli/pool.rs b/crates/node/src/interactive_cli/pool.rs deleted file mode 100644 index c56e66606..000000000 --- a/crates/node/src/interactive_cli/pool.rs +++ /dev/null @@ -1,46 +0,0 @@ -use clap::Parser; -use eyre::Result; -use owo_colors::OwoColorize; -use serde_json::{from_slice as from_json_slice, Value}; - -use crate::Node; - -#[derive(Debug, Parser)] -#[allow(missing_copy_implementations, reason = "TODO")] -#[non_exhaustive] -pub struct PoolCommand; - -impl PoolCommand { - pub async fn run(self, node: &Node) -> Result<()> { - let ind = ">>".blue(); - if node.tx_pool.transactions.is_empty() { - println!("{ind} Transaction pool is empty."); - } - for (hash, entry) in &node.tx_pool.transactions { - println!("{ind} • {:?}", hash.cyan()); - println!("{ind} Sender: {}", entry.sender.cyan()); - println!("{ind} Method: {:?}", entry.transaction.method.cyan()); - println!("{ind} Payload:"); - #[expect(clippy::option_if_let_else, reason = "Clearer here")] - let payload = if let Ok(value) = from_json_slice::(&entry.transaction.payload) { - format!( - "(json): {}", - format!("{value:#}") - .lines() - .map(|line| line.cyan().to_string()) - .collect::>() - .join("\n") - ) - } else { - format!("(raw): {:?}", entry.transaction.payload.cyan()) - }; - - for line in payload.lines() { - println!("{ind} > {line}"); - } - println!("{ind} Prior: {:?}", entry.transaction.prior_hash.cyan()); - } - - Ok(()) - } -} diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index f2f5e67bc..8ed8220cc 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -7,6 +7,7 @@ use core::future::{pending, Future}; use core::pin::Pin; +use borsh::to_vec; use calimero_blobstore::config::BlobStoreConfig; use calimero_blobstore::{BlobManager, FileSystem}; use calimero_context::config::ContextConfig; @@ -14,9 +15,7 @@ use calimero_context::ContextManager; use calimero_network::client::NetworkClient; use calimero_network::config::NetworkConfig; use calimero_network::types::{NetworkEvent, PeerId}; -use calimero_node_primitives::{ - CallError, ExecutionRequest, Finality, MutateCallError, NodeType, QueryCallError, -}; +use calimero_node_primitives::{CallError, ExecutionRequest}; use calimero_primitives::context::{Context, ContextId}; use calimero_primitives::events::{ ApplicationEvent, ApplicationEventPayload, ExecutedTransactionPayload, NodeEvent, OutcomeEvent, @@ -24,17 +23,15 @@ use calimero_primitives::events::{ }; use calimero_primitives::hash::Hash; use calimero_primitives::identity::PublicKey; -use calimero_primitives::transaction::Transaction; use calimero_runtime::logic::{Outcome, VMContext, VMLimits}; use calimero_runtime::Constraint; use calimero_server::config::ServerConfig; +use calimero_storage::address::Id; +use calimero_storage::integration::Comparison; +use calimero_storage::interface::Action; use calimero_store::config::StoreConfig; use calimero_store::db::RocksDB; -use calimero_store::key::{ - ApplicationMeta as ApplicationMetaKey, ContextMeta as ContextMetaKey, - ContextTransaction as ContextTransactionKey, -}; -use calimero_store::types::{ContextMeta, ContextTransaction}; +use calimero_store::key::ContextMeta as ContextMetaKey; use calimero_store::Store; use camino::Utf8PathBuf; use eyre::{bail, eyre, Result as EyreResult}; @@ -43,19 +40,17 @@ use libp2p::identity::Keypair; use owo_colors::OwoColorize; use serde_json::{from_slice as from_json_slice, to_vec as to_json_vec}; use tokio::io::{stdin, AsyncBufReadExt, BufReader}; -use tokio::sync::{broadcast, mpsc, oneshot}; +use tokio::select; +use tokio::sync::{broadcast, mpsc}; use tokio::time::{interval_at, Instant}; -use tokio::{select, spawn}; use tracing::{debug, error, info, warn}; use crate::runtime_compat::RuntimeCompatStore; -use crate::transaction_pool::{TransactionPool, TransactionPoolEntry}; -use crate::types::{PeerAction, TransactionConfirmation, TransactionRejection}; +use crate::types::{ActionMessage, PeerAction, SyncMessage}; pub mod catchup; pub mod interactive_cli; pub mod runtime_compat; -pub mod transaction_pool; pub mod types; type BoxedFuture = Pin>>; @@ -65,7 +60,6 @@ type BoxedFuture = Pin>>; pub struct NodeConfig { pub home: Utf8PathBuf, pub identity: Keypair, - pub node_type: NodeType, pub network: NetworkConfig, pub datastore: StoreConfig, pub blobstore: BlobStoreConfig, @@ -74,12 +68,10 @@ pub struct NodeConfig { } impl NodeConfig { - #[expect(clippy::too_many_arguments, reason = "Okay for now")] #[must_use] pub const fn new( home: Utf8PathBuf, identity: Keypair, - node_type: NodeType, network: NetworkConfig, datastore: StoreConfig, blobstore: BlobStoreConfig, @@ -89,7 +81,6 @@ impl NodeConfig { Self { home, identity, - node_type, network, datastore, blobstore, @@ -101,15 +92,10 @@ impl NodeConfig { #[derive(Debug)] pub struct Node { - id: PeerId, - typ: NodeType, store: Store, - tx_pool: TransactionPool, ctx_manager: ContextManager, network_client: NetworkClient, node_events: broadcast::Sender, - // -- - nonce: u64, } pub async fn start(config: NodeConfig) -> EyreResult<()> { @@ -204,23 +190,18 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { impl Node { #[must_use] - pub fn new( - config: &NodeConfig, + pub const fn new( + _config: &NodeConfig, network_client: NetworkClient, node_events: broadcast::Sender, ctx_manager: ContextManager, store: Store, ) -> Self { Self { - id: config.identity.public().to_peer_id(), - typ: config.node_type, store, - tx_pool: TransactionPool::default(), ctx_manager, network_client, node_events, - // -- - nonce: 0, } } @@ -296,132 +277,108 @@ impl Node { }; match from_json_slice(&message.data)? { - PeerAction::Transaction(transaction) => { - debug!(?transaction, %source, "Received transaction"); - - let handle = self.store.handle(); - - let ctx_meta_key = ContextMetaKey::new(transaction.context_id); - let prior_transaction_key = ContextTransactionKey::new( - transaction.context_id, - transaction.prior_hash.into(), - ); - - let transaction_hash = self.tx_pool.insert(source, transaction.clone(), None)?; - - if !handle.has(&ctx_meta_key)? - || (transaction.prior_hash != Hash::default() - && !handle.has(&prior_transaction_key)? - && !self.typ.is_coordinator()) - { - info!(context_id=%transaction.context_id, %source, "Attempting to perform tx triggered catchup"); - - self.perform_catchup(transaction.context_id, source).await?; - - let _ = self - .ctx_manager - .clear_context_pending_catchup(&transaction.context_id) - .await; - - info!(context_id=%transaction.context_id, %source, "Tx triggered catchup successfully finished"); - }; - - let Some(context) = self.ctx_manager.get_context(&transaction.context_id)? else { - bail!("Context '{}' not found", transaction.context_id); - }; - - if self.typ.is_coordinator() { - let Some(pool_entry) = self.tx_pool.remove(&transaction_hash) else { - return Ok(()); + PeerAction::ActionList(action_list) => { + debug!(?action_list, %source, "Received action list"); + + for action in action_list.actions { + debug!(?action, %source, "Received action"); + let Some(context) = self.ctx_manager.get_context(&action_list.context_id)? + else { + bail!("Context '{}' not found", action_list.context_id); }; - - let _ = self - .validate_pending_transaction( - &context, - pool_entry.transaction, - transaction_hash, - ) - .await?; + match action { + Action::Compare { id } => { + self.send_comparison_message(&context, id, action_list.public_key) + .await + } + Action::Add { .. } | Action::Delete { .. } | Action::Update { .. } => { + self.apply_action(&context, &action, action_list.public_key) + .await + } + }?; } + Ok(()) } - PeerAction::TransactionConfirmation(confirmation) => { - debug!(?confirmation, %source, "Received transaction confirmation"); - // todo! ensure this was only sent by a coordinator - - let Some(TransactionPoolEntry { - transaction, - outcome_sender, - .. - }) = self.tx_pool.remove(&confirmation.transaction_hash) - else { - return Ok(()); - }; + PeerAction::Sync(sync) => { + debug!(?sync, %source, "Received sync request"); - let outcome_result = self - .execute_in_context(confirmation.transaction_hash, transaction) - .await; + let Some(context) = self.ctx_manager.get_context(&sync.context_id)? else { + bail!("Context '{}' not found", sync.context_id); + }; + let outcome = self + .compare_trees(&context, &sync.comparison, sync.public_key) + .await?; + + match outcome.returns { + Ok(Some(actions_data)) => { + let (local_actions, remote_actions): (Vec, Vec) = + from_json_slice(&actions_data)?; + + // Apply local actions + for action in local_actions { + match action { + Action::Compare { id } => { + self.send_comparison_message(&context, id, sync.public_key) + .await + } + Action::Add { .. } + | Action::Delete { .. } + | Action::Update { .. } => { + self.apply_action(&context, &action, sync.public_key).await + } + }?; + } - if let Some(outcome_sender) = outcome_sender { - drop(outcome_sender.send(outcome_result)); + if !remote_actions.is_empty() { + // Send remote actions back to the peer + // TODO: This just sends one at present - needs to send a batch + let new_message = ActionMessage { + actions: remote_actions, + context_id: sync.context_id, + public_key: sync.public_key, + root_hash: context.root_hash, + }; + self.push_action(sync.context_id, PeerAction::ActionList(new_message)) + .await?; + } + } + Ok(None) => { + // No actions needed + } + Err(err) => { + error!("Error during comparison: {err:?}"); + // TODO: Handle the error appropriately + } } - } - PeerAction::TransactionRejection(rejection) => { - debug!(?rejection, %source, "Received transaction rejection"); - // todo! ensure this was only sent by a coordinator - - let _ = self.reject_from_pool(rejection.transaction_hash); - - info!(context_id=%rejection.context_id, %source, "Attempting to perform rejection triggered catchup"); - - self.perform_catchup(rejection.context_id, source).await?; - - let _ = self - .ctx_manager - .clear_context_pending_catchup(&rejection.context_id) - .await; - - info!(context_id=%rejection.context_id, %source, "Rejection triggered catchup successfully finished"); + Ok(()) } } - - Ok(()) } - async fn validate_pending_transaction( + async fn send_comparison_message( &mut self, context: &Context, - transaction: Transaction, - transaction_hash: Hash, - ) -> EyreResult { - if context.last_transaction_hash == transaction.prior_hash { - self.nonce = self.nonce.saturating_add(1); - - self.push_action( - transaction.context_id, - PeerAction::TransactionConfirmation(TransactionConfirmation { - context_id: transaction.context_id, - nonce: self.nonce, - transaction_hash, - // todo! proper confirmation hash - confirmation_hash: transaction_hash, - }), - ) - .await?; - - self.persist_transaction(context, transaction, transaction_hash)?; - - Ok(true) - } else { - self.push_action( - transaction.context_id, - PeerAction::TransactionRejection(TransactionRejection { - context_id: transaction.context_id, - transaction_hash, - }), - ) + id: Id, + public_key: PublicKey, + ) -> EyreResult<()> { + let compare_outcome = self + .generate_comparison_data(context, id, public_key) .await?; - - Ok(false) + match compare_outcome.returns { + Ok(Some(comparison_data)) => { + // Generate a new Comparison for this entity and send it to the peer + let new_sync = SyncMessage { + comparison: from_json_slice(&comparison_data)?, + context_id: context.id, + public_key, + root_hash: context.root_hash, + }; + self.push_action(context.id, PeerAction::Sync(new_sync)) + .await?; + Ok(()) + } + Ok(None) => Err(eyre!("No comparison data generated")), + Err(err) => Err(eyre!(err)), } } @@ -443,80 +400,18 @@ impl Node { return; }; - if let Some(finality) = request.finality { - let transaction = Transaction::new( - context.id, - request.method, - request.payload, - context.last_transaction_hash, - request.executor_public_key, - ); - - match finality { - Finality::Local => { - let task = async { - let hash = Hash::hash_json(&transaction)?; - - self.execute_transaction(&context, transaction, hash).await - }; - - drop(request.outcome_sender.send(task.await.map_err(|err| { - error!(%err, "failed to execute local transaction"); + let task = self.call_query( + &context, + request.method, + request.payload, + request.executor_public_key, + ); - CallError::Mutate(MutateCallError::InternalError) - }))); - } - Finality::Global => { - let (inner_outcome_sender, inner_outcome_receiver) = oneshot::channel(); - - if let Err(err) = self - .call_mutate(&context, transaction, inner_outcome_sender) - .await - { - drop(request.outcome_sender.send(Err(CallError::Mutate(err)))); - return; - } + drop(request.outcome_sender.send(task.await.map_err(|err| { + error!(%err, "failed to execute local query"); - drop(spawn(async move { - match inner_outcome_receiver.await { - Ok(outcome) => match outcome { - Ok(outcome) => { - drop(request.outcome_sender.send(Ok(outcome))); - } - Err(err) => { - drop(request.outcome_sender.send(Err(CallError::Mutate(err)))); - } - }, - Err(err) => { - error!("Failed to receive inner outcome of a transaction: {}", err); - drop( - request.outcome_sender.send(Err(CallError::Mutate( - MutateCallError::InternalError, - ))), - ); - } - } - })); - } - } - } else { - match self - .call_query( - &context, - request.method, - request.payload, - request.executor_public_key, - ) - .await - { - Ok(outcome) => { - drop(request.outcome_sender.send(Ok(outcome))); - } - Err(err) => { - drop(request.outcome_sender.send(Err(CallError::Query(err)))); - } - }; - } + CallError::InternalError + }))); } async fn call_query( @@ -525,174 +420,133 @@ impl Node { method: String, payload: Vec, executor_public_key: PublicKey, - ) -> Result { - if !self - .ctx_manager - .is_application_installed(&context.application_id) - .unwrap_or_default() - { - return Err(QueryCallError::ApplicationNotInstalled { - application_id: context.application_id, - }); - } - - self.execute(context, None, method, payload, executor_public_key) + ) -> Result { + let outcome_option = self + .checked_execute( + context, + Some(context.root_hash), + method, + payload, + executor_public_key, + ) .await .map_err(|e| { - error!(%e,"Failed to execute query call."); - QueryCallError::InternalError - }) - } - - async fn call_mutate( - &mut self, - context: &Context, - transaction: Transaction, - outcome_sender: oneshot::Sender>, - ) -> Result { - if context.id != transaction.context_id { - return Err(MutateCallError::TransactionRejected); - } - - if self.typ.is_coordinator() { - return Err(MutateCallError::InvalidNodeType { - node_type: self.typ, - }); - } + error!(%e, "Failed to execute query call."); + CallError::InternalError + })?; - if !self - .ctx_manager - .is_application_installed(&context.application_id) - .unwrap_or_default() - { - return Err(MutateCallError::ApplicationNotInstalled { + let Some(outcome) = outcome_option else { + return Err(CallError::ApplicationNotInstalled { application_id: context.application_id, }); - } - + }; if self .network_client .mesh_peer_count(TopicHash::from_raw(context.id)) .await - == 0 + != 0 { - return Err(MutateCallError::NoConnectedPeers); - } - - self.push_action(context.id, PeerAction::Transaction(transaction.clone())) + let actions = outcome + .actions + .iter() + .map(|a| borsh::from_slice(a)) + .collect::, _>>() + .map_err(|err| { + error!(%err, "Failed to deserialize actions."); + CallError::InternalError + })?; + self.push_action( + context.id, + PeerAction::ActionList(ActionMessage { + actions, + context_id: context.id, + public_key: executor_public_key, + root_hash: context.root_hash, + }), + ) .await .map_err(|err| { - error!(%err, "Failed to push transaction over the network."); - MutateCallError::InternalError + error!(%err, "Failed to push action over the network."); + CallError::InternalError })?; - - let tx_hash = self - .tx_pool - .insert(self.id, transaction, Some(outcome_sender)) - .map_err(|err| { - error!(%err, "Failed to insert transaction into the pool."); - MutateCallError::InternalError - })?; - - Ok(tx_hash) - } - - async fn execute_in_context( - &mut self, - transaction_hash: Hash, - transaction: Transaction, - ) -> Result { - let Some(context) = self - .ctx_manager - .get_context(&transaction.context_id) - .map_err(|e| { - error!(%e, "Failed to get context"); - MutateCallError::InternalError - })? - else { - error!(%transaction.context_id, "Context not found"); - return Err(MutateCallError::InternalError); - }; - - if context.last_transaction_hash != transaction.prior_hash { - error!( - context_id=%transaction.context_id, - %transaction_hash, - prior_hash=%transaction.prior_hash, - "Transaction from the pool doesn't build on last transaction", - ); - return Err(MutateCallError::TransactionRejected); } - let outcome = self - .execute_transaction(&context, transaction, transaction_hash) - .await - .map_err(|e| { - error!(%e, "Failed to execute transaction"); - MutateCallError::InternalError - })?; - Ok(outcome) } - async fn execute_transaction( + async fn apply_action( &mut self, context: &Context, - transaction: Transaction, - hash: Hash, - ) -> EyreResult { + action: &Action, + public_key: PublicKey, + ) -> EyreResult<()> { let outcome = self - .execute( + .checked_execute( context, - Some(hash), - transaction.method.clone(), - transaction.payload.clone(), - transaction.executor_public_key, + None, + "apply_action".to_owned(), + to_vec(action)?, + public_key, ) - .await?; - - self.persist_transaction(context, transaction, hash)?; - - Ok(outcome) + .await + .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed")))?; + drop(outcome.returns?); + Ok(()) } - fn reject_from_pool(&mut self, hash: Hash) -> Option<()> { - let TransactionPoolEntry { outcome_sender, .. } = self.tx_pool.remove(&hash)?; - - if let Some(sender) = outcome_sender { - drop(sender.send(Err(MutateCallError::TransactionRejected))); - } - - Some(()) + async fn compare_trees( + &mut self, + context: &Context, + comparison: &Comparison, + public_key: PublicKey, + ) -> EyreResult { + self.checked_execute( + context, + None, + "compare_trees".to_owned(), + to_vec(comparison)?, + public_key, + ) + .await + .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed"))) } - fn persist_transaction( - &self, + async fn generate_comparison_data( + &mut self, context: &Context, - transaction: Transaction, - hash: Hash, - ) -> EyreResult<()> { - let mut handle = self.store.handle(); - - handle.put( - &ContextTransactionKey::new(context.id, hash.into()), - &ContextTransaction::new( - transaction.method.into(), - transaction.payload.into(), - *transaction.prior_hash, - *transaction.executor_public_key, - ), - )?; + id: Id, + public_key: PublicKey, + ) -> EyreResult { + self.checked_execute( + context, + None, + "generate_comparison_data".to_owned(), + to_vec(&id)?, + public_key, + ) + .await + .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed"))) + } - handle.put( - &ContextMetaKey::new(context.id), - &ContextMeta::new( - ApplicationMetaKey::new(context.application_id), - *hash.as_bytes(), - ), - )?; + async fn checked_execute( + &mut self, + context: &Context, + hash: Option, + method: String, + payload: Vec, + executor_public_key: PublicKey, + ) -> EyreResult> { + if !self + .ctx_manager + .is_application_installed(&context.application_id) + .unwrap_or_default() + { + return Ok(None); + } - Ok(()) + self.execute(context, hash, method, payload, executor_public_key) + .await + .map(Some) } async fn execute( diff --git a/crates/node/src/transaction_pool.rs b/crates/node/src/transaction_pool.rs deleted file mode 100644 index e2665ffa2..000000000 --- a/crates/node/src/transaction_pool.rs +++ /dev/null @@ -1,59 +0,0 @@ -use std::collections::BTreeMap; - -use calimero_network::types::PeerId; -use calimero_node_primitives::MutateCallError; -use calimero_primitives::hash::Hash; -use calimero_primitives::transaction::Transaction; -use calimero_runtime::logic::Outcome; -use eyre::{eyre, Result as EyreResult}; -use tokio::sync::oneshot; - -#[derive(Debug)] -#[non_exhaustive] -pub struct TransactionPoolEntry { - pub sender: PeerId, - pub transaction: Transaction, - pub outcome_sender: Option>>, -} - -#[derive(Debug, Default)] -#[non_exhaustive] -pub struct TransactionPool { - pub transactions: BTreeMap, -} - -impl TransactionPool { - pub fn insert( - &mut self, - sender: PeerId, - transaction: Transaction, - outcome_sender: Option>>, - ) -> EyreResult { - let transaction_hash = Hash::hash_json(&transaction).map_err(|err| { - eyre!("Failed to hash transaction: {err}. This is a bug and should be reported.") - })?; - - drop(self.transactions.insert( - transaction_hash, - TransactionPoolEntry { - sender, - transaction, - outcome_sender, - }, - )); - - Ok(transaction_hash) - } - - pub fn remove(&mut self, hash: &Hash) -> Option { - self.transactions.remove(hash) - } - - pub fn iter(&self) -> impl Iterator { - self.transactions.iter() - } - - pub(crate) fn is_empty(&self) -> bool { - self.transactions.is_empty() - } -} diff --git a/crates/node/src/types.rs b/crates/node/src/types.rs index 8d774ff73..5f52b8afc 100644 --- a/crates/node/src/types.rs +++ b/crates/node/src/types.rs @@ -1,42 +1,27 @@ use calimero_primitives::application::ApplicationId; use calimero_primitives::context::ContextId; use calimero_primitives::hash::Hash; -use calimero_primitives::transaction::Transaction; +use calimero_primitives::identity::PublicKey; +use calimero_storage::integration::Comparison; +use calimero_storage::interface::Action; use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] +#[expect(clippy::large_enum_variant, reason = "Of no consequence here")] pub enum PeerAction { - Transaction(Transaction), - TransactionConfirmation(TransactionConfirmation), - TransactionRejection(TransactionRejection), -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct TransactionConfirmation { - pub context_id: ContextId, - pub nonce: u64, - pub transaction_hash: Hash, - // sha256(previous_confirmation_hash, transaction_hash, nonce) - pub confirmation_hash: Hash, -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct TransactionRejection { - pub context_id: ContextId, - pub transaction_hash: Hash, + ActionList(ActionMessage), + Sync(SyncMessage), } #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] pub enum CatchupStreamMessage { + ActionsBatch(CatchupActionsBatch), ApplicationBlobRequest(CatchupApplicationBlobRequest), ApplicationBlobChunk(CatchupApplicationBlobChunk), - TransactionsRequest(CatchupTransactionsRequest), - TransactionsBatch(CatchupTransactionsBatch), + SyncRequest(CatchupSyncRequest), Error(CatchupError), } @@ -55,16 +40,15 @@ pub struct CatchupApplicationBlobChunk { #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct CatchupTransactionsRequest { +pub struct CatchupSyncRequest { pub context_id: ContextId, - pub last_executed_transaction_hash: Hash, - pub batch_size: u8, + pub root_hash: Hash, } #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct CatchupTransactionsBatch { - pub transactions: Vec, +pub struct CatchupActionsBatch { + pub actions: Vec, } #[derive(Clone, Copy, Debug, Deserialize, Serialize, ThisError)] @@ -72,25 +56,26 @@ pub struct CatchupTransactionsBatch { pub enum CatchupError { #[error("context `{context_id:?}` not found")] ContextNotFound { context_id: ContextId }, - #[error("transaction `{transaction_hash:?}` not found")] - TransactionNotFound { transaction_hash: Hash }, #[error("application `{application_id:?}` not found")] ApplicationNotFound { application_id: ApplicationId }, #[error("internal error")] InternalError, } -#[derive(Debug, Deserialize, Serialize)] +#[derive(Clone, Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct TransactionWithStatus { - pub transaction_hash: Hash, - pub transaction: Transaction, - pub status: TransactionStatus, +pub struct ActionMessage { + pub actions: Vec, + pub context_id: ContextId, + pub public_key: PublicKey, + pub root_hash: Hash, } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[derive(Clone, Debug, Deserialize, Serialize)] #[non_exhaustive] -pub enum TransactionStatus { - Pending, - Executed, +pub struct SyncMessage { + pub comparison: Comparison, + pub context_id: ContextId, + pub public_key: PublicKey, + pub root_hash: Hash, } diff --git a/crates/primitives/src/context.rs b/crates/primitives/src/context.rs index d001f555a..e9d82cb00 100644 --- a/crates/primitives/src/context.rs +++ b/crates/primitives/src/context.rs @@ -186,20 +186,16 @@ const _: () = { pub struct Context { pub id: ContextId, pub application_id: ApplicationId, - pub last_transaction_hash: Hash, + pub root_hash: Hash, } impl Context { #[must_use] - pub const fn new( - id: ContextId, - application_id: ApplicationId, - last_transaction_hash: Hash, - ) -> Self { + pub const fn new(id: ContextId, application_id: ApplicationId, root_hash: Hash) -> Self { Self { id, application_id, - last_transaction_hash, + root_hash, } } } diff --git a/crates/primitives/src/lib.rs b/crates/primitives/src/lib.rs index 7eaf05031..85de928b2 100644 --- a/crates/primitives/src/lib.rs +++ b/crates/primitives/src/lib.rs @@ -6,4 +6,3 @@ pub mod events; pub mod hash; pub mod identity; pub mod reflect; -pub mod transaction; diff --git a/crates/primitives/src/transaction.rs b/crates/primitives/src/transaction.rs deleted file mode 100644 index 51923c46d..000000000 --- a/crates/primitives/src/transaction.rs +++ /dev/null @@ -1,34 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::context::ContextId; -use crate::hash::Hash; -use crate::identity::PublicKey; - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct Transaction { - pub context_id: ContextId, - pub method: String, - pub payload: Vec, - pub prior_hash: Hash, - pub executor_public_key: PublicKey, -} - -impl Transaction { - #[must_use] - pub const fn new( - context_id: ContextId, - method: String, - payload: Vec, - prior_hash: Hash, - executor_public_key: PublicKey, - ) -> Self { - Self { - context_id, - method, - payload, - prior_hash, - executor_public_key, - } - } -} diff --git a/crates/runtime/src/errors.rs b/crates/runtime/src/errors.rs index 553e4662b..17161fd9d 100644 --- a/crates/runtime/src/errors.rs +++ b/crates/runtime/src/errors.rs @@ -45,7 +45,7 @@ pub enum FunctionCallError { WasmTrap(WasmTrap), #[error(transparent)] HostError(HostError), - #[error("the method call returned an error")] + #[error("the method call returned an error: {0:?}")] ExecutionError(Vec), } diff --git a/crates/runtime/src/logic.rs b/crates/runtime/src/logic.rs index 39742a325..057acf5a2 100644 --- a/crates/runtime/src/logic.rs +++ b/crates/runtime/src/logic.rs @@ -104,6 +104,7 @@ pub struct VMLogic<'a> { limits: &'a VMLimits, registers: Registers, returns: Option, Vec>>, + actions: Vec>, logs: Vec, events: Vec, } @@ -117,6 +118,7 @@ impl<'a> VMLogic<'a> { limits, registers: Registers::default(), returns: None, + actions: vec![], logs: vec![], events: vec![], } @@ -144,6 +146,7 @@ impl<'a> VMLogic<'a> { #[non_exhaustive] pub struct Outcome { pub returns: VMLogicResult>, FunctionCallError>, + pub actions: Vec>, pub logs: Vec, pub events: Vec, // execution runtime @@ -170,6 +173,7 @@ impl VMLogic<'_> { Outcome { returns, + actions: self.actions, logs: self.logs, events: self.events, } @@ -337,6 +341,21 @@ impl VMHostFunctions<'_> { Ok(()) } + /// Sends an action to the host. + /// + /// After a storage event, other nodes need to be updated. Consequently, the + /// host must be informed about the action that was taken. This function + /// sends that action to the host, which can then be used to update the + /// network. + /// + pub fn send_action(&mut self, action_ptr: u64, action_len: u64) -> VMLogicResult<()> { + let action_bytes = self.read_guest_memory(action_ptr, action_len)?; + + self.with_logic_mut(|logic| logic.actions.push(action_bytes)); + + Ok(()) + } + pub fn storage_read( &mut self, key_ptr: u64, diff --git a/crates/runtime/src/logic/imports.rs b/crates/runtime/src/logic/imports.rs index efd2a58bc..61c129c49 100644 --- a/crates/runtime/src/logic/imports.rs +++ b/crates/runtime/src/logic/imports.rs @@ -42,6 +42,8 @@ impl VMLogic<'_> { fn log_utf8(ptr: u64, len: u64); fn emit(kind_ptr: u64, kind_len: u64, data_ptr: u64, data_len: u64); + fn send_action(action_ptr: u64, action_len: u64); + fn storage_write( key_ptr: u64, key_len: u64, diff --git a/crates/runtime/src/store.rs b/crates/runtime/src/store.rs index 5733141ed..b2d1cc1d9 100644 --- a/crates/runtime/src/store.rs +++ b/crates/runtime/src/store.rs @@ -8,7 +8,6 @@ pub trait Storage: Debug { fn get(&self, key: &Key) -> Option; fn set(&mut self, key: Key, value: Value) -> Option; fn remove(&mut self, key: &Key) -> Option>; - // fn remove(&mut self, key: &[u8]); fn has(&self, key: &Key) -> bool; } diff --git a/crates/sdk/macros/src/logic/method.rs b/crates/sdk/macros/src/logic/method.rs index 20f849af5..196db4adc 100644 --- a/crates/sdk/macros/src/logic/method.rs +++ b/crates/sdk/macros/src/logic/method.rs @@ -99,8 +99,10 @@ impl ToTokens for PublicLogicMethod<'_> { SelfType::Owned(_) | SelfType::Immutable(_) => None, }; quote! { - let Some(#mutability app) = ::calimero_sdk::env::state_read::<#self_>() else { - ::calimero_sdk::env::panic_str("Failed to read app state.") + let Some(#mutability app) = ::calimero_storage::interface::Interface::find_by_id::<#self_>( + ::calimero_storage::address::Id::root() + ) else { + ::calimero_sdk::env::panic_str("Failed to find or read app state") }; } }, @@ -109,7 +111,9 @@ impl ToTokens for PublicLogicMethod<'_> { None => ( if init_method { quote! { - if let Some(mut app) = ::calimero_sdk::env::state_read::<#self_>() { + if let Some(mut app) = ::calimero_storage::interface::Interface::find_by_id::<#self_>( + ::calimero_storage::address::Id::root() + ) { ::calimero_sdk::env::panic_str("Cannot initialize over already existing state.") }; @@ -145,7 +149,7 @@ impl ToTokens for PublicLogicMethod<'_> { let state_finalizer = match (&self.self_type, init_method) { (Some(SelfType::Mutable(_)), _) | (_, true) => quote! { - ::calimero_sdk::env::state_write(&app); + ::calimero_storage::interface::Interface::save(&app); }, _ => quote! {}, }; diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index 702d5057f..919c51bdc 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -1,9 +1,6 @@ use std::panic::set_hook; -use borsh::{from_slice as from_borsh_slice, to_vec as to_borsh_vec}; - use crate::event::AppEvent; -use crate::state::AppState; use crate::sys; use crate::sys::{ log_utf8, panic_utf8, Buffer, BufferMut, Event, Location, PtrSizedInt, RegisterId, ValueReturn, @@ -14,8 +11,6 @@ pub mod ext; const DATA_REGISTER: RegisterId = RegisterId::new(PtrSizedInt::MAX.as_usize() - 1); -const STATE_KEY: &[u8] = b"STATE"; - #[track_caller] #[inline] pub fn panic() -> ! { @@ -163,6 +158,10 @@ pub fn emit(event: &T) { unsafe { sys::emit(Event::new(&kind, &data)) } } +pub fn send_action(action: &[u8]) { + unsafe { sys::send_action(Buffer::from(action)) } +} + #[inline] pub fn storage_read(key: &[u8]) -> Option> { unsafe { sys::storage_read(Buffer::from(key), DATA_REGISTER) } @@ -177,29 +176,12 @@ pub fn storage_remove(key: &[u8]) -> bool { .unwrap_or_else(expected_boolean) } -#[must_use] -pub fn state_read() -> Option { - let data = storage_read(STATE_KEY)?; - match from_borsh_slice(&data) { - Ok(state) => Some(state), - Err(err) => panic_str(&format!("Cannot deserialize app state: {err:?}")), - } -} - #[inline] pub fn storage_write(key: &[u8], value: &[u8]) -> bool { unsafe { sys::storage_write(Buffer::from(key), Buffer::from(value), DATA_REGISTER).try_into() } .unwrap_or_else(expected_boolean) } -pub fn state_write(state: &T) { - let data = match to_borsh_vec(state) { - Ok(data) => data, - Err(err) => panic_str(&format!("Cannot serialize app state: {err:?}")), - }; - _ = storage_write(STATE_KEY, &data); -} - /// Fill the buffer with random bytes. #[inline] pub fn random_bytes(buf: &mut [u8]) { diff --git a/crates/sdk/src/sys.rs b/crates/sdk/src/sys.rs index fe7d07946..ea64a0c08 100644 --- a/crates/sdk/src/sys.rs +++ b/crates/sdk/src/sys.rs @@ -20,6 +20,7 @@ wasm_imports! { fn log_utf8(msg: Buffer<'_>); fn emit(event: Event<'_>); // -- + fn send_action(action: Buffer<'_>); fn storage_read(key: Buffer<'_>, register_id: RegisterId) -> Bool; fn storage_remove(key: Buffer<'_>, register_id: RegisterId) -> Bool; fn storage_write(key: Buffer<'_>, value: Buffer<'_>, register_id: RegisterId) -> Bool; diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index 5e683f585..cc110d3cf 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -338,12 +338,12 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { hasher.update(self.element().id().as_bytes()); #( hasher.update( - &borsh::to_vec(&self.#regular_fields) + &calimero_sdk::borsh::to_vec(&self.#regular_fields) .map_err(calimero_storage::interface::StorageError::SerializationError)? ); )* hasher.update( - &borsh::to_vec(&self.element().metadata()) + &calimero_sdk::borsh::to_vec(&self.element().metadata()) .map_err(calimero_storage::interface::StorageError::SerializationError)? ); Ok(hasher.finalize().into()) @@ -495,7 +495,7 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { } let deserialize_impl = quote! { - impl borsh::BorshDeserialize for #name { + impl calimero_sdk::borsh::BorshDeserialize for #name { fn deserialize_reader(reader: &mut R) -> std::io::Result { Ok(Self {}) } @@ -503,7 +503,7 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { }; let serialize_impl = quote! { - impl borsh::BorshSerialize for #name { + impl calimero_sdk::borsh::BorshSerialize for #name { fn serialize(&self, writer: &mut W) -> std::io::Result<()> { Ok(()) } diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index bb96a9248..b2bec4a1e 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -17,7 +17,6 @@ sha2.workspace = true thiserror.workspace = true uuid.workspace = true -[target.'cfg(target_arch = "wasm32")'.dependencies] calimero-sdk = { path = "../sdk" } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index 71e126697..7e1750fc4 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -13,8 +13,8 @@ use core::fmt::{self, Debug, Display, Formatter}; use std::io::{Error as IoError, ErrorKind as IoErrorKind, Read, Write}; use borsh::{BorshDeserialize, BorshSerialize}; +use calimero_sdk::serde::{Deserialize, Serialize}; use fixedstr::Flexstr; -use serde::{Deserialize, Serialize}; use thiserror::Error as ThisError; use uuid::{Bytes, Uuid}; @@ -36,6 +36,7 @@ use crate::env::random_bytes; /// insulation that is useful for any future changes. /// #[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(crate = "calimero_sdk::serde")] pub struct Id(Uuid); impl Id { @@ -60,6 +61,12 @@ impl Id { pub const fn as_bytes(&self) -> &Bytes { self.0.as_bytes() } + + /// Root ID which is set to all zeroes by default. + #[must_use] + pub fn root() -> Self { + Self(Uuid::nil()) + } } impl BorshDeserialize for Id { diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index fcb54735c..38a509d05 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -667,6 +667,22 @@ impl Element { } } + /// Constructor for the root [`Element`]. + #[must_use] + pub fn root() -> Self { + let timestamp = time_now(); + Self { + id: Id::root(), + is_dirty: true, + metadata: Metadata { + created_at: timestamp, + updated_at: timestamp, + }, + merkle_hash: [0; 32], + path: Path::new("::").unwrap(), + } + } + /// The timestamp when the [`Element`] was first created. #[must_use] pub const fn created_at(&self) -> u64 { diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index 34134173c..b5771fb85 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -1,12 +1,29 @@ //! Environment bindings for the storage crate. +use borsh::to_vec; #[cfg(target_arch = "wasm32")] use calimero_vm as imp; #[cfg(not(target_arch = "wasm32"))] use mocked as imp; +use crate::interface::Action; use crate::store::Key; +/// Sends an action to the runtime. +/// +/// # Parameters +/// +/// * `action` - The action to send. +/// +/// # Panics +/// +/// This function will panic if the action cannot be serialised. +/// +#[expect(clippy::expect_used, reason = "Effectively infallible here")] +pub fn send_action(action: &Action) { + imp::send_action(&to_vec(&action).expect("Failed to serialize action")); +} + /// Reads data from persistent storage. /// /// # Parameters @@ -63,6 +80,11 @@ mod calimero_vm { use crate::store::Key; + /// Sends an action to the runtime. + pub(super) fn send_action(action: &[u8]) { + env::send_action(action); + } + /// Reads data from persistent storage. pub(super) fn storage_read(key: Key) -> Option> { env::storage_read(&key.to_bytes()) @@ -103,6 +125,11 @@ mod mocked { /// The default storage system. type DefaultStore = MockedStorage<{ usize::MAX }>; + /// Sends an action to the runtime. + pub(super) const fn send_action(_action: &[u8]) { + // Do nothing. + } + /// Reads data from persistent storage. pub(super) fn storage_read(key: Key) -> Option> { DefaultStore::storage_read(key) diff --git a/crates/storage/src/integration.rs b/crates/storage/src/integration.rs new file mode 100644 index 000000000..ca63243d9 --- /dev/null +++ b/crates/storage/src/integration.rs @@ -0,0 +1,32 @@ +//! Types used for integration with the runtime. + +use borsh::{BorshDeserialize, BorshSerialize}; +use calimero_sdk::serde::{Deserialize, Serialize}; + +use crate::interface::ComparisonData; + +/// Comparison data for synchronisation. +#[derive( + BorshDeserialize, + BorshSerialize, + Clone, + Debug, + Deserialize, + Eq, + Hash, + Ord, + PartialEq, + PartialOrd, + Serialize, +)] +#[expect(clippy::exhaustive_structs, reason = "Exhaustive")] +pub struct Comparison { + /// The type of the entity. + pub type_id: u8, + + /// The serialised data of the entity. + pub data: Vec, + + /// The comparison data for the entity. + pub comparison_data: ComparisonData, +} diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 89e67901e..b2c17271d 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -226,6 +226,7 @@ use thiserror::Error as ThisError; use crate::address::{Id, Path}; use crate::entities::{ChildInfo, Collection, Data}; +use crate::env::send_action; use crate::index::Index; use crate::store::{Key, MainStorage, StorageAdaptor}; @@ -905,8 +906,31 @@ impl MainInterface { collection: &mut C, child_id: Id, ) -> Result { + let child_exists = >::get_children_of(parent_id, collection.name())? + .iter() + .any(|child| child.id() == child_id); + if !child_exists { + return Ok(false); + } + >::remove_child_from(parent_id, collection.name(), child_id)?; - Ok(S::storage_remove(Key::Entry(child_id))) + + let (parent_full_hash, _) = + >::get_hashes_for(parent_id)?.ok_or(StorageError::IndexNotFound(parent_id))?; + let mut ancestors = >::get_ancestors_of(parent_id)?; + ancestors.insert(0, ChildInfo::new(parent_id, parent_full_hash)); + + _ = S::storage_remove(Key::Entry(child_id)); + + // We have to serialise here rather than send the Action itself, as the SDK + // has no knowledge of the Action type, and cannot use it as it would be a + // circular dependency. + send_action(&Action::Delete { + id: child_id, + ancestors, + }); + + Ok(true) } /// Retrieves the root entity for a given context. @@ -996,9 +1020,12 @@ impl MainInterface { return Err(StorageError::CannotCreateOrphan(id)); } - if let Some(existing) = Self::find_by_id::(id)? { - if existing.element().metadata.updated_at >= entity.element().metadata.updated_at { - return Ok(false); + let is_new = Self::find_by_id::(id)?.is_none(); + if !is_new { + if let Some(existing) = Self::find_by_id::(id)? { + if existing.element().metadata.updated_at >= entity.element().metadata.updated_at { + return Ok(false); + } } } else if D::is_root() { >::add_root(ChildInfo::new(id, [0_u8; 32]), D::type_id())?; @@ -1013,9 +1040,55 @@ impl MainInterface { ); entity.element_mut().is_dirty = false; + + let action = if is_new { + Action::Add { + id, + type_id: D::type_id(), + data: to_vec(entity).map_err(StorageError::SerializationError)?, + ancestors: >::get_ancestors_of(id)?, + } + } else { + Action::Update { + id, + type_id: D::type_id(), + data: to_vec(entity).map_err(StorageError::SerializationError)?, + ancestors: >::get_ancestors_of(id)?, + } + }; + + // We have to serialise here rather than send the Action itself, as the SDK + // has no knowledge of the Action type, and cannot use it as it would be a + // circular dependency. + send_action(&action); + Ok(true) } + /// Type identifier of the entity. + /// + /// This is noted so that the entity can be deserialised correctly in the + /// absence of other semantic information. It is intended that the [`Path`] + /// will be used to help with this at some point, but at present paths are + /// not fully utilised. + /// + /// The value returned is arbitrary, and is up to the implementer to decide + /// what it should be. It is recommended that it be unique for each type of + /// entity. + /// + /// # Parameters + /// + /// * `id` - The [`Id`] of the entity whose type is to be retrieved. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, an error + /// will be returned. + /// + pub fn type_of(id: Id) -> Result { + >::get_type_id(id) + } + /// Validates the stored state. /// /// This will validate the stored state of the storage system, i.e. the data diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 6463355e2..3b24975db 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -65,6 +65,7 @@ pub mod address; pub mod entities; pub mod env; pub mod index; +pub mod integration; pub mod interface; pub mod store; diff --git a/crates/store/src/types.rs b/crates/store/src/types.rs index c8c0f6899..79b89fcbb 100644 --- a/crates/store/src/types.rs +++ b/crates/store/src/types.rs @@ -9,7 +9,7 @@ mod generic; pub use application::ApplicationMeta; pub use blobs::BlobMeta; pub use context::{ - ContextConfig, ContextIdentity, ContextMeta, ContextState, ContextTransaction, TransactionHash, + ContextConfig, ContextIdentity, ContextMeta, ContextState, ContextTransaction, Hash, }; pub use generic::GenericData; diff --git a/crates/store/src/types/context.rs b/crates/store/src/types/context.rs index 3d9a78700..2bba15666 100644 --- a/crates/store/src/types/context.rs +++ b/crates/store/src/types/context.rs @@ -9,24 +9,21 @@ use crate::key::{ use crate::slice::Slice; use crate::types::PredefinedEntry; -pub type TransactionHash = [u8; 32]; +pub type Hash = [u8; 32]; #[derive(BorshDeserialize, BorshSerialize, Clone, Copy, Debug, Eq, PartialEq)] #[non_exhaustive] pub struct ContextMeta { pub application: ApplicationMetaKey, - pub last_transaction_hash: TransactionHash, + pub root_hash: Hash, } impl ContextMeta { #[must_use] - pub const fn new( - application: ApplicationMetaKey, - last_transaction_hash: TransactionHash, - ) -> Self { + pub const fn new(application: ApplicationMetaKey, root_hash: Hash) -> Self { Self { application, - last_transaction_hash, + root_hash, } } } @@ -97,7 +94,7 @@ impl PredefinedEntry for ContextIdentityKey { pub struct ContextTransaction { pub method: Box, pub payload: Box<[u8]>, - pub prior_hash: TransactionHash, + pub prior_hash: Hash, pub executor_public_key: [u8; 32], } @@ -106,7 +103,7 @@ impl ContextTransaction { pub const fn new( method: Box, payload: Box<[u8]>, - prior_hash: TransactionHash, + prior_hash: Hash, executor_public_key: [u8; 32], ) -> Self { Self { From 12e2b030dab37055ec28abfd761d290443b653f9 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 12:32:22 +0300 Subject: [PATCH 18/75] fix: revert kv-store & fix clippy lints (#802) --- Cargo.lock | 2 -- apps/kv-store/Cargo.toml | 2 -- apps/kv-store/src/lib.rs | 29 +++++---------------------- crates/context/config/src/repr.rs | 10 +++++++-- crates/storage/src/address.rs | 2 +- crates/storage/src/entities.rs | 2 ++ crates/store/src/layer/experiments.rs | 6 ++++-- scripts/build-all-apps.sh | 7 ++++--- 8 files changed, 24 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b88870baa..7bc82c02b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3658,8 +3658,6 @@ name = "kv-store" version = "0.1.0" dependencies = [ "calimero-sdk", - "calimero-storage", - "calimero-storage-macros", ] [[package]] diff --git a/apps/kv-store/Cargo.toml b/apps/kv-store/Cargo.toml index 377238438..7ffe91112 100644 --- a/apps/kv-store/Cargo.toml +++ b/apps/kv-store/Cargo.toml @@ -11,5 +11,3 @@ crate-type = ["cdylib"] [dependencies] calimero-sdk = { path = "../../crates/sdk" } -calimero-storage = { path = "../../crates/storage" } -calimero-storage-macros = { path = "../../crates/storage-macros" } diff --git a/apps/kv-store/src/lib.rs b/apps/kv-store/src/lib.rs index 558492558..f446ceadb 100644 --- a/apps/kv-store/src/lib.rs +++ b/apps/kv-store/src/lib.rs @@ -1,29 +1,13 @@ use std::collections::hash_map::{Entry as HashMapEntry, HashMap}; +use calimero_sdk::borsh::{BorshDeserialize, BorshSerialize}; use calimero_sdk::{app, env}; -use calimero_storage::entities::{Data, Element}; -use calimero_storage_macros::{AtomicUnit, Collection}; #[app::state(emits = for<'a> Event<'a>)] -#[derive(AtomicUnit, Clone, Debug, PartialEq, PartialOrd)] -#[root] -#[type_id(1)] +#[derive(BorshDeserialize, BorshSerialize, Default)] +#[borsh(crate = "calimero_sdk::borsh")] pub struct KvStore { - items: Vec, - #[storage] - storage: Element, -} - -#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] -#[children(Value)] -pub struct Values; - -#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -#[type_id(2)] -pub struct Value { - value: String, - #[storage] - storage: Element, + items: HashMap, } #[app::event] @@ -38,10 +22,7 @@ pub enum Event<'a> { impl KvStore { #[app::init] pub fn init() -> KvStore { - KvStore { - items: Vec::new(), - storage: Element::root(), - } + KvStore::default() } pub fn set(&mut self, key: String, value: String) { diff --git a/crates/context/config/src/repr.rs b/crates/context/config/src/repr.rs index 82d02118a..f171b3fe4 100644 --- a/crates/context/config/src/repr.rs +++ b/crates/context/config/src/repr.rs @@ -113,7 +113,10 @@ where } impl ReprBytes for Repr { - type EncodeBytes<'a> = T::EncodeBytes<'a> where T: 'a; + type EncodeBytes<'a> + = T::EncodeBytes<'a> + where + T: 'a; type DecodeBytes = T::DecodeBytes; type Error = T::Error; @@ -186,7 +189,10 @@ impl ReprBytes for T where T: DynSizedByteSlice, { - type EncodeBytes<'b> = &'b [u8] where T: 'b; + type EncodeBytes<'b> + = &'b [u8] + where + T: 'b; type DecodeBytes = Vec; type Error = Infallible; diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index 7e1750fc4..1de861597 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -64,7 +64,7 @@ impl Id { /// Root ID which is set to all zeroes by default. #[must_use] - pub fn root() -> Self { + pub const fn root() -> Self { Self(Uuid::nil()) } } diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 38a509d05..181caeb59 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -669,6 +669,7 @@ impl Element { /// Constructor for the root [`Element`]. #[must_use] + #[expect(clippy::missing_panics_doc, reason = "This is expected to be valid")] pub fn root() -> Self { let timestamp = time_now(); Self { @@ -679,6 +680,7 @@ impl Element { updated_at: timestamp, }, merkle_hash: [0; 32], + #[expect(clippy::unwrap_used, reason = "This is expected to be valid")] path: Path::new("::").unwrap(), } } diff --git a/crates/store/src/layer/experiments.rs b/crates/store/src/layer/experiments.rs index 83c6fa2c7..4c7898f1c 100644 --- a/crates/store/src/layer/experiments.rs +++ b/crates/store/src/layer/experiments.rs @@ -22,14 +22,16 @@ mod layer { impl Sealed for Interior {} impl Discriminant for Interior { - type Ref<'a, T> = &'a T + type Ref<'a, T> + = &'a T where T: ?Sized + 'a; } impl Sealed for Identity {} impl Discriminant for Identity { - type Ref<'a, T> = &'a mut T + type Ref<'a, T> + = &'a mut T where T: ?Sized + 'a; } diff --git a/scripts/build-all-apps.sh b/scripts/build-all-apps.sh index 7aefd17b5..ce7a68100 100755 --- a/scripts/build-all-apps.sh +++ b/scripts/build-all-apps.sh @@ -6,9 +6,10 @@ set -ex cd "$(dirname $0)" BUILD_SCRIPTS=( - "../apps/gen-ext/build.sh" - "../apps/kv-store/build.sh" - "../apps/only-peers/build.sh" + # todo! update to use CRDTs + # "../apps/kv-store/build.sh" + # "../apps/gen-ext/build.sh" + # "../apps/only-peers/build.sh" ) run_script() { From 7011cac73c407e94d8991c26a06a55484fcac1d7 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 15:15:10 +0300 Subject: [PATCH 19/75] feat: update kv store to use new CRDT store (#823) --- Cargo.lock | 2 + apps/kv-store/Cargo.toml | 2 + apps/kv-store/src/lib.rs | 86 +++++---- crates/runtime/examples/demo.rs | 194 ++++++++++++++------ crates/sdk/macros/src/logic/method.rs | 10 +- crates/sdk/src/lib.rs | 3 + crates/sdk/src/types.rs | 26 +++ crates/storage-macros/Cargo.toml | 3 +- crates/storage-macros/src/lib.rs | 93 +++++++--- crates/storage-macros/tests/atomic_unit.rs | 40 ++-- crates/storage-macros/tests/collection.rs | 6 +- crates/storage/Cargo.toml | 2 +- crates/storage/src/entities.rs | 8 +- crates/storage/src/lib.rs | 5 +- crates/storage/src/types.rs | 203 +++++++++++++++++++++ scripts/build-all-apps.sh | 2 +- 16 files changed, 534 insertions(+), 151 deletions(-) create mode 100644 crates/sdk/src/types.rs create mode 100644 crates/storage/src/types.rs diff --git a/Cargo.lock b/Cargo.lock index 7bc82c02b..97d0ec68a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3658,6 +3658,8 @@ name = "kv-store" version = "0.1.0" dependencies = [ "calimero-sdk", + "calimero-storage", + "thiserror", ] [[package]] diff --git a/apps/kv-store/Cargo.toml b/apps/kv-store/Cargo.toml index 7ffe91112..f3cd9779a 100644 --- a/apps/kv-store/Cargo.toml +++ b/apps/kv-store/Cargo.toml @@ -10,4 +10,6 @@ license.workspace = true crate-type = ["cdylib"] [dependencies] +thiserror.workspace = true calimero-sdk = { path = "../../crates/sdk" } +calimero-storage = { path = "../../crates/storage" } diff --git a/apps/kv-store/src/lib.rs b/apps/kv-store/src/lib.rs index f446ceadb..05ce675c2 100644 --- a/apps/kv-store/src/lib.rs +++ b/apps/kv-store/src/lib.rs @@ -1,13 +1,20 @@ -use std::collections::hash_map::{Entry as HashMapEntry, HashMap}; +use std::collections::BTreeMap; -use calimero_sdk::borsh::{BorshDeserialize, BorshSerialize}; +use calimero_sdk::types::Error; use calimero_sdk::{app, env}; +use calimero_storage::address::Path; +use calimero_storage::entities::Element; +use calimero_storage::types::Map; +use calimero_storage::AtomicUnit; #[app::state(emits = for<'a> Event<'a>)] -#[derive(BorshDeserialize, BorshSerialize, Default)] -#[borsh(crate = "calimero_sdk::borsh")] +#[derive(AtomicUnit, Clone, Debug, PartialEq, PartialOrd)] +#[root] +#[type_id(1)] pub struct KvStore { - items: HashMap, + items: Map, + #[storage] + storage: Element, } #[app::event] @@ -22,70 +29,75 @@ pub enum Event<'a> { impl KvStore { #[app::init] pub fn init() -> KvStore { - KvStore::default() + KvStore { + items: Map::new(&Path::new("::items").unwrap()).unwrap(), + storage: Element::root(), + } } - pub fn set(&mut self, key: String, value: String) { + pub fn set(&mut self, key: String, value: String) -> Result<(), Error> { env::log(&format!("Setting key: {:?} to value: {:?}", key, value)); - match self.items.entry(key) { - HashMapEntry::Occupied(mut entry) => { - app::emit!(Event::Updated { - key: entry.key(), - value: &value, - }); - entry.insert(value); - } - HashMapEntry::Vacant(entry) => { - app::emit!(Event::Inserted { - key: entry.key(), - value: &value, - }); - entry.insert(value); - } + if self.items.get(&key)?.is_some() { + app::emit!(Event::Updated { + key: &key, + value: &value, + }); + } else { + app::emit!(Event::Inserted { + key: &key, + value: &value, + }); } + + self.items.insert(key, value)?; + + Ok(()) } - pub fn entries(&self) -> &HashMap { + pub fn entries(&self) -> Result, Error> { env::log("Getting all entries"); - &self.items + Ok(self.items.entries()?.collect()) } - pub fn get(&self, key: &str) -> Option<&str> { + pub fn len(&self) -> Result { + env::log("Getting the number of entries"); + + Ok(self.items.len()?) + } + + pub fn get(&self, key: &str) -> Result, Error> { env::log(&format!("Getting key: {:?}", key)); - self.items.get(key).map(|v| v.as_str()) + self.items.get(key).map_err(Into::into) } - pub fn get_unchecked(&self, key: &str) -> &str { + pub fn get_unchecked(&self, key: &str) -> Result { env::log(&format!("Getting key without checking: {:?}", key)); - match self.items.get(key) { - Some(value) => value.as_str(), - None => env::panic_str("Key not found."), - } + Ok(self.items.get(key)?.expect("Key not found.")) } - pub fn get_result(&self, key: &str) -> Result<&str, &str> { + pub fn get_result(&self, key: &str) -> Result { env::log(&format!("Getting key, possibly failing: {:?}", key)); - self.get(key).ok_or("Key not found.") + self.get(key)?.ok_or_else(|| Error::msg("Key not found.")) } - pub fn remove(&mut self, key: &str) { + pub fn remove(&mut self, key: &str) -> Result, Error> { env::log(&format!("Removing key: {:?}", key)); app::emit!(Event::Removed { key }); - self.items.remove(key); + self.items.remove(key).map_err(Into::into) } - pub fn clear(&mut self) { + pub fn clear(&mut self) -> Result<(), Error> { env::log("Clearing all entries"); app::emit!(Event::Cleared); - self.items.clear(); + self.items.clear().map_err(Into::into) } } diff --git a/crates/runtime/examples/demo.rs b/crates/runtime/examples/demo.rs index ac4d5cbae..40a214cb2 100644 --- a/crates/runtime/examples/demo.rs +++ b/crates/runtime/examples/demo.rs @@ -1,5 +1,6 @@ #![allow(unused_crate_dependencies, reason = "Not actually unused")] +use core::str; use std::env; use std::fs::File; use std::io::Read; @@ -10,7 +11,30 @@ use calimero_runtime::store::InMemoryStorage; use calimero_runtime::{run, Constraint}; use eyre::Result as EyreResult; use owo_colors::OwoColorize; -use serde_json::{json, to_vec as to_json_vec}; +use serde_json::{json, to_vec as to_json_vec, Value}; + +fn parse_payload( + payload: impl AsRef<[u8]> + ToOwned>, +) -> EyreResult { + if let Ok(json) = serde_json::from_slice::(payload.as_ref()) { + let func = const { + if PRETTY { + serde_json::to_string_pretty + } else { + serde_json::to_string + } + }; + + return func(&json).map_err(Into::into); + } + + let payload = match String::from_utf8(payload.to_owned()) { + Ok(string) => return Ok(string), + Err(err) => err.into_bytes(), + }; + + Ok(format!("{:?}", payload)) +} fn main() -> EyreResult<()> { let args: Vec = env::args().collect(); @@ -44,62 +68,122 @@ fn main() -> EyreResult<()> { /*max_storage_value_size:*/ (10 << 20).try_into()?, // 10 MiB ); - let cx = VMContext::new( - to_json_vec(&json!({ - "key": "foo" - }))?, - [0; 32], - [0; 32], - ); - let get_outcome = run(&file, "get", cx, &mut storage, &limits)?; - dbg!(get_outcome); - - let cx = VMContext::new( - to_json_vec(&json!({ - "key": "foo", - "value": "bar" - }))?, - [0; 32], - [0; 32], - ); - let set_outcome = run(&file, "set", cx, &mut storage, &limits)?; - dbg!(set_outcome); - - let cx = VMContext::new( - to_json_vec(&json!({ - "key": "foo" - }))?, - [0; 32], - [0; 32], - ); - let get_outcome = run(&file, "get", cx, &mut storage, &limits)?; - dbg!(get_outcome); - - let cx = VMContext::new( - to_json_vec(&json!({ - "key": "food" - }))?, - [0; 32], - [0; 32], - ); - let get_result_outcome = run(&file, "get_result", cx, &mut storage, &limits)?; - dbg!(get_result_outcome); - - let cx = VMContext::new( - to_json_vec(&json!({ - "key": "food" - }))?, - [0; 32], - [0; 32], - ); - let get_unchecked_outcome = run(&file, "get_unchecked", cx, &mut storage, &limits)?; - dbg!(get_unchecked_outcome); + let mut execute = |name: &str, payload: Option| -> EyreResult<()> { + println!("{}", "--".repeat(20).dimmed()); + println!( + "method: {}\nparams: {}", + name.bold(), + payload + .as_ref() + .map(ToString::to_string) + .unwrap_or_else(|| "{}".to_owned()) + .bold() + ); + + let cx = VMContext::new( + payload + .map(|p| to_json_vec(&p)) + .transpose()? + .unwrap_or_default(), + [0; 32], + [0; 32], + ); + + let outcome = run(&file, name, cx, &mut storage, &limits)?; + + // dbg!(&outcome); + + println!("Logs:"); + + if outcome.logs.is_empty() { + println!(" "); + } + + for log in outcome.logs { + let payload = parse_payload::(log.into_bytes())?; + + for line in payload.lines() { + println!(" | {}", line.bold()); + } + } + + println!("Events:"); + + if outcome.events.is_empty() { + println!(" "); + } + + for event in outcome.events { + println!(" kind: {}", event.kind.bold()); + println!(" data: {}", parse_payload::(event.data)?.bold()); + } + + match outcome.returns { + Ok(returns) => { + println!("{}:", "Returns".green()); + + let payload = returns + .map(|p| parse_payload::(p)) + .transpose()? + .unwrap_or_default(); + + let mut lines = payload.lines().peekable(); + + if lines.peek().is_none() { + println!(" "); + } + + for line in lines { + println!(" {}", line.bold()); + } + } + Err(err) => { + println!("{}:", "Error".red()); + + let error = match err { + calimero_runtime::errors::FunctionCallError::ExecutionError(payload) => { + parse_payload::(payload)? + } + _ => format!("{:#?}", err), + }; + + for line in error.lines() { + println!(" {}", line.bold()); + } + } + } + + Ok(()) + }; + + execute("init", None)?; + + execute("get", Some(json!({ "key": "foo" })))?; + + execute("set", Some(json!({ "key": "foo", "value": "bar" })))?; + execute("get", Some(json!({ "key": "foo" })))?; + + execute("entries", None)?; + + execute("set", Some(json!({ "key": "foo", "value": "baz" })))?; + execute("get", Some(json!({ "key": "foo" })))?; + + execute("set", Some(json!({ "key": "name", "value": "Jane" })))?; + execute("get", Some(json!({ "key": "name" })))?; + + execute("entries", None)?; + + execute("get_result", Some(json!({ "key": "foo" })))?; + execute("get_result", Some(json!({ "key": "height" })))?; + + execute("get_unchecked", Some(json!({ "key": "name" })))?; + execute("get_unchecked", Some(json!({ "key": "age" })))?; - println!("{}", "--".repeat(20).dimmed()); - println!("{:>35}", "Now, let's inspect the storage".bold()); - println!("{}", "--".repeat(20).dimmed()); + // println!("{}", "--".repeat(20).dimmed()); + // println!("{:>35}", "Now, let's inspect the storage".bold()); + // println!("{}", "--".repeat(20).dimmed()); - dbg!(storage); + // dbg!(storage); Ok(()) } diff --git a/crates/sdk/macros/src/logic/method.rs b/crates/sdk/macros/src/logic/method.rs index 196db4adc..5bdbda65f 100644 --- a/crates/sdk/macros/src/logic/method.rs +++ b/crates/sdk/macros/src/logic/method.rs @@ -101,7 +101,7 @@ impl ToTokens for PublicLogicMethod<'_> { quote! { let Some(#mutability app) = ::calimero_storage::interface::Interface::find_by_id::<#self_>( ::calimero_storage::address::Id::root() - ) else { + ).ok().flatten() else { ::calimero_sdk::env::panic_str("Failed to find or read app state") }; } @@ -113,11 +113,11 @@ impl ToTokens for PublicLogicMethod<'_> { quote! { if let Some(mut app) = ::calimero_storage::interface::Interface::find_by_id::<#self_>( ::calimero_storage::address::Id::root() - ) { + ).ok().flatten() { ::calimero_sdk::env::panic_str("Cannot initialize over already existing state.") }; - let app: #self_ = + let mut app: #self_ = } } else { quote! {} @@ -149,7 +149,9 @@ impl ToTokens for PublicLogicMethod<'_> { let state_finalizer = match (&self.self_type, init_method) { (Some(SelfType::Mutable(_)), _) | (_, true) => quote! { - ::calimero_storage::interface::Interface::save(&app); + if let Err(_) = ::calimero_storage::interface::Interface::save(&mut app) { + ::calimero_sdk::env::panic_str("Failed to save app state") + } }, _ => quote! {}, }; diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index df3133294..fcdf4d07f 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -5,6 +5,9 @@ pub mod event; mod returns; pub mod state; mod sys; +pub mod types; + +pub type Result = std::result::Result; pub mod app { pub use calimero_sdk_macros::{destroy, emit, event, init, logic, state}; diff --git a/crates/sdk/src/types.rs b/crates/sdk/src/types.rs new file mode 100644 index 000000000..849941573 --- /dev/null +++ b/crates/sdk/src/types.rs @@ -0,0 +1,26 @@ +use serde::Serialize; + +#[derive(Debug, Serialize)] +pub struct Error(#[serde(serialize_with = "error_string")] Box); + +fn error_string(error: &Box, serializer: S) -> Result +where + S: serde::Serializer, +{ + serializer.serialize_str(&error.to_string()) +} + +impl Error { + pub fn msg(s: &str) -> Self { + Self(s.to_owned().into()) + } +} + +impl From for Error +where + T: std::error::Error + 'static, +{ + fn from(error: T) -> Self { + Error(Box::new(error)) + } +} diff --git a/crates/storage-macros/Cargo.toml b/crates/storage-macros/Cargo.toml index 261f0b361..acfe03a6b 100644 --- a/crates/storage-macros/Cargo.toml +++ b/crates/storage-macros/Cargo.toml @@ -16,11 +16,10 @@ borsh.workspace = true quote.workspace = true syn.workspace = true -calimero-storage = { path = "../storage" } - [dev-dependencies] trybuild.workspace = true calimero-sdk = { path = "../sdk" } +calimero-storage = { path = "../storage" } [lints] workspace = true diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index cc110d3cf..6d33ac01b 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -1,6 +1,4 @@ use borsh as _; -/// For documentation links -use calimero_storage as _; use proc_macro::TokenStream; use quote::{format_ident, quote}; use syn::{parse_macro_input, Data, DeriveInput, Fields, LitInt, Type}; @@ -158,8 +156,10 @@ mod integration_tests_package_usage { attributes(children, collection, private, root, skip, storage, type_id) )] pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); + let mut input = parse_macro_input!(input as DeriveInput); let name = &input.ident; + let where_clause = input.generics.make_where_clause().clone(); + let (impl_generics, ty_generics, _) = input.generics.split_for_impl(); let is_root = input.attrs.iter().any(|attr| attr.path().is_ident("root")); let type_id = input .attrs @@ -203,7 +203,6 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { if skip || ident == storage_ident { None } else { - let getter = format_ident!("{}", ident); let setter = format_ident!("set_{}", ident); let setter_action = if private { @@ -218,10 +217,9 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { }; Some(quote! { - pub fn #getter(&self) -> &#ty { - &self.#ident - } - + #[doc = "Setter for the "] + #[doc = stringify!(#ident)] + #[doc = " field."] pub fn #setter(&mut self, value: #ty) -> bool { if self.#ident == value { false @@ -289,8 +287,18 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { .map(|f| f.ident.as_ref().unwrap()) .collect(); + let mut data_where_clause = where_clause.clone(); + + for ty in input.generics.type_params() { + let ident = &ty.ident; + data_where_clause.predicates.push(syn::parse_quote!( + #ident: calimero_sdk::borsh::BorshSerialize + + calimero_sdk::borsh::BorshDeserialize + )); + } + let deserialize_impl = quote! { - impl calimero_sdk::borsh::BorshDeserialize for #name { + impl #impl_generics calimero_sdk::borsh::BorshDeserialize for #name #ty_generics #data_where_clause { fn deserialize_reader(reader: &mut R) -> std::io::Result { let #storage_ident = #storage_ty::deserialize_reader(reader)?; Ok(Self { @@ -303,7 +311,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { }; let serialize_impl = quote! { - impl calimero_sdk::borsh::BorshSerialize for #name { + impl #impl_generics calimero_sdk::borsh::BorshSerialize for #name #ty_generics #data_where_clause { fn serialize(&self, writer: &mut W) -> std::io::Result<()> { calimero_sdk::borsh::BorshSerialize::serialize(&self.#storage_ident, writer)?; #(calimero_sdk::borsh::BorshSerialize::serialize(&self.#serializable_fields, writer)?;)* @@ -326,12 +334,21 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { } }; + let mut local_where_clause = where_clause.clone(); + + for ty in input.generics.type_params() { + let ident = &ty.ident; + local_where_clause.predicates.push(syn::parse_quote!( + #ident: PartialEq + )); + } + let expanded = quote! { - impl #name { + impl #impl_generics #name #ty_generics #local_where_clause { #(#field_implementations)* } - impl calimero_storage::entities::Data for #name { + impl #impl_generics calimero_storage::entities::Data for #name #ty_generics #data_where_clause { fn calculate_merkle_hash(&self) -> Result<[u8; 32], calimero_storage::interface::StorageError> { use calimero_storage::exports::Digest; let mut hasher = calimero_storage::exports::Sha256::new(); @@ -358,7 +375,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { match collection { #( stringify!(#collection_fields) => { - let child = <#collection_field_types as calimero_storage::entities::Collection>::Child::try_from_slice(slice) + let child = <#collection_field_types #ty_generics as calimero_storage::entities::Collection>::Child::try_from_slice(slice) .map_err(|e| calimero_storage::interface::StorageError::DeserializationError(e))?; child.calculate_merkle_hash() }, @@ -394,7 +411,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { } } - impl calimero_storage::entities::AtomicUnit for #name {} + impl #impl_generics calimero_storage::entities::AtomicUnit for #name #ty_generics #data_where_clause {} #deserialize_impl @@ -480,8 +497,10 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { /// child in a collection. #[proc_macro_derive(Collection, attributes(children))] pub fn collection_derive(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); + let mut input = parse_macro_input!(input as DeriveInput); let name = &input.ident; + let where_clause = input.generics.make_where_clause().clone(); + let (impl_generics, ty_generics, _) = input.generics.split_for_impl(); let child_type = input .attrs .iter() @@ -489,29 +508,57 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { .and_then(|attr| attr.parse_args::().ok()) .expect("Collection derive requires #[children(Type)] attribute"); - match &input.data { - Data::Struct(_) => {} + let fields = match input.data { + Data::Struct(data) => data.fields, Data::Enum(_) | Data::Union(_) => panic!("Collection can only be derived for structs"), - } + }; let deserialize_impl = quote! { - impl calimero_sdk::borsh::BorshDeserialize for #name { + impl #impl_generics calimero_sdk::borsh::BorshDeserialize for #name #ty_generics #where_clause { fn deserialize_reader(reader: &mut R) -> std::io::Result { - Ok(Self {}) + Ok(Self::default()) } } }; let serialize_impl = quote! { - impl calimero_sdk::borsh::BorshSerialize for #name { + impl #impl_generics calimero_sdk::borsh::BorshSerialize for #name #ty_generics #where_clause { fn serialize(&self, writer: &mut W) -> std::io::Result<()> { Ok(()) } } }; + let data = fields + .iter() + .map(|field| { + let ident = field.ident.as_ref().unwrap(); + quote! { #ident: Default::default(), } + }) + .collect::>(); + + let data = (!data.is_empty()).then(|| quote! { { #(#data)* } }); + + let default_impl = quote! { + impl #impl_generics ::core::default::Default for #name #ty_generics #where_clause { + fn default() -> Self { + Self #data + } + } + }; + + let mut collection_where_clause = where_clause.clone(); + + for ty in input.generics.type_params() { + let ident = &ty.ident; + collection_where_clause.predicates.push(syn::parse_quote!( + #ident: calimero_sdk::borsh::BorshSerialize + + calimero_sdk::borsh::BorshDeserialize + )); + } + let expanded = quote! { - impl calimero_storage::entities::Collection for #name { + impl #impl_generics calimero_storage::entities::Collection for #name #ty_generics #collection_where_clause { type Child = #child_type; fn name(&self) -> &str { @@ -519,6 +566,8 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { } } + #default_impl + #deserialize_impl #serialize_impl diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs index 8f67f911d..7cac8b516 100644 --- a/crates/storage-macros/tests/atomic_unit.rs +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -113,8 +113,8 @@ mod basics { let path = Path::new("::root::node").unwrap(); let unit = Simple::new(&path); - assert_eq!(unit.name(), ""); - assert_eq!(unit.value(), &0); + assert_eq!(unit.name, ""); + assert_eq!(unit.value, 0); } #[test] @@ -125,34 +125,34 @@ mod basics { _ = unit.set_name("Test Name".to_owned()); _ = unit.set_value(42); - assert_eq!(unit.name(), "Test Name"); - assert_eq!(unit.value(), &42); + assert_eq!(unit.name, "Test Name"); + assert_eq!(unit.value, 42); } #[test] fn setters__confirm_set() { let path = Path::new("::root::node").unwrap(); let mut unit = Simple::new(&path); - assert_ne!(unit.name(), "Test Name"); - assert_ne!(unit.value(), &42); + assert_ne!(unit.name, "Test Name"); + assert_ne!(unit.value, 42); assert!(unit.set_name("Test Name".to_owned())); assert!(unit.set_value(42)); - assert_eq!(unit.name(), "Test Name"); - assert_eq!(unit.value(), &42); + assert_eq!(unit.name, "Test Name"); + assert_eq!(unit.value, 42); } #[test] fn setters__confirm_not_set() { let path = Path::new("::root::node").unwrap(); let mut unit = Simple::new(&path); - assert_ne!(unit.name(), "Test Name"); - assert_ne!(unit.value(), &42); + assert_ne!(unit.name, "Test Name"); + assert_ne!(unit.value, 42); assert!(unit.set_name("Test Name".to_owned())); assert!(unit.set_value(42)); - assert_eq!(unit.name(), "Test Name"); - assert_eq!(unit.value(), &42); + assert_eq!(unit.name, "Test Name"); + assert_eq!(unit.value, 42); assert!(!unit.set_name("Test Name".to_owned())); assert!(!unit.set_value(42)); } @@ -198,9 +198,9 @@ mod visibility { let serialized = to_vec(&unit).unwrap(); let deserialized = Private::try_from_slice(&serialized).unwrap(); - assert_eq!(unit.public(), deserialized.public()); - assert_ne!(unit.private(), deserialized.private()); - assert_eq!(deserialized.private(), ""); + assert_eq!(unit.public, deserialized.public); + assert_ne!(unit.private, deserialized.private); + assert_eq!(deserialized.private, ""); } #[test] @@ -213,7 +213,7 @@ mod visibility { let serialized = to_vec(&unit).unwrap(); let deserialized = Simple::try_from_slice(&serialized).unwrap(); - assert_eq!(unit.name(), deserialized.name()); + assert_eq!(unit.name, deserialized.name); } #[test] @@ -229,7 +229,7 @@ mod visibility { let serialized = to_vec(&unit).unwrap(); let deserialized = Skipped::try_from_slice(&serialized).unwrap(); - assert_eq!(unit.included(), deserialized.included()); + assert_eq!(unit.included, deserialized.included); // Skipping fields also skips the getters // assert_ne!(unit.skipped(), deserialized.skipped()); assert_ne!(unit.skipped, deserialized.skipped); @@ -294,7 +294,7 @@ mod hashing { let mut hasher = Sha256::new(); hasher.update(unit.id().as_bytes()); - hasher.update(&to_vec(&unit.included()).unwrap()); + hasher.update(&to_vec(&unit.included).unwrap()); hasher.update(&to_vec(&unit.element().metadata()).unwrap()); let expected_hash: [u8; 32] = hasher.finalize().into(); @@ -325,9 +325,9 @@ mod traits { assert_eq!(unit, deserialized); assert_eq!(unit.id(), deserialized.id()); - assert_eq!(unit.name(), deserialized.name()); + assert_eq!(unit.name, deserialized.name); assert_eq!(unit.path(), deserialized.path()); - assert_eq!(unit.value(), deserialized.value()); + assert_eq!(unit.value, deserialized.value); assert_eq!(unit.element().id(), deserialized.element().id()); assert_eq!(unit.element().path(), deserialized.element().path()); assert_eq!(unit.element().metadata(), deserialized.element().metadata()); diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs index f67afad44..217741bef 100644 --- a/crates/storage-macros/tests/collection.rs +++ b/crates/storage-macros/tests/collection.rs @@ -113,7 +113,7 @@ mod hierarchy { let mut child = Child::new(&child_path); _ = child.set_content("Child Content".to_owned()); - assert_eq!(parent.title(), "Parent Title"); + assert_eq!(parent.title, "Parent Title"); // TODO: Add in tests for loading and checking children } @@ -174,9 +174,9 @@ mod traits { assert_eq!(unit, deserialized); assert_eq!(unit.id(), deserialized.id()); - assert_eq!(unit.name(), deserialized.name()); + assert_eq!(unit.name, deserialized.name); assert_eq!(unit.path(), deserialized.path()); - assert_eq!(unit.value(), deserialized.value()); + assert_eq!(unit.value, deserialized.value); assert_eq!(unit.element().id(), deserialized.element().id()); assert_eq!(unit.element().path(), deserialized.element().path()); assert_eq!(unit.element().metadata(), deserialized.element().metadata()); diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index b2bec4a1e..963f501e3 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -18,6 +18,7 @@ thiserror.workspace = true uuid.workspace = true calimero-sdk = { path = "../sdk" } +calimero-storage-macros = { path = "../storage-macros" } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] rand.workspace = true @@ -28,7 +29,6 @@ hex.workspace = true velcro.workspace = true calimero-sdk = { path = "../sdk" } -calimero-storage-macros = { path = "../storage-macros" } [lints] workspace = true diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 181caeb59..c085e0de1 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -283,7 +283,7 @@ pub trait AtomicUnit: Data {} /// } /// ``` /// -pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { +pub trait Collection { /// The associated type of any children that the [`Collection`] may have. type Child: Data; @@ -313,9 +313,7 @@ pub trait Collection: Clone + Debug + PartialEq + PartialOrd + Send + Sync { /// implemented, but for now only the most useful and least likely to be /// contentious methods are included, to keep the interface simple and focused. /// -pub trait Data: - BorshDeserialize + BorshSerialize + Clone + Debug + PartialEq + PartialOrd + Send + Sync -{ +pub trait Data: BorshDeserialize + BorshSerialize { /// Calculates the Merkle hash of the [`Element`]. /// /// This method calculates the Merkle hash of the [`Data`] for the @@ -681,7 +679,7 @@ impl Element { }, merkle_hash: [0; 32], #[expect(clippy::unwrap_used, reason = "This is expected to be valid")] - path: Path::new("::").unwrap(), + path: Path::new("::root").unwrap(), } } diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 3b24975db..1a61a882b 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -68,6 +68,9 @@ pub mod index; pub mod integration; pub mod interface; pub mod store; +pub mod types; + +pub use calimero_storage_macros::{AtomicUnit, Collection}; /// Re-exported types, mostly for use in macros (for convenience). pub mod exports { @@ -82,5 +85,5 @@ pub mod tests { #[cfg(test)] mod doc_tests_package_usage { - use {calimero_sdk as _, calimero_storage_macros as _}; + use calimero_sdk as _; } diff --git a/crates/storage/src/types.rs b/crates/storage/src/types.rs new file mode 100644 index 000000000..a576f04df --- /dev/null +++ b/crates/storage/src/types.rs @@ -0,0 +1,203 @@ +//! High-level data structures for storage. + +use std::borrow::Borrow; +use std::marker::PhantomData; + +use borsh::{BorshDeserialize, BorshSerialize}; +use thiserror::Error; + +// fixme! macro expects `calimero_storage` to be in deps +use crate as calimero_storage; +use crate::address::{Path, PathError}; +use crate::entities::{Data, Element}; +use crate::interface::{Interface, StorageError}; +use crate::{AtomicUnit, Collection}; + +/// General error type for storage operations while interacting with complex collections. +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum StoreError { + /// Error while interacting with storage. + #[error(transparent)] + StorageError(#[from] StorageError), + /// Error while interacting with a path. + #[error(transparent)] + PathError(#[from] PathError), +} + +/// A map collection that stores key-value pairs. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(255)] +#[root] +pub struct Map { + /// The entries in the map. + entries: Entries, + /// The storage element for the map. + #[storage] + storage: Element, +} + +/// A collection of entries in a map. +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Entry)] +struct Entries { + /// Helper to associate the generic types with the collection. + _priv: PhantomData<(K, V)>, +} + +/// An entry in a map. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(254)] +pub struct Entry { + /// The key for the entry. + key: K, + /// The value for the entry. + value: V, + /// The storage element for the entry. + #[storage] + storage: Element, +} + +impl Map { + /// Create a new map collection. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn new(path: &Path) -> Result { + let mut this = Self { + entries: Entries::default(), + storage: Element::new(path), + }; + + let _ = Interface::save(&mut this)?; + + Ok(this) + } + + /// Insert a key-value pair into the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn insert(&mut self, key: K, value: V) -> Result<(), StoreError> { + let path = self.path(); + // fixme! Reusing the Map's path for now. We "could" concatenate, but it's + // fixme! non-trivial and currently non-functional, so it's been left out + + let storage = Element::new(&path); + // fixme! This uses a random id for the map's entries, which will impair + // fixme! perf on the lookup, as we'd have to fetch and look through all + // fixme! entries to find the one that matches the key we're looking for + // fixme! ideally, the Id should be defined as hash(concat(map_id, key)) + // fixme! which will save on map-wide lookups, getting the item directly + + let _ = Interface::add_child_to( + self.storage.id(), + &mut self.entries, + &mut Entry { + key, + value, + storage, + }, + )?; + + Ok(()) + } + + /// Get an iterator over the entries in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn entries(&self) -> Result, StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + Ok(entries.into_iter().map(|entry| (entry.key, entry.value))) + } + + /// Get the number of entries in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn len(&self) -> Result { + Ok(Interface::child_info_for(self.id(), &self.entries)?.len()) + } + + /// Get the value for a key in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn get(&self, key: &Q) -> Result, StoreError> + where + K: Borrow, + Q: PartialEq + ?Sized, + { + for (key_, value) in self.entries()? { + if key_.borrow() == key { + return Ok(Some(value)); + } + } + + Ok(None) + } + + /// Remove a key from the map, returning the value at the key if it previously existed. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn remove(&mut self, key: &Q) -> Result, StoreError> + where + K: Borrow, + Q: PartialEq + ?Sized, + { + let entries = Interface::children_of(self.id(), &self.entries)?; + + let entry = entries.into_iter().find(|entry| entry.key.borrow() == key); + + if let Some(entry) = &entry { + let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + } + + Ok(entry.map(|entry| entry.value)) + } + + /// Clear the map, removing all entries. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn clear(&mut self) -> Result<(), StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + for entry in entries { + let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + } + + Ok(()) + } +} diff --git a/scripts/build-all-apps.sh b/scripts/build-all-apps.sh index ce7a68100..827c97e05 100755 --- a/scripts/build-all-apps.sh +++ b/scripts/build-all-apps.sh @@ -6,8 +6,8 @@ set -ex cd "$(dirname $0)" BUILD_SCRIPTS=( + "../apps/kv-store/build.sh" # todo! update to use CRDTs - # "../apps/kv-store/build.sh" # "../apps/gen-ext/build.sh" # "../apps/only-peers/build.sh" ) From 8c4fd5657a22ab8c975e6d3be4795a1d5caad7d9 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 15:22:19 +0300 Subject: [PATCH 20/75] feat: commit to new root hash following state mutations (#824) --- crates/context/src/lib.rs | 22 ++-- crates/node/src/lib.rs | 144 +++++++++++--------------- crates/node/src/runtime_compat.rs | 67 +++--------- crates/primitives/src/events.rs | 12 +-- crates/runtime/examples/demo.rs | 2 + crates/runtime/src/logic.rs | 39 ++++++- crates/runtime/src/logic/imports.rs | 1 + crates/sdk/macros/src/logic/method.rs | 1 + crates/sdk/src/env.rs | 4 + crates/sdk/src/sys.rs | 2 + crates/storage/src/env.rs | 19 ++++ crates/storage/src/interface.rs | 13 +-- crates/store/src/layer/temporal.rs | 4 + crates/store/src/tx.rs | 4 + 14 files changed, 176 insertions(+), 158 deletions(-) diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 4586760f7..9adaf99ab 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -234,13 +234,7 @@ impl ContextManager { ), )?; - handle.put( - &ContextMetaKey::new(context.id), - &ContextMetaValue::new( - ApplicationMetaKey::new(context.application_id), - context.root_hash.into(), - ), - )?; + self.save_context(context)?; self.subscribe(&context.id).await?; } @@ -255,6 +249,20 @@ impl ContextManager { Ok(()) } + pub fn save_context(&self, context: &Context) -> EyreResult<()> { + let mut handle = self.store.handle(); + + handle.put( + &ContextMetaKey::new(context.id), + &ContextMetaValue::new( + ApplicationMetaKey::new(context.application_id), + context.root_hash.into(), + ), + )?; + + Ok(()) + } + pub async fn join_context( &self, identity_secret: PrivateKey, diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index 8ed8220cc..ae334e0c6 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -18,10 +18,9 @@ use calimero_network::types::{NetworkEvent, PeerId}; use calimero_node_primitives::{CallError, ExecutionRequest}; use calimero_primitives::context::{Context, ContextId}; use calimero_primitives::events::{ - ApplicationEvent, ApplicationEventPayload, ExecutedTransactionPayload, NodeEvent, OutcomeEvent, - OutcomeEventPayload, PeerJoinedPayload, + ApplicationEvent, ApplicationEventPayload, NodeEvent, OutcomeEvent, OutcomeEventPayload, + PeerJoinedPayload, StateMutationPayload, }; -use calimero_primitives::hash::Hash; use calimero_primitives::identity::PublicKey; use calimero_runtime::logic::{Outcome, VMContext, VMLimits}; use calimero_runtime::Constraint; @@ -282,17 +281,18 @@ impl Node { for action in action_list.actions { debug!(?action, %source, "Received action"); - let Some(context) = self.ctx_manager.get_context(&action_list.context_id)? + let Some(mut context) = + self.ctx_manager.get_context(&action_list.context_id)? else { bail!("Context '{}' not found", action_list.context_id); }; match action { Action::Compare { id } => { - self.send_comparison_message(&context, id, action_list.public_key) + self.send_comparison_message(&mut context, id, action_list.public_key) .await } Action::Add { .. } | Action::Delete { .. } | Action::Update { .. } => { - self.apply_action(&context, &action, action_list.public_key) + self.apply_action(&mut context, &action, action_list.public_key) .await } }?; @@ -302,11 +302,11 @@ impl Node { PeerAction::Sync(sync) => { debug!(?sync, %source, "Received sync request"); - let Some(context) = self.ctx_manager.get_context(&sync.context_id)? else { + let Some(mut context) = self.ctx_manager.get_context(&sync.context_id)? else { bail!("Context '{}' not found", sync.context_id); }; let outcome = self - .compare_trees(&context, &sync.comparison, sync.public_key) + .compare_trees(&mut context, &sync.comparison, sync.public_key) .await?; match outcome.returns { @@ -318,13 +318,14 @@ impl Node { for action in local_actions { match action { Action::Compare { id } => { - self.send_comparison_message(&context, id, sync.public_key) + self.send_comparison_message(&mut context, id, sync.public_key) .await } Action::Add { .. } | Action::Delete { .. } | Action::Update { .. } => { - self.apply_action(&context, &action, sync.public_key).await + self.apply_action(&mut context, &action, sync.public_key) + .await } }?; } @@ -357,7 +358,7 @@ impl Node { async fn send_comparison_message( &mut self, - context: &Context, + context: &mut Context, id: Id, public_key: PublicKey, ) -> EyreResult<()> { @@ -393,7 +394,7 @@ impl Node { } pub async fn handle_call(&mut self, request: ExecutionRequest) { - let Ok(Some(context)) = self.ctx_manager.get_context(&request.context_id) else { + let Ok(Some(mut context)) = self.ctx_manager.get_context(&request.context_id) else { drop(request.outcome_sender.send(Err(CallError::ContextNotFound { context_id: request.context_id, }))); @@ -401,7 +402,7 @@ impl Node { }; let task = self.call_query( - &context, + &mut context, request.method, request.payload, request.executor_public_key, @@ -416,19 +417,13 @@ impl Node { async fn call_query( &mut self, - context: &Context, + context: &mut Context, method: String, payload: Vec, executor_public_key: PublicKey, ) -> Result { let outcome_option = self - .checked_execute( - context, - Some(context.root_hash), - method, - payload, - executor_public_key, - ) + .execute(context, method, payload, executor_public_key) .await .map_err(|e| { error!(%e, "Failed to execute query call."); @@ -440,6 +435,7 @@ impl Node { application_id: context.application_id, }); }; + if self .network_client .mesh_peer_count(TopicHash::from_raw(context.id)) @@ -455,6 +451,7 @@ impl Node { error!(%err, "Failed to deserialize actions."); CallError::InternalError })?; + self.push_action( context.id, PeerAction::ActionList(ActionMessage { @@ -476,14 +473,13 @@ impl Node { async fn apply_action( &mut self, - context: &Context, + context: &mut Context, action: &Action, public_key: PublicKey, ) -> EyreResult<()> { let outcome = self - .checked_execute( + .execute( context, - None, "apply_action".to_owned(), to_vec(action)?, public_key, @@ -496,13 +492,12 @@ impl Node { async fn compare_trees( &mut self, - context: &Context, + context: &mut Context, comparison: &Comparison, public_key: PublicKey, ) -> EyreResult { - self.checked_execute( + self.execute( context, - None, "compare_trees".to_owned(), to_vec(comparison)?, public_key, @@ -513,13 +508,12 @@ impl Node { async fn generate_comparison_data( &mut self, - context: &Context, + context: &mut Context, id: Id, public_key: PublicKey, ) -> EyreResult { - self.checked_execute( + self.execute( context, - None, "generate_comparison_data".to_owned(), to_vec(&id)?, public_key, @@ -528,49 +522,21 @@ impl Node { .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed"))) } - async fn checked_execute( - &mut self, - context: &Context, - hash: Option, - method: String, - payload: Vec, - executor_public_key: PublicKey, - ) -> EyreResult> { - if !self - .ctx_manager - .is_application_installed(&context.application_id) - .unwrap_or_default() - { - return Ok(None); - } - - self.execute(context, hash, method, payload, executor_public_key) - .await - .map(Some) - } - async fn execute( &mut self, - context: &Context, - hash: Option, + context: &mut Context, method: String, payload: Vec, executor_public_key: PublicKey, - ) -> EyreResult { - let mut storage = match hash { - Some(_) => RuntimeCompatStore::temporal(&mut self.store, context.id), - None => RuntimeCompatStore::read_only(&self.store, context.id), - }; + ) -> EyreResult> { + let mut storage = RuntimeCompatStore::new(&mut self.store, context.id); let Some(blob) = self .ctx_manager .load_application_blob(&context.application_id) .await? else { - bail!( - "fatal error: missing blob for application `{}`", - context.application_id - ); + return Ok(None); }; let outcome = calimero_runtime::run( @@ -581,39 +547,47 @@ impl Node { &get_runtime_limits()?, )?; - if let Some(hash) = hash { - assert!(storage.commit()?, "do we have a non-temporal store?"); + if outcome.returns.is_ok() { + if let Some(root_hash) = outcome.root_hash { + if outcome.actions.is_empty() { + eyre::bail!("Context state changed, but no actions were generated, discarding execution outcome to mitigate potential state inconsistency"); + } + + context.root_hash = root_hash.into(); + + drop( + self.node_events + .send(NodeEvent::Application(ApplicationEvent::new( + context.id, + ApplicationEventPayload::StateMutation(StateMutationPayload::new( + context.root_hash, + )), + ))), + ); + + self.ctx_manager.save_context(context)?; + } - // todo! return an error to the caller if the method did not write to storage - // todo! debate: when we switch to optimistic execution - // todo! we won't have query vs. mutate methods anymore, so this shouldn't matter + if !storage.is_empty() { + storage.commit()?; + } drop( self.node_events .send(NodeEvent::Application(ApplicationEvent::new( context.id, - ApplicationEventPayload::TransactionExecuted( - ExecutedTransactionPayload::new(hash), - ), + ApplicationEventPayload::OutcomeEvent(OutcomeEventPayload::new( + outcome + .events + .iter() + .map(|e| OutcomeEvent::new(e.kind.clone(), e.data.clone())) + .collect(), + )), ))), ); } - drop( - self.node_events - .send(NodeEvent::Application(ApplicationEvent::new( - context.id, - ApplicationEventPayload::OutcomeEvent(OutcomeEventPayload::new( - outcome - .events - .iter() - .map(|e| OutcomeEvent::new(e.kind.clone(), e.data.clone())) - .collect(), - )), - ))), - ); - - Ok(outcome) + Ok(Some(outcome)) } } diff --git a/crates/node/src/runtime_compat.rs b/crates/node/src/runtime_compat.rs index 745caef7d..ab6ddc0f4 100644 --- a/crates/node/src/runtime_compat.rs +++ b/crates/node/src/runtime_compat.rs @@ -4,41 +4,24 @@ use core::mem::transmute; use calimero_primitives::context::ContextId; use calimero_runtime::store::{Key, Storage, Value}; use calimero_store::key::ContextState as ContextStateKey; -use calimero_store::layer::read_only::ReadOnly; use calimero_store::layer::temporal::Temporal; use calimero_store::layer::{LayerExt, ReadLayer, WriteLayer}; use calimero_store::Store; use eyre::Result as EyreResult; -#[derive(Debug)] -#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] -pub enum RuntimeCompatStoreInner<'this, 'entry> { - Read(ReadOnly<'this, Store>), - Write(Temporal<'this, 'entry, Store>), -} - #[derive(Debug)] pub struct RuntimeCompatStore<'this, 'entry> { context_id: ContextId, - inner: RuntimeCompatStoreInner<'this, 'entry>, + inner: Temporal<'this, 'entry, Store>, // todo! unideal, will revisit the shape of WriteLayer to own keys (since they are now fixed-sized) keys: RefCell>, } impl<'this, 'entry> RuntimeCompatStore<'this, 'entry> { - pub fn temporal(store: &'this mut Store, context_id: ContextId) -> Self { - Self { - context_id, - inner: RuntimeCompatStoreInner::Write(store.temporal()), - keys: RefCell::default(), - } - } - - #[must_use] - pub fn read_only(store: &'this Store, context_id: ContextId) -> Self { + pub fn new(store: &'this mut Store, context_id: ContextId) -> Self { Self { context_id, - inner: RuntimeCompatStoreInner::Read(store.read_only()), + inner: store.temporal(), keys: RefCell::default(), } } @@ -60,12 +43,12 @@ impl<'this, 'entry> RuntimeCompatStore<'this, 'entry> { } } - pub fn commit(self) -> EyreResult { - if let RuntimeCompatStoreInner::Write(store) = self.inner { - return store.commit().and(Ok(true)); - } + pub fn commit(self) -> EyreResult<()> { + self.inner.commit() + } - Ok(false) + pub fn is_empty(&self) -> bool { + self.inner.is_empty() } } @@ -73,12 +56,7 @@ impl Storage for RuntimeCompatStore<'_, '_> { fn get(&self, key: &Key) -> Option> { let key = self.state_key(key)?; - let maybe_slice = match &self.inner { - RuntimeCompatStoreInner::Read(store) => store.get(key), - RuntimeCompatStoreInner::Write(store) => store.get(key), - }; - - let slice = maybe_slice.ok()??; + let slice = self.inner.get(key).ok()??; Some(slice.into_boxed().into_vec()) } @@ -86,17 +64,14 @@ impl Storage for RuntimeCompatStore<'_, '_> { fn remove(&mut self, key: &Key) -> Option> { let key = self.state_key(key)?; - let RuntimeCompatStoreInner::Write(store) = &mut self.inner else { - unimplemented!("Can not remove from read-only store."); - }; - - let old = store + let old = self + .inner .get(key) .ok() .flatten() .map(|slice| slice.into_boxed().into_vec()); - store.delete(key).ok()?; + self.inner.delete(key).ok()?; old } @@ -104,18 +79,15 @@ impl Storage for RuntimeCompatStore<'_, '_> { fn set(&mut self, key: Key, value: Value) -> Option { let key = self.state_key(&key)?; - let RuntimeCompatStoreInner::Write(store) = &mut self.inner else { - unimplemented!("Can not write to read-only store."); - }; - - let old = store + let old = self + .inner .has(key) .ok()? - .then(|| store.get(key).ok().flatten()) + .then(|| self.inner.get(key).ok().flatten()) .flatten() .map(|slice| slice.into_boxed().into_vec()); - store.put(key, value.into()).ok()?; + self.inner.put(key, value.into()).ok()?; old } @@ -125,11 +97,6 @@ impl Storage for RuntimeCompatStore<'_, '_> { return false; }; - match &self.inner { - RuntimeCompatStoreInner::Read(store) => store.has(key), - RuntimeCompatStoreInner::Write(store) => store.has(key), - } - .ok() - .unwrap_or(false) + self.inner.has(key).unwrap_or(false) } } diff --git a/crates/primitives/src/events.rs b/crates/primitives/src/events.rs index 09313d9e9..73f057492 100644 --- a/crates/primitives/src/events.rs +++ b/crates/primitives/src/events.rs @@ -34,7 +34,7 @@ impl ApplicationEvent { #[serde(tag = "type", content = "data", rename_all = "PascalCase")] #[non_exhaustive] pub enum ApplicationEventPayload { - TransactionExecuted(ExecutedTransactionPayload), + StateMutation(StateMutationPayload), PeerJoined(PeerJoinedPayload), OutcomeEvent(OutcomeEventPayload), } @@ -42,14 +42,14 @@ pub enum ApplicationEventPayload { #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct ExecutedTransactionPayload { - pub hash: Hash, +pub struct StateMutationPayload { + pub new_root: Hash, } -impl ExecutedTransactionPayload { +impl StateMutationPayload { #[must_use] - pub const fn new(hash: Hash) -> Self { - Self { hash } + pub const fn new(new_root: Hash) -> Self { + Self { new_root } } } diff --git a/crates/runtime/examples/demo.rs b/crates/runtime/examples/demo.rs index 40a214cb2..54e572a64 100644 --- a/crates/runtime/examples/demo.rs +++ b/crates/runtime/examples/demo.rs @@ -93,6 +93,8 @@ fn main() -> EyreResult<()> { // dbg!(&outcome); + println!("New Root Hash: {:?}", outcome.root_hash); + println!("Actions: {}", outcome.actions.len()); println!("Logs:"); if outcome.logs.is_empty() { diff --git a/crates/runtime/src/logic.rs b/crates/runtime/src/logic.rs index 057acf5a2..4cab55e34 100644 --- a/crates/runtime/src/logic.rs +++ b/crates/runtime/src/logic.rs @@ -104,9 +104,10 @@ pub struct VMLogic<'a> { limits: &'a VMLimits, registers: Registers, returns: Option, Vec>>, - actions: Vec>, logs: Vec, events: Vec, + actions: Vec>, + root_hash: Option<[u8; 32]>, } impl<'a> VMLogic<'a> { @@ -118,9 +119,10 @@ impl<'a> VMLogic<'a> { limits, registers: Registers::default(), returns: None, - actions: vec![], logs: vec![], events: vec![], + actions: vec![], + root_hash: None, } } @@ -146,9 +148,10 @@ impl<'a> VMLogic<'a> { #[non_exhaustive] pub struct Outcome { pub returns: VMLogicResult>, FunctionCallError>, - pub actions: Vec>, pub logs: Vec, pub events: Vec, + pub actions: Vec>, + pub root_hash: Option<[u8; 32]>, // execution runtime // current storage usage of the app } @@ -173,9 +176,11 @@ impl VMLogic<'_> { Outcome { returns, - actions: self.actions, + logs: self.logs, events: self.events, + actions: self.actions, + root_hash: self.root_hash, } } } @@ -199,6 +204,24 @@ impl VMHostFunctions<'_> { Ok(buf) } + fn read_guest_memory_sized( + &self, + ptr: u64, + len: u64, + ) -> VMLogicResult<[u8; N]> { + let len = usize::try_from(len).map_err(|_| HostError::IntegerOverflow)?; + + if len != N { + return Err(HostError::InvalidMemoryAccess.into()); + } + + let mut buf = [0; N]; + + self.borrow_memory().read(ptr, &mut buf)?; + + Ok(buf) + } + fn get_string(&self, ptr: u64, len: u64) -> VMLogicResult { let buf = self.read_guest_memory(ptr, len)?; @@ -356,6 +379,14 @@ impl VMHostFunctions<'_> { Ok(()) } + pub fn commit_root(&mut self, ptr: u64, len: u64) -> VMLogicResult<()> { + let bytes = self.read_guest_memory_sized::<32>(ptr, len)?; + + let _ = self.with_logic_mut(|logic| logic.root_hash.replace(bytes)); + + Ok(()) + } + pub fn storage_read( &mut self, key_ptr: u64, diff --git a/crates/runtime/src/logic/imports.rs b/crates/runtime/src/logic/imports.rs index 61c129c49..f74ed53cf 100644 --- a/crates/runtime/src/logic/imports.rs +++ b/crates/runtime/src/logic/imports.rs @@ -43,6 +43,7 @@ impl VMLogic<'_> { fn emit(kind_ptr: u64, kind_len: u64, data_ptr: u64, data_len: u64); fn send_action(action_ptr: u64, action_len: u64); + fn commit_root(ptr: u64, len: u64); fn storage_write( key_ptr: u64, diff --git a/crates/sdk/macros/src/logic/method.rs b/crates/sdk/macros/src/logic/method.rs index 5bdbda65f..b3074526a 100644 --- a/crates/sdk/macros/src/logic/method.rs +++ b/crates/sdk/macros/src/logic/method.rs @@ -149,6 +149,7 @@ impl ToTokens for PublicLogicMethod<'_> { let state_finalizer = match (&self.self_type, init_method) { (Some(SelfType::Mutable(_)), _) | (_, true) => quote! { + ::calimero_storage::entities::Data::element_mut(&mut app).update(); if let Err(_) = ::calimero_storage::interface::Interface::save(&mut app) { ::calimero_sdk::env::panic_str("Failed to save app state") } diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index 919c51bdc..6951de846 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -162,6 +162,10 @@ pub fn send_action(action: &[u8]) { unsafe { sys::send_action(Buffer::from(action)) } } +pub fn commit_root(action: &[u8; 32]) { + unsafe { sys::commit_root(Buffer::from(&action[..])) } +} + #[inline] pub fn storage_read(key: &[u8]) -> Option> { unsafe { sys::storage_read(Buffer::from(key), DATA_REGISTER) } diff --git a/crates/sdk/src/sys.rs b/crates/sdk/src/sys.rs index ea64a0c08..121555e20 100644 --- a/crates/sdk/src/sys.rs +++ b/crates/sdk/src/sys.rs @@ -21,6 +21,8 @@ wasm_imports! { fn emit(event: Event<'_>); // -- fn send_action(action: Buffer<'_>); + fn commit_root(root: Buffer<'_>); + // -- fn storage_read(key: Buffer<'_>, register_id: RegisterId) -> Bool; fn storage_remove(key: Buffer<'_>, register_id: RegisterId) -> Bool; fn storage_write(key: Buffer<'_>, value: Buffer<'_>, register_id: RegisterId) -> Bool; diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index b5771fb85..ea4f3a118 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -24,6 +24,13 @@ pub fn send_action(action: &Action) { imp::send_action(&to_vec(&action).expect("Failed to serialize action")); } +/// Commits the root hash to the runtime. +/// This function should be called after the root hash has been updated. +/// +pub fn commit_root(root_hash: &[u8; 32]) { + imp::commit_root(root_hash); +} + /// Reads data from persistent storage. /// /// # Parameters @@ -85,6 +92,12 @@ mod calimero_vm { env::send_action(action); } + /// Commits the root hash to the runtime. + /// This function should be called after the root hash has been updated. + pub(super) fn commit_root(root_hash: &[u8; 32]) { + env::commit_root(root_hash); + } + /// Reads data from persistent storage. pub(super) fn storage_read(key: Key) -> Option> { env::storage_read(&key.to_bytes()) @@ -130,6 +143,12 @@ mod mocked { // Do nothing. } + /// Commits the root hash to the runtime. + /// This function should be called after the root hash has been updated. + pub(super) fn commit_root(_root_hash: &[u8; 32]) { + // Do nothing. + } + /// Reads data from persistent storage. pub(super) fn storage_read(key: Key) -> Option> { DefaultStore::storage_read(key) diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index b2c17271d..f0ab18b1b 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -226,7 +226,7 @@ use thiserror::Error as ThisError; use crate::address::{Id, Path}; use crate::entities::{ChildInfo, Collection, Data}; -use crate::env::send_action; +use crate::env; use crate::index::Index; use crate::store::{Key, MainStorage, StorageAdaptor}; @@ -925,7 +925,7 @@ impl MainInterface { // We have to serialise here rather than send the Action itself, as the SDK // has no knowledge of the Action type, and cannot use it as it would be a // circular dependency. - send_action(&Action::Delete { + env::send_action(&Action::Delete { id: child_id, ancestors, }); @@ -1039,6 +1039,10 @@ impl MainInterface { &to_vec(entity).map_err(StorageError::SerializationError)?, ); + if Id::root() == id { + env::commit_root(&own_hash); + } + entity.element_mut().is_dirty = false; let action = if is_new { @@ -1057,10 +1061,7 @@ impl MainInterface { } }; - // We have to serialise here rather than send the Action itself, as the SDK - // has no knowledge of the Action type, and cannot use it as it would be a - // circular dependency. - send_action(&action); + env::send_action(&action); Ok(true) } diff --git a/crates/store/src/layer/temporal.rs b/crates/store/src/layer/temporal.rs index a1c97053f..de0bb2231 100644 --- a/crates/store/src/layer/temporal.rs +++ b/crates/store/src/layer/temporal.rs @@ -24,6 +24,10 @@ where shadow: Transaction::default(), } } + + pub fn is_empty(&self) -> bool { + self.shadow.is_empty() + } } impl Layer for Temporal<'_, '_, L> diff --git a/crates/store/src/tx.rs b/crates/store/src/tx.rs index d7d31811d..842a26dbd 100644 --- a/crates/store/src/tx.rs +++ b/crates/store/src/tx.rs @@ -18,6 +18,10 @@ pub enum Operation<'a> { } impl<'a> Transaction<'a> { + pub fn is_empty(&self) -> bool { + self.cols.is_empty() + } + pub(crate) fn raw_get(&self, column: Column, key: &[u8]) -> Option<&Operation<'_>> { self.cols.get(&column).and_then(|ops| ops.get(key)) } From c26e29dd19de6c1c52323570809243e34d0ce825 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 15:43:12 +0300 Subject: [PATCH 21/75] feat: update node execution flow (#825) --- crates/context/src/lib.rs | 3 +- crates/node-primitives/src/lib.rs | 13 --- crates/node/src/interactive_cli/call.rs | 109 +++++++++++------------- crates/node/src/lib.rs | 25 +++--- crates/server/src/jsonrpc.rs | 10 +-- crates/server/src/jsonrpc/mutate.rs | 1 - crates/server/src/jsonrpc/query.rs | 1 - 7 files changed, 64 insertions(+), 98 deletions(-) diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 9adaf99ab..3c3dcc1c0 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -13,7 +13,7 @@ use calimero_context_config::types::{ }; use calimero_network::client::NetworkClient; use calimero_network::types::IdentTopic; -use calimero_node_primitives::{ExecutionRequest, Finality, ServerSender}; +use calimero_node_primitives::{ExecutionRequest, ServerSender}; use calimero_primitives::application::{Application, ApplicationId, ApplicationSource}; use calimero_primitives::blobs::BlobId; use calimero_primitives::context::{Context, ContextId, ContextInvitationPayload}; @@ -210,7 +210,6 @@ impl ContextManager { initialization_params, identity_secret.public_key(), tx, - Some(Finality::Local), )) .await?; diff --git a/crates/node-primitives/src/lib.rs b/crates/node-primitives/src/lib.rs index fb56d074f..a69c0af5b 100644 --- a/crates/node-primitives/src/lib.rs +++ b/crates/node-primitives/src/lib.rs @@ -14,7 +14,6 @@ pub struct ExecutionRequest { pub payload: Vec, pub executor_public_key: PublicKey, pub outcome_sender: oneshot::Sender>, - pub finality: Option, } impl ExecutionRequest { @@ -25,7 +24,6 @@ impl ExecutionRequest { payload: Vec, executor_public_key: PublicKey, outcome_sender: oneshot::Sender>, - finality: Option, ) -> Self { Self { context_id, @@ -33,21 +31,10 @@ impl ExecutionRequest { payload, executor_public_key, outcome_sender, - finality, } } } -#[derive(Clone, Copy, Debug, Eq, PartialEq)] -#[expect( - clippy::exhaustive_enums, - reason = "There will never be any other variants" -)] -pub enum Finality { - Local, - Global, -} - pub type ServerSender = mpsc::Sender; #[derive(Clone, Copy, Debug, Deserialize, Serialize, ThisError)] diff --git a/crates/node/src/interactive_cli/call.rs b/crates/node/src/interactive_cli/call.rs index 9cf6ee8ac..e36ef301b 100644 --- a/crates/node/src/interactive_cli/call.rs +++ b/crates/node/src/interactive_cli/call.rs @@ -1,10 +1,8 @@ -use calimero_node_primitives::ExecutionRequest; use calimero_primitives::context::ContextId; use calimero_primitives::identity::PublicKey; use clap::Parser; use owo_colors::OwoColorize; use serde_json::Value; -use tokio::sync::oneshot; use crate::Node; @@ -19,73 +17,48 @@ pub struct CallCommand { impl CallCommand { pub async fn run(self, node: &mut Node) -> eyre::Result<()> { let ind = ">>".blue(); - let (outcome_sender, outcome_receiver) = oneshot::channel(); let Ok(Some(context)) = node.ctx_manager.get_context(&self.context_id) else { println!("{} context not found: {}", ind, self.context_id); return Ok(()); }; - node.handle_call(ExecutionRequest::new( - context.id, - self.method.to_owned(), - serde_json::to_vec(&self.payload)?, - self.executor_key, - outcome_sender, - None, - )) - .await; + let outcome_result = node + .handle_call( + context.id, + self.method.to_owned(), + serde_json::to_vec(&self.payload)?, + self.executor_key, + ) + .await; - drop(tokio::spawn(async move { - if let Ok(outcome_result) = outcome_receiver.await { - println!("{}", ind); + match outcome_result { + Ok(outcome) => { + match outcome.returns { + Ok(result) => match result { + Some(result) => { + println!("{} return value:", ind); + #[expect(clippy::option_if_let_else, reason = "clearer here")] + let result = if let Ok(value) = serde_json::from_slice::(&result) + { + format!( + "(json): {}", + format!("{:#}", value) + .lines() + .map(|line| line.cyan().to_string()) + .collect::>() + .join("\n") + ) + } else { + format!("(raw): {:?}", result.cyan()) + }; - match outcome_result { - Ok(outcome) => { - match outcome.returns { - Ok(result) => match result { - Some(result) => { - println!("{} return value:", ind); - #[expect(clippy::option_if_let_else, reason = "clearer here")] - let result = if let Ok(value) = - serde_json::from_slice::(&result) - { - format!( - "(json): {}", - format!("{:#}", value) - .lines() - .map(|line| line.cyan().to_string()) - .collect::>() - .join("\n") - ) - } else { - format!("(raw): {:?}", result.cyan()) - }; - - for line in result.lines() { - println!("{} > {}", ind, line); - } - } - None => println!("{} (no return value)", ind), - }, - Err(err) => { - let err = format!("{:#?}", err); - - println!("{} error:", ind); - for line in err.lines() { - println!("{} > {}", ind, line.yellow()); - } + for line in result.lines() { + println!("{} > {}", ind, line); } } - - if !outcome.logs.is_empty() { - println!("{} logs:", ind); - - for log in outcome.logs { - println!("{} > {}", ind, log.cyan()); - } - } - } + None => println!("{} (no return value)", ind), + }, Err(err) => { let err = format!("{:#?}", err); @@ -95,8 +68,24 @@ impl CallCommand { } } } + + if !outcome.logs.is_empty() { + println!("{} logs:", ind); + + for log in outcome.logs { + println!("{} > {}", ind, log.cyan()); + } + } + } + Err(err) => { + let err = format!("{:#?}", err); + + println!("{} error:", ind); + for line in err.lines() { + println!("{} > {}", ind, line.yellow()); + } } - })); + } Ok(()) } diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index ae334e0c6..3814d98d6 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -179,7 +179,7 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { server = Box::pin(pending()); continue; } - Some(request) = server_receiver.recv() => node.handle_call(request).await, + Some(request) = server_receiver.recv() => node.handle_server_request(request).await, _ = catchup_interval_tick.tick() => node.perform_interval_catchup().await, } } @@ -393,16 +393,9 @@ impl Node { Ok(()) } - pub async fn handle_call(&mut self, request: ExecutionRequest) { - let Ok(Some(mut context)) = self.ctx_manager.get_context(&request.context_id) else { - drop(request.outcome_sender.send(Err(CallError::ContextNotFound { - context_id: request.context_id, - }))); - return; - }; - - let task = self.call_query( - &mut context, + pub async fn handle_server_request(&mut self, request: ExecutionRequest) { + let task = self.handle_call( + request.context_id, request.method, request.payload, request.executor_public_key, @@ -415,15 +408,19 @@ impl Node { }))); } - async fn call_query( + async fn handle_call( &mut self, - context: &mut Context, + context_id: ContextId, method: String, payload: Vec, executor_public_key: PublicKey, ) -> Result { + let Ok(Some(mut context)) = self.ctx_manager.get_context(&context_id) else { + return Err(CallError::ContextNotFound { context_id }); + }; + let outcome_option = self - .execute(context, method, payload, executor_public_key) + .execute(&mut context, method, payload, executor_public_key) .await .map_err(|e| { error!(%e, "Failed to execute query call."); diff --git a/crates/server/src/jsonrpc.rs b/crates/server/src/jsonrpc.rs index 905adab04..8527566c8 100644 --- a/crates/server/src/jsonrpc.rs +++ b/crates/server/src/jsonrpc.rs @@ -2,9 +2,7 @@ use std::sync::Arc; use axum::routing::{post, MethodRouter}; use axum::{Extension, Json}; -use calimero_node_primitives::{ - CallError as PrimitiveCallError, ExecutionRequest, Finality, ServerSender, -}; +use calimero_node_primitives::{CallError as PrimitiveCallError, ExecutionRequest, ServerSender}; use calimero_primitives::context::ContextId; use calimero_primitives::identity::PublicKey; use calimero_server_primitives::jsonrpc::{ @@ -18,6 +16,8 @@ use thiserror::Error as ThisError; use tokio::sync::oneshot; use tracing::{debug, error, info}; +use crate::config::ServerConfig; + mod mutate; mod query; @@ -153,7 +153,6 @@ pub(crate) async fn call( context_id: ContextId, method: String, args: Vec, - writes: bool, executor_public_key: PublicKey, ) -> Result, CallError> { let (outcome_sender, outcome_receiver) = oneshot::channel(); @@ -165,7 +164,6 @@ pub(crate) async fn call( args, executor_public_key, outcome_sender, - writes.then_some(Finality::Global), )) .await .map_err(|e| CallError::InternalError(eyre!("Failed to send call message: {}", e)))?; @@ -216,5 +214,3 @@ macro_rules! mount_method { } pub(crate) use mount_method; - -use crate::config::ServerConfig; diff --git a/crates/server/src/jsonrpc/mutate.rs b/crates/server/src/jsonrpc/mutate.rs index 3e1cb330c..eb23245ba 100644 --- a/crates/server/src/jsonrpc/mutate.rs +++ b/crates/server/src/jsonrpc/mutate.rs @@ -23,7 +23,6 @@ async fn handle(request: MutateRequest, state: Arc) -> EyreResult< request.context_id, request.method, args, - true, request.executor_public_key, ) .await diff --git a/crates/server/src/jsonrpc/query.rs b/crates/server/src/jsonrpc/query.rs index 5fc49e1c7..b13c53b9c 100644 --- a/crates/server/src/jsonrpc/query.rs +++ b/crates/server/src/jsonrpc/query.rs @@ -23,7 +23,6 @@ async fn handle(request: QueryRequest, state: Arc) -> EyreResult Date: Tue, 22 Oct 2024 13:56:48 +0300 Subject: [PATCH 22/75] chore: remove `calimero_store::key::storage` (#839) --- crates/store/src/iter.rs | 2 +- crates/store/src/key.rs | 2 - crates/store/src/key/storage.rs | 85 ------------------------------ crates/store/src/layer/temporal.rs | 1 + 4 files changed, 2 insertions(+), 88 deletions(-) delete mode 100644 crates/store/src/key/storage.rs diff --git a/crates/store/src/iter.rs b/crates/store/src/iter.rs index 6843d8fce..78d342261 100644 --- a/crates/store/src/iter.rs +++ b/crates/store/src/iter.rs @@ -139,7 +139,7 @@ impl<'a, K> Iter<'a, K, Unstructured> { type Key<'a> = Slice<'a>; type Value<'a> = Slice<'a>; -impl DBIter for Iter<'_, K, Unstructured> { +impl DBIter for Iter<'_, K, V> { fn seek(&mut self, key: Key<'_>) -> EyreResult>> { self.inner.seek(key) } diff --git a/crates/store/src/key.rs b/crates/store/src/key.rs index 4d4f192dd..4e9ff7f58 100644 --- a/crates/store/src/key.rs +++ b/crates/store/src/key.rs @@ -18,13 +18,11 @@ mod blobs; mod component; mod context; mod generic; -mod storage; pub use application::ApplicationMeta; pub use blobs::BlobMeta; pub use context::{ContextConfig, ContextIdentity, ContextMeta, ContextState, ContextTransaction}; pub use generic::Generic; -pub use storage::Storage; pub struct Key(GenericArray); diff --git a/crates/store/src/key/storage.rs b/crates/store/src/key/storage.rs deleted file mode 100644 index 076ddd962..000000000 --- a/crates/store/src/key/storage.rs +++ /dev/null @@ -1,85 +0,0 @@ -//! Storage key. -//! -//! This module contains the storage key type and related functionality. It is -//! used to identify records in the storage system, and to provide a means of -//! accessing and manipulating them. -//! - -use borsh::{BorshDeserialize, BorshSerialize}; -use generic_array::typenum::U16; -use generic_array::GenericArray; - -use super::component::KeyComponent; -use crate::db::Column; -use crate::key::{AsKeyParts, FromKeyParts, Key}; - -/// The identifier for a storage record, based around a UUID. -#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] -pub struct StorageId; - -impl KeyComponent for StorageId { - // UUIDs are 16 bytes long. - type LEN = U16; -} - -#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] -#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))] -pub struct Storage(Key<(StorageId,)>); - -impl Storage { - /// Creates a new instance of the [`Storage`] key. - /// - /// # Parameters - /// - /// * `id` - The unique identifier for the storage record. This is a UUID. - /// - #[must_use] - pub fn new(id: [u8; 16]) -> Self { - Self(Key(GenericArray::from(id))) - } - - /// The unique identifier for the storage record. This is a UUID. - #[must_use] - pub fn id(&self) -> [u8; 16] { - *self.0.as_ref() - } -} - -impl AsKeyParts for Storage { - type Components = (StorageId,); - - fn column() -> Column { - // TODO: Check if this is the most appropriate column type. - Column::Generic - } - - fn as_key(&self) -> &Key { - &self.0 - } -} - -impl From for [u8; 16] { - fn from(storage: Storage) -> Self { - *storage.0.as_ref() - } -} - -impl From<[u8; 16]> for Storage { - fn from(bytes: [u8; 16]) -> Self { - Self(Key(GenericArray::from(bytes))) - } -} - -impl From<&[u8; 16]> for Storage { - fn from(bytes: &[u8; 16]) -> Self { - Self(Key(GenericArray::from(*bytes))) - } -} - -impl FromKeyParts for Storage { - type Error = (); - - fn try_from_parts(parts: Key) -> Result { - Ok(Self(parts)) - } -} diff --git a/crates/store/src/layer/temporal.rs b/crates/store/src/layer/temporal.rs index de0bb2231..a467ae82b 100644 --- a/crates/store/src/layer/temporal.rs +++ b/crates/store/src/layer/temporal.rs @@ -135,6 +135,7 @@ impl<'a, K: AsKeyParts + FromKeyParts> DBIter for TemporalIterator<'a, '_, K> { loop { if let Some((key, op)) = shadow_iter.next() { + // todo! if key is in inner, we've already seen it, continue match op { Operation::Delete => continue, Operation::Put { value } => self.value = Some(value.into()), From eead79e592afcac5a21469542627da64b0b7bf12 Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Tue, 22 Oct 2024 18:59:25 +0200 Subject: [PATCH 23/75] chore: merged mutate and query into one query method (#843) Co-authored-by: Fran Domovic <93442516+frdomovic@users.noreply.github.com> --- crates/meroctl/src/cli/jsonrpc.rs | 22 ++---- crates/server-primitives/src/jsonrpc.rs | 71 ++----------------- crates/server/src/jsonrpc.rs | 6 +- .../src/jsonrpc/{mutate.rs => execute.rs} | 18 ++--- crates/server/src/jsonrpc/query.rs | 45 ------------ packages/calimero-sdk/package.json | 2 +- packages/calimero-sdk/src/rpc/jsonrpc.ts | 21 +++++- 7 files changed, 42 insertions(+), 143 deletions(-) rename crates/server/src/jsonrpc/{mutate.rs => execute.rs} (58%) delete mode 100644 crates/server/src/jsonrpc/query.rs diff --git a/crates/meroctl/src/cli/jsonrpc.rs b/crates/meroctl/src/cli/jsonrpc.rs index d31075595..84498b162 100644 --- a/crates/meroctl/src/cli/jsonrpc.rs +++ b/crates/meroctl/src/cli/jsonrpc.rs @@ -1,7 +1,7 @@ use calimero_config::ConfigFile; use calimero_primitives::context::ContextId; use calimero_server_primitives::jsonrpc::{ - MutateRequest, QueryRequest, Request, RequestId, RequestPayload, Version, + ExecuteRequest, Request, RequestId, RequestPayload, Version, }; use clap::{Parser, ValueEnum}; use eyre::{bail, Result as EyreResult}; @@ -12,7 +12,7 @@ use crate::common::{get_response, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] pub struct JsonRpcCommand { - /// Type of method call, either QUERY or MUTATE + /// Type of method execute call #[arg(long)] pub call_type: CallType, @@ -28,15 +28,14 @@ pub struct JsonRpcCommand { #[arg(long, default_value = "{}")] pub args_json: String, - /// Id of the JsonRpc call + /// Id of the JsonRpc execute call #[arg(long, default_value = "dontcare")] pub id: String, } #[derive(Clone, Debug, ValueEnum)] pub enum CallType { - Query, - Mutate, + Execute, } #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] @@ -61,18 +60,7 @@ impl JsonRpcCommand { let json_payload: Value = serde_json::from_str(&self.args_json)?; let payload = match self.call_type { - CallType::Query => RequestPayload::Query(QueryRequest::new( - self.context_id, - self.method, - json_payload, - config - .identity - .public() - .try_into_ed25519()? - .to_bytes() - .into(), - )), - CallType::Mutate => RequestPayload::Mutate(MutateRequest::new( + CallType::Execute => RequestPayload::Execute(ExecuteRequest::new( self.context_id, self.method, json_payload, diff --git a/crates/server-primitives/src/jsonrpc.rs b/crates/server-primitives/src/jsonrpc.rs index a65af1937..235edcd4a 100644 --- a/crates/server-primitives/src/jsonrpc.rs +++ b/crates/server-primitives/src/jsonrpc.rs @@ -73,12 +73,9 @@ impl Request { #[serde(tag = "method", content = "params", rename_all = "snake_case")] #[non_exhaustive] pub enum RequestPayload { - Query(QueryRequest), - Mutate(MutateRequest), + Execute(ExecuteRequest), } -// ************************************************************************* -// **************************** response ******************************* #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] @@ -132,20 +129,18 @@ pub enum ServerResponseError { err: Option, }, } -// ************************************************************************* -// **************************** call method ******************************* #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct QueryRequest { +pub struct ExecuteRequest { pub context_id: ContextId, pub method: String, pub args_json: Value, pub executor_public_key: PublicKey, } -impl QueryRequest { +impl ExecuteRequest { #[must_use] pub const fn new( context_id: ContextId, @@ -165,64 +160,11 @@ impl QueryRequest { #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct QueryResponse { +pub struct ExecuteResponse { pub output: Option, } -impl QueryResponse { - #[must_use] - pub const fn new(output: Option) -> Self { - Self { output } - } -} - -#[derive(Debug, Deserialize, Serialize, ThisError)] -#[error("QueryError")] -#[serde(tag = "type", content = "data")] -#[non_exhaustive] -pub enum QueryError { - SerdeError { message: String }, - CallError(CallError), - FunctionCallError(String), -} -// ************************************************************************* - -// **************************** call_mut method **************************** -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct MutateRequest { - pub context_id: ContextId, - pub method: String, - pub args_json: Value, - pub executor_public_key: PublicKey, -} - -impl MutateRequest { - #[must_use] - pub const fn new( - context_id: ContextId, - method: String, - args_json: Value, - executor_public_key: PublicKey, - ) -> Self { - Self { - context_id, - method, - args_json, - executor_public_key, - } - } -} - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct MutateResponse { - pub output: Option, -} - -impl MutateResponse { +impl ExecuteResponse { #[must_use] pub const fn new(output: Option) -> Self { Self { output } @@ -233,9 +175,8 @@ impl MutateResponse { #[error("MutateError")] #[serde(tag = "type", content = "data")] #[non_exhaustive] -pub enum MutateError { +pub enum ExecuteError { SerdeError { message: String }, CallError(CallError), FunctionCallError(String), } -// ************************************************************************* diff --git a/crates/server/src/jsonrpc.rs b/crates/server/src/jsonrpc.rs index 8527566c8..cb8197a2c 100644 --- a/crates/server/src/jsonrpc.rs +++ b/crates/server/src/jsonrpc.rs @@ -18,8 +18,7 @@ use tracing::{debug, error, info}; use crate::config::ServerConfig; -mod mutate; -mod query; +mod execute; #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[non_exhaustive] @@ -69,8 +68,7 @@ async fn handle_request( debug!(?request, "Received request"); let body = match from_json_value::(request.payload) { Ok(payload) => match payload { - RequestPayload::Query(request) => request.handle(state).await.to_res_body(), - RequestPayload::Mutate(request) => request.handle(state).await.to_res_body(), + RequestPayload::Execute(request) => request.handle(state).await.to_res_body(), _ => unreachable!("Unsupported JSON RPC method"), }, Err(err) => { diff --git a/crates/server/src/jsonrpc/mutate.rs b/crates/server/src/jsonrpc/execute.rs similarity index 58% rename from crates/server/src/jsonrpc/mutate.rs rename to crates/server/src/jsonrpc/execute.rs index eb23245ba..f2bf0f6bf 100644 --- a/crates/server/src/jsonrpc/mutate.rs +++ b/crates/server/src/jsonrpc/execute.rs @@ -1,18 +1,18 @@ use std::sync::Arc; -use calimero_server_primitives::jsonrpc::{MutateError, MutateRequest, MutateResponse}; +use calimero_server_primitives::jsonrpc::{ExecuteError, ExecuteRequest, ExecuteResponse}; use eyre::{bail, Result as EyreResult}; use serde_json::{from_str as from_json_str, to_vec as to_json_vec, Value}; use crate::jsonrpc::{call, mount_method, CallError, ServiceState}; -mount_method!(MutateRequest-> Result, handle); +mount_method!(ExecuteRequest-> Result, handle); -async fn handle(request: MutateRequest, state: Arc) -> EyreResult { +async fn handle(request: ExecuteRequest, state: Arc) -> EyreResult { let args = match to_json_vec(&request.args_json) { Ok(args) => args, Err(err) => { - bail!(MutateError::SerdeError { + bail!(ExecuteError::SerdeError { message: err.to_string() }) } @@ -28,16 +28,16 @@ async fn handle(request: MutateRequest, state: Arc) -> EyreResult< .await { Ok(Some(output)) => match from_json_str::(&output) { - Ok(v) => Ok(MutateResponse::new(Some(v))), - Err(err) => bail!(MutateError::SerdeError { + Ok(v) => Ok(ExecuteResponse::new(Some(v))), + Err(err) => bail!(ExecuteError::SerdeError { message: err.to_string() }), }, - Ok(None) => Ok(MutateResponse::new(None)), + Ok(None) => Ok(ExecuteResponse::new(None)), Err(err) => match err { - CallError::UpstreamCallError(err) => bail!(MutateError::CallError(err)), + CallError::UpstreamCallError(err) => bail!(ExecuteError::CallError(err)), CallError::UpstreamFunctionCallError(message) => { - bail!(MutateError::FunctionCallError(message)) + bail!(ExecuteError::FunctionCallError(message)) } CallError::InternalError(err) => bail!(err), }, diff --git a/crates/server/src/jsonrpc/query.rs b/crates/server/src/jsonrpc/query.rs deleted file mode 100644 index b13c53b9c..000000000 --- a/crates/server/src/jsonrpc/query.rs +++ /dev/null @@ -1,45 +0,0 @@ -use std::sync::Arc; - -use calimero_server_primitives::jsonrpc::{QueryError, QueryRequest, QueryResponse}; -use eyre::{bail, Result as EyreResult}; -use serde_json::{from_str as from_json_str, to_vec as to_json_vec, Value}; - -use crate::jsonrpc::{call, mount_method, CallError, ServiceState}; - -mount_method!(QueryRequest-> Result, handle); - -async fn handle(request: QueryRequest, state: Arc) -> EyreResult { - let args = match to_json_vec(&request.args_json) { - Ok(args) => args, - Err(err) => { - bail!(QueryError::SerdeError { - message: err.to_string() - }) - } - }; - - match call( - state.server_sender.clone(), - request.context_id, - request.method, - args, - request.executor_public_key, - ) - .await - { - Ok(Some(output)) => match from_json_str::(&output) { - Ok(v) => Ok(QueryResponse::new(Some(v))), - Err(err) => bail!(QueryError::SerdeError { - message: err.to_string() - }), - }, - Ok(None) => Ok(QueryResponse::new(None)), - Err(err) => match err { - CallError::UpstreamCallError(err) => bail!(QueryError::CallError(err)), - CallError::UpstreamFunctionCallError(message) => { - bail!(QueryError::FunctionCallError(message)) - } - CallError::InternalError(err) => bail!(err), - }, - } -} diff --git a/packages/calimero-sdk/package.json b/packages/calimero-sdk/package.json index a158fcfcc..59bcb69a9 100644 --- a/packages/calimero-sdk/package.json +++ b/packages/calimero-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@calimero-is-near/calimero-p2p-sdk", - "version": "0.0.42", + "version": "0.1.0", "description": "Javascript library to interact with Calimero P2P node", "type": "module", "main": "lib/index.js", diff --git a/packages/calimero-sdk/src/rpc/jsonrpc.ts b/packages/calimero-sdk/src/rpc/jsonrpc.ts index d6c53b2a9..c21a7ef99 100644 --- a/packages/calimero-sdk/src/rpc/jsonrpc.ts +++ b/packages/calimero-sdk/src/rpc/jsonrpc.ts @@ -53,23 +53,40 @@ export class JsonRpcClient implements RpcClient { }); } + /** + * @deprecated The method should not be used, use execute instead. + */ public async query( params: RpcQueryParams, config?: RequestConfig, ): Promise>> { return await this.request, RpcQueryResponse>( - 'query', + 'execute', params, config, ); } + /** + * @deprecated The method should not be used, use execute instead. + */ public async mutate( params: RpcMutateParams, config?: RequestConfig, ): Promise>> { return await this.request, RpcMutateResponse>( - 'mutate', + 'execute', + params, + config, + ); + } + + public async execute( + params: RpcQueryParams, + config?: RequestConfig, + ): Promise>> { + return await this.request, RpcQueryResponse>( + 'execute', params, config, ); From 984f3bc7cdf2a48f0a5235ecb1cc86c9a36d60a6 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 16:08:58 +0300 Subject: [PATCH 24/75] chore: remove tx store references (#840) --- crates/context/src/lib.rs | 27 -------- crates/node/src/interactive_cli.rs | 3 - crates/node/src/interactive_cli/context.rs | 4 +- .../node/src/interactive_cli/transactions.rs | 50 -------------- crates/store/src/db.rs | 1 - crates/store/src/key.rs | 2 +- crates/store/src/key/context.rs | 67 ------------------- crates/store/src/types.rs | 4 +- crates/store/src/types/context.rs | 33 +-------- 9 files changed, 4 insertions(+), 187 deletions(-) delete mode 100644 crates/node/src/interactive_cli/transactions.rs diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 3c3dcc1c0..64c63f65a 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -23,7 +23,6 @@ use calimero_store::key::{ ApplicationMeta as ApplicationMetaKey, BlobMeta as BlobMetaKey, ContextConfig as ContextConfigKey, ContextIdentity as ContextIdentityKey, ContextMeta as ContextMetaKey, ContextState as ContextStateKey, - ContextTransaction as ContextTransactionKey, }; use calimero_store::types::{ ApplicationMeta as ApplicationMetaValue, ContextConfig as ContextConfigValue, @@ -500,32 +499,6 @@ impl ContextManager { } } - { - let mut keys = vec![]; - - let mut iter = handle.iter::()?; - - let first = iter - .seek(ContextTransactionKey::new(*context_id, [0; 32])) - .transpose(); - - for k in first.into_iter().chain(iter.keys()) { - let k = k?; - - if k.context_id() != *context_id { - break; - } - - keys.push(k); - } - - drop(iter); - - for k in keys { - handle.delete(&k)?; - } - } - self.unsubscribe(context_id).await?; Ok(true) diff --git a/crates/node/src/interactive_cli.rs b/crates/node/src/interactive_cli.rs index 8e57ea2bf..b4a90c63b 100644 --- a/crates/node/src/interactive_cli.rs +++ b/crates/node/src/interactive_cli.rs @@ -11,7 +11,6 @@ pub mod identity; pub mod peers; pub mod state; pub mod store; -pub mod transactions; use clap::{Parser, Subcommand}; @@ -33,7 +32,6 @@ pub enum SubCommands { Peers(peers::PeersCommand), Store(store::StoreCommand), State(state::StateCommand), - Transactions(transactions::TransactionsCommand), } pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { @@ -57,7 +55,6 @@ pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { SubCommands::Peers(peers) => peers.run(node.network_client.clone().into()).await, SubCommands::State(state) => state.run(node).await, SubCommands::Store(store) => store.run(node).await, - SubCommands::Transactions(transactions) => transactions.run(node).await, }; if let Err(err) = result { diff --git a/crates/node/src/interactive_cli/context.rs b/crates/node/src/interactive_cli/context.rs index b920fdf41..37eccfe06 100644 --- a/crates/node/src/interactive_cli/context.rs +++ b/crates/node/src/interactive_cli/context.rs @@ -46,10 +46,8 @@ impl ContextCommand { match self.command { Commands::Ls => { - let ind = ""; // Define the variable `ind` as an empty string or any desired value - println!( - "{ind} {c1:44} | {c2:44} | Last Transaction", + "{c1:44} | {c2:44} | Root Hash", c1 = "Context ID", c2 = "Application ID", ); diff --git a/crates/node/src/interactive_cli/transactions.rs b/crates/node/src/interactive_cli/transactions.rs deleted file mode 100644 index 9b9ef1d1c..000000000 --- a/crates/node/src/interactive_cli/transactions.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::str::FromStr; - -use calimero_primitives::context::ContextId; -use calimero_primitives::hash::Hash; -use calimero_store::key::ContextTransaction as ContextTransactionKey; -use clap::Parser; -use eyre::Result; -use owo_colors::OwoColorize; - -use crate::Node; - -#[derive(Debug, Parser)] -pub struct TransactionsCommand { - context_id: String, -} - -impl TransactionsCommand { - pub async fn run(self, node: &Node) -> Result<()> { - let handle = node.store.handle(); - let mut iter = handle.iter::()?; - - let first = 'first: { - let context_id = ContextId::from_str(&self.context_id)?; - let Some(k) = iter - .seek(ContextTransactionKey::new(context_id, [0u8; 32])) - .transpose() - else { - break 'first None; - }; - - Some((k, iter.read())) - }; - - println!("{:44} | {:44}", "Hash", "Prior Hash"); - - for (k, v) in first.into_iter().chain(iter.entries()) { - let (k, v) = (k?, v?); - let entry = format!( - "{:44} | {}", - Hash::from(k.transaction_id()), - Hash::from(v.prior_hash), - ); - for line in entry.lines() { - println!("{}", line.cyan()); - } - } - - Ok(()) - } -} diff --git a/crates/store/src/db.rs b/crates/store/src/db.rs index b9c50e00c..018571826 100644 --- a/crates/store/src/db.rs +++ b/crates/store/src/db.rs @@ -21,7 +21,6 @@ pub enum Column { Config, Identity, State, - Transaction, Blobs, Application, Generic, diff --git a/crates/store/src/key.rs b/crates/store/src/key.rs index 4e9ff7f58..5f1dccff8 100644 --- a/crates/store/src/key.rs +++ b/crates/store/src/key.rs @@ -21,7 +21,7 @@ mod generic; pub use application::ApplicationMeta; pub use blobs::BlobMeta; -pub use context::{ContextConfig, ContextIdentity, ContextMeta, ContextState, ContextTransaction}; +pub use context::{ContextConfig, ContextIdentity, ContextMeta, ContextState}; pub use generic::Generic; pub struct Key(GenericArray); diff --git a/crates/store/src/key/context.rs b/crates/store/src/key/context.rs index 329f79c1e..81b57192f 100644 --- a/crates/store/src/key/context.rs +++ b/crates/store/src/key/context.rs @@ -239,70 +239,3 @@ impl Debug for ContextState { .finish() } } - -#[derive(Clone, Copy, Debug)] -pub struct TransactionId; - -impl KeyComponent for TransactionId { - type LEN = U32; -} - -#[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] -#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))] -pub struct ContextTransaction(Key<(ContextId, TransactionId)>); - -impl ContextTransaction { - #[must_use] - pub fn new(context_id: PrimitiveContextId, transaction_id: [u8; 32]) -> Self { - Self(Key( - GenericArray::from(*context_id).concat(transaction_id.into()) - )) - } - - #[must_use] - pub fn context_id(&self) -> PrimitiveContextId { - let mut context_id = [0; 32]; - - context_id.copy_from_slice(&AsRef::<[_; 64]>::as_ref(&self.0)[..32]); - - context_id.into() - } - - #[must_use] - pub fn transaction_id(&self) -> [u8; 32] { - let mut transaction_id = [0; 32]; - - transaction_id.copy_from_slice(&AsRef::<[_; 64]>::as_ref(&self.0)[32..]); - - transaction_id - } -} - -impl AsKeyParts for ContextTransaction { - type Components = (ContextId, TransactionId); - - fn column() -> Column { - Column::Transaction - } - - fn as_key(&self) -> &Key { - &self.0 - } -} - -impl FromKeyParts for ContextTransaction { - type Error = Infallible; - - fn try_from_parts(parts: Key) -> Result { - Ok(Self(parts)) - } -} - -impl Debug for ContextTransaction { - fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - f.debug_struct("ContextTransaction") - .field("context_id", &self.context_id()) - .field("transaction_id", &self.transaction_id()) - .finish() - } -} diff --git a/crates/store/src/types.rs b/crates/store/src/types.rs index 79b89fcbb..26a6f5250 100644 --- a/crates/store/src/types.rs +++ b/crates/store/src/types.rs @@ -8,9 +8,7 @@ mod generic; pub use application::ApplicationMeta; pub use blobs::BlobMeta; -pub use context::{ - ContextConfig, ContextIdentity, ContextMeta, ContextState, ContextTransaction, Hash, -}; +pub use context::{ContextConfig, ContextIdentity, ContextMeta, ContextState}; pub use generic::GenericData; pub trait PredefinedEntry: AsKeyParts { diff --git a/crates/store/src/types/context.rs b/crates/store/src/types/context.rs index 2bba15666..12b8e8733 100644 --- a/crates/store/src/types/context.rs +++ b/crates/store/src/types/context.rs @@ -4,7 +4,7 @@ use crate::entry::{Borsh, Identity}; use crate::key::{ ApplicationMeta as ApplicationMetaKey, ContextConfig as ContextConfigKey, ContextIdentity as ContextIdentityKey, ContextMeta as ContextMetaKey, - ContextState as ContextStateKey, ContextTransaction as ContextTransactionKey, + ContextState as ContextStateKey, }; use crate::slice::Slice; use crate::types::PredefinedEntry; @@ -88,34 +88,3 @@ impl PredefinedEntry for ContextIdentityKey { type Codec = Borsh; type DataType<'a> = ContextIdentity; } - -#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq)] -#[non_exhaustive] -pub struct ContextTransaction { - pub method: Box, - pub payload: Box<[u8]>, - pub prior_hash: Hash, - pub executor_public_key: [u8; 32], -} - -impl ContextTransaction { - #[must_use] - pub const fn new( - method: Box, - payload: Box<[u8]>, - prior_hash: Hash, - executor_public_key: [u8; 32], - ) -> Self { - Self { - method, - payload, - prior_hash, - executor_public_key, - } - } -} - -impl PredefinedEntry for ContextTransactionKey { - type Codec = Borsh; - type DataType<'a> = ContextTransaction; -} From 3814ab4d2670a2d8565f05682e4ad3dd7e00f90d Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 16:40:02 +0300 Subject: [PATCH 25/75] feat: generalize deleting whole context scopes (#847) --- crates/context/src/lib.rs | 101 +++++++++++++++++++++++++------------ crates/store/src/handle.rs | 1 + crates/store/src/key.rs | 10 ++-- 3 files changed, 75 insertions(+), 37 deletions(-) diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 64c63f65a..7db803125 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -22,8 +22,9 @@ use calimero_primitives::identity::{PrivateKey, PublicKey}; use calimero_store::key::{ ApplicationMeta as ApplicationMetaKey, BlobMeta as BlobMetaKey, ContextConfig as ContextConfigKey, ContextIdentity as ContextIdentityKey, - ContextMeta as ContextMetaKey, ContextState as ContextStateKey, + ContextMeta as ContextMetaKey, ContextState as ContextStateKey, FromKeyParts, Key, }; +use calimero_store::layer::{ReadLayer, WriteLayer}; use calimero_store::types::{ ApplicationMeta as ApplicationMetaValue, ContextConfig as ContextConfigValue, ContextIdentity as ContextIdentityValue, ContextMeta as ContextMetaValue, @@ -439,69 +440,103 @@ impl ContextManager { let key = ContextMetaKey::new(*context_id); + // todo! perhaps we shouldn't bother checking? if !handle.has(&key)? { return Ok(false); } handle.delete(&key)?; - handle.delete(&ContextConfigKey::new(*context_id))?; - { - let mut keys = vec![]; + self.delete_context_scoped::(context_id, [0; 32], None)?; + self.delete_context_scoped::(context_id, [0; 32], None)?; - let mut iter = handle.iter::()?; + self.unsubscribe(context_id).await?; - let first = iter - .seek(ContextIdentityKey::new(*context_id, [0; 32].into())) - .transpose(); + Ok(true) + } - for k in first.into_iter().chain(iter.keys()) { - let k = k?; + #[expect(clippy::unwrap_in_result, reason = "pre-validated")] + fn delete_context_scoped( + &self, + context_id: &ContextId, + offset: [u8; N], + end: Option<[u8; N]>, + ) -> EyreResult<()> + where + K: FromKeyParts, + { + let expected_length = Key::::len(); - if k.context_id() != *context_id { - break; - } + if context_id.len() + N != expected_length { + bail!( + "key length mismatch, expected: {}, got: {}", + Key::::len(), + N + ) + } - keys.push(k); - } + let mut keys = vec![]; - drop(iter); + let mut key = context_id.to_vec(); - for k in keys { - handle.delete(&k)?; - } - } + let end = end + .map(|end| { + key.extend_from_slice(&end); - { - let mut keys = vec![]; + let end = Key::::try_from_slice(&key).expect("length pre-matched"); - let mut iter = handle.iter::()?; + K::try_from_parts(end) + }) + .transpose()?; - let first = iter - .seek(ContextStateKey::new(*context_id, [0; 32])) - .transpose(); + // fixme! store.handle() is prolematic here for lifetime reasons + let mut store = self.store.clone(); + + 'outer: loop { + key.truncate(context_id.len()); + key.extend_from_slice(&offset); + + let offset = Key::::try_from_slice(&key).expect("length pre-matched"); + + let mut iter = store.iter()?; + + let first = iter.seek(K::try_from_parts(offset)?).transpose(); + + if first.is_none() { + break; + } for k in first.into_iter().chain(iter.keys()) { let k = k?; - if k.context_id() != *context_id { - break; + let key = k.as_key(); + + if let Some(end) = end { + if key == end.as_key() { + break 'outer; + } + } + + if !key.as_bytes().starts_with(&**context_id) { + break 'outer; } keys.push(k); + + if keys.len() == 100 { + break; + } } drop(iter); - for k in keys { - handle.delete(&k)?; + for k in keys.drain(..) { + store.delete(&k)?; } } - self.unsubscribe(context_id).await?; - - Ok(true) + Ok(()) } pub fn get_contexts_ids(&self, start: Option) -> EyreResult> { diff --git a/crates/store/src/handle.rs b/crates/store/src/handle.rs index 3e1eb23e7..6c9075a7a 100644 --- a/crates/store/src/handle.rs +++ b/crates/store/src/handle.rs @@ -29,6 +29,7 @@ pub enum HandleError { CodecError(E), } +// todo! detach 'a from EntryError type EntryError<'a, E> = HandleError<<::Codec as Codec<'a, ::DataType<'a>>>::Error>; diff --git a/crates/store/src/key.rs b/crates/store/src/key.rs index 5f1dccff8..6c0af4b04 100644 --- a/crates/store/src/key.rs +++ b/crates/store/src/key.rs @@ -76,14 +76,16 @@ impl Key { self.as_bytes().into() } - pub(crate) fn try_from_slice(slice: &Slice<'_>) -> Option { - let bytes = slice.as_ref(); + pub const fn len() -> usize { + GenericArray::::len() + } - (bytes.len() == GenericArray::::len()).then_some(())?; + pub fn try_from_slice(slice: &[u8]) -> Option { + (slice.len() == Key::::len()).then_some(())?; let mut key = GenericArray::default(); - key.copy_from_slice(bytes); + key.copy_from_slice(slice); Some(Self(key)) } From f690a873cb9805bb499d2fb2e2df19e5460c20a9 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 16:45:42 +0300 Subject: [PATCH 26/75] fix: runtime compat reference (#848) --- crates/node/src/runtime_compat.rs | 9 ++++++--- crates/store/src/tx.rs | 4 +--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/node/src/runtime_compat.rs b/crates/node/src/runtime_compat.rs index ab6ddc0f4..40b625d45 100644 --- a/crates/node/src/runtime_compat.rs +++ b/crates/node/src/runtime_compat.rs @@ -1,5 +1,6 @@ use core::cell::RefCell; use core::mem::transmute; +use std::sync::Arc; use calimero_primitives::context::ContextId; use calimero_runtime::store::{Key, Storage, Value}; @@ -14,7 +15,7 @@ pub struct RuntimeCompatStore<'this, 'entry> { context_id: ContextId, inner: Temporal<'this, 'entry, Store>, // todo! unideal, will revisit the shape of WriteLayer to own keys (since they are now fixed-sized) - keys: RefCell>, + keys: RefCell>>, } impl<'this, 'entry> RuntimeCompatStore<'this, 'entry> { @@ -35,11 +36,13 @@ impl<'this, 'entry> RuntimeCompatStore<'this, 'entry> { let mut keys = self.keys.borrow_mut(); - keys.push(ContextStateKey::new(self.context_id, state_key)); + keys.push(Arc::new(ContextStateKey::new(self.context_id, state_key))); // safety: TemporalStore lives as long as Self, so the reference will hold unsafe { - transmute::, Option<&'entry ContextStateKey>>(keys.last()) + transmute::, Option<&'entry ContextStateKey>>( + keys.last().map(|x| &**x), + ) } } diff --git a/crates/store/src/tx.rs b/crates/store/src/tx.rs index 842a26dbd..e270387f6 100644 --- a/crates/store/src/tx.rs +++ b/crates/store/src/tx.rs @@ -27,9 +27,7 @@ impl<'a> Transaction<'a> { } pub fn get(&self, key: &K) -> Option<&Operation<'_>> { - self.cols - .get(&K::column()) - .and_then(|ops| ops.get(key.as_key().as_bytes())) + self.cols.get(&K::column())?.get(key.as_key().as_bytes()) } pub fn put(&mut self, key: &'a K, value: Slice<'a>) { From e2c236e0330b1b407029b0f66a5766e36d67e702 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 16:55:26 +0300 Subject: [PATCH 27/75] fix: handle fallible context creation (#850) --- crates/context/src/lib.rs | 107 +++++++++++------- crates/node-primitives/src/lib.rs | 10 +- crates/node/src/interactive_cli/context.rs | 22 +++- .../admin/handlers/context/create_context.rs | 14 ++- 4 files changed, 107 insertions(+), 46 deletions(-) diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 7db803125..4b500f8d0 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -41,7 +41,7 @@ use reqwest::{Client, Url}; use tokio::fs::File; use tokio::sync::{oneshot, RwLock}; use tokio_util::compat::TokioAsyncReadCompatExt; -use tracing::info; +use tracing::{error, info}; pub mod config; @@ -145,7 +145,8 @@ impl ContextManager { application_id: ApplicationId, identity_secret: Option, initialization_params: Vec, - ) -> EyreResult<(ContextId, PublicKey)> { + result_sender: oneshot::Sender>, + ) -> EyreResult<()> { let (context_secret, identity_secret) = { let mut rng = rand::thread_rng(); @@ -176,44 +177,74 @@ impl ContextManager { bail!("Application is not installed on node.") }; - self.config_client - .mutate( - self.client_config.new.network.as_str().into(), - self.client_config.new.contract_id.as_str().into(), - context.id.rt().expect("infallible conversion"), - ) - .add_context( - context.id.rt().expect("infallible conversion"), - identity_secret - .public_key() - .rt() - .expect("infallible conversion"), - ApplicationConfig::new( - application.id.rt().expect("infallible conversion"), - application.blob.rt().expect("infallible conversion"), - application.size, - ApplicationSourceConfig(application.source.to_string().into()), - ApplicationMetadataConfig(Repr::new(application.metadata.into())), - ), - ) - .send(|b| SigningKey::from_bytes(&context_secret).sign(b)) - .await?; - self.add_context(&context, identity_secret, true).await?; - let (tx, _) = oneshot::channel(); + let (tx, rx) = oneshot::channel(); + + let this = self.clone(); + let finalizer = async move { + this.server_sender + .send(ExecutionRequest::new( + context.id, + "init".to_owned(), + initialization_params, + identity_secret.public_key(), + tx, + )) + .await?; + + if let Some(return_value) = rx.await??.returns? { + bail!( + "Unexpected return value from init method: {:?}", + return_value + ) + } - self.server_sender - .send(ExecutionRequest::new( - context.id, - "init".to_owned(), - initialization_params, - identity_secret.public_key(), - tx, - )) - .await?; + this.config_client + .mutate( + this.client_config.new.network.as_str().into(), + this.client_config.new.contract_id.as_str().into(), + context.id.rt().expect("infallible conversion"), + ) + .add_context( + context.id.rt().expect("infallible conversion"), + identity_secret + .public_key() + .rt() + .expect("infallible conversion"), + ApplicationConfig::new( + application.id.rt().expect("infallible conversion"), + application.blob.rt().expect("infallible conversion"), + application.size, + ApplicationSourceConfig(application.source.to_string().into()), + ApplicationMetadataConfig(Repr::new(application.metadata.into())), + ), + ) + .send(|b| SigningKey::from_bytes(&context_secret).sign(b)) + .await?; + + Ok((context.id, identity_secret.public_key())) + }; + + let this = self.clone(); + let context_id = context.id; + let _ignored = tokio::spawn(async move { + let result = finalizer.await; + + if result.is_err() { + if let Err(err) = this.delete_context(&context_id).await { + error!(%context_id, %err, "Failed to clean up context after failed creation"); + } + } - Ok((context.id, identity_secret.public_key())) + if let Err(err) = this.subscribe(&context.id).await { + error!(%context_id, %err, "Failed to subscribe to context after creation"); + } + + let _ignored = result_sender.send(result); + }); + + Ok(()) } async fn add_context( @@ -234,8 +265,6 @@ impl ContextManager { )?; self.save_context(context)?; - - self.subscribe(&context.id).await?; } handle.put( @@ -351,6 +380,8 @@ impl ContextManager { self.add_context(&context, identity_secret, !context_exists) .await?; + self.subscribe(&context.id).await?; + let _ = self.state.write().await.pending_catchup.insert(context_id); info!(%context_id, "Joined context with pending catchup"); diff --git a/crates/node-primitives/src/lib.rs b/crates/node-primitives/src/lib.rs index a69c0af5b..32a42d6c8 100644 --- a/crates/node-primitives/src/lib.rs +++ b/crates/node-primitives/src/lib.rs @@ -38,13 +38,17 @@ impl ExecutionRequest { pub type ServerSender = mpsc::Sender; #[derive(Clone, Copy, Debug, Deserialize, Serialize, ThisError)] -#[error("CallError")] #[serde(tag = "type", content = "data")] #[non_exhaustive] pub enum CallError { - ApplicationNotInstalled { application_id: ApplicationId }, + #[error("no connected peers")] NoConnectedPeers, + #[error("context not found: {context_id}")] + ContextNotFound { context_id: ContextId }, + #[error("application not installed: {application_id}")] + ApplicationNotInstalled { application_id: ApplicationId }, + #[error("action rejected")] ActionRejected, + #[error("internal error")] InternalError, - ContextNotFound { context_id: ContextId }, } diff --git a/crates/node/src/interactive_cli/context.rs b/crates/node/src/interactive_cli/context.rs index 37eccfe06..bbab4fa08 100644 --- a/crates/node/src/interactive_cli/context.rs +++ b/crates/node/src/interactive_cli/context.rs @@ -6,6 +6,7 @@ use calimero_store::key::ContextMeta as ContextMetaKey; use clap::{Parser, Subcommand}; use eyre::Result; use owo_colors::OwoColorize; +use tokio::sync::oneshot; use crate::Node; @@ -128,17 +129,30 @@ impl ContextCommand { return Err(eyre::eyre!("Invalid context seed")); }; - let (context_id, identity) = node - .ctx_manager + let (tx, rx) = oneshot::channel(); + + node.ctx_manager .create_context( context_seed.map(Into::into), application_id, None, - params.unwrap_or_default().into_bytes(), + params.map(|x| x.as_bytes().to_owned()).unwrap_or_default(), + tx, ) .await?; - println!("{ind} Created context {context_id} with identity {identity}"); + let _ignored = tokio::spawn(async move { + let err: eyre::Report = match rx.await { + Ok(Ok((context_id, identity))) => { + println!("{ind} Created context {context_id} with identity {identity}"); + return; + } + Ok(Err(err)) => err.into(), + Err(err) => err.into(), + }; + + println!("{ind} Unable to create context: {err:?}"); + }); } Commands::Invite { context_id, diff --git a/crates/server/src/admin/handlers/context/create_context.rs b/crates/server/src/admin/handlers/context/create_context.rs index 621d7a0a4..b48a85f77 100644 --- a/crates/server/src/admin/handlers/context/create_context.rs +++ b/crates/server/src/admin/handlers/context/create_context.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use axum::response::IntoResponse; use axum::{Extension, Json}; use calimero_server_primitives::admin::{CreateContextRequest, CreateContextResponse}; +use tokio::sync::oneshot; use crate::admin::service::{parse_api_error, ApiResponse}; use crate::AdminState; @@ -11,6 +12,8 @@ pub async fn handler( Extension(state): Extension>, Json(req): Json, ) -> impl IntoResponse { + let (tx, rx) = oneshot::channel(); + let result = state .ctx_manager .create_context( @@ -18,15 +21,24 @@ pub async fn handler( req.application_id, None, req.initialization_params, + tx, ) .await .map_err(parse_api_error); + if let Err(err) = result { + return err.into_response(); + } + + let Ok(result) = rx.await else { + return "internal error".into_response(); + }; + match result { Ok((context_id, member_public_key)) => ApiResponse { payload: CreateContextResponse::new(context_id, member_public_key), } .into_response(), - Err(err) => err.into_response(), + Err(err) => parse_api_error(err).into_response(), } } From ef4a20331d40c0a3b85b9dea87cbdffdfca95864 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 17:23:03 +0300 Subject: [PATCH 28/75] chore: use cache for clippy (#858) --- .github/workflows/rust.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 752d9cd1e..59ae770e9 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -36,12 +36,12 @@ jobs: - name: Setup rust toolchain run: rustup toolchain install stable --profile minimal - - name: Run code style checks - uses: ./.github/actions/style - - name: Setup rust cache uses: Swatinem/rust-cache@v2 + - name: Run code style checks + uses: ./.github/actions/style + - name: Build run: cargo build --verbose From fd4fdc9c6a8f52baf501ae5f013dbe698064b6e1 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 24 Oct 2024 20:09:01 +0300 Subject: [PATCH 29/75] chore: remove `test-utils` crate (#861) --- Cargo.lock | 9 --------- Cargo.toml | 1 - apps/kv-store/Cargo.toml | 1 - crates/test-utils/Cargo.toml | 16 ---------------- crates/test-utils/src/lib.rs | 3 --- crates/test-utils/src/storage.rs | 33 -------------------------------- 6 files changed, 63 deletions(-) delete mode 100644 crates/test-utils/Cargo.toml delete mode 100644 crates/test-utils/src/lib.rs delete mode 100644 crates/test-utils/src/storage.rs diff --git a/Cargo.lock b/Cargo.lock index 97d0ec68a..10f0db784 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1167,14 +1167,6 @@ dependencies = [ "thunderdome", ] -[[package]] -name = "calimero-test-utils" -version = "0.1.0" -dependencies = [ - "calimero-store", - "tempfile", -] - [[package]] name = "camino" version = "1.1.7" @@ -3659,7 +3651,6 @@ version = "0.1.0" dependencies = [ "calimero-sdk", "calimero-storage", - "thiserror", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8214b3c2d..cd1b12dbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,6 @@ members = [ "./crates/storage-macros", "./crates/store", "./crates/store/blobs", - "./crates/test-utils", "./apps/kv-store", "./apps/only-peers", diff --git a/apps/kv-store/Cargo.toml b/apps/kv-store/Cargo.toml index f3cd9779a..e400fbb1d 100644 --- a/apps/kv-store/Cargo.toml +++ b/apps/kv-store/Cargo.toml @@ -10,6 +10,5 @@ license.workspace = true crate-type = ["cdylib"] [dependencies] -thiserror.workspace = true calimero-sdk = { path = "../../crates/sdk" } calimero-storage = { path = "../../crates/storage" } diff --git a/crates/test-utils/Cargo.toml b/crates/test-utils/Cargo.toml deleted file mode 100644 index 41da6c327..000000000 --- a/crates/test-utils/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "calimero-test-utils" -version = "0.1.0" -authors.workspace = true -edition.workspace = true -repository.workspace = true -license.workspace = true -publish = false - -[dependencies] -tempfile.workspace = true - -calimero-store = { path = "../store", features = ["datatypes"] } - -[lints] -workspace = true diff --git a/crates/test-utils/src/lib.rs b/crates/test-utils/src/lib.rs deleted file mode 100644 index a97bee91b..000000000 --- a/crates/test-utils/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! Test utilities and data structures for use in the Calimero crates. - -pub mod storage; diff --git a/crates/test-utils/src/storage.rs b/crates/test-utils/src/storage.rs deleted file mode 100644 index be004f2c6..000000000 --- a/crates/test-utils/src/storage.rs +++ /dev/null @@ -1,33 +0,0 @@ -//! Structs for testing storage. - -use calimero_store::config::StoreConfig; -use calimero_store::db::RocksDB; -use calimero_store::Store; -use tempfile::{tempdir, TempDir}; - -/// Creates a new temporary store for testing. -/// -/// This function creates a new temporary directory and opens a new store in it, -/// returning the store and the directory. The directory and its test data will -/// be cleaned up when the test completes. -/// -#[must_use] -pub fn create_test_store() -> (Store, TempDir) { - // Note: It would be nice to have a way to test against an in-memory store, - // but InMemoryDB is not integrated with Store and there's currently no way - // to support both. It may be that the Database trait is later applied to - // InMemoryDB as well as RocksDB, in which case the storage Interface could - // be changed to work against Database implementations and not just Store. - let temp_dir = tempdir().expect("Could not create temp dir"); - let config = StoreConfig::new( - temp_dir - .path() - .to_path_buf() - .try_into() - .expect("Invalid UTF-8 path"), - ); - ( - Store::open::(&config).expect("Could not create store"), - temp_dir, - ) -} From f5df0e12b53c9dc402dca625a6d7ec24ad0abced Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Fri, 25 Oct 2024 15:31:05 +0200 Subject: [PATCH 30/75] chore: add workflow for issue or pr interactions (#857) Co-authored-by: Sandi Fatic --- .github/actions/contributions/action.yml | 33 ++++++++++++++++++++++++ .github/workflows/contributions.yml | 28 ++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 .github/actions/contributions/action.yml create mode 100644 .github/workflows/contributions.yml diff --git a/.github/actions/contributions/action.yml b/.github/actions/contributions/action.yml new file mode 100644 index 000000000..5b6ac2311 --- /dev/null +++ b/.github/actions/contributions/action.yml @@ -0,0 +1,33 @@ +name: "Needs Attention Labeler" +description: "Applies 'needs attention' and other labels to PRs or issues" +inputs: + repo-token: + description: "GitHub token with repository permissions" + required: true + response-required-label: + description: "Label to apply when response is required" + required: true + needs-attention-label: + description: "Label to apply when attention is needed" + required: true +outputs: + result: + description: "Result of the labeling action" + value: ${{ steps.needs-attention.outputs.result }} +runs: + using: "composite" + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Apply Needs Attention Label + uses: hramos/needs-attention@v2.0.0 + with: + repo-token: ${{ inputs.repo-token }} + response-required-label: ${{ inputs.response-required-label }} + needs-attention-label: ${{ inputs.needs-attention-label }} + id: needs-attention + + - name: Set output result + shell: bash + run: echo "result=${{ steps.needs-attention.outputs.result }}" >> $GITHUB_OUTPUT diff --git a/.github/workflows/contributions.yml b/.github/workflows/contributions.yml new file mode 100644 index 000000000..40e4ff7f6 --- /dev/null +++ b/.github/workflows/contributions.yml @@ -0,0 +1,28 @@ +name: Configure Issue and PR labels + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + +jobs: + applyNeedsAttentionLabel: + name: Apply Needs Attention + runs-on: ubuntu-latest + permissions: + contents: read # for actions/checkout to fetch code + issues: write # for hramos/needs-attention to label issues + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Apply Needs Attention Label + id: needs-attention + uses: ./.github/actions/contributions + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + response-required-label: "waiting-for-author-feedback" + needs-attention-label: "needs-team-review" + - name: Result + run: echo '${{ steps.needs-attention.outputs.result }}' From 7710b0111337f767c15436d848bc7a50d4f98009 Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Fri, 25 Oct 2024 15:37:27 +0200 Subject: [PATCH 31/75] chore: add workflow for handling new issues or prs (#856) --- .github/workflows/new-issue-or-pr.yml | 151 ++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 .github/workflows/new-issue-or-pr.yml diff --git a/.github/workflows/new-issue-or-pr.yml b/.github/workflows/new-issue-or-pr.yml new file mode 100644 index 000000000..40721e07b --- /dev/null +++ b/.github/workflows/new-issue-or-pr.yml @@ -0,0 +1,151 @@ +name: Label Issues and PRs on Open/Reopen + +on: + issues: + types: [opened, reopened] # Trigger when an issue is opened or reopened + pull_request_target: + types: [opened, reopened] + branches: + - master # Trigger when PRs are opened or reopened targeting the master branch + +jobs: + labelIssuePR: + name: Apply Label to Issues and PRs + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Add Label to Issue or PR + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + // Check if it's an issue or a PR + if (context.eventName === 'issues') { + // Add label to issue + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: ['needs-team-review'] + }); + } else if (context.eventName === 'pull_request') { + // Add label to PR + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + labels: ['needs-team-review'] + }); + } + result-encoding: string + id: result + - name: Get result + run: echo "${{steps.result.outputs.result}}" + + determine-contribution-type: + name: Apply Label to Issues and PRs + runs-on: ubuntu-latest + outputs: + is_external: ${{ steps.determine_if_external.outputs.is_external }} + contribution_author: ${{ steps.get_author.outputs.result }} + + steps: + - name: Get Author Information + id: get_author + uses: actions/github-script@v7 + + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const authorLogin = context.payload.pull_request ? context.payload.pull_request.user.login : context.payload.issue.user.login; + return authorLogin; + + - name: Get Organization Members + id: get_org_members + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const org = context.repo.owner; // Organization name + + let allMembers = []; + let page = 1; + + while (true) { + const membersPage = await github.rest.orgs.listMembers({ + org: org, + page: page, + per_page: 100 + }); + + allMembers = allMembers.concat(membersPage.data); + + if (membersPage.data.length < 100) { + break; // No more pages to fetch + } + + page++; + } + + return allMembers.map(member => member.login); + + - name: Determine if Author is External + id: determine_if_external + run: | + echo "Author: ${{ steps.get_author.outputs.result }}" + echo "Organization Members: ${{ steps.get_org_members.outputs.result }}" + + AUTHOR="${{ steps.get_author.outputs.result }}" + ORG_MEMBERS="${{ steps.get_org_members.outputs.result }}" + + if echo "$ORG_MEMBERS" | grep -q "$AUTHOR"; then + echo "The author $AUTHOR is a member of the organization."; + echo "is_external=false" >> $GITHUB_OUTPUT + else + echo "The author $AUTHOR is an external contributor."; + echo "is_external=true" >> $GITHUB_OUTPUT + fi + + - name: Add External Label if Necessary + if: steps.determine_if_external.outputs.is_external == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const issueOrPr = context.payload.issue || context.payload.pull_request; + const issueNumber = issueOrPr.number; // PR number for PRs and issue number for issues + const owner = context.repo.owner; + const repo = context.repo.repo; + + await github.rest.issues.addLabels({ + owner: owner, + repo: repo, + issue_number: issueNumber, + labels: ['external'] + }); + + notify-slack-on-external-contribution: + runs-on: ubuntu-latest + needs: [determine-contribution-type] + if: needs.determine-contribution-type.outputs.is_external == 'true' + steps: + - name: Determine Contribution Type + id: contribution_type + run: | + if [[ "${{ github.event_name }}" == "pull_request_target" ]]; then + echo "contribution_type=Pull Request" >> $GITHUB_OUTPUT + else + echo "contribution_type=Issue" >> $GITHUB_OUTPUT + fi + + - name: Notify external contribution + uses: "ravsamhq/notify-slack-action@2.5.0" + with: + status: failure + notification_title: "New external contribution in <${{ github.server_url }}/${{ github.repository }}/${{ github.ref_name }}|${{ github.repository }}>" + message_format: "*${{ steps.contribution_type.outputs.contribution_type }}* contribution by *${{ needs.determine-contribution-type.outputs.contribution_author }}*: <${{ github.event.pull_request.html_url || github.event.issue.html_url }}|Open contribution>" + footer: "Linked Repo <${{ github.server_url }}/${{ github.repository }}|${{ github.repository }}> | <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View trigger>" + env: + SLACK_WEBHOOK_URL: ${{ secrets.EXTERNAL_CONTRIBUTION_SLACK }} From 555c13e4c451fbc69f3a821ff8fe5fbaef0a1576 Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Fri, 25 Oct 2024 17:05:59 +0200 Subject: [PATCH 32/75] chore: add stale workflow (#866) --- .github/workflows/stale.yml | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/stale.yml diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 000000000..969efdc92 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,54 @@ +name: Close Stale Issues & Pull Requests + +on: + schedule: + - cron: "* 14 * * *" # Run every day at 2PM + workflow_dispatch: + +permissions: + issues: write + pull-requests: write + +jobs: + close_stale_prs: + runs-on: ubuntu-latest + steps: + - name: Close stale pull requests + uses: actions/stale@v9.0.0 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + # Number of days of inactivity before an issue becomes stale + days-before-issue-stale: 180 + # Number of days of inactivity before an PR becomes stale + days-before-pr-stale: 7 + # Number of days of inactivity before a stale issue or PR is closed + days-before-close: 7 + + # --- Issues --- + # Comment to post when marking an issue as stale + stale-issue-message: > + This issue has been automatically marked as stale. + **If this issue is still affecting you, please leave any comment** (for example, "bump"), and we'll keep it open. + We are sorry that we haven't been able to prioritize it yet. If you have any new additional information, please include it with your comment! + # Comment to post when closing a stale issue + close-issue-message: > + "This issue has been automatically closed because it has been + inactive for more than 180 days. Please reopen and prioritize this for development if it is + essential." + # Issues with these labels will never be considered stale + exempt-issue-labels: "internal,bug, discussion,💎 bounty 💎, good first issue, epic, enhancement, improvement, question" + + # --- PRs --- + stale-pr-label: "Stale" + # Comment to post when marking a pull request as stale + stale-pr-message: > + This pull request has been automatically marked as stale. + **If this pull request is still relevant, please leave any comment** (for example, "bump"), and we'll keep it open. + We are sorry that we haven't been able to prioritize reviewing it yet. Your contribution is very much appreciated. + # Comment to post when closing a stale pull request + close-pr-message: > + "This pull request has been automatically closed because it has been + inactive for more than 7 days. Please reopen and see this PR through its review if it is + essential." + # PRs with these labels will never be considered stale + exempt-pr-labels: "bug,discussion,💎 bounty 💎, epic, enhancement, improvement, needs investigation" From 6dff92b4ebca20129437e74744c6c9478045d43c Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Fri, 25 Oct 2024 18:12:32 +0300 Subject: [PATCH 33/75] chore: remove client notification of peer connection events (#864) --- crates/network/src/events/gossipsub.rs | 16 ++- crates/network/src/types.rs | 4 + crates/node/src/lib.rs | 99 +++++++++++-------- crates/primitives/src/events.rs | 43 +++----- crates/server/src/ws.rs | 6 +- packages/calimero-sdk/package.json | 2 +- .../src/subscriptions/subscriptions.ts | 30 +++--- packages/calimero-sdk/src/subscriptions/ws.ts | 6 +- 8 files changed, 114 insertions(+), 92 deletions(-) diff --git a/crates/network/src/events/gossipsub.rs b/crates/network/src/events/gossipsub.rs index 8afa80676..9ae8c6751 100644 --- a/crates/network/src/events/gossipsub.rs +++ b/crates/network/src/events/gossipsub.rs @@ -25,16 +25,26 @@ impl EventHandler for EventLoop { } } Event::Subscribed { peer_id, topic } => { - if (self + if self .event_sender .send(NetworkEvent::Subscribed { peer_id, topic }) - .await) + .await .is_err() { error!("Failed to send subscribed event"); } } - Event::GossipsubNotSupported { .. } | Event::Unsubscribed { .. } => {} + Event::Unsubscribed { peer_id, topic } => { + if self + .event_sender + .send(NetworkEvent::Unsubscribed { peer_id, topic }) + .await + .is_err() + { + error!("Failed to send unsubscribed event"); + } + } + Event::GossipsubNotSupported { .. } => {} } } } diff --git a/crates/network/src/types.rs b/crates/network/src/types.rs index e2e1132e6..3c5e8e144 100644 --- a/crates/network/src/types.rs +++ b/crates/network/src/types.rs @@ -16,6 +16,10 @@ pub enum NetworkEvent { peer_id: PeerId, topic: TopicHash, }, + Unsubscribed { + peer_id: PeerId, + topic: TopicHash, + }, Message { id: MessageId, message: Message, diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index 3814d98d6..b38dffce5 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -18,8 +18,8 @@ use calimero_network::types::{NetworkEvent, PeerId}; use calimero_node_primitives::{CallError, ExecutionRequest}; use calimero_primitives::context::{Context, ContextId}; use calimero_primitives::events::{ - ApplicationEvent, ApplicationEventPayload, NodeEvent, OutcomeEvent, OutcomeEventPayload, - PeerJoinedPayload, StateMutationPayload, + ContextEvent, ContextEventPayload, ExecutionEvent, ExecutionEventPayload, NodeEvent, + StateMutationPayload, }; use calimero_primitives::identity::PublicKey; use calimero_runtime::logic::{Outcome, VMContext, VMLimits}; @@ -36,7 +36,6 @@ use camino::Utf8PathBuf; use eyre::{bail, eyre, Result as EyreResult}; use libp2p::gossipsub::{IdentTopic, Message, TopicHash}; use libp2p::identity::Keypair; -use owo_colors::OwoColorize; use serde_json::{from_slice as from_json_slice, to_vec as to_json_vec}; use tokio::io::{stdin, AsyncBufReadExt, BufReader}; use tokio::select; @@ -165,7 +164,7 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { let Some(event) = event else { break; }; - node.handle_event(event).await?; + node.handle_event(event).await; } line = stdin.next_line() => { if let Some(line) = line? { @@ -204,8 +203,11 @@ impl Node { } } - pub async fn handle_event(&mut self, event: NetworkEvent) -> EyreResult<()> { + pub async fn handle_event(&mut self, event: NetworkEvent) { match event { + NetworkEvent::ListeningOn { address, .. } => { + info!("Listening on: {}", address); + } NetworkEvent::Subscribed { peer_id: their_peer_id, topic: topic_hash, @@ -214,14 +216,19 @@ impl Node { error!(?err, "Failed to handle subscribed event"); } } + NetworkEvent::Unsubscribed { + peer_id: their_peer_id, + topic: topic_hash, + } => { + if let Err(err) = self.handle_unsubscribed(their_peer_id, &topic_hash) { + error!(?err, "Failed to handle unsubscribed event"); + } + } NetworkEvent::Message { message, .. } => { if let Err(err) = self.handle_message(message).await { error!(?err, "Failed to handle message event"); } } - NetworkEvent::ListeningOn { address, .. } => { - info!("Listening on: {}", address); - } NetworkEvent::StreamOpened { peer_id, stream } => { info!("Stream opened from peer: {}", peer_id); @@ -233,16 +240,10 @@ impl Node { } _ => error!("Unhandled event: {:?}", event), } - - Ok(()) } fn handle_subscribed(&self, their_peer_id: PeerId, topic_hash: &TopicHash) -> EyreResult<()> { let Ok(context_id) = topic_hash.as_str().parse() else { - // bail!( - // "Failed to parse topic hash '{}' into context ID", - // topic_hash - // ); return Ok(()); }; @@ -255,15 +256,35 @@ impl Node { "Observed subscription to unknown context, ignoring.." ); return Ok(()); + } + + info!( + "Peer {:?} subscribed to context '{}'", + their_peer_id, context_id + ); + + Ok(()) + } + + fn handle_unsubscribed(&self, their_peer_id: PeerId, topic_hash: &TopicHash) -> EyreResult<()> { + let Ok(context_id) = topic_hash.as_str().parse() else { + return Ok(()); }; - info!("{} joined the session.", their_peer_id.cyan()); - drop( - self.node_events - .send(NodeEvent::Application(ApplicationEvent::new( - context_id, - ApplicationEventPayload::PeerJoined(PeerJoinedPayload::new(their_peer_id)), - ))), + let handle = self.store.handle(); + + if !handle.has(&ContextMetaKey::new(context_id))? { + debug!( + %context_id, + %their_peer_id, + "Observed unsubscription from unknown context, ignoring.." + ); + return Ok(()); + } + + info!( + "Peer {:?} unsubscribed from context '{}'", + their_peer_id, context_id ); Ok(()) @@ -552,15 +573,12 @@ impl Node { context.root_hash = root_hash.into(); - drop( - self.node_events - .send(NodeEvent::Application(ApplicationEvent::new( - context.id, - ApplicationEventPayload::StateMutation(StateMutationPayload::new( - context.root_hash, - )), - ))), - ); + drop(self.node_events.send(NodeEvent::Context(ContextEvent::new( + context.id, + ContextEventPayload::StateMutation(StateMutationPayload::new( + context.root_hash, + )), + )))); self.ctx_manager.save_context(context)?; } @@ -570,17 +588,16 @@ impl Node { } drop( - self.node_events - .send(NodeEvent::Application(ApplicationEvent::new( - context.id, - ApplicationEventPayload::OutcomeEvent(OutcomeEventPayload::new( - outcome - .events - .iter() - .map(|e| OutcomeEvent::new(e.kind.clone(), e.data.clone())) - .collect(), - )), - ))), + self.node_events.send(NodeEvent::Context(ContextEvent::new( + context.id, + ContextEventPayload::ExecutionEvent(ExecutionEventPayload::new( + outcome + .events + .iter() + .map(|e| ExecutionEvent::new(e.kind.clone(), e.data.clone())) + .collect(), + )), + ))), ); } diff --git a/crates/primitives/src/events.rs b/crates/primitives/src/events.rs index 73f057492..a6cd0815b 100644 --- a/crates/primitives/src/events.rs +++ b/crates/primitives/src/events.rs @@ -1,4 +1,3 @@ -use libp2p_identity::PeerId; use serde::{Deserialize, Serialize}; use crate::context::ContextId; @@ -8,21 +7,21 @@ use crate::hash::Hash; #[serde(untagged)] #[non_exhaustive] pub enum NodeEvent { - Application(ApplicationEvent), + Context(ContextEvent), } #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct ApplicationEvent { +pub struct ContextEvent { pub context_id: ContextId, #[serde(flatten)] - pub payload: ApplicationEventPayload, + pub payload: ContextEventPayload, } -impl ApplicationEvent { +impl ContextEvent { #[must_use] - pub const fn new(context_id: ContextId, payload: ApplicationEventPayload) -> Self { + pub const fn new(context_id: ContextId, payload: ContextEventPayload) -> Self { Self { context_id, payload, @@ -33,10 +32,10 @@ impl ApplicationEvent { #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(tag = "type", content = "data", rename_all = "PascalCase")] #[non_exhaustive] -pub enum ApplicationEventPayload { +#[expect(variant_size_differences, reason = "fine for now")] +pub enum ContextEventPayload { StateMutation(StateMutationPayload), - PeerJoined(PeerJoinedPayload), - OutcomeEvent(OutcomeEventPayload), + ExecutionEvent(ExecutionEventPayload), } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] @@ -53,28 +52,14 @@ impl StateMutationPayload { } } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct PeerJoinedPayload { - pub peer_id: PeerId, -} - -impl PeerJoinedPayload { - #[must_use] - pub const fn new(peer_id: PeerId) -> Self { - Self { peer_id } - } -} - #[derive(Clone, Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct OutcomeEvent { +pub struct ExecutionEvent { pub kind: String, pub data: Vec, } -impl OutcomeEvent { +impl ExecutionEvent { #[must_use] pub const fn new(kind: String, data: Vec) -> Self { Self { kind, data } @@ -84,13 +69,13 @@ impl OutcomeEvent { #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct OutcomeEventPayload { - pub events: Vec, +pub struct ExecutionEventPayload { + pub events: Vec, } -impl OutcomeEventPayload { +impl ExecutionEventPayload { #[must_use] - pub const fn new(events: Vec) -> Self { + pub const fn new(events: Vec) -> Self { Self { events } } } diff --git a/crates/server/src/ws.rs b/crates/server/src/ws.rs index 2f45b7bdb..21fc89f23 100644 --- a/crates/server/src/ws.rs +++ b/crates/server/src/ws.rs @@ -188,7 +188,7 @@ async fn handle_node_events( ); let event = match event { - NodeEvent::Application(event) + NodeEvent::Context(event) if { connection_state .inner @@ -198,9 +198,9 @@ async fn handle_node_events( .contains(&event.context_id) } => { - NodeEvent::Application(event) + NodeEvent::Context(event) } - NodeEvent::Application(_) => continue, + NodeEvent::Context(_) => continue, _ => unreachable!("Unexpected event type"), }; diff --git a/packages/calimero-sdk/package.json b/packages/calimero-sdk/package.json index 59bcb69a9..c21740526 100644 --- a/packages/calimero-sdk/package.json +++ b/packages/calimero-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@calimero-is-near/calimero-p2p-sdk", - "version": "0.1.0", + "version": "0.1.1", "description": "Javascript library to interact with Calimero P2P node", "type": "module", "main": "lib/index.js", diff --git a/packages/calimero-sdk/src/subscriptions/subscriptions.ts b/packages/calimero-sdk/src/subscriptions/subscriptions.ts index 8e623da02..97b172c7f 100644 --- a/packages/calimero-sdk/src/subscriptions/subscriptions.ts +++ b/packages/calimero-sdk/src/subscriptions/subscriptions.ts @@ -5,26 +5,32 @@ export interface SubscriptionsClient { disconnect(connectionId?: string): void; subscribe(contextIds: string[], connectionId?: string): void; unsubscribe(contextIds: string[], connectionId?: string): void; - addCallback(callback: (data: NodeEvent) => void, connectionId?: string): void; + addCallback(callback: (event: NodeEvent) => void, connectionId?: string): void; removeCallback( - callback: (data: NodeEvent) => void, + callback: (event: NodeEvent) => void, connectionId?: string, ): void; } -export type NodeEvent = ApplicationEvent; +export type NodeEvent = ContextEvent; -export interface ApplicationEvent { - context_id: ContextId; - type: 'TransactionExecuted' | 'PeerJoined'; - data: OutcomeEvents; +export type ContextEvent = ContextEventPayload & { + contextId: ContextId; } -export interface OutcomeEvent { - kind: String; - data: number[]; +type ContextEventPayload = { + type: 'StateMutation', + data: StateMutation, +} | { + type: 'ExecutionEvent', + data: ExecutionEvent, +}; + +export interface StateMutation { + newRoot: string; } -export interface OutcomeEvents { - events: OutcomeEvent[]; +export interface ExecutionEvent { + kind: string, + data: any, } diff --git a/packages/calimero-sdk/src/subscriptions/ws.ts b/packages/calimero-sdk/src/subscriptions/ws.ts index f28c08b49..e777e4fd4 100644 --- a/packages/calimero-sdk/src/subscriptions/ws.ts +++ b/packages/calimero-sdk/src/subscriptions/ws.ts @@ -27,7 +27,7 @@ interface UnsubscribeRequest { export class WsSubscriptionsClient implements SubscriptionsClient { private readonly url: string; private connections: Map; - private callbacks: Map void>>; + private callbacks: Map void>>; public constructor(baseUrl: string, path: string) { this.url = `${baseUrl}${path}`; @@ -98,7 +98,7 @@ export class WsSubscriptionsClient implements SubscriptionsClient { } public addCallback( - callback: (data: NodeEvent) => void, + callback: (event: NodeEvent) => void, connectionId: string = DEFAULT_CONNECTION_ID, ): void { if (!this.callbacks.has(connectionId)) { @@ -109,7 +109,7 @@ export class WsSubscriptionsClient implements SubscriptionsClient { } public removeCallback( - callback: (data: NodeEvent) => void, + callback: (event: NodeEvent) => void, connectionId: string = DEFAULT_CONNECTION_ID, ): void { const callbacks = this.callbacks.get(connectionId); From 4dc77e7d6bcf8fb90f67447b928540ee9b6587c7 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Fri, 25 Oct 2024 17:58:05 +0300 Subject: [PATCH 34/75] chore: localize serde identity helper (#865) --- Cargo.lock | 6 +-- crates/config/Cargo.toml | 7 +-- crates/config/src/lib.rs | 83 +++++++++++++++++++++++++++++-- crates/primitives/Cargo.toml | 1 - crates/primitives/src/identity.rs | 73 --------------------------- 5 files changed, 85 insertions(+), 85 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10f0db784..6ad058fa2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -842,13 +842,14 @@ dependencies = [ name = "calimero-config" version = "0.1.1" dependencies = [ + "bs58 0.5.1", "calimero-context", "calimero-network", - "calimero-primitives", "calimero-server", "camino", "eyre", - "libp2p", + "libp2p-identity", + "multiaddr", "serde", "toml", ] @@ -978,7 +979,6 @@ dependencies = [ "bs58 0.5.1", "ed25519-dalek", "hex", - "libp2p-identity", "rand 0.8.5", "serde", "serde_json", diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index 88fc1d46a..1f4b375db 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -9,15 +9,16 @@ license.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +bs58.workspace = true camino = { workspace = true, features = ["serde1"] } eyre.workspace = true -libp2p.workspace = true +libp2p-identity = { workspace = true, features = ["peerid", "serde"] } +multiaddr.workspace = true serde = { workspace = true, features = ["derive"] } toml.workspace = true calimero-context = { path = "../context" } -calimero-primitives = { path = "../primitives" } -calimero-server = { path = "../server" } +calimero-server = { path = "../server", features = ["admin"] } calimero-network = { path = "../network" } [lints] diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 63aaf49ed..398ac8dc8 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -7,7 +7,7 @@ use calimero_server::jsonrpc::JsonRpcConfig; use calimero_server::ws::WsConfig; use camino::{Utf8Path, Utf8PathBuf}; use eyre::{Result as EyreResult, WrapErr}; -use libp2p::{identity, Multiaddr}; +use multiaddr::Multiaddr; use serde::{Deserialize, Serialize}; const CONFIG_FILE: &str = "config.toml"; @@ -16,10 +16,10 @@ const CONFIG_FILE: &str = "config.toml"; #[non_exhaustive] pub struct ConfigFile { #[serde( - with = "calimero_primitives::identity::serde_identity", - default = "identity::Keypair::generate_ed25519" + with = "serde_identity", + default = "libp2p_identity::Keypair::generate_ed25519" )] - pub identity: identity::Keypair, + pub identity: libp2p_identity::Keypair, #[serde(flatten)] pub network: NetworkConfig, @@ -122,7 +122,7 @@ impl BlobStoreConfig { impl ConfigFile { pub fn new( - identity: identity::Keypair, + identity: libp2p_identity::Keypair, datastore: DataStoreConfig, blobstore: BlobStoreConfig, context: ContextConfig, @@ -167,3 +167,76 @@ impl ConfigFile { Ok(()) } } + +pub mod serde_identity { + use core::fmt::{self, Formatter}; + + use libp2p_identity::Keypair; + use serde::de::{self, MapAccess}; + use serde::ser::{self, SerializeMap}; + use serde::{Deserializer, Serializer}; + + pub fn serialize(key: &Keypair, serializer: S) -> Result + where + S: Serializer, + { + let mut keypair = serializer.serialize_map(Some(2))?; + keypair.serialize_entry("peer_id", &key.public().to_peer_id().to_base58())?; + keypair.serialize_entry( + "keypair", + &bs58::encode(&key.to_protobuf_encoding().map_err(ser::Error::custom)?).into_string(), + )?; + keypair.end() + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct IdentityVisitor; + + impl<'de> de::Visitor<'de> for IdentityVisitor { + type Value = Keypair; + + fn expecting(&self, formatter: &mut Formatter<'_>) -> fmt::Result { + formatter.write_str("an identity") + } + + fn visit_map(self, mut map: A) -> Result + where + A: MapAccess<'de>, + { + let mut peer_id = None::; + let mut priv_key = None::; + + while let Some(key) = map.next_key::()? { + match key.as_str() { + "peer_id" => peer_id = Some(map.next_value()?), + "keypair" => priv_key = Some(map.next_value()?), + _ => { + drop(map.next_value::()); + } + } + } + + let peer_id = peer_id.ok_or_else(|| de::Error::missing_field("peer_id"))?; + let priv_key = priv_key.ok_or_else(|| de::Error::missing_field("keypair"))?; + + let priv_key = bs58::decode(priv_key) + .into_vec() + .map_err(|_| de::Error::custom("invalid base58"))?; + + let keypair = Keypair::from_protobuf_encoding(&priv_key) + .map_err(|_| de::Error::custom("invalid protobuf"))?; + + if peer_id != keypair.public().to_peer_id().to_base58() { + return Err(de::Error::custom("Peer ID does not match public key")); + } + + Ok(keypair) + } + } + + deserializer.deserialize_struct("Keypair", &["peer_id", "keypair"], IdentityVisitor) + } +} diff --git a/crates/primitives/Cargo.toml b/crates/primitives/Cargo.toml index 402a66a2b..251a58547 100644 --- a/crates/primitives/Cargo.toml +++ b/crates/primitives/Cargo.toml @@ -10,7 +10,6 @@ license.workspace = true bs58.workspace = true borsh = { workspace = true, features = ["derive"], optional = true } ed25519-dalek.workspace = true -libp2p-identity = { workspace = true, features = ["peerid", "serde"] } rand = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"] } serde_json.workspace = true diff --git a/crates/primitives/src/identity.rs b/crates/primitives/src/identity.rs index f66673777..94628081e 100644 --- a/crates/primitives/src/identity.rs +++ b/crates/primitives/src/identity.rs @@ -251,76 +251,3 @@ pub enum NearNetworkId { #[serde(untagged)] Custom(String), } - -pub mod serde_identity { - use core::fmt::{self, Formatter}; - - use libp2p_identity::Keypair; - use serde::de::{self, MapAccess}; - use serde::ser::{self, SerializeMap}; - use serde::{Deserializer, Serializer}; - - pub fn serialize(key: &Keypair, serializer: S) -> Result - where - S: Serializer, - { - let mut keypair = serializer.serialize_map(Some(2))?; - keypair.serialize_entry("peer_id", &key.public().to_peer_id().to_base58())?; - keypair.serialize_entry( - "keypair", - &bs58::encode(&key.to_protobuf_encoding().map_err(ser::Error::custom)?).into_string(), - )?; - keypair.end() - } - - pub fn deserialize<'de, D>(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - struct IdentityVisitor; - - impl<'de> de::Visitor<'de> for IdentityVisitor { - type Value = Keypair; - - fn expecting(&self, formatter: &mut Formatter<'_>) -> fmt::Result { - formatter.write_str("an identity") - } - - fn visit_map(self, mut map: A) -> Result - where - A: MapAccess<'de>, - { - let mut peer_id = None::; - let mut priv_key = None::; - - while let Some(key) = map.next_key::()? { - match key.as_str() { - "peer_id" => peer_id = Some(map.next_value()?), - "keypair" => priv_key = Some(map.next_value()?), - _ => { - drop(map.next_value::()); - } - } - } - - let peer_id = peer_id.ok_or_else(|| de::Error::missing_field("peer_id"))?; - let priv_key = priv_key.ok_or_else(|| de::Error::missing_field("keypair"))?; - - let priv_key = bs58::decode(priv_key) - .into_vec() - .map_err(|_| de::Error::custom("invalid base58"))?; - - let keypair = Keypair::from_protobuf_encoding(&priv_key) - .map_err(|_| de::Error::custom("invalid protobuf"))?; - - if peer_id != keypair.public().to_peer_id().to_base58() { - return Err(de::Error::custom("Peer id does not match public key")); - } - - Ok(keypair) - } - } - - deserializer.deserialize_struct("Keypair", &["peer_id", "keypair"], IdentityVisitor) - } -} From 4661afb6056b6e103b710bed5f701d78affef293 Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Fri, 25 Oct 2024 21:37:54 +0200 Subject: [PATCH 35/75] fix: change stale cron job interval (#867) --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 969efdc92..14181f51b 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -2,7 +2,7 @@ name: Close Stale Issues & Pull Requests on: schedule: - - cron: "* 14 * * *" # Run every day at 2PM + - cron: "0 14 * * *" # Run every day at 2PM workflow_dispatch: permissions: From baa07a65237c9c25b8f5e7928fa3ff7513ac614e Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Sat, 26 Oct 2024 16:43:57 +0200 Subject: [PATCH 36/75] chore: improved the descriptions and usage of meroctl commands (#868) Co-authored-by: Miraculous Owonubi --- crates/meroctl/src/cli.rs | 19 +++---- crates/meroctl/src/cli/app.rs | 14 +++++ crates/meroctl/src/cli/app/get.rs | 12 ++--- crates/meroctl/src/cli/app/install.rs | 7 ++- crates/meroctl/src/cli/app/list.rs | 1 + crates/meroctl/src/cli/context.rs | 8 +-- crates/meroctl/src/cli/context/create.rs | 33 +++++++++--- crates/meroctl/src/cli/context/delete.rs | 3 +- crates/meroctl/src/cli/context/get.rs | 6 +-- crates/meroctl/src/cli/context/join.rs | 11 +++- crates/meroctl/src/cli/context/list.rs | 1 + crates/meroctl/src/cli/context/watch.rs | 3 +- crates/meroctl/src/cli/jsonrpc.rs | 67 ++++++++++++++---------- 13 files changed, 112 insertions(+), 73 deletions(-) diff --git a/crates/meroctl/src/cli.rs b/crates/meroctl/src/cli.rs index 455a63e5f..dacdf8f8d 100644 --- a/crates/meroctl/src/cli.rs +++ b/crates/meroctl/src/cli.rs @@ -11,20 +11,14 @@ mod jsonrpc; use app::AppCommand; use context::ContextCommand; -use jsonrpc::JsonRpcCommand; +use jsonrpc::CallCommand; pub const EXAMPLES: &str = r" - # Initialize a new node - $ meroctl --home data/ --node-name node1 init + # List all applications + $ meroctl -- --node-name node1 app ls - # Configure an existing node - $ meroctl --home data/ --node-name node1 config --server-host 143.34.182.202 --server-port 3000 - - # Run a node as a peer - $ meroctl --home data/ --node-name node1 run - - # Run a node as a coordinator - $ meroctl --home data/ --node-name node1 run --node-type coordinator + # List all contexts + $ meroctl -- --home data --node-name node1 context ls "; #[derive(Debug, Parser)] @@ -47,8 +41,7 @@ pub struct RootCommand { pub enum SubCommands { Context(ContextCommand), App(AppCommand), - #[command(alias = "call")] - JsonRpc(JsonRpcCommand), + JsonRpc(CallCommand), } #[derive(Debug, Parser)] diff --git a/crates/meroctl/src/cli/app.rs b/crates/meroctl/src/cli/app.rs index a8017ad02..8d8fbe993 100644 --- a/crates/meroctl/src/cli/app.rs +++ b/crates/meroctl/src/cli/app.rs @@ -1,4 +1,5 @@ use clap::{Parser, Subcommand}; +use const_format::concatcp; use eyre::Result as EyreResult; use super::RootArgs; @@ -10,7 +11,20 @@ mod get; mod install; mod list; +pub const EXAMPLES: &str = r" + # List all applications + $ meroctl -- --node-name node1 application ls + + # Get details of an application + $ meroctl -- --node-name node1 application get +"; + #[derive(Debug, Parser)] +#[command(about = "Command for managing applications")] +#[command(after_help = concatcp!( + "Examples:", + EXAMPLES +))] pub struct AppCommand { #[command(subcommand)] pub subcommand: AppSubCommands, diff --git a/crates/meroctl/src/cli/app/get.rs b/crates/meroctl/src/cli/app/get.rs index 8ba9ed37d..f4f2dba7d 100644 --- a/crates/meroctl/src/cli/app/get.rs +++ b/crates/meroctl/src/cli/app/get.rs @@ -1,4 +1,4 @@ -use clap::{Parser, ValueEnum}; +use clap::Parser; use eyre::{bail, Result as EyreResult}; use reqwest::Client; @@ -6,17 +6,11 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Parser, Debug)] +#[command(about = "Fetch application details")] pub struct GetCommand { - #[arg(long, short)] - pub method: GetValues, - - #[arg(long, short)] + #[arg(value_name = "APP_ID", help = "application_id of the application")] pub app_id: String, } -#[derive(ValueEnum, Debug, Clone)] -pub enum GetValues { - Details, -} impl GetCommand { #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] diff --git a/crates/meroctl/src/cli/app/install.rs b/crates/meroctl/src/cli/app/install.rs index 9fb5aafb9..b095cacba 100644 --- a/crates/meroctl/src/cli/app/install.rs +++ b/crates/meroctl/src/cli/app/install.rs @@ -13,13 +13,12 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] +#[command(about = "Install an application")] pub struct InstallCommand { - /// Path to the application - #[arg(long, short, conflicts_with = "url")] + #[arg(long, short, conflicts_with = "url", help = "Path to the application")] pub path: Option, - /// Url of the application - #[clap(long, short, conflicts_with = "path")] + #[clap(long, short, conflicts_with = "path", help = "Url of the application")] pub url: Option, #[clap(short, long, help = "Metadata for the application")] diff --git a/crates/meroctl/src/cli/app/list.rs b/crates/meroctl/src/cli/app/list.rs index e3e6b0033..3e297b03d 100644 --- a/crates/meroctl/src/cli/app/list.rs +++ b/crates/meroctl/src/cli/app/list.rs @@ -7,6 +7,7 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] +#[command(about = "List installed applications")] pub struct ListCommand; impl ListCommand { diff --git a/crates/meroctl/src/cli/context.rs b/crates/meroctl/src/cli/context.rs index dbae61b3f..82b6b1c9d 100644 --- a/crates/meroctl/src/cli/context.rs +++ b/crates/meroctl/src/cli/context.rs @@ -19,17 +19,17 @@ mod watch; pub const EXAMPLES: &str = r" # List all contexts - $ meroctl -- --home data --node-name node1 context ls + $ meroctl -- --node-name node1 context ls # Create a new context - $ meroctl -- --home data --node-name node1 context create --application-id + $ meroctl -- --node-name node1 context create --application-id # Create a new context in dev mode - $ meroctl -- --home data --node-name node1 context create --watch -c + $ meroctl -- --node-name node1 context create --watch -c "; #[derive(Debug, Parser)] -#[command(about = "Manage contexts")] +#[command(about = "Command for managing contexts")] #[command(after_help = concatcp!( "Examples:", EXAMPLES diff --git a/crates/meroctl/src/cli/context/create.rs b/crates/meroctl/src/cli/context/create.rs index 503345025..e6d88957b 100644 --- a/crates/meroctl/src/cli/context/create.rs +++ b/crates/meroctl/src/cli/context/create.rs @@ -26,22 +26,41 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] +#[command(about = "Create a new context")] pub struct CreateCommand { - /// The application ID to attach to the context - #[clap(long, short = 'a')] + #[clap( + long, + short = 'a', + help = "The application ID to attach to the context" + )] application_id: Option, - #[clap(long, short = 'p')] + #[clap( + long, + short = 'p', + help = "The parameters to pass to the application initialization function" + )] params: Option, - /// Path to the application file to watch and install locally - #[clap(long, short = 'w', conflicts_with = "application_id")] + #[clap( + long, + short = 'w', + conflicts_with = "application_id", + help = "Path to the application file to watch and install locally" + )] watch: Option, - #[clap(requires = "watch")] + #[clap( + requires = "watch", + help = "Metadata needed for the application installation" + )] metadata: Option, - #[clap(short = 's', long = "seed")] + #[clap( + short = 's', + long = "seed", + help = "The seed for the random generation of the context id" + )] context_seed: Option, } diff --git a/crates/meroctl/src/cli/context/delete.rs b/crates/meroctl/src/cli/context/delete.rs index 9dc8aa974..c2aabc48b 100644 --- a/crates/meroctl/src/cli/context/delete.rs +++ b/crates/meroctl/src/cli/context/delete.rs @@ -8,8 +8,9 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] +#[command(about = "Delete an context")] pub struct DeleteCommand { - #[clap(long, short)] + #[clap(name = "CONTEXT_ID", help = "The context ID to delete")] pub context_id: String, } diff --git a/crates/meroctl/src/cli/context/get.rs b/crates/meroctl/src/cli/context/get.rs index 21a25d0d6..d868200cf 100644 --- a/crates/meroctl/src/cli/context/get.rs +++ b/crates/meroctl/src/cli/context/get.rs @@ -8,14 +8,14 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Parser, Debug)] +#[command(about = "Fetch details about the context")] pub struct GetCommand { - #[clap(long, short)] + #[arg(value_name = "METHOD", help = "Method to fetch details", value_enum)] pub method: GetRequest, - #[clap(long, short)] + #[arg(value_name = "CONTEXT_ID", help = "context_id of the context")] pub context_id: String, } - #[derive(Clone, Debug, ValueEnum)] pub enum GetRequest { Context, diff --git a/crates/meroctl/src/cli/context/join.rs b/crates/meroctl/src/cli/context/join.rs index 0063c90b9..b4eae1bbc 100644 --- a/crates/meroctl/src/cli/context/join.rs +++ b/crates/meroctl/src/cli/context/join.rs @@ -10,10 +10,17 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] +#[command(about = "Join an application context")] pub struct JoinCommand { - #[clap(value_name = "PRIVATE_KEY")] + #[clap( + value_name = "PRIVATE_KEY", + help = "The private key for signing the join context request" + )] private_key: PrivateKey, - #[clap(value_name = "INVITE")] + #[clap( + value_name = "INVITE", + help = "The invitation payload for joining the context" + )] invitation_payload: ContextInvitationPayload, } diff --git a/crates/meroctl/src/cli/context/list.rs b/crates/meroctl/src/cli/context/list.rs index 207cf002a..e142b3c71 100644 --- a/crates/meroctl/src/cli/context/list.rs +++ b/crates/meroctl/src/cli/context/list.rs @@ -7,6 +7,7 @@ use crate::cli::RootArgs; use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; #[derive(Debug, Parser)] +#[command(about = "List all contexts")] pub struct ListCommand; impl ListCommand { diff --git a/crates/meroctl/src/cli/context/watch.rs b/crates/meroctl/src/cli/context/watch.rs index f4953f96a..bcf6d9b52 100644 --- a/crates/meroctl/src/cli/context/watch.rs +++ b/crates/meroctl/src/cli/context/watch.rs @@ -9,9 +9,10 @@ use super::RootArgs; use crate::common::{fetch_multiaddr, load_config, multiaddr_to_url}; #[derive(Debug, Parser)] +#[command(about = "Watch events from a context")] pub struct WatchCommand { /// ContextId to stream events from - #[arg(long)] + #[arg(value_name = "CONTEXT_ID", help = "ContextId to stream events from")] pub context_id: ContextId, } diff --git a/crates/meroctl/src/cli/jsonrpc.rs b/crates/meroctl/src/cli/jsonrpc.rs index 84498b162..adb3b114c 100644 --- a/crates/meroctl/src/cli/jsonrpc.rs +++ b/crates/meroctl/src/cli/jsonrpc.rs @@ -4,33 +4,44 @@ use calimero_server_primitives::jsonrpc::{ ExecuteRequest, Request, RequestId, RequestPayload, Version, }; use clap::{Parser, ValueEnum}; +use const_format::concatcp; use eyre::{bail, Result as EyreResult}; use serde_json::Value; use super::RootArgs; use crate::common::{get_response, multiaddr_to_url, RequestType}; -#[derive(Debug, Parser)] -pub struct JsonRpcCommand { - /// Type of method execute call - #[arg(long)] - pub call_type: CallType, +pub const EXAMPLES: &str = r" + # Execute a RPC method call + $ meroctl -- --node-name node1 call +"; - /// ContextId of the context we are using - #[arg(long)] +#[derive(Debug, Parser)] +#[command(about = "Executing read and write RPC calls")] +#[command(after_help = concatcp!( + "Examples:", + EXAMPLES +))] +pub struct CallCommand { + #[arg(value_name = "CONTEXT_ID", help = "ContextId of the context")] pub context_id: ContextId, - /// Name of the method in the app - #[arg(long)] + #[arg(value_name = "METHOD", help = "Method to fetch details")] pub method: String, - /// Arguemnts to the method in the app - #[arg(long, default_value = "{}")] + #[arg( + long, + default_value = "{}", + help = "Arguments to the method in the app" + )] pub args_json: String, - /// Id of the JsonRpc execute call - #[arg(long, default_value = "dontcare")] - pub id: String, + #[arg( + long, + default_value = "dontcare", + help = "Id of the JsonRpc execute call" + )] + pub id: Option, } #[derive(Clone, Debug, ValueEnum)] @@ -39,7 +50,7 @@ pub enum CallType { } #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] -impl JsonRpcCommand { +impl CallCommand { pub async fn run(self, root_args: RootArgs) -> EyreResult<()> { let path = root_args.home.join(&root_args.node_name); @@ -59,23 +70,21 @@ impl JsonRpcCommand { let json_payload: Value = serde_json::from_str(&self.args_json)?; - let payload = match self.call_type { - CallType::Execute => RequestPayload::Execute(ExecuteRequest::new( - self.context_id, - self.method, - json_payload, - config - .identity - .public() - .try_into_ed25519()? - .to_bytes() - .into(), - )), - }; + let payload = RequestPayload::Execute(ExecuteRequest::new( + self.context_id, + self.method, + json_payload, + config + .identity + .public() + .try_into_ed25519()? + .to_bytes() + .into(), + )); let request = Request::new( Version::TwoPointZero, - Some(RequestId::String(self.id)), + self.id.map(RequestId::String), payload, ); From 30ad3a146f3211c4952890419d6e982cff3dcdc5 Mon Sep 17 00:00:00 2001 From: petarjuki7 <36903459+petarjuki7@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:07:14 +0100 Subject: [PATCH 37/75] Fix script for initialising calimero nodes (#882) --- crates/merod/gen_localnet_configs.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/merod/gen_localnet_configs.sh b/crates/merod/gen_localnet_configs.sh index dd2af2d21..b83b02da8 100755 --- a/crates/merod/gen_localnet_configs.sh +++ b/crates/merod/gen_localnet_configs.sh @@ -14,7 +14,7 @@ fi # Get the first command line argument N=$1 -cargo build --bin meroctl +cargo build --bin merod # Iterate in a loop N times for ((i = 1; i <= N; i++)); do @@ -22,7 +22,7 @@ for ((i = 1; i <= N; i++)); do echo -e "\x1b[1;36m(i)\x1b[39m Initializing Node $i at \x1b[33m$node_home\x1b[0m" rm -rf "$node_home" mkdir -p "$node_home" - ./target/debug/meroctl --home "$NODE_HOME" --node-name "node$i" \ + ./target/debug/merod --home "$NODE_HOME" --node-name "node$i" \ init --swarm-port $((2427 + $i)) --server-port $((2527 + $i)) \ | sed 's/^/ \x1b[1;36m|\x1b[0m /' if [ $? -ne 0 ]; then From 5faab095222409cbc3a815ff5fd5a74e72abc160 Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Wed, 30 Oct 2024 09:52:22 +0100 Subject: [PATCH 38/75] chore: improved interactive cli context iteration (#819) Co-authored-by: Miraculous Owonubi --- crates/node/src/interactive_cli/identity.rs | 7 ++- crates/node/src/interactive_cli/state.rs | 34 ++++++++---- .../node/src/interactive_cli/transactions.rs | 55 +++++++++++++++++++ 3 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 crates/node/src/interactive_cli/transactions.rs diff --git a/crates/node/src/interactive_cli/identity.rs b/crates/node/src/interactive_cli/identity.rs index a1be72441..fa4abb8e3 100644 --- a/crates/node/src/interactive_cli/identity.rs +++ b/crates/node/src/interactive_cli/identity.rs @@ -28,7 +28,7 @@ impl IdentityCommand { Ok(context_id) => { // Handle the "ls" subcommand let handle = node.store.handle(); - let mut iter = handle.iter::().unwrap(); + let mut iter = handle.iter::()?; let context_id = ContextId::from(context_id); let first = 'first: { @@ -46,6 +46,11 @@ impl IdentityCommand { for (k, v) in first.into_iter().chain(iter.entries()) { let (k, v) = (k.unwrap(), v.unwrap()); + + if k.context_id() != context_id { + break; + } + let entry = format!( "{:44} | {}", if v.private_key.is_some() { "*" } else { " " }, diff --git a/crates/node/src/interactive_cli/state.rs b/crates/node/src/interactive_cli/state.rs index 918e23d07..c3c5e25da 100644 --- a/crates/node/src/interactive_cli/state.rs +++ b/crates/node/src/interactive_cli/state.rs @@ -15,22 +15,36 @@ impl StateCommand { pub async fn run(self, node: &Node) -> Result<()> { let ind = ">>".blue(); let handle = node.store.handle(); + let mut iter = handle.iter::()?; println!("{ind} {:44} | {:44}", "State Key", "Value"); - let mut iter = handle.iter::()?; + let context_id = match self.context_id.parse::() { + Ok(id) => id, + Err(e) => eyre::bail!("{} Failed to parse context_id: {}", ind.red(), e), + }; + + let first = 'first: { + let Some(k) = iter + .seek(ContextStateKey::new(context_id, [0; 32].into())) + .transpose() + else { + break 'first None; + }; + + Some((k, iter.read().map(|s| s.value.into_boxed()))) + }; + + let rest = iter + .entries() + .map(|(k, v)| (k, v.map(|s| s.value.into_boxed()))); - for (k, v) in iter.entries() { + for (k, v) in first.into_iter().chain(rest) { let (k, v) = (k?, v?); - let context_id_bytes: [u8; 32] = self - .context_id - .as_bytes() - .try_into() - .expect("Context ID must be 32 bytes long"); - if k.context_id() != ContextId::from(context_id_bytes) { - continue; + if k.context_id() != context_id { + break; } - let entry = format!("{:44} | {:?}", Hash::from(k.state_key()), v.value,); + let entry = format!("{:44} | {:?}", Hash::from(k.state_key()), v); for line in entry.lines() { println!("{ind} {}", line.cyan()); } diff --git a/crates/node/src/interactive_cli/transactions.rs b/crates/node/src/interactive_cli/transactions.rs new file mode 100644 index 000000000..f492f46f2 --- /dev/null +++ b/crates/node/src/interactive_cli/transactions.rs @@ -0,0 +1,55 @@ +use std::str::FromStr; + +use calimero_primitives::{context::ContextId, hash::Hash}; +use calimero_store::key::ContextTransaction as ContextTransactionKey; +use clap::Parser; +use eyre::Result; +use owo_colors::OwoColorize; + +use crate::Node; + +#[derive(Debug, Parser)] +pub struct TransactionsCommand { + context_id: String, +} + +impl TransactionsCommand { + pub async fn run(self, node: &Node) -> Result<()> { + let handle = node.store.handle(); + let mut iter = handle.iter::()?; + let context_id = ContextId::from_str(&self.context_id)?; + + let first = 'first: { + let Some(k) = iter + .seek(ContextTransactionKey::new(context_id, [0u8; 32])) + .transpose() + else { + break 'first None; + }; + + Some((k, iter.read())) + }; + + println!("{:44} | {:44}", "Hash", "Prior Hash"); + + for (k, v) in first.into_iter().chain(iter.entries()) { + let (k, v) = (k?, v?); + + if k.context_id() != context_id { + break; + } + + let entry = format!( + "{:44} | {}", + Hash::from(k.transaction_id()), + Hash::from(v.prior_hash), + ); + for line in entry.lines() { + println!("{}", line.cyan()); + } + } + + Ok(()) + } +} + From deeea22699c619617e41ac28ffe1f4d6ca9f3f87 Mon Sep 17 00:00:00 2001 From: Fran Domovic <93442516+frdomovic@users.noreply.github.com> Date: Wed, 30 Oct 2024 18:53:24 +0100 Subject: [PATCH 39/75] feat(node): implement starknet json rpc query method + logic (#849) Co-authored-by: alenmestrov --- .husky/pre-commit | 1 - Cargo.lock | 206 ++++++++---- Cargo.toml | 7 +- crates/context/Cargo.toml | 1 + crates/context/config/Cargo.toml | 3 + crates/context/config/src/client.rs | 97 +++++- crates/context/config/src/client/config.rs | 118 +++---- crates/context/config/src/client/near.rs | 67 +++- crates/context/config/src/client/relayer.rs | 3 + crates/context/config/src/client/starknet.rs | 302 ++++++++++++++++++ crates/context/src/lib.rs | 19 +- crates/merod/Cargo.toml | 2 + crates/merod/src/cli/config.rs | 18 ++ crates/merod/src/cli/init.rs | 127 ++++++-- crates/merod/src/cli/relay.rs | 72 ++++- .../node/src/interactive_cli/transactions.rs | 3 +- crates/primitives/src/context.rs | 9 +- crates/server/Cargo.toml | 3 +- .../src/verifywalletsignatures/starknet.rs | 8 +- crates/store/src/types/context.rs | 9 +- 20 files changed, 877 insertions(+), 198 deletions(-) create mode 100644 crates/context/config/src/client/starknet.rs diff --git a/.husky/pre-commit b/.husky/pre-commit index 39bb3f979..3ed7257d8 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -13,7 +13,6 @@ fi if git diff --cached --name-only | grep -qE '\.rs$'; then echo "Running checks for the Rust code..." cargo +nightly fmt - cargo clippy fi # Check for changes in the 'node-ui' directory (Next.js app) diff --git a/Cargo.lock b/Cargo.lock index 6ad058fa2..fd5fdfb87 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -865,6 +865,7 @@ dependencies = [ "calimero-primitives", "calimero-store", "camino", + "clap", "ed25519-dalek", "eyre", "futures-util", @@ -891,6 +892,9 @@ dependencies = [ "reqwest 0.12.5", "serde", "serde_json", + "starknet", + "starknet-crypto", + "starknet-types-core", "thiserror", "url", ] @@ -1050,7 +1054,7 @@ dependencies = [ "near-account-id", "serde", "serde_json", - "serde_with 3.9.0", + "serde_with", "thiserror", ] @@ -1089,9 +1093,8 @@ dependencies = [ "serde", "serde_json", "sha2", - "starknet-core", + "starknet", "starknet-crypto", - "starknet-providers", "thiserror", "tokio", "tower", @@ -2241,6 +2244,28 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes", + "ctr", + "digest 0.10.7", + "hex", + "hmac", + "pbkdf2", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror", + "uuid 0.8.2", +] + [[package]] name = "ethabi" version = "18.0.0" @@ -3655,9 +3680,9 @@ dependencies = [ [[package]] name = "lambdaworks-crypto" -version = "0.7.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb5d4f22241504f7c7b8d2c3a7d7835d7c07117f10bff2a7d96a9ef6ef217c3" +checksum = "bbc2a4da0d9e52ccfe6306801a112e81a8fc0c76aa3e4449fefeda7fef72bb34" dependencies = [ "lambdaworks-math", "serde", @@ -3667,9 +3692,9 @@ dependencies = [ [[package]] name = "lambdaworks-math" -version = "0.7.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358e172628e713b80a530a59654154bfc45783a6ed70ea284839800cebdf8f97" +checksum = "d1bd2632acbd9957afc5aeec07ad39f078ae38656654043bf16e046fa2730e23" dependencies = [ "serde", "serde_json", @@ -4504,6 +4529,8 @@ dependencies = [ "multiaddr", "near-crypto", "rand 0.8.5", + "starknet", + "starknet-crypto", "tokio", "toml_edit 0.22.20", "tracing", @@ -4876,7 +4903,7 @@ dependencies = [ "rand_chacha", "serde", "serde_json", - "serde_with 3.9.0", + "serde_with", "sha3", "smart-default", "strum 0.24.1", @@ -5844,9 +5871,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -6008,9 +6035,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -6649,6 +6676,15 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + [[package]] name = "same-file" version = "1.0.6" @@ -6724,6 +6760,18 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac", + "pbkdf2", + "salsa20", + "sha2", +] + [[package]] name = "sct" version = "0.7.1" @@ -6935,22 +6983,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap 1.9.3", - "serde", - "serde_json", - "serde_with_macros 2.3.3", - "time", -] - [[package]] name = "serde_with" version = "3.9.0" @@ -6965,22 +6997,10 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "serde_with_macros 3.9.0", + "serde_with_macros", "time", ] -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling 0.20.10", - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "serde_with_macros" version = "3.9.0" @@ -7233,11 +7253,56 @@ dependencies = [ "winapi", ] +[[package]] +name = "starknet" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0c9ac3809cc7630784e8c8565fa3013af819d83c97aa2720d566016d439011" +dependencies = [ + "starknet-accounts", + "starknet-contract", + "starknet-core", + "starknet-crypto", + "starknet-macros", + "starknet-providers", + "starknet-signers", +] + +[[package]] +name = "starknet-accounts" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee27ded58ade61da410fccafd57ed5429b0e79a9d62a4ae8b65818cb9d6f400" +dependencies = [ + "async-trait", + "auto_impl", + "starknet-core", + "starknet-crypto", + "starknet-providers", + "starknet-signers", + "thiserror", +] + +[[package]] +name = "starknet-contract" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6ee5762d24c4f06ab7e9406550925df406712e73719bd2de905c879c674a87" +dependencies = [ + "serde", + "serde_json", + "serde_with", + "starknet-accounts", + "starknet-core", + "starknet-providers", + "thiserror", +] + [[package]] name = "starknet-core" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d506e02a4083290d13b427dfe437fd95aa8b56315c455bb2f9cdeca76620d457" +checksum = "2538240cbe6663c673fe77465f294da707080f39678dd7066761554899e46100" dependencies = [ "base64 0.21.7", "crypto-bigint", @@ -7246,7 +7311,7 @@ dependencies = [ "serde", "serde_json", "serde_json_pythonic", - "serde_with 2.3.3", + "serde_with", "sha3", "starknet-crypto", "starknet-types-core", @@ -7254,9 +7319,9 @@ dependencies = [ [[package]] name = "starknet-crypto" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" +checksum = "60a5064173a8e8d2675e67744fd07f310de44573924b6b7af225a6bdd8102913" dependencies = [ "crypto-bigint", "hex", @@ -7266,37 +7331,35 @@ dependencies = [ "num-traits", "rfc6979", "sha2", - "starknet-crypto-codegen", "starknet-curve", "starknet-types-core", "zeroize", ] [[package]] -name = "starknet-crypto-codegen" -version = "0.4.0" +name = "starknet-curve" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e179dedc3fa6da064e56811d3e05d446aa2f7459e4eb0e3e49378a337235437" +checksum = "bcde6bd74269b8161948190ace6cf069ef20ac6e79cd2ba09b320efa7500b6de" dependencies = [ - "starknet-curve", "starknet-types-core", - "syn 2.0.72", ] [[package]] -name = "starknet-curve" -version = "0.5.0" +name = "starknet-macros" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56935b306dcf0b8f14bb2a1257164b8478bb8be4801dfae0923f5b266d1b457c" +checksum = "8986a940af916fc0a034f4e42c6ba76d94f1e97216d75447693dfd7aefaf3ef2" dependencies = [ - "starknet-types-core", + "starknet-core", + "syn 2.0.72", ] [[package]] name = "starknet-providers" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c85e0a0f4563ae95dfeae14ea0f0c70610efc0ec2462505c64eff5765e7b97" +checksum = "60e8e69ba7a36dea2d28333be82b4011f8784333d3ae5618482b6587c1ffb66c" dependencies = [ "async-trait", "auto_impl", @@ -7307,17 +7370,34 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "serde_with 2.3.3", + "serde_with", "starknet-core", "thiserror", "url", ] +[[package]] +name = "starknet-signers" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b9e01b61ae51d722e2b100d6ef913c5a2e70d1ea672733d385f7296d6055ef" +dependencies = [ + "async-trait", + "auto_impl", + "crypto-bigint", + "eth-keystore", + "getrandom", + "rand 0.8.5", + "starknet-core", + "starknet-crypto", + "thiserror", +] + [[package]] name = "starknet-types-core" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6bacf0ba19bc721e518bc4bf389ff13daa8a7c5db5fd320600473b8aa9fcbd" +checksum = "fa1b9e01ccb217ab6d475c5cda05dbb22c30029f7bb52b192a010a00d77a3d74" dependencies = [ "lambdaworks-crypto", "lambdaworks-math", @@ -8289,6 +8369,10 @@ name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", + "serde", +] [[package]] name = "uuid" diff --git a/Cargo.toml b/Cargo.toml index cd1b12dbe..6d492eb76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -84,7 +84,7 @@ owo-colors = "3.5.0" parking_lot = "0.12.3" prettyplease = "0.2.17" proc-macro2 = "1.0" -quote = "1.0" +quote = "1.0.37" rand = "0.8.5" rand_chacha = "0.3.1" reqwest = "0.12.2" @@ -96,10 +96,9 @@ semver = "1.0.22" serde = "1.0.196" serde_json = "1.0.113" serde_with = "3.9.0" -starknet-core = "0.11.1" +starknet = "0.12.0" starknet-crypto = "0.7.1" -starknet-macros = "0.2.0" -starknet-providers = "0.11.0" +starknet-types-core = "0.1.7" strum = "0.26.2" syn = "2.0" tempdir = "0.3.7" diff --git a/crates/context/Cargo.toml b/crates/context/Cargo.toml index 86e8d3d17..95abc9075 100644 --- a/crates/context/Cargo.toml +++ b/crates/context/Cargo.toml @@ -8,6 +8,7 @@ license.workspace = true [dependencies] camino = { workspace = true, features = ["serde1"] } +clap.workspace = true ed25519-dalek.workspace = true eyre.workspace = true futures-util.workspace = true diff --git a/crates/context/config/Cargo.toml b/crates/context/config/Cargo.toml index 4eae2b8fa..1fbebc8f5 100644 --- a/crates/context/config/Cargo.toml +++ b/crates/context/config/Cargo.toml @@ -18,6 +18,9 @@ near-primitives = { workspace = true, optional = true } reqwest = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"] } serde_json.workspace = true +starknet.workspace = true +starknet-crypto.workspace = true +starknet-types-core.workspace = true thiserror.workspace = true url = { workspace = true, optional = true } diff --git a/crates/context/config/src/client.rs b/crates/context/config/src/client.rs index a34905eca..258607eba 100644 --- a/crates/context/config/src/client.rs +++ b/crates/context/config/src/client.rs @@ -18,8 +18,9 @@ use crate::{ContextRequest, ContextRequestKind, Request, RequestKind}; pub mod config; pub mod near; pub mod relayer; +pub mod starknet; -use config::{ContextConfigClientConfig, ContextConfigClientSelectedSigner}; +use config::{ContextConfigClientConfig, ContextConfigClientSelectedSigner, Credentials, Protocol}; pub trait Transport { type Error: CoreError; @@ -50,6 +51,7 @@ impl Transport for Either { #[derive(Debug)] #[non_exhaustive] pub struct TransportRequest<'a> { + pub protocol: Protocol, pub network_id: Cow<'a, str>, pub contract_id: Cow<'a, str>, pub operation: Operation<'a>, @@ -58,11 +60,13 @@ pub struct TransportRequest<'a> { impl<'a> TransportRequest<'a> { #[must_use] pub const fn new( + protocol: Protocol, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, operation: Operation<'a>, ) -> Self { Self { + protocol, network_id, contract_id, operation, @@ -88,36 +92,103 @@ impl ContextConfigClient { } } -pub type RelayOrNearTransport = Either>; +pub type AnyTransport = Either< + relayer::RelayerTransport, + BothTransport, starknet::StarknetTransport<'static>>, +>; -impl ContextConfigClient { +#[expect(clippy::exhaustive_structs, reason = "this is exhaustive")] +#[derive(Debug, Clone)] +pub struct BothTransport { + pub near: L, + pub starknet: R, +} + +impl Transport for BothTransport { + type Error = Either; + + async fn send( + &self, + request: TransportRequest<'_>, + payload: Vec, + ) -> Result, Self::Error> { + match request.protocol { + Protocol::Near => self.near.send(request, payload).await.map_err(Either::Left), + Protocol::Starknet => self + .starknet + .send(request, payload) + .await + .map_err(Either::Right), + } + } +} + +impl ContextConfigClient { #[must_use] pub fn from_config(config: &ContextConfigClientConfig) -> Self { let transport = match config.signer.selected { ContextConfigClientSelectedSigner::Relayer => { + // If the selected signer is Relayer, use the Left variant. Either::Left(relayer::RelayerTransport::new(&relayer::RelayerConfig { url: config.signer.relayer.url.clone(), })) } - ContextConfigClientSelectedSigner::Local => { - Either::Right(near::NearTransport::new(&near::NearConfig { + + ContextConfigClientSelectedSigner::Local => Either::Right(BothTransport { + near: near::NearTransport::new(&near::NearConfig { networks: config .signer .local + .near .iter() .map(|(network, config)| { + let (account_id, secret_key) = match &config.credentials { + Credentials::Near(credentials) => ( + credentials.account_id.clone(), + credentials.secret_key.clone(), + ), + Credentials::Starknet(_) => { + panic!("Expected Near credentials but got something else.") + } + }; ( network.clone().into(), near::NetworkConfig { rpc_url: config.rpc_url.clone(), - account_id: config.credentials.account_id.clone(), - access_key: config.credentials.secret_key.clone(), + account_id, + access_key: secret_key, }, ) }) .collect(), - })) - } + }), + starknet: starknet::StarknetTransport::new(&starknet::StarknetConfig { + networks: config + .signer + .local + .starknet + .iter() + .map(|(network, config)| { + let (account_id, secret_key) = match &config.credentials { + Credentials::Starknet(credentials) => { + (credentials.account_id, credentials.secret_key) + } + Credentials::Near(_) => { + panic!("Expected Starknet credentials but got something else.") + } + }; + ( + network.clone().into(), + starknet::NetworkConfig { + rpc_url: config.rpc_url.clone(), + account_id, + access_key: secret_key, + }, + ) + }) + .collect(), + }), + }), }; Self::new(transport) @@ -127,10 +198,12 @@ impl ContextConfigClient { impl ContextConfigClient { pub const fn query<'a>( &'a self, + protocol: Protocol, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, ) -> ContextConfigQueryClient<'a, T> { ContextConfigQueryClient { + protocol, network_id, contract_id, transport: &self.transport, @@ -139,11 +212,13 @@ impl ContextConfigClient { pub const fn mutate<'a>( &'a self, + protocol: Protocol, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, signer_id: SignerId, ) -> ContextConfigMutateClient<'a, T> { ContextConfigMutateClient { + protocol, network_id, contract_id, signer_id, @@ -185,6 +260,7 @@ impl Response { #[derive(Debug)] pub struct ContextConfigQueryClient<'a, T> { + protocol: Protocol, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, transport: &'a T, @@ -199,6 +275,7 @@ impl<'a, T: Transport> ContextConfigQueryClient<'a, T> { let payload = serde_json::to_vec(&body).map_err(|err| ConfigError::Other(err.into()))?; let request = TransportRequest { + protocol: self.protocol, network_id: Cow::Borrowed(&self.network_id), contract_id: Cow::Borrowed(&self.contract_id), operation: Operation::Read { @@ -267,6 +344,7 @@ impl<'a, T: Transport> ContextConfigQueryClient<'a, T> { #[derive(Debug)] pub struct ContextConfigMutateClient<'a, T> { + protocol: Protocol, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, signer_id: SignerId, @@ -284,6 +362,7 @@ impl ClientRequest<'_, '_, T> { let signed = Signed::new(&Request::new(self.client.signer_id, self.kind), sign)?; let request = TransportRequest { + protocol: self.client.protocol, network_id: Cow::Borrowed(&self.client.network_id), contract_id: Cow::Borrowed(&self.client.contract_id), operation: Operation::Write { diff --git a/crates/context/config/src/client/config.rs b/crates/context/config/src/client/config.rs index 8d3b9f7c3..f2dbe4396 100644 --- a/crates/context/config/src/client/config.rs +++ b/crates/context/config/src/client/config.rs @@ -1,21 +1,65 @@ #![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] use std::collections::BTreeMap; +use std::str::FromStr; -use near_crypto::{PublicKey, SecretKey}; -use near_primitives::types::AccountId; use serde::{Deserialize, Serialize}; +use thiserror::Error; use url::Url; +use super::{near, starknet}; + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ContextConfigClientConfig { pub new: ContextConfigClientNew, pub signer: ContextConfigClientSigner, } +#[non_exhaustive] +#[derive(Copy, Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "lowercase")] +pub enum Protocol { + Near, + Starknet, +} + +impl Protocol { + pub fn as_str(&self) -> &'static str { + match self { + Protocol::Near => "near", + Protocol::Starknet => "starknet", + } + } +} + +#[derive(Debug, Error, Copy, Clone)] +#[error("Failed to parse protocol")] +pub struct ProtocolParseError { + _priv: (), +} + +impl FromStr for Protocol { + type Err = ProtocolParseError; + + fn from_str(input: &str) -> Result { + match input.to_lowercase().as_str() { + "near" => Ok(Protocol::Near), + "starknet" => Ok(Protocol::Starknet), + _ => Err(ProtocolParseError { _priv: () }), + } + } +} + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ContextConfigClientNew { + pub protocol: Protocol, pub network: String, - pub contract_id: AccountId, + pub contract_id: String, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct LocalConfig { + pub near: BTreeMap, + pub starknet: BTreeMap, } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -24,7 +68,7 @@ pub struct ContextConfigClientSigner { pub selected: ContextConfigClientSelectedSigner, pub relayer: ContextConfigClientRelayerSigner, #[serde(rename = "self")] - pub local: BTreeMap, + pub local: LocalConfig, } #[derive(Copy, Clone, Debug, Deserialize, Serialize)] @@ -48,66 +92,10 @@ pub struct ContextConfigClientLocalSigner { pub credentials: Credentials, } +#[non_exhaustive] #[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(try_from = "serde_creds::Credentials")] -pub struct Credentials { - pub account_id: AccountId, - pub public_key: PublicKey, - pub secret_key: SecretKey, -} - -mod serde_creds { - use near_crypto::{PublicKey, SecretKey}; - use near_primitives::types::AccountId; - use serde::{Deserialize, Serialize}; - - #[derive(Debug, Deserialize, Serialize)] - pub struct Credentials { - account_id: AccountId, - public_key: PublicKey, - secret_key: SecretKey, - } - - impl TryFrom for super::Credentials { - type Error = &'static str; - - fn try_from(creds: Credentials) -> Result { - 'pass: { - if let SecretKey::ED25519(key) = &creds.secret_key { - let mut buf = [0; 32]; - - buf.copy_from_slice(&key.0[..32]); - - if ed25519_dalek::SigningKey::from_bytes(&buf) - .verifying_key() - .as_bytes() - == &key.0[32..] - { - break 'pass; - } - } else if creds.public_key == creds.secret_key.public_key() { - break 'pass; - } - - return Err("public key and secret key do not match"); - }; - - if creds.account_id.get_account_type().is_implicit() { - let Ok(public_key) = PublicKey::from_near_implicit_account(&creds.account_id) - else { - return Err("fatal: failed to derive public key from implicit account ID"); - }; - - if creds.public_key != public_key { - return Err("implicit account ID and public key do not match"); - } - } - - Ok(Self { - account_id: creds.account_id, - public_key: creds.public_key, - secret_key: creds.secret_key, - }) - } - } +#[serde(untagged)] +pub enum Credentials { + Near(near::Credentials), + Starknet(starknet::Credentials), } diff --git a/crates/context/config/src/client/near.rs b/crates/context/config/src/client/near.rs index 8217bebc2..063a970f5 100644 --- a/crates/context/config/src/client/near.rs +++ b/crates/context/config/src/client/near.rs @@ -5,7 +5,7 @@ use std::collections::BTreeMap; use std::time; pub use near_crypto::SecretKey; -use near_crypto::{InMemorySigner, Signer}; +use near_crypto::{InMemorySigner, PublicKey, Signer}; use near_jsonrpc_client::methods::query::{RpcQueryRequest, RpcQueryResponse}; use near_jsonrpc_client::methods::send_tx::RpcSendTransactionRequest; use near_jsonrpc_client::methods::tx::RpcTransactionStatusRequest; @@ -22,11 +22,76 @@ use near_primitives::views::{ AccessKeyPermissionView, AccessKeyView, CallResult, FinalExecutionStatus, QueryRequest, TxExecutionStatus, }; +use serde::{Deserialize, Serialize}; use thiserror::Error; use url::Url; use super::{Operation, Transport, TransportRequest}; +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(try_from = "serde_creds::Credentials")] +pub struct Credentials { + pub account_id: AccountId, + pub public_key: PublicKey, + pub secret_key: SecretKey, +} + +mod serde_creds { + use near_crypto::{PublicKey, SecretKey}; + use near_primitives::types::AccountId; + use serde::{Deserialize, Serialize}; + + #[derive(Debug, Deserialize, Serialize)] + pub struct Credentials { + account_id: AccountId, + public_key: PublicKey, + secret_key: SecretKey, + } + + impl TryFrom for super::Credentials { + type Error = &'static str; + + fn try_from(creds: Credentials) -> Result { + 'pass: { + if let SecretKey::ED25519(key) = &creds.secret_key { + let mut buf = [0; 32]; + + buf.copy_from_slice(&key.0[..32]); + + if ed25519_dalek::SigningKey::from_bytes(&buf) + .verifying_key() + .as_bytes() + == &key.0[32..] + { + break 'pass; + } + } else if creds.public_key == creds.secret_key.public_key() { + break 'pass; + } + + return Err("public key and secret key do not match"); + }; + + if creds.account_id.get_account_type().is_implicit() { + let Ok(public_key) = PublicKey::from_near_implicit_account(&creds.account_id) + else { + return Err("fatal: failed to derive public key from implicit account ID"); + }; + + if creds.public_key != public_key { + return Err("implicit account ID and public key do not match"); + } + } + + Ok(Self { + account_id: creds.account_id, + public_key: creds.public_key, + secret_key: creds.secret_key, + }) + } + } +} + #[derive(Debug)] pub struct NetworkConfig { pub rpc_url: Url, diff --git a/crates/context/config/src/client/relayer.rs b/crates/context/config/src/client/relayer.rs index 1d06a9993..91f3431dc 100644 --- a/crates/context/config/src/client/relayer.rs +++ b/crates/context/config/src/client/relayer.rs @@ -3,6 +3,7 @@ use std::borrow::Cow; use serde::{Deserialize, Serialize}; use url::Url; +use super::config::Protocol; use super::{Operation, Transport, TransportRequest}; #[derive(Debug)] @@ -32,6 +33,7 @@ impl RelayerTransport { #[derive(Debug, Serialize, Deserialize)] #[non_exhaustive] pub struct RelayRequest<'a> { + pub protocol: Protocol, pub network_id: Cow<'a, str>, pub contract_id: Cow<'a, str>, pub operation: Operation<'a>, @@ -50,6 +52,7 @@ impl Transport for RelayerTransport { .client .post(self.url.clone()) .json(&RelayRequest { + protocol: request.protocol, network_id: request.network_id, contract_id: request.contract_id, operation: request.operation, diff --git a/crates/context/config/src/client/starknet.rs b/crates/context/config/src/client/starknet.rs new file mode 100644 index 000000000..f29746f1e --- /dev/null +++ b/crates/context/config/src/client/starknet.rs @@ -0,0 +1,302 @@ +#![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] + +use core::str::FromStr; +use std::borrow::Cow; +use std::collections::BTreeMap; +use std::sync::Arc; + +use serde::{Deserialize, Serialize}; +use starknet::accounts::{Account, ExecutionEncoding, SingleOwnerAccount}; +use starknet::core::types::{BlockId, BlockTag, Call, Felt, FunctionCall}; +use starknet::core::utils::get_selector_from_name; +use starknet::providers::jsonrpc::HttpTransport; +use starknet::providers::{JsonRpcClient, Provider, Url}; +use starknet::signers::{LocalWallet, SigningKey}; +use thiserror::Error; + +use super::{Operation, Transport, TransportRequest}; + +#[derive(Copy, Clone, Debug, Deserialize, Serialize)] +#[serde(try_from = "serde_creds::Credentials")] +pub struct Credentials { + pub account_id: Felt, + pub public_key: Felt, + pub secret_key: Felt, +} + +mod serde_creds { + use core::str::FromStr; + + use serde::{Deserialize, Serialize}; + use starknet_crypto::Felt; + use starknet_types_core::felt::FromStrError; + use thiserror::Error; + + #[derive(Debug, Deserialize, Serialize)] + pub struct Credentials { + secret_key: String, + public_key: String, + account_id: String, + } + + #[derive(Debug, Error)] + pub enum CredentialsError { + #[error("failed to parse Felt from string")] + ParseError(#[from] FromStrError), + #[error("public key extracted from secret key does not match the provided public key")] + PublicKeyMismatch, + } + + impl TryFrom for super::Credentials { + type Error = CredentialsError; + + fn try_from(creds: Credentials) -> Result { + let secret_key_felt = Felt::from_str(&creds.secret_key) + .map_err(|_| CredentialsError::ParseError(FromStrError))?; + let public_key_felt = Felt::from_str(&creds.public_key) + .map_err(|_| CredentialsError::ParseError(FromStrError))?; + let extracted_public_key = starknet_crypto::get_public_key(&secret_key_felt); + + if public_key_felt != extracted_public_key { + return Err(CredentialsError::PublicKeyMismatch); + } + + let account_id_felt = Felt::from_str(&creds.account_id) + .map_err(|_| CredentialsError::ParseError(FromStrError))?; + + Ok(Self { + account_id: account_id_felt, + public_key: public_key_felt, + secret_key: secret_key_felt, + }) + } + } +} + +#[derive(Debug)] +pub struct NetworkConfig { + pub rpc_url: Url, + pub account_id: Felt, + pub access_key: Felt, +} + +#[derive(Debug)] +pub struct StarknetConfig<'a> { + pub networks: BTreeMap, NetworkConfig>, +} + +#[derive(Clone, Debug)] +struct Network { + client: Arc>, + account_id: Felt, + secret_key: Felt, +} + +#[derive(Clone, Debug)] +pub struct StarknetTransport<'a> { + networks: BTreeMap, Network>, +} + +impl<'a> StarknetTransport<'a> { + #[must_use] + pub fn new(config: &StarknetConfig<'a>) -> Self { + let mut networks = BTreeMap::new(); + + for (network_id, network_config) in &config.networks { + let client = JsonRpcClient::new(HttpTransport::new(network_config.rpc_url.clone())); + let _ignored = networks.insert( + network_id.clone(), + Network { + client: client.into(), + account_id: network_config.account_id, + secret_key: network_config.access_key, + }, + ); + } + Self { networks } + } +} + +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum StarknetError { + #[error("unknown network `{0}`")] + UnknownNetwork(String), + #[error("invalid response from RPC while {operation}")] + InvalidResponse { operation: ErrorOperation }, + #[error("invalid contract ID `{0}`")] + InvalidContractId(String), + #[error("invalid method name `{0}`")] + InvalidMethodName(String), + #[error("access key does not have permission to call contract `{0}`")] + NotPermittedToCallContract(String), + #[error( + "access key does not have permission to call method `{method}` on contract {contract}" + )] + NotPermittedToCallMethod { contract: String, method: String }, + #[error("transaction timed out")] + TransactionTimeout, + #[error("error while {operation}: {reason}")] + Custom { + operation: ErrorOperation, + reason: String, + }, +} + +#[derive(Copy, Clone, Debug, Error)] +#[non_exhaustive] +pub enum ErrorOperation { + #[error("querying contract")] + Query, + #[error("mutating contract")] + Mutate, + #[error("fetching account")] + FetchAccount, + #[error("fetching nonce")] + FetchNonce, +} + +impl Transport for StarknetTransport<'_> { + type Error = StarknetError; + + async fn send( + &self, + request: TransportRequest<'_>, + payload: Vec, + ) -> Result, Self::Error> { + let Some(network) = self.networks.get(&request.network_id) else { + return Err(StarknetError::UnknownNetwork( + request.network_id.into_owned(), + )); + }; + + let contract_id = request.contract_id.as_ref(); + + match request.operation { + Operation::Read { method } => { + let response = network.query(contract_id, &method, payload).await?; + Ok(response) + } + Operation::Write { method } => { + let response = network.mutate(contract_id, &method, payload).await?; + Ok(response) + } + } + } +} + +impl Network { + async fn query( + &self, + contract_id: &str, + method: &str, + args: Vec, + ) -> Result, StarknetError> { + let contract_id = Felt::from_str(contract_id) + .map_err(|_| StarknetError::InvalidContractId(contract_id.to_owned()))?; + + let entry_point_selector = get_selector_from_name(method) + .map_err(|_| StarknetError::InvalidMethodName(method.to_owned()))?; + + let calldata: Vec = if args.is_empty() { + vec![] + } else { + args.chunks(32) + .map(|chunk| { + let mut padded_chunk = [0_u8; 32]; + for (i, byte) in chunk.iter().enumerate() { + padded_chunk[i] = *byte; + } + Felt::from_bytes_be(&padded_chunk) + }) + .collect() + }; + + let function_call = FunctionCall { + contract_address: contract_id, + entry_point_selector, + calldata, + }; + + let response = self + .client + .call(&function_call, BlockId::Tag(BlockTag::Latest)) + .await; + + response.map_or( + Err(StarknetError::InvalidResponse { + operation: ErrorOperation::Query, + }), + |result| { + Ok(result + .into_iter() + .flat_map(|felt| felt.to_bytes_be().to_vec()) + .collect::>()) + }, + ) + } + + async fn mutate( + &self, + contract_id: &str, + method: &str, + args: Vec, + ) -> Result, StarknetError> { + let sender_address: Felt = self.account_id; + let secret_key: Felt = self.secret_key; + let contract_id = Felt::from_str(contract_id) + .map_err(|_| StarknetError::InvalidContractId(contract_id.to_owned()))?; + + let entry_point_selector = get_selector_from_name(method) + .map_err(|_| StarknetError::InvalidMethodName(method.to_owned()))?; + + let calldata: Vec = if args.is_empty() { + vec![] + } else { + args.chunks(32) + .map(|chunk| { + let mut padded_chunk = [0_u8; 32]; + for (i, byte) in chunk.iter().enumerate() { + padded_chunk[i] = *byte; + } + Felt::from_bytes_be(&padded_chunk) + }) + .collect() + }; + + let current_network = match self.client.chain_id().await { + Ok(chain_id) => chain_id, + Err(e) => { + return Err(StarknetError::Custom { + operation: ErrorOperation::Query, + reason: e.to_string(), + }) + } + }; + + let relayer_signing_key = SigningKey::from_secret_scalar(secret_key); + let relayer_wallet = LocalWallet::from(relayer_signing_key); + let mut account = SingleOwnerAccount::new( + Arc::clone(&self.client), + relayer_wallet, + sender_address, + current_network, + ExecutionEncoding::New, + ); + + let _ = account.set_block_id(BlockId::Tag(BlockTag::Pending)); + + let response = account + .execute_v1(vec![Call { + to: contract_id, + selector: entry_point_selector, + calldata, + }]) + .send() + .await + .unwrap(); + + let transaction_hash: Vec = vec![response.transaction_hash.to_bytes_be()[0]]; + Ok(transaction_hash) + } +} diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 4b500f8d0..242bc5cb7 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::collections::HashSet; use std::io::Error as IoError; use std::str::FromStr; @@ -5,7 +6,7 @@ use std::sync::Arc; use calimero_blobstore::{Blob, BlobManager, Size}; use calimero_context_config::client::config::ContextConfigClientConfig; -use calimero_context_config::client::{ContextConfigClient, RelayOrNearTransport}; +use calimero_context_config::client::{AnyTransport, ContextConfigClient}; use calimero_context_config::repr::{Repr, ReprBytes, ReprTransmute}; use calimero_context_config::types::{ Application as ApplicationConfig, ApplicationMetadata as ApplicationMetadataConfig, @@ -51,7 +52,7 @@ use config::ContextConfig; pub struct ContextManager { store: Store, client_config: ContextConfigClientConfig, - config_client: ContextConfigClient, + config_client: ContextConfigClient, blob_manager: BlobManager, network_client: NetworkClient, server_sender: ServerSender, @@ -202,6 +203,7 @@ impl ContextManager { this.config_client .mutate( + this.client_config.new.protocol, this.client_config.new.network.as_str().into(), this.client_config.new.contract_id.as_str().into(), context.id.rt().expect("infallible conversion"), @@ -259,6 +261,7 @@ impl ContextManager { handle.put( &ContextConfigKey::new(context.id), &ContextConfigValue::new( + self.client_config.new.protocol.as_str().into(), self.client_config.new.network.as_str().into(), self.client_config.new.contract_id.as_str().into(), ), @@ -296,7 +299,8 @@ impl ContextManager { identity_secret: PrivateKey, invitation_payload: ContextInvitationPayload, ) -> EyreResult> { - let (context_id, invitee_id, network_id, contract_id) = invitation_payload.parts()?; + let (context_id, invitee_id, protocol, network_id, contract_id) = + invitation_payload.parts()?; if identity_secret.public_key() != invitee_id { bail!("identity mismatch") @@ -310,9 +314,9 @@ impl ContextManager { return Ok(None); } - let client = self - .config_client - .query(network_id.into(), contract_id.into()); + let client = + self.config_client + .query(protocol.parse()?, network_id.into(), contract_id.into()); for (offset, length) in (0..).map(|i| (100_usize.saturating_mul(i), 100)) { let members = client @@ -411,6 +415,7 @@ impl ContextManager { self.config_client .mutate( + context_config.protocol.parse()?, context_config.network.as_ref().into(), context_config.contract.as_ref().into(), inviter_id.rt().expect("infallible conversion"), @@ -425,6 +430,7 @@ impl ContextManager { let invitation_payload = ContextInvitationPayload::new( context_id, invitee_id, + context_config.protocol.into_string().into(), context_config.network.into_string().into(), context_config.contract.into_string().into(), )?; @@ -851,6 +857,7 @@ impl ContextManager { pub async fn get_latest_application(&self, context_id: ContextId) -> EyreResult { let client = self.config_client.query( + self.client_config.new.protocol, self.client_config.new.network.as_str().into(), self.client_config.new.contract_id.as_str().into(), ); diff --git a/crates/merod/Cargo.toml b/crates/merod/Cargo.toml index 4fbbb39a8..f448b4551 100644 --- a/crates/merod/Cargo.toml +++ b/crates/merod/Cargo.toml @@ -22,6 +22,8 @@ libp2p.workspace = true multiaddr.workspace = true near-crypto.workspace = true rand.workspace = true +starknet.workspace = true +starknet-crypto.workspace = true tokio = { workspace = true, features = ["io-std", "macros"] } toml_edit.workspace = true tracing.workspace = true diff --git a/crates/merod/src/cli/config.rs b/crates/merod/src/cli/config.rs index 15ea64fa4..efed2890c 100644 --- a/crates/merod/src/cli/config.rs +++ b/crates/merod/src/cli/config.rs @@ -3,6 +3,7 @@ use core::net::IpAddr; use std::fs::{read_to_string, write}; +use calimero_context_config::client::config::Protocol as CoreProtocol; use calimero_network::config::BootstrapNodes; use clap::{Args, Parser, ValueEnum}; use eyre::{eyre, Result as EyreResult}; @@ -12,6 +13,23 @@ use tracing::info; use crate::cli; +#[derive(Copy, Clone, Debug, ValueEnum)] +#[value(rename_all = "lowercase")] +pub enum ConfigProtocol { + Near, + Starknet, +} + +// Implement conversion from CLI Protocol to Core Protocol +impl From for CoreProtocol { + fn from(protocol: ConfigProtocol) -> Self { + match protocol { + ConfigProtocol::Near => CoreProtocol::Near, + ConfigProtocol::Starknet => CoreProtocol::Starknet, + } + } +} + /// Configure the node #[derive(Debug, Parser)] pub struct ConfigCommand { diff --git a/crates/merod/src/cli/init.rs b/crates/merod/src/cli/init.rs index 1600a0211..ff06c12da 100644 --- a/crates/merod/src/cli/init.rs +++ b/crates/merod/src/cli/init.rs @@ -9,8 +9,9 @@ use calimero_context::config::ContextConfig; use calimero_context_config::client::config::{ ContextConfigClientConfig, ContextConfigClientLocalSigner, ContextConfigClientNew, ContextConfigClientRelayerSigner, ContextConfigClientSelectedSigner, ContextConfigClientSigner, - Credentials, + Credentials, LocalConfig, }; +use calimero_context_config::client::{near, starknet as starknetCredentials}; use calimero_network::config::{ BootstrapConfig, BootstrapNodes, CatchupConfig, DiscoveryConfig, RelayConfig, RendezvousConfig, SwarmConfig, @@ -22,11 +23,13 @@ use calimero_store::config::StoreConfig; use calimero_store::db::RocksDB; use calimero_store::Store; use clap::{Parser, ValueEnum}; +use cli::config::ConfigProtocol; use eyre::{bail, Result as EyreResult, WrapErr}; use libp2p::identity::Keypair; use multiaddr::{Multiaddr, Protocol}; use near_crypto::{KeyType, SecretKey}; use rand::{thread_rng, Rng}; +use starknet::signers::SigningKey; use tracing::{info, warn}; use url::Url; @@ -69,6 +72,11 @@ pub struct InitCommand { #[clap(long, value_name = "URL")] pub relayer_url: Option, + /// Name of protocol + #[clap(long, value_name = "PROTOCOL", default_value = "near")] + #[clap(value_enum)] + pub protocol: ConfigProtocol, + /// Enable mDNS discovery #[clap(long, default_value_t = true)] #[clap(overrides_with("no_mdns"))] @@ -173,22 +181,61 @@ impl InitCommand { signer: ContextConfigClientSigner { selected: ContextConfigClientSelectedSigner::Relayer, relayer: ContextConfigClientRelayerSigner { url: relayer }, - local: [ - ( - "mainnet".to_owned(), - generate_local_signer("https://rpc.mainnet.near.org".parse()?)?, - ), - ( - "testnet".to_owned(), - generate_local_signer("https://rpc.testnet.near.org".parse()?)?, - ), - ] - .into_iter() - .collect(), + local: LocalConfig { + near: [ + ( + "mainnet".to_owned(), + generate_local_signer( + "https://rpc.mainnet.near.org".parse()?, + ConfigProtocol::Near, + )?, + ), + ( + "testnet".to_owned(), + generate_local_signer( + "https://rpc.testnet.near.org".parse()?, + ConfigProtocol::Near, + )?, + ), + ] + .into_iter() + .collect(), + starknet: [ + ( + "mainnet".to_owned(), + generate_local_signer( + "https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7" + .parse()?, + ConfigProtocol::Starknet, + )?, + ), + ( + "sepolia".to_owned(), + generate_local_signer( + "https://free-rpc.nethermind.io/sepolia-juno/".parse()?, + ConfigProtocol::Starknet, + )?, + ), + ] + .into_iter() + .collect(), + }, }, new: ContextConfigClientNew { - network: "testnet".into(), - contract_id: "calimero-context-config.testnet".parse()?, + network: match self.protocol { + ConfigProtocol::Near => "testnet".into(), + ConfigProtocol::Starknet => "sepolia".into(), + _ => "unknown".into(), + }, + protocol: self.protocol.into(), + contract_id: match self.protocol { + ConfigProtocol::Near => "calimero-context-config.testnet".parse()?, + ConfigProtocol::Starknet => { + "0x1ee8182d5dd595be9797ccae1488bdf84b19a0f05a93ce6148b0efae04f4568" + .parse()? + } + _ => "unknown.contract.id".parse()?, + }, }, }, }, @@ -230,19 +277,39 @@ impl InitCommand { } } -fn generate_local_signer(rpc_url: Url) -> EyreResult { - let secret_key = SecretKey::from_random(KeyType::ED25519); - - let public_key = secret_key.public_key(); - - let account_id = public_key.unwrap_as_ed25519().0; - - Ok(ContextConfigClientLocalSigner { - rpc_url, - credentials: Credentials { - account_id: hex::encode(account_id).parse()?, - public_key, - secret_key, - }, - }) +fn generate_local_signer( + rpc_url: Url, + config_protocol: ConfigProtocol, +) -> EyreResult { + match config_protocol { + ConfigProtocol::Near => { + let secret_key = SecretKey::from_random(KeyType::ED25519); + let public_key = secret_key.public_key(); + let account_id = public_key.unwrap_as_ed25519().0; + + Ok(ContextConfigClientLocalSigner { + rpc_url, + credentials: Credentials::Near(near::Credentials { + account_id: hex::encode(account_id).parse()?, + public_key, + secret_key, + }), + }) + } + ConfigProtocol::Starknet => { + let keypair = SigningKey::from_random(); + let secret_key = SigningKey::secret_scalar(&keypair); + let public_key = keypair.verifying_key().scalar(); + + Ok(ContextConfigClientLocalSigner { + rpc_url, + credentials: Credentials::Starknet(starknetCredentials::Credentials { + account_id: public_key, + public_key, + secret_key, + }), + }) + } + _ => todo!(), + } } diff --git a/crates/merod/src/cli/relay.rs b/crates/merod/src/cli/relay.rs index d8a07bd24..ebaae8905 100644 --- a/crates/merod/src/cli/relay.rs +++ b/crates/merod/src/cli/relay.rs @@ -1,4 +1,5 @@ use core::net::{AddrParseError, IpAddr, Ipv4Addr, SocketAddr}; +use std::borrow::Cow; use std::env; use axum::extract::State; @@ -7,8 +8,9 @@ use axum::response::IntoResponse; use axum::routing::post; use axum::{Json, Router}; use calimero_config::ConfigFile; +use calimero_context_config::client::config::Credentials; use calimero_context_config::client::relayer::RelayRequest; -use calimero_context_config::client::{near, Transport, TransportRequest}; +use calimero_context_config::client::{near, starknet, BothTransport, Transport, TransportRequest}; use clap::{Parser, ValueEnum}; use eyre::{bail, Result as EyreResult}; use futures_util::FutureExt; @@ -50,38 +52,88 @@ impl RelayCommand { let (tx, mut rx) = mpsc::channel::(32); - let transport = near::NearTransport::new(&near::NearConfig { + let near_transport = near::NearTransport::new(&near::NearConfig { networks: config .context .client .signer .local + .near .iter() .map(|(network, config)| { - ( - network.into(), + let (account_id, access_key) = match &config.credentials { + Credentials::Near(credentials) => ( + credentials.account_id.clone(), + credentials.secret_key.clone(), + ), + Credentials::Starknet(_) => { + bail!("Expected NEAR credentials, but got Starknet credentials.") + } + _ => bail!("Expected NEAR credentials."), + }; + Ok(( + Cow::from(network.clone()), near::NetworkConfig { rpc_url: config.rpc_url.clone(), - account_id: config.credentials.account_id.clone(), - access_key: config.credentials.secret_key.clone(), + account_id, + access_key, }, - ) + )) }) - .collect(), + .collect::>()?, }); + let starknet_transport = starknet::StarknetTransport::new(&starknet::StarknetConfig { + networks: config + .context + .client + .signer + .local + .starknet + .iter() + .map(|(network, config)| { + let (account_id, access_key) = match &config.credentials { + Credentials::Starknet(credentials) => ( + credentials.account_id.clone(), + credentials.secret_key.clone(), + ), + Credentials::Near(_) => bail!("Expected Starknet credentials."), + _ => bail!("Expected NEAR credentials."), + }; + Ok(( + Cow::from(network.clone()), + starknet::NetworkConfig { + rpc_url: config.rpc_url.clone(), + account_id, + access_key, + }, + )) + }) + .collect::>()?, + }); + + let both_transport = BothTransport { + near: near_transport, + starknet: starknet_transport, + }; + let handle = async move { while let Some((request, res_tx)) = rx.recv().await { let payload = request.payload; let request = TransportRequest::new( + request.protocol, request.network_id, request.contract_id, request.operation, ); - let _ignored = - res_tx.send(transport.send(request, payload).await.map_err(Into::into)); + let _ignored = res_tx.send( + both_transport + .send(request, payload) + .await + .map_err(Into::into), + ); } }; diff --git a/crates/node/src/interactive_cli/transactions.rs b/crates/node/src/interactive_cli/transactions.rs index f492f46f2..c2cafb06b 100644 --- a/crates/node/src/interactive_cli/transactions.rs +++ b/crates/node/src/interactive_cli/transactions.rs @@ -1,6 +1,7 @@ use std::str::FromStr; -use calimero_primitives::{context::ContextId, hash::Hash}; +use calimero_primitives::context::ContextId; +use calimero_primitives::hash::Hash; use calimero_store::key::ContextTransaction as ContextTransactionKey; use clap::Parser; use eyre::Result; diff --git a/crates/primitives/src/context.rs b/crates/primitives/src/context.rs index e9d82cb00..c84fa2b17 100644 --- a/crates/primitives/src/context.rs +++ b/crates/primitives/src/context.rs @@ -81,12 +81,13 @@ impl fmt::Debug for ContextInvitationPayload { { let is_alternate = f.alternate(); let mut d = f.debug_struct("ContextInvitationPayload"); - let (context_id, invitee_id, network, contract_id) = + let (context_id, invitee_id, protocol, network, contract_id) = self.parts().map_err(|_| fmt::Error)?; _ = d .field("context_id", &context_id) .field("invitee_id", &invitee_id) + .field("protocol", &protocol) .field("network", &network) .field("contract_id", &contract_id); @@ -146,6 +147,7 @@ const _: () = { struct InvitationPayload<'a> { context_id: [u8; 32], invitee_id: [u8; 32], + protocol: Cow<'a, str>, network: Cow<'a, str>, contract_id: Cow<'a, str>, } @@ -154,12 +156,14 @@ const _: () = { pub fn new( context_id: ContextId, invitee_id: PublicKey, + protocol: Cow<'_, str>, network: Cow<'_, str>, contract_id: Cow<'_, str>, ) -> io::Result { let payload = InvitationPayload { context_id: *context_id, invitee_id: *invitee_id, + protocol, network, contract_id, }; @@ -167,12 +171,13 @@ const _: () = { borsh::to_vec(&payload).map(Self) } - pub fn parts(&self) -> io::Result<(ContextId, PublicKey, String, String)> { + pub fn parts(&self) -> io::Result<(ContextId, PublicKey, String, String, String)> { let payload: InvitationPayload<'_> = borsh::from_slice(&self.0)?; Ok(( payload.context_id.into(), payload.invitee_id.into(), + payload.protocol.into_owned(), payload.network.into_owned(), payload.contract_id.into_owned(), )) diff --git a/crates/server/Cargo.toml b/crates/server/Cargo.toml index 688e28c48..47a71403b 100644 --- a/crates/server/Cargo.toml +++ b/crates/server/Cargo.toml @@ -32,9 +32,8 @@ rust-embed = { workspace = true, features = ["mime-guess"] } serde = { workspace = true, features = ["derive"] } serde_json.workspace = true sha2.workspace = true -starknet-core.workspace = true +starknet.workspace = true starknet-crypto.workspace = true -starknet-providers.workspace = true thiserror.workspace = true tokio.workspace = true tower.workspace = true diff --git a/crates/server/src/verifywalletsignatures/starknet.rs b/crates/server/src/verifywalletsignatures/starknet.rs index 1ab6f6de5..860850967 100644 --- a/crates/server/src/verifywalletsignatures/starknet.rs +++ b/crates/server/src/verifywalletsignatures/starknet.rs @@ -5,11 +5,11 @@ use std::vec; use eyre::{bail, eyre, Result as EyreResult}; use serde::{Deserialize, Serialize}; use serde_json::{from_str as from_json_str, json, Value}; -use starknet_core::types::{BlockId, BlockTag, Felt, FunctionCall}; -use starknet_core::utils::get_selector_from_name; +use starknet::core::types::{BlockId, BlockTag, Felt, FunctionCall}; +use starknet::core::utils::get_selector_from_name; +use starknet::providers::jsonrpc::HttpTransport; +use starknet::providers::{JsonRpcClient, Provider, Url}; use starknet_crypto::{poseidon_hash_many, verify}; -use starknet_providers::jsonrpc::HttpTransport; -use starknet_providers::{JsonRpcClient, Provider, Url}; /// A field in a StarkNet type with a name and type. #[derive(Debug, Deserialize, Serialize)] diff --git a/crates/store/src/types/context.rs b/crates/store/src/types/context.rs index 12b8e8733..bae6f6f7a 100644 --- a/crates/store/src/types/context.rs +++ b/crates/store/src/types/context.rs @@ -36,14 +36,19 @@ impl PredefinedEntry for ContextMetaKey { #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq)] #[non_exhaustive] pub struct ContextConfig { + pub protocol: Box, pub network: Box, pub contract: Box, } impl ContextConfig { #[must_use] - pub const fn new(network: Box, contract: Box) -> Self { - Self { network, contract } + pub const fn new(protocol: Box, network: Box, contract: Box) -> Self { + Self { + protocol, + network, + contract, + } } } From a2daa55586e439da08e52664bc9db002a9bcc948 Mon Sep 17 00:00:00 2001 From: Fico <70634661+fbozic@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:25:22 +0100 Subject: [PATCH 40/75] feat(meroctl): standardise command output (#888) --- Cargo.lock | 3 +- Cargo.toml | 4 - crates/meroctl/Cargo.toml | 3 +- crates/meroctl/src/cli.rs | 87 ++- crates/meroctl/src/cli/app.rs | 25 +- crates/meroctl/src/cli/app/get.rs | 37 +- crates/meroctl/src/cli/app/install.rs | 60 +-- crates/meroctl/src/cli/app/list.rs | 33 +- crates/meroctl/src/cli/context.rs | 26 +- crates/meroctl/src/cli/context/create.rs | 157 +++--- crates/meroctl/src/cli/context/delete.rs | 49 +- crates/meroctl/src/cli/context/get.rs | 110 ++-- crates/meroctl/src/cli/context/join.rs | 39 +- crates/meroctl/src/cli/context/list.rs | 33 +- crates/meroctl/src/cli/context/watch.rs | 55 +- crates/meroctl/src/cli/jsonrpc.rs | 32 +- crates/meroctl/src/common.rs | 78 ++- crates/meroctl/src/main.rs | 28 +- crates/meroctl/src/output.rs | 55 ++ crates/server-primitives/src/admin.rs | 509 ++++++++++-------- crates/server-primitives/src/ws.rs | 38 -- crates/server/src/admin/handlers/context.rs | 2 +- .../admin/handlers/context/delete_context.rs | 15 +- .../src/admin/handlers/context/get_context.rs | 31 +- .../context/get_context_client_keys.rs | 18 +- .../context/get_context_identities.rs | 18 +- .../handlers/context/get_context_storage.rs | 17 +- .../handlers/context/get_context_users.rs | 16 +- ...on_id.rs => update_context_application.rs} | 14 +- crates/server/src/admin/service.rs | 4 +- crates/server/src/ws.rs | 9 +- crates/server/src/ws/subscribe.rs | 4 +- crates/server/src/ws/unsubscribe.rs | 4 +- 33 files changed, 900 insertions(+), 713 deletions(-) create mode 100644 crates/meroctl/src/output.rs rename crates/server/src/admin/handlers/context/{update_application_id.rs => update_context_application.rs} (79%) diff --git a/Cargo.lock b/Cargo.lock index fd5fdfb87..fd8db77cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4497,10 +4497,9 @@ dependencies = [ "reqwest 0.12.5", "serde", "serde_json", + "thiserror", "tokio", "tokio-tungstenite 0.24.0", - "tracing", - "tracing-subscriber", "url", ] diff --git a/Cargo.toml b/Cargo.toml index 6d492eb76..cea0f0047 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -223,8 +223,6 @@ clone_on_ref_ptr = "deny" empty_enum_variants_with_brackets = "deny" empty_structs_with_brackets = "deny" error_impl_error = "deny" -exhaustive_enums = "deny" -exhaustive_structs = "deny" #expect_used = "deny" TODO: Enable as soon as possible float_cmp_const = "deny" fn_to_numeric_cast_any = "deny" @@ -236,8 +234,6 @@ lossy_float_literal = "deny" mem_forget = "deny" multiple_inherent_impl = "deny" #panic = "deny" TODO: Enable as soon as possible -print_stderr = "deny" -print_stdout = "deny" rc_mutex = "deny" renamed_function_params = "deny" try_err = "deny" diff --git a/crates/meroctl/Cargo.toml b/crates/meroctl/Cargo.toml index 110150fc3..6619d5ea0 100644 --- a/crates/meroctl/Cargo.toml +++ b/crates/meroctl/Cargo.toml @@ -23,10 +23,9 @@ notify.workspace = true reqwest = { workspace = true, features = ["json"] } serde = { workspace = true, features = ["derive"] } serde_json.workspace = true +thiserror.workspace = true tokio = { workspace = true, features = ["io-std", "macros"] } tokio-tungstenite.workspace = true -tracing.workspace = true -tracing-subscriber = { workspace = true, features = ["env-filter"] } url = { workspace = true, features = ["serde"] } calimero-config = { path = "../config" } diff --git a/crates/meroctl/src/cli.rs b/crates/meroctl/src/cli.rs index dacdf8f8d..87351983d 100644 --- a/crates/meroctl/src/cli.rs +++ b/crates/meroctl/src/cli.rs @@ -1,9 +1,14 @@ +use std::process::ExitCode; + use camino::Utf8PathBuf; use clap::{Parser, Subcommand}; use const_format::concatcp; -use eyre::Result as EyreResult; +use eyre::Report as EyreReport; +use serde::{Serialize, Serializer}; +use thiserror::Error as ThisError; use crate::defaults; +use crate::output::{Format, Output, Report}; mod app; mod context; @@ -54,14 +59,84 @@ pub struct RootArgs { /// Name of node #[arg(short, long, value_name = "NAME")] pub node_name: String, + + #[arg(long, value_name = "FORMAT")] + pub output_format: Format, +} + +pub struct Environment { + pub args: RootArgs, + pub output: Output, +} + +impl Environment { + pub fn new(args: RootArgs, output: Output) -> Self { + Environment { args, output } + } } impl RootCommand { - pub async fn run(self) -> EyreResult<()> { - match self.action { - SubCommands::Context(context) => context.run(self.args).await, - SubCommands::App(application) => application.run(self.args).await, - SubCommands::JsonRpc(jsonrpc) => jsonrpc.run(self.args).await, + pub async fn run(self) -> Result<(), CliError> { + let output = Output::new(self.args.output_format); + let environment = Environment::new(self.args, output); + + let result = match self.action { + SubCommands::Context(context) => context.run(&environment).await, + SubCommands::App(application) => application.run(&environment).await, + SubCommands::JsonRpc(jsonrpc) => jsonrpc.run(&environment).await, + }; + + if let Err(err) = result { + let err = match err.downcast::() { + Ok(err) => CliError::ApiError(err), + Err(err) => CliError::Other(err), + }; + environment.output.write(&err); + return Err(err); } + + return Ok(()); } } + +#[derive(Debug, Serialize, ThisError)] +pub enum CliError { + #[error(transparent)] + ApiError(#[from] ApiError), + + #[error(transparent)] + Other( + #[from] + #[serde(serialize_with = "serialize_eyre_report")] + EyreReport, + ), +} + +impl Into for CliError { + fn into(self) -> ExitCode { + match self { + CliError::ApiError(_) => ExitCode::from(101), + CliError::Other(_) => ExitCode::FAILURE, + } + } +} + +impl Report for CliError { + fn report(&self) { + println!("{}", self); + } +} + +#[derive(Debug, Serialize, ThisError)] +#[error("{status_code}: {message}")] +pub struct ApiError { + pub status_code: u16, + pub message: String, +} + +fn serialize_eyre_report(report: &EyreReport, serializer: S) -> Result +where + S: Serializer, +{ + serializer.collect_str(&report) +} diff --git a/crates/meroctl/src/cli/app.rs b/crates/meroctl/src/cli/app.rs index 8d8fbe993..d3657f4e8 100644 --- a/crates/meroctl/src/cli/app.rs +++ b/crates/meroctl/src/cli/app.rs @@ -1,11 +1,13 @@ +use calimero_primitives::application::Application; use clap::{Parser, Subcommand}; use const_format::concatcp; use eyre::Result as EyreResult; -use super::RootArgs; use crate::cli::app::get::GetCommand; use crate::cli::app::install::InstallCommand; use crate::cli::app::list::ListCommand; +use crate::cli::Environment; +use crate::output::Report; mod get; mod install; @@ -38,12 +40,25 @@ pub enum AppSubCommands { List(ListCommand), } +impl Report for Application { + fn report(&self) { + println!("id: {}", self.id); + println!("size: {}", self.size); + println!("blobId: {}", self.blob); + println!("source: {}", self.source); + println!("metadata:"); + for item in &self.metadata { + println!(" {:?}", item); + } + } +} + impl AppCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { + pub async fn run(self, environment: &Environment) -> EyreResult<()> { match self.subcommand { - AppSubCommands::Get(get) => get.run(args).await, - AppSubCommands::Install(install) => install.run(args).await, - AppSubCommands::List(list) => list.run(args).await, + AppSubCommands::Get(get) => get.run(environment).await, + AppSubCommands::Install(install) => install.run(environment).await, + AppSubCommands::List(list) => list.run(environment).await, } } } diff --git a/crates/meroctl/src/cli/app/get.rs b/crates/meroctl/src/cli/app/get.rs index f4f2dba7d..9c6eb9c80 100644 --- a/crates/meroctl/src/cli/app/get.rs +++ b/crates/meroctl/src/cli/app/get.rs @@ -1,9 +1,11 @@ -use clap::Parser; -use eyre::{bail, Result as EyreResult}; +use calimero_server_primitives::admin::GetApplicationResponse; +use clap::{Parser, ValueEnum}; +use eyre::Result as EyreResult; use reqwest::Client; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Parser, Debug)] #[command(about = "Fetch application details")] @@ -12,17 +14,30 @@ pub struct GetCommand { pub app_id: String, } +#[derive(ValueEnum, Debug, Clone)] +pub enum GetValues { + Details, +} + +impl Report for GetApplicationResponse { + fn report(&self) { + match self.data.application { + Some(ref application) => application.report(), + None => println!("No application found"), + } + } +} + impl GetCommand { - #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; let url = multiaddr_to_url( fetch_multiaddr(&config)?, &format!("admin-api/dev/applications/{}", self.app_id), )?; - let response = get_response( + let response: GetApplicationResponse = do_request( &Client::new(), url, None::<()>, @@ -31,11 +46,7 @@ impl GetCommand { ) .await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } - - println!("{}", response.text().await?); + environment.output.write(&response); Ok(()) } diff --git a/crates/meroctl/src/cli/app/install.rs b/crates/meroctl/src/cli/app/install.rs index b095cacba..c8487f415 100644 --- a/crates/meroctl/src/cli/app/install.rs +++ b/crates/meroctl/src/cli/app/install.rs @@ -6,11 +6,11 @@ use camino::Utf8PathBuf; use clap::Parser; use eyre::{bail, Result}; use reqwest::Client; -use tracing::info; use url::Url; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Debug, Parser)] #[command(about = "Install an application")] @@ -28,26 +28,35 @@ pub struct InstallCommand { pub hash: Option, } +impl Report for InstallApplicationResponse { + fn report(&self) { + println!("id: {}", self.data.application_id); + } +} + impl InstallCommand { - pub async fn run(self, args: RootArgs) -> Result<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> Result<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; let mut is_dev_installation = false; let metadata = self.metadata.map(String::into_bytes).unwrap_or_default(); - let install_request = if let Some(app_path) = self.path { - let install_dev_request = - InstallDevApplicationRequest::new(app_path.canonicalize_utf8()?, metadata); + let request = if let Some(app_path) = self.path { is_dev_installation = true; - serde_json::to_value(install_dev_request)? + serde_json::to_value(InstallDevApplicationRequest::new( + app_path.canonicalize_utf8()?, + metadata, + ))? } else if let Some(app_url) = self.url { - let install_request = - InstallApplicationRequest::new(Url::parse(&app_url)?, self.hash, metadata); - serde_json::to_value(install_request)? + serde_json::to_value(InstallApplicationRequest::new( + Url::parse(&app_url)?, + self.hash, + metadata, + ))? } else { bail!("Either path or url must be provided"); }; - let install_url = multiaddr_to_url( + let url = multiaddr_to_url( fetch_multiaddr(&config)?, if is_dev_installation { "admin-api/dev/install-dev-application" @@ -56,33 +65,16 @@ impl InstallCommand { }, )?; - let install_response = get_response( + let response: InstallApplicationResponse = do_request( &Client::new(), - install_url, - Some(install_request), + url, + Some(request), &config.identity, RequestType::Post, ) .await?; - if !install_response.status().is_success() { - let status = install_response.status(); - let error_text = install_response.text().await?; - bail!( - "Application installation failed with status: {}. Error: {}", - status, - error_text - ) - } - - let body = install_response - .json::() - .await?; - - info!( - "Application installed successfully. Application ID: {}", - body.data.application_id - ); + environment.output.write(&response); Ok(()) } diff --git a/crates/meroctl/src/cli/app/list.rs b/crates/meroctl/src/cli/app/list.rs index 3e297b03d..7bd35e760 100644 --- a/crates/meroctl/src/cli/app/list.rs +++ b/crates/meroctl/src/cli/app/list.rs @@ -1,20 +1,29 @@ use calimero_server_primitives::admin::ListApplicationsResponse; use clap::Parser; -use eyre::{bail, Result as EyreResult}; +use eyre::Result as EyreResult; use reqwest::Client; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Debug, Parser)] #[command(about = "List installed applications")] pub struct ListCommand; +impl Report for ListApplicationsResponse { + fn report(&self) { + for application in self.data.apps.iter() { + application.report(); + } + } +} + impl ListCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; - let response = get_response( + let response: ListApplicationsResponse = do_request( &Client::new(), multiaddr_to_url(fetch_multiaddr(&config)?, "admin-api/dev/applications")?, None::<()>, @@ -23,17 +32,7 @@ impl ListCommand { ) .await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } - - let api_response: ListApplicationsResponse = response.json().await?; - let app_list = api_response.data.apps; - - #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] - for app in app_list { - println!("{}", app.id); - } + environment.output.write(&response); Ok(()) } diff --git a/crates/meroctl/src/cli/context.rs b/crates/meroctl/src/cli/context.rs index 82b6b1c9d..75dfa402a 100644 --- a/crates/meroctl/src/cli/context.rs +++ b/crates/meroctl/src/cli/context.rs @@ -1,3 +1,4 @@ +use calimero_primitives::context::Context; use clap::{Parser, Subcommand}; use const_format::concatcp; use eyre::Result as EyreResult; @@ -8,7 +9,8 @@ use crate::cli::context::get::GetCommand; use crate::cli::context::join::JoinCommand; use crate::cli::context::list::ListCommand; use crate::cli::context::watch::WatchCommand; -use crate::cli::RootArgs; +use crate::cli::Environment; +use crate::output::Report; mod create; mod delete; @@ -52,15 +54,23 @@ pub enum ContextSubCommands { Watch(WatchCommand), } +impl Report for Context { + fn report(&self) { + println!("id: {}", self.id); + println!("application_id: {}", self.application_id); + println!("root_hash: {}", self.root_hash); + } +} + impl ContextCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { + pub async fn run(self, environment: &Environment) -> EyreResult<()> { match self.subcommand { - ContextSubCommands::Create(create) => create.run(args).await, - ContextSubCommands::Delete(delete) => delete.run(args).await, - ContextSubCommands::Get(get) => get.run(args).await, - ContextSubCommands::Join(join) => join.run(args).await, - ContextSubCommands::List(list) => list.run(args).await, - ContextSubCommands::Watch(watch) => watch.run(args).await, + ContextSubCommands::Create(create) => create.run(environment).await, + ContextSubCommands::Delete(delete) => delete.run(environment).await, + ContextSubCommands::Get(get) => get.run(environment).await, + ContextSubCommands::Join(join) => join.run(environment).await, + ContextSubCommands::List(list) => list.run(environment).await, + ContextSubCommands::Watch(watch) => watch.run(environment).await, } } } diff --git a/crates/meroctl/src/cli/context/create.rs b/crates/meroctl/src/cli/context/create.rs index e6d88957b..e622f8d44 100644 --- a/crates/meroctl/src/cli/context/create.rs +++ b/crates/meroctl/src/cli/context/create.rs @@ -1,15 +1,10 @@ -#![allow( - clippy::print_stdout, - clippy::print_stderr, - reason = "Acceptable for CLI" -)] - use calimero_primitives::application::ApplicationId; use calimero_primitives::context::ContextId; use calimero_primitives::hash::Hash; use calimero_server_primitives::admin::{ CreateContextRequest, CreateContextResponse, GetApplicationResponse, InstallApplicationResponse, InstallDevApplicationRequest, UpdateContextApplicationRequest, + UpdateContextApplicationResponse, }; use camino::Utf8PathBuf; use clap::Parser; @@ -22,8 +17,9 @@ use reqwest::Client; use tokio::runtime::Handle; use tokio::sync::mpsc; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::{ErrorLine, InfoLine, Report}; #[derive(Debug, Parser)] #[command(about = "Create a new context")] @@ -64,9 +60,22 @@ pub struct CreateCommand { context_seed: Option, } +impl Report for CreateContextResponse { + fn report(&self) { + println!("id: {}", self.data.context_id); + println!("member_public_key: {}", self.data.member_public_key); + } +} + +impl Report for UpdateContextApplicationResponse { + fn report(&self) { + println!("Context application updated"); + } +} + impl CreateCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; let multiaddr = fetch_multiaddr(&config)?; let client = Client::new(); @@ -79,6 +88,7 @@ impl CreateCommand { params, } => { let _ = create_context( + &environment, &client, &multiaddr, context_seed, @@ -99,8 +109,9 @@ impl CreateCommand { let metadata = metadata.map(String::into_bytes); let application_id = install_app( + &environment, &client, - &&multiaddr, + &multiaddr, path.clone(), metadata.clone(), &config.identity, @@ -108,8 +119,9 @@ impl CreateCommand { .await?; let context_id = create_context( + &environment, &client, - &&multiaddr, + &multiaddr, context_seed, application_id, params, @@ -118,8 +130,9 @@ impl CreateCommand { .await?; watch_app_and_update_context( + &environment, &client, - &&multiaddr, + &multiaddr, context_id, path, metadata, @@ -135,6 +148,7 @@ impl CreateCommand { } async fn create_context( + environment: &Environment, client: &Client, base_multiaddr: &Multiaddr, context_seed: Option, @@ -153,33 +167,16 @@ async fn create_context( params.map(String::into_bytes).unwrap_or_default(), ); - let response = get_response(client, url, Some(request), keypair, RequestType::Post).await?; - - if response.status().is_success() { - let context_response: CreateContextResponse = response.json().await?; - - let context_id = context_response.data.context_id; + let response: CreateContextResponse = + do_request(client, url, Some(request), keypair, RequestType::Post).await?; - println!("Context `\x1b[36m{context_id}\x1b[0m` created!"); + environment.output.write(&response); - println!( - "Context{{\x1b[36m{context_id}\x1b[0m}} -> Application{{\x1b[36m{application_id}\x1b[0m}}", - ); - - return Ok(context_id); - } - - let status = response.status(); - let error_text = response.text().await?; - - bail!( - "Request failed with status: {}. Error: {}", - status, - error_text - ); + Ok(response.data.context_id) } async fn watch_app_and_update_context( + environment: &Environment, client: &Client, base_multiaddr: &Multiaddr, context_id: ContextId, @@ -198,13 +195,15 @@ async fn watch_app_and_update_context( watcher.watch(path.as_std_path(), RecursiveMode::NonRecursive)?; - println!("(i) Watching for changes to \"\x1b[36m{path}\x1b[0m\""); + environment + .output + .write(&InfoLine(&format!("Watching for changes to {}", path))); while let Some(event) = rx.recv().await { let event = match event { Ok(event) => event, Err(err) => { - eprintln!("\x1b[1mERROR\x1b[0m: {err:?}"); + environment.output.write(&ErrorLine(&format!("{err:?}"))); continue; } }; @@ -212,7 +211,9 @@ async fn watch_app_and_update_context( match event.kind { EventKind::Modify(ModifyKind::Data(_)) => {} EventKind::Remove(_) => { - eprintln!("\x1b[33mWARN\x1b[0m: file removed, ignoring.."); + environment + .output + .write(&ErrorLine("File removed, ignoring..")); continue; } EventKind::Any @@ -223,6 +224,7 @@ async fn watch_app_and_update_context( } let application_id = install_app( + environment, client, base_multiaddr, path.clone(), @@ -231,14 +233,22 @@ async fn watch_app_and_update_context( ) .await?; - update_context_application(client, base_multiaddr, context_id, application_id, keypair) - .await?; + update_context_application( + environment, + client, + base_multiaddr, + context_id, + application_id, + keypair, + ) + .await?; } Ok(()) } async fn update_context_application( + environment: &Environment, client: &Client, base_multiaddr: &Multiaddr, context_id: ContextId, @@ -252,24 +262,12 @@ async fn update_context_application( let request = UpdateContextApplicationRequest::new(application_id); - let response = get_response(client, url, Some(request), keypair, RequestType::Post).await?; + let response: UpdateContextApplicationResponse = + do_request(client, url, Some(request), keypair, RequestType::Post).await?; - if response.status().is_success() { - println!( - "Context{{\x1b[36m{context_id}\x1b[0m}} -> Application{{\x1b[36m{application_id}\x1b[0m}}" - ); + environment.output.write(&response); - return Ok(()); - } - - let status = response.status(); - let error_text = response.text().await?; - - bail!( - "Request failed with status: {}. Error: {}", - status, - error_text - ); + Ok(()) } async fn app_installed( @@ -283,55 +281,28 @@ async fn app_installed( &format!("admin-api/dev/application/{application_id}"), )?; - let response = get_response(client, url, None::<()>, keypair, RequestType::Get).await?; + let response: GetApplicationResponse = + do_request(client, url, None::<()>, keypair, RequestType::Get).await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } - - let api_response: GetApplicationResponse = response.json().await?; - - Ok(api_response.data.application.is_some()) + Ok(response.data.application.is_some()) } async fn install_app( + environment: &Environment, client: &Client, base_multiaddr: &Multiaddr, path: Utf8PathBuf, metadata: Option>, keypair: &Keypair, ) -> EyreResult { - let install_url = multiaddr_to_url(base_multiaddr, "admin-api/dev/install-dev-application")?; - - let install_request = InstallDevApplicationRequest::new(path, metadata.unwrap_or_default()); - - let install_response = get_response( - client, - install_url, - Some(install_request), - keypair, - RequestType::Post, - ) - .await?; - - if !install_response.status().is_success() { - let status = install_response.status(); - let error_text = install_response.text().await?; - bail!( - "Application installation failed with status: {}. Error: {}", - status, - error_text - ) - } + let url = multiaddr_to_url(base_multiaddr, "admin-api/dev/install-dev-application")?; - let response = install_response - .json::() - .await?; + let request = InstallDevApplicationRequest::new(path, metadata.unwrap_or_default()); - println!( - "Application `\x1b[36m{}\x1b[0m` installed!", - response.data.application_id - ); + let response: InstallApplicationResponse = + do_request(client, url, Some(request), keypair, RequestType::Post).await?; + + environment.output.write(&response); Ok(response.data.application_id) } diff --git a/crates/meroctl/src/cli/context/delete.rs b/crates/meroctl/src/cli/context/delete.rs index c2aabc48b..ebfa27b94 100644 --- a/crates/meroctl/src/cli/context/delete.rs +++ b/crates/meroctl/src/cli/context/delete.rs @@ -1,11 +1,11 @@ +use calimero_server_primitives::admin::DeleteContextResponse; use clap::Parser; -use eyre::{bail, Result as EyreResult}; -use libp2p::identity::Keypair; -use libp2p::Multiaddr; +use eyre::Result as EyreResult; use reqwest::Client; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Debug, Parser)] #[command(about = "Delete an context")] @@ -14,33 +14,32 @@ pub struct DeleteCommand { pub context_id: String, } -impl DeleteCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; - - self.delete_context(fetch_multiaddr(&config)?, &Client::new(), &config.identity) - .await +impl Report for DeleteContextResponse { + fn report(&self) { + println!("is_deleted: {}", self.data.is_deleted); } +} + +impl DeleteCommand { + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; - #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] - async fn delete_context( - &self, - multiaddr: &Multiaddr, - client: &Client, - keypair: &Keypair, - ) -> EyreResult<()> { let url = multiaddr_to_url( - multiaddr, + fetch_multiaddr(&config)?, &format!("admin-api/dev/contexts/{}", self.context_id), )?; - let response = get_response(client, url, None::<()>, keypair, RequestType::Delete).await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } + let response: DeleteContextResponse = do_request( + &Client::new(), + url, + None::<()>, + &config.identity, + RequestType::Delete, + ) + .await?; + + environment.output.write(&response); - let text = response.text().await?; - println!("Context deleted successfully: {text}"); Ok(()) } } diff --git a/crates/meroctl/src/cli/context/get.rs b/crates/meroctl/src/cli/context/get.rs index d868200cf..7930e153d 100644 --- a/crates/meroctl/src/cli/context/get.rs +++ b/crates/meroctl/src/cli/context/get.rs @@ -1,11 +1,18 @@ +use calimero_server_primitives::admin::{ + GetContextClientKeysResponse, GetContextIdentitiesResponse, GetContextResponse, + GetContextStorageResponse, GetContextUsersResponse, +}; use clap::{Parser, ValueEnum}; -use eyre::{bail, Result as EyreResult}; +use eyre::Result as EyreResult; use libp2p::identity::Keypair; use libp2p::Multiaddr; use reqwest::Client; +use serde::de::DeserializeOwned; +use serde::Serialize; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Parser, Debug)] #[command(about = "Fetch details about the context")] @@ -16,6 +23,7 @@ pub struct GetCommand { #[arg(value_name = "CONTEXT_ID", help = "context_id of the context")] pub context_id: String, } + #[derive(Clone, Debug, ValueEnum)] pub enum GetRequest { Context, @@ -25,40 +33,72 @@ pub enum GetRequest { Identities, } +impl Report for GetContextResponse { + fn report(&self) { + self.data.report() + } +} + +impl Report for GetContextUsersResponse { + fn report(&self) { + for user in &self.data.context_users { + println!("user_id: {}", user.user_id); + println!("joined_at: {}", user.joined_at); + } + } +} + +impl Report for GetContextClientKeysResponse { + fn report(&self) { + println!("Client Keys: {:?}", self) + } +} + +impl Report for GetContextStorageResponse { + fn report(&self) { + println!("Storage: {:?}", self) + } +} + +impl Report for GetContextIdentitiesResponse { + fn report(&self) { + println!("Identities: {:?}", self) + } +} + impl GetCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; let multiaddr = fetch_multiaddr(&config)?; let client = Client::new(); match self.method { GetRequest::Context => { - self.get_context(&multiaddr, &client, &config.identity) - .await?; + self.get_context(&environment, &multiaddr, &client, &config.identity) + .await } GetRequest::Users => { - self.get_users(&multiaddr, &client, &config.identity) - .await? + self.get_users(&environment, &multiaddr, &client, &config.identity) + .await } GetRequest::ClientKeys => { - self.get_client_keys(&multiaddr, &client, &config.identity) - .await?; + self.get_client_keys(&environment, &multiaddr, &client, &config.identity) + .await } GetRequest::Storage => { - self.get_storage(&multiaddr, &client, &config.identity) - .await?; + self.get_storage(&environment, &multiaddr, &client, &config.identity) + .await } GetRequest::Identities => { - self.get_identities(&multiaddr, &client, &config.identity) - .await?; + self.get_identities(&environment, &multiaddr, &client, &config.identity) + .await } } - - Ok(()) } async fn get_context( &self, + environment: &Environment, multiaddr: &Multiaddr, client: &Client, keypair: &Keypair, @@ -67,11 +107,13 @@ impl GetCommand { multiaddr, &format!("admin-api/dev/contexts/{}", self.context_id), )?; - self.make_request(client, url, keypair).await + self.make_request::(environment, client, url, keypair) + .await } async fn get_users( &self, + environment: &Environment, multiaddr: &Multiaddr, client: &Client, keypair: &Keypair, @@ -80,11 +122,13 @@ impl GetCommand { multiaddr, &format!("admin-api/dev/contexts/{}/users", self.context_id), )?; - self.make_request(client, url, keypair).await + self.make_request::(environment, client, url, keypair) + .await } async fn get_client_keys( &self, + environment: &Environment, multiaddr: &Multiaddr, client: &Client, keypair: &Keypair, @@ -93,11 +137,13 @@ impl GetCommand { multiaddr, &format!("admin-api/dev/contexts/{}/client-keys", self.context_id), )?; - self.make_request(client, url, keypair).await + self.make_request::(environment, client, url, keypair) + .await } async fn get_storage( &self, + environment: &Environment, multiaddr: &Multiaddr, client: &Client, keypair: &Keypair, @@ -106,11 +152,13 @@ impl GetCommand { multiaddr, &format!("admin-api/dev/contexts/{}/storage", self.context_id), )?; - self.make_request(client, url, keypair).await + self.make_request::(environment, client, url, keypair) + .await } async fn get_identities( &self, + environment: &Environment, multiaddr: &Multiaddr, client: &Client, keypair: &Keypair, @@ -119,24 +167,26 @@ impl GetCommand { multiaddr, &format!("admin-api/dev/contexts/{}/identities", self.context_id), )?; - self.make_request(client, url, keypair).await + self.make_request::(environment, client, url, keypair) + .await } #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] - async fn make_request( + async fn make_request( &self, + environment: &Environment, client: &Client, url: reqwest::Url, keypair: &Keypair, - ) -> EyreResult<()> { - let response = get_response(client, url, None::<()>, keypair, RequestType::Get).await?; + ) -> EyreResult<()> + where + O: DeserializeOwned + Report + Serialize, + { + let response = + do_request::<(), O>(client, url, None::<()>, keypair, RequestType::Get).await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } + environment.output.write(&response); - let text = response.text().await?; - println!("{text}"); Ok(()) } } diff --git a/crates/meroctl/src/cli/context/join.rs b/crates/meroctl/src/cli/context/join.rs index b4eae1bbc..d25699072 100644 --- a/crates/meroctl/src/cli/context/join.rs +++ b/crates/meroctl/src/cli/context/join.rs @@ -2,12 +2,12 @@ use calimero_primitives::context::ContextInvitationPayload; use calimero_primitives::identity::PrivateKey; use calimero_server_primitives::admin::{JoinContextRequest, JoinContextResponse}; use clap::Parser; -use eyre::{bail, Result as EyreResult}; +use eyre::Result as EyreResult; use reqwest::Client; -use tracing::info; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Debug, Parser)] #[command(about = "Join an application context")] @@ -24,11 +24,23 @@ pub struct JoinCommand { invitation_payload: ContextInvitationPayload, } +impl Report for JoinContextResponse { + fn report(&self) { + match self.data { + Some(ref payload) => { + print!("context_id {}", payload.context_id); + print!("member_public_key: {}", payload.member_public_key); + } + None => todo!(), + } + } +} + impl JoinCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; - let response = get_response( + let response: JoinContextResponse = do_request( &Client::new(), multiaddr_to_url(fetch_multiaddr(&config)?, "admin-api/dev/contexts/join")?, Some(JoinContextRequest::new( @@ -40,18 +52,7 @@ impl JoinCommand { ) .await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } - - let Some(body) = response.json::().await?.data else { - bail!("Unable to join context"); - }; - - info!( - "Context {} sucesfully joined as {}", - body.context_id, body.member_public_key - ); + environment.output.write(&response); Ok(()) } diff --git a/crates/meroctl/src/cli/context/list.rs b/crates/meroctl/src/cli/context/list.rs index e142b3c71..6ec7d9f2c 100644 --- a/crates/meroctl/src/cli/context/list.rs +++ b/crates/meroctl/src/cli/context/list.rs @@ -1,20 +1,29 @@ use calimero_server_primitives::admin::GetContextsResponse; use clap::Parser; -use eyre::{bail, Result as EyreResult}; +use eyre::Result as EyreResult; use reqwest::Client; -use crate::cli::RootArgs; -use crate::common::{fetch_multiaddr, get_response, load_config, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; #[derive(Debug, Parser)] #[command(about = "List all contexts")] pub struct ListCommand; +impl Report for GetContextsResponse { + fn report(&self) { + for context in self.data.contexts.iter() { + context.report(); + } + } +} + impl ListCommand { - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; - let response = get_response( + let response: GetContextsResponse = do_request( &Client::new(), multiaddr_to_url(fetch_multiaddr(&config)?, "admin-api/dev/contexts")?, None::<()>, @@ -23,17 +32,7 @@ impl ListCommand { ) .await?; - if !response.status().is_success() { - bail!("Request failed with status: {}", response.status()) - } - - let api_response: GetContextsResponse = response.json().await?; - let contexts = api_response.data.contexts; - - #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] - for context in contexts { - println!("{}", context.id); - } + environment.output.write(&response); Ok(()) } diff --git a/crates/meroctl/src/cli/context/watch.rs b/crates/meroctl/src/cli/context/watch.rs index bcf6d9b52..c64b48d56 100644 --- a/crates/meroctl/src/cli/context/watch.rs +++ b/crates/meroctl/src/cli/context/watch.rs @@ -1,12 +1,14 @@ use calimero_primitives::context::ContextId; -use calimero_server_primitives::ws::{RequestPayload, SubscribeRequest}; +use calimero_server_primitives::ws::{Request, RequestPayload, Response, SubscribeRequest}; use clap::Parser; use eyre::Result as EyreResult; use futures_util::{SinkExt, StreamExt}; use tokio_tungstenite::connect_async; +use tokio_tungstenite::tungstenite::Message as WsMessage; -use super::RootArgs; +use crate::cli::Environment; use crate::common::{fetch_multiaddr, load_config, multiaddr_to_url}; +use crate::output::{InfoLine, Report}; #[derive(Debug, Parser)] #[command(about = "Watch events from a context")] @@ -16,38 +18,53 @@ pub struct WatchCommand { pub context_id: ContextId, } +impl Report for Response { + fn report(&self) { + println!("id: {:?}", self.id); + println!("payload: {:?}", self.body); + } +} + impl WatchCommand { - #[allow(clippy::print_stderr, reason = "TODO")] - #[allow(clippy::print_stdout, reason = "TODO")] - pub async fn run(self, args: RootArgs) -> EyreResult<()> { - let config = load_config(&args.home, &args.node_name)?; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; let mut url = multiaddr_to_url(fetch_multiaddr(&config)?, "ws")?; url.set_scheme("ws") .map_err(|_| eyre::eyre!("Failed to set URL scheme"))?; - println!("Connecting to WebSocket at {}", url); + environment + .output + .write(&InfoLine(&format!("Connecting to WebSocket at {url}"))); let (ws_stream, _) = connect_async(url.as_str()).await?; - let (mut write, mut read) = ws_stream.split(); - // Send subscribe message - let subscribe_request = - RequestPayload::Subscribe(SubscribeRequest::new(vec![self.context_id])); - let subscribe_msg = serde_json::to_string(&subscribe_request)?; - write - .send(tokio_tungstenite::tungstenite::Message::Text(subscribe_msg)) - .await?; + let subscribe_request = RequestPayload::Subscribe(SubscribeRequest { + context_ids: vec![self.context_id], + }); + let request = Request { + id: None, + payload: serde_json::to_value(&subscribe_request)?, + }; + + let subscribe_msg = serde_json::to_string(&request)?; + write.send(WsMessage::Text(subscribe_msg)).await?; - println!("Subscribed to context {}", self.context_id); - println!("Streaming events (press Ctrl+C to stop):"); + environment.output.write(&InfoLine(&format!( + "Subscribed to context {}", + self.context_id + ))); + environment.output.write(&InfoLine(&format!( + "Streaming events (press Ctrl+C to stop):" + ))); while let Some(message) = read.next().await { match message { Ok(msg) => { - if let tokio_tungstenite::tungstenite::Message::Text(text) = msg { - println!("{}", text); + if let WsMessage::Text(text) = msg { + let response = serde_json::from_str::(&text)?; + environment.output.write(&response); } } Err(e) => eprintln!("Error receiving message: {}", e), diff --git a/crates/meroctl/src/cli/jsonrpc.rs b/crates/meroctl/src/cli/jsonrpc.rs index adb3b114c..7ffec3c27 100644 --- a/crates/meroctl/src/cli/jsonrpc.rs +++ b/crates/meroctl/src/cli/jsonrpc.rs @@ -1,15 +1,15 @@ -use calimero_config::ConfigFile; use calimero_primitives::context::ContextId; use calimero_server_primitives::jsonrpc::{ - ExecuteRequest, Request, RequestId, RequestPayload, Version, + ExecuteRequest, Request, RequestId, RequestPayload, Response, Version, }; use clap::{Parser, ValueEnum}; use const_format::concatcp; use eyre::{bail, Result as EyreResult}; use serde_json::Value; -use super::RootArgs; -use crate::common::{get_response, multiaddr_to_url, RequestType}; +use crate::cli::Environment; +use crate::common::{do_request, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; pub const EXAMPLES: &str = r" # Execute a RPC method call @@ -49,18 +49,18 @@ pub enum CallType { Execute, } +impl Report for Response { + fn report(&self) { + println!("jsonrpc: {:#?}", self.jsonrpc); + println!("id: {:?}", self.id); + println!("result: {:#?}", self.body); + } +} + #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] impl CallCommand { - pub async fn run(self, root_args: RootArgs) -> EyreResult<()> { - let path = root_args.home.join(&root_args.node_name); - - if !ConfigFile::exists(&path) { - bail!("Config file does not exist") - }; - - let Ok(config) = ConfigFile::load(&path) else { - bail!("Failed to load config file") - }; + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; let Some(multiaddr) = config.network.server.listen.first() else { bail!("No address.") @@ -94,7 +94,7 @@ impl CallCommand { } let client = reqwest::Client::new(); - let response = get_response( + let response: Response = do_request( &client, url, Some(request), @@ -103,7 +103,7 @@ impl CallCommand { ) .await?; - println!("Response: {}", response.text().await?); + environment.output.write(&response); Ok(()) } diff --git a/crates/meroctl/src/common.rs b/crates/meroctl/src/common.rs index 1b0015dcd..7694f3663 100644 --- a/crates/meroctl/src/common.rs +++ b/crates/meroctl/src/common.rs @@ -5,9 +5,12 @@ use eyre::{bail, eyre, Result as EyreResult}; use libp2p::identity::Keypair; use libp2p::multiaddr::Protocol; use libp2p::Multiaddr; -use reqwest::{Client, Response, Url}; +use reqwest::{Client, Url}; +use serde::de::DeserializeOwned; use serde::Serialize; +use crate::cli::ApiError; + pub fn multiaddr_to_url(multiaddr: &Multiaddr, api_path: &str) -> EyreResult { #[expect(clippy::wildcard_enum_match_arm, reason = "Acceptable here")] let (ip, port, scheme) = multiaddr.iter().fold( @@ -32,15 +35,16 @@ pub fn multiaddr_to_url(multiaddr: &Multiaddr, api_path: &str) -> EyreResult( +pub async fn do_request( client: &Client, url: Url, - body: Option, + body: Option, keypair: &Keypair, req_type: RequestType, -) -> EyreResult +) -> EyreResult where - S: Serialize, + I: Serialize, + O: DeserializeOwned, { let timestamp = Utc::now().timestamp().to_string(); let signature = keypair.sign(timestamp.as_bytes())?; @@ -55,11 +59,67 @@ where .header("X-Signature", bs58::encode(signature).into_string()) .header("X-Timestamp", timestamp); - builder - .send() - .await - .map_err(|_| eyre!("Error with client request")) + let response = builder.send().await?; + + if !response.status().is_success() { + bail!(ApiError { + status_code: response.status().as_u16(), + message: response.text().await?, + }); + } + + let result = response.json::().await?; + + return Ok(result); } +// pub async fn do_request( +// client: &Client, +// url: Url, +// body: Option, +// keypair: &Keypair, +// req_type: RequestType, +// ) -> Result +// where +// I: Serialize, +// O: DeserializeOwned, +// { +// let timestamp = Utc::now().timestamp().to_string(); +// let signature = keypair +// .sign(timestamp.as_bytes()) +// .map_err(|err| ServerRequestError::SigningError(err.to_string()))?; + +// let mut builder = match req_type { +// RequestType::Get => client.get(url), +// RequestType::Post => client.post(url).json(&body), +// RequestType::Delete => client.delete(url), +// }; + +// builder = builder +// .header("X-Signature", bs58::encode(signature).into_string()) +// .header("X-Timestamp", timestamp); + +// let response = builder +// .send() +// .await +// .map_err(|err| ServerRequestError::ExecutionError(err.to_string()))?; + +// if !response.status().is_success() { +// return Err(ServerRequestError::ApiError(ApiError { +// status_code: response.status().as_u16(), +// message: response +// .text() +// .await +// .map_err(|err| ServerRequestError::DeserializeError(err.to_string()))?, +// })); +// } + +// let result = response +// .json::() +// .await +// .map_err(|err| ServerRequestError::DeserializeError(err.to_string()))?; + +// return Ok(result); +// } pub fn load_config(home: &Utf8Path, node_name: &str) -> EyreResult { let path = home.join(node_name); diff --git a/crates/meroctl/src/main.rs b/crates/meroctl/src/main.rs index 051e2c59a..1021a77e0 100644 --- a/crates/meroctl/src/main.rs +++ b/crates/meroctl/src/main.rs @@ -1,32 +1,26 @@ -use std::env::var; +use std::process::ExitCode; use calimero_server as _; use clap::Parser; -use eyre::Result as EyreResult; -use tracing_subscriber::fmt::layer; -use tracing_subscriber::prelude::*; -use tracing_subscriber::{registry, EnvFilter}; use crate::cli::RootCommand; mod cli; mod common; mod defaults; +mod output; #[tokio::main] -async fn main() -> EyreResult<()> { - setup()?; +async fn main() -> ExitCode { + if let Err(err) = color_eyre::install() { + eprintln!("Failed to install color_eyre: {}", err); + return ExitCode::FAILURE; + } let command = RootCommand::parse(); - command.run().await -} - -fn setup() -> EyreResult<()> { - registry() - .with(EnvFilter::builder().parse(format!("info,{}", var("RUST_LOG").unwrap_or_default()))?) - .with(layer()) - .init(); - - color_eyre::install() + match command.run().await { + Ok(_) => ExitCode::SUCCESS, + Err(err) => err.into(), + } } diff --git a/crates/meroctl/src/output.rs b/crates/meroctl/src/output.rs new file mode 100644 index 000000000..a9ca355ca --- /dev/null +++ b/crates/meroctl/src/output.rs @@ -0,0 +1,55 @@ +use clap::ValueEnum; +use color_eyre::owo_colors::OwoColorize; +use serde::Serialize; + +#[derive(Clone, Copy, Debug, Default, ValueEnum)] +pub enum Format { + Json, + #[default] + PlainText, +} + +#[derive(Debug, Default)] +pub struct Output { + format: Format, +} + +pub trait Report { + fn report(&self); +} + +impl Output { + pub fn new(output_type: Format) -> Self { + Output { + format: output_type, + } + } + + pub fn write(&self, value: &T) { + match self.format { + Format::Json => match serde_json::to_string(&value) { + Ok(json) => println!("{}", json), + Err(e) => eprintln!("Failed to serialize to JSON: {}", e), + }, + Format::PlainText => value.report(), + } + } +} + +#[derive(Clone, Debug, Serialize)] +pub struct InfoLine<'a>(pub &'a str); + +impl Report for InfoLine<'_> { + fn report(&self) { + println!("{} {}", "[INFO]".green(), self.0); + } +} + +#[derive(Clone, Debug, Serialize)] +pub struct ErrorLine<'a>(pub &'a str); + +impl Report for ErrorLine<'_> { + fn report(&self) { + println!("{} {}", "[ERROR]".red(), self.0); + } +} diff --git a/crates/server-primitives/src/admin.rs b/crates/server-primitives/src/admin.rs index 68122c932..5857f7096 100644 --- a/crates/server-primitives/src/admin.rs +++ b/crates/server-primitives/src/admin.rs @@ -1,12 +1,17 @@ use calimero_primitives::application::{Application, ApplicationId}; use calimero_primitives::context::{Context, ContextId, ContextInvitationPayload}; use calimero_primitives::hash::Hash; -use calimero_primitives::identity::{PrivateKey, PublicKey, WalletType}; +use calimero_primitives::identity::{ClientKey, ContextUser, PrivateKey, PublicKey, WalletType}; use camino::Utf8PathBuf; use serde::{Deserialize, Serialize}; use serde_json::Value; use url::Url; +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[expect(clippy::exhaustive_structs, reason = "Exhaustive")] +pub struct Empty; + +// -------------------------------------------- Application API -------------------------------------------- #[derive(Clone, Debug, Deserialize, Serialize)] #[non_exhaustive] pub struct InstallApplicationRequest { @@ -15,13 +20,6 @@ pub struct InstallApplicationRequest { pub metadata: Vec, } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct UninstallApplicationRequest { - pub application_id: ApplicationId, -} - impl InstallApplicationRequest { #[must_use] pub const fn new(url: Url, hash: Option, metadata: Vec) -> Self { @@ -33,6 +31,27 @@ impl InstallApplicationRequest { } } +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct ApplicationInstallResponseData { + pub application_id: ApplicationId, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct InstallApplicationResponse { + pub data: ApplicationInstallResponseData, +} + +impl InstallApplicationResponse { + #[must_use] + pub const fn new(application_id: ApplicationId) -> Self { + Self { + data: ApplicationInstallResponseData { application_id }, + } + } +} + #[derive(Clone, Debug, Deserialize, Serialize)] #[non_exhaustive] pub struct InstallDevApplicationRequest { @@ -47,28 +66,57 @@ impl InstallDevApplicationRequest { } } +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct UninstallApplicationRequest { + pub application_id: ApplicationId, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct UninstallApplicationResponseData { + pub application_id: ApplicationId, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct UninstallApplicationResponse { + pub data: UninstallApplicationResponseData, +} + +impl UninstallApplicationResponse { + #[must_use] + pub const fn new(application_id: ApplicationId) -> Self { + Self { + data: UninstallApplicationResponseData { application_id }, + } + } +} + #[derive(Clone, Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct ApplicationListResult { +pub struct ListApplicationResponseData { pub apps: Vec, } #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] pub struct ListApplicationsResponse { - pub data: ApplicationListResult, + pub data: ListApplicationResponseData, } impl ListApplicationsResponse { #[must_use] pub const fn new(apps: Vec) -> Self { Self { - data: ApplicationListResult { apps }, + data: ListApplicationResponseData { apps }, } } } -#[derive(Clone, Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] pub struct GetApplicationDetailsResponse { pub data: Application, @@ -81,70 +129,273 @@ impl GetApplicationDetailsResponse { } } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct InstallApplicationResponse { - pub data: ApplicationInstallResult, +pub struct GetApplicationResponse { + pub data: GetApplicationResult, } -impl InstallApplicationResponse { +impl GetApplicationResponse { #[must_use] - pub const fn new(application_id: ApplicationId) -> Self { + pub const fn new(application: Option) -> Self { Self { - data: ApplicationInstallResult { application_id }, + data: GetApplicationResult { application }, } } } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct UninstallApplicationResponse { - pub data: ApplicationUninstallResult, +pub struct GetApplicationResult { + pub application: Option, } -impl UninstallApplicationResponse { +// -------------------------------------------- Context API -------------------------------------------- +#[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct GetContextsResponse { + pub data: ContextList, +} + +impl GetContextsResponse { #[must_use] - pub const fn new(application_id: ApplicationId) -> Self { + pub const fn new(contexts: Vec) -> Self { Self { - data: ApplicationUninstallResult { application_id }, + data: ContextList { contexts }, } } } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct ApplicationInstallResult { - pub application_id: ApplicationId, +pub struct ContextList { + pub contexts: Vec, } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct ApplicationUninstallResult { +pub struct CreateContextRequest { pub application_id: ApplicationId, + pub context_seed: Option, + pub initialization_params: Vec, +} + +impl CreateContextRequest { + #[must_use] + pub const fn new( + application_id: ApplicationId, + context_seed: Option, + initialization_params: Vec, + ) -> Self { + Self { + application_id, + context_seed, + initialization_params, + } + } } #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct GetApplicationResponse { - pub data: GetApplicationResult, +pub struct CreateContextResponseData { + pub context_id: ContextId, + pub member_public_key: PublicKey, } -impl GetApplicationResponse { +#[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct CreateContextResponse { + pub data: CreateContextResponseData, +} + +impl CreateContextResponse { #[must_use] - pub const fn new(application: Option) -> Self { + pub const fn new(context_id: ContextId, member_public_key: PublicKey) -> Self { Self { - data: GetApplicationResult { application }, + data: CreateContextResponseData { + context_id, + member_public_key, + }, } } } +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct DeletedContextResponseData { + pub is_deleted: bool, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +pub struct DeleteContextResponse { + pub data: DeletedContextResponseData, +} + #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] -pub struct GetApplicationResult { - pub application: Option, +pub struct InviteToContextRequest { + pub context_id: ContextId, + pub inviter_id: PublicKey, + pub invitee_id: PublicKey, +} + +impl InviteToContextRequest { + #[must_use] + pub const fn new(context_id: ContextId, inviter_id: PublicKey, invitee_id: PublicKey) -> Self { + Self { + context_id, + inviter_id, + invitee_id, + } + } +} + +#[derive(Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct InviteToContextResponse { + pub invitation_payload: Option, +} + +impl InviteToContextResponse { + #[must_use] + pub const fn new(invitation_payload: Option) -> Self { + Self { invitation_payload } + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[non_exhaustive] +pub struct JoinContextRequest { + pub private_key: PrivateKey, + pub invitation_payload: ContextInvitationPayload, +} + +impl JoinContextRequest { + #[must_use] + pub const fn new( + private_key: PrivateKey, + invitation_payload: ContextInvitationPayload, + ) -> Self { + Self { + private_key, + invitation_payload, + } + } +} + +#[derive(Copy, Clone, Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct JoinContextResponseData { + pub context_id: ContextId, + pub member_public_key: PublicKey, +} + +impl JoinContextResponseData { + #[must_use] + pub const fn new(context_id: ContextId, member_public_key: PublicKey) -> Self { + Self { + context_id, + member_public_key, + } + } +} + +#[derive(Copy, Clone, Debug, Deserialize, Serialize)] +#[non_exhaustive] +pub struct JoinContextResponse { + pub data: Option, +} + +impl JoinContextResponse { + #[must_use] + pub const fn new(data: Option) -> Self { + Self { data } + } +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct UpdateContextApplicationRequest { + pub application_id: ApplicationId, +} + +impl UpdateContextApplicationRequest { + #[must_use] + pub const fn new(application_id: ApplicationId) -> Self { + Self { application_id } + } } +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +pub struct UpdateContextApplicationResponse { + pub data: Empty, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct GetContextStorageResponseData { + pub size_in_bytes: u64, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextStorageResponse { + pub data: GetContextStorageResponseData, +} + +impl GetContextStorageResponse { + #[must_use] + pub const fn new(size_in_bytes: u64) -> Self { + Self { + data: GetContextStorageResponseData { size_in_bytes }, + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextResponse { + pub data: Context, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ContextIdentitiesResponseData { + pub identities: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextIdentitiesResponse { + pub data: ContextIdentitiesResponseData, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextClientKeysResponseData { + pub client_keys: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct GetContextClientKeysResponse { + pub data: GetContextClientKeysResponseData, +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextUsersResponseData { + pub context_users: Vec, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct GetContextUsersResponse { + pub data: GetContextUsersResponseData, +} + +// -------------------------------------------- Misc API -------------------------------------------- #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] #[non_exhaustive] @@ -362,189 +613,3 @@ impl NodeChallengeMessage { } } } - -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct ContextStorage { - pub size_in_bytes: u64, -} - -impl ContextStorage { - #[must_use] - pub const fn new(size_in_bytes: u64) -> Self { - Self { size_in_bytes } - } -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct ContextList { - pub contexts: Vec, -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct GetContextsResponse { - pub data: ContextList, -} - -impl GetContextsResponse { - #[must_use] - pub const fn new(contexts: Vec) -> Self { - Self { - data: ContextList { contexts }, - } - } -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct CreateContextRequest { - pub application_id: ApplicationId, - pub context_seed: Option, - pub initialization_params: Vec, -} - -impl CreateContextRequest { - #[must_use] - pub const fn new( - application_id: ApplicationId, - context_seed: Option, - initialization_params: Vec, - ) -> Self { - Self { - application_id, - context_seed, - initialization_params, - } - } -} -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct InviteToContextRequest { - pub context_id: ContextId, - pub inviter_id: PublicKey, - pub invitee_id: PublicKey, -} - -impl InviteToContextRequest { - #[must_use] - pub const fn new(context_id: ContextId, inviter_id: PublicKey, invitee_id: PublicKey) -> Self { - Self { - context_id, - inviter_id, - invitee_id, - } - } -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct InviteToContextResponse { - pub invitation_payload: Option, -} - -impl InviteToContextResponse { - #[must_use] - pub const fn new(invitation_payload: Option) -> Self { - Self { invitation_payload } - } -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct InviteToContextResponseData { - pub context_id: ContextId, - pub invitee_public_key: PublicKey, -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct ContextResponse { - pub context_id: ContextId, - pub member_public_key: PublicKey, -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct CreateContextResponse { - pub data: ContextResponse, -} - -impl CreateContextResponse { - #[must_use] - pub const fn new(context_id: ContextId, member_public_key: PublicKey) -> Self { - Self { - data: ContextResponse { - context_id, - member_public_key, - }, - } - } -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -#[non_exhaustive] -pub struct JoinContextRequest { - pub private_key: PrivateKey, - pub invitation_payload: ContextInvitationPayload, -} - -impl JoinContextRequest { - #[must_use] - pub const fn new( - private_key: PrivateKey, - invitation_payload: ContextInvitationPayload, - ) -> Self { - Self { - private_key, - invitation_payload, - } - } -} - -#[derive(Copy, Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct JoinContextResponseData { - pub context_id: ContextId, - pub member_public_key: PublicKey, -} - -impl JoinContextResponseData { - #[must_use] - pub const fn new(context_id: ContextId, member_public_key: PublicKey) -> Self { - Self { - context_id, - member_public_key, - } - } -} - -#[derive(Copy, Clone, Debug, Serialize, Deserialize)] -#[non_exhaustive] -pub struct JoinContextResponse { - pub data: Option, -} - -impl JoinContextResponse { - #[must_use] - pub const fn new(data: Option) -> Self { - Self { data } - } -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct UpdateContextApplicationRequest { - pub application_id: ApplicationId, -} - -impl UpdateContextApplicationRequest { - #[must_use] - pub const fn new(application_id: ApplicationId) -> Self { - Self { application_id } - } -} diff --git a/crates/server-primitives/src/ws.rs b/crates/server-primitives/src/ws.rs index 132002cba..d3878800d 100644 --- a/crates/server-primitives/src/ws.rs +++ b/crates/server-primitives/src/ws.rs @@ -11,7 +11,6 @@ pub type RequestId = u64; // **************************** request ******************************* #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct Request

{ pub id: Option, #[serde(flatten)] @@ -20,7 +19,6 @@ pub struct Request

{ #[derive(Debug, Deserialize, Serialize)] #[serde(tag = "method", content = "params", rename_all = "snake_case")] -#[non_exhaustive] pub enum RequestPayload { Subscribe(SubscribeRequest), Unsubscribe(UnsubscribeRequest), @@ -30,20 +28,12 @@ pub enum RequestPayload { // **************************** response ******************************* #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct Response { pub id: Option, #[serde(flatten)] pub body: ResponseBody, } -impl Response { - #[must_use] - pub const fn new(id: Option, body: ResponseBody) -> Self { - Self { id, body } - } -} - #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] #[expect( @@ -57,7 +47,6 @@ pub enum ResponseBody { #[derive(Debug, Deserialize, Serialize)] #[serde(untagged)] -#[non_exhaustive] pub enum ResponseBodyError { ServerError(ServerResponseError), HandlerError(Value), @@ -65,7 +54,6 @@ pub enum ResponseBodyError { #[derive(Debug, Deserialize, Serialize)] #[serde(tag = "type", content = "data")] -#[non_exhaustive] pub enum ServerResponseError { ParseError(String), InternalError { @@ -78,58 +66,32 @@ pub enum ServerResponseError { // **************************** subscribe method ******************************* #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct SubscribeRequest { pub context_ids: Vec, } -impl SubscribeRequest { - #[must_use] - pub const fn new(context_ids: Vec) -> Self { - Self { context_ids } - } -} - #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct SubscribeResponse { pub context_ids: Vec, } - -impl SubscribeResponse { - #[must_use] - pub const fn new(context_ids: Vec) -> Self { - Self { context_ids } - } -} // ************************************************************************* // **************************** unsubscribe method ******************************* #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct UnsubscribeRequest { pub context_ids: Vec, } #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct UnsubscribeResponse { pub context_ids: Vec, } - -impl UnsubscribeResponse { - #[must_use] - pub const fn new(context_ids: Vec) -> Self { - Self { context_ids } - } -} // ************************************************************************* #[derive(Debug)] -#[non_exhaustive] pub enum Command { Close(u16, String), Send(Response), diff --git a/crates/server/src/admin/handlers/context.rs b/crates/server/src/admin/handlers/context.rs index 0317bcba2..296804572 100644 --- a/crates/server/src/admin/handlers/context.rs +++ b/crates/server/src/admin/handlers/context.rs @@ -8,4 +8,4 @@ pub mod get_context_users; pub mod get_contexts; pub mod invite_to_context; pub mod join_context; -pub mod update_application_id; +pub mod update_context_application; diff --git a/crates/server/src/admin/handlers/context/delete_context.rs b/crates/server/src/admin/handlers/context/delete_context.rs index 0081dd13d..8bf6f320b 100644 --- a/crates/server/src/admin/handlers/context/delete_context.rs +++ b/crates/server/src/admin/handlers/context/delete_context.rs @@ -5,24 +5,13 @@ use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; use calimero_primitives::context::ContextId; +use calimero_server_primitives::admin::{DeleteContextResponse, DeletedContextResponseData}; use reqwest::StatusCode; -use serde::{Deserialize, Serialize}; use tower_sessions::Session; use crate::admin::service::{parse_api_error, ApiError, ApiResponse}; use crate::AdminState; -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct DeletedContext { - is_deleted: bool, -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -pub struct DeleteContextResponse { - data: DeletedContext, -} - pub async fn handler( Path(context_id): Path, _session: Session, @@ -46,7 +35,7 @@ pub async fn handler( match result { Ok(result) => ApiResponse { payload: DeleteContextResponse { - data: DeletedContext { is_deleted: result }, + data: DeletedContextResponseData { is_deleted: result }, }, } .into_response(), diff --git a/crates/server/src/admin/handlers/context/get_context.rs b/crates/server/src/admin/handlers/context/get_context.rs index 290bb3551..cc9730d5e 100644 --- a/crates/server/src/admin/handlers/context/get_context.rs +++ b/crates/server/src/admin/handlers/context/get_context.rs @@ -3,25 +3,13 @@ use std::sync::Arc; use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; -use calimero_primitives::context::{Context, ContextId}; -use calimero_primitives::identity::PublicKey; +use calimero_primitives::context::ContextId; +use calimero_server_primitives::admin::GetContextResponse; use reqwest::StatusCode; -use serde::{Deserialize, Serialize}; use crate::admin::service::{parse_api_error, ApiError, ApiResponse}; use crate::AdminState; -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ContextObject { - context: Context, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct GetContextResponse { - data: ContextObject, -} - pub async fn handler( Path(context_id): Path, Extension(state): Extension>, @@ -36,9 +24,7 @@ pub async fn handler( match context { Ok(ctx) => match ctx { Some(context) => ApiResponse { - payload: GetContextResponse { - data: ContextObject { context }, - }, + payload: GetContextResponse { data: context }, } .into_response(), None => ApiError { @@ -50,14 +36,3 @@ pub async fn handler( Err(err) => err.into_response(), } } - -#[derive(Debug, Deserialize, Serialize)] -pub struct GetContextIdentitiesResponse { - data: ContextIdentities, -} - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ContextIdentities { - identities: Vec, -} diff --git a/crates/server/src/admin/handlers/context/get_context_client_keys.rs b/crates/server/src/admin/handlers/context/get_context_client_keys.rs index 461a11df4..4ff1b19be 100644 --- a/crates/server/src/admin/handlers/context/get_context_client_keys.rs +++ b/crates/server/src/admin/handlers/context/get_context_client_keys.rs @@ -4,24 +4,14 @@ use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; use calimero_primitives::context::ContextId; -use calimero_primitives::identity::ClientKey; -use serde::{Deserialize, Serialize}; +use calimero_server_primitives::admin::{ + GetContextClientKeysResponse, GetContextClientKeysResponseData, +}; use crate::admin::service::{parse_api_error, ApiResponse}; use crate::admin::storage::client_keys::get_context_client_key; use crate::AdminState; -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ClientKeys { - client_keys: Vec, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct GetContextClientKeysResponse { - data: ClientKeys, -} - pub async fn handler( Path(context_id): Path, Extension(state): Extension>, @@ -32,7 +22,7 @@ pub async fn handler( match client_keys_result { Ok(client_keys) => ApiResponse { payload: GetContextClientKeysResponse { - data: ClientKeys { client_keys }, + data: GetContextClientKeysResponseData { client_keys }, }, } .into_response(), diff --git a/crates/server/src/admin/handlers/context/get_context_identities.rs b/crates/server/src/admin/handlers/context/get_context_identities.rs index d4ff15e77..670c8972d 100644 --- a/crates/server/src/admin/handlers/context/get_context_identities.rs +++ b/crates/server/src/admin/handlers/context/get_context_identities.rs @@ -4,25 +4,15 @@ use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; use calimero_primitives::context::ContextId; -use calimero_primitives::identity::PublicKey; +use calimero_server_primitives::admin::{ + ContextIdentitiesResponseData, GetContextIdentitiesResponse, +}; use reqwest::StatusCode; -use serde::{Deserialize, Serialize}; use tracing::error; use crate::admin::service::{parse_api_error, ApiError, ApiResponse}; use crate::AdminState; -#[derive(Debug, Deserialize, Serialize)] -pub struct GetContextIdentitiesResponse { - data: ContextIdentities, -} - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ContextIdentities { - identities: Vec, -} - pub async fn handler( Path(context_id): Path, Extension(state): Extension>, @@ -44,7 +34,7 @@ pub async fn handler( match context_identities { Ok(identities) => ApiResponse { payload: GetContextIdentitiesResponse { - data: ContextIdentities { identities }, + data: ContextIdentitiesResponseData { identities }, }, } .into_response(), diff --git a/crates/server/src/admin/handlers/context/get_context_storage.rs b/crates/server/src/admin/handlers/context/get_context_storage.rs index 2574dd993..db7d00e86 100644 --- a/crates/server/src/admin/handlers/context/get_context_storage.rs +++ b/crates/server/src/admin/handlers/context/get_context_storage.rs @@ -3,26 +3,11 @@ use std::sync::Arc; use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; -use calimero_server_primitives::admin::ContextStorage; -use serde::Serialize; +use calimero_server_primitives::admin::GetContextStorageResponse; use crate::admin::service::ApiResponse; use crate::AdminState; -#[derive(Debug, Serialize)] -struct GetContextStorageResponse { - data: ContextStorage, -} - -impl GetContextStorageResponse { - #[must_use] - pub const fn new(size_in_bytes: u64) -> Self { - Self { - data: ContextStorage::new(size_in_bytes), - } - } -} - pub async fn handler( Path(_context_id): Path, Extension(_state): Extension>, diff --git a/crates/server/src/admin/handlers/context/get_context_users.rs b/crates/server/src/admin/handlers/context/get_context_users.rs index 4ed0dd994..2351c85b7 100644 --- a/crates/server/src/admin/handlers/context/get_context_users.rs +++ b/crates/server/src/admin/handlers/context/get_context_users.rs @@ -3,30 +3,18 @@ use std::sync::Arc; use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; -use calimero_primitives::identity::ContextUser; -use serde::{Deserialize, Serialize}; +use calimero_server_primitives::admin::{GetContextUsersResponse, GetContextUsersResponseData}; use crate::admin::service::ApiResponse; use crate::AdminState; -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ContextUsers { - context_users: Vec, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct GetContextUsersResponse { - data: ContextUsers, -} - pub async fn handler( Path(_context_id): Path, Extension(_state): Extension>, ) -> impl IntoResponse { ApiResponse { payload: GetContextUsersResponse { - data: ContextUsers { + data: GetContextUsersResponseData { context_users: vec![], }, }, diff --git a/crates/server/src/admin/handlers/context/update_application_id.rs b/crates/server/src/admin/handlers/context/update_context_application.rs similarity index 79% rename from crates/server/src/admin/handlers/context/update_application_id.rs rename to crates/server/src/admin/handlers/context/update_context_application.rs index 729c9fd44..523cda1f3 100644 --- a/crates/server/src/admin/handlers/context/update_application_id.rs +++ b/crates/server/src/admin/handlers/context/update_context_application.rs @@ -5,18 +5,14 @@ use axum::extract::Path; use axum::response::IntoResponse; use axum::{Extension, Json}; use calimero_primitives::context::ContextId; -use calimero_server_primitives::admin::UpdateContextApplicationRequest; +use calimero_server_primitives::admin::{ + Empty, UpdateContextApplicationRequest, UpdateContextApplicationResponse, +}; use reqwest::StatusCode; -use serde::Serialize; -use crate::admin::service::{parse_api_error, ApiError, ApiResponse, Empty}; +use crate::admin::service::{parse_api_error, ApiError, ApiResponse}; use crate::AdminState; -#[derive(Debug, Serialize)] -struct UpdateApplicationIdResponse { - data: Empty, -} - pub async fn handler( Extension(state): Extension>, Path(context_id): Path, @@ -37,7 +33,7 @@ pub async fn handler( match result { Ok(()) => ApiResponse { - payload: UpdateApplicationIdResponse { data: Empty {} }, + payload: UpdateContextApplicationResponse { data: Empty {} }, } .into_response(), Err(err) => err.into_response(), diff --git a/crates/server/src/admin/service.rs b/crates/server/src/admin/service.rs index bb5f0479a..832ea4bec 100644 --- a/crates/server/src/admin/service.rs +++ b/crates/server/src/admin/service.rs @@ -30,7 +30,7 @@ use crate::admin::handlers::applications::{ use crate::admin::handlers::challenge::request_challenge_handler; use crate::admin::handlers::context::{ create_context, delete_context, get_context, get_context_client_keys, get_context_identities, - get_context_storage, get_context_users, get_contexts, join_context, update_application_id, + get_context_storage, get_context_users, get_contexts, join_context, update_context_application, }; use crate::admin::handlers::did::fetch_did_handler; use crate::admin::handlers::root_keys::{create_root_key_handler, delete_auth_keys_handler}; @@ -159,7 +159,7 @@ pub(crate) fn setup( .route("/dev/contexts/join", post(join_context::handler)) .route( "/dev/contexts/:context_id/application", - post(update_application_id::handler), + post(update_context_application::handler), ) .route("/dev/applications", get(list_applications::handler)) .route("/dev/contexts/:context_id", get(get_context::handler)) diff --git a/crates/server/src/ws.rs b/crates/server/src/ws.rs index 21fc89f23..9fa52dcb6 100644 --- a/crates/server/src/ws.rs +++ b/crates/server/src/ws.rs @@ -213,7 +213,7 @@ async fn handle_node_events( )), }; - let response = Response::new(None, body); + let response = Response { id: None, body }; if let Err(err) = command_sender.send(Command::Send(response)).await { error!( @@ -263,7 +263,6 @@ async fn handle_commands( error!(%connection_id, %err, "Failed to send Message::Text"); } } - _ => unreachable!("Unexpected Command"), } } } @@ -302,7 +301,6 @@ async fn handle_text_message( .handle(Arc::clone(&state), connection_state.clone()) .await .to_res_body(), - _ => unreachable!("Unsupported WebSocket method"), }, Err(err) => { error!(%connection_id, %err, "Failed to deserialize RequestPayload"); @@ -315,7 +313,10 @@ async fn handle_text_message( if let Err(err) = connection_state .commands - .send(Command::Send(Response::new(message.id, body))) + .send(Command::Send(Response { + id: message.id, + body, + })) .await { error!( diff --git a/crates/server/src/ws/subscribe.rs b/crates/server/src/ws/subscribe.rs index b800d9887..50e93cb03 100644 --- a/crates/server/src/ws/subscribe.rs +++ b/crates/server/src/ws/subscribe.rs @@ -18,5 +18,7 @@ async fn handle( let _ = inner.subscriptions.insert(*id); }); - Ok(SubscribeResponse::new(request.context_ids)) + Ok(SubscribeResponse { + context_ids: request.context_ids, + }) } diff --git a/crates/server/src/ws/unsubscribe.rs b/crates/server/src/ws/unsubscribe.rs index cca58cdcc..b5ae297ef 100644 --- a/crates/server/src/ws/unsubscribe.rs +++ b/crates/server/src/ws/unsubscribe.rs @@ -18,5 +18,7 @@ async fn handle( let _ = inner.subscriptions.remove(id); }); - Ok(UnsubscribeResponse::new(request.context_ids)) + Ok(UnsubscribeResponse { + context_ids: request.context_ids, + }) } From bffe493f87f4dbf6c218cf566731876a74d0ac9a Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 31 Oct 2024 16:37:02 +0300 Subject: [PATCH 41/75] chore(CI): maximize disk space (#906) --- .github/actions/style/action.yml | 10 ++--- .github/workflows/rust.yml | 45 +++++++++++++++++++ .../src/subscriptions/subscriptions.ts | 27 ++++++----- 3 files changed, 66 insertions(+), 16 deletions(-) diff --git a/.github/actions/style/action.yml b/.github/actions/style/action.yml index e81a9315d..fa09c7911 100644 --- a/.github/actions/style/action.yml +++ b/.github/actions/style/action.yml @@ -14,7 +14,7 @@ runs: shell: bash run: | echo "Checking for Markdown/MDX changes..." - if echo "$ALL_CHANGED_FILES" | grep -qE '\.mdx?$'; then + if true || echo "$ALL_CHANGED_FILES" | grep -qE '\.mdx?$'; then if ! pnpm check:md; then echo "Markdown or MDX files are not properly formatted." exit 1 # Exit with a non-zero status code to indicate failure @@ -28,10 +28,10 @@ runs: shell: bash run: | echo "Checking for Rust code changes..." - if echo "$ALL_CHANGED_FILES" | grep -q '\.rs$'; then + if true || echo "$ALL_CHANGED_FILES" | grep -q '\.rs$'; then echo "Running checks for the Rust code..." - # Install the nightly toolchain + # Install the nightly toolchain rustup toolchain install nightly # Install rustfmt for the nightly toolchain @@ -54,7 +54,7 @@ runs: ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | echo "Checking for changes in node-ui files" - if echo "$ALL_CHANGED_FILES" | grep -q '^node-ui/'; then + if true || echo "$ALL_CHANGED_FILES" | grep -q '^node-ui/'; then echo "Running checks for the node-ui..." cd node-ui if ! pnpm prettier:check .; then @@ -75,7 +75,7 @@ runs: ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | echo "Checking for changes in calimero-sdk files" - if echo "$ALL_CHANGED_FILES" | grep -q '^packages/calimero-sdk/'; then + if true || echo "$ALL_CHANGED_FILES" | grep -q '^packages/calimero-sdk/'; then echo "Running checks for the calimero-sdk files" cd packages/calimero-sdk if ! pnpm prettier:check .; then diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 59ae770e9..d001ff0f5 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -14,39 +14,84 @@ jobs: name: Project setup runs-on: ubuntu-latest steps: + - name: Maximize build space + uses: easimon/maximize-build-space@v10 + with: + root-reserve-mb: 4096 + - name: Checkout code uses: actions/checkout@v4 + - name: How're we looking? + run: | + df -h + # Install Node.js (version 20) and pnpm - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '20' + - name: How're we looking? + run: | + df -h + - name: Install pnpm run: npm install -g pnpm + - name: How're we looking? + run: | + df -h + # Install and build node-ui - name: Install node-ui dependencies with pnpm run: pnpm install --prefix ./node-ui + - name: How're we looking? + run: | + df -h + - name: Build node-ui run: pnpm --filter ./node-ui run build + - name: How're we looking? + run: | + df -h + - name: Setup rust toolchain run: rustup toolchain install stable --profile minimal + - name: How're we looking? + run: | + df -h + - name: Setup rust cache uses: Swatinem/rust-cache@v2 + - name: How're we looking? + run: | + df -h + - name: Run code style checks uses: ./.github/actions/style + - name: How're we looking? + run: | + df -h + - name: Build run: cargo build --verbose + + - name: How're we looking? + run: | + df -h - name: Run tests run: | chmod +x $GITHUB_WORKSPACE/scripts/build-all-apps.sh chmod +x $GITHUB_WORKSPACE/scripts/test.sh $GITHUB_WORKSPACE/scripts/test.sh + + - name: How're we looking? + run: | + df -h diff --git a/packages/calimero-sdk/src/subscriptions/subscriptions.ts b/packages/calimero-sdk/src/subscriptions/subscriptions.ts index 97b172c7f..ec32d3742 100644 --- a/packages/calimero-sdk/src/subscriptions/subscriptions.ts +++ b/packages/calimero-sdk/src/subscriptions/subscriptions.ts @@ -5,7 +5,10 @@ export interface SubscriptionsClient { disconnect(connectionId?: string): void; subscribe(contextIds: string[], connectionId?: string): void; unsubscribe(contextIds: string[], connectionId?: string): void; - addCallback(callback: (event: NodeEvent) => void, connectionId?: string): void; + addCallback( + callback: (event: NodeEvent) => void, + connectionId?: string, + ): void; removeCallback( callback: (event: NodeEvent) => void, connectionId?: string, @@ -16,21 +19,23 @@ export type NodeEvent = ContextEvent; export type ContextEvent = ContextEventPayload & { contextId: ContextId; -} - -type ContextEventPayload = { - type: 'StateMutation', - data: StateMutation, -} | { - type: 'ExecutionEvent', - data: ExecutionEvent, }; +type ContextEventPayload = + | { + type: 'StateMutation'; + data: StateMutation; + } + | { + type: 'ExecutionEvent'; + data: ExecutionEvent; + }; + export interface StateMutation { newRoot: string; } export interface ExecutionEvent { - kind: string, - data: any, + kind: string; + data: any; } From 399d6bbf8c1b86e53d411c9c5e4b777bea03cc9b Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Thu, 31 Oct 2024 14:40:16 +0100 Subject: [PATCH 42/75] Revert "chore(CI): maximize disk space" (#908) --- .github/actions/style/action.yml | 10 ++--- .github/workflows/rust.yml | 45 ------------------- .../src/subscriptions/subscriptions.ts | 27 +++++------ 3 files changed, 16 insertions(+), 66 deletions(-) diff --git a/.github/actions/style/action.yml b/.github/actions/style/action.yml index fa09c7911..e81a9315d 100644 --- a/.github/actions/style/action.yml +++ b/.github/actions/style/action.yml @@ -14,7 +14,7 @@ runs: shell: bash run: | echo "Checking for Markdown/MDX changes..." - if true || echo "$ALL_CHANGED_FILES" | grep -qE '\.mdx?$'; then + if echo "$ALL_CHANGED_FILES" | grep -qE '\.mdx?$'; then if ! pnpm check:md; then echo "Markdown or MDX files are not properly formatted." exit 1 # Exit with a non-zero status code to indicate failure @@ -28,10 +28,10 @@ runs: shell: bash run: | echo "Checking for Rust code changes..." - if true || echo "$ALL_CHANGED_FILES" | grep -q '\.rs$'; then + if echo "$ALL_CHANGED_FILES" | grep -q '\.rs$'; then echo "Running checks for the Rust code..." - # Install the nightly toolchain + # Install the nightly toolchain rustup toolchain install nightly # Install rustfmt for the nightly toolchain @@ -54,7 +54,7 @@ runs: ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | echo "Checking for changes in node-ui files" - if true || echo "$ALL_CHANGED_FILES" | grep -q '^node-ui/'; then + if echo "$ALL_CHANGED_FILES" | grep -q '^node-ui/'; then echo "Running checks for the node-ui..." cd node-ui if ! pnpm prettier:check .; then @@ -75,7 +75,7 @@ runs: ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | echo "Checking for changes in calimero-sdk files" - if true || echo "$ALL_CHANGED_FILES" | grep -q '^packages/calimero-sdk/'; then + if echo "$ALL_CHANGED_FILES" | grep -q '^packages/calimero-sdk/'; then echo "Running checks for the calimero-sdk files" cd packages/calimero-sdk if ! pnpm prettier:check .; then diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index d001ff0f5..59ae770e9 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -14,84 +14,39 @@ jobs: name: Project setup runs-on: ubuntu-latest steps: - - name: Maximize build space - uses: easimon/maximize-build-space@v10 - with: - root-reserve-mb: 4096 - - name: Checkout code uses: actions/checkout@v4 - - name: How're we looking? - run: | - df -h - # Install Node.js (version 20) and pnpm - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '20' - - name: How're we looking? - run: | - df -h - - name: Install pnpm run: npm install -g pnpm - - name: How're we looking? - run: | - df -h - # Install and build node-ui - name: Install node-ui dependencies with pnpm run: pnpm install --prefix ./node-ui - - name: How're we looking? - run: | - df -h - - name: Build node-ui run: pnpm --filter ./node-ui run build - - name: How're we looking? - run: | - df -h - - name: Setup rust toolchain run: rustup toolchain install stable --profile minimal - - name: How're we looking? - run: | - df -h - - name: Setup rust cache uses: Swatinem/rust-cache@v2 - - name: How're we looking? - run: | - df -h - - name: Run code style checks uses: ./.github/actions/style - - name: How're we looking? - run: | - df -h - - name: Build run: cargo build --verbose - - - name: How're we looking? - run: | - df -h - name: Run tests run: | chmod +x $GITHUB_WORKSPACE/scripts/build-all-apps.sh chmod +x $GITHUB_WORKSPACE/scripts/test.sh $GITHUB_WORKSPACE/scripts/test.sh - - - name: How're we looking? - run: | - df -h diff --git a/packages/calimero-sdk/src/subscriptions/subscriptions.ts b/packages/calimero-sdk/src/subscriptions/subscriptions.ts index ec32d3742..97b172c7f 100644 --- a/packages/calimero-sdk/src/subscriptions/subscriptions.ts +++ b/packages/calimero-sdk/src/subscriptions/subscriptions.ts @@ -5,10 +5,7 @@ export interface SubscriptionsClient { disconnect(connectionId?: string): void; subscribe(contextIds: string[], connectionId?: string): void; unsubscribe(contextIds: string[], connectionId?: string): void; - addCallback( - callback: (event: NodeEvent) => void, - connectionId?: string, - ): void; + addCallback(callback: (event: NodeEvent) => void, connectionId?: string): void; removeCallback( callback: (event: NodeEvent) => void, connectionId?: string, @@ -19,23 +16,21 @@ export type NodeEvent = ContextEvent; export type ContextEvent = ContextEventPayload & { contextId: ContextId; -}; +} -type ContextEventPayload = - | { - type: 'StateMutation'; - data: StateMutation; - } - | { - type: 'ExecutionEvent'; - data: ExecutionEvent; - }; +type ContextEventPayload = { + type: 'StateMutation', + data: StateMutation, +} | { + type: 'ExecutionEvent', + data: ExecutionEvent, +}; export interface StateMutation { newRoot: string; } export interface ExecutionEvent { - kind: string; - data: any; + kind: string, + data: any, } From e9ae279ff7006e074db5417362e6e16c165e07ee Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Thu, 31 Oct 2024 15:11:34 +0100 Subject: [PATCH 43/75] expose context id to the storage env (#905) --- crates/storage/src/env.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index ea4f3a118..b5e8ccd9f 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -81,6 +81,12 @@ pub fn time_now() -> u64 { imp::time_now() } +/// Return the context id. +#[must_use] +pub fn context_id() -> [u8; 32] { + imp::context_id() +} + #[cfg(target_arch = "wasm32")] mod calimero_vm { use calimero_sdk::env; @@ -118,6 +124,11 @@ mod calimero_vm { env::random_bytes(buf) } + /// Return the context id. + pub(super) fn context_id() -> [u8; 32] { + env::context_id() + } + /// Gets the current time. /// /// This function obtains the current time as a nanosecond timestamp. @@ -169,6 +180,11 @@ mod mocked { rand::thread_rng().fill_bytes(buf); } + /// Return the context id. + pub(super) fn context_id() -> [u8; 32] { + [0; 32] + } + /// Gets the current time. /// /// This function obtains the current time as a nanosecond timestamp. From 425bab9c1aa00e6d5a13c7cfb73fe69f73ebd641 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Thu, 31 Oct 2024 19:14:54 +0300 Subject: [PATCH 44/75] chore(CI): maximize disk space (#909) --- .github/actions/style/action.yml | 2 +- .github/workflows/rust.yml | 31 ++++++++++++++++++- .../src/subscriptions/subscriptions.ts | 27 +++++++++------- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/.github/actions/style/action.yml b/.github/actions/style/action.yml index e81a9315d..fd4532a5b 100644 --- a/.github/actions/style/action.yml +++ b/.github/actions/style/action.yml @@ -31,7 +31,7 @@ runs: if echo "$ALL_CHANGED_FILES" | grep -q '\.rs$'; then echo "Running checks for the Rust code..." - # Install the nightly toolchain + # Install the nightly toolchain rustup toolchain install nightly # Install rustfmt for the nightly toolchain diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 59ae770e9..324ed57d4 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,16 +8,45 @@ on: env: CARGO_TERM_COLOR: always + CARGO_HOME: + RUSTUP_HOME: + PNPM_HOME: + ALT_HOME: + STAGE_DIR: jobs: setup: name: Project setup runs-on: ubuntu-latest steps: + - name: Prepare + run: | + export STAGE_DIR="$(dirname $GITHUB_WORKSPACE)" + echo "STAGE_DIR=$STAGE_DIR" >> $GITHUB_ENV + export ALT_HOME="$STAGE_DIR/.home" + echo "ALT_HOME=$ALT_HOME" >> $GITHUB_ENV + + - name: Maximize build space + uses: easimon/maximize-build-space@v10 + with: + build-mount-path: ${{ env.STAGE_DIR }} + root-reserve-mb: 4096 + + - name: Relocate environment + run: | + echo "CARGO_HOME=$ALT_HOME/.cargo" >> $GITHUB_ENV + echo "RUSTUP_HOME=$ALT_HOME/.rustup" >> $GITHUB_ENV + echo "PNPM_HOME=$ALT_HOME/.pnpm" >> $GITHUB_ENV + + mkdir $ALT_HOME + mv ~/.cargo $ALT_HOME + mv ~/.rustup $ALT_HOME + echo "$ALT_HOME/.cargo/bin" | cat - $GITHUB_PATH > temp && mv temp $GITHUB_PATH + - name: Checkout code uses: actions/checkout@v4 - # Install Node.js (version 20) and pnpm + # Install Node.js (version 20) and pnpm - name: Set up Node.js uses: actions/setup-node@v2 with: diff --git a/packages/calimero-sdk/src/subscriptions/subscriptions.ts b/packages/calimero-sdk/src/subscriptions/subscriptions.ts index 97b172c7f..ec32d3742 100644 --- a/packages/calimero-sdk/src/subscriptions/subscriptions.ts +++ b/packages/calimero-sdk/src/subscriptions/subscriptions.ts @@ -5,7 +5,10 @@ export interface SubscriptionsClient { disconnect(connectionId?: string): void; subscribe(contextIds: string[], connectionId?: string): void; unsubscribe(contextIds: string[], connectionId?: string): void; - addCallback(callback: (event: NodeEvent) => void, connectionId?: string): void; + addCallback( + callback: (event: NodeEvent) => void, + connectionId?: string, + ): void; removeCallback( callback: (event: NodeEvent) => void, connectionId?: string, @@ -16,21 +19,23 @@ export type NodeEvent = ContextEvent; export type ContextEvent = ContextEventPayload & { contextId: ContextId; -} - -type ContextEventPayload = { - type: 'StateMutation', - data: StateMutation, -} | { - type: 'ExecutionEvent', - data: ExecutionEvent, }; +type ContextEventPayload = + | { + type: 'StateMutation'; + data: StateMutation; + } + | { + type: 'ExecutionEvent'; + data: ExecutionEvent; + }; + export interface StateMutation { newRoot: string; } export interface ExecutionEvent { - kind: string, - data: any, + kind: string; + data: any; } From 15413f4c8edf44d07e5bb074d388f187b4bdf529 Mon Sep 17 00:00:00 2001 From: Xabi Losada Date: Thu, 31 Oct 2024 17:49:46 +0100 Subject: [PATCH 45/75] feat: setup proxy lib foundation (#854) --- Cargo.lock | 2485 +++++++++++++++-- Cargo.toml | 8 +- contracts/context-config/src/query.rs | 9 + contracts/proxy-lib/Cargo.toml | 25 + contracts/proxy-lib/build-test-deps.sh | 19 + contracts/proxy-lib/build.sh | 18 + contracts/proxy-lib/src/ext_config.rs | 8 + contracts/proxy-lib/src/lib.rs | 408 +++ contracts/proxy-lib/test.sh | 7 + .../proxy-lib/tests/common/config_helper.rs | 107 + .../proxy-lib/tests/common/counter_helper.rs | 30 + contracts/proxy-lib/tests/common/mod.rs | 37 + .../tests/common/proxy_lib_helper.rs | 157 ++ contracts/proxy-lib/tests/sandbox.rs | 601 ++++ contracts/test-counter/Cargo.toml | 21 + contracts/test-counter/build.sh | 18 + contracts/test-counter/src/lib.rs | 26 + contracts/test-counter/test.sh | 10 + contracts/test-counter/tests/sandbox.rs | 36 + crates/context/config/src/types.rs | 8 +- scripts/test.sh | 1 + 21 files changed, 3759 insertions(+), 280 deletions(-) create mode 100644 contracts/proxy-lib/Cargo.toml create mode 100755 contracts/proxy-lib/build-test-deps.sh create mode 100755 contracts/proxy-lib/build.sh create mode 100644 contracts/proxy-lib/src/ext_config.rs create mode 100644 contracts/proxy-lib/src/lib.rs create mode 100755 contracts/proxy-lib/test.sh create mode 100644 contracts/proxy-lib/tests/common/config_helper.rs create mode 100644 contracts/proxy-lib/tests/common/counter_helper.rs create mode 100644 contracts/proxy-lib/tests/common/mod.rs create mode 100644 contracts/proxy-lib/tests/common/proxy_lib_helper.rs create mode 100644 contracts/proxy-lib/tests/sandbox.rs create mode 100644 contracts/test-counter/Cargo.toml create mode 100755 contracts/test-counter/build.sh create mode 100644 contracts/test-counter/src/lib.rs create mode 100755 contracts/test-counter/test.sh create mode 100644 contracts/test-counter/tests/sandbox.rs diff --git a/Cargo.lock b/Cargo.lock index fd8db77cf..7cd06469b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,6 +12,62 @@ dependencies = [ "regex", ] +[[package]] +name = "actix" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de7fa236829ba0841304542f7614c42b80fca007455315c45c785ccfa873a85b" +dependencies = [ + "actix-macros", + "actix-rt", + "actix_derive", + "bitflags 2.6.0", + "bytes", + "crossbeam-channel", + "futures-core", + "futures-sink", + "futures-task", + "futures-util", + "log", + "once_cell", + "parking_lot", + "pin-project-lite", + "smallvec", + "tokio", + "tokio-util 0.7.11", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "actix-rt" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix_derive" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6ac1e58cded18cb28ddc17143c4dea5345b3ad575e14f32f66e4054a56eb271" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "addr2line" version = "0.21.0" @@ -44,7 +100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if 1.0.0", - "cipher", + "cipher 0.4.4", "cpufeatures", ] @@ -56,7 +112,7 @@ checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ "aead", "aes", - "cipher", + "cipher 0.4.4", "ctr", "ghash", "subtle", @@ -68,7 +124,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -297,36 +353,164 @@ dependencies = [ "serde_json", ] +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + [[package]] name = "async-io" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" dependencies = [ - "async-lock", + "async-lock 3.4.0", "cfg-if 1.0.0", "concurrent-queue", "futures-io", - "futures-lite", + "futures-lite 2.3.0", "parking", - "polling", - "rustix", + "polling 3.7.2", + "rustix 0.38.34", "slab", "tracing", "windows-sys 0.52.0", ] +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-lock" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.3.1", "event-listener-strategy", "pin-project-lite", ] +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if 1.0.0", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.34", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.3.3", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if 1.0.0", + "futures-core", + "futures-io", + "rustix 0.38.34", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -349,6 +533,12 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "async-trait" version = "0.1.81" @@ -403,6 +593,17 @@ dependencies = [ "url", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "auto_impl" version = "1.2.0" @@ -514,7 +715,7 @@ dependencies = [ "pin-project", "tokio", "tokio-rustls 0.24.1", - "tokio-util", + "tokio-util 0.7.11", "tower-layer", "tower-service", ] @@ -580,7 +781,7 @@ dependencies = [ "dirs-next", "flate2", "fs2", - "hex", + "hex 0.4.3", "is_executable", "siphasher", "tar", @@ -631,6 +832,35 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "bip39" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.4.2", + "serde", + "unicode-normalization", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -655,6 +885,17 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "blake2" version = "0.10.6" @@ -682,6 +923,28 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + [[package]] name = "blst" version = "0.3.13" @@ -711,7 +974,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" dependencies = [ "once_cell", - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 2.0.72", @@ -821,6 +1084,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "c2-chacha" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" +dependencies = [ + "cipher 0.2.5", + "ppv-lite86", +] + [[package]] name = "calimero-blobstore" version = "0.1.0" @@ -832,10 +1105,10 @@ dependencies = [ "eyre", "futures-util", "serde", - "sha2", + "sha2 0.10.8", "thiserror", "tokio", - "tokio-util", + "tokio-util 0.7.11", ] [[package]] @@ -851,7 +1124,7 @@ dependencies = [ "libp2p-identity", "multiaddr", "serde", - "toml", + "toml 0.8.19", ] [[package]] @@ -866,14 +1139,14 @@ dependencies = [ "calimero-store", "camino", "clap", - "ed25519-dalek", + "ed25519-dalek 2.1.1", "eyre", "futures-util", "rand 0.8.5", "reqwest 0.12.5", "serde", "tokio", - "tokio-util", + "tokio-util 0.7.11", "tracing", ] @@ -883,12 +1156,12 @@ version = "0.1.0" dependencies = [ "borsh", "bs58 0.5.1", - "ed25519-dalek", + "ed25519-dalek 2.1.1", "either", - "near-crypto", - "near-jsonrpc-client", - "near-jsonrpc-primitives", - "near-primitives", + "near-crypto 0.26.0", + "near-jsonrpc-client 0.13.0", + "near-jsonrpc-primitives 0.26.0", + "near-primitives 0.26.0", "reqwest 0.12.5", "serde", "serde_json", @@ -904,9 +1177,9 @@ name = "calimero-context-config-near" version = "0.1.0" dependencies = [ "calimero-context-config", - "ed25519-dalek", + "ed25519-dalek 2.1.1", "eyre", - "near-crypto", + "near-crypto 0.26.0", "near-sdk", "near-workspaces", "rand 0.8.5", @@ -931,7 +1204,7 @@ dependencies = [ "thiserror", "tokio", "tokio-test", - "tokio-util", + "tokio-util 0.7.11", "tracing", ] @@ -981,12 +1254,12 @@ version = "0.1.0" dependencies = [ "borsh", "bs58 0.5.1", - "ed25519-dalek", - "hex", + "ed25519-dalek 2.1.1", + "hex 0.4.3", "rand 0.8.5", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "thiserror", "url", ] @@ -995,7 +1268,7 @@ dependencies = [ name = "calimero-registry" version = "0.1.0" dependencies = [ - "hex", + "hex 0.4.3", "near-sdk", "near-workspaces", "semver", @@ -1076,10 +1349,10 @@ dependencies = [ "candid", "chrono", "color-eyre", - "ed25519-dalek", + "ed25519-dalek 2.1.1", "eyre", "futures-util", - "hex", + "hex 0.4.3", "ic-canister-sig-creation", "ic-signature-verification", "jsonwebtoken", @@ -1092,7 +1365,7 @@ dependencies = [ "rust-embed", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "starknet", "starknet-crypto", "thiserror", @@ -1130,11 +1403,11 @@ dependencies = [ "claims", "eyre", "fixedstr", - "hex", + "hex 0.4.3", "indexmap 2.6.0", "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.8", "thiserror", "uuid 1.10.0", "velcro", @@ -1189,7 +1462,7 @@ dependencies = [ "binread", "byteorder", "candid_derive", - "hex", + "hex 0.4.3", "ic_principal", "leb128", "num-bigint 0.4.6", @@ -1215,27 +1488,39 @@ dependencies = [ ] [[package]] -name = "cargo-near-build" -version = "0.1.1" +name = "cargo-near" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd00f13698319e43d9af5b1afc7045131342f3097dd78320a09bb6303bbf2d06" +checksum = "02835fdf82de4345b21f542e9ddb61786513d05e4c9722db74871de321d8d728" dependencies = [ - "bs58 0.5.1", + "atty", + "bs58 0.4.0", "camino", "cargo_metadata", + "clap", + "color-eyre", "colored", + "derive_more", "dunce", - "eyre", - "hex", - "libloading", + "env_logger", + "inquire", + "interactive-clap", + "interactive-clap-derive", + "libloading 0.7.4", + "linked-hash-map", + "log", + "names", "near-abi", + "near-cli-rs", "rustc_version", "schemars", "serde_json", - "sha2", + "sha2 0.10.8", + "shell-words", + "strum 0.24.1", + "strum_macros 0.24.3", "symbolic-debuginfo", - "tracing", - "zstd 0.13.2", + "zstd 0.11.2+zstd.1.5.2", ] [[package]] @@ -1247,18 +1532,48 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a51c783163bdf4549820b80968d386c94ed45ed23819c93f59cca7ebd97fe0eb" +dependencies = [ + "anyhow", + "core-foundation", + "crypto-hash", + "filetime", + "hex 0.4.3", + "jobserver", + "libc", + "log", + "miow", + "same-file", + "shell-escape", + "tempfile", + "walkdir", + "winapi", +] + [[package]] name = "cargo_metadata" -version = "0.18.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", "semver", "serde", "serde_json", - "thiserror", +] + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", ] [[package]] @@ -1305,7 +1620,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if 1.0.0", - "cipher", + "cipher 0.4.4", "cpufeatures", ] @@ -1317,7 +1632,7 @@ checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", "chacha20", - "cipher", + "cipher 0.4.4", "poly1305", "zeroize", ] @@ -1337,6 +1652,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "cipher" version = "0.4.4" @@ -1365,7 +1689,7 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.8.5", ] [[package]] @@ -1451,6 +1775,24 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "commoncrypto" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007" +dependencies = [ + "commoncrypto-sys", +] + +[[package]] +name = "commoncrypto-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2" +dependencies = [ + "libc", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1698,16 +2040,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" +name = "crossterm" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "subtle", @@ -1725,13 +2092,79 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-hash" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a77162240fd97248d19a564a565eb563a3f592b386e4136fb300909e67dddca" +dependencies = [ + "commoncrypto", + "hex 0.3.2", + "openssl", + "winapi", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bcd97a54c7ca5ce2f6eb16f6bede5b0ab5f0055fedc17d2f0b4466e21671ca" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher", + "cipher 0.4.4", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", ] [[package]] @@ -1745,6 +2178,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", + "rand_core 0.6.4", "rustc_version", "subtle", "zeroize", @@ -2105,6 +2539,21 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53aff6fdc1b181225acdcb5b14c47106726fd8e486707315b1b138baed68ee31" +[[package]] +name = "easy-ext" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5d6d6a8504f8caedd7de14576464383900cd3840b7033a7a3dce5ac00121ca" + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature 1.6.4", +] + [[package]] name = "ed25519" version = "2.2.3" @@ -2112,7 +2561,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8", - "signature", + "signature 2.2.0", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.0", + "ed25519 1.5.3", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", ] [[package]] @@ -2121,11 +2584,11 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek", - "ed25519", + "curve25519-dalek 4.1.3", + "ed25519 2.2.3", "rand_core 0.6.4", "serde", - "sha2", + "sha2 0.10.8", "subtle", "zeroize", ] @@ -2146,6 +2609,12 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" version = "0.8.34" @@ -2207,6 +2676,27 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "enumset" version = "1.1.5" @@ -2228,6 +2718,19 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -2253,14 +2756,14 @@ dependencies = [ "aes", "ctr", "digest 0.10.7", - "hex", - "hmac", + "hex 0.4.3", + "hmac 0.12.1", "pbkdf2", "rand 0.8.5", "scrypt", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "sha3", "thiserror", "uuid 0.8.2", @@ -2273,7 +2776,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ "ethereum-types", - "hex", + "hex 0.4.3", "once_cell", "regex", "serde", @@ -2310,6 +2813,23 @@ dependencies = [ "uint", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + [[package]] name = "event-listener" version = "5.3.1" @@ -2327,7 +2847,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener", + "event-listener 5.3.1", "pin-project-lite", ] @@ -2347,6 +2867,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + [[package]] name = "fastrand" version = "2.1.0" @@ -2402,6 +2931,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "fixedstr" version = "0.5.7" @@ -2421,15 +2956,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "fluent-uri" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "fnv" version = "1.0.7" @@ -2556,13 +3082,31 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-lite" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ + "fastrand 2.1.0", "futures-core", + "futures-io", + "parking", "pin-project-lite", ] @@ -2681,6 +3225,17 @@ dependencies = [ "typenum", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -2690,7 +3245,7 @@ dependencies = [ "cfg-if 1.0.0", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -2764,7 +3319,7 @@ dependencies = [ "indexmap 2.6.0", "slab", "tokio", - "tokio-util", + "tokio-util 0.7.11", "tracing", ] @@ -2783,7 +3338,7 @@ dependencies = [ "indexmap 2.6.0", "slab", "tokio", - "tokio-util", + "tokio-util 0.7.11", "tracing", ] @@ -2842,6 +3397,15 @@ dependencies = [ "http 0.2.12", ] +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "heck" version = "0.4.1" @@ -2854,6 +3418,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.9" @@ -2866,6 +3439,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hex" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" + [[package]] name = "hex" version = "0.4.3" @@ -2875,6 +3454,12 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + [[package]] name = "hex_fmt" version = "0.3.0" @@ -2898,7 +3483,7 @@ dependencies = [ "ipnet", "once_cell", "rand 0.8.5", - "socket2", + "socket2 0.5.7", "thiserror", "tinyvec", "tokio", @@ -2933,7 +3518,17 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "hmac", + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deae6d9dbb35ec2c502d62b8f7b1c000a0822c3b0794ba36b3149c0a1c840dff" +dependencies = [ + "crypto-mac 0.9.1", + "digest 0.9.0", ] [[package]] @@ -3039,6 +3634,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "0.14.30" @@ -3056,7 +3657,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -3115,6 +3716,18 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.30", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -3157,7 +3770,7 @@ dependencies = [ "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -3194,7 +3807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5db33deb06e0edb366d8d86ef67d7bc1e1759bc7046b0323a33b85b21b8d8d87" dependencies = [ "candid", - "hex", + "hex 0.4.3", "ic-cdk", "ic-certification", "ic-representation-independent-hash", @@ -3202,7 +3815,7 @@ dependencies = [ "serde", "serde_bytes", "serde_cbor", - "sha2", + "sha2 0.10.8", "thiserror", ] @@ -3239,10 +3852,10 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e64ee3d8b6e81b51f245716d3e0badb63c283c00f3c9fb5d5219afc30b5bf821" dependencies = [ - "hex", + "hex 0.4.3", "serde", "serde_bytes", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -3252,7 +3865,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08ae59483e377cd9aad94ec339ed1d2583b0d5929cab989328dac2d853b2f570" dependencies = [ "leb128", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -3268,7 +3881,7 @@ dependencies = [ "serde", "serde_bytes", "serde_cbor", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -3277,11 +3890,11 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd6c4261586eb473fe1219de63186a98e554985d5fd6f3488036c8fb82452e27" dependencies = [ - "hex", + "hex 0.4.3", "ic_bls12_381", "lazy_static", "pairing", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -3313,7 +3926,7 @@ dependencies = [ "crc32fast", "data-encoding", "serde", - "sha2", + "sha2 0.10.8", "thiserror", ] @@ -3359,7 +3972,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" dependencies = [ - "async-io", + "async-io 2.3.3", "core-foundation", "fnv", "futures", @@ -3489,9 +4102,26 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ + "block-padding", "generic-array 0.14.7", ] +[[package]] +name = "inquire" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" +dependencies = [ + "bitflags 1.3.2", + "crossterm", + "dyn-clone", + "lazy_static", + "newline-converter", + "thiserror", + "unicode-segmentation", + "unicode-width", +] + [[package]] name = "instant" version = "0.1.13" @@ -3502,28 +4132,92 @@ dependencies = [ ] [[package]] -name = "ipconfig" -version = "0.3.2" +name = "interactive-clap" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "7295a8d03a71e15612a524a8e1dec1a913459e0000e530405f20d09fb0f014f7" dependencies = [ - "socket2", - "widestring", - "windows-sys 0.48.0", - "winreg 0.50.0", + "interactive-clap-derive", + "strum 0.24.1", + "strum_macros 0.24.3", ] [[package]] -name = "ipnet" -version = "2.9.0" +name = "interactive-clap-derive" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "9a0c8d4a6b99054853778e3e9ffb0b74bcb5e8f43d99d97e5c0252c57ce67bf6" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] -name = "is_executable" -version = "0.1.2" +name = "io-lifetimes" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d553b8abc8187beb7d663e34c065ac4570b273bc9511a50e940e99409c577" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg 0.50.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "is_executable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d553b8abc8187beb7d663e34c065ac4570b273bc9511a50e940e99409c577" dependencies = [ "winapi", ] @@ -3584,11 +4278,10 @@ dependencies = [ [[package]] name = "json-patch" -version = "2.0.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" +checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" dependencies = [ - "jsonptr", "serde", "serde_json", "thiserror", @@ -3600,17 +4293,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" -[[package]] -name = "jsonptr" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" -dependencies = [ - "fluent-uri", - "serde", - "serde_json", -] - [[package]] name = "jsonrpc-core" version = "18.0.0" @@ -3650,6 +4332,20 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keyring" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "363387f0019d714aa60cc30ab4fe501a747f4c08fc58f069dd14be971bd495a0" +dependencies = [ + "byteorder", + "lazy_static", + "linux-keyutils", + "secret-service", + "security-framework", + "windows-sys 0.52.0", +] + [[package]] name = "kqueue" version = "1.0.8" @@ -3686,7 +4382,7 @@ checksum = "bbc2a4da0d9e52ccfe6306801a112e81a8fc0c76aa3e4449fefeda7fef72bb34" dependencies = [ "lambdaworks-math", "serde", - "sha2", + "sha2 0.10.8", "sha3", ] @@ -3727,6 +4423,16 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + [[package]] name = "libloading" version = "0.8.5" @@ -3747,7 +4453,7 @@ dependencies = [ "either", "futures", "futures-timer", - "getrandom", + "getrandom 0.2.15", "instant", "libp2p-allow-block-list", "libp2p-connection-limits", @@ -3881,7 +4587,7 @@ dependencies = [ "fnv", "futures", "futures-ticker", - "getrandom", + "getrandom 0.2.15", "hex_fmt", "instant", "libp2p-core", @@ -3892,7 +4598,7 @@ dependencies = [ "quick-protobuf-codec 0.3.1", "rand 0.8.5", "regex", - "sha2", + "sha2 0.10.8", "smallvec", "tracing", "void", @@ -3928,13 +4634,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cca1eb2bc1fd29f099f3daaab7effd01e1a54b7c577d0ed082521034d912e8" dependencies = [ "bs58 0.5.1", - "ed25519-dalek", + "ed25519-dalek 2.1.1", "hkdf", "multihash", "quick-protobuf", "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.8", "thiserror", "tracing", "zeroize", @@ -3961,7 +4667,7 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec 0.3.1", "rand 0.8.5", - "sha2", + "sha2 0.10.8", "smallvec", "thiserror", "tracing", @@ -3984,7 +4690,7 @@ dependencies = [ "libp2p-swarm", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.5.7", "tokio", "tracing", "void", @@ -4019,7 +4725,7 @@ checksum = "8ecd0545ce077f6ea5434bcb76e8d0fe942693b4380aaad0d34a358c2bd05793" dependencies = [ "asynchronous-codec 0.7.0", "bytes", - "curve25519-dalek", + "curve25519-dalek 4.1.3", "futures", "libp2p-core", "libp2p-identity", @@ -4028,7 +4734,7 @@ dependencies = [ "once_cell", "quick-protobuf", "rand 0.8.5", - "sha2", + "sha2 0.10.8", "snow", "static_assertions", "thiserror", @@ -4073,7 +4779,7 @@ dependencies = [ "rand 0.8.5", "ring 0.17.8", "rustls 0.23.12", - "socket2", + "socket2 0.5.7", "thiserror", "tokio", "tracing", @@ -4211,7 +4917,7 @@ dependencies = [ "libc", "libp2p-core", "libp2p-identity", - "socket2", + "socket2 0.5.7", "tokio", "tracing", ] @@ -4327,6 +5033,25 @@ name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +dependencies = [ + "serde", +] + +[[package]] +name = "linux-keyutils" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "761e49ec5fd8a5a463f9b84e877c373d888935b71c6be78f3767fe2ae6bed18e" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" @@ -4460,6 +5185,24 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "memoffset" version = "0.9.1" @@ -4523,10 +5266,10 @@ dependencies = [ "dirs", "eyre", "futures-util", - "hex", + "hex 0.4.3", "libp2p", "multiaddr", - "near-crypto", + "near-crypto 0.26.0", "rand 0.8.5", "starknet", "starknet-crypto", @@ -4576,7 +5319,7 @@ checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.48.0", ] @@ -4588,10 +5331,19 @@ checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ "hermit-abi 0.3.9", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + [[package]] name = "more-asserts" version = "0.2.2" @@ -4638,6 +5390,12 @@ dependencies = [ "unsigned-varint 0.7.2", ] +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "multistream-select" version = "0.13.0" @@ -4652,6 +5410,15 @@ dependencies = [ "unsigned-varint 0.7.2", ] +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand 0.8.5", +] + [[package]] name = "native-tls" version = "0.2.12" @@ -4731,6 +5498,29 @@ dependencies = [ "serde", ] +[[package]] +name = "near-chain-configs" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e5a8ace81c09d7eb165dffc1742358a021b2fa761f2160943305f83216003" +dependencies = [ + "anyhow", + "bytesize", + "chrono", + "derive_more", + "near-config-utils 0.20.1", + "near-crypto 0.20.1", + "near-parameters 0.20.1", + "near-primitives 0.20.1", + "num-rational 0.3.2", + "once_cell", + "serde", + "serde_json", + "sha2 0.10.8", + "smart-default 0.6.0", + "tracing", +] + [[package]] name = "near-chain-configs" version = "0.26.0" @@ -4741,21 +5531,81 @@ dependencies = [ "bytesize", "chrono", "derive_more", - "near-config-utils", - "near-crypto", - "near-parameters", - "near-primitives", + "near-config-utils 0.26.0", + "near-crypto 0.26.0", + "near-parameters 0.26.0", + "near-primitives 0.26.0", "near-time", - "num-rational", + "num-rational 0.3.2", "once_cell", "serde", "serde_json", - "sha2", - "smart-default", + "sha2 0.10.8", + "smart-default 0.6.0", "time", "tracing", ] +[[package]] +name = "near-cli-rs" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94799fd728fadc895daada6934016cb1fe3fc7e7a01200e5c88708ad8076a8a6" +dependencies = [ + "bip39", + "bs58 0.5.1", + "bytesize", + "cargo-util", + "clap", + "color-eyre", + "derive_more", + "dirs", + "easy-ext 1.0.2", + "ed25519-dalek 1.0.1", + "futures", + "hex 0.4.3", + "inquire", + "interactive-clap", + "interactive-clap-derive", + "keyring", + "linked-hash-map", + "near-crypto 0.20.1", + "near-gas 0.2.5", + "near-jsonrpc-client 0.8.0", + "near-jsonrpc-primitives 0.20.1", + "near-primitives 0.20.1", + "near-socialdb-client", + "near-token 0.2.1", + "open", + "openssl", + "prettytable", + "reqwest 0.11.27", + "serde", + "serde_json", + "shell-words", + "shellexpand", + "slip10", + "smart-default 0.7.1", + "strum 0.24.1", + "strum_macros 0.24.3", + "thiserror", + "tokio", + "toml 0.7.8", + "url", +] + +[[package]] +name = "near-config-utils" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae1eaab1d545a9be7a55b6ef09f365c2017f93a03063547591d12c0c6d27e58" +dependencies = [ + "anyhow", + "json_comments", + "thiserror", + "tracing", +] + [[package]] name = "near-config-utils" version = "0.26.0" @@ -4768,22 +5618,49 @@ dependencies = [ "tracing", ] +[[package]] +name = "near-crypto" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2991d2912218a80ec0733ac87f84fa803accea105611eea209d4419271957667" +dependencies = [ + "blake2 0.9.2", + "borsh", + "bs58 0.4.0", + "c2-chacha", + "curve25519-dalek 4.1.3", + "derive_more", + "ed25519-dalek 2.1.1", + "hex 0.4.3", + "near-account-id", + "near-config-utils 0.20.1", + "near-stdx 0.20.1", + "once_cell", + "primitive-types 0.10.1", + "rand 0.7.3", + "secp256k1", + "serde", + "serde_json", + "subtle", + "thiserror", +] + [[package]] name = "near-crypto" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "907fdcefa3a42976cd6a8bf626fe2a87eb0d3b3ff144adc67cf32d53c9494b32" dependencies = [ - "blake2", + "blake2 0.10.6", "borsh", "bs58 0.4.0", - "curve25519-dalek", + "curve25519-dalek 4.1.3", "derive_more", - "ed25519-dalek", - "hex", + "ed25519-dalek 2.1.1", + "hex 0.4.3", "near-account-id", - "near-config-utils", - "near-stdx", + "near-config-utils 0.26.0", + "near-stdx 0.26.0", "once_cell", "primitive-types 0.10.1", "rand 0.8.5", @@ -4794,13 +5671,34 @@ dependencies = [ "thiserror", ] +[[package]] +name = "near-fmt" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7d998dfc1e04001608899b2498ad5a782c7d036b73769d510de21964db99286" +dependencies = [ + "near-primitives-core 0.20.1", +] + [[package]] name = "near-fmt" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a36518bfcf2177096d4298d9158ba698ffd6944cb035ecc0938b098337b933c" dependencies = [ - "near-primitives-core", + "near-primitives-core 0.26.0", +] + +[[package]] +name = "near-gas" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e75c875026229902d065e4435804497337b631ec69ba746b102954273e9ad1" +dependencies = [ + "borsh", + "interactive-clap", + "schemars", + "serde", ] [[package]] @@ -4810,10 +5708,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180edcc7dc2fac41f93570d0c7b759c1b6d492f6ad093d749d644a40b4310a97" dependencies = [ "borsh", - "schemars", "serde", ] +[[package]] +name = "near-jsonrpc-client" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18ad81e015f7aced8925d5b9ba3f369b36da9575c15812cfd0786bc1213284ca" +dependencies = [ + "borsh", + "lazy_static", + "log", + "near-chain-configs 0.20.1", + "near-crypto 0.20.1", + "near-jsonrpc-primitives 0.20.1", + "near-primitives 0.20.1", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "near-jsonrpc-client" version = "0.13.0" @@ -4823,16 +5739,32 @@ dependencies = [ "borsh", "lazy_static", "log", - "near-chain-configs", - "near-crypto", - "near-jsonrpc-primitives", - "near-primitives", + "near-chain-configs 0.26.0", + "near-crypto 0.26.0", + "near-jsonrpc-primitives 0.26.0", + "near-primitives 0.26.0", "reqwest 0.12.5", "serde", "serde_json", "thiserror", ] +[[package]] +name = "near-jsonrpc-primitives" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0ce745e954ae776eef05957602e638ee9581106a3675946fb43c2fe7e38ef03" +dependencies = [ + "arbitrary", + "near-chain-configs 0.20.1", + "near-crypto 0.20.1", + "near-primitives 0.20.1", + "near-rpc-error-macro 0.20.1", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "near-jsonrpc-primitives" version = "0.26.0" @@ -4840,16 +5772,63 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b24bfd0fedef42e07daa79e463a7908e9abee4f6de3532e0e1dde45f6951657" dependencies = [ "arbitrary", - "near-chain-configs", - "near-crypto", - "near-primitives", - "near-rpc-error-macro", + "near-chain-configs 0.26.0", + "near-crypto 0.26.0", + "near-primitives 0.26.0", + "near-rpc-error-macro 0.26.0", "serde", "serde_json", "thiserror", "time", ] +[[package]] +name = "near-o11y" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d20762631bc8253030013bbae9b5f0542691edc1aa6722f1e8141cc9b928ae5b" +dependencies = [ + "actix", + "base64 0.21.7", + "clap", + "near-crypto 0.20.1", + "near-fmt 0.20.1", + "near-primitives-core 0.20.1", + "once_cell", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry-semantic-conventions", + "prometheus", + "serde", + "serde_json", + "strum 0.24.1", + "thiserror", + "tokio", + "tracing", + "tracing-appender", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "near-parameters" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f16a59b6c3e69b0585be951af6fe42a0ba86c0e207cb8c63badd19efd16680" +dependencies = [ + "assert_matches", + "borsh", + "enum-map", + "near-account-id", + "near-primitives-core 0.20.1", + "num-rational 0.3.2", + "serde", + "serde_repr", + "serde_yaml", + "strum 0.24.1", + "thiserror", +] + [[package]] name = "near-parameters" version = "0.26.0" @@ -4859,8 +5838,8 @@ dependencies = [ "borsh", "enum-map", "near-account-id", - "near-primitives-core", - "num-rational", + "near-primitives-core 0.26.0", + "num-rational 0.3.2", "serde", "serde_repr", "serde_yaml", @@ -4868,6 +5847,48 @@ dependencies = [ "thiserror", ] +[[package]] +name = "near-primitives" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0462b067732132babcc89d5577db3bfcb0a1bcfbaaed3f2db4c11cd033666314" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh", + "bytesize", + "cfg-if 1.0.0", + "chrono", + "derive_more", + "easy-ext 0.2.9", + "enum-map", + "hex 0.4.3", + "near-crypto 0.20.1", + "near-fmt 0.20.1", + "near-o11y", + "near-parameters 0.20.1", + "near-primitives-core 0.20.1", + "near-rpc-error-macro 0.20.1", + "near-stdx 0.20.1", + "near-vm-runner 0.20.1", + "num-rational 0.3.2", + "once_cell", + "primitive-types 0.10.1", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reed-solomon-erasure", + "serde", + "serde_json", + "serde_with", + "serde_yaml", + "sha3", + "smart-default 0.6.0", + "strum 0.24.1", + "thiserror", + "time", + "tracing", +] + [[package]] name = "near-primitives" version = "0.26.0" @@ -4882,35 +5903,57 @@ dependencies = [ "cfg-if 1.0.0", "chrono", "derive_more", - "easy-ext", + "easy-ext 0.2.9", "enum-map", - "hex", + "hex 0.4.3", "itertools 0.10.5", - "near-crypto", - "near-fmt", - "near-parameters", - "near-primitives-core", - "near-rpc-error-macro", - "near-stdx", + "near-crypto 0.26.0", + "near-fmt 0.26.0", + "near-parameters 0.26.0", + "near-primitives-core 0.26.0", + "near-rpc-error-macro 0.26.0", + "near-stdx 0.26.0", "near-structs-checker-lib", "near-time", - "num-rational", + "num-rational 0.3.2", "once_cell", "ordered-float", "primitive-types 0.10.1", "rand 0.8.5", - "rand_chacha", + "rand_chacha 0.3.1", "serde", "serde_json", "serde_with", "sha3", - "smart-default", + "smart-default 0.6.0", "strum 0.24.1", "thiserror", "tracing", "zstd 0.13.2", ] +[[package]] +name = "near-primitives-core" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8443eb718606f572c438be6321a097a8ebd69f8e48d953885b4f16601af88225" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh", + "bs58 0.4.0", + "derive_more", + "enum-map", + "near-account-id", + "num-rational 0.3.2", + "serde", + "serde_repr", + "serde_with", + "sha2 0.10.8", + "strum 0.24.1", + "thiserror", +] + [[package]] name = "near-primitives-core" version = "0.26.0" @@ -4925,13 +5968,24 @@ dependencies = [ "enum-map", "near-account-id", "near-structs-checker-lib", - "num-rational", + "num-rational 0.3.2", "serde", "serde_repr", - "sha2", + "sha2 0.10.8", "thiserror", ] +[[package]] +name = "near-rpc-error-core" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80fca203c51edd9595ec14db1d13359fb9ede32314990bf296b6c5c4502f6ab7" +dependencies = [ + "quote", + "serde", + "syn 2.0.72", +] + [[package]] name = "near-rpc-error-core" version = "0.26.0" @@ -4943,25 +5997,38 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "near-rpc-error-macro" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897a445de2102f6732c8a185d922f5e3bf7fd0a41243ce40854df2197237f799" +dependencies = [ + "fs2", + "near-rpc-error-core 0.20.1", + "serde", + "syn 2.0.72", +] + [[package]] name = "near-rpc-error-macro" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "647ef261df99ad877c08c97af2f10368c8b8cde0968250d3482a5a249e9f3926" dependencies = [ - "near-rpc-error-core", + "near-rpc-error-core 0.26.0", "serde", "syn 2.0.72", ] [[package]] name = "near-sandbox-utils" -version = "0.10.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000a28599729f4d584eff6a7e8c5919d7938dceeb2752ea9cdaf408444309a2a" +checksum = "bb707ae2f73e10f253155c34993970422b9de41d64e9639a946ad44fec957bc3" dependencies = [ "anyhow", "binary-install", + "chrono", "fs2", "home", "tokio", @@ -4977,15 +6044,15 @@ dependencies = [ "borsh", "bs58 0.5.1", "near-account-id", - "near-crypto", - "near-gas", - "near-parameters", - "near-primitives", - "near-primitives-core", + "near-crypto 0.26.0", + "near-gas 0.3.0", + "near-parameters 0.26.0", + "near-primitives 0.26.0", + "near-primitives-core 0.26.0", "near-sdk-macros", "near-sys", - "near-token", - "near-vm-runner", + "near-token 0.3.0", + "near-vm-runner 0.26.0", "once_cell", "serde", "serde_json", @@ -5009,6 +6076,29 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "near-socialdb-client" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfaf5ca57fd62d678cb67183d1d31e6bbb04b98abc45fd57b986962d97ad8c4a" +dependencies = [ + "color-eyre", + "near-crypto 0.20.1", + "near-jsonrpc-client 0.8.0", + "near-jsonrpc-primitives 0.20.1", + "near-primitives 0.20.1", + "near-token 0.2.1", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "near-stdx" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "855fd5540e3b4ff6fedf12aba2db1ee4b371b36f465da1363a6d022b27cb43b8" + [[package]] name = "near-stdx" version = "0.26.0" @@ -5055,6 +6145,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "near-token" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b497804ec8f603fd11edc3d3b7b19f07c0beb9fe47c8a536eea1867097fd40" +dependencies = [ + "borsh", + "interactive-clap", + "serde", +] + [[package]] name = "near-token" version = "0.3.0" @@ -5065,6 +6166,36 @@ dependencies = [ "serde", ] +[[package]] +name = "near-vm-runner" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56c80bdb1954808f59bd36a9112377197b38d424991383bf05f52d0fe2e0da5" +dependencies = [ + "base64 0.21.7", + "borsh", + "ed25519-dalek 2.1.1", + "enum-map", + "memoffset 0.8.0", + "near-crypto 0.20.1", + "near-parameters 0.20.1", + "near-primitives-core 0.20.1", + "near-stdx 0.20.1", + "num-rational 0.3.2", + "once_cell", + "prefix-sum-vec", + "ripemd", + "serde", + "serde_repr", + "serde_with", + "sha2 0.10.8", + "sha3", + "strum 0.24.1", + "thiserror", + "tracing", + "zeropool-bn", +] + [[package]] name = "near-vm-runner" version = "0.26.0" @@ -5074,20 +6205,20 @@ dependencies = [ "blst", "borsh", "bytesize", - "ed25519-dalek", + "ed25519-dalek 2.1.1", "enum-map", "lru 0.12.4", - "near-crypto", - "near-parameters", - "near-primitives-core", - "near-stdx", - "num-rational", + "near-crypto 0.26.0", + "near-parameters 0.26.0", + "near-primitives-core 0.26.0", + "near-stdx 0.26.0", + "num-rational 0.3.2", "once_cell", "ripemd", - "rustix", + "rustix 0.38.34", "serde", "serde_repr", - "sha2", + "sha2 0.10.8", "sha3", "strum 0.24.1", "tempfile", @@ -5098,32 +6229,32 @@ dependencies = [ [[package]] name = "near-workspaces" -version = "0.14.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59e15efadb1d2e4c21d4d1a8d5a8f8a732eb8f16cfb54a1a56628ab5bf5a125" +checksum = "02a9c60c2ea4735297625d46a69683998f1130533abdb1c53f109d8ef87680db" dependencies = [ "async-trait", - "base64 0.22.1", + "base64 0.21.7", "bs58 0.5.1", - "cargo-near-build", + "cargo-near", "chrono", "fs2", "json-patch", "libc", "near-abi-client", "near-account-id", - "near-crypto", - "near-gas", - "near-jsonrpc-client", - "near-jsonrpc-primitives", - "near-primitives", + "near-crypto 0.20.1", + "near-gas 0.2.5", + "near-jsonrpc-client 0.8.0", + "near-jsonrpc-primitives 0.20.1", + "near-primitives 0.20.1", "near-sandbox-utils", - "near-token", + "near-token 0.2.1", "rand 0.8.5", - "reqwest 0.12.5", + "reqwest 0.11.27", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "tempfile", "thiserror", "tokio", @@ -5256,6 +6387,15 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "newline-converter" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "nix" version = "0.24.3" @@ -5267,6 +6407,18 @@ dependencies = [ "libc", ] +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "memoffset 0.7.1", +] + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -5325,6 +6477,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational 0.4.2", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.3.3" @@ -5347,6 +6513,15 @@ dependencies = [ "serde", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -5362,6 +6537,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.3.2" @@ -5375,6 +6561,17 @@ dependencies = [ "serde", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -5440,6 +6637,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "open" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a083c0c7e5e4a8ec4176346cf61f67ac674e8bfb059d9226e1c54a96b377c12" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "openssl" version = "0.10.66" @@ -5456,32 +6664,90 @@ dependencies = [ ] [[package]] -name = "openssl-macros" -version = "0.1.1" +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "300.4.0+3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a709e02f2b4aca747929cca5ed248880847c650233cf8b8cdc48f40aaf4898a6" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "js-sys", + "lazy_static", + "percent-encoding", + "pin-project", + "rand 0.8.5", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "async-trait", + "futures", + "futures-util", + "http 0.2.12", + "opentelemetry", + "prost", + "thiserror", + "tokio", + "tonic", + "tonic-build", ] [[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.103" +name = "opentelemetry-semantic-conventions" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "985cc35d832d412224b2cffe2f9194b1b89b6aa5d0bef76d080dce09d90e62bd" dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", + "opentelemetry", ] [[package]] @@ -5502,6 +6768,16 @@ dependencies = [ "serde", ] +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "ouroboros" version = "0.18.4" @@ -5568,7 +6844,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", @@ -5620,6 +6896,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pathdiff" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" + [[package]] name = "pbkdf2" version = "0.11.0" @@ -5627,9 +6909,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", "password-hash", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -5659,6 +6941,16 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.6.0", +] + [[package]] name = "phf_shared" version = "0.10.0" @@ -5700,6 +6992,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.1.0", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -5722,6 +7025,22 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if 1.0.0", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + [[package]] name = "polling" version = "3.7.2" @@ -5732,7 +7051,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix", + "rustix 0.38.34", "tracing", "windows-sys 0.52.0", ] @@ -5781,6 +7100,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "prefix-sum-vec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa06bd51638b6e76ac9ba9b6afb4164fa647bd2916d722f2623fbb6d1ed8bdba" + [[package]] name = "pretty" version = "0.12.3" @@ -5812,6 +7137,20 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "prettytable" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46480520d1b77c9a3482d39939fcf96831537a250ec62d4fd8fbdf8e0302e781" +dependencies = [ + "csv", + "encode_unicode", + "is-terminal", + "lazy_static", + "term", + "unicode-width", +] + [[package]] name = "primitive-types" version = "0.10.1" @@ -5835,6 +7174,16 @@ dependencies = [ "uint", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -5890,6 +7239,21 @@ dependencies = [ "yansi", ] +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if 1.0.0", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror", +] + [[package]] name = "prometheus-client" version = "0.22.3" @@ -5913,6 +7277,82 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +dependencies = [ + "bytes", + "heck 0.3.3", + "itertools 0.10.5", + "lazy_static", + "log", + "multimap", + "petgraph", + "prost", + "prost-types", + "regex", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +dependencies = [ + "bytes", + "prost", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "proxy-lib" +version = "0.1.0" +dependencies = [ + "calimero-context-config", + "calimero-context-config-near", + "ed25519-dalek 2.1.1", + "eyre", + "near-crypto 0.26.0", + "near-sdk", + "near-workspaces", + "rand 0.8.5", + "serde", + "serde_json", + "tokio", +] + [[package]] name = "psm" version = "0.1.23" @@ -5996,7 +7436,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.0.0", "rustls 0.23.12", - "socket2", + "socket2 0.5.7", "thiserror", "tokio", "tracing", @@ -6027,7 +7467,7 @@ checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" dependencies = [ "libc", "once_cell", - "socket2", + "socket2 0.5.7", "tracing", "windows-sys 0.52.0", ] @@ -6060,6 +7500,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -6067,11 +7520,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.4", "serde", ] +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -6097,16 +7560,34 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rayon" version = "1.10.0" @@ -6185,11 +7666,20 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror", ] +[[package]] +name = "reed-solomon-erasure" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" +dependencies = [ + "smallvec", +] + [[package]] name = "regalloc2" version = "0.5.1" @@ -6355,7 +7845,7 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-util", + "tokio-util 0.7.11", "tower-service", "url", "wasm-bindgen", @@ -6381,7 +7871,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -6408,7 +7898,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", @@ -6484,7 +7974,7 @@ dependencies = [ "log", "netlink-packet-route", "netlink-proto", - "nix", + "nix 0.24.3", "thiserror", "tokio", ] @@ -6520,7 +8010,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" dependencies = [ "mime_guess", - "sha2", + "sha2 0.10.8", "walkdir", ] @@ -6566,6 +8056,20 @@ dependencies = [ "nom", ] +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.38.34" @@ -6575,7 +8079,7 @@ dependencies = [ "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -6681,7 +8185,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -6765,10 +8269,10 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "hmac", + "hmac 0.12.1", "pbkdf2", "salsa20", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -6806,6 +8310,25 @@ dependencies = [ "cc", ] +[[package]] +name = "secret-service" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5204d39df37f06d1944935232fd2dfe05008def7ca599bf28c0800366c8a8f9" +dependencies = [ + "aes", + "cbc", + "futures-util", + "generic-array 0.14.7", + "hkdf", + "num", + "once_cell", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "zbus", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -6990,7 +8513,7 @@ checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "base64 0.22.1", "chrono", - "hex", + "hex 0.4.3", "indexmap 1.9.3", "indexmap 2.6.0", "serde", @@ -7049,6 +8572,19 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.8" @@ -7089,12 +8625,54 @@ dependencies = [ "memmap2 0.6.2", ] +[[package]] +name = "shell-escape" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs", +] + [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -7104,6 +8682,12 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + [[package]] name = "signature" version = "2.2.0" @@ -7152,6 +8736,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" +[[package]] +name = "slip10" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28724a6e6f70b0cb115c580891483da6f3aa99e6a353598303a57f89d23aa6bc" +dependencies = [ + "ed25519-dalek 1.0.1", + "hmac 0.9.0", + "sha2 0.9.9", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -7169,6 +8764,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "smart-default" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "snow" version = "0.9.6" @@ -7176,16 +8782,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" dependencies = [ "aes-gcm", - "blake2", + "blake2 0.10.6", "chacha20poly1305", - "curve25519-dalek", + "curve25519-dalek 4.1.3", "rand_core 0.6.4", "ring 0.17.8", "rustc_version", - "sha2", + "sha2 0.10.8", "subtle", ] +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "socket2" version = "0.5.7" @@ -7306,7 +8922,7 @@ dependencies = [ "base64 0.21.7", "crypto-bigint", "flate2", - "hex", + "hex 0.4.3", "serde", "serde_json", "serde_json_pythonic", @@ -7323,13 +8939,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a5064173a8e8d2675e67744fd07f310de44573924b6b7af225a6bdd8102913" dependencies = [ "crypto-bigint", - "hex", - "hmac", + "hex 0.4.3", + "hmac 0.12.1", "num-bigint 0.4.6", "num-integer", "num-traits", "rfc6979", - "sha2", + "sha2 0.10.8", "starknet-curve", "starknet-types-core", "zeroize", @@ -7364,7 +8980,7 @@ dependencies = [ "auto_impl", "ethereum-types", "flate2", - "getrandom", + "getrandom 0.2.15", "log", "reqwest 0.11.27", "serde", @@ -7385,7 +9001,7 @@ dependencies = [ "auto_impl", "crypto-bigint", "eth-keystore", - "getrandom", + "getrandom 0.2.15", "rand 0.8.5", "starknet-core", "starknet-crypto", @@ -7660,12 +9276,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if 1.0.0", - "fastrand", + "fastrand 2.1.0", "once_cell", - "rustix", + "rustix 0.38.34", "windows-sys 0.59.0", ] +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + [[package]] name = "termcolor" version = "1.4.1" @@ -7675,6 +9302,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "test-counter-near" +version = "0.1.0" +dependencies = [ + "eyre", + "near-sdk", + "near-workspaces", + "tokio", +] + [[package]] name = "thiserror" version = "1.0.63" @@ -7788,11 +9425,21 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.4.0" @@ -7894,6 +9541,20 @@ dependencies = [ "tungstenite 0.24.0", ] +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.11" @@ -7908,6 +9569,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + [[package]] name = "toml" version = "0.8.19" @@ -7929,6 +9602,19 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.6.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.21.1" @@ -7953,6 +9639,49 @@ dependencies = [ "winnow 0.6.18", ] +[[package]] +name = "tonic" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" +dependencies = [ + "async-stream", + "async-trait", + "base64 0.13.1", + "bytes", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "prost-derive", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "tower", + "tower-layer", + "tower-service", + "tracing", + "tracing-futures", +] + +[[package]] +name = "tonic-build" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" +dependencies = [ + "proc-macro2", + "prost-build", + "quote", + "syn 1.0.109", +] + [[package]] name = "tower" version = "0.4.13" @@ -7961,9 +9690,13 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand 0.8.5", + "slab", "tokio", + "tokio-util 0.7.11", "tower-layer", "tower-service", "tracing", @@ -8005,7 +9738,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util", + "tokio-util 0.7.11", "tower-layer", "tower-service", "tracing", @@ -8086,6 +9819,18 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.27" @@ -8117,6 +9862,27 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -8128,6 +9894,20 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-opentelemetry" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -8143,7 +9923,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", ] [[package]] @@ -8163,7 +9943,7 @@ dependencies = [ "serde_derive", "serde_json", "termcolor", - "toml", + "toml 0.8.19", ] [[package]] @@ -8215,6 +9995,17 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.1", + "tempfile", + "winapi", +] + [[package]] name = "uint" version = "0.9.5" @@ -8223,7 +10014,7 @@ checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", - "hex", + "hex 0.4.3", "static_assertions", ] @@ -8257,6 +10048,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "unicode-width" version = "0.1.13" @@ -8369,7 +10166,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] @@ -8436,6 +10233,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -8455,6 +10258,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -8635,7 +10444,7 @@ dependencies = [ "anyhow", "bytesize", "derive_builder", - "hex", + "hex 0.4.3", "indexmap 2.6.0", "schemars", "semver", @@ -8644,7 +10453,7 @@ dependencies = [ "serde_json", "serde_yaml", "thiserror", - "toml", + "toml 0.8.19", "url", ] @@ -8669,12 +10478,12 @@ dependencies = [ "bytecheck", "enum-iterator", "enumset", - "getrandom", - "hex", + "getrandom 0.2.15", + "hex 0.4.3", "indexmap 1.9.3", "more-asserts", "rkyv", - "sha2", + "sha2 0.10.8", "target-lexicon", "thiserror", "webc", @@ -8700,7 +10509,7 @@ dependencies = [ "lazy_static", "libc", "mach2", - "memoffset", + "memoffset 0.9.1", "more-asserts", "region", "scopeguard", @@ -8782,7 +10591,7 @@ dependencies = [ "futures", "futures-timer", "headers", - "hex", + "hex 0.4.3", "idna 0.4.0", "jsonrpc-core", "log", @@ -8798,7 +10607,7 @@ dependencies = [ "tiny-keccak", "tokio", "tokio-stream", - "tokio-util", + "tokio-util 0.7.11", "url", "web3-async-native-tls", ] @@ -8834,12 +10643,12 @@ dependencies = [ "serde", "serde_cbor", "serde_json", - "sha2", + "sha2 0.10.8", "shared-buffer", "tar", "tempfile", "thiserror", - "toml", + "toml 0.8.19", "url", "wasmer-config", ] @@ -8871,6 +10680,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.34", +] + [[package]] name = "widestring" version = "1.1.0" @@ -9171,7 +10992,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 4.1.3", "rand_core 0.6.4", "serde", "zeroize", @@ -9218,8 +11039,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", - "linux-raw-sys", - "rustix", + "linux-raw-sys 0.4.14", + "rustix 0.38.34", +] + +[[package]] +name = "xdg-home" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +dependencies = [ + "libc", + "windows-sys 0.59.0", ] [[package]] @@ -9289,6 +11120,72 @@ dependencies = [ "time", ] +[[package]] +name = "zbus" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex 0.4.3", + "nix 0.26.4", + "once_cell", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -9368,7 +11265,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "flate2", - "hmac", + "hmac 0.12.1", "pbkdf2", "sha1", "time", @@ -9421,3 +11318,41 @@ dependencies = [ "cc", "pkg-config", ] + +[[package]] +name = "zvariant" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/Cargo.toml b/Cargo.toml index cea0f0047..817da3387 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,8 +32,10 @@ members = [ "./apps/only-peers", "./apps/gen-ext", - "./contracts/context-config", - "./contracts/registry", + "./contracts/context-config", + "./contracts/registry", + "./contracts/proxy-lib", + "./contracts/test-counter", ] [workspace.dependencies] @@ -77,7 +79,7 @@ near-jsonrpc-client = "0.13.0" near-jsonrpc-primitives = "0.26.0" near-primitives = "0.26.0" near-sdk = "5.5.0" -near-workspaces = "0.14.0" +near-workspaces = "0.10.0" notify = "6.1.1" ouroboros = "0.18.3" owo-colors = "3.5.0" diff --git a/contracts/context-config/src/query.rs b/contracts/context-config/src/query.rs index 1803c92c8..27b76ad0a 100644 --- a/contracts/context-config/src/query.rs +++ b/contracts/context-config/src/query.rs @@ -44,6 +44,15 @@ impl ContextConfigs { members } + pub fn has_member(&self, context_id: Repr, identity: Repr) -> bool { + let context = self + .contexts + .get(&context_id) + .expect("context does not exist"); + + context.members.contains(&identity) + } + pub fn privileges( &self, context_id: Repr, diff --git a/contracts/proxy-lib/Cargo.toml b/contracts/proxy-lib/Cargo.toml new file mode 100644 index 000000000..918a0b493 --- /dev/null +++ b/contracts/proxy-lib/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "proxy-lib" +version = "0.1.0" +authors.workspace = true +edition.workspace = true +repository.workspace = true +license.workspace = true + +[lib] +crate-type = ["rlib", "cdylib"] + +[dependencies] +near-sdk.workspace = true +calimero-context-config = { path = "../../crates/context/config" } + +[dev-dependencies] +tokio.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +eyre.workspace = true +near-workspaces.workspace = true +near-crypto.workspace = true +calimero-context-config-near = { path = "../context-config" } +ed25519-dalek.workspace = true +rand.workspace = true diff --git a/contracts/proxy-lib/build-test-deps.sh b/contracts/proxy-lib/build-test-deps.sh new file mode 100755 index 000000000..2cc9a994d --- /dev/null +++ b/contracts/proxy-lib/build-test-deps.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -e + +cd "$(dirname $0)" + +TARGET="${CARGO_TARGET_DIR:-../../target}" + +PROXY_CONTRACT_PATH="./" +TEST_CONTRACT_PATH="../test-counter" +CONTEXT_CONFIG_CONTRACT_PATH="../context-config" + +echo "Building proxy contract..." +(cd $PROXY_CONTRACT_PATH && ./build.sh) + +echo "Building proxy contract..." +(cd $TEST_CONTRACT_PATH && ./build.sh) + +echo "Building context-config contract..." +(cd $CONTEXT_CONFIG_CONTRACT_PATH && ./build.sh) \ No newline at end of file diff --git a/contracts/proxy-lib/build.sh b/contracts/proxy-lib/build.sh new file mode 100755 index 000000000..823d5c07c --- /dev/null +++ b/contracts/proxy-lib/build.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +cd "$(dirname $0)" + +TARGET="${CARGO_TARGET_DIR:-../../target}" + +rustup target add wasm32-unknown-unknown + +cargo build --target wasm32-unknown-unknown --profile app-release + +mkdir -p res + +cp $TARGET/wasm32-unknown-unknown/app-release/proxy_lib.wasm ./res/ + +if command -v wasm-opt > /dev/null; then + wasm-opt -Oz ./res/proxy_lib.wasm -o ./res/proxy_lib.wasm +fi diff --git a/contracts/proxy-lib/src/ext_config.rs b/contracts/proxy-lib/src/ext_config.rs new file mode 100644 index 000000000..db0283e47 --- /dev/null +++ b/contracts/proxy-lib/src/ext_config.rs @@ -0,0 +1,8 @@ +use calimero_context_config::repr::Repr; +use calimero_context_config::types::{ContextId, SignerId}; +use near_sdk::ext_contract; + +#[ext_contract(config_contract)] +pub trait ConfigContract { + fn has_member(&self, context_id: Repr, identity: Repr) -> bool; +} diff --git a/contracts/proxy-lib/src/lib.rs b/contracts/proxy-lib/src/lib.rs new file mode 100644 index 000000000..d04333d07 --- /dev/null +++ b/contracts/proxy-lib/src/lib.rs @@ -0,0 +1,408 @@ +use core::str; +use std::collections::HashSet; +use std::usize; + +use calimero_context_config::repr::{Repr, ReprTransmute}; +use calimero_context_config::types::{ContextId, Signed, SignerId}; +use near_sdk::json_types::{Base64VecU8, U128}; +use near_sdk::store::IterableMap; +use near_sdk::{ + env, near, AccountId, Gas, NearToken, PanicOnDefault, Promise, PromiseError, PromiseOrValue, + PromiseResult, +}; + +pub mod ext_config; +pub use crate::ext_config::config_contract; + +pub type ProposalId = u32; + +#[derive(PartialEq, Debug)] +#[near(serializers = [json, borsh])] +pub struct ProposalWithApprovals { + pub proposal_id: ProposalId, + pub num_approvals: usize, +} + +enum MemberAction { + Approve { + identity: Repr, + proposal_id: ProposalId, + }, + Create { + proposal: Proposal, + num_proposals: u32, + }, +} +#[near(contract_state)] +#[derive(PanicOnDefault)] +pub struct ProxyContract { + pub context_id: ContextId, + pub context_config_account_id: AccountId, + pub num_approvals: u32, + pub proposal_nonce: ProposalId, + pub proposals: IterableMap, + pub approvals: IterableMap>, + pub num_proposals_pk: IterableMap, + pub active_proposals_limit: u32, + pub context_storage: IterableMap, Box<[u8]>>, +} + +#[derive(Clone, Debug)] +#[near(serializers = [borsh])] +pub struct FunctionCallPermission { + allowance: Option, + receiver_id: AccountId, + method_names: Vec, +} + +#[derive(Clone, PartialEq)] +#[near(serializers = [json, borsh])] +pub struct ProposalApprovalWithSigner { + pub proposal_id: ProposalId, + pub signer_id: Repr, + pub added_timestamp: u64, +} + +#[derive(Clone, PartialEq, Debug)] +#[near(serializers = [json, borsh])] +pub enum ProposalAction { + ExternalFunctionCall { + receiver_id: AccountId, + method_name: String, + args: Base64VecU8, + deposit: NearToken, + gas: Gas, + }, + Transfer { + receiver_id: AccountId, + amount: NearToken, + }, + SetNumApprovals { + num_approvals: u32, + }, + SetActiveProposalsLimit { + active_proposals_limit: u32, + }, + SetContextValue { + key: Box<[u8]>, + value: Box<[u8]>, + }, +} + +// The proposal the user makes specifying the receiving account and actions they want to execute (1 tx) +#[derive(Clone, PartialEq, Debug)] +#[near(serializers = [json, borsh])] +pub struct Proposal { + pub author_id: Repr, + pub actions: Vec, +} + +#[near] +impl ProxyContract { + #[init] + pub fn init(context_id: Repr, context_config_account_id: AccountId) -> Self { + Self { + context_id: context_id.rt().expect("Invalid context id"), + context_config_account_id, + proposal_nonce: 0, + proposals: IterableMap::new(b"r".to_vec()), + approvals: IterableMap::new(b"c".to_vec()), + num_proposals_pk: IterableMap::new(b"k".to_vec()), + num_approvals: 3, + active_proposals_limit: 10, + context_storage: IterableMap::new(b"l"), + } + } + + pub fn create_and_approve_proposal(&self, proposal: Signed) -> Promise { + // Verify the signature corresponds to the signer_id + let proposal = proposal + .parse(|i| *i.author_id) + .expect("failed to parse input"); + + let author_id = proposal.author_id; + + let num_proposals = self.num_proposals_pk.get(&author_id).unwrap_or(&0) + 1; + assert!( + num_proposals <= self.active_proposals_limit, + "Account has too many active proposals. Confirm or delete some." + ); + return self.perform_action_by_member(MemberAction::Create { + proposal, + num_proposals, + }); + } + + pub fn approve(&mut self, proposal: Signed) -> Promise { + let proposal = proposal + .parse(|i| *i.signer_id) + .expect("failed to parse input"); + return self.perform_action_by_member(MemberAction::Approve { + identity: proposal.signer_id, + proposal_id: proposal.proposal_id, + }); + } + + fn internal_confirm(&mut self, proposal_id: ProposalId, signer_id: SignerId) { + let approvals = self.approvals.get_mut(&proposal_id).unwrap(); + assert!( + !approvals.contains(&signer_id), + "Already confirmed this proposal with this key" + ); + if approvals.len() as u32 + 1 >= self.num_approvals { + let proposal = self.remove_proposal(proposal_id); + /******************************** + NOTE: If the tx execution fails for any reason, the proposals and approvals are removed already, so the client has to start all over + ********************************/ + self.execute_proposal(proposal); + } else { + approvals.insert(signer_id); + } + } + + fn perform_action_by_member(&self, action: MemberAction) -> Promise { + let identity = match &action { + MemberAction::Approve { identity, .. } => identity, + MemberAction::Create { proposal, .. } => &proposal.author_id, + } + .rt() + .expect("Could not transmute"); + config_contract::ext(self.context_config_account_id.clone()) + .has_member(Repr::new(self.context_id), identity) + .then(match action { + MemberAction::Approve { + identity, + proposal_id, + } => Self::ext(env::current_account_id()) + .internal_approve_proposal(identity, proposal_id), + MemberAction::Create { + proposal, + num_proposals, + } => Self::ext(env::current_account_id()) + .internal_create_proposal(proposal, num_proposals), + }) + } + + pub fn proposals(&self, offset: usize, length: usize) -> Vec<(&u32, &Proposal)> { + let effective_len = (self.proposals.len() as usize) + .saturating_sub(offset) + .min(length); + let mut proposals = Vec::with_capacity(effective_len); + for proposal in self.proposals.iter().skip(offset).take(length) { + proposals.push(proposal); + } + proposals + } + + pub fn get_confirmations_count( + &self, + proposal_id: ProposalId, + ) -> Option { + let approvals_for_proposal = self.approvals.get(&proposal_id); + match approvals_for_proposal { + Some(approvals) => Some(ProposalWithApprovals { + proposal_id, + num_approvals: approvals.len(), + }), + None => None, + } + } + + #[private] + pub fn internal_approve_proposal( + &mut self, + signer_id: Repr, + proposal_id: ProposalId, + #[callback_result] call_result: Result, // Match the return type + ) -> Option { + assert_membership(call_result); + + self.internal_confirm(proposal_id, signer_id.rt().expect("Invalid signer")); + self.build_proposal_response(proposal_id) + } + + #[private] + pub fn internal_create_proposal( + &mut self, + proposal: Proposal, + num_proposals: u32, + #[callback_result] call_result: Result, // Match the return type + ) -> Option { + assert_membership(call_result); + + self.num_proposals_pk + .insert(*proposal.author_id, num_proposals); + + let proposal_id = self.proposal_nonce; + + self.proposals.insert(proposal_id, proposal.clone()); + self.approvals.insert(proposal_id, HashSet::new()); + self.internal_confirm( + proposal_id, + proposal.author_id.rt().expect("Invalid signer"), + ); + + self.proposal_nonce += 1; + + self.build_proposal_response(proposal_id) + } + + fn build_proposal_response(&self, proposal_id: ProposalId) -> Option { + let approvals = self.get_confirmations_count(proposal_id); + match approvals { + None => None, + _ => Some(ProposalWithApprovals { + proposal_id, + num_approvals: approvals.unwrap().num_approvals, + }), + } + } + + #[private] + pub fn finalize_execution(&mut self, proposal: Proposal) -> bool { + let promise_count = env::promise_results_count(); + if promise_count > 0 { + for i in 0..promise_count { + match env::promise_result(i) { + PromiseResult::Successful(_) => continue, + _ => return false, + } + } + } + + for action in proposal.actions { + match action { + ProposalAction::SetActiveProposalsLimit { + active_proposals_limit, + } => { + self.active_proposals_limit = active_proposals_limit; + } + ProposalAction::SetNumApprovals { num_approvals } => { + self.num_approvals = num_approvals; + } + ProposalAction::SetContextValue { key, value } => { + self.internal_mutate_storage(key, value); + } + _ => {} + } + } + true + } + + fn execute_proposal(&mut self, proposal: Proposal) -> PromiseOrValue { + let mut promise_actions = Vec::new(); + let mut non_promise_actions = Vec::new(); + + for action in proposal.actions { + match action { + ProposalAction::ExternalFunctionCall { .. } | ProposalAction::Transfer { .. } => { + promise_actions.push(action) + } + _ => non_promise_actions.push(action), + } + } + + if promise_actions.is_empty() { + self.finalize_execution(Proposal { + author_id: proposal.author_id, + actions: non_promise_actions, + }); + return PromiseOrValue::Value(true); + } + + let mut chained_promise: Option = None; + + for action in promise_actions { + let promise = match action { + ProposalAction::ExternalFunctionCall { + receiver_id, + method_name, + args, + deposit, + gas, + } => { + Promise::new(receiver_id).function_call(method_name, args.into(), deposit, gas) + } + ProposalAction::Transfer { + receiver_id, + amount, + } => Promise::new(receiver_id).transfer(amount), + _ => continue, + }; + + chained_promise = Some(match chained_promise { + Some(accumulated) => accumulated.then(promise), + None => promise, + }); + } + + match chained_promise { + Some(promise) => PromiseOrValue::Promise(promise.then( + Self::ext(env::current_account_id()).finalize_execution(Proposal { + author_id: proposal.author_id, + actions: non_promise_actions, + }), + )), + None => PromiseOrValue::Value(true), + } + } + + fn remove_proposal(&mut self, proposal_id: ProposalId) -> Proposal { + self.approvals.remove(&proposal_id); + let proposal = self + .proposals + .remove(&proposal_id) + .expect("Failed to remove existing element"); + + let author_id: SignerId = proposal.author_id.rt().expect("Invalid signer"); + let mut num_proposals = *self.num_proposals_pk.get(&author_id).unwrap_or(&0); + + if num_proposals > 0 { + num_proposals = num_proposals - 1; + } + self.num_proposals_pk.insert(author_id, num_proposals); + proposal + } + + #[private] + pub fn internal_mutate_storage( + &mut self, + key: Box<[u8]>, + value: Box<[u8]>, + ) -> Option> { + let val = self.context_storage.insert(key.clone(), value); + val + } + + pub fn context_storage_entries( + &self, + offset: usize, + length: usize, + ) -> Vec<(&Box<[u8]>, &Box<[u8]>)> { + let effective_len = (self.context_storage.len() as usize) + .saturating_sub(offset) + .min(length); + let mut context_storage_entries = Vec::with_capacity(effective_len); + for entry in self.context_storage.iter().skip(offset).take(length) { + context_storage_entries.push(entry); + } + context_storage_entries + } + + pub fn get_context_value(&self, key: Box<[u8]>) -> Option> { + self.context_storage.get(&key).cloned() + } + + pub fn get_num_approvals(&self) -> u32 { + self.num_approvals + } + + pub fn get_active_proposals_limit(&self) -> u32 { + self.active_proposals_limit + } +} + +fn assert_membership(call_result: Result) { + let has_member = call_result.expect("Membership check failed"); + assert!(has_member, "Is not a member"); +} diff --git a/contracts/proxy-lib/test.sh b/contracts/proxy-lib/test.sh new file mode 100755 index 000000000..c86105449 --- /dev/null +++ b/contracts/proxy-lib/test.sh @@ -0,0 +1,7 @@ +#!/bin/sh +set -e + +./build-test-deps.sh + +echo "Running tests..." +cargo test -- --nocapture diff --git a/contracts/proxy-lib/tests/common/config_helper.rs b/contracts/proxy-lib/tests/common/config_helper.rs new file mode 100644 index 000000000..c0e03ca8c --- /dev/null +++ b/contracts/proxy-lib/tests/common/config_helper.rs @@ -0,0 +1,107 @@ +use calimero_context_config::repr::{Repr, ReprTransmute}; +use calimero_context_config::types::{Application, ContextId, ContextIdentity, Signed, SignerId}; +use calimero_context_config::{ContextRequest, ContextRequestKind, Request, RequestKind}; +use ed25519_dalek::{Signer, SigningKey}; +use eyre::Result; +use near_workspaces::network::Sandbox; +use near_workspaces::result::ExecutionFinalResult; +use near_workspaces::{Account, Contract, Worker}; +use rand::Rng; + +use super::deploy_contract; + +const CONTEXT_CONFIG_WASM: &str = "../context-config/res/calimero_context_config_near.wasm"; + +#[derive(Clone)] +pub struct ConfigContractHelper { + pub config_contract: Contract, +} + +impl ConfigContractHelper { + pub async fn new(worker: &Worker) -> Result { + let config_contract = deploy_contract(worker, CONTEXT_CONFIG_WASM).await?; + Ok(Self { config_contract }) + } + + pub async fn add_context_to_config( + &self, + caller: &Account, + context: &SigningKey, + author: &SigningKey, + ) -> Result { + let mut rng = rand::thread_rng(); + + let application_id = rng.gen::<[_; 32]>().rt()?; + let blob_id = rng.gen::<[_; 32]>().rt()?; + + let author_id: Repr = Repr::new(author.verifying_key().rt()?); + let context_id: Repr = Repr::new(context.verifying_key().rt()?); + let context_signer: Repr = Repr::new(context.verifying_key().rt()?); + + let signed_request = Signed::new( + &{ + let kind = RequestKind::Context(ContextRequest::new( + context_id, + ContextRequestKind::Add { + author_id, + application: Application::new( + application_id, + blob_id, + 0, + Default::default(), + Default::default(), + ), + }, + )); + Request::new(context_signer.rt()?, kind) + }, + |p| context.sign(p), + )?; + let res = self.mutate_call(&caller, &signed_request).await?; + Ok(res) + } + + pub async fn add_members( + &self, + caller: &Account, + host: &SigningKey, + guests: &[SigningKey], + context: &SigningKey, + ) -> Result { + let guest_ids: Vec> = guests + .iter() + .map(|x| Repr::new(x.verifying_key().rt().unwrap())) + .collect(); + let host_id: Repr = Repr::new(host.verifying_key().rt()?); + let context_id: Repr = Repr::new(context.verifying_key().rt()?); + + let signed_request = Signed::new( + &{ + let kind = RequestKind::Context(ContextRequest::new( + context_id, + ContextRequestKind::AddMembers { + members: guest_ids.into(), + }, + )); + Request::new(host_id.rt()?, kind) + }, + |p| host.sign(p), + )?; + + let res = self.mutate_call(caller, &signed_request).await?; + Ok(res) + } + + async fn mutate_call<'a>( + &'a self, + caller: &'a Account, + request: &'a Signed>, + ) -> Result { + let res = caller + .call(self.config_contract.id(), "mutate") + .args_json(request) + .transact() + .await?; + Ok(res) + } +} diff --git a/contracts/proxy-lib/tests/common/counter_helper.rs b/contracts/proxy-lib/tests/common/counter_helper.rs new file mode 100644 index 000000000..90fdc0557 --- /dev/null +++ b/contracts/proxy-lib/tests/common/counter_helper.rs @@ -0,0 +1,30 @@ +use eyre::Result; +use near_workspaces::network::Sandbox; +use near_workspaces::{Contract, Worker}; + +use super::deploy_contract; + +const COUNTER_WASM: &str = "../test-counter/res/test_counter_near.wasm"; + +#[derive(Clone)] +pub struct CounterContractHelper { + pub counter_contract: Contract, +} + +impl CounterContractHelper { + pub async fn deploy_and_initialize(worker: &Worker) -> Result { + let counter_contract = deploy_contract(worker, COUNTER_WASM).await?; + + let _res = counter_contract + .call("new") + .transact() + .await? + .into_result()?; + Ok(Self { counter_contract }) + } + + pub async fn get_value(&self) -> Result { + let counter_value: u32 = self.counter_contract.view("get_count").await?.json()?; + Ok(counter_value) + } +} diff --git a/contracts/proxy-lib/tests/common/mod.rs b/contracts/proxy-lib/tests/common/mod.rs new file mode 100644 index 000000000..fdb58d050 --- /dev/null +++ b/contracts/proxy-lib/tests/common/mod.rs @@ -0,0 +1,37 @@ +use ed25519_dalek::SigningKey; +use eyre::Result; +use near_workspaces::network::Sandbox; +use near_workspaces::types::NearToken; +use near_workspaces::{Account, Contract, Worker}; +use rand::Rng; + +pub mod config_helper; +pub mod counter_helper; +pub mod proxy_lib_helper; + +pub async fn deploy_contract(worker: &Worker, wasm_path: &str) -> Result { + let wasm = std::fs::read(wasm_path)?; + let contract = worker.dev_deploy(&wasm).await?; + Ok(contract) +} + +pub fn generate_keypair() -> Result { + let mut rng = rand::thread_rng(); + let sk = SigningKey::from_bytes(&rng.gen()); + Ok(sk) +} + +pub async fn create_account_with_balance( + worker: &Worker, + account_id: &str, + balance: u128, +) -> Result { + let root_account = worker.dev_create_account().await?; + let account = root_account + .create_subaccount(account_id) + .initial_balance(NearToken::from_near(balance)) + .transact() + .await? + .into_result()?; + Ok(account) +} diff --git a/contracts/proxy-lib/tests/common/proxy_lib_helper.rs b/contracts/proxy-lib/tests/common/proxy_lib_helper.rs new file mode 100644 index 000000000..0d7d173ef --- /dev/null +++ b/contracts/proxy-lib/tests/common/proxy_lib_helper.rs @@ -0,0 +1,157 @@ +use calimero_context_config::repr::{Repr, ReprTransmute}; +use calimero_context_config::types::{ContextId, Signed}; +use ed25519_dalek::{Signer, SigningKey}; +use near_workspaces::network::Sandbox; +use near_workspaces::result::{ExecutionFinalResult, ViewResultDetails}; +use near_workspaces::{Account, Contract, Worker}; +use proxy_lib::{Proposal, ProposalAction, ProposalApprovalWithSigner, ProposalId}; +use serde_json::json; + +use super::deploy_contract; + +const PROXY_CONTRACT_WASM: &str = "./res/proxy_lib.wasm"; + +pub struct ProxyContractHelper { + pub proxy_contract: Contract, + config_contract: Contract, +} + +impl ProxyContractHelper { + pub async fn new(worker: &Worker, config_contract: Contract) -> eyre::Result { + let proxy_contract = deploy_contract(worker, PROXY_CONTRACT_WASM).await?; + Ok(Self { + proxy_contract, + config_contract, + }) + } + + pub async fn initialize( + &self, + caller: &Account, + context_id: &Repr, + ) -> eyre::Result { + caller + .call(self.proxy_contract.id(), "init") + .args_json(json!({ + "context_id": context_id, + "context_config_account_id": self.config_contract.id(), + })) + .transact() + .await + } + + pub fn create_proposal( + &self, + author: &SigningKey, + actions: &Vec, + ) -> eyre::Result> { + let proposal = Proposal { + author_id: author.verifying_key().rt().expect("Invalid signer"), + actions: actions.clone(), + }; + let signed = Signed::new(&proposal, |p| author.sign(p))?; + Ok(signed) + } + + pub async fn create_and_approve_proposal( + &self, + caller: &Account, + proposal: &Signed, + ) -> eyre::Result { + let call = caller + .call(self.proxy_contract.id(), "create_and_approve_proposal") + .args_json(json!({ + "proposal": proposal + })) + .max_gas() + .transact() + .await?; + Ok(call) + } + + pub async fn approve_proposal( + &self, + caller: &Account, + signer: &SigningKey, + proposal_id: &ProposalId, + ) -> eyre::Result { + let signer_id = signer + .verifying_key() + .to_bytes() + .rt() + .expect("Invalid signer"); + let args = Signed::new( + &{ + ProposalApprovalWithSigner { + signer_id, + proposal_id: proposal_id.clone(), + added_timestamp: 0, + } + }, + |p| signer.sign(p), + ) + .expect("Failed to sign proposal"); + let res = caller + .call(self.proxy_contract.id(), "approve") + .args_json(json!({"proposal": args})) + .max_gas() + .transact() + .await?; + Ok(res) + } + + pub async fn view_proposal_confirmations( + &self, + caller: &Account, + proposal_id: &ProposalId, + ) -> eyre::Result { + let res = caller + .view(self.proxy_contract.id(), "get_confirmations_count") + .args_json(json!({ "proposal_id": proposal_id })) + .await?; + Ok(res) + } + + pub async fn view_active_proposals_limit(&self, caller: &Account) -> eyre::Result { + let res: u32 = caller + .view(self.proxy_contract.id(), "get_active_proposals_limit") + .await? + .json()?; + Ok(res) + } + + pub async fn view_num_approvals(&self, caller: &Account) -> eyre::Result { + let res: u32 = caller + .view(self.proxy_contract.id(), "get_num_approvals") + .await? + .json()?; + Ok(res) + } + + pub async fn view_context_value( + &self, + caller: &Account, + key: Box<[u8]>, + ) -> eyre::Result>> { + let res: Option> = caller + .view(self.proxy_contract.id(), "get_context_value") + .args_json(json!({ "key": key })) + .await? + .json()?; + Ok(res) + } + + pub async fn view_proposals( + &self, + caller: &Account, + offset: usize, + length: usize, + ) -> eyre::Result> { + let res = caller + .view(self.proxy_contract.id(), "proposals") + .args_json(json!({ "offset": offset, "length": length })) + .await? + .json()?; + Ok(res) + } +} diff --git a/contracts/proxy-lib/tests/sandbox.rs b/contracts/proxy-lib/tests/sandbox.rs new file mode 100644 index 000000000..f48f38741 --- /dev/null +++ b/contracts/proxy-lib/tests/sandbox.rs @@ -0,0 +1,601 @@ +use calimero_context_config::repr::ReprTransmute; +use common::config_helper::ConfigContractHelper; +use common::counter_helper::CounterContractHelper; +use common::create_account_with_balance; +use common::proxy_lib_helper::ProxyContractHelper; +use ed25519_dalek::SigningKey; +use eyre::Result; +use near_sdk::json_types::Base64VecU8; +use near_sdk::{Gas, NearToken}; +use near_workspaces::network::Sandbox; +use near_workspaces::{Account, Worker}; +use proxy_lib::{Proposal, ProposalAction, ProposalWithApprovals}; + +mod common; + +async fn setup_test( + worker: &Worker, +) -> Result<( + ConfigContractHelper, + ProxyContractHelper, + Account, + SigningKey, + SigningKey, +)> { + let config_helper = ConfigContractHelper::new(&worker).await?; + let proxy_helper = + ProxyContractHelper::new(&worker, config_helper.clone().config_contract).await?; + + let relayer_account = common::create_account_with_balance(&worker, "account", 10).await?; + // This account is only used to deploy the proxy contract + let developer_account = common::create_account_with_balance(&worker, "alice", 10).await?; + + let context_sk = common::generate_keypair()?; + let alice_sk: SigningKey = common::generate_keypair()?; + + let _res = config_helper + .add_context_to_config(&relayer_account, &context_sk, &alice_sk) + .await? + .into_result()?; + + let _res = proxy_helper + .initialize(&developer_account, &context_sk.verifying_key().rt()?) + .await; + + Ok(( + config_helper, + proxy_helper, + relayer_account, + context_sk, + alice_sk, + )) +} + +#[tokio::test] +async fn test_create_proposal() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = + setup_test(&worker).await?; + + let proposal = proxy_helper.create_proposal(&alice_sk, &vec![])?; + + let res: Option = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result()? + .json()?; + + match res { + Some(proposal) => { + assert_eq!(proposal.proposal_id, 0, "Expected proposal_id to be 0"); + assert_eq!(proposal.num_approvals, 1, "Expected 1 approval"); + } + None => panic!("Expected to create a proposal, but got None"), + } + + Ok(()) +} + +#[tokio::test] +async fn test_create_proposal_by_non_member() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (_config_helper, proxy_helper, relayer_account, _context_sk, _alice_sk) = + setup_test(&worker).await?; + + // Bob is not a member of the context + let bob_sk: SigningKey = common::generate_keypair()?; + + let proposal: calimero_context_config::types::Signed = + proxy_helper.create_proposal(&bob_sk, &vec![])?; + + let res = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result(); + + let error = res.expect_err("Expected an error from the contract"); + assert!(error.to_string().contains("Is not a member")); + + let view_proposal: Option = proxy_helper + .view_proposal_confirmations(&relayer_account, &0) + .await? + .json()?; + + match view_proposal { + Some(proposal) => panic!("Expected to not create a proposal, but got {:?}", proposal), + None => Ok(()), + } +} + +#[tokio::test] +async fn test_create_multiple_proposals() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + + let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = + setup_test(&worker).await?; + + let proposal: calimero_context_config::types::Signed = + proxy_helper.create_proposal(&alice_sk, &vec![])?; + + let _res = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result(); + + let res: ProposalWithApprovals = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result()? + .json()?; + + assert_eq!(res.proposal_id, 1); + assert_eq!(res.num_approvals, 1); + + Ok(()) +} + +#[tokio::test] +async fn test_create_proposal_and_approve_by_member() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + + let (config_helper, proxy_helper, relayer_account, context_sk, alice_sk) = + setup_test(&worker).await?; + + // Add Bob as a context member + let bob_sk: SigningKey = common::generate_keypair()?; + let _res = config_helper + .add_members(&relayer_account, &alice_sk, &[bob_sk.clone()], &context_sk) + .await? + .into_result()?; + + let proposal: calimero_context_config::types::Signed = + proxy_helper.create_proposal(&alice_sk, &vec![])?; + + let res: ProposalWithApprovals = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result()? + .json()?; + + let res2: ProposalWithApprovals = proxy_helper + .approve_proposal(&relayer_account, &bob_sk, &res.proposal_id) + .await? + .into_result()? + .json()?; + + assert_eq!(res2.proposal_id, 0); + assert_eq!(res2.num_approvals, 2); + + Ok(()) +} + +#[tokio::test] +async fn test_create_proposal_and_approve_by_non_member() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + + let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = + setup_test(&worker).await?; + + // Bob is not a member of the context + let bob_sk: SigningKey = common::generate_keypair()?; + + let proposal: calimero_context_config::types::Signed = + proxy_helper.create_proposal(&alice_sk, &vec![])?; + + let res: ProposalWithApprovals = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result()? + .json()?; + + let res2 = proxy_helper + .approve_proposal(&relayer_account, &bob_sk, &res.proposal_id) + .await? + .into_result(); + + let error = res2.expect_err("Expected an error from the contract"); + assert!(error.to_string().contains("Is not a member")); + + let view_proposal: ProposalWithApprovals = proxy_helper + .view_proposal_confirmations(&relayer_account, &res.proposal_id) + .await? + .json()?; + assert_eq!(view_proposal.num_approvals, 1); + + Ok(()) +} + +async fn setup_action_test( + worker: &Worker, +) -> Result<(ProxyContractHelper, Account, Vec)> { + let (config_helper, proxy_helper, relayer_account, context_sk, alice_sk) = + setup_test(&worker).await?; + + let bob_sk = common::generate_keypair()?; + let charlie_sk = common::generate_keypair()?; + + let _res = config_helper + .add_members( + &relayer_account, + &alice_sk, + &[bob_sk.clone(), charlie_sk.clone()], + &context_sk, + ) + .await? + .into_result()?; + + let members = vec![alice_sk, bob_sk, charlie_sk]; + Ok((proxy_helper, relayer_account, members)) +} + +async fn create_and_approve_proposal( + proxy_helper: &ProxyContractHelper, + relayer_account: &Account, + actions: &Vec, + members: Vec, +) -> Result<()> { + let proposal = proxy_helper.create_proposal(&members[0], actions)?; + + let res: ProposalWithApprovals = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal) + .await? + .into_result()? + .json()?; + + assert_eq!(res.num_approvals, 1); + + let res: ProposalWithApprovals = proxy_helper + .approve_proposal(&relayer_account, &members[1], &res.proposal_id) + .await? + .into_result()? + .json()?; + + assert_eq!(res.num_approvals, 2, "Proposal should have 2 approvals"); + + let res: Option = proxy_helper + .approve_proposal(&relayer_account, &members[2], &res.proposal_id) + .await? + .into_result()? + .json()?; + + assert!( + res.is_none(), + "Proposal should be removed after the execution" + ); + + Ok(()) +} + +#[tokio::test] +async fn test_execute_proposal() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let counter_helper = CounterContractHelper::deploy_and_initialize(&worker).await?; + + let counter_value: u32 = counter_helper.get_value().await?; + assert_eq!( + counter_value, 0, + "Counter should be zero before proposal execution" + ); + + let actions = vec![ProposalAction::ExternalFunctionCall { + receiver_id: counter_helper.counter_contract.id().clone(), + method_name: "increment".to_string(), + args: Base64VecU8::from(vec![]), + deposit: NearToken::from_near(0), + gas: Gas::from_gas(1_000_000_000_000), + }]; + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let counter_value: u32 = counter_helper.get_value().await?; + assert_eq!( + counter_value, 1, + "Counter should be incremented by the proposal execution" + ); + + Ok(()) +} + +#[tokio::test] +async fn test_action_change_active_proposals_limit() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let default_active_proposals_limit: u32 = proxy_helper + .view_active_proposals_limit(&relayer_account) + .await?; + assert_eq!(default_active_proposals_limit, 10); + + let actions = vec![ProposalAction::SetActiveProposalsLimit { + active_proposals_limit: 6, + }]; + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let new_active_proposals_limit: u32 = proxy_helper + .view_active_proposals_limit(&relayer_account) + .await?; + assert_eq!(new_active_proposals_limit, 6); + + Ok(()) +} + +#[tokio::test] +async fn test_action_change_number_of_approvals() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let default_new_num_approvals: u32 = proxy_helper.view_num_approvals(&relayer_account).await?; + assert_eq!(default_new_num_approvals, 3); + + let actions = vec![ProposalAction::SetNumApprovals { num_approvals: 2 }]; + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let new_num_approvals: u32 = proxy_helper.view_num_approvals(&relayer_account).await?; + assert_eq!(new_num_approvals, 2); + + Ok(()) +} + +#[tokio::test] +async fn test_mutate_storage_value() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let key_data = b"example_key".to_vec().into_boxed_slice(); + let value_data = b"example_value".to_vec().into_boxed_slice(); + + let default_storage_value: Option> = proxy_helper + .view_context_value(&relayer_account, key_data.clone()) + .await?; + assert!(default_storage_value.is_none()); + + let actions = vec![ProposalAction::SetContextValue { + key: key_data.clone(), + value: value_data.clone(), + }]; + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let storage_value: Box<[u8]> = proxy_helper + .view_context_value(&relayer_account, key_data.clone()) + .await? + .expect("Expected some value, but got None"); + assert_eq!( + storage_value, value_data, + "The value did not match the expected data" + ); + + Ok(()) +} + +#[tokio::test] +async fn test_transfer() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let _res = &worker + .root_account()? + .transfer_near( + proxy_helper.proxy_contract.id(), + near_workspaces::types::NearToken::from_near(5), + ) + .await?; + + let recipient = create_account_with_balance(&worker, "new_account", 0).await?; + + let recipient_balance = recipient.view_account().await?.balance; + assert_eq!( + NearToken::from_near(0).as_near(), + recipient_balance.as_near() + ); + + let actions = vec![ProposalAction::Transfer { + receiver_id: recipient.id().clone(), + amount: NearToken::from_near(5), + }]; + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let recipient_balance = recipient.view_account().await?.balance; + assert_eq!( + NearToken::from_near(5).as_near(), + recipient_balance.as_near() + ); + + Ok(()) +} + +#[tokio::test] +async fn test_combined_proposals() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let counter_helper = CounterContractHelper::deploy_and_initialize(&worker).await?; + + let initial_counter_value: u32 = counter_helper.get_value().await?; + assert_eq!(initial_counter_value, 0, "Counter should start at zero"); + + let initial_active_proposals_limit: u32 = proxy_helper + .view_active_proposals_limit(&relayer_account) + .await?; + assert_eq!( + initial_active_proposals_limit, 10, + "Default proposals limit should be 10" + ); + + let actions = vec![ + ProposalAction::ExternalFunctionCall { + receiver_id: counter_helper.counter_contract.id().clone(), + method_name: "increment".to_string(), + args: Base64VecU8::from(vec![]), + deposit: NearToken::from_near(0), + gas: Gas::from_gas(1_000_000_000_000), + }, + ProposalAction::SetActiveProposalsLimit { + active_proposals_limit: 5, + }, + ]; + + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let updated_counter_value: u32 = counter_helper.get_value().await?; + assert_eq!( + updated_counter_value, 1, + "Counter should be incremented by the proposal execution" + ); + + let updated_active_proposals_limit: u32 = proxy_helper + .view_active_proposals_limit(&relayer_account) + .await?; + assert_eq!( + updated_active_proposals_limit, 5, + "Active proposals limit should be updated to 5" + ); + + Ok(()) +} + +#[tokio::test] +async fn test_combined_proposal_actions_with_promise_failure() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (proxy_helper, relayer_account, members) = setup_action_test(&worker).await?; + + let counter_helper = CounterContractHelper::deploy_and_initialize(&worker).await?; + + let initial_active_proposals_limit: u32 = proxy_helper + .view_active_proposals_limit(&relayer_account) + .await?; + assert_eq!( + initial_active_proposals_limit, 10, + "Default proposals limit should be 10" + ); + + let actions = vec![ + ProposalAction::ExternalFunctionCall { + receiver_id: counter_helper.counter_contract.id().clone(), + method_name: "non_existent_method".to_string(), // This method does not exist + args: Base64VecU8::from(vec![]), + deposit: NearToken::from_near(0), + gas: Gas::from_gas(1_000_000_000_000), + }, + ProposalAction::SetActiveProposalsLimit { + active_proposals_limit: 5, + }, + ]; + + let _res = + create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; + + let active_proposals_limit: u32 = proxy_helper + .view_active_proposals_limit(&relayer_account) + .await?; + assert_eq!( + active_proposals_limit, 10, + "Active proposals limit should remain unchanged due to the failed promise" + ); + + Ok(()) +} + +#[tokio::test] +async fn test_view_proposals() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + + let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = + setup_test(&worker).await?; + + let proposal1_actions = vec![ProposalAction::SetActiveProposalsLimit { + active_proposals_limit: 5, + }]; + let proposal1 = proxy_helper.create_proposal(&alice_sk, &proposal1_actions)?; + let proposal2_actions = vec![ProposalAction::SetNumApprovals { num_approvals: 2 }]; + let proposal2 = proxy_helper.create_proposal(&alice_sk, &proposal2_actions)?; + let proposal3_actions = vec![ProposalAction::SetContextValue { + key: b"example_key".to_vec().into_boxed_slice(), + value: b"example_value".to_vec().into_boxed_slice(), + }]; + let proposal3 = proxy_helper.create_proposal(&alice_sk, &proposal3_actions)?; + + let _ = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal1) + .await?; + let _ = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal2) + .await?; + let _ = proxy_helper + .create_and_approve_proposal(&relayer_account, &proposal3) + .await?; + + let proposals = proxy_helper.view_proposals(&relayer_account, 0, 3).await?; + + assert_eq!(proposals.len(), 3, "Expected to retrieve 3 proposals"); + + assert_eq!(proposals[0].0, 0, "Expected first proposal to have id 0"); + assert_eq!(proposals[1].0, 1, "Expected second proposal to have id 1"); + assert_eq!(proposals[2].0, 2, "Expected third proposal to have id 2"); + + assert_eq!( + &proposals[0].1.actions[0], &proposal1_actions[0], + "First proposal actions should match proposal 1" + ); + assert_eq!( + &proposals[1].1.actions[0], &proposal2_actions[0], + "Second proposal actions should match proposal 2" + ); + assert_eq!( + &proposals[2].1.actions[0], &proposal3_actions[0], + "Third proposal actions should match proposal 3" + ); + + // Retrieve proposals with offset 1 and length 2 + let proposals = proxy_helper.view_proposals(&relayer_account, 1, 2).await?; + + assert_eq!( + proposals.len(), + 2, + "Expected to retrieve 2 proposals starting from offset 1" + ); + + assert_eq!( + proposals[0].0, 1, + "Expected the first returned proposal to have id 1" + ); + assert_eq!( + proposals[1].0, 2, + "Expected the second returned proposal to have id 2" + ); + + assert_eq!( + &proposals[0].1.actions[0], &proposal2_actions[0], + "First proposal actions should match proposal 2" + ); + assert_eq!( + &proposals[1].1.actions[0], &proposal3_actions[0], + "Second proposal actions should match proposal 3" + ); + + // Verify retrieval with a length of 1 + let single_proposal = proxy_helper.view_proposals(&relayer_account, 2, 1).await?; + + assert_eq!( + single_proposal.len(), + 1, + "Expected to retrieve 1 proposal starting from offset 3" + ); + assert_eq!( + single_proposal[0].0, 2, + "Expected the proposal to have id 2" + ); + + assert_eq!( + &proposals[1].1.actions[0], &proposal3_actions[0], + "first proposal actions should match proposal 3" + ); + + Ok(()) +} diff --git a/contracts/test-counter/Cargo.toml b/contracts/test-counter/Cargo.toml new file mode 100644 index 000000000..b9a3c238d --- /dev/null +++ b/contracts/test-counter/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "test-counter-near" +version = "0.1.0" +authors.workspace = true +edition.workspace = true +repository.workspace = true +license.workspace = true + +[lib] +crate-type = ["rlib", "cdylib"] + +[dependencies] +near-sdk.workspace = true + +[dev-dependencies] +eyre.workspace = true +near-workspaces.workspace = true +tokio.workspace = true + +[lints] +workspace = true diff --git a/contracts/test-counter/build.sh b/contracts/test-counter/build.sh new file mode 100755 index 000000000..c59b0c7d9 --- /dev/null +++ b/contracts/test-counter/build.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +cd "$(dirname $0)" + +TARGET="${CARGO_TARGET_DIR:-../../target}" + +rustup target add wasm32-unknown-unknown + +cargo build --target wasm32-unknown-unknown --profile app-release + +mkdir -p res + +cp $TARGET/wasm32-unknown-unknown/app-release/test_counter_near.wasm ./res/ + +if command -v wasm-opt > /dev/null; then + wasm-opt -Oz ./res/test_counter_near.wasm -o ./res/test_counter_near.wasm +fi diff --git a/contracts/test-counter/src/lib.rs b/contracts/test-counter/src/lib.rs new file mode 100644 index 000000000..1fc099353 --- /dev/null +++ b/contracts/test-counter/src/lib.rs @@ -0,0 +1,26 @@ +#![allow(unused_crate_dependencies, reason = "False positives")] + +use near_sdk::{env, near, PanicOnDefault}; + +#[near(contract_state)] +#[derive(PanicOnDefault, Clone, Copy, Debug)] +pub struct CounterContract { + counter: u32, +} + +#[near] +impl CounterContract { + #[init] + pub fn new() -> Self { + Self { counter: 0 } + } + + pub fn increment(&mut self) { + self.counter += 1; + env::log_str("Counter incremented"); + } + + pub fn get_count(&self) -> u32 { + self.counter + } +} diff --git a/contracts/test-counter/test.sh b/contracts/test-counter/test.sh new file mode 100755 index 000000000..604d60167 --- /dev/null +++ b/contracts/test-counter/test.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +CONTRACT_PATH="./" + +echo "Building context-config contract..." +(cd $CONTRACT_PATH && ./build.sh) + +echo "Running tests..." +cargo test -- --nocapture diff --git a/contracts/test-counter/tests/sandbox.rs b/contracts/test-counter/tests/sandbox.rs new file mode 100644 index 000000000..bcb14dadb --- /dev/null +++ b/contracts/test-counter/tests/sandbox.rs @@ -0,0 +1,36 @@ +#![allow(unused_crate_dependencies, reason = "False positives")] + +use near_workspaces::network::Sandbox; +use near_workspaces::{Contract, Worker}; + +const CONTRACT_WASM: &str = "./res/test_counter_near.wasm"; + +async fn deploy_counter_contract(worker: &Worker) -> eyre::Result { + let wasm = std::fs::read(CONTRACT_WASM)?; + let contract = worker.dev_deploy(&wasm).await?; + Ok(contract) +} + +#[tokio::test] +async fn test_counter_contract() -> eyre::Result<()> { + let worker = near_workspaces::sandbox().await?; + let counter_contract = deploy_counter_contract(&worker).await?; + + let _res = counter_contract + .call("new") + .transact() + .await? + .into_result()?; + + let _res = counter_contract + .call("increment") + .transact() + .await? + .into_result()?; + + let counter_value: u32 = counter_contract.view("get_count").await?.json()?; + + assert_eq!(counter_value, 1, "Counter should be incremented once"); + + Ok(()) +} diff --git a/crates/context/config/src/types.rs b/crates/context/config/src/types.rs index 073295bff..dbaefee36 100644 --- a/crates/context/config/src/types.rs +++ b/crates/context/config/src/types.rs @@ -53,7 +53,9 @@ impl<'a> Application<'a> { } } -#[derive(Eq, Ord, Copy, Debug, Clone, PartialEq, PartialOrd, BorshSerialize, BorshDeserialize)] +#[derive( + Eq, Ord, Copy, Debug, Clone, PartialEq, PartialOrd, BorshSerialize, BorshDeserialize, Hash, +)] pub struct Identity([u8; 32]); impl ReprBytes for Identity { @@ -74,7 +76,9 @@ impl ReprBytes for Identity { } } -#[derive(Eq, Ord, Copy, Debug, Clone, PartialEq, PartialOrd, BorshSerialize, BorshDeserialize)] +#[derive( + Eq, Ord, Copy, Debug, Clone, PartialEq, PartialOrd, BorshSerialize, BorshDeserialize, Hash, +)] pub struct SignerId(Identity); impl ReprBytes for SignerId { diff --git a/scripts/test.sh b/scripts/test.sh index 14ade0048..35438717e 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -11,6 +11,7 @@ cd "$(dirname $0)" # Prepare contracts ../contracts/registry/build.sh ../contracts/context-config/build.sh +../contracts/proxy-lib/build-test-deps.sh # Run cargo test cargo test From 0cc8b3d2aaff99574b8ad7909197f84951f62e5a Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 31 Oct 2024 17:23:40 +0000 Subject: [PATCH 46/75] fix: Fixed linting warnings (#910) --- Cargo.lock | 4 +-- crates/config/src/lib.rs | 18 ++++++++----- crates/context/Cargo.toml | 1 - crates/context/config/src/client/config.rs | 13 +++++----- crates/context/src/lib.rs | 11 ++++---- crates/meroctl/src/cli.rs | 18 ++++++------- crates/meroctl/src/cli/app.rs | 2 +- crates/meroctl/src/cli/app/list.rs | 2 +- crates/meroctl/src/cli/context/create.rs | 18 ++++++------- crates/meroctl/src/cli/context/get.rs | 19 +++++++------- crates/meroctl/src/cli/context/list.rs | 2 +- crates/meroctl/src/cli/context/watch.rs | 10 +++---- crates/meroctl/src/common.rs | 2 +- crates/meroctl/src/main.rs | 4 +-- crates/meroctl/src/output.rs | 8 +++--- crates/merod/Cargo.toml | 1 - crates/merod/src/cli/config.rs | 4 +-- crates/merod/src/cli/init.rs | 3 --- crates/merod/src/cli/relay.rs | 7 +++-- crates/network/src/config.rs | 2 +- crates/network/src/discovery/state.rs | 20 ++++++++------ crates/node/src/catchup.rs | 5 ++-- crates/node/src/catchup/blobs.rs | 8 +++--- crates/node/src/interactive_cli.rs | 4 +-- .../node/src/interactive_cli/applications.rs | 3 +-- crates/node/src/interactive_cli/call.rs | 26 +++++++++---------- crates/node/src/interactive_cli/context.rs | 7 ++--- crates/node/src/interactive_cli/identity.rs | 5 ++-- crates/node/src/interactive_cli/state.rs | 2 +- crates/node/src/interactive_cli/store.rs | 1 - crates/sdk/src/lib.rs | 4 ++- crates/sdk/src/types.rs | 15 ++++++----- crates/server-primitives/src/admin.rs | 1 + .../applications/uninstall_application.rs | 2 +- .../admin/handlers/context/delete_context.rs | 2 +- .../context/update_context_application.rs | 2 +- crates/server/src/admin/service.rs | 2 +- crates/storage-macros/src/lib.rs | 4 +-- crates/storage/src/env.rs | 3 ++- crates/storage/src/types.rs | 18 ++++++------- crates/store/src/key.rs | 6 +++++ crates/store/src/layer/temporal.rs | 1 + 42 files changed, 151 insertions(+), 139 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7cd06469b..047ba985c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -840,7 +840,7 @@ checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ "bitcoin_hashes", "rand 0.8.5", - "rand_core 0.4.2", + "rand_core 0.6.4", "serde", "unicode-normalization", ] @@ -1138,7 +1138,6 @@ dependencies = [ "calimero-primitives", "calimero-store", "camino", - "clap", "ed25519-dalek 2.1.1", "eyre", "futures-util", @@ -5272,7 +5271,6 @@ dependencies = [ "near-crypto 0.26.0", "rand 0.8.5", "starknet", - "starknet-crypto", "tokio", "toml_edit 0.22.20", "tracing", diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 398ac8dc8..6bb7fb4bb 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -48,7 +48,8 @@ pub struct NetworkConfig { } impl NetworkConfig { - pub fn new( + #[must_use] + pub const fn new( swarm: SwarmConfig, bootstrap: BootstrapConfig, discovery: DiscoveryConfig, @@ -81,7 +82,8 @@ pub struct ServerConfig { } impl ServerConfig { - pub fn new( + #[must_use] + pub const fn new( listen: Vec, admin: Option, jsonrpc: Option, @@ -103,7 +105,8 @@ pub struct DataStoreConfig { } impl DataStoreConfig { - pub fn new(path: Utf8PathBuf) -> Self { + #[must_use] + pub const fn new(path: Utf8PathBuf) -> Self { Self { path } } } @@ -115,13 +118,15 @@ pub struct BlobStoreConfig { } impl BlobStoreConfig { - pub fn new(path: Utf8PathBuf) -> Self { + #[must_use] + pub const fn new(path: Utf8PathBuf) -> Self { Self { path } } } impl ConfigFile { - pub fn new( + #[must_use] + pub const fn new( identity: libp2p_identity::Keypair, datastore: DataStoreConfig, blobstore: BlobStoreConfig, @@ -130,13 +135,14 @@ impl ConfigFile { ) -> Self { Self { identity, + network, datastore, blobstore, context, - network, } } + #[must_use] pub fn exists(dir: &Utf8Path) -> bool { dir.join(CONFIG_FILE).is_file() } diff --git a/crates/context/Cargo.toml b/crates/context/Cargo.toml index 95abc9075..86e8d3d17 100644 --- a/crates/context/Cargo.toml +++ b/crates/context/Cargo.toml @@ -8,7 +8,6 @@ license.workspace = true [dependencies] camino = { workspace = true, features = ["serde1"] } -clap.workspace = true ed25519-dalek.workspace = true eyre.workspace = true futures-util.workspace = true diff --git a/crates/context/config/src/client/config.rs b/crates/context/config/src/client/config.rs index f2dbe4396..3f9d539e9 100644 --- a/crates/context/config/src/client/config.rs +++ b/crates/context/config/src/client/config.rs @@ -1,6 +1,6 @@ #![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] +use core::str::FromStr; use std::collections::BTreeMap; -use std::str::FromStr; use serde::{Deserialize, Serialize}; use thiserror::Error; @@ -23,10 +23,11 @@ pub enum Protocol { } impl Protocol { - pub fn as_str(&self) -> &'static str { + #[must_use] + pub const fn as_str(&self) -> &'static str { match self { - Protocol::Near => "near", - Protocol::Starknet => "starknet", + Self::Near => "near", + Self::Starknet => "starknet", } } } @@ -42,8 +43,8 @@ impl FromStr for Protocol { fn from_str(input: &str) -> Result { match input.to_lowercase().as_str() { - "near" => Ok(Protocol::Near), - "starknet" => Ok(Protocol::Starknet), + "near" => Ok(Self::Near), + "starknet" => Ok(Self::Starknet), _ => Err(ProtocolParseError { _priv: () }), } } diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 242bc5cb7..6fa09d974 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -1,7 +1,7 @@ -use std::borrow::Cow; +use core::error::Error; +use core::str::FromStr; use std::collections::HashSet; use std::io::Error as IoError; -use std::str::FromStr; use std::sync::Arc; use calimero_blobstore::{Blob, BlobManager, Size}; @@ -501,11 +501,11 @@ impl ContextManager { end: Option<[u8; N]>, ) -> EyreResult<()> where - K: FromKeyParts, + K: FromKeyParts, { let expected_length = Key::::len(); - if context_id.len() + N != expected_length { + if context_id.len().saturating_add(N) != expected_length { bail!( "key length mismatch, expected: {}, got: {}", Key::::len(), @@ -795,7 +795,6 @@ impl ContextManager { self.install_application(blob_id, size, &uri, metadata) } - #[expect(clippy::similar_names, reason = "Different enough")] pub async fn install_application_from_stream( &self, expected_size: u64, @@ -931,6 +930,6 @@ impl ContextManager { } pub fn is_application_blob_installed(&self, blob_id: BlobId) -> EyreResult { - Ok(self.blob_manager.has(blob_id)?) + self.blob_manager.has(blob_id) } } diff --git a/crates/meroctl/src/cli.rs b/crates/meroctl/src/cli.rs index 87351983d..a8ef120a6 100644 --- a/crates/meroctl/src/cli.rs +++ b/crates/meroctl/src/cli.rs @@ -70,8 +70,8 @@ pub struct Environment { } impl Environment { - pub fn new(args: RootArgs, output: Output) -> Self { - Environment { args, output } + pub const fn new(args: RootArgs, output: Output) -> Self { + Self { args, output } } } @@ -95,7 +95,7 @@ impl RootCommand { return Err(err); } - return Ok(()); + Ok(()) } } @@ -112,18 +112,18 @@ pub enum CliError { ), } -impl Into for CliError { - fn into(self) -> ExitCode { - match self { - CliError::ApiError(_) => ExitCode::from(101), - CliError::Other(_) => ExitCode::FAILURE, +impl From for ExitCode { + fn from(error: CliError) -> Self { + match error { + CliError::ApiError(_) => Self::from(101), + CliError::Other(_) => Self::FAILURE, } } } impl Report for CliError { fn report(&self) { - println!("{}", self); + println!("{self}"); } } diff --git a/crates/meroctl/src/cli/app.rs b/crates/meroctl/src/cli/app.rs index d3657f4e8..3878e32df 100644 --- a/crates/meroctl/src/cli/app.rs +++ b/crates/meroctl/src/cli/app.rs @@ -48,7 +48,7 @@ impl Report for Application { println!("source: {}", self.source); println!("metadata:"); for item in &self.metadata { - println!(" {:?}", item); + println!(" {item:?}"); } } } diff --git a/crates/meroctl/src/cli/app/list.rs b/crates/meroctl/src/cli/app/list.rs index 7bd35e760..f20728d7f 100644 --- a/crates/meroctl/src/cli/app/list.rs +++ b/crates/meroctl/src/cli/app/list.rs @@ -13,7 +13,7 @@ pub struct ListCommand; impl Report for ListApplicationsResponse { fn report(&self) { - for application in self.data.apps.iter() { + for application in &self.data.apps { application.report(); } } diff --git a/crates/meroctl/src/cli/context/create.rs b/crates/meroctl/src/cli/context/create.rs index e622f8d44..31403818c 100644 --- a/crates/meroctl/src/cli/context/create.rs +++ b/crates/meroctl/src/cli/context/create.rs @@ -88,9 +88,9 @@ impl CreateCommand { params, } => { let _ = create_context( - &environment, + environment, &client, - &multiaddr, + multiaddr, context_seed, app_id, params, @@ -109,9 +109,9 @@ impl CreateCommand { let metadata = metadata.map(String::into_bytes); let application_id = install_app( - &environment, + environment, &client, - &multiaddr, + multiaddr, path.clone(), metadata.clone(), &config.identity, @@ -119,9 +119,9 @@ impl CreateCommand { .await?; let context_id = create_context( - &environment, + environment, &client, - &multiaddr, + multiaddr, context_seed, application_id, params, @@ -130,9 +130,9 @@ impl CreateCommand { .await?; watch_app_and_update_context( - &environment, + environment, &client, - &multiaddr, + multiaddr, context_id, path, metadata, @@ -197,7 +197,7 @@ async fn watch_app_and_update_context( environment .output - .write(&InfoLine(&format!("Watching for changes to {}", path))); + .write(&InfoLine(&format!("Watching for changes to {path}"))); while let Some(event) = rx.recv().await { let event = match event { diff --git a/crates/meroctl/src/cli/context/get.rs b/crates/meroctl/src/cli/context/get.rs index 7930e153d..82f594c9d 100644 --- a/crates/meroctl/src/cli/context/get.rs +++ b/crates/meroctl/src/cli/context/get.rs @@ -35,7 +35,7 @@ pub enum GetRequest { impl Report for GetContextResponse { fn report(&self) { - self.data.report() + self.data.report(); } } @@ -50,19 +50,19 @@ impl Report for GetContextUsersResponse { impl Report for GetContextClientKeysResponse { fn report(&self) { - println!("Client Keys: {:?}", self) + println!("Client Keys: {self:?}"); } } impl Report for GetContextStorageResponse { fn report(&self) { - println!("Storage: {:?}", self) + println!("Storage: {self:?}"); } } impl Report for GetContextIdentitiesResponse { fn report(&self) { - println!("Identities: {:?}", self) + println!("Identities: {self:?}"); } } @@ -74,23 +74,23 @@ impl GetCommand { match self.method { GetRequest::Context => { - self.get_context(&environment, &multiaddr, &client, &config.identity) + self.get_context(environment, multiaddr, &client, &config.identity) .await } GetRequest::Users => { - self.get_users(&environment, &multiaddr, &client, &config.identity) + self.get_users(environment, multiaddr, &client, &config.identity) .await } GetRequest::ClientKeys => { - self.get_client_keys(&environment, &multiaddr, &client, &config.identity) + self.get_client_keys(environment, multiaddr, &client, &config.identity) .await } GetRequest::Storage => { - self.get_storage(&environment, &multiaddr, &client, &config.identity) + self.get_storage(environment, multiaddr, &client, &config.identity) .await } GetRequest::Identities => { - self.get_identities(&environment, &multiaddr, &client, &config.identity) + self.get_identities(environment, multiaddr, &client, &config.identity) .await } } @@ -171,7 +171,6 @@ impl GetCommand { .await } - #[expect(clippy::print_stdout, reason = "Acceptable for CLI")] async fn make_request( &self, environment: &Environment, diff --git a/crates/meroctl/src/cli/context/list.rs b/crates/meroctl/src/cli/context/list.rs index 6ec7d9f2c..8406668b0 100644 --- a/crates/meroctl/src/cli/context/list.rs +++ b/crates/meroctl/src/cli/context/list.rs @@ -13,7 +13,7 @@ pub struct ListCommand; impl Report for GetContextsResponse { fn report(&self) { - for context in self.data.contexts.iter() { + for context in &self.data.contexts { context.report(); } } diff --git a/crates/meroctl/src/cli/context/watch.rs b/crates/meroctl/src/cli/context/watch.rs index c64b48d56..e9f8d230a 100644 --- a/crates/meroctl/src/cli/context/watch.rs +++ b/crates/meroctl/src/cli/context/watch.rs @@ -31,7 +31,7 @@ impl WatchCommand { let mut url = multiaddr_to_url(fetch_multiaddr(&config)?, "ws")?; url.set_scheme("ws") - .map_err(|_| eyre::eyre!("Failed to set URL scheme"))?; + .map_err(|()| eyre::eyre!("Failed to set URL scheme"))?; environment .output @@ -55,9 +55,9 @@ impl WatchCommand { "Subscribed to context {}", self.context_id ))); - environment.output.write(&InfoLine(&format!( - "Streaming events (press Ctrl+C to stop):" - ))); + environment + .output + .write(&InfoLine("Streaming events (press Ctrl+C to stop):")); while let Some(message) = read.next().await { match message { @@ -67,7 +67,7 @@ impl WatchCommand { environment.output.write(&response); } } - Err(e) => eprintln!("Error receiving message: {}", e), + Err(err) => eprintln!("Error receiving message: {err}"), } } diff --git a/crates/meroctl/src/common.rs b/crates/meroctl/src/common.rs index 7694f3663..b21ac4aa6 100644 --- a/crates/meroctl/src/common.rs +++ b/crates/meroctl/src/common.rs @@ -70,7 +70,7 @@ where let result = response.json::().await?; - return Ok(result); + Ok(result) } // pub async fn do_request( // client: &Client, diff --git a/crates/meroctl/src/main.rs b/crates/meroctl/src/main.rs index 1021a77e0..3c659dc91 100644 --- a/crates/meroctl/src/main.rs +++ b/crates/meroctl/src/main.rs @@ -13,14 +13,14 @@ mod output; #[tokio::main] async fn main() -> ExitCode { if let Err(err) = color_eyre::install() { - eprintln!("Failed to install color_eyre: {}", err); + eprintln!("Failed to install color_eyre: {err}"); return ExitCode::FAILURE; } let command = RootCommand::parse(); match command.run().await { - Ok(_) => ExitCode::SUCCESS, + Ok(()) => ExitCode::SUCCESS, Err(err) => err.into(), } } diff --git a/crates/meroctl/src/output.rs b/crates/meroctl/src/output.rs index a9ca355ca..ba2d13355 100644 --- a/crates/meroctl/src/output.rs +++ b/crates/meroctl/src/output.rs @@ -19,8 +19,8 @@ pub trait Report { } impl Output { - pub fn new(output_type: Format) -> Self { - Output { + pub const fn new(output_type: Format) -> Self { + Self { format: output_type, } } @@ -28,8 +28,8 @@ impl Output { pub fn write(&self, value: &T) { match self.format { Format::Json => match serde_json::to_string(&value) { - Ok(json) => println!("{}", json), - Err(e) => eprintln!("Failed to serialize to JSON: {}", e), + Ok(json) => println!("{json}"), + Err(err) => eprintln!("Failed to serialize to JSON: {err}"), }, Format::PlainText => value.report(), } diff --git a/crates/merod/Cargo.toml b/crates/merod/Cargo.toml index f448b4551..21b6e2917 100644 --- a/crates/merod/Cargo.toml +++ b/crates/merod/Cargo.toml @@ -23,7 +23,6 @@ multiaddr.workspace = true near-crypto.workspace = true rand.workspace = true starknet.workspace = true -starknet-crypto.workspace = true tokio = { workspace = true, features = ["io-std", "macros"] } toml_edit.workspace = true tracing.workspace = true diff --git a/crates/merod/src/cli/config.rs b/crates/merod/src/cli/config.rs index efed2890c..26d55cab0 100644 --- a/crates/merod/src/cli/config.rs +++ b/crates/merod/src/cli/config.rs @@ -24,8 +24,8 @@ pub enum ConfigProtocol { impl From for CoreProtocol { fn from(protocol: ConfigProtocol) -> Self { match protocol { - ConfigProtocol::Near => CoreProtocol::Near, - ConfigProtocol::Starknet => CoreProtocol::Starknet, + ConfigProtocol::Near => Self::Near, + ConfigProtocol::Starknet => Self::Starknet, } } } diff --git a/crates/merod/src/cli/init.rs b/crates/merod/src/cli/init.rs index ff06c12da..76c29c400 100644 --- a/crates/merod/src/cli/init.rs +++ b/crates/merod/src/cli/init.rs @@ -225,7 +225,6 @@ impl InitCommand { network: match self.protocol { ConfigProtocol::Near => "testnet".into(), ConfigProtocol::Starknet => "sepolia".into(), - _ => "unknown".into(), }, protocol: self.protocol.into(), contract_id: match self.protocol { @@ -234,7 +233,6 @@ impl InitCommand { "0x1ee8182d5dd595be9797ccae1488bdf84b19a0f05a93ce6148b0efae04f4568" .parse()? } - _ => "unknown.contract.id".parse()?, }, }, }, @@ -310,6 +308,5 @@ fn generate_local_signer( }), }) } - _ => todo!(), } } diff --git a/crates/merod/src/cli/relay.rs b/crates/merod/src/cli/relay.rs index ebaae8905..f43b8e5fa 100644 --- a/crates/merod/src/cli/relay.rs +++ b/crates/merod/src/cli/relay.rs @@ -93,10 +93,9 @@ impl RelayCommand { .iter() .map(|(network, config)| { let (account_id, access_key) = match &config.credentials { - Credentials::Starknet(credentials) => ( - credentials.account_id.clone(), - credentials.secret_key.clone(), - ), + Credentials::Starknet(credentials) => { + (credentials.account_id, credentials.secret_key) + } Credentials::Near(_) => bail!("Expected Starknet credentials."), _ => bail!("Expected NEAR credentials."), }; diff --git a/crates/network/src/config.rs b/crates/network/src/config.rs index 41c4ab59f..e912a5b21 100644 --- a/crates/network/src/config.rs +++ b/crates/network/src/config.rs @@ -156,7 +156,7 @@ pub struct RelayConfig { impl RelayConfig { #[must_use] - pub fn new(registrations_limit: usize) -> Self { + pub const fn new(registrations_limit: usize) -> Self { Self { registrations_limit, } diff --git a/crates/network/src/discovery/state.rs b/crates/network/src/discovery/state.rs index 07a1b25be..39f9c60b3 100644 --- a/crates/network/src/discovery/state.rs +++ b/crates/network/src/discovery/state.rs @@ -167,40 +167,44 @@ impl DiscoveryState { self.rendezvous_index.contains(peer_id) } + #[expect( + clippy::arithmetic_side_effects, + reason = "Cannot use saturating_add() due to non-specific integer type" + )] pub(crate) fn is_rendezvous_registration_required(&self, max: usize) -> bool { let sum = self .get_rendezvous_peer_ids() .filter_map(|peer_id| self.get_peer_info(&peer_id)) .fold(0, |acc, peer_info| { - if let Some(rendezvous_info) = peer_info.rendezvous() { + peer_info.rendezvous().map_or(acc, |rendezvous_info| { match rendezvous_info.registration_status() { RendezvousRegistrationStatus::Requested | RendezvousRegistrationStatus::Registered => acc + 1, RendezvousRegistrationStatus::Discovered | RendezvousRegistrationStatus::Expired => acc, } - } else { - acc - } + }) }); sum < max } + #[expect( + clippy::arithmetic_side_effects, + reason = "Cannot use saturating_add() due to non-specific integer type" + )] pub(crate) fn is_relay_reservation_required(&self, max: usize) -> bool { let sum = self .get_relay_peer_ids() .filter_map(|peer_id| self.get_peer_info(&peer_id)) .fold(0, |acc, peer_info| { - if let Some(rendezvous_info) = peer_info.relay() { + peer_info.relay().map_or(acc, |rendezvous_info| { match rendezvous_info.reservation_status() { RelayReservationStatus::Accepted | RelayReservationStatus::Requested => { acc + 1 } RelayReservationStatus::Discovered | RelayReservationStatus::Expired => acc, } - } else { - acc - } + }) }); sum < max } diff --git a/crates/node/src/catchup.rs b/crates/node/src/catchup.rs index cfe7723af..8ca5df7cf 100644 --- a/crates/node/src/catchup.rs +++ b/crates/node/src/catchup.rs @@ -80,7 +80,6 @@ impl Node { blob_sender.flush().await } - #[expect(clippy::too_many_lines, reason = "TODO: Will be refactored")] async fn handle_action_catchup( &self, request: CatchupSyncRequest, @@ -180,7 +179,7 @@ impl Node { match source.scheme() { "http" | "https" => { info!("Skipping blob catchup for HTTP/HTTPS source"); - return Ok(()); + Ok(()) } _ => { self.perform_blob_stream_catchup(chosen_peer, latest_application) @@ -221,7 +220,7 @@ impl Node { )); } - current_sequential_id += 1; + current_sequential_id = current_sequential_id.saturating_add(1); Ok(chunk.chunk) }) diff --git a/crates/node/src/catchup/blobs.rs b/crates/node/src/catchup/blobs.rs index 73b7787ca..8e21b4b7e 100644 --- a/crates/node/src/catchup/blobs.rs +++ b/crates/node/src/catchup/blobs.rs @@ -16,7 +16,7 @@ pub struct ApplicationBlobChunkSender { } impl ApplicationBlobChunkSender { - #[allow(clippy::integer_division, reason = "TODO")] + #[expect(clippy::integer_division, reason = "TODO")] pub(crate) fn new(stream: Box) -> Self { // Stream messages are encoded with length delimited codec. // Calculate batch size based on the maximum message size and blob chunk size. @@ -32,9 +32,9 @@ impl ApplicationBlobChunkSender { } pub(crate) async fn send(&mut self, chunk: &[u8]) -> EyreResult<()> { - self.batch.extend_from_slice(&chunk); + self.batch.extend_from_slice(chunk); - if self.batch.len() >= self.batch_size * BLOB_CHUNK_SIZE { + if self.batch.len() >= self.batch_size.saturating_mul(BLOB_CHUNK_SIZE) { let message = to_json_vec(&CatchupStreamMessage::ApplicationBlobChunk( CatchupApplicationBlobChunk { sequential_id: self.sequential_id, @@ -44,7 +44,7 @@ impl ApplicationBlobChunkSender { self.stream.send(Message::new(message)).await?; - self.sequential_id += 1; + self.sequential_id = self.sequential_id.saturating_add(1); } Ok(()) diff --git a/crates/node/src/interactive_cli.rs b/crates/node/src/interactive_cli.rs index b4a90c63b..2d5bdebac 100644 --- a/crates/node/src/interactive_cli.rs +++ b/crates/node/src/interactive_cli.rs @@ -42,7 +42,7 @@ pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { let command = match RootCommand::try_parse_from(args) { Ok(command) => command, Err(err) => { - println!("Failed to parse command: {}", err); + println!("Failed to parse command: {err}"); eyre::bail!("Failed to parse command"); } }; @@ -58,7 +58,7 @@ pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { }; if let Err(err) = result { - println!("Error running command: {}", err); + println!("Error running command: {err}"); eyre::bail!("Failed to parse command"); } diff --git a/crates/node/src/interactive_cli/applications.rs b/crates/node/src/interactive_cli/applications.rs index ae67fcb0e..299fcf94c 100644 --- a/crates/node/src/interactive_cli/applications.rs +++ b/crates/node/src/interactive_cli/applications.rs @@ -47,7 +47,7 @@ impl ApplicationCommand { } InstallType::File => { let path = Utf8PathBuf::from(resource); - if let Some(application_id) = node + if let Ok(application_id) = node .ctx_manager .install_application_from_path( path, @@ -56,7 +56,6 @@ impl ApplicationCommand { .unwrap_or_default(), ) .await - .ok() { application_id } else { diff --git a/crates/node/src/interactive_cli/call.rs b/crates/node/src/interactive_cli/call.rs index e36ef301b..f47d0a5df 100644 --- a/crates/node/src/interactive_cli/call.rs +++ b/crates/node/src/interactive_cli/call.rs @@ -26,7 +26,7 @@ impl CallCommand { let outcome_result = node .handle_call( context.id, - self.method.to_owned(), + self.method.clone(), serde_json::to_vec(&self.payload)?, self.executor_key, ) @@ -37,13 +37,13 @@ impl CallCommand { match outcome.returns { Ok(result) => match result { Some(result) => { - println!("{} return value:", ind); + println!("{ind} return value:"); #[expect(clippy::option_if_let_else, reason = "clearer here")] let result = if let Ok(value) = serde_json::from_slice::(&result) { format!( "(json): {}", - format!("{:#}", value) + format!("{value:#}") .lines() .map(|line| line.cyan().to_string()) .collect::>() @@ -54,35 +54,35 @@ impl CallCommand { }; for line in result.lines() { - println!("{} > {}", ind, line); + println!("{ind} > {line}"); } } - None => println!("{} (no return value)", ind), + None => println!("{ind} (no return value)"), }, Err(err) => { - let err = format!("{:#?}", err); + let err = format!("{err:#?}"); - println!("{} error:", ind); + println!("{ind} error:"); for line in err.lines() { - println!("{} > {}", ind, line.yellow()); + println!("{ind} > {}", line.yellow()); } } } if !outcome.logs.is_empty() { - println!("{} logs:", ind); + println!("{ind} logs:"); for log in outcome.logs { - println!("{} > {}", ind, log.cyan()); + println!("{ind} > {}", log.cyan()); } } } Err(err) => { - let err = format!("{:#?}", err); + let err = format!("{err:#?}"); - println!("{} error:", ind); + println!("{ind} error:"); for line in err.lines() { - println!("{} > {}", ind, line.yellow()); + println!("{ind} > {}", line.yellow()); } } } diff --git a/crates/node/src/interactive_cli/context.rs b/crates/node/src/interactive_cli/context.rs index bbab4fa08..7e3a11d24 100644 --- a/crates/node/src/interactive_cli/context.rs +++ b/crates/node/src/interactive_cli/context.rs @@ -1,5 +1,5 @@ +use core::mem::replace; use core::str::FromStr; -use std::mem::replace; use calimero_primitives::hash::Hash; use calimero_store::key::ContextMeta as ContextMetaKey; @@ -42,6 +42,7 @@ enum Commands { } impl ContextCommand { + #[expect(clippy::similar_names, reason = "Acceptable here")] pub async fn run(self, node: &Node) -> Result<()> { let ind = ">>".blue(); @@ -125,7 +126,7 @@ impl ContextCommand { None => break 'infer (None, params), _ => {} }; - println!("{ind} Invalid context seed: {}", context_seed_clone); + println!("{ind} Invalid context seed: {context_seed_clone}"); return Err(eyre::eyre!("Invalid context seed")); }; @@ -147,7 +148,7 @@ impl ContextCommand { println!("{ind} Created context {context_id} with identity {identity}"); return; } - Ok(Err(err)) => err.into(), + Ok(Err(err)) => err, Err(err) => err.into(), }; diff --git a/crates/node/src/interactive_cli/identity.rs b/crates/node/src/interactive_cli/identity.rs index fa4abb8e3..ea2064d7b 100644 --- a/crates/node/src/interactive_cli/identity.rs +++ b/crates/node/src/interactive_cli/identity.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use core::str::FromStr; use calimero_primitives::context::ContextId; use calimero_store::key::ContextIdentity as ContextIdentityKey; @@ -30,7 +30,6 @@ impl IdentityCommand { let handle = node.store.handle(); let mut iter = handle.iter::()?; - let context_id = ContextId::from(context_id); let first = 'first: { let Some(k) = iter .seek(ContextIdentityKey::new(context_id, [0; 32].into())) @@ -62,7 +61,7 @@ impl IdentityCommand { } } Err(_) => { - println!("Invalid context ID: {}", context_id); + println!("Invalid context ID: {context_id}"); } } } diff --git a/crates/node/src/interactive_cli/state.rs b/crates/node/src/interactive_cli/state.rs index c3c5e25da..074f0e2af 100644 --- a/crates/node/src/interactive_cli/state.rs +++ b/crates/node/src/interactive_cli/state.rs @@ -26,7 +26,7 @@ impl StateCommand { let first = 'first: { let Some(k) = iter - .seek(ContextStateKey::new(context_id, [0; 32].into())) + .seek(ContextStateKey::new(context_id, [0; 32])) .transpose() else { break 'first None; diff --git a/crates/node/src/interactive_cli/store.rs b/crates/node/src/interactive_cli/store.rs index 1a06c20b6..c20dbc8d5 100644 --- a/crates/node/src/interactive_cli/store.rs +++ b/crates/node/src/interactive_cli/store.rs @@ -7,7 +7,6 @@ use owo_colors::OwoColorize; use crate::Node; #[derive(Debug, Parser)] -#[allow(missing_copy_implementations, reason = "TODO")] #[non_exhaustive] pub struct StoreCommand; diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index fcdf4d07f..b8f3345c2 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -7,7 +7,9 @@ pub mod state; mod sys; pub mod types; -pub type Result = std::result::Result; +use core::result::Result as CoreResult; + +pub type Result = CoreResult; pub mod app { pub use calimero_sdk_macros::{destroy, emit, event, init, logic, state}; diff --git a/crates/sdk/src/types.rs b/crates/sdk/src/types.rs index 849941573..b3bea782e 100644 --- a/crates/sdk/src/types.rs +++ b/crates/sdk/src/types.rs @@ -1,16 +1,19 @@ -use serde::Serialize; +use core::error::Error as CoreError; + +use serde::{Serialize, Serializer}; #[derive(Debug, Serialize)] -pub struct Error(#[serde(serialize_with = "error_string")] Box); +pub struct Error(#[serde(serialize_with = "error_string")] Box); -fn error_string(error: &Box, serializer: S) -> Result +fn error_string(error: &Box, serializer: S) -> Result where - S: serde::Serializer, + S: Serializer, { serializer.serialize_str(&error.to_string()) } impl Error { + #[must_use] pub fn msg(s: &str) -> Self { Self(s.to_owned().into()) } @@ -18,9 +21,9 @@ impl Error { impl From for Error where - T: std::error::Error + 'static, + T: CoreError + 'static, { fn from(error: T) -> Self { - Error(Box::new(error)) + Self(Box::new(error)) } } diff --git a/crates/server-primitives/src/admin.rs b/crates/server-primitives/src/admin.rs index 5857f7096..b8b036b27 100644 --- a/crates/server-primitives/src/admin.rs +++ b/crates/server-primitives/src/admin.rs @@ -241,6 +241,7 @@ pub struct InviteToContextRequest { } impl InviteToContextRequest { + #[expect(clippy::similar_names, reason = "Acceptable here")] #[must_use] pub const fn new(context_id: ContextId, inviter_id: PublicKey, invitee_id: PublicKey) -> Self { Self { diff --git a/crates/server/src/admin/handlers/applications/uninstall_application.rs b/crates/server/src/admin/handlers/applications/uninstall_application.rs index 5bc551a16..60fee4f42 100644 --- a/crates/server/src/admin/handlers/applications/uninstall_application.rs +++ b/crates/server/src/admin/handlers/applications/uninstall_application.rs @@ -15,7 +15,7 @@ pub async fn handler( Json(req): Json, ) -> impl IntoResponse { match state.ctx_manager.uninstall_application(req.application_id) { - Ok(_) => ApiResponse { + Ok(()) => ApiResponse { payload: UninstallApplicationResponse::new(req.application_id), } .into_response(), diff --git a/crates/server/src/admin/handlers/context/delete_context.rs b/crates/server/src/admin/handlers/context/delete_context.rs index 8bf6f320b..63b5c5cae 100644 --- a/crates/server/src/admin/handlers/context/delete_context.rs +++ b/crates/server/src/admin/handlers/context/delete_context.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use core::str::FromStr; use std::sync::Arc; use axum::extract::Path; diff --git a/crates/server/src/admin/handlers/context/update_context_application.rs b/crates/server/src/admin/handlers/context/update_context_application.rs index 523cda1f3..8b33e92c1 100644 --- a/crates/server/src/admin/handlers/context/update_context_application.rs +++ b/crates/server/src/admin/handlers/context/update_context_application.rs @@ -1,4 +1,4 @@ -use std::str::FromStr; +use core::str::FromStr; use std::sync::Arc; use axum::extract::Path; diff --git a/crates/server/src/admin/service.rs b/crates/server/src/admin/service.rs index 832ea4bec..7445e867d 100644 --- a/crates/server/src/admin/service.rs +++ b/crates/server/src/admin/service.rs @@ -255,7 +255,7 @@ async fn serve_embedded_file(uri: Uri) -> Result .trim_start_matches('/'); // Use "index.html" for empty paths (root requests) - let path = if path.is_empty() { "index.html" } else { &path }; + let path = if path.is_empty() { "index.html" } else { path }; // Attempt to serve the requested file if let Some(file) = NodeUiStaticFiles::get(path) { diff --git a/crates/storage-macros/src/lib.rs b/crates/storage-macros/src/lib.rs index 6d33ac01b..4cd1edcfa 100644 --- a/crates/storage-macros/src/lib.rs +++ b/crates/storage-macros/src/lib.rs @@ -334,7 +334,7 @@ pub fn atomic_unit_derive(input: TokenStream) -> TokenStream { } }; - let mut local_where_clause = where_clause.clone(); + let mut local_where_clause = where_clause; for ty in input.generics.type_params() { let ident = &ty.ident; @@ -547,7 +547,7 @@ pub fn collection_derive(input: TokenStream) -> TokenStream { } }; - let mut collection_where_clause = where_clause.clone(); + let mut collection_where_clause = where_clause; for ty in input.generics.type_params() { let ident = &ty.ident; diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index b5e8ccd9f..be93e0174 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -27,6 +27,7 @@ pub fn send_action(action: &Action) { /// Commits the root hash to the runtime. /// This function should be called after the root hash has been updated. /// +#[expect(clippy::missing_const_for_fn, reason = "Cannot be const here")] pub fn commit_root(root_hash: &[u8; 32]) { imp::commit_root(root_hash); } @@ -156,7 +157,7 @@ mod mocked { /// Commits the root hash to the runtime. /// This function should be called after the root hash has been updated. - pub(super) fn commit_root(_root_hash: &[u8; 32]) { + pub(super) const fn commit_root(_root_hash: &[u8; 32]) { // Do nothing. } diff --git a/crates/storage/src/types.rs b/crates/storage/src/types.rs index a576f04df..bfe9082fb 100644 --- a/crates/storage/src/types.rs +++ b/crates/storage/src/types.rs @@ -1,7 +1,7 @@ //! High-level data structures for storage. -use std::borrow::Borrow; -use std::marker::PhantomData; +use core::borrow::Borrow; +use core::marker::PhantomData; use borsh::{BorshDeserialize, BorshSerialize}; use thiserror::Error; @@ -73,7 +73,7 @@ impl storage: Element::new(path), }; - let _ = Interface::save(&mut this)?; + _ = Interface::save(&mut this)?; Ok(this) } @@ -98,7 +98,7 @@ impl // fixme! ideally, the Id should be defined as hash(concat(map_id, key)) // fixme! which will save on map-wide lookups, getting the item directly - let _ = Interface::add_child_to( + _ = Interface::add_child_to( self.storage.id(), &mut self.entries, &mut Entry { @@ -174,13 +174,13 @@ impl { let entries = Interface::children_of(self.id(), &self.entries)?; - let entry = entries.into_iter().find(|entry| entry.key.borrow() == key); + let entry_opt = entries.into_iter().find(|entry| entry.key.borrow() == key); - if let Some(entry) = &entry { - let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + if let Some(ref entry) = entry_opt { + _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; } - Ok(entry.map(|entry| entry.value)) + Ok(entry_opt.map(|entry| entry.value)) } /// Clear the map, removing all entries. @@ -195,7 +195,7 @@ impl let entries = Interface::children_of(self.id(), &self.entries)?; for entry in entries { - let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; } Ok(()) diff --git a/crates/store/src/key.rs b/crates/store/src/key.rs index 6c0af4b04..564716f98 100644 --- a/crates/store/src/key.rs +++ b/crates/store/src/key.rs @@ -76,11 +76,17 @@ impl Key { self.as_bytes().into() } + #[must_use] pub const fn len() -> usize { GenericArray::::len() } + #[must_use] pub fn try_from_slice(slice: &[u8]) -> Option { + #[expect( + clippy::use_self, + reason = "Needed here in order to specify type parameter" + )] (slice.len() == Key::::len()).then_some(())?; let mut key = GenericArray::default(); diff --git a/crates/store/src/layer/temporal.rs b/crates/store/src/layer/temporal.rs index a467ae82b..99cd156e4 100644 --- a/crates/store/src/layer/temporal.rs +++ b/crates/store/src/layer/temporal.rs @@ -25,6 +25,7 @@ where } } + #[must_use] pub fn is_empty(&self) -> bool { self.shadow.is_empty() } From 25697e0a60f36a948925a69ee34ba7d0da6cd9cc Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Thu, 31 Oct 2024 20:40:40 +0100 Subject: [PATCH 47/75] feat: increase the id bytes size and use context_id as root (#912) Co-authored-by: Miraculous Owonubi --- crates/storage/src/address.rs | 125 ++++++++++++-------------- crates/storage/src/entities.rs | 2 +- crates/storage/src/interface.rs | 4 +- crates/storage/src/store.rs | 8 +- crates/storage/src/tests/address.rs | 51 ----------- crates/storage/src/tests/common.rs | 22 ----- crates/storage/src/tests/entities.rs | 8 +- crates/storage/src/tests/index.rs | 77 ++++++++-------- crates/storage/src/tests/interface.rs | 2 +- 9 files changed, 109 insertions(+), 190 deletions(-) diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index 1de861597..b08560a87 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -16,9 +16,8 @@ use borsh::{BorshDeserialize, BorshSerialize}; use calimero_sdk::serde::{Deserialize, Serialize}; use fixedstr::Flexstr; use thiserror::Error as ThisError; -use uuid::{Bytes, Uuid}; -use crate::env::random_bytes; +use crate::env::{context_id, random_bytes}; /// Globally-unique identifier for an [`Element`](crate::entities::Element). /// @@ -35,101 +34,95 @@ use crate::env::random_bytes; /// system operation. Abstracting the true type away provides a level of /// insulation that is useful for any future changes. /// -#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[derive( + BorshSerialize, + BorshDeserialize, + Copy, + Clone, + Debug, + Deserialize, + Eq, + PartialEq, + Hash, + Ord, + PartialOrd, + Serialize, +)] #[serde(crate = "calimero_sdk::serde")] -pub struct Id(Uuid); +pub struct Id { + /// The byte array representation of the ID. + bytes: [u8; 32], +} impl Id { /// Creates a new globally-unique identifier. /// + /// Returns the byte array representation of the ID. + /// /// # Examples /// /// ```rust /// use calimero_storage::address::Id; - /// let id = Id::new(); + /// let id = Id::new([0; 32]); + /// assert_eq!(id.as_bytes(), &[0; 32]); /// ``` - /// - #[must_use] - pub fn new() -> Self { - let mut bytes = [0; 16]; - random_bytes(&mut bytes); - Self(uuid::Builder::from_random_bytes(bytes).into_uuid()) - } - - /// Returns a slice of 16 octets containing the value. #[must_use] - pub const fn as_bytes(&self) -> &Bytes { - self.0.as_bytes() + pub fn new(bytes: [u8; 32]) -> Self { + // random_bytes(&mut bytes); + Self { bytes } } /// Root ID which is set to all zeroes by default. #[must_use] - pub const fn root() -> Self { - Self(Uuid::nil()) - } -} - -impl BorshDeserialize for Id { - fn deserialize(buf: &mut &[u8]) -> Result { - if buf.len() < 16 { - return Err(IoError::new( - IoErrorKind::UnexpectedEof, - "Not enough bytes to deserialize Id", - )); - } - let (bytes, rest) = buf.split_at(16); - *buf = rest; - Ok(Self(Uuid::from_slice(bytes).map_err(|err| { - IoError::new(IoErrorKind::InvalidData, err) - })?)) + pub fn root() -> Self { + Id::new(context_id()) } - fn deserialize_reader(reader: &mut R) -> Result { - let mut bytes = [0_u8; 16]; - reader.read_exact(&mut bytes)?; - Ok(Self(Uuid::from_bytes(bytes))) - } -} - -impl BorshSerialize for Id { - fn serialize(&self, writer: &mut W) -> Result<(), IoError> { - writer.write_all(self.0.as_bytes()) + /// Creates a new random globally-unique identifier. + /// + /// # Examples + /// + /// ```rust + /// use calimero_storage::address::Id; + /// let id = Id::random(); + /// ``` + #[must_use] + pub fn random() -> Id { + let mut bytes = [0_u8; 32]; + random_bytes(&mut bytes); + Id::new(bytes) } -} -impl Default for Id { - fn default() -> Self { - Self::new() + /// Returns the byte array representation of the ID. + /// + /// # Examples + /// + /// ```rust + /// use calimero_storage::address::Id; + /// let id = Id::new([0; 32]); + /// assert_eq!(id.as_bytes(), &[0; 32]); + /// ``` + #[must_use] + pub fn as_bytes(&self) -> &[u8; 32] { + &self.bytes } } impl Display for Id { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.0) - } -} - -impl From<[u8; 16]> for Id { - fn from(bytes: [u8; 16]) -> Self { - Self(Uuid::from_bytes(bytes)) + write!(f, "{:?}", self) } } -impl From<&[u8; 16]> for Id { - fn from(bytes: &[u8; 16]) -> Self { - Self(Uuid::from_bytes(*bytes)) - } -} - -impl From for [u8; 16] { - fn from(id: Id) -> Self { - *id.0.as_bytes() +impl From<[u8; 32]> for Id { + fn from(bytes: [u8; 32]) -> Self { + Self::new(bytes) } } -impl From for Uuid { +impl From for [u8; 32] { fn from(id: Id) -> Self { - id.0 + id.bytes } } diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index c085e0de1..7a3fb7717 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -654,7 +654,7 @@ impl Element { pub fn new(path: &Path) -> Self { let timestamp = time_now(); Self { - id: Id::new(), + id: Id::random(), is_dirty: true, metadata: Metadata { created_at: timestamp, diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index f0ab18b1b..2cbdff588 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -944,8 +944,8 @@ impl MainInterface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn root(context_id: &[u8; 16]) -> Result, StorageError> { - Self::find_by_id(context_id.into()) + pub fn root() -> Result, StorageError> { + Self::find_by_id(Id::root()) } /// Saves an [`Element`](crate::entities::Element) to the storage system. diff --git a/crates/storage/src/store.rs b/crates/storage/src/store.rs index a7c356efd..7f5393057 100644 --- a/crates/storage/src/store.rs +++ b/crates/storage/src/store.rs @@ -17,16 +17,16 @@ pub enum Key { impl Key { /// Converts the key to a byte array. #[must_use] - pub fn to_bytes(&self) -> [u8; 17] { - let mut bytes = [0; 17]; + pub fn to_bytes(&self) -> [u8; 33] { + let mut bytes = [0; 33]; match *self { Self::Index(id) => { bytes[0] = 0; - bytes[1..17].copy_from_slice(id.as_bytes()); + bytes[1..33].copy_from_slice(id.as_bytes()); } Self::Entry(id) => { bytes[0] = 1; - bytes[1..17].copy_from_slice(id.as_bytes()); + bytes[1..33].copy_from_slice(id.as_bytes()); } } bytes diff --git a/crates/storage/src/tests/address.rs b/crates/storage/src/tests/address.rs index 96b6e3399..698246497 100644 --- a/crates/storage/src/tests/address.rs +++ b/crates/storage/src/tests/address.rs @@ -2,57 +2,6 @@ use borsh::to_vec; use claims::assert_err; use super::*; -use crate::tests::common::TEST_UUID; - -#[cfg(test)] -mod id__public_methods { - use super::*; - - #[test] - fn as_bytes() { - assert_eq!(Id(Uuid::from_bytes(TEST_UUID[0])).as_bytes(), &TEST_UUID[0]); - } -} - -#[cfg(test)] -mod id__traits { - use super::*; - - #[test] - fn borsh_deserialization__valid() { - assert_eq!( - Id::try_from_slice(&TEST_UUID[0]).unwrap(), - Id(Uuid::from_bytes(TEST_UUID[0])) - ); - } - - #[test] - fn borsh_deserialization__too_short() { - assert_err!(Id::try_from_slice(&[1, 2, 3])); - } - - #[test] - fn borsh_serialization__valid() { - let serialized = to_vec(&Id(Uuid::from_bytes(TEST_UUID[0]))).unwrap(); - assert_eq!(serialized.len(), 16); - assert_eq!(serialized, TEST_UUID[0]); - } - - #[test] - fn borsh_serialization__roundtrip() { - let id1 = Id::new(); - let id2 = Id::try_from_slice(&to_vec(&id1).unwrap()).unwrap(); - assert_eq!(id1, id2); - } - - #[test] - fn from__for_uuid() { - assert_eq!( - Uuid::from(Id(Uuid::from_bytes(TEST_UUID[0]))).as_bytes(), - &TEST_UUID[0] - ); - } -} #[cfg(test)] mod path__constructor { diff --git a/crates/storage/src/tests/common.rs b/crates/storage/src/tests/common.rs index f2c2a99d9..41bd46cb2 100644 --- a/crates/storage/src/tests/common.rs +++ b/crates/storage/src/tests/common.rs @@ -1,34 +1,12 @@ use std::collections::BTreeMap; -use std::sync::LazyLock; use borsh::{to_vec, BorshDeserialize, BorshSerialize}; use sha2::{Digest, Sha256}; use velcro::btree_map; -use crate::address::Id; use crate::entities::{AtomicUnit, ChildInfo, Collection, Data, Element}; use crate::interface::{Interface, StorageError}; -/// A set of non-empty test UUIDs. -pub const TEST_UUID: [[u8; 16]; 5] = [ - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - [2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - [3, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - [4, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - [5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], -]; - -/// A set of non-empty test IDs. -pub static TEST_ID: LazyLock<[Id; 5]> = LazyLock::new(|| { - [ - Id::from(TEST_UUID[0]), - Id::from(TEST_UUID[1]), - Id::from(TEST_UUID[2]), - Id::from(TEST_UUID[3]), - Id::from(TEST_UUID[4]), - ] -}); - /// For tests against empty data structs. #[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq, PartialOrd)] pub struct EmptyData { diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index 3810bcb7e..b6987305c 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -177,7 +177,7 @@ mod child_info__constructor { #[test] fn new() { - let id = Id::new(); + let id = Id::random(); let hash = Sha256::digest(b"1").into(); let info = ChildInfo::new(id, hash); assert_eq!(info.id, id); @@ -191,13 +191,13 @@ mod child_info__public_methods { #[test] fn id() { - let info = ChildInfo::new(Id::new(), Sha256::digest(b"1").into()); + let info = ChildInfo::new(Id::random(), Sha256::digest(b"1").into()); assert_eq!(info.id(), info.id); } #[test] fn merkle_hash() { - let info = ChildInfo::new(Id::new(), Sha256::digest(b"1").into()); + let info = ChildInfo::new(Id::random(), Sha256::digest(b"1").into()); assert_eq!(info.merkle_hash(), info.merkle_hash); } } @@ -208,7 +208,7 @@ mod child_info__traits { #[test] fn display() { - let info = ChildInfo::new(Id::new(), Sha256::digest(b"1").into()); + let info = ChildInfo::new(Id::random(), Sha256::digest(b"1").into()); assert_eq!( format!("{info}"), format!( diff --git a/crates/storage/src/tests/index.rs b/crates/storage/src/tests/index.rs index 4b2f40336..4c4d25995 100644 --- a/crates/storage/src/tests/index.rs +++ b/crates/storage/src/tests/index.rs @@ -1,13 +1,12 @@ use super::*; use crate::store::MainStorage; -use crate::tests::common::TEST_ID; mod index__public_methods { use super::*; #[test] fn add_child_to() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); @@ -19,7 +18,7 @@ mod index__public_methods { assert!(root_index.children.is_empty()); let collection_name = "Books"; - let child_id = Id::new(); + let child_id = Id::random(); let child_own_hash = [2_u8; 32]; let child_full_hash: [u8; 32] = hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") @@ -54,7 +53,7 @@ mod index__public_methods { #[test] fn add_root() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); @@ -68,7 +67,7 @@ mod index__public_methods { #[test] fn get_ancestors_of() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; let child_collection_name = "Books"; let grandchild_collection_name = "Pages"; @@ -76,7 +75,7 @@ mod index__public_methods { assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); - let child_id = Id::new(); + let child_id = Id::random(); let child_hash = [2_u8; 32]; let child_info = ChildInfo::new(child_id, child_hash); assert!( @@ -84,7 +83,7 @@ mod index__public_methods { .is_ok() ); - let grandchild_id = Id::new(); + let grandchild_id = Id::random(); let grandchild_hash = [3_u8; 32]; let grandchild_info = ChildInfo::new(grandchild_id, grandchild_hash); assert!(>::add_child_to( @@ -95,7 +94,7 @@ mod index__public_methods { ) .is_ok()); - let greatgrandchild_id = Id::new(); + let greatgrandchild_id = Id::random(); let greatgrandchild_hash = [4_u8; 32]; let greatgrandchild_info = ChildInfo::new(greatgrandchild_id, greatgrandchild_hash); assert!(>::add_child_to( @@ -142,13 +141,13 @@ mod index__public_methods { #[test] fn get_children_of__single_collection() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let collection_name = "Books"; - let child1_id = Id::new(); + let child1_id = Id::random(); let child1_own_hash = [2_u8; 32]; let child1_full_hash: [u8; 32] = hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") @@ -156,7 +155,7 @@ mod index__public_methods { .try_into() .unwrap(); - let child2_id = Id::new(); + let child2_id = Id::random(); let child2_own_hash = [3_u8; 32]; let child2_full_hash: [u8; 32] = hex::decode("648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b") @@ -187,20 +186,20 @@ mod index__public_methods { #[test] fn get_children_of__two_collections() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); let collection1_name = "Pages"; - let child1_id = Id::new(); + let child1_id = Id::random(); let child1_own_hash = [2_u8; 32]; let child1_full_hash: [u8; 32] = hex::decode("75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a") .unwrap() .try_into() .unwrap(); - let child2_id = Id::new(); + let child2_id = Id::random(); let child2_own_hash = [3_u8; 32]; let child2_full_hash: [u8; 32] = hex::decode("648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b") @@ -209,7 +208,7 @@ mod index__public_methods { .unwrap(); let collection2_name = "Reviews"; - let child3_id = Id::new(); + let child3_id = Id::random(); let child3_own_hash = [4_u8; 32]; let child3_full_hash: [u8; 32] = hex::decode("9f4fb68f3e1dac82202f9aa581ce0bbf1f765df0e9ac3c8c57e20f685abab8ed") @@ -250,7 +249,7 @@ mod index__public_methods { #[test] fn get_collection_names_for() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); @@ -259,9 +258,9 @@ mod index__public_methods { let collection2_name = "Chapters"; let mut collection_names = vec![collection1_name.to_owned(), collection2_name.to_owned()]; collection_names.sort(); - let child1_id = Id::new(); + let child1_id = Id::random(); let child1_own_hash = [2_u8; 32]; - let child2_id = Id::new(); + let child2_id = Id::random(); let child2_own_hash = [3_u8; 32]; assert!(>::add_child_to( @@ -287,7 +286,7 @@ mod index__public_methods { #[test] fn get_hashes_for() { - let root_id = TEST_ID[0]; + let root_id = Id::new([0_u8; 32]); let root_own_hash = [1_u8; 32]; let root_full_hash = [0_u8; 32]; @@ -303,7 +302,7 @@ mod index__public_methods { #[test] fn get_parent_id() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); @@ -315,7 +314,7 @@ mod index__public_methods { assert!(root_index.children.is_empty()); let collection_name = "Books"; - let child_id = Id::new(); + let child_id = Id::random(); let child_own_hash = [2_u8; 32]; assert!(>::add_child_to( @@ -335,7 +334,7 @@ mod index__public_methods { #[test] fn get_type_id() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 99).is_ok()); @@ -350,14 +349,14 @@ mod index__public_methods { #[test] fn has_children() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; let collection_name = "Books"; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); assert!(!>::has_children(root_id, collection_name).unwrap()); - let child_id = Id::new(); + let child_id = Id::random(); let child_own_hash = [2_u8; 32]; assert!(>::add_child_to( @@ -372,7 +371,7 @@ mod index__public_methods { #[test] fn remove_child_from() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; assert!(>::add_root(ChildInfo::new(root_id, root_hash), 1).is_ok()); @@ -384,7 +383,7 @@ mod index__public_methods { assert!(root_index.children.is_empty()); let collection_name = "Books"; - let child_id = Id::new(); + let child_id = Id::random(); let child_own_hash = [2_u8; 32]; assert!(>::add_child_to( @@ -409,7 +408,7 @@ mod index__private_methods { #[test] fn get_and_save_index() { - let id = Id::new(); + let id = Id::random(); let hash1 = [1_u8; 32]; let hash2 = [2_u8; 32]; assert!(>::get_index(id).unwrap().is_none()); @@ -429,7 +428,7 @@ mod index__private_methods { #[test] fn save_and_remove_index() { - let id = Id::new(); + let id = Id::random(); let hash1 = [1_u8; 32]; let hash2 = [2_u8; 32]; assert!(>::get_index(id).unwrap().is_none()); @@ -456,23 +455,23 @@ mod hashing { #[test] fn calculate_full_merkle_hash_for__with_children() { - let root_id = TEST_ID[0]; - assert!(>::add_root(ChildInfo::new(TEST_ID[0], [0_u8; 32]), 1).is_ok()); + let root_id = Id::random(); + assert!(>::add_root(ChildInfo::new(root_id, [0_u8; 32]), 1).is_ok()); let collection_name = "Children"; - let child1_id = TEST_ID[1]; + let child1_id = Id::random(); let child1_hash = [1_u8; 32]; let child1_info = ChildInfo::new(child1_id, child1_hash); assert!( >::add_child_to(root_id, collection_name, child1_info, 2).is_ok() ); - let child2_id = TEST_ID[2]; + let child2_id = Id::random(); let child2_hash = [2_u8; 32]; let child2_info = ChildInfo::new(child2_id, child2_hash); assert!( >::add_child_to(root_id, collection_name, child2_info, 2).is_ok() ); - let child3_id = TEST_ID[3]; + let child3_id = Id::random(); let child3_hash = [3_u8; 32]; let child3_info = ChildInfo::new(child3_id, child3_hash); assert!( @@ -507,7 +506,7 @@ mod hashing { #[test] fn recalculate_ancestor_hashes_for() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash = [1_u8; 32]; let child_collection_name = "Books"; let grandchild_collection_name = "Pages"; @@ -518,7 +517,7 @@ mod hashing { let root_index = >::get_index(root_id).unwrap().unwrap(); assert_eq!(root_index.full_hash, [0_u8; 32]); - let child_id = Id::new(); + let child_id = Id::random(); let child_hash = [2_u8; 32]; let child_info = ChildInfo::new(child_id, child_hash); assert!( @@ -537,7 +536,7 @@ mod hashing { "75877bb41d393b5fb8455ce60ecd8dda001d06316496b14dfa7f895656eeca4a" ); - let grandchild_id = Id::new(); + let grandchild_id = Id::random(); let grandchild_hash = [3_u8; 32]; let grandchild_info = ChildInfo::new(grandchild_id, grandchild_hash); assert!(>::add_child_to( @@ -567,7 +566,7 @@ mod hashing { "648aa5c579fb30f38af744d97d6ec840c7a91277a499a0d780f3e7314eca090b" ); - let greatgrandchild_id = Id::new(); + let greatgrandchild_id = Id::random(); let greatgrandchild_hash = [4_u8; 32]; let greatgrandchild_info = ChildInfo::new(greatgrandchild_id, greatgrandchild_hash); assert!(>::add_child_to( @@ -682,7 +681,7 @@ mod hashing { #[test] fn update_hash_for__full() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash0 = [0_u8; 32]; let root_hash1 = [1_u8; 32]; let root_hash2 = [2_u8; 32]; @@ -706,7 +705,7 @@ mod hashing { #[test] fn update_hash_for__own() { - let root_id = Id::new(); + let root_id = Id::random(); let root_hash1 = [1_u8; 32]; let root_hash2 = [2_u8; 32]; diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 1f16e2a86..45e24c7a6 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -50,7 +50,7 @@ mod interface__public_methods { #[test] fn find_by_id__non_existent() { - assert_none!(Interface::find_by_id::(Id::new()).unwrap()); + assert_none!(Interface::find_by_id::(Id::random()).unwrap()); } #[test] From 70222f4f1202edef30927da81297fc2e57d5d4d4 Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Thu, 31 Oct 2024 21:03:52 +0100 Subject: [PATCH 48/75] chore: simplified method macro logic to use Interface::root method (#913) --- crates/sdk/macros/src/logic/method.rs | 9 +++------ crates/storage/src/address.rs | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/crates/sdk/macros/src/logic/method.rs b/crates/sdk/macros/src/logic/method.rs index b3074526a..d7dd0f750 100644 --- a/crates/sdk/macros/src/logic/method.rs +++ b/crates/sdk/macros/src/logic/method.rs @@ -99,9 +99,8 @@ impl ToTokens for PublicLogicMethod<'_> { SelfType::Owned(_) | SelfType::Immutable(_) => None, }; quote! { - let Some(#mutability app) = ::calimero_storage::interface::Interface::find_by_id::<#self_>( - ::calimero_storage::address::Id::root() - ).ok().flatten() else { + let Some(#mutability app) = ::calimero_storage::interface::Interface::root::<#self_>().ok().flatten() + else { ::calimero_sdk::env::panic_str("Failed to find or read app state") }; } @@ -111,9 +110,7 @@ impl ToTokens for PublicLogicMethod<'_> { None => ( if init_method { quote! { - if let Some(mut app) = ::calimero_storage::interface::Interface::find_by_id::<#self_>( - ::calimero_storage::address::Id::root() - ).ok().flatten() { + if let Some(mut app) = ::calimero_storage::interface::Interface::root::<#self_>().ok().flatten() { ::calimero_sdk::env::panic_str("Cannot initialize over already existing state.") }; diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index b08560a87..93e5eabe7 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -72,7 +72,7 @@ impl Id { Self { bytes } } - /// Root ID which is set to all zeroes by default. + /// Root ID which is set to the context ID. #[must_use] pub fn root() -> Self { Id::new(context_id()) From f1ddc4c2542e078ab3b95b52505a74a166d0ccab Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Fri, 1 Nov 2024 01:35:04 +0300 Subject: [PATCH 49/75] chore: fix clippy errors & reenable warnings check (#915) --- .github/actions/style/action.yml | 2 +- Cargo.lock | 4 --- apps/kv-store/src/lib.rs | 2 ++ contracts/proxy-lib/src/lib.rs | 28 ++++++++----------- contracts/test-counter/src/lib.rs | 13 ++++++--- crates/context/src/lib.rs | 12 ++++---- crates/network/src/discovery.rs | 2 +- crates/network/src/events/rendezvous.rs | 2 +- crates/node/src/catchup.rs | 6 ++-- crates/node/src/interactive_cli.rs | 6 ++-- crates/node/src/interactive_cli/context.rs | 19 ++++++------- crates/node/src/interactive_cli/identity.rs | 4 +-- crates/node/src/interactive_cli/state.rs | 2 +- crates/node/src/interactive_cli/store.rs | 2 +- crates/sdk/src/types.rs | 4 +-- .../admin/handlers/context/create_context.rs | 1 - crates/server/src/admin/service.rs | 6 ++-- crates/storage/Cargo.toml | 1 - crates/storage/src/address.rs | 13 +++++---- crates/storage/src/env.rs | 3 +- crates/storage/src/types.rs | 1 + 21 files changed, 66 insertions(+), 67 deletions(-) diff --git a/.github/actions/style/action.yml b/.github/actions/style/action.yml index fd4532a5b..c41c53539 100644 --- a/.github/actions/style/action.yml +++ b/.github/actions/style/action.yml @@ -41,7 +41,7 @@ runs: echo "Rust code is not properly formatted." exit 1 # Exit with a non-zero status code if formatting fails fi - if ! cargo clippy; then + if ! cargo clippy -- -D warnings; then echo "Rust code is not properly linted." exit 1 # Exit with a non-zero status code if formatting fails fi diff --git a/Cargo.lock b/Cargo.lock index 047ba985c..d780bf0c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1408,7 +1408,6 @@ dependencies = [ "serde", "sha2 0.10.8", "thiserror", - "uuid 1.10.0", "velcro", ] @@ -10173,9 +10172,6 @@ name = "uuid" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" -dependencies = [ - "serde", -] [[package]] name = "valuable" diff --git a/apps/kv-store/src/lib.rs b/apps/kv-store/src/lib.rs index 05ce675c2..1aa546e43 100644 --- a/apps/kv-store/src/lib.rs +++ b/apps/kv-store/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(clippy::len_without_is_empty)] + use std::collections::BTreeMap; use calimero_sdk::types::Error; diff --git a/contracts/proxy-lib/src/lib.rs b/contracts/proxy-lib/src/lib.rs index d04333d07..6ca327b2f 100644 --- a/contracts/proxy-lib/src/lib.rs +++ b/contracts/proxy-lib/src/lib.rs @@ -1,6 +1,5 @@ use core::str; use std::collections::HashSet; -use std::usize; use calimero_context_config::repr::{Repr, ReprTransmute}; use calimero_context_config::types::{ContextId, Signed, SignerId}; @@ -127,20 +126,20 @@ impl ProxyContract { num_proposals <= self.active_proposals_limit, "Account has too many active proposals. Confirm or delete some." ); - return self.perform_action_by_member(MemberAction::Create { + self.perform_action_by_member(MemberAction::Create { proposal, num_proposals, - }); + }) } pub fn approve(&mut self, proposal: Signed) -> Promise { let proposal = proposal .parse(|i| *i.signer_id) .expect("failed to parse input"); - return self.perform_action_by_member(MemberAction::Approve { + self.perform_action_by_member(MemberAction::Approve { identity: proposal.signer_id, proposal_id: proposal.proposal_id, - }); + }) } fn internal_confirm(&mut self, proposal_id: ProposalId, signer_id: SignerId) { @@ -199,13 +198,10 @@ impl ProxyContract { proposal_id: ProposalId, ) -> Option { let approvals_for_proposal = self.approvals.get(&proposal_id); - match approvals_for_proposal { - Some(approvals) => Some(ProposalWithApprovals { - proposal_id, - num_approvals: approvals.len(), - }), - None => None, - } + approvals_for_proposal.map(|approvals| ProposalWithApprovals { + proposal_id, + num_approvals: approvals.len(), + }) } #[private] @@ -357,9 +353,7 @@ impl ProxyContract { let author_id: SignerId = proposal.author_id.rt().expect("Invalid signer"); let mut num_proposals = *self.num_proposals_pk.get(&author_id).unwrap_or(&0); - if num_proposals > 0 { - num_proposals = num_proposals - 1; - } + num_proposals = num_proposals.saturating_sub(1); self.num_proposals_pk.insert(author_id, num_proposals); proposal } @@ -370,10 +364,10 @@ impl ProxyContract { key: Box<[u8]>, value: Box<[u8]>, ) -> Option> { - let val = self.context_storage.insert(key.clone(), value); - val + self.context_storage.insert(key.clone(), value) } + #[expect(clippy::type_complexity, reason = "Acceptable here")] pub fn context_storage_entries( &self, offset: usize, diff --git a/contracts/test-counter/src/lib.rs b/contracts/test-counter/src/lib.rs index 1fc099353..f93bd80d7 100644 --- a/contracts/test-counter/src/lib.rs +++ b/contracts/test-counter/src/lib.rs @@ -1,4 +1,9 @@ -#![allow(unused_crate_dependencies, reason = "False positives")] +#![allow( + clippy::use_self, + clippy::must_use_candidate, + unused_crate_dependencies, + reason = "False positives" +)] use near_sdk::{env, near, PanicOnDefault}; @@ -11,16 +16,16 @@ pub struct CounterContract { #[near] impl CounterContract { #[init] - pub fn new() -> Self { + pub const fn new() -> Self { Self { counter: 0 } } pub fn increment(&mut self) { - self.counter += 1; + self.counter = self.counter.wrapping_add(1); env::log_str("Counter incremented"); } - pub fn get_count(&self) -> u32 { + pub const fn get_count(&self) -> u32 { self.counter } } diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 6fa09d974..71d55b179 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -1,3 +1,5 @@ +#![expect(clippy::unwrap_in_result, reason = "Repr transmute")] + use core::error::Error; use core::str::FromStr; use std::collections::HashSet; @@ -140,7 +142,7 @@ impl ContextManager { PrivateKey::random(&mut rand::thread_rng()) } - pub async fn create_context( + pub fn create_context( &self, seed: Option<[u8; 32]>, application_id: ApplicationId, @@ -178,7 +180,7 @@ impl ContextManager { bail!("Application is not installed on node.") }; - self.add_context(&context, identity_secret, true).await?; + self.add_context(&context, identity_secret, true)?; let (tx, rx) = oneshot::channel(); @@ -249,7 +251,7 @@ impl ContextManager { Ok(()) } - async fn add_context( + fn add_context( &self, context: &Context, identity_secret: PrivateKey, @@ -381,8 +383,7 @@ impl ContextManager { } } - self.add_context(&context, identity_secret, !context_exists) - .await?; + self.add_context(&context, identity_secret, !context_exists)?; self.subscribe(&context.id).await?; @@ -568,6 +569,7 @@ impl ContextManager { drop(iter); + #[expect(clippy::iter_with_drain, reason = "reallocation would be a bad idea")] for k in keys.drain(..) { store.delete(&k)?; } diff --git a/crates/network/src/discovery.rs b/crates/network/src/discovery.rs index e775592dd..a01668dbe 100644 --- a/crates/network/src/discovery.rs +++ b/crates/network/src/discovery.rs @@ -184,7 +184,7 @@ impl EventLoop { // Finds a new rendezvous peer for registration. // Prioritizes Discovered peers, falls back to dialing Expired peers if necessary. // Returns Some(PeerId) if a suitable peer is found, None otherwise. - pub(crate) async fn find_new_rendezvous_peer(&mut self) -> Option { + pub(crate) fn find_new_rendezvous_peer(&self) -> Option { let mut candidate = None; for peer_id in self.discovery.state.get_rendezvous_peer_ids() { diff --git a/crates/network/src/events/rendezvous.rs b/crates/network/src/events/rendezvous.rs index d1fb5f8ee..d2d89006e 100644 --- a/crates/network/src/events/rendezvous.rs +++ b/crates/network/src/events/rendezvous.rs @@ -94,7 +94,7 @@ impl EventHandler for EventLoop { RendezvousRegistrationStatus::Expired, ); - if let Some(nominated_peer) = self.find_new_rendezvous_peer().await { + if let Some(nominated_peer) = self.find_new_rendezvous_peer() { if self.swarm.is_connected(&nominated_peer) { if let Err(err) = self.rendezvous_register(&nominated_peer) { error!(%err, "Failed to register with nominated rendezvous peer"); diff --git a/crates/node/src/catchup.rs b/crates/node/src/catchup.rs index 8ca5df7cf..58c9c5b45 100644 --- a/crates/node/src/catchup.rs +++ b/crates/node/src/catchup.rs @@ -25,7 +25,7 @@ use crate::types::{ }; use crate::Node; -mod actions; +// mod actions; mod blobs; impl Node { @@ -170,7 +170,7 @@ impl Node { } async fn perform_blob_catchup( - &mut self, + &self, chosen_peer: PeerId, latest_application: Application, ) -> EyreResult<()> { @@ -189,7 +189,7 @@ impl Node { } async fn perform_blob_stream_catchup( - &mut self, + &self, chosen_peer: PeerId, latest_application: Application, ) -> EyreResult<()> { diff --git a/crates/node/src/interactive_cli.rs b/crates/node/src/interactive_cli.rs index 2d5bdebac..66cdc035a 100644 --- a/crates/node/src/interactive_cli.rs +++ b/crates/node/src/interactive_cli.rs @@ -51,10 +51,10 @@ pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { SubCommands::Application(application) => application.run(node).await, SubCommands::Call(call) => call.run(node).await, SubCommands::Context(context) => context.run(node).await, - SubCommands::Identity(identity) => identity.run(node).await, + SubCommands::Identity(identity) => identity.run(node), SubCommands::Peers(peers) => peers.run(node.network_client.clone().into()).await, - SubCommands::State(state) => state.run(node).await, - SubCommands::Store(store) => store.run(node).await, + SubCommands::State(state) => state.run(node), + SubCommands::Store(store) => store.run(node), }; if let Err(err) = result { diff --git a/crates/node/src/interactive_cli/context.rs b/crates/node/src/interactive_cli/context.rs index 7e3a11d24..16b861a7c 100644 --- a/crates/node/src/interactive_cli/context.rs +++ b/crates/node/src/interactive_cli/context.rs @@ -43,6 +43,7 @@ enum Commands { impl ContextCommand { #[expect(clippy::similar_names, reason = "Acceptable here")] + #[expect(clippy::too_many_lines, reason = "TODO: Will be refactored")] pub async fn run(self, node: &Node) -> Result<()> { let ind = ">>".blue(); @@ -110,7 +111,7 @@ impl ContextCommand { let application_id = application_id.parse()?; let (context_seed, params) = 'infer: { - let Some(context_seed) = context_seed.clone() else { + let Some(context_seed) = context_seed else { break 'infer (None, None); }; let context_seed_clone = context_seed.clone(); @@ -132,15 +133,13 @@ impl ContextCommand { let (tx, rx) = oneshot::channel(); - node.ctx_manager - .create_context( - context_seed.map(Into::into), - application_id, - None, - params.map(|x| x.as_bytes().to_owned()).unwrap_or_default(), - tx, - ) - .await?; + node.ctx_manager.create_context( + context_seed.map(Into::into), + application_id, + None, + params.map(|x| x.as_bytes().to_owned()).unwrap_or_default(), + tx, + )?; let _ignored = tokio::spawn(async move { let err: eyre::Report = match rx.await { diff --git a/crates/node/src/interactive_cli/identity.rs b/crates/node/src/interactive_cli/identity.rs index ea2064d7b..5619690b5 100644 --- a/crates/node/src/interactive_cli/identity.rs +++ b/crates/node/src/interactive_cli/identity.rs @@ -21,7 +21,7 @@ enum IdentitySubcommands { } impl IdentityCommand { - pub async fn run(self, node: &Node) -> Result<()> { + pub fn run(self, node: &Node) -> Result<()> { match &self.subcommand { IdentitySubcommands::Ls { context_id } => { match ContextId::from_str(context_id) { @@ -44,7 +44,7 @@ impl IdentityCommand { println!("{:44} | Owned", "Identity"); for (k, v) in first.into_iter().chain(iter.entries()) { - let (k, v) = (k.unwrap(), v.unwrap()); + let (k, v) = (k?, v?); if k.context_id() != context_id { break; diff --git a/crates/node/src/interactive_cli/state.rs b/crates/node/src/interactive_cli/state.rs index 074f0e2af..0210f016f 100644 --- a/crates/node/src/interactive_cli/state.rs +++ b/crates/node/src/interactive_cli/state.rs @@ -12,7 +12,7 @@ pub struct StateCommand { context_id: String, } impl StateCommand { - pub async fn run(self, node: &Node) -> Result<()> { + pub fn run(self, node: &Node) -> Result<()> { let ind = ">>".blue(); let handle = node.store.handle(); let mut iter = handle.iter::()?; diff --git a/crates/node/src/interactive_cli/store.rs b/crates/node/src/interactive_cli/store.rs index c20dbc8d5..34af2839c 100644 --- a/crates/node/src/interactive_cli/store.rs +++ b/crates/node/src/interactive_cli/store.rs @@ -12,7 +12,7 @@ pub struct StoreCommand; impl StoreCommand { // todo! revisit: get specific context state - pub async fn run(self, node: &Node) -> Result<()> { + pub fn run(self, node: &Node) -> Result<()> { println!("Executing Store command"); let ind = ">>".blue(); diff --git a/crates/sdk/src/types.rs b/crates/sdk/src/types.rs index b3bea782e..16ebf17fc 100644 --- a/crates/sdk/src/types.rs +++ b/crates/sdk/src/types.rs @@ -5,11 +5,11 @@ use serde::{Serialize, Serializer}; #[derive(Debug, Serialize)] pub struct Error(#[serde(serialize_with = "error_string")] Box); -fn error_string(error: &Box, serializer: S) -> Result +fn error_string(error: &impl AsRef, serializer: S) -> Result where S: Serializer, { - serializer.serialize_str(&error.to_string()) + serializer.serialize_str(&error.as_ref().to_string()) } impl Error { diff --git a/crates/server/src/admin/handlers/context/create_context.rs b/crates/server/src/admin/handlers/context/create_context.rs index b48a85f77..793d3d7fa 100644 --- a/crates/server/src/admin/handlers/context/create_context.rs +++ b/crates/server/src/admin/handlers/context/create_context.rs @@ -23,7 +23,6 @@ pub async fn handler( req.initialization_params, tx, ) - .await .map_err(parse_api_error); if let Err(err) = result { diff --git a/crates/server/src/admin/service.rs b/crates/server/src/admin/service.rs index 7445e867d..8a171e6e0 100644 --- a/crates/server/src/admin/service.rs +++ b/crates/server/src/admin/service.rs @@ -259,13 +259,13 @@ async fn serve_embedded_file(uri: Uri) -> Result // Attempt to serve the requested file if let Some(file) = NodeUiStaticFiles::get(path) { - return serve_file(file).await; + return serve_file(file); } // Fallback to index.html for SPA routing if the file wasn't found and it's not already "index.html" if path != "index.html" { if let Some(index_file) = NodeUiStaticFiles::get("index.html") { - return serve_file(index_file).await; + return serve_file(index_file); } } @@ -285,7 +285,7 @@ async fn serve_embedded_file(uri: Uri) -> Result /// - `Result`: If the response is successfully built, it returns an `Ok` /// with the response. If there is an error building the response, it returns an `Err` with a /// 500 INTERNAL_SERVER_ERROR status code. -async fn serve_file(file: EmbeddedFile) -> Result { +fn serve_file(file: EmbeddedFile) -> Result { Response::builder() .status(StatusCode::OK) .header("Content-Type", file.metadata.mimetype()) diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 963f501e3..dd6fcf44c 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -15,7 +15,6 @@ indexmap.workspace = true serde = { workspace = true, features = ["derive"] } sha2.workspace = true thiserror.workspace = true -uuid.workspace = true calimero-sdk = { path = "../sdk" } calimero-storage-macros = { path = "../storage-macros" } diff --git a/crates/storage/src/address.rs b/crates/storage/src/address.rs index 93e5eabe7..b8eb8e7e9 100644 --- a/crates/storage/src/address.rs +++ b/crates/storage/src/address.rs @@ -67,7 +67,7 @@ impl Id { /// assert_eq!(id.as_bytes(), &[0; 32]); /// ``` #[must_use] - pub fn new(bytes: [u8; 32]) -> Self { + pub const fn new(bytes: [u8; 32]) -> Self { // random_bytes(&mut bytes); Self { bytes } } @@ -75,7 +75,7 @@ impl Id { /// Root ID which is set to the context ID. #[must_use] pub fn root() -> Self { - Id::new(context_id()) + Self::new(context_id()) } /// Creates a new random globally-unique identifier. @@ -87,10 +87,10 @@ impl Id { /// let id = Id::random(); /// ``` #[must_use] - pub fn random() -> Id { + pub fn random() -> Self { let mut bytes = [0_u8; 32]; random_bytes(&mut bytes); - Id::new(bytes) + Self::new(bytes) } /// Returns the byte array representation of the ID. @@ -103,14 +103,15 @@ impl Id { /// assert_eq!(id.as_bytes(), &[0; 32]); /// ``` #[must_use] - pub fn as_bytes(&self) -> &[u8; 32] { + pub const fn as_bytes(&self) -> &[u8; 32] { &self.bytes } } impl Display for Id { + #[expect(clippy::use_debug, reason = "fine for now")] fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - write!(f, "{:?}", self) + write!(f, "{self:?}") } } diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index be93e0174..dabca04ec 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -84,6 +84,7 @@ pub fn time_now() -> u64 { /// Return the context id. #[must_use] +#[expect(clippy::missing_const_for_fn, reason = "Cannot be const here")] pub fn context_id() -> [u8; 32] { imp::context_id() } @@ -182,7 +183,7 @@ mod mocked { } /// Return the context id. - pub(super) fn context_id() -> [u8; 32] { + pub(super) const fn context_id() -> [u8; 32] { [0; 32] } diff --git a/crates/storage/src/types.rs b/crates/storage/src/types.rs index bfe9082fb..751d6c2d3 100644 --- a/crates/storage/src/types.rs +++ b/crates/storage/src/types.rs @@ -133,6 +133,7 @@ impl /// [`Element`](crate::entities::Element) cannot be found, an error will be /// returned. /// + #[expect(clippy::len_without_is_empty, reason = "TODO: will be implemented")] pub fn len(&self) -> Result { Ok(Interface::child_info_for(self.id(), &self.entries)?.len()) } From 5df5176b91708d89b6544a30370276f1d474a4c7 Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Fri, 1 Nov 2024 16:09:04 +0100 Subject: [PATCH 50/75] remove warnings from clippy (#917) Co-authored-by: Miraculous Owonubi --- .github/actions/style/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/style/action.yml b/.github/actions/style/action.yml index c41c53539..4d8b59cde 100644 --- a/.github/actions/style/action.yml +++ b/.github/actions/style/action.yml @@ -41,7 +41,7 @@ runs: echo "Rust code is not properly formatted." exit 1 # Exit with a non-zero status code if formatting fails fi - if ! cargo clippy -- -D warnings; then + if ! cargo clippy -- -A warnings; then echo "Rust code is not properly linted." exit 1 # Exit with a non-zero status code if formatting fails fi From d284f728984582a5d301811a651512d9d5942f3b Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Fri, 1 Nov 2024 18:53:30 +0300 Subject: [PATCH 51/75] feat(context-config): impl guard revision, restructure modules (#889) --- contracts/context-config/src/guard.rs | 42 +++- contracts/context-config/src/lib.rs | 15 ++ contracts/context-config/src/mutate.rs | 100 ++------- contracts/context-config/src/query.rs | 25 ++- contracts/context-config/src/sys.rs | 101 +++++++++ contracts/context-config/tests/sandbox.rs | 261 +++++++++++++++++++++- crates/context/config/src/client.rs | 30 ++- crates/context/config/src/types.rs | 2 + 8 files changed, 477 insertions(+), 99 deletions(-) create mode 100644 contracts/context-config/src/sys.rs diff --git a/contracts/context-config/src/guard.rs b/contracts/context-config/src/guard.rs index 289923a8a..6eadfb7a8 100644 --- a/contracts/context-config/src/guard.rs +++ b/contracts/context-config/src/guard.rs @@ -1,7 +1,7 @@ use core::ops::{Deref, DerefMut}; use std::fmt; -use calimero_context_config::types::SignerId; +use calimero_context_config::types::{Revision, SignerId}; use near_sdk::near; use near_sdk::store::IterableSet; @@ -11,6 +11,7 @@ use super::Prefix; #[near(serializers = [borsh])] pub struct Guard { inner: T, + revision: Revision, priviledged: IterableSet, } @@ -36,15 +37,19 @@ impl Guard { let mut priviledged = IterableSet::new(prefix); let _ = priviledged.insert(signer_id); - Self { inner, priviledged } + Self { + inner, + revision: 0, + priviledged, + } } - pub fn get_mut(&mut self, signer_id: &SignerId) -> Result, UnauthorizedAccess> { + pub fn get(&mut self, signer_id: &SignerId) -> Result, UnauthorizedAccess> { if !self.priviledged.contains(signer_id) { return Err(UnauthorizedAccess { _priv: () }); } - Ok(GuardMut { inner: self }) + Ok(GuardHandle { inner: self }) } pub fn into_inner(self) -> T { @@ -62,6 +67,10 @@ impl Guard { inner: &mut self.priviledged, } } + + pub const fn revision(&self) -> Revision { + self.revision + } } impl Deref for Guard { @@ -72,6 +81,21 @@ impl Deref for Guard { } } +#[derive(Debug)] +pub struct GuardHandle<'a, T> { + inner: &'a mut Guard, +} + +impl<'a, T> GuardHandle<'a, T> { + pub fn get_mut(self) -> GuardMut<'a, T> { + GuardMut { inner: self.inner } + } + + pub fn priviledges(&mut self) -> Priviledges<'_> { + self.inner.priviledges() + } +} + #[derive(Debug)] pub struct GuardMut<'a, T> { inner: &'a mut Guard, @@ -79,9 +103,7 @@ pub struct GuardMut<'a, T> { impl GuardMut<'_, T> { pub fn priviledges(&mut self) -> Priviledges<'_> { - Priviledges { - inner: &mut self.inner.priviledged, - } + self.inner.priviledges() } } @@ -99,6 +121,12 @@ impl DerefMut for GuardMut<'_, T> { } } +impl Drop for GuardMut<'_, T> { + fn drop(&mut self) { + self.inner.revision = self.inner.revision.wrapping_add(1); + } +} + #[derive(Debug)] pub struct Priviledges<'a> { inner: &'a mut IterableSet, diff --git a/contracts/context-config/src/lib.rs b/contracts/context-config/src/lib.rs index 87507fa07..67e778426 100644 --- a/contracts/context-config/src/lib.rs +++ b/contracts/context-config/src/lib.rs @@ -1,4 +1,8 @@ #![allow(unused_crate_dependencies, reason = "False positives")] +#![allow( + clippy::multiple_inherent_impl, + reason = "Needed to separate NEAR functionality" +)] use calimero_context_config::types::{Application, ContextId, ContextIdentity}; use calimero_context_config::Timestamp; @@ -8,6 +12,7 @@ use near_sdk::{near, BorshStorageKey}; mod guard; mod mutate; mod query; +mod sys; use guard::Guard; @@ -64,3 +69,13 @@ impl Default for ContextConfigs { } } } + +macro_rules! _parse_input { + ($input:ident $(: $input_ty:ty)?) => { + let $input = ::near_sdk::env::input().unwrap_or_default(); + + let $input $(: $input_ty )? = ::near_sdk::serde_json::from_slice(&$input).expect("failed to parse input"); + }; +} + +use _parse_input as parse_input; diff --git a/contracts/context-config/src/mutate.rs b/contracts/context-config/src/mutate.rs index 5c75aae37..cbb7dcd0f 100644 --- a/contracts/context-config/src/mutate.rs +++ b/contracts/context-config/src/mutate.rs @@ -1,76 +1,20 @@ -#![allow( - clippy::multiple_inherent_impl, - reason = "Needed to separate NEAR functionality" -)] - -use core::{mem, time}; +use core::mem; use calimero_context_config::repr::{Repr, ReprBytes, ReprTransmute}; use calimero_context_config::types::{ Application, Capability, ContextId, ContextIdentity, Signed, SignerId, }; -use calimero_context_config::{ - ContextRequest, ContextRequestKind, Request, RequestKind, SystemRequest, Timestamp, -}; +use calimero_context_config::{ContextRequest, ContextRequestKind, Request, RequestKind}; use near_sdk::store::IterableSet; -use near_sdk::{env, near, require, serde_json}; +use near_sdk::{env, near, require}; use super::{ - Context, ContextConfigs, ContextConfigsExt, ContextPrivilegeScope, Guard, Prefix, + parse_input, Context, ContextConfigs, ContextConfigsExt, ContextPrivilegeScope, Guard, Prefix, PrivilegeScope, }; -const MIN_VALIDITY_THRESHOLD_MS: Timestamp = 5_000; - -macro_rules! parse_input { - ($input:ident $(: $input_ty:ty)?) => { - let $input = env::input().unwrap_or_default(); - - let $input $(: $input_ty )? = serde_json::from_slice(&$input).expect("failed to parse input"); - }; -} - #[near] impl ContextConfigs { - pub fn set(&mut self) { - require!( - env::predecessor_account_id() == env::current_account_id(), - "access denied" - ); - - parse_input!(request); - - match request { - SystemRequest::SetValidityThreshold { threshold_ms } => { - self.set_validity_threshold_ms(threshold_ms); - } - } - } - - pub fn erase(&mut self) { - require!( - env::signer_account_id() == env::current_account_id(), - "Not so fast, chief.." - ); - - env::log_str(&format!( - "Pre-erase storage usage: {}", - env::storage_usage() - )); - - env::log_str("Erasing contract"); - - for (_, context) in self.contexts.drain() { - drop(context.application.into_inner()); - context.members.into_inner().clear(); - } - - env::log_str(&format!( - "Post-erase storage usage: {}", - env::storage_usage() - )); - } - pub fn mutate(&mut self) { parse_input!(request: Signed>); @@ -178,8 +122,9 @@ impl ContextConfigs { let old_application = mem::replace( &mut *context .application - .get_mut(signer_id) - .expect("unable to update application"), + .get(signer_id) + .expect("unable to update application") + .get_mut(), Application::new( application.id, application.blob, @@ -208,8 +153,9 @@ impl ContextConfigs { let mut ctx_members = context .members - .get_mut(signer_id) - .expect("unable to update member list"); + .get(signer_id) + .expect("unable to update member list") + .get_mut(); for member in members { env::log_str(&format!("Added `{member}` as a member of `{context_id}`")); @@ -231,8 +177,9 @@ impl ContextConfigs { let mut ctx_members = context .members - .get_mut(signer_id) - .expect("unable to update member list"); + .get(signer_id) + .expect("unable to update member list") + .get_mut(); for member in members { let _ = ctx_members.remove(&member); @@ -271,13 +218,13 @@ impl ContextConfigs { match capability { Capability::ManageApplication => context .application - .get_mut(signer_id) + .get(signer_id) .expect("unable to update application") .priviledges() .grant(identity), Capability::ManageMembers => context .members - .get_mut(signer_id) + .get(signer_id) .expect("unable to update member list") .priviledges() .grant(identity), @@ -309,13 +256,13 @@ impl ContextConfigs { match capability { Capability::ManageApplication => context .application - .get_mut(signer_id) + .get(signer_id) .expect("unable to update application") .priviledges() .revoke(&identity), Capability::ManageMembers => context .members - .get_mut(signer_id) + .get(signer_id) .expect("unable to update member list") .priviledges() .revoke(&identity), @@ -329,17 +276,4 @@ impl ContextConfigs { )); } } - - fn set_validity_threshold_ms(&mut self, validity_threshold_ms: Timestamp) { - if validity_threshold_ms < MIN_VALIDITY_THRESHOLD_MS { - env::panic_str("invalid validity threshold"); - } - - self.config.validity_threshold_ms = validity_threshold_ms; - - env::log_str(&format!( - "Set validity threshold to `{:?}`", - time::Duration::from_millis(validity_threshold_ms) - )); - } } diff --git a/contracts/context-config/src/query.rs b/contracts/context-config/src/query.rs index 27b76ad0a..d74ebd940 100644 --- a/contracts/context-config/src/query.rs +++ b/contracts/context-config/src/query.rs @@ -1,13 +1,8 @@ -#![allow( - clippy::multiple_inherent_impl, - reason = "Needed to separate NEAR functionality" -)] - use std::collections::BTreeMap; use calimero_context_config::repr::{Repr, ReprTransmute}; use calimero_context_config::types::{ - Application, Capability, ContextId, ContextIdentity, SignerId, + Application, Capability, ContextId, ContextIdentity, Revision, SignerId, }; use near_sdk::near; @@ -24,6 +19,15 @@ impl ContextConfigs { &context.application } + pub fn application_revision(&self, context_id: Repr) -> Revision { + let context = self + .contexts + .get(&context_id) + .expect("context does not exist"); + + context.application.revision() + } + pub fn members( &self, context_id: Repr, @@ -53,6 +57,15 @@ impl ContextConfigs { context.members.contains(&identity) } + pub fn members_revision(&self, context_id: Repr) -> Revision { + let context = self + .contexts + .get(&context_id) + .expect("context does not exist"); + + context.members.revision() + } + pub fn privileges( &self, context_id: Repr, diff --git a/contracts/context-config/src/sys.rs b/contracts/context-config/src/sys.rs new file mode 100644 index 000000000..46725590f --- /dev/null +++ b/contracts/context-config/src/sys.rs @@ -0,0 +1,101 @@ +use core::time; +use std::io; + +use calimero_context_config::repr::Repr; +use calimero_context_config::types::{Application, ContextId, ContextIdentity, SignerId}; +use calimero_context_config::{SystemRequest, Timestamp}; +use near_sdk::store::{IterableMap, IterableSet}; +use near_sdk::{env, near}; + +use crate::{parse_input, Config, ContextConfigs, ContextConfigsExt}; + +const MIN_VALIDITY_THRESHOLD_MS: Timestamp = 5_000; + +#[near] +impl ContextConfigs { + #[private] + pub fn set(&mut self) { + parse_input!(request); + + match request { + SystemRequest::SetValidityThreshold { threshold_ms } => { + self.set_validity_threshold_ms(threshold_ms); + } + } + } + + #[private] + pub fn erase(&mut self) { + env::log_str(&format!( + "Pre-erase storage usage: {}", + env::storage_usage() + )); + + env::log_str("Erasing contract"); + + for (_, context) in self.contexts.drain() { + drop(context.application.into_inner()); + context.members.into_inner().clear(); + } + + env::log_str(&format!( + "Post-erase storage usage: {}", + env::storage_usage() + )); + } + + #[private] + pub fn migrate() { + // IterableMap doesn't support raw access to the underlying storage + // Which hinders migration of the data, so we have to employ this trick + + #[derive(Debug)] + #[near(serializers = [borsh])] + pub struct OldContextConfigs { + contexts: IterableMap, + config: Config, + } + + #[derive(Debug)] + #[near(serializers = [borsh])] + struct OldContext { + pub application: OldGuard>, + pub members: OldGuard>, + } + + #[derive(Debug)] + #[near(serializers = [borsh])] + pub struct OldGuard { + inner: T, + #[borsh(deserialize_with = "skipped")] + revision: u64, + priviledged: IterableSet, + } + + #[expect(clippy::unnecessary_wraps, reason = "borsh needs this")] + pub fn skipped(_reader: &mut R) -> Result { + Ok(Default::default()) + } + + let mut state = env::state_read::().expect("failed to read state"); + + for (context_id, _) in state.contexts.iter_mut() { + env::log_str(&format!("Migrating context `{}`", Repr::new(*context_id))); + } + } +} + +impl ContextConfigs { + fn set_validity_threshold_ms(&mut self, validity_threshold_ms: Timestamp) { + if validity_threshold_ms < MIN_VALIDITY_THRESHOLD_MS { + env::panic_str("invalid validity threshold"); + } + + self.config.validity_threshold_ms = validity_threshold_ms; + + env::log_str(&format!( + "Set validity threshold to `{:?}`", + time::Duration::from_millis(validity_threshold_ms) + )); + } +} diff --git a/contracts/context-config/tests/sandbox.rs b/contracts/context-config/tests/sandbox.rs index 64cc79c06..efb72f6a9 100644 --- a/contracts/context-config/tests/sandbox.rs +++ b/contracts/context-config/tests/sandbox.rs @@ -3,7 +3,9 @@ use std::collections::BTreeMap; use calimero_context_config::repr::{Repr, ReprTransmute}; -use calimero_context_config::types::{Application, Capability, ContextIdentity, Signed, SignerId}; +use calimero_context_config::types::{ + Application, Capability, ContextIdentity, Revision, Signed, SignerId, +}; use calimero_context_config::{ ContextRequest, ContextRequestKind, Request, RequestKind, SystemRequest, }; @@ -30,7 +32,7 @@ async fn main() -> eyre::Result<()> { .into_result()?; let node2 = root_account - .create_subaccount("node3") + .create_subaccount("node2") .transact() .await? .into_result()?; @@ -162,6 +164,24 @@ async fn main() -> eyre::Result<()> { assert_eq!(res.source, Default::default()); assert_eq!(res.metadata, Default::default()); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + let res: BTreeMap, Vec> = contract .view("privileges") .args_json(json!({ @@ -250,6 +270,24 @@ async fn main() -> eyre::Result<()> { assert_eq!(bob_capabilities, &[]); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 1); + let res = node1 .call(contract.id(), "mutate") .args_json(Signed::new( @@ -279,6 +317,24 @@ async fn main() -> eyre::Result<()> { ); } + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 1); + let res = node1 .call(contract.id(), "mutate") .args_json(Signed::new( @@ -306,6 +362,24 @@ async fn main() -> eyre::Result<()> { )] ); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 1); + let res = node1 .call(contract.id(), "mutate") .args_json(Signed::new( @@ -373,6 +447,24 @@ async fn main() -> eyre::Result<()> { assert_eq!(bob_capabilities, &[Capability::ManageMembers]); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 2); + let new_application_id = rng.gen::<[_; 32]>().rt()?; let new_blob_id = rng.gen::<[_; 32]>().rt()?; @@ -423,6 +515,24 @@ async fn main() -> eyre::Result<()> { assert_eq!(res.source, Default::default()); assert_eq!(res.metadata, Default::default()); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 0); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 2); + let res = node1 .call(contract.id(), "mutate") .args_json(Signed::new( @@ -468,6 +578,24 @@ async fn main() -> eyre::Result<()> { assert_eq!(res.source, Default::default()); assert_eq!(res.metadata, Default::default()); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 1); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 2); + let res = node1 .call(contract.id(), "mutate") .args_json(Signed::new( @@ -529,6 +657,24 @@ async fn main() -> eyre::Result<()> { assert_eq!(res, [alice_cx_id, carol_cx_id]); + let res = contract + .view("application_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 1); + + let res = contract + .view("members_revision") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Revision = serde_json::from_slice(&res.result)?; + + assert_eq!(res, 3); + let res = contract .call("set") .args_json(SystemRequest::SetValidityThreshold { @@ -599,3 +745,114 @@ async fn main() -> eyre::Result<()> { Ok(()) } + +#[ignore] +#[tokio::test] +async fn migration() -> eyre::Result<()> { + let worker = near_workspaces::sandbox().await?; + + let wasm_v0 = fs::read("res/calimero_context_config_near_v0.wasm").await?; + let wasm_v1 = fs::read("res/calimero_context_config_near_v1.wasm").await?; + + let mut rng = rand::thread_rng(); + + let contract_v0 = worker.dev_deploy(&wasm_v0).await?; + + let root_account = worker.root_account()?; + + let node1 = root_account + .create_subaccount("node1") + .transact() + .await? + .into_result()?; + + let alice_cx_sk = SigningKey::from_bytes(&rng.gen()); + let alice_cx_pk = alice_cx_sk.verifying_key(); + let alice_cx_id = alice_cx_pk.to_bytes().rt()?; + + let context_secret = SigningKey::from_bytes(&rng.gen()); + let context_public = context_secret.verifying_key(); + let context_id = context_public.to_bytes().rt()?; + + let application_id = rng.gen::<[_; 32]>().rt()?; + let blob_id = rng.gen::<[_; 32]>().rt()?; + + let res = node1 + .call(contract_v0.id(), "mutate") + .args_json(Signed::new( + &{ + let kind = RequestKind::Context(ContextRequest::new( + context_id, + ContextRequestKind::Add { + author_id: alice_cx_id, + application: Application::new( + application_id, + blob_id, + 0, + Default::default(), + Default::default(), + ), + }, + )); + + Request::new(context_id.rt()?, kind) + }, + |p| context_secret.sign(p), + )?) + .transact() + .await? + .into_result()?; + + assert_eq!(res.logs(), [format!("Context `{}` added", context_id)]); + + let res = contract_v0 + .view("application") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Application<'_> = serde_json::from_slice(&res.result)?; + + assert_eq!(res.id, application_id); + assert_eq!(res.blob, blob_id); + assert_eq!(res.source, Default::default()); + assert_eq!(res.metadata, Default::default()); + + let contract_v1 = contract_v0 + .as_account() + .deploy(&wasm_v1) + .await? + .into_result()?; + + let res = contract_v1 + .view("application") + .args_json(json!({ "context_id": context_id })) + .await + .expect_err("should've failed"); + + { + let err = format!("{:?}", res); + assert!(err.contains("Cannot deserialize element"), "{}", err); + } + + let migration = contract_v1 + .call("migrate") + .transact() + .await? + .into_result()?; + + dbg!(migration.logs()); + + let res = contract_v1 + .view("application") + .args_json(json!({ "context_id": context_id })) + .await?; + + let res: Application<'_> = serde_json::from_slice(&res.result)?; + + assert_eq!(res.id, application_id); + assert_eq!(res.blob, blob_id); + assert_eq!(res.source, Default::default()); + assert_eq!(res.metadata, Default::default()); + + Ok(()) +} diff --git a/crates/context/config/src/client.rs b/crates/context/config/src/client.rs index 258607eba..c3be2cb40 100644 --- a/crates/context/config/src/client.rs +++ b/crates/context/config/src/client.rs @@ -12,7 +12,9 @@ use serde_json::{json, Error as JsonError}; use thiserror::Error; use crate::repr::Repr; -use crate::types::{self, Application, Capability, ContextId, ContextIdentity, Signed, SignerId}; +use crate::types::{ + self, Application, Capability, ContextId, ContextIdentity, Revision, Signed, SignerId, +}; use crate::{ContextRequest, ContextRequestKind, Request, RequestKind}; pub mod config; @@ -305,6 +307,19 @@ impl<'a, T: Transport> ContextConfigQueryClient<'a, T> { .await } + pub async fn application_revision( + &self, + context_id: ContextId, + ) -> Result, ConfigError> { + self.read( + "application_revision", + json!({ + "context_id": Repr::new(context_id), + }), + ) + .await + } + pub async fn members( &self, context_id: ContextId, @@ -322,6 +337,19 @@ impl<'a, T: Transport> ContextConfigQueryClient<'a, T> { .await } + pub async fn members_revision( + &self, + context_id: ContextId, + ) -> Result, ConfigError> { + self.read( + "members_revision", + json!({ + "context_id": Repr::new(context_id), + }), + ) + .await + } + pub async fn privileges( &self, context_id: ContextId, diff --git a/crates/context/config/src/types.rs b/crates/context/config/src/types.rs index dbaefee36..2d6bb87b2 100644 --- a/crates/context/config/src/types.rs +++ b/crates/context/config/src/types.rs @@ -12,6 +12,8 @@ use thiserror::Error as ThisError; use crate::repr::{self, LengthMismatch, Repr, ReprBytes, ReprTransmute}; +pub type Revision = u64; + #[derive( BorshDeserialize, BorshSerialize, From 6edbe82c3241aa9898f4c3673a17b623429cc200 Mon Sep 17 00:00:00 2001 From: Fico <70634661+fbozic@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:55:15 +0100 Subject: [PATCH 52/75] feat: implement context invite & identity new command (#918) --- crates/meroctl/src/cli.rs | 8 +- crates/meroctl/src/cli/context.rs | 4 + crates/meroctl/src/cli/context/invite.rs | 60 ++++ crates/meroctl/src/cli/identity.rs | 37 +++ crates/meroctl/src/cli/identity/generate.rs | 40 +++ crates/server-primitives/src/admin.rs | 310 ++++++++++-------- crates/server/src/admin/handlers.rs | 1 + .../context/get_context_client_keys.rs | 9 +- .../context/get_context_identities.rs | 55 ++-- .../handlers/context/get_context_users.rs | 8 +- .../admin/handlers/context/join_context.rs | 11 +- .../context/update_context_application.rs | 4 +- crates/server/src/admin/handlers/identity.rs | 1 + .../identity/generate_context_identity.rs | 17 + crates/server/src/admin/service.rs | 14 +- 15 files changed, 389 insertions(+), 190 deletions(-) create mode 100644 crates/meroctl/src/cli/context/invite.rs create mode 100644 crates/meroctl/src/cli/identity.rs create mode 100644 crates/meroctl/src/cli/identity/generate.rs create mode 100644 crates/server/src/admin/handlers/identity.rs create mode 100644 crates/server/src/admin/handlers/identity/generate_context_identity.rs diff --git a/crates/meroctl/src/cli.rs b/crates/meroctl/src/cli.rs index a8ef120a6..07a970165 100644 --- a/crates/meroctl/src/cli.rs +++ b/crates/meroctl/src/cli.rs @@ -12,10 +12,12 @@ use crate::output::{Format, Output, Report}; mod app; mod context; +mod identity; mod jsonrpc; use app::AppCommand; use context::ContextCommand; +use identity::IdentityCommand; use jsonrpc::CallCommand; pub const EXAMPLES: &str = r" @@ -44,8 +46,9 @@ pub struct RootCommand { #[derive(Debug, Subcommand)] pub enum SubCommands { - Context(ContextCommand), App(AppCommand), + Context(ContextCommand), + Identity(IdentityCommand), JsonRpc(CallCommand), } @@ -81,8 +84,9 @@ impl RootCommand { let environment = Environment::new(self.args, output); let result = match self.action { - SubCommands::Context(context) => context.run(&environment).await, SubCommands::App(application) => application.run(&environment).await, + SubCommands::Context(context) => context.run(&environment).await, + SubCommands::Identity(identity) => identity.run(&environment).await, SubCommands::JsonRpc(jsonrpc) => jsonrpc.run(&environment).await, }; diff --git a/crates/meroctl/src/cli/context.rs b/crates/meroctl/src/cli/context.rs index 75dfa402a..42ebfde65 100644 --- a/crates/meroctl/src/cli/context.rs +++ b/crates/meroctl/src/cli/context.rs @@ -6,6 +6,7 @@ use eyre::Result as EyreResult; use crate::cli::context::create::CreateCommand; use crate::cli::context::delete::DeleteCommand; use crate::cli::context::get::GetCommand; +use crate::cli::context::invite::InviteCommand; use crate::cli::context::join::JoinCommand; use crate::cli::context::list::ListCommand; use crate::cli::context::watch::WatchCommand; @@ -15,6 +16,7 @@ use crate::output::Report; mod create; mod delete; mod get; +mod invite; mod join; mod list; mod watch; @@ -47,6 +49,7 @@ pub enum ContextSubCommands { List(ListCommand), Create(Box), Join(JoinCommand), + Invite(InviteCommand), Get(GetCommand), #[command(alias = "del")] Delete(DeleteCommand), @@ -68,6 +71,7 @@ impl ContextCommand { ContextSubCommands::Create(create) => create.run(environment).await, ContextSubCommands::Delete(delete) => delete.run(environment).await, ContextSubCommands::Get(get) => get.run(environment).await, + ContextSubCommands::Invite(invite) => invite.run(environment).await, ContextSubCommands::Join(join) => join.run(environment).await, ContextSubCommands::List(list) => list.run(environment).await, ContextSubCommands::Watch(watch) => watch.run(environment).await, diff --git a/crates/meroctl/src/cli/context/invite.rs b/crates/meroctl/src/cli/context/invite.rs new file mode 100644 index 000000000..50babf7d7 --- /dev/null +++ b/crates/meroctl/src/cli/context/invite.rs @@ -0,0 +1,60 @@ +use calimero_primitives::context::ContextId; +use calimero_primitives::identity::PublicKey; +use calimero_server_primitives::admin::{InviteToContextRequest, InviteToContextResponse}; +use clap::Parser; +use eyre::Result as EyreResult; +use reqwest::Client; + +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; + +#[derive(Debug, Parser)] +#[command(about = "Create invitation to a context for a invitee")] +pub struct InviteCommand { + #[clap( + value_name = "CONTEXT_ID", + help = "The id of the context for which invitation is created" + )] + pub context_id: ContextId, + + #[clap(value_name = "INVITER_ID", help = "The public key of the inviter")] + pub inviter_id: PublicKey, + + #[clap(value_name = "INVITEE_ID", help = "The public key of the invitee")] + pub invitee_id: PublicKey, +} + +impl Report for InviteToContextResponse { + fn report(&self) { + match self.data { + Some(ref payload) => { + println!("{:?}", payload) + } + None => println!("No invitation payload"), + } + } +} + +impl InviteCommand { + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; + + let response: InviteToContextResponse = do_request( + &Client::new(), + multiaddr_to_url(fetch_multiaddr(&config)?, "admin-api/dev/contexts/invite")?, + Some(InviteToContextRequest { + context_id: self.context_id, + inviter_id: self.inviter_id, + invitee_id: self.invitee_id, + }), + &config.identity, + RequestType::Post, + ) + .await?; + + environment.output.write(&response); + + Ok(()) + } +} diff --git a/crates/meroctl/src/cli/identity.rs b/crates/meroctl/src/cli/identity.rs new file mode 100644 index 000000000..59f06a2c9 --- /dev/null +++ b/crates/meroctl/src/cli/identity.rs @@ -0,0 +1,37 @@ +use clap::{Parser, Subcommand}; +use const_format::concatcp; +use eyre::Result as EyreResult; + +use crate::cli::identity::generate::GenerateCommand; +use crate::cli::Environment; + +mod generate; + +pub const EXAMPLES: &str = r" + # + $ meroctl -- --node-name node1 identity generate +"; + +#[derive(Debug, Parser)] +#[command(about = "Command for managing applications")] +#[command(after_help = concatcp!( + "Examples:", + EXAMPLES +))] +pub struct IdentityCommand { + #[command(subcommand)] + pub subcommand: IdentitySubCommands, +} + +#[derive(Debug, Subcommand)] +pub enum IdentitySubCommands { + Generate(GenerateCommand), +} + +impl IdentityCommand { + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + match self.subcommand { + IdentitySubCommands::Generate(generate) => generate.run(environment).await, + } + } +} diff --git a/crates/meroctl/src/cli/identity/generate.rs b/crates/meroctl/src/cli/identity/generate.rs new file mode 100644 index 000000000..ee56424a5 --- /dev/null +++ b/crates/meroctl/src/cli/identity/generate.rs @@ -0,0 +1,40 @@ +use calimero_server_primitives::admin::GenerateContextIdentityResponse; +use clap::Parser; +use eyre::Result as EyreResult; +use reqwest::Client; + +use crate::cli::Environment; +use crate::common::{do_request, fetch_multiaddr, load_config, multiaddr_to_url, RequestType}; +use crate::output::Report; + +#[derive(Debug, Parser)] +#[command(about = "Generate public/private key pair used for context identity")] +pub struct GenerateCommand; + +impl Report for GenerateContextIdentityResponse { + fn report(&self) { + println!("public_key: {}", self.data.public_key); + println!("private_key: {}", self.data.private_key); + } +} + +impl GenerateCommand { + pub async fn run(self, environment: &Environment) -> EyreResult<()> { + let config = load_config(&environment.args.home, &environment.args.node_name)?; + + let url = multiaddr_to_url(fetch_multiaddr(&config)?, "admin-api/dev/identity/context")?; + + let response: GenerateContextIdentityResponse = do_request( + &Client::new(), + url, + None::<()>, + &config.identity, + RequestType::Post, + ) + .await?; + + environment.output.write(&response); + + Ok(()) + } +} diff --git a/crates/server-primitives/src/admin.rs b/crates/server-primitives/src/admin.rs index b8b036b27..3fd690846 100644 --- a/crates/server-primitives/src/admin.rs +++ b/crates/server-primitives/src/admin.rs @@ -8,12 +8,11 @@ use serde_json::Value; use url::Url; #[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[expect(clippy::exhaustive_structs, reason = "Exhaustive")] pub struct Empty; // -------------------------------------------- Application API -------------------------------------------- #[derive(Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct InstallApplicationRequest { pub url: Url, pub hash: Option, @@ -21,7 +20,6 @@ pub struct InstallApplicationRequest { } impl InstallApplicationRequest { - #[must_use] pub const fn new(url: Url, hash: Option, metadata: Vec) -> Self { Self { url, @@ -32,19 +30,18 @@ impl InstallApplicationRequest { } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct ApplicationInstallResponseData { pub application_id: ApplicationId, } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct InstallApplicationResponse { pub data: ApplicationInstallResponseData, } impl InstallApplicationResponse { - #[must_use] pub const fn new(application_id: ApplicationId) -> Self { Self { data: ApplicationInstallResponseData { application_id }, @@ -53,14 +50,13 @@ impl InstallApplicationResponse { } #[derive(Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct InstallDevApplicationRequest { pub path: Utf8PathBuf, pub metadata: Vec, } impl InstallDevApplicationRequest { - #[must_use] pub const fn new(path: Utf8PathBuf, metadata: Vec) -> Self { Self { path, metadata } } @@ -68,26 +64,29 @@ impl InstallDevApplicationRequest { #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct UninstallApplicationRequest { pub application_id: ApplicationId, } +impl UninstallApplicationRequest { + pub const fn new(application_id: ApplicationId) -> Self { + Self { application_id } + } +} + #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct UninstallApplicationResponseData { pub application_id: ApplicationId, } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct UninstallApplicationResponse { pub data: UninstallApplicationResponseData, } impl UninstallApplicationResponse { - #[must_use] pub const fn new(application_id: ApplicationId) -> Self { Self { data: UninstallApplicationResponseData { application_id }, @@ -96,19 +95,18 @@ impl UninstallApplicationResponse { } #[derive(Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct ListApplicationResponseData { pub apps: Vec, } #[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct ListApplicationsResponse { pub data: ListApplicationResponseData, } impl ListApplicationsResponse { - #[must_use] pub const fn new(apps: Vec) -> Self { Self { data: ListApplicationResponseData { apps }, @@ -117,64 +115,39 @@ impl ListApplicationsResponse { } #[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct GetApplicationDetailsResponse { pub data: Application, } impl GetApplicationDetailsResponse { - #[must_use] pub const fn new(application: Application) -> Self { Self { data: application } } } #[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct GetApplicationResponse { - pub data: GetApplicationResult, -} - -impl GetApplicationResponse { - #[must_use] - pub const fn new(application: Option) -> Self { - Self { - data: GetApplicationResult { application }, - } - } -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct GetApplicationResult { +#[serde(rename_all = "camelCase")] +pub struct GetApplicationResponseData { pub application: Option, } -// -------------------------------------------- Context API -------------------------------------------- #[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct GetContextsResponse { - pub data: ContextList, +#[serde(rename_all = "camelCase")] +pub struct GetApplicationResponse { + pub data: GetApplicationResponseData, } -impl GetContextsResponse { - #[must_use] - pub const fn new(contexts: Vec) -> Self { +impl GetApplicationResponse { + pub const fn new(application: Option) -> Self { Self { - data: ContextList { contexts }, + data: GetApplicationResponseData { application }, } } } - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct ContextList { - pub contexts: Vec, -} - +// -------------------------------------------- Context API -------------------------------------------- #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct CreateContextRequest { pub application_id: ApplicationId, pub context_seed: Option, @@ -182,7 +155,6 @@ pub struct CreateContextRequest { } impl CreateContextRequest { - #[must_use] pub const fn new( application_id: ApplicationId, context_seed: Option, @@ -196,21 +168,20 @@ impl CreateContextRequest { } } -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub struct CreateContextResponseData { pub context_id: ContextId, pub member_public_key: PublicKey, } -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub struct CreateContextResponse { pub data: CreateContextResponseData, } impl CreateContextResponse { - #[must_use] pub const fn new(context_id: ContextId, member_public_key: PublicKey) -> Self { Self { data: CreateContextResponseData { @@ -228,12 +199,127 @@ pub struct DeletedContextResponseData { } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub struct DeleteContextResponse { pub data: DeletedContextResponseData, } +impl DeleteContextResponse { + pub const fn new(is_deleted: bool) -> Self { + Self { + data: DeletedContextResponseData { is_deleted }, + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextResponse { + pub data: Context, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextStorageResponseData { + pub size_in_bytes: u64, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextStorageResponse { + pub data: GetContextStorageResponseData, +} + +impl GetContextStorageResponse { + pub const fn new(size_in_bytes: u64) -> Self { + Self { + data: GetContextStorageResponseData { size_in_bytes }, + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ContextIdentitiesResponseData { + pub identities: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextIdentitiesResponse { + pub data: ContextIdentitiesResponseData, +} + +impl GetContextIdentitiesResponse { + pub const fn new(identities: Vec) -> Self { + Self { + data: ContextIdentitiesResponseData { identities }, + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextClientKeysResponseData { + pub client_keys: Vec, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextClientKeysResponse { + pub data: GetContextClientKeysResponseData, +} + +impl GetContextClientKeysResponse { + pub const fn new(client_keys: Vec) -> Self { + Self { + data: GetContextClientKeysResponseData { client_keys }, + } + } +} + #[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] +pub struct GetContextUsersResponseData { + pub context_users: Vec, +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextUsersResponse { + pub data: GetContextUsersResponseData, +} + +impl GetContextUsersResponse { + pub const fn new(context_users: Vec) -> Self { + Self { + data: GetContextUsersResponseData { context_users }, + } + } +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextsResponseData { + pub contexts: Vec, +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GetContextsResponse { + pub data: GetContextsResponseData, +} + +impl GetContextsResponse { + pub const fn new(contexts: Vec) -> Self { + Self { + data: GetContextsResponseData { contexts }, + } + } +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub struct InviteToContextRequest { pub context_id: ContextId, pub inviter_id: PublicKey, @@ -241,8 +327,6 @@ pub struct InviteToContextRequest { } impl InviteToContextRequest { - #[expect(clippy::similar_names, reason = "Acceptable here")] - #[must_use] pub const fn new(context_id: ContextId, inviter_id: PublicKey, invitee_id: PublicKey) -> Self { Self { context_id, @@ -253,27 +337,25 @@ impl InviteToContextRequest { } #[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct InviteToContextResponse { - pub invitation_payload: Option, + pub data: Option, } impl InviteToContextResponse { - #[must_use] - pub const fn new(invitation_payload: Option) -> Self { - Self { invitation_payload } + pub const fn new(payload: Option) -> Self { + Self { data: payload } } } #[derive(Clone, Debug, Serialize, Deserialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct JoinContextRequest { pub private_key: PrivateKey, pub invitation_payload: ContextInvitationPayload, } impl JoinContextRequest { - #[must_use] pub const fn new( private_key: PrivateKey, invitation_payload: ContextInvitationPayload, @@ -286,116 +368,78 @@ impl JoinContextRequest { } #[derive(Copy, Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct JoinContextResponseData { pub context_id: ContextId, pub member_public_key: PublicKey, } -impl JoinContextResponseData { - #[must_use] - pub const fn new(context_id: ContextId, member_public_key: PublicKey) -> Self { - Self { - context_id, - member_public_key, - } - } -} - #[derive(Copy, Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] +#[serde(rename_all = "camelCase")] pub struct JoinContextResponse { pub data: Option, } impl JoinContextResponse { - #[must_use] - pub const fn new(data: Option) -> Self { - Self { data } + pub fn new(data: Option<(ContextId, PublicKey)>) -> Self { + Self { + data: data.map(|(context_id, member_public_key)| JoinContextResponseData { + context_id, + member_public_key, + }), + } } } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] pub struct UpdateContextApplicationRequest { pub application_id: ApplicationId, } impl UpdateContextApplicationRequest { - #[must_use] pub const fn new(application_id: ApplicationId) -> Self { Self { application_id } } } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub struct UpdateContextApplicationResponse { pub data: Empty, } +impl UpdateContextApplicationResponse { + pub const fn new() -> Self { + Self { data: Empty {} } + } +} + +// -------------------------------------------- Identity API ---------------------------------------- #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -#[non_exhaustive] -pub struct GetContextStorageResponseData { - pub size_in_bytes: u64, +pub struct GenerateContextIdentityResponseData { + pub public_key: PublicKey, + pub private_key: PrivateKey, } #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -pub struct GetContextStorageResponse { - pub data: GetContextStorageResponseData, +pub struct GenerateContextIdentityResponse { + pub data: GenerateContextIdentityResponseData, } -impl GetContextStorageResponse { - #[must_use] - pub const fn new(size_in_bytes: u64) -> Self { +impl GenerateContextIdentityResponse { + pub const fn new(public_key: PublicKey, private_key: PrivateKey) -> Self { Self { - data: GetContextStorageResponseData { size_in_bytes }, + data: GenerateContextIdentityResponseData { + public_key, + private_key, + }, } } } -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct GetContextResponse { - pub data: Context, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ContextIdentitiesResponseData { - pub identities: Vec, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct GetContextIdentitiesResponse { - pub data: ContextIdentitiesResponseData, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct GetContextClientKeysResponseData { - pub client_keys: Vec, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct GetContextClientKeysResponse { - pub data: GetContextClientKeysResponseData, -} - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct GetContextUsersResponseData { - pub context_users: Vec, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct GetContextUsersResponse { - pub data: GetContextUsersResponseData, -} - // -------------------------------------------- Misc API -------------------------------------------- #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] @@ -561,10 +605,10 @@ pub struct JwtRefreshRequest { } #[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] #[non_exhaustive] pub struct StarknetPayload { pub signature: Vec, - #[serde(rename = "messageHash")] pub message_hash: String, } diff --git a/crates/server/src/admin/handlers.rs b/crates/server/src/admin/handlers.rs index 6f2ffaf77..a084bff81 100644 --- a/crates/server/src/admin/handlers.rs +++ b/crates/server/src/admin/handlers.rs @@ -3,4 +3,5 @@ pub mod applications; pub mod challenge; pub mod context; pub mod did; +pub mod identity; pub mod root_keys; diff --git a/crates/server/src/admin/handlers/context/get_context_client_keys.rs b/crates/server/src/admin/handlers/context/get_context_client_keys.rs index 4ff1b19be..22b2097c9 100644 --- a/crates/server/src/admin/handlers/context/get_context_client_keys.rs +++ b/crates/server/src/admin/handlers/context/get_context_client_keys.rs @@ -4,9 +4,7 @@ use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; use calimero_primitives::context::ContextId; -use calimero_server_primitives::admin::{ - GetContextClientKeysResponse, GetContextClientKeysResponseData, -}; +use calimero_server_primitives::admin::GetContextClientKeysResponse; use crate::admin::service::{parse_api_error, ApiResponse}; use crate::admin::storage::client_keys::get_context_client_key; @@ -19,11 +17,10 @@ pub async fn handler( // todo! experiment with Interior: WriteLayer let client_keys_result = get_context_client_key(&state.store.clone(), &context_id) .map_err(|err| parse_api_error(err).into_response()); + match client_keys_result { Ok(client_keys) => ApiResponse { - payload: GetContextClientKeysResponse { - data: GetContextClientKeysResponseData { client_keys }, - }, + payload: GetContextClientKeysResponse::new(client_keys), } .into_response(), Err(err) => err.into_response(), diff --git a/crates/server/src/admin/handlers/context/get_context_identities.rs b/crates/server/src/admin/handlers/context/get_context_identities.rs index 670c8972d..22e4e71af 100644 --- a/crates/server/src/admin/handlers/context/get_context_identities.rs +++ b/crates/server/src/admin/handlers/context/get_context_identities.rs @@ -4,11 +4,8 @@ use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; use calimero_primitives::context::ContextId; -use calimero_server_primitives::admin::{ - ContextIdentitiesResponseData, GetContextIdentitiesResponse, -}; +use calimero_server_primitives::admin::GetContextIdentitiesResponse; use reqwest::StatusCode; -use tracing::error; use crate::admin::service::{parse_api_error, ApiError, ApiResponse}; use crate::AdminState; @@ -22,38 +19,32 @@ pub async fn handler( .get_context(&context_id) .map_err(|err| parse_api_error(err).into_response()); - match context { - #[expect(clippy::option_if_let_else, reason = "Clearer here")] - Ok(ctx) => match ctx { - Some(context) => { - let context_identities = state - .ctx_manager - .get_context_owned_identities(context.id) - .map_err(|err| parse_api_error(err).into_response()); + let context = match context { + Ok(context) => context, + Err(err) => return err.into_response(), + }; - match context_identities { - Ok(identities) => ApiResponse { - payload: GetContextIdentitiesResponse { - data: ContextIdentitiesResponseData { identities }, - }, - } - .into_response(), - Err(err) => { - error!("Error getting context identities: {:?}", err); - ApiError { - status_code: StatusCode::INTERNAL_SERVER_ERROR, - message: "Something went wrong".into(), - } - .into_response() - } - } - } - None => ApiError { + let context = match context { + Some(context) => context, + None => { + return ApiError { status_code: StatusCode::NOT_FOUND, message: "Context not found".into(), } - .into_response(), - }, + .into_response() + } + }; + + let context_identities = state + .ctx_manager + .get_context_owned_identities(context.id) + .map_err(|err| parse_api_error(err).into_response()); + + match context_identities { + Ok(identities) => ApiResponse { + payload: GetContextIdentitiesResponse::new(identities), + } + .into_response(), Err(err) => err.into_response(), } } diff --git a/crates/server/src/admin/handlers/context/get_context_users.rs b/crates/server/src/admin/handlers/context/get_context_users.rs index 2351c85b7..eab41c72b 100644 --- a/crates/server/src/admin/handlers/context/get_context_users.rs +++ b/crates/server/src/admin/handlers/context/get_context_users.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use axum::extract::Path; use axum::response::IntoResponse; use axum::Extension; -use calimero_server_primitives::admin::{GetContextUsersResponse, GetContextUsersResponseData}; +use calimero_server_primitives::admin::GetContextUsersResponse; use crate::admin::service::ApiResponse; use crate::AdminState; @@ -13,11 +13,7 @@ pub async fn handler( Extension(_state): Extension>, ) -> impl IntoResponse { ApiResponse { - payload: GetContextUsersResponse { - data: GetContextUsersResponseData { - context_users: vec![], - }, - }, + payload: GetContextUsersResponse::new(vec![]), } .into_response() } diff --git a/crates/server/src/admin/handlers/context/join_context.rs b/crates/server/src/admin/handlers/context/join_context.rs index 27d591870..3aca588e2 100644 --- a/crates/server/src/admin/handlers/context/join_context.rs +++ b/crates/server/src/admin/handlers/context/join_context.rs @@ -2,9 +2,7 @@ use std::sync::Arc; use axum::response::IntoResponse; use axum::{Extension, Json}; -use calimero_server_primitives::admin::{ - JoinContextRequest, JoinContextResponse, JoinContextResponseData, -}; +use calimero_server_primitives::admin::{JoinContextRequest, JoinContextResponse}; use crate::admin::service::{parse_api_error, ApiResponse}; use crate::AdminState; @@ -14,7 +12,6 @@ pub async fn handler( Json(JoinContextRequest { private_key, invitation_payload, - .. }): Json, ) -> impl IntoResponse { let result = state @@ -24,10 +21,8 @@ pub async fn handler( .map_err(parse_api_error); match result { - Ok(r) => ApiResponse { - payload: JoinContextResponse::new(r.map(|(context_id, member_public_key)| { - JoinContextResponseData::new(context_id, member_public_key) - })), + Ok(result) => ApiResponse { + payload: JoinContextResponse::new(result), } .into_response(), Err(err) => err.into_response(), diff --git a/crates/server/src/admin/handlers/context/update_context_application.rs b/crates/server/src/admin/handlers/context/update_context_application.rs index 8b33e92c1..d21acf916 100644 --- a/crates/server/src/admin/handlers/context/update_context_application.rs +++ b/crates/server/src/admin/handlers/context/update_context_application.rs @@ -6,7 +6,7 @@ use axum::response::IntoResponse; use axum::{Extension, Json}; use calimero_primitives::context::ContextId; use calimero_server_primitives::admin::{ - Empty, UpdateContextApplicationRequest, UpdateContextApplicationResponse, + UpdateContextApplicationRequest, UpdateContextApplicationResponse, }; use reqwest::StatusCode; @@ -33,7 +33,7 @@ pub async fn handler( match result { Ok(()) => ApiResponse { - payload: UpdateContextApplicationResponse { data: Empty {} }, + payload: UpdateContextApplicationResponse::new(), } .into_response(), Err(err) => err.into_response(), diff --git a/crates/server/src/admin/handlers/identity.rs b/crates/server/src/admin/handlers/identity.rs new file mode 100644 index 000000000..fa0072727 --- /dev/null +++ b/crates/server/src/admin/handlers/identity.rs @@ -0,0 +1 @@ +pub mod generate_context_identity; diff --git a/crates/server/src/admin/handlers/identity/generate_context_identity.rs b/crates/server/src/admin/handlers/identity/generate_context_identity.rs new file mode 100644 index 000000000..3226045fc --- /dev/null +++ b/crates/server/src/admin/handlers/identity/generate_context_identity.rs @@ -0,0 +1,17 @@ +use std::sync::Arc; + +use axum::response::IntoResponse; +use axum::Extension; +use calimero_server_primitives::admin::GenerateContextIdentityResponse; + +use crate::admin::service::ApiResponse; +use crate::AdminState; + +pub async fn handler(Extension(state): Extension>) -> impl IntoResponse { + let private_key = state.ctx_manager.new_identity(); + + ApiResponse { + payload: GenerateContextIdentityResponse::new(private_key.public_key(), private_key), + } + .into_response() +} diff --git a/crates/server/src/admin/service.rs b/crates/server/src/admin/service.rs index 8a171e6e0..6ffe926b0 100644 --- a/crates/server/src/admin/service.rs +++ b/crates/server/src/admin/service.rs @@ -30,9 +30,11 @@ use crate::admin::handlers::applications::{ use crate::admin::handlers::challenge::request_challenge_handler; use crate::admin::handlers::context::{ create_context, delete_context, get_context, get_context_client_keys, get_context_identities, - get_context_storage, get_context_users, get_contexts, join_context, update_context_application, + get_context_storage, get_context_users, get_contexts, invite_to_context, join_context, + update_context_application, }; use crate::admin::handlers::did::fetch_did_handler; +use crate::admin::handlers::identity::generate_context_identity; use crate::admin::handlers::root_keys::{create_root_key_handler, delete_auth_keys_handler}; use crate::config::ServerConfig; use crate::middleware::auth::AuthSignatureLayer; @@ -121,8 +123,13 @@ pub(crate) fn setup( "/contexts/:context_id/identities", get(get_context_identities::handler), ) + .route("/contexts/invite", post(invite_to_context::handler)) .route("/contexts/join", post(join_context::handler)) .route("/contexts", get(get_contexts::handler)) + .route( + "/identity/context", + post(generate_context_identity::handler), + ) .route("/identity/keys", delete(delete_auth_keys_handler)) .route("/generate-jwt-token", post(generate_jwt_token_handler)) .layer(AuthSignatureLayer::new(store)) @@ -156,6 +163,7 @@ pub(crate) fn setup( "/dev/contexts", get(get_contexts::handler).post(create_context::handler), ) + .route("/dev/contexts/invite", post(invite_to_context::handler)) .route("/dev/contexts/join", post(join_context::handler)) .route( "/dev/contexts/:context_id/application", @@ -180,6 +188,10 @@ pub(crate) fn setup( get(get_context_identities::handler), ) .route("/dev/contexts/:context_id", delete(delete_context::handler)) + .route( + "/dev/identity/context", + post(generate_context_identity::handler), + ) .route_layer(from_fn(dev_mode_auth)); let admin_router = Router::new() From cf9eadd8d91aa72071642a16fa544171d5beef42 Mon Sep 17 00:00:00 2001 From: petarjuki7 <36903459+petarjuki7@users.noreply.github.com> Date: Sat, 2 Nov 2024 16:53:58 +0100 Subject: [PATCH 53/75] feat(context-client): generalize implementation (#903) Co-authored-by: Miraculous Owonubi Co-authored-by: Xabi Losada --- Cargo.lock | 2 +- crates/context/Cargo.toml | 1 - crates/context/config/Cargo.toml | 13 +- crates/context/config/src/client.rs | 482 +++--------------- crates/context/config/src/client/config.rs | 71 +-- crates/context/config/src/client/env.rs | 42 ++ .../context/config/src/client/env/config.rs | 23 + .../config/src/client/env/config/mutate.rs | 85 +++ .../src/client/env/config/mutate/methods.rs | 122 +++++ .../config/src/client/env/config/query.rs | 92 ++++ .../client/env/config/query/application.rs | 50 ++ .../env/config/query/application_revision.rs | 40 ++ .../src/client/env/config/query/has_member.rs | 41 ++ .../src/client/env/config/query/members.rs | 54 ++ .../env/config/query/members_revision.rs | 40 ++ .../src/client/env/config/query/privileges.rs | 72 +++ crates/context/config/src/client/env/proxy.rs | 23 + .../config/src/client/env/proxy/mutate.rs | 8 + .../src/client/env/proxy/mutate/propose.rs | 73 +++ .../config/src/client/env/proxy/query.rs | 19 + crates/context/config/src/client/protocol.rs | 6 + .../config/src/client/{ => protocol}/near.rs | 16 +- .../src/client/{ => protocol}/starknet.rs | 16 +- crates/context/config/src/client/relayer.rs | 5 +- crates/context/config/src/client/transport.rs | 124 +++++ crates/context/src/config.rs | 4 +- crates/context/src/lib.rs | 54 +- crates/merod/src/cli/config.rs | 13 +- crates/merod/src/cli/init.rs | 31 +- crates/merod/src/cli/relay.rs | 9 +- crates/network/src/discovery.rs | 4 - 31 files changed, 1101 insertions(+), 534 deletions(-) create mode 100644 crates/context/config/src/client/env.rs create mode 100644 crates/context/config/src/client/env/config.rs create mode 100644 crates/context/config/src/client/env/config/mutate.rs create mode 100644 crates/context/config/src/client/env/config/mutate/methods.rs create mode 100644 crates/context/config/src/client/env/config/query.rs create mode 100644 crates/context/config/src/client/env/config/query/application.rs create mode 100644 crates/context/config/src/client/env/config/query/application_revision.rs create mode 100644 crates/context/config/src/client/env/config/query/has_member.rs create mode 100644 crates/context/config/src/client/env/config/query/members.rs create mode 100644 crates/context/config/src/client/env/config/query/members_revision.rs create mode 100644 crates/context/config/src/client/env/config/query/privileges.rs create mode 100644 crates/context/config/src/client/env/proxy.rs create mode 100644 crates/context/config/src/client/env/proxy/mutate.rs create mode 100644 crates/context/config/src/client/env/proxy/mutate/propose.rs create mode 100644 crates/context/config/src/client/env/proxy/query.rs create mode 100644 crates/context/config/src/client/protocol.rs rename crates/context/config/src/client/{ => protocol}/near.rs (97%) rename crates/context/config/src/client/{ => protocol}/starknet.rs (96%) create mode 100644 crates/context/config/src/client/transport.rs diff --git a/Cargo.lock b/Cargo.lock index d780bf0c5..9dd3d106d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1138,7 +1138,6 @@ dependencies = [ "calimero-primitives", "calimero-store", "camino", - "ed25519-dalek 2.1.1", "eyre", "futures-util", "rand 0.8.5", @@ -1157,6 +1156,7 @@ dependencies = [ "bs58 0.5.1", "ed25519-dalek 2.1.1", "either", + "eyre", "near-crypto 0.26.0", "near-jsonrpc-client 0.13.0", "near-jsonrpc-primitives 0.26.0", diff --git a/crates/context/Cargo.toml b/crates/context/Cargo.toml index 86e8d3d17..ebe2494e6 100644 --- a/crates/context/Cargo.toml +++ b/crates/context/Cargo.toml @@ -8,7 +8,6 @@ license.workspace = true [dependencies] camino = { workspace = true, features = ["serde1"] } -ed25519-dalek.workspace = true eyre.workspace = true futures-util.workspace = true rand.workspace = true diff --git a/crates/context/config/Cargo.toml b/crates/context/config/Cargo.toml index 1fbebc8f5..c12185579 100644 --- a/crates/context/config/Cargo.toml +++ b/crates/context/config/Cargo.toml @@ -11,6 +11,7 @@ bs58.workspace = true borsh = { workspace = true, features = ["derive"] } ed25519-dalek.workspace = true either = { workspace = true, optional = true } +eyre = { workspace = true, optional = true } near-crypto = { workspace = true, optional = true } near-jsonrpc-client = { workspace = true, optional = true } near-jsonrpc-primitives = { workspace = true, optional = true } @@ -18,9 +19,9 @@ near-primitives = { workspace = true, optional = true } reqwest = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"] } serde_json.workspace = true -starknet.workspace = true -starknet-crypto.workspace = true -starknet-types-core.workspace = true +starknet = { workspace = true, optional = true } +starknet-crypto = { workspace = true, optional = true } +starknet-types-core = { workspace = true, optional = true } thiserror.workspace = true url = { workspace = true, optional = true } @@ -30,10 +31,14 @@ workspace = true [features] client = [ "dep:either", + "dep:eyre", "dep:near-crypto", "dep:near-jsonrpc-client", "dep:near-jsonrpc-primitives", "dep:near-primitives", "reqwest/json", - "dep:url", + "dep:starknet", + "dep:starknet-crypto", + "dep:starknet-types-core", + "url/serde", ] diff --git a/crates/context/config/src/client.rs b/crates/context/config/src/client.rs index c3be2cb40..60bc403fb 100644 --- a/crates/context/config/src/client.rs +++ b/crates/context/config/src/client.rs @@ -1,143 +1,48 @@ -use core::convert::Infallible; -use core::error::Error as CoreError; -use core::marker::PhantomData; -use core::ptr; use std::borrow::Cow; -use std::collections::BTreeMap; -use ed25519_dalek::Signature; use either::Either; -use serde::{Deserialize, Serialize}; -use serde_json::{json, Error as JsonError}; +use env::Method; use thiserror::Error; -use crate::repr::Repr; -use crate::types::{ - self, Application, Capability, ContextId, ContextIdentity, Revision, Signed, SignerId, -}; -use crate::{ContextRequest, ContextRequestKind, Request, RequestKind}; - pub mod config; -pub mod near; +pub mod env; +pub mod protocol; pub mod relayer; -pub mod starknet; - -use config::{ContextConfigClientConfig, ContextConfigClientSelectedSigner, Credentials, Protocol}; - -pub trait Transport { - type Error: CoreError; - - #[expect(async_fn_in_trait, reason = "Should be fine")] - async fn send( - &self, - request: TransportRequest<'_>, - payload: Vec, - ) -> Result, Self::Error>; -} - -impl Transport for Either { - type Error = Either; - - async fn send( - &self, - request: TransportRequest<'_>, - payload: Vec, - ) -> Result, Self::Error> { - match self { - Self::Left(left) => left.send(request, payload).await.map_err(Either::Left), - Self::Right(right) => right.send(request, payload).await.map_err(Either::Right), - } - } -} - -#[derive(Debug)] -#[non_exhaustive] -pub struct TransportRequest<'a> { - pub protocol: Protocol, - pub network_id: Cow<'a, str>, - pub contract_id: Cow<'a, str>, - pub operation: Operation<'a>, -} +pub mod transport; -impl<'a> TransportRequest<'a> { - #[must_use] - pub const fn new( - protocol: Protocol, - network_id: Cow<'a, str>, - contract_id: Cow<'a, str>, - operation: Operation<'a>, - ) -> Self { - Self { - protocol, - network_id, - contract_id, - operation, - } - } -} +use config::{ClientConfig, ClientSelectedSigner, Credentials}; +use protocol::{near, starknet, Protocol}; +use transport::{Both, Transport, TransportRequest}; -#[derive(Debug, Serialize, Deserialize)] -#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] -pub enum Operation<'a> { - Read { method: Cow<'a, str> }, - Write { method: Cow<'a, str> }, -} +pub type AnyTransport = Either< + relayer::RelayerTransport, + Both, starknet::StarknetTransport<'static>>, +>; #[derive(Clone, Debug)] -pub struct ContextConfigClient { +pub struct Client { transport: T, } -impl ContextConfigClient { +impl Client { pub const fn new(transport: T) -> Self { Self { transport } } } -pub type AnyTransport = Either< - relayer::RelayerTransport, - BothTransport, starknet::StarknetTransport<'static>>, ->; - -#[expect(clippy::exhaustive_structs, reason = "this is exhaustive")] -#[derive(Debug, Clone)] -pub struct BothTransport { - pub near: L, - pub starknet: R, -} - -impl Transport for BothTransport { - type Error = Either; - - async fn send( - &self, - request: TransportRequest<'_>, - payload: Vec, - ) -> Result, Self::Error> { - match request.protocol { - Protocol::Near => self.near.send(request, payload).await.map_err(Either::Left), - Protocol::Starknet => self - .starknet - .send(request, payload) - .await - .map_err(Either::Right), - } - } -} - -impl ContextConfigClient { +impl Client { #[must_use] - pub fn from_config(config: &ContextConfigClientConfig) -> Self { + pub fn from_config(config: &ClientConfig) -> Self { let transport = match config.signer.selected { - ContextConfigClientSelectedSigner::Relayer => { + ClientSelectedSigner::Relayer => { // If the selected signer is Relayer, use the Left variant. Either::Left(relayer::RelayerTransport::new(&relayer::RelayerConfig { url: config.signer.relayer.url.clone(), })) } - ContextConfigClientSelectedSigner::Local => Either::Right(BothTransport { - near: near::NearTransport::new(&near::NearConfig { + ClientSelectedSigner::Local => Either::Right(Both { + left: near::NearTransport::new(&near::NearConfig { networks: config .signer .local @@ -164,7 +69,7 @@ impl ContextConfigClient { }) .collect(), }), - starknet: starknet::StarknetTransport::new(&starknet::StarknetConfig { + right: starknet::StarknetTransport::new(&starknet::StarknetConfig { networks: config .signer .local @@ -197,332 +102,105 @@ impl ContextConfigClient { } } -impl ContextConfigClient { - pub const fn query<'a>( +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum ClientError { + #[error("transport error: {0}")] + Transport(T::Error), + #[error("codec error: {0}")] + Codec(#[from] eyre::Report), + #[error("unsupported protocol: {0}")] + UnsupportedProtocol(String), +} + +impl Client { + async fn send( + &self, + request: TransportRequest<'_>, + payload: Vec, + ) -> Result, T::Error> { + self.transport.send(request, payload).await + } + + pub fn query<'a, E: Environment<'a, T>>( &'a self, - protocol: Protocol, + protocol: Cow<'a, str>, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, - ) -> ContextConfigQueryClient<'a, T> { - ContextConfigQueryClient { + ) -> E::Query { + E::query(CallClient { protocol, network_id, contract_id, - transport: &self.transport, - } + client: self, + }) } - pub const fn mutate<'a>( + pub fn mutate<'a, E: Environment<'a, T>>( &'a self, - protocol: Protocol, + protocol: Cow<'a, str>, network_id: Cow<'a, str>, contract_id: Cow<'a, str>, - signer_id: SignerId, - ) -> ContextConfigMutateClient<'a, T> { - ContextConfigMutateClient { + ) -> E::Mutate { + E::mutate(CallClient { protocol, network_id, contract_id, - signer_id, - transport: &self.transport, - } + client: self, + }) } } -#[derive(Debug, Error)] -#[non_exhaustive] -pub enum ConfigError { - #[error("transport error: {0}")] - Transport(T::Error), - #[error(transparent)] - Other(#[from] types::ConfigError), +#[derive(Debug)] +pub struct CallClient<'a, T> { + protocol: Cow<'a, str>, + network_id: Cow<'a, str>, + contract_id: Cow<'a, str>, + client: &'a Client, } #[derive(Debug)] -pub struct Response { - bytes: Vec, - _priv: PhantomData, +pub enum Operation { + Read(M), + Write(M), } -impl Response { - const fn new(bytes: Vec) -> Self { - Self { - bytes, - _priv: PhantomData, - } - } - - pub fn parse<'a>(&'a self) -> Result +impl<'a, T: Transport> CallClient<'a, T> { + async fn send>( + &self, + params: Operation, + ) -> Result> where - T: Deserialize<'a>, + P: Protocol, { - serde_json::from_slice(&self.bytes) - } -} + let method = Cow::Borrowed(M::METHOD); -#[derive(Debug)] -pub struct ContextConfigQueryClient<'a, T> { - protocol: Protocol, - network_id: Cow<'a, str>, - contract_id: Cow<'a, str>, - transport: &'a T, -} - -impl<'a, T: Transport> ContextConfigQueryClient<'a, T> { - async fn read( - &self, - method: &str, - body: I, - ) -> Result, ConfigError> { - let payload = serde_json::to_vec(&body).map_err(|err| ConfigError::Other(err.into()))?; + let (operation, payload) = match params { + Operation::Read(params) => (transport::Operation::Read { method }, params.encode()?), + Operation::Write(params) => (transport::Operation::Write { method }, params.encode()?), + }; let request = TransportRequest { - protocol: self.protocol, + protocol: Cow::Borrowed(&self.protocol), network_id: Cow::Borrowed(&self.network_id), contract_id: Cow::Borrowed(&self.contract_id), - operation: Operation::Read { - method: Cow::Borrowed(method), - }, + operation, }; let response = self - .transport - .send(request, payload) - .await - .map_err(ConfigError::Transport)?; - - Ok(Response::new(response)) - } - - pub async fn application( - &self, - context_id: ContextId, - ) -> Result>, ConfigError> { - self.read( - "application", - json!({ - "context_id": Repr::new(context_id), - }), - ) - .await - } - - pub async fn application_revision( - &self, - context_id: ContextId, - ) -> Result, ConfigError> { - self.read( - "application_revision", - json!({ - "context_id": Repr::new(context_id), - }), - ) - .await - } - - pub async fn members( - &self, - context_id: ContextId, - offset: usize, - length: usize, - ) -> Result>>, ConfigError> { - self.read( - "members", - json!({ - "context_id": Repr::new(context_id), - "offset": offset, - "length": length, - }), - ) - .await - } - - pub async fn members_revision( - &self, - context_id: ContextId, - ) -> Result, ConfigError> { - self.read( - "members_revision", - json!({ - "context_id": Repr::new(context_id), - }), - ) - .await - } - - pub async fn privileges( - &self, - context_id: ContextId, - identities: &[ContextIdentity], - ) -> Result, Vec>>, ConfigError> { - let identities = unsafe { - &*(ptr::from_ref::<[ContextIdentity]>(identities) as *const [Repr]) - }; - - self.read( - "privileges", - json!({ - "context_id": Repr::new(context_id), - "identities": identities, - }), - ) - .await - } -} - -#[derive(Debug)] -pub struct ContextConfigMutateClient<'a, T> { - protocol: Protocol, - network_id: Cow<'a, str>, - contract_id: Cow<'a, str>, - signer_id: SignerId, - transport: &'a T, -} - -#[derive(Debug)] -pub struct ClientRequest<'a, 'b, T> { - client: &'a ContextConfigMutateClient<'a, T>, - kind: RequestKind<'b>, -} - -impl ClientRequest<'_, '_, T> { - pub async fn send Signature>(self, sign: F) -> Result<(), ConfigError> { - let signed = Signed::new(&Request::new(self.client.signer_id, self.kind), sign)?; - - let request = TransportRequest { - protocol: self.client.protocol, - network_id: Cow::Borrowed(&self.client.network_id), - contract_id: Cow::Borrowed(&self.client.contract_id), - operation: Operation::Write { - method: Cow::Borrowed("mutate"), - }, - }; - - let payload = serde_json::to_vec(&signed).map_err(|err| ConfigError::Other(err.into()))?; - - let _unused = self .client - .transport .send(request, payload) .await - .map_err(ConfigError::Transport)?; + .map_err(ClientError::Transport)?; - Ok(()) + M::decode(response).map_err(ClientError::Codec) } } -impl ContextConfigMutateClient<'_, T> { - #[must_use] - pub const fn add_context<'a>( - &self, - context_id: ContextId, - author_id: ContextIdentity, - application: Application<'a>, - ) -> ClientRequest<'_, 'a, T> { - let kind = RequestKind::Context(ContextRequest { - context_id: Repr::new(context_id), - kind: ContextRequestKind::Add { - author_id: Repr::new(author_id), - application, - }, - }); - - ClientRequest { client: self, kind } - } - - #[must_use] - pub const fn update_application<'a>( - &self, - context_id: ContextId, - application: Application<'a>, - ) -> ClientRequest<'_, 'a, T> { - let kind = RequestKind::Context(ContextRequest { - context_id: Repr::new(context_id), - kind: ContextRequestKind::UpdateApplication { application }, - }); - - ClientRequest { client: self, kind } - } - - #[must_use] - pub const fn add_members( - &self, - context_id: ContextId, - members: &[ContextIdentity], - ) -> ClientRequest<'_, 'static, T> { - let members = unsafe { - &*(ptr::from_ref::<[ContextIdentity]>(members) as *const [Repr]) - }; - - let kind = RequestKind::Context(ContextRequest { - context_id: Repr::new(context_id), - kind: ContextRequestKind::AddMembers { - members: Cow::Borrowed(members), - }, - }); +pub trait Environment<'a, T> { + type Query; + type Mutate; - ClientRequest { client: self, kind } - } - - #[must_use] - pub const fn remove_members( - &self, - context_id: ContextId, - members: &[ContextIdentity], - ) -> ClientRequest<'_, 'static, T> { - let members = unsafe { - &*(ptr::from_ref::<[ContextIdentity]>(members) as *const [Repr]) - }; - - let kind = RequestKind::Context(ContextRequest { - context_id: Repr::new(context_id), - kind: ContextRequestKind::RemoveMembers { - members: Cow::Borrowed(members), - }, - }); - - ClientRequest { client: self, kind } - } - - #[must_use] - pub const fn grant( - &self, - context_id: ContextId, - capabilities: &[(ContextIdentity, Capability)], - ) -> ClientRequest<'_, 'static, T> { - let capabilities = unsafe { - &*(ptr::from_ref::<[(ContextIdentity, Capability)]>(capabilities) - as *const [(Repr, Capability)]) - }; - - let kind = RequestKind::Context(ContextRequest { - context_id: Repr::new(context_id), - kind: ContextRequestKind::Grant { - capabilities: Cow::Borrowed(capabilities), - }, - }); - - ClientRequest { client: self, kind } - } - - #[must_use] - pub const fn revoke( - &self, - context_id: ContextId, - capabilities: &[(ContextIdentity, Capability)], - ) -> ClientRequest<'_, 'static, T> { - let capabilities = unsafe { - &*(ptr::from_ref::<[(ContextIdentity, Capability)]>(capabilities) - as *const [(Repr, Capability)]) - }; - - let kind = RequestKind::Context(ContextRequest { - context_id: Repr::new(context_id), - kind: ContextRequestKind::Revoke { - capabilities: Cow::Borrowed(capabilities), - }, - }); - - ClientRequest { client: self, kind } - } + fn query(client: CallClient<'a, T>) -> Self::Query; + fn mutate(client: CallClient<'a, T>) -> Self::Mutate; } diff --git a/crates/context/config/src/client/config.rs b/crates/context/config/src/client/config.rs index 3f9d539e9..1cbe3f580 100644 --- a/crates/context/config/src/client/config.rs +++ b/crates/context/config/src/client/config.rs @@ -1,73 +1,36 @@ #![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] -use core::str::FromStr; use std::collections::BTreeMap; use serde::{Deserialize, Serialize}; -use thiserror::Error; use url::Url; -use super::{near, starknet}; +use crate::client::protocol::near::Credentials as NearCredentials; +use crate::client::protocol::starknet::Credentials as StarknetCredentials; #[derive(Clone, Debug, Deserialize, Serialize)] -pub struct ContextConfigClientConfig { - pub new: ContextConfigClientNew, - pub signer: ContextConfigClientSigner, -} - -#[non_exhaustive] -#[derive(Copy, Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "lowercase")] -pub enum Protocol { - Near, - Starknet, -} - -impl Protocol { - #[must_use] - pub const fn as_str(&self) -> &'static str { - match self { - Self::Near => "near", - Self::Starknet => "starknet", - } - } -} - -#[derive(Debug, Error, Copy, Clone)] -#[error("Failed to parse protocol")] -pub struct ProtocolParseError { - _priv: (), -} - -impl FromStr for Protocol { - type Err = ProtocolParseError; - - fn from_str(input: &str) -> Result { - match input.to_lowercase().as_str() { - "near" => Ok(Self::Near), - "starknet" => Ok(Self::Starknet), - _ => Err(ProtocolParseError { _priv: () }), - } - } +pub struct ClientConfig { + pub new: ClientNew, + pub signer: ClientSigner, } #[derive(Clone, Debug, Deserialize, Serialize)] -pub struct ContextConfigClientNew { - pub protocol: Protocol, +pub struct ClientNew { + pub protocol: String, pub network: String, pub contract_id: String, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct LocalConfig { - pub near: BTreeMap, - pub starknet: BTreeMap, + pub near: BTreeMap, + pub starknet: BTreeMap, } #[derive(Clone, Debug, Deserialize, Serialize)] -pub struct ContextConfigClientSigner { +pub struct ClientSigner { #[serde(rename = "use")] - pub selected: ContextConfigClientSelectedSigner, - pub relayer: ContextConfigClientRelayerSigner, + pub selected: ClientSelectedSigner, + pub relayer: ClientRelayerSigner, #[serde(rename = "self")] pub local: LocalConfig, } @@ -75,19 +38,19 @@ pub struct ContextConfigClientSigner { #[derive(Copy, Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "lowercase")] #[non_exhaustive] -pub enum ContextConfigClientSelectedSigner { +pub enum ClientSelectedSigner { Relayer, #[serde(rename = "self")] Local, } #[derive(Clone, Debug, Deserialize, Serialize)] -pub struct ContextConfigClientRelayerSigner { +pub struct ClientRelayerSigner { pub url: Url, } #[derive(Clone, Debug, Deserialize, Serialize)] -pub struct ContextConfigClientLocalSigner { +pub struct ClientLocalSigner { pub rpc_url: Url, #[serde(flatten)] pub credentials: Credentials, @@ -97,6 +60,6 @@ pub struct ContextConfigClientLocalSigner { #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(untagged)] pub enum Credentials { - Near(near::Credentials), - Starknet(starknet::Credentials), + Near(NearCredentials), + Starknet(StarknetCredentials), } diff --git a/crates/context/config/src/client/env.rs b/crates/context/config/src/client/env.rs new file mode 100644 index 000000000..9c61da3d3 --- /dev/null +++ b/crates/context/config/src/client/env.rs @@ -0,0 +1,42 @@ +use super::protocol::Protocol; + +pub mod config; +// pub mod proxy; + +pub trait Method { + type Returns; + + const METHOD: &'static str; + + fn encode(self) -> eyre::Result>; + fn decode(response: Vec) -> eyre::Result; +} + +mod utils { + #![expect(clippy::type_repetition_in_bounds, reason = "Useful for clarity")] + + use super::Method; + use crate::client::protocol::near::Near; + use crate::client::protocol::starknet::Starknet; + use crate::client::protocol::Protocol; + use crate::client::transport::Transport; + use crate::client::{CallClient, ClientError, Operation}; + + // todo! when crates are broken up, appropriately locate this + pub(super) async fn send_near_or_starknet( + client: &CallClient<'_, T>, + params: Operation, + ) -> Result> + where + M: Method, + M: Method, + { + match &*client.protocol { + Near::PROTOCOL => client.send::(params).await, + Starknet::PROTOCOL => client.send::(params).await, + unsupported_protocol => Err(ClientError::UnsupportedProtocol( + unsupported_protocol.to_owned(), + )), + } + } +} diff --git a/crates/context/config/src/client/env/config.rs b/crates/context/config/src/client/env/config.rs new file mode 100644 index 000000000..04c95f9e6 --- /dev/null +++ b/crates/context/config/src/client/env/config.rs @@ -0,0 +1,23 @@ +use crate::client::{CallClient, Environment}; + +mod mutate; +mod query; + +use mutate::ContextConfigMutate; +use query::ContextConfigQuery; + +#[derive(Copy, Clone, Debug)] +pub enum ContextConfig {} + +impl<'a, T: 'a> Environment<'a, T> for ContextConfig { + type Query = ContextConfigQuery<'a, T>; + type Mutate = ContextConfigMutate<'a, T>; + + fn query(client: CallClient<'a, T>) -> Self::Query { + ContextConfigQuery { client } + } + + fn mutate(client: CallClient<'a, T>) -> Self::Mutate { + ContextConfigMutate { client } + } +} diff --git a/crates/context/config/src/client/env/config/mutate.rs b/crates/context/config/src/client/env/config/mutate.rs new file mode 100644 index 000000000..f45f9ba6e --- /dev/null +++ b/crates/context/config/src/client/env/config/mutate.rs @@ -0,0 +1,85 @@ +use ed25519_dalek::{Signer, SigningKey}; + +use crate::client::env::{utils, Method}; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::client::transport::Transport; +use crate::client::{CallClient, ClientError, Operation}; +use crate::repr::ReprTransmute; +use crate::types::Signed; +use crate::{Request, RequestKind}; + +pub mod methods; + +#[derive(Debug)] +pub struct ContextConfigMutate<'a, T> { + pub client: CallClient<'a, T>, +} + +#[derive(Debug)] +pub struct ContextConfigMutateRequest<'a, T> { + client: CallClient<'a, T>, + kind: RequestKind<'a>, +} + +#[derive(Debug)] +struct Mutate<'a> { + pub(crate) signing_key: [u8; 32], + pub(crate) kind: RequestKind<'a>, +} + +impl<'a> Method for Mutate<'a> { + const METHOD: &'static str = "mutate"; + + type Returns = (); + + fn encode(self) -> eyre::Result> { + let signer_sk = SigningKey::from_bytes(&self.signing_key); + + let request = Request::new(signer_sk.verifying_key().rt()?, self.kind); + + let signed = Signed::new(&request, |b| signer_sk.sign(b))?; + + let encoded = serde_json::to_vec(&signed)?; + + Ok(encoded) + } + + fn decode(response: Vec) -> eyre::Result { + serde_json::from_slice(&response).map_err(Into::into) + } +} + +impl<'a> Method for Mutate<'a> { + type Returns = (); + + const METHOD: &'static str = "mutate"; + + fn encode(self) -> eyre::Result> { + // sign the params, encode it and return + // since you will have a `Vec` here, you can + // `Vec::with_capacity(32 * calldata.len())` and then + // extend the `Vec` with each `Felt::to_bytes_le()` + // when this `Vec` makes it to `StarknetTransport`, + // reconstruct the `Vec` from it + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} + +impl<'a, T: Transport> ContextConfigMutateRequest<'a, T> { + pub async fn send(self, signing_key: [u8; 32]) -> Result<(), ClientError> { + let request = Mutate { + signing_key, + // todo! when nonces are implemented in context + // todo! config contract, we fetch it here first + // nonce: _, + kind: self.kind, + }; + + utils::send_near_or_starknet(&self.client, Operation::Write(request)).await + } +} diff --git a/crates/context/config/src/client/env/config/mutate/methods.rs b/crates/context/config/src/client/env/config/mutate/methods.rs new file mode 100644 index 000000000..836339084 --- /dev/null +++ b/crates/context/config/src/client/env/config/mutate/methods.rs @@ -0,0 +1,122 @@ +use core::ptr; + +use super::{ContextConfigMutate, ContextConfigMutateRequest}; +use crate::repr::Repr; +use crate::types::{Application, Capability, ContextId, ContextIdentity}; +use crate::{ContextRequest, ContextRequestKind, RequestKind}; + +impl<'a, T> ContextConfigMutate<'a, T> { + pub fn add_context( + self, + context_id: ContextId, + author_id: ContextIdentity, + application: Application<'a>, + ) -> ContextConfigMutateRequest<'a, T> { + ContextConfigMutateRequest { + client: self.client, + kind: RequestKind::Context(ContextRequest { + context_id: Repr::new(context_id), + kind: ContextRequestKind::Add { + author_id: Repr::new(author_id), + application, + }, + }), + } + } + + pub fn update_application( + self, + context_id: ContextId, + application: Application<'a>, + ) -> ContextConfigMutateRequest<'a, T> { + ContextConfigMutateRequest { + client: self.client, + kind: RequestKind::Context(ContextRequest { + context_id: Repr::new(context_id), + kind: ContextRequestKind::UpdateApplication { application }, + }), + } + } + + pub fn add_members( + self, + context_id: ContextId, + members: &[ContextIdentity], + ) -> ContextConfigMutateRequest<'a, T> { + let members = unsafe { + &*(ptr::from_ref::<[ContextIdentity]>(members) as *const [Repr]) + }; + + ContextConfigMutateRequest { + client: self.client, + kind: RequestKind::Context(ContextRequest { + context_id: Repr::new(context_id), + kind: ContextRequestKind::AddMembers { + members: members.into(), + }, + }), + } + } + + pub fn remove_members( + self, + context_id: ContextId, + members: &[ContextIdentity], + ) -> ContextConfigMutateRequest<'a, T> { + let members = unsafe { + &*(ptr::from_ref::<[ContextIdentity]>(members) as *const [Repr]) + }; + + ContextConfigMutateRequest { + client: self.client, + kind: RequestKind::Context(ContextRequest { + context_id: Repr::new(context_id), + kind: ContextRequestKind::RemoveMembers { + members: members.into(), + }, + }), + } + } + + pub fn grant( + self, + context_id: ContextId, + capabilities: &[(ContextIdentity, Capability)], + ) -> ContextConfigMutateRequest<'a, T> { + let capabilities = unsafe { + &*(ptr::from_ref::<[(ContextIdentity, Capability)]>(capabilities) + as *const [(Repr, Capability)]) + }; + + ContextConfigMutateRequest { + client: self.client, + kind: RequestKind::Context(ContextRequest { + context_id: Repr::new(context_id), + kind: ContextRequestKind::Grant { + capabilities: capabilities.into(), + }, + }), + } + } + + pub fn revoke( + self, + context_id: ContextId, + capabilities: &[(ContextIdentity, Capability)], + ) -> ContextConfigMutateRequest<'a, T> { + let capabilities = unsafe { + &*(ptr::from_ref::<[(ContextIdentity, Capability)]>(capabilities) + as *const [(Repr, Capability)]) + }; + + ContextConfigMutateRequest { + client: self.client, + kind: RequestKind::Context(ContextRequest { + context_id: Repr::new(context_id), + kind: ContextRequestKind::Revoke { + capabilities: capabilities.into(), + }, + }), + } + } +} diff --git a/crates/context/config/src/client/env/config/query.rs b/crates/context/config/src/client/env/config/query.rs new file mode 100644 index 000000000..fd216d3cc --- /dev/null +++ b/crates/context/config/src/client/env/config/query.rs @@ -0,0 +1,92 @@ +use std::collections::BTreeMap; + +use crate::client::env::utils; +use crate::client::transport::Transport; +use crate::client::{CallClient, ClientError, Operation}; +use crate::repr::Repr; +use crate::types::{Application, Capability, ContextId, ContextIdentity, Revision, SignerId}; + +pub mod application; +pub mod application_revision; +pub mod has_member; +pub mod members; +pub mod members_revision; +pub mod privileges; + +#[derive(Debug)] +pub struct ContextConfigQuery<'a, T> { + pub client: CallClient<'a, T>, +} + +impl<'a, T: Transport> ContextConfigQuery<'a, T> { + pub async fn application( + &self, + context_id: ContextId, + ) -> Result, ClientError> { + let params = application::ApplicationRequest { + context_id: Repr::new(context_id), + }; + + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await + } + + pub async fn application_revision( + &self, + context_id: ContextId, + ) -> Result> { + let params = application_revision::ApplicationRevisionRequest { + context_id: Repr::new(context_id), + }; + + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await + } + + pub async fn members( + &self, + context_id: ContextId, + offset: usize, + length: usize, + ) -> Result, ClientError> { + let params = members::MembersRequest { + context_id: Repr::new(context_id), + offset, + length, + }; + + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await + } + + pub async fn has_member( + &self, + context_id: ContextId, + identity: ContextIdentity, + ) -> Result> { + let params = has_member::HasMemberRequest { + context_id: Repr::new(context_id), + identity: Repr::new(identity), + }; + + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await + } + + pub async fn members_revision( + &self, + context_id: ContextId, + ) -> Result> { + let params = members_revision::MembersRevisionRequest { + context_id: Repr::new(context_id), + }; + + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await + } + + pub async fn privileges( + &self, + context_id: ContextId, + identities: &[ContextIdentity], + ) -> Result>, ClientError> { + let params = privileges::PrivilegesRequest::new(context_id, identities); + + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await + } +} diff --git a/crates/context/config/src/client/env/config/query/application.rs b/crates/context/config/src/client/env/config/query/application.rs new file mode 100644 index 000000000..51873f281 --- /dev/null +++ b/crates/context/config/src/client/env/config/query/application.rs @@ -0,0 +1,50 @@ +use serde::Serialize; + +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::repr::Repr; +use crate::types::{Application, ApplicationMetadata, ApplicationSource, ContextId}; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct ApplicationRequest { + pub(super) context_id: Repr, +} + +impl Method for ApplicationRequest { + const METHOD: &'static str = "application"; + + type Returns = Application<'static>; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + let application: Application<'_> = serde_json::from_slice(&response)?; + + Ok(Application::new( + application.id, + application.blob, + application.size, + ApplicationSource(application.source.0.into_owned().into()), + ApplicationMetadata(Repr::new( + application.metadata.0.into_inner().into_owned().into(), + )), + )) + } +} + +impl Method for ApplicationRequest { + type Returns = Application<'static>; + + const METHOD: &'static str = "application"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/config/query/application_revision.rs b/crates/context/config/src/client/env/config/query/application_revision.rs new file mode 100644 index 000000000..2312e0824 --- /dev/null +++ b/crates/context/config/src/client/env/config/query/application_revision.rs @@ -0,0 +1,40 @@ +use serde::Serialize; + +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::repr::Repr; +use crate::types::{ContextId, Revision}; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct ApplicationRevisionRequest { + pub(super) context_id: Repr, +} + +impl Method for ApplicationRevisionRequest { + const METHOD: &'static str = "application_revision"; + + type Returns = Revision; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + serde_json::from_slice(&response).map_err(Into::into) + } +} + +impl Method for ApplicationRevisionRequest { + type Returns = Revision; + + const METHOD: &'static str = "application_revision"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/config/query/has_member.rs b/crates/context/config/src/client/env/config/query/has_member.rs new file mode 100644 index 000000000..2e9c91bad --- /dev/null +++ b/crates/context/config/src/client/env/config/query/has_member.rs @@ -0,0 +1,41 @@ +use serde::Serialize; + +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::repr::Repr; +use crate::types::{ContextId, ContextIdentity}; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct HasMemberRequest { + pub(super) context_id: Repr, + pub(super) identity: Repr, +} + +impl Method for HasMemberRequest { + const METHOD: &'static str = "has_member"; + + type Returns = bool; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + serde_json::from_slice(&response).map_err(Into::into) + } +} + +impl Method for HasMemberRequest { + type Returns = bool; + + const METHOD: &'static str = "has_member"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/config/query/members.rs b/crates/context/config/src/client/env/config/query/members.rs new file mode 100644 index 000000000..6d18930f2 --- /dev/null +++ b/crates/context/config/src/client/env/config/query/members.rs @@ -0,0 +1,54 @@ +use core::mem; + +use serde::Serialize; + +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::repr::Repr; +use crate::types::{ContextId, ContextIdentity}; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct MembersRequest { + pub(super) context_id: Repr, + pub(super) offset: usize, + pub(super) length: usize, +} + +impl Method for MembersRequest { + const METHOD: &'static str = "members"; + + type Returns = Vec; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + let members: Vec> = serde_json::from_slice(&response)?; + + // safety: `Repr` is a transparent wrapper around `T` + #[expect( + clippy::transmute_undefined_repr, + reason = "Repr is a transparent wrapper around T" + )] + let members = + unsafe { mem::transmute::>, Vec>(members) }; + + Ok(members) + } +} + +impl Method for MembersRequest { + type Returns = Vec; + + const METHOD: &'static str = "members"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/config/query/members_revision.rs b/crates/context/config/src/client/env/config/query/members_revision.rs new file mode 100644 index 000000000..df4191ad8 --- /dev/null +++ b/crates/context/config/src/client/env/config/query/members_revision.rs @@ -0,0 +1,40 @@ +use serde::Serialize; + +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::repr::Repr; +use crate::types::{ContextId, Revision}; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct MembersRevisionRequest { + pub(super) context_id: Repr, +} + +impl Method for MembersRevisionRequest { + const METHOD: &'static str = "members_revision"; + + type Returns = Revision; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + serde_json::from_slice(&response).map_err(Into::into) + } +} + +impl Method for MembersRevisionRequest { + type Returns = Revision; + + const METHOD: &'static str = "members_revision"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/config/query/privileges.rs b/crates/context/config/src/client/env/config/query/privileges.rs new file mode 100644 index 000000000..61e7b923b --- /dev/null +++ b/crates/context/config/src/client/env/config/query/privileges.rs @@ -0,0 +1,72 @@ +use core::{mem, ptr}; +use std::collections::BTreeMap; + +use serde::Serialize; + +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::repr::Repr; +use crate::types::{Capability, ContextId, ContextIdentity, SignerId}; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct PrivilegesRequest<'a> { + pub(super) context_id: Repr, + pub(super) identities: &'a [Repr], +} + +impl<'a> PrivilegesRequest<'a> { + pub const fn new(context_id: ContextId, identities: &'a [ContextIdentity]) -> Self { + let identities = unsafe { + &*(ptr::from_ref::<[ContextIdentity]>(identities) as *const [Repr]) + }; + + Self { + context_id: Repr::new(context_id), + identities, + } + } +} + +impl<'a> Method for PrivilegesRequest<'a> { + const METHOD: &'static str = "privileges"; + + type Returns = BTreeMap>; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + let privileges: BTreeMap, Vec> = + serde_json::from_slice(&response)?; + + // safety: `Repr` is a transparent wrapper around `T` + let privileges = unsafe { + #[expect( + clippy::transmute_undefined_repr, + reason = "Repr is a transparent wrapper around T" + )] + mem::transmute::< + BTreeMap, Vec>, + BTreeMap>, + >(privileges) + }; + + Ok(privileges) + } +} + +impl<'a> Method for PrivilegesRequest<'a> { + type Returns = BTreeMap>; + + const METHOD: &'static str = "privileges"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/proxy.rs b/crates/context/config/src/client/env/proxy.rs new file mode 100644 index 000000000..684c6f583 --- /dev/null +++ b/crates/context/config/src/client/env/proxy.rs @@ -0,0 +1,23 @@ +use crate::client::{CallClient, Environment}; + +mod mutate; +mod query; + +use mutate::ContextProxyMutate; +use query::ContextProxyQuery; + +#[derive(Copy, Clone, Debug)] +pub enum ContextProxy {} + +impl<'a, T: 'a> Environment<'a, T> for ContextProxy { + type Query = ContextProxyQuery<'a, T>; + type Mutate = ContextProxyMutate<'a, T>; + + fn query(_client: CallClient<'a, T>) -> Self::Query { + todo!() + } + + fn mutate(_client: CallClient<'a, T>) -> Self::Mutate { + todo!() + } +} diff --git a/crates/context/config/src/client/env/proxy/mutate.rs b/crates/context/config/src/client/env/proxy/mutate.rs new file mode 100644 index 000000000..3d86f6a4d --- /dev/null +++ b/crates/context/config/src/client/env/proxy/mutate.rs @@ -0,0 +1,8 @@ +use crate::client::CallClient; + +mod propose; + +#[derive(Debug)] +pub struct ContextProxyMutate<'a, T> { + client: CallClient<'a, T>, +} diff --git a/crates/context/config/src/client/env/proxy/mutate/propose.rs b/crates/context/config/src/client/env/proxy/mutate/propose.rs new file mode 100644 index 000000000..794e24d38 --- /dev/null +++ b/crates/context/config/src/client/env/proxy/mutate/propose.rs @@ -0,0 +1,73 @@ +use super::ContextProxyMutate; +use crate::client::env::{utils, Method}; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::client::transport::Transport; +use crate::client::{CallClient, Error, Operation}; + +// todo! this should be replaced with primitives lib +#[derive(Debug)] +pub enum Proposal { + Transfer { recipient: String, amount: u64 }, + // __ +} + +impl<'a, T> ContextProxyMutate<'a, T> { + pub fn propose(self, proposal: Proposal) -> ContextProxyProposeRequest<'a, T> { + ContextProxyProposeRequest { + client: self.client, + proposal, + } + } +} + +#[derive(Debug)] +pub struct ContextProxyProposeRequest<'a, T> { + client: CallClient<'a, T>, + proposal: Proposal, +} + +struct Propose { + signing_key: [u8; 32], + proposal: Proposal, +} + +impl Method for Propose { + const METHOD: &'static str = "propose"; + + type Returns = (); + + fn encode(self) -> eyre::Result> { + // sign the params, encode it and return + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} + +impl Method for Propose { + type Returns = (); + + const METHOD: &'static str = "propose"; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} + +impl<'a, T: Transport> ContextProxyProposeRequest<'a, T> { + pub async fn send(self, signing_key: [u8; 32]) -> Result<(), Error> { + let request = Propose { + signing_key, + proposal: self.proposal, + }; + + utils::send_near_or_starknet(&self.client, Operation::Write(request)).await + } +} diff --git a/crates/context/config/src/client/env/proxy/query.rs b/crates/context/config/src/client/env/proxy/query.rs new file mode 100644 index 000000000..090c064be --- /dev/null +++ b/crates/context/config/src/client/env/proxy/query.rs @@ -0,0 +1,19 @@ +use crate::client::transport::Transport; +use crate::client::{CallClient, Error}; + +#[derive(Debug)] +pub struct ContextProxyQuery<'a, T> { + client: CallClient<'a, T>, +} + +type ProposalId = [u8; 32]; + +impl<'a, T: Transport> ContextProxyQuery<'a, T> { + pub async fn proposals( + &self, + _offset: usize, + _length: usize, + ) -> Result, Error> { + todo!() + } +} diff --git a/crates/context/config/src/client/protocol.rs b/crates/context/config/src/client/protocol.rs new file mode 100644 index 000000000..ceb4b50f5 --- /dev/null +++ b/crates/context/config/src/client/protocol.rs @@ -0,0 +1,6 @@ +pub mod near; +pub mod starknet; + +pub trait Protocol { + const PROTOCOL: &'static str; +} diff --git a/crates/context/config/src/client/near.rs b/crates/context/config/src/client/protocol/near.rs similarity index 97% rename from crates/context/config/src/client/near.rs rename to crates/context/config/src/client/protocol/near.rs index 063a970f5..2e480df66 100644 --- a/crates/context/config/src/client/near.rs +++ b/crates/context/config/src/client/protocol/near.rs @@ -1,5 +1,3 @@ -#![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] - use std::borrow::Cow; use std::collections::BTreeMap; use std::time; @@ -26,7 +24,19 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; use url::Url; -use super::{Operation, Transport, TransportRequest}; +use super::Protocol; +use crate::client::transport::{AssociatedTransport, Operation, Transport, TransportRequest}; + +#[derive(Copy, Clone, Debug)] +pub enum Near {} + +impl Protocol for Near { + const PROTOCOL: &'static str = "near"; +} + +impl AssociatedTransport for NearTransport<'_> { + type Protocol = Near; +} #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(try_from = "serde_creds::Credentials")] diff --git a/crates/context/config/src/client/starknet.rs b/crates/context/config/src/client/protocol/starknet.rs similarity index 96% rename from crates/context/config/src/client/starknet.rs rename to crates/context/config/src/client/protocol/starknet.rs index f29746f1e..fb7f31ac3 100644 --- a/crates/context/config/src/client/starknet.rs +++ b/crates/context/config/src/client/protocol/starknet.rs @@ -1,5 +1,3 @@ -#![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] - use core::str::FromStr; use std::borrow::Cow; use std::collections::BTreeMap; @@ -14,7 +12,19 @@ use starknet::providers::{JsonRpcClient, Provider, Url}; use starknet::signers::{LocalWallet, SigningKey}; use thiserror::Error; -use super::{Operation, Transport, TransportRequest}; +use super::Protocol; +use crate::client::transport::{AssociatedTransport, Operation, Transport, TransportRequest}; + +#[derive(Copy, Clone, Debug)] +pub enum Starknet {} + +impl Protocol for Starknet { + const PROTOCOL: &'static str = "starknet"; +} + +impl AssociatedTransport for StarknetTransport<'_> { + type Protocol = Starknet; +} #[derive(Copy, Clone, Debug, Deserialize, Serialize)] #[serde(try_from = "serde_creds::Credentials")] diff --git a/crates/context/config/src/client/relayer.rs b/crates/context/config/src/client/relayer.rs index 91f3431dc..33ae0600c 100644 --- a/crates/context/config/src/client/relayer.rs +++ b/crates/context/config/src/client/relayer.rs @@ -3,8 +3,7 @@ use std::borrow::Cow; use serde::{Deserialize, Serialize}; use url::Url; -use super::config::Protocol; -use super::{Operation, Transport, TransportRequest}; +use super::transport::{Operation, Transport, TransportRequest}; #[derive(Debug)] #[non_exhaustive] @@ -33,7 +32,7 @@ impl RelayerTransport { #[derive(Debug, Serialize, Deserialize)] #[non_exhaustive] pub struct RelayRequest<'a> { - pub protocol: Protocol, + pub protocol: Cow<'a, str>, pub network_id: Cow<'a, str>, pub contract_id: Cow<'a, str>, pub operation: Operation<'a>, diff --git a/crates/context/config/src/client/transport.rs b/crates/context/config/src/client/transport.rs new file mode 100644 index 000000000..af7dbfb38 --- /dev/null +++ b/crates/context/config/src/client/transport.rs @@ -0,0 +1,124 @@ +use core::error::Error; +use std::borrow::Cow; + +use either::Either; +use serde::{Deserialize, Serialize}; +use thiserror::Error; + +use super::protocol::Protocol; + +pub trait Transport { + type Error: Error; + + #[expect(async_fn_in_trait, reason = "Should be fine")] + async fn send( + &self, + request: TransportRequest<'_>, + payload: Vec, + ) -> Result, Self::Error>; +} + +impl Transport for Either { + type Error = Either; + + async fn send( + &self, + request: TransportRequest<'_>, + payload: Vec, + ) -> Result, Self::Error> { + match self { + Self::Left(left) => left.send(request, payload).await.map_err(Either::Left), + Self::Right(right) => right.send(request, payload).await.map_err(Either::Right), + } + } +} + +#[derive(Debug)] +#[non_exhaustive] +pub struct TransportRequest<'a> { + pub protocol: Cow<'a, str>, + pub network_id: Cow<'a, str>, + pub contract_id: Cow<'a, str>, + pub operation: Operation<'a>, +} + +impl<'a> TransportRequest<'a> { + #[must_use] + pub const fn new( + protocol: Cow<'a, str>, + network_id: Cow<'a, str>, + contract_id: Cow<'a, str>, + operation: Operation<'a>, + ) -> Self { + Self { + protocol, + network_id, + contract_id, + operation, + } + } +} + +#[derive(Debug, Serialize, Deserialize)] +#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] +pub enum Operation<'a> { + Read { method: Cow<'a, str> }, + Write { method: Cow<'a, str> }, +} + +pub trait AssociatedTransport: Transport { + type Protocol: Protocol; + + #[inline] + #[must_use] + fn protocol() -> &'static str { + Self::Protocol::PROTOCOL + } +} + +#[expect(clippy::exhaustive_structs, reason = "this is exhaustive")] +#[derive(Debug, Clone)] +pub struct Both { + pub left: L, + pub right: R, +} + +#[derive(Debug, Error)] +pub enum BothError { + #[error("left error: {0}")] + Left(L), + #[error("right error: {0}")] + Right(R), + #[error("unsupported protocol: {0}")] + UnsupportedProtocol(String), +} + +impl Transport for Both +where + L: AssociatedTransport, + R: AssociatedTransport, +{ + type Error = BothError; + + async fn send( + &self, + request: TransportRequest<'_>, + payload: Vec, + ) -> Result, Self::Error> { + if request.protocol == L::protocol() { + self.left + .send(request, payload) + .await + .map_err(BothError::Left) + } else if request.protocol == R::protocol() { + self.right + .send(request, payload) + .await + .map_err(BothError::Right) + } else { + return Err(BothError::UnsupportedProtocol( + request.protocol.into_owned(), + )); + } + } +} diff --git a/crates/context/src/config.rs b/crates/context/src/config.rs index e80231db3..2290f5bbf 100644 --- a/crates/context/src/config.rs +++ b/crates/context/src/config.rs @@ -1,10 +1,10 @@ #![allow(clippy::exhaustive_structs, reason = "TODO: Allowed until reviewed")] -use calimero_context_config::client::config::ContextConfigClientConfig; +use calimero_context_config::client::config::ClientConfig; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ContextConfig { #[serde(rename = "config")] - pub client: ContextConfigClientConfig, + pub client: ClientConfig, } diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index 71d55b179..ba43746f4 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -7,8 +7,9 @@ use std::io::Error as IoError; use std::sync::Arc; use calimero_blobstore::{Blob, BlobManager, Size}; -use calimero_context_config::client::config::ContextConfigClientConfig; -use calimero_context_config::client::{AnyTransport, ContextConfigClient}; +use calimero_context_config::client::config::ClientConfig; +use calimero_context_config::client::env::config::ContextConfig as ContextConfigEnv; +use calimero_context_config::client::{AnyTransport, Client as ExternalClient}; use calimero_context_config::repr::{Repr, ReprBytes, ReprTransmute}; use calimero_context_config::types::{ Application as ApplicationConfig, ApplicationMetadata as ApplicationMetadataConfig, @@ -34,13 +35,11 @@ use calimero_store::types::{ }; use calimero_store::Store; use camino::Utf8PathBuf; -use ed25519_dalek::ed25519::signature::SignerMut; -use ed25519_dalek::SigningKey; use eyre::{bail, Result as EyreResult}; use futures_util::{AsyncRead, TryStreamExt}; use rand::rngs::StdRng; use rand::SeedableRng; -use reqwest::{Client, Url}; +use reqwest::{Client as ReqClient, Url}; use tokio::fs::File; use tokio::sync::{oneshot, RwLock}; use tokio_util::compat::TokioAsyncReadCompatExt; @@ -53,8 +52,8 @@ use config::ContextConfig; #[derive(Clone, Debug)] pub struct ContextManager { store: Store, - client_config: ContextConfigClientConfig, - config_client: ContextConfigClient, + client_config: ClientConfig, + config_client: ExternalClient, blob_manager: BlobManager, network_client: NetworkClient, server_sender: ServerSender, @@ -75,7 +74,7 @@ impl ContextManager { network_client: NetworkClient, ) -> EyreResult { let client_config = config.client.clone(); - let config_client = ContextConfigClient::from_config(&client_config); + let config_client = ExternalClient::from_config(&client_config); let this = Self { store, @@ -204,11 +203,10 @@ impl ContextManager { } this.config_client - .mutate( - this.client_config.new.protocol, + .mutate::( + this.client_config.new.protocol.as_str().into(), this.client_config.new.network.as_str().into(), this.client_config.new.contract_id.as_str().into(), - context.id.rt().expect("infallible conversion"), ) .add_context( context.id.rt().expect("infallible conversion"), @@ -224,7 +222,7 @@ impl ContextManager { ApplicationMetadataConfig(Repr::new(application.metadata.into())), ), ) - .send(|b| SigningKey::from_bytes(&context_secret).sign(b)) + .send(context.id.rt().expect("infallible conversion")) .await?; Ok((context.id, identity_secret.public_key())) @@ -316,9 +314,11 @@ impl ContextManager { return Ok(None); } - let client = - self.config_client - .query(protocol.parse()?, network_id.into(), contract_id.into()); + let client = self.config_client.query::( + protocol.into(), + network_id.into(), + contract_id.into(), + ); for (offset, length) in (0..).map(|i| (100_usize.saturating_mul(i), 100)) { let members = client @@ -327,8 +327,7 @@ impl ContextManager { offset, length, ) - .await? - .parse()?; + .await?; if members.is_empty() { break; @@ -349,12 +348,10 @@ impl ContextManager { bail!("unable to join context: not a member, ask for an invite") }; - let response = client + let application = client .application(context_id.rt().expect("infallible conversion")) .await?; - let application = response.parse()?; - let context = Context::new( context_id, application.id.as_bytes().into(), @@ -415,17 +412,16 @@ impl ContextManager { }; self.config_client - .mutate( - context_config.protocol.parse()?, + .mutate::( + context_config.protocol.as_ref().into(), context_config.network.as_ref().into(), context_config.contract.as_ref().into(), - inviter_id.rt().expect("infallible conversion"), ) .add_members( context_id.rt().expect("infallible conversion"), &[invitee_id.rt().expect("infallible conversion")], ) - .send(|b| SigningKey::from_bytes(&requester_secret).sign(b)) + .send(requester_secret) .await?; let invitation_payload = ContextInvitationPayload::new( @@ -773,7 +769,7 @@ impl ContextManager { ) -> EyreResult { let uri = url.as_str().parse()?; - let response = Client::new().get(url).send().await?; + let response = ReqClient::new().get(url).send().await?; let expected_size = response.content_length(); @@ -857,18 +853,16 @@ impl ContextManager { } pub async fn get_latest_application(&self, context_id: ContextId) -> EyreResult { - let client = self.config_client.query( - self.client_config.new.protocol, + let client = self.config_client.query::( + self.client_config.new.protocol.as_str().into(), self.client_config.new.network.as_str().into(), self.client_config.new.contract_id.as_str().into(), ); - let response = client + let application = client .application(context_id.rt().expect("infallible conversion")) .await?; - let application = response.parse()?; - Ok(Application::new( application.id.as_bytes().into(), application.blob.as_bytes().into(), diff --git a/crates/merod/src/cli/config.rs b/crates/merod/src/cli/config.rs index 26d55cab0..303c987b6 100644 --- a/crates/merod/src/cli/config.rs +++ b/crates/merod/src/cli/config.rs @@ -3,7 +3,6 @@ use core::net::IpAddr; use std::fs::{read_to_string, write}; -use calimero_context_config::client::config::Protocol as CoreProtocol; use calimero_network::config::BootstrapNodes; use clap::{Args, Parser, ValueEnum}; use eyre::{eyre, Result as EyreResult}; @@ -14,18 +13,16 @@ use tracing::info; use crate::cli; #[derive(Copy, Clone, Debug, ValueEnum)] -#[value(rename_all = "lowercase")] pub enum ConfigProtocol { Near, Starknet, } -// Implement conversion from CLI Protocol to Core Protocol -impl From for CoreProtocol { - fn from(protocol: ConfigProtocol) -> Self { - match protocol { - ConfigProtocol::Near => Self::Near, - ConfigProtocol::Starknet => Self::Starknet, +impl ConfigProtocol { + pub fn as_str(&self) -> &str { + match self { + ConfigProtocol::Near => "near", + ConfigProtocol::Starknet => "starknet", } } } diff --git a/crates/merod/src/cli/init.rs b/crates/merod/src/cli/init.rs index 76c29c400..255066d10 100644 --- a/crates/merod/src/cli/init.rs +++ b/crates/merod/src/cli/init.rs @@ -7,11 +7,12 @@ use calimero_config::{ }; use calimero_context::config::ContextConfig; use calimero_context_config::client::config::{ - ContextConfigClientConfig, ContextConfigClientLocalSigner, ContextConfigClientNew, - ContextConfigClientRelayerSigner, ContextConfigClientSelectedSigner, ContextConfigClientSigner, - Credentials, LocalConfig, + ClientConfig, ClientLocalSigner, ClientNew, ClientRelayerSigner, ClientSelectedSigner, + ClientSigner, Credentials, LocalConfig, +}; +use calimero_context_config::client::protocol::{ + near as near_protocol, starknet as starknet_protocol, }; -use calimero_context_config::client::{near, starknet as starknetCredentials}; use calimero_network::config::{ BootstrapConfig, BootstrapNodes, CatchupConfig, DiscoveryConfig, RelayConfig, RendezvousConfig, SwarmConfig, @@ -177,10 +178,10 @@ impl InitCommand { StoreConfigFile::new("data".into()), BlobStoreConfig::new("blobs".into()), ContextConfig { - client: ContextConfigClientConfig { - signer: ContextConfigClientSigner { - selected: ContextConfigClientSelectedSigner::Relayer, - relayer: ContextConfigClientRelayerSigner { url: relayer }, + client: ClientConfig { + signer: ClientSigner { + selected: ClientSelectedSigner::Relayer, + relayer: ClientRelayerSigner { url: relayer }, local: LocalConfig { near: [ ( @@ -221,12 +222,12 @@ impl InitCommand { .collect(), }, }, - new: ContextConfigClientNew { + new: ClientNew { network: match self.protocol { ConfigProtocol::Near => "testnet".into(), ConfigProtocol::Starknet => "sepolia".into(), }, - protocol: self.protocol.into(), + protocol: self.protocol.as_str().to_owned(), contract_id: match self.protocol { ConfigProtocol::Near => "calimero-context-config.testnet".parse()?, ConfigProtocol::Starknet => { @@ -278,16 +279,16 @@ impl InitCommand { fn generate_local_signer( rpc_url: Url, config_protocol: ConfigProtocol, -) -> EyreResult { +) -> EyreResult { match config_protocol { ConfigProtocol::Near => { let secret_key = SecretKey::from_random(KeyType::ED25519); let public_key = secret_key.public_key(); let account_id = public_key.unwrap_as_ed25519().0; - Ok(ContextConfigClientLocalSigner { + Ok(ClientLocalSigner { rpc_url, - credentials: Credentials::Near(near::Credentials { + credentials: Credentials::Near(near_protocol::Credentials { account_id: hex::encode(account_id).parse()?, public_key, secret_key, @@ -299,9 +300,9 @@ fn generate_local_signer( let secret_key = SigningKey::secret_scalar(&keypair); let public_key = keypair.verifying_key().scalar(); - Ok(ContextConfigClientLocalSigner { + Ok(ClientLocalSigner { rpc_url, - credentials: Credentials::Starknet(starknetCredentials::Credentials { + credentials: Credentials::Starknet(starknet_protocol::Credentials { account_id: public_key, public_key, secret_key, diff --git a/crates/merod/src/cli/relay.rs b/crates/merod/src/cli/relay.rs index f43b8e5fa..f52fa8805 100644 --- a/crates/merod/src/cli/relay.rs +++ b/crates/merod/src/cli/relay.rs @@ -9,8 +9,9 @@ use axum::routing::post; use axum::{Json, Router}; use calimero_config::ConfigFile; use calimero_context_config::client::config::Credentials; +use calimero_context_config::client::protocol::{near, starknet}; use calimero_context_config::client::relayer::RelayRequest; -use calimero_context_config::client::{near, starknet, BothTransport, Transport, TransportRequest}; +use calimero_context_config::client::transport::{Both, Transport, TransportRequest}; use clap::{Parser, ValueEnum}; use eyre::{bail, Result as EyreResult}; use futures_util::FutureExt; @@ -111,9 +112,9 @@ impl RelayCommand { .collect::>()?, }); - let both_transport = BothTransport { - near: near_transport, - starknet: starknet_transport, + let both_transport = Both { + left: near_transport, + right: starknet_transport, }; let handle = async move { diff --git a/crates/network/src/discovery.rs b/crates/network/src/discovery.rs index a01668dbe..2ab669277 100644 --- a/crates/network/src/discovery.rs +++ b/crates/network/src/discovery.rs @@ -32,8 +32,6 @@ impl Discovery { impl EventLoop { // Sends rendezvous discovery requests to all rendezvous peers which are not throttled. // If rendezvous peer is not connected, it will be dialed which will trigger the discovery during identify exchange. - // TODO: Consider splitting this function up to reduce complexity. - #[expect(clippy::cognitive_complexity, reason = "TODO: Will be refactored")] pub(crate) fn broadcast_rendezvous_discoveries(&mut self) { #[expect(clippy::needless_collect, reason = "Necessary here; false positive")] for peer_id in self @@ -102,8 +100,6 @@ impl EventLoop { // Sends rendezvous registrations request to all rendezvous peers which require registration. // If rendezvous peer is not connected, it will be dialed which will trigger the registration during identify exchange. - // TODO: Consider splitting this function up to reduce complexity. - #[expect(clippy::cognitive_complexity, reason = "TODO: Will be refactored")] pub(crate) fn broadcast_rendezvous_registrations(&mut self) { #[expect(clippy::needless_collect, reason = "Necessary here; false positive")] for peer_id in self From c291850ce332b7ca34a1cfe726c3804b7a954822 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sat, 2 Nov 2024 15:54:15 +0000 Subject: [PATCH 54/75] feat: Blockchain WASM integration (#899) --- crates/runtime/src/logic.rs | 43 ++++++++++ crates/runtime/src/logic/imports.rs | 2 + crates/sdk/macros/src/state.rs | 6 ++ crates/sdk/src/env/ext.rs | 129 +++++++++++++++++++++++++++- crates/sdk/src/sys.rs | 2 + 5 files changed, 180 insertions(+), 2 deletions(-) diff --git a/crates/runtime/src/logic.rs b/crates/runtime/src/logic.rs index 4cab55e34..1049296a2 100644 --- a/crates/runtime/src/logic.rs +++ b/crates/runtime/src/logic.rs @@ -2,6 +2,7 @@ #![allow(clippy::mem_forget, reason = "Safe for now")] use core::num::NonZeroU64; +use std::collections::BTreeMap; use std::time::{SystemTime, UNIX_EPOCH}; use borsh::from_slice as from_borsh_slice; @@ -108,6 +109,7 @@ pub struct VMLogic<'a> { events: Vec, actions: Vec>, root_hash: Option<[u8; 32]>, + proposals: BTreeMap<[u8; 32], Vec>, } impl<'a> VMLogic<'a> { @@ -123,6 +125,7 @@ impl<'a> VMLogic<'a> { events: vec![], actions: vec![], root_hash: None, + proposals: BTreeMap::new(), } } @@ -152,6 +155,7 @@ pub struct Outcome { pub events: Vec, pub actions: Vec>, pub root_hash: Option<[u8; 32]>, + pub proposals: BTreeMap<[u8; 32], Vec>, // execution runtime // current storage usage of the app } @@ -181,6 +185,7 @@ impl VMLogic<'_> { events: self.events, actions: self.actions, root_hash: self.root_hash, + proposals: self.proposals, } } } @@ -556,4 +561,42 @@ impl VMHostFunctions<'_> { Ok(()) } + + /// Call the contract's `send_proposal()` function through the bridge. + /// + /// The proposal actions are obtained as raw data and pushed onto a list of + /// proposals to be sent to the host. + /// + /// Note that multiple actions are received, and the entire batch is pushed + /// onto the proposal list to represent one proposal. + /// + /// # Parameters + /// + /// * `actions_ptr` - Pointer to the start of the action data in WASM + /// memory. + /// * `actions_len` - Length of the action data. + /// * `id_ptr` - Pointer to the start of the id data in WASM memory. + /// * `id_len` - Length of the action data. This should be 32 bytes. + /// + pub fn send_proposal( + &mut self, + actions_ptr: u64, + actions_len: u64, + id_ptr: u64, + id_len: u64, + ) -> VMLogicResult<()> { + if id_len != 32 { + return Err(HostError::InvalidMemoryAccess.into()); + } + + let actions_bytes: Vec = self.read_guest_memory(actions_ptr, actions_len)?; + let mut proposal_id = [0; 32]; + + rand::thread_rng().fill_bytes(&mut proposal_id); + drop(self.with_logic_mut(|logic| logic.proposals.insert(proposal_id, actions_bytes))); + + self.borrow_memory().write(id_ptr, &proposal_id)?; + + Ok(()) + } } diff --git a/crates/runtime/src/logic/imports.rs b/crates/runtime/src/logic/imports.rs index f74ed53cf..531c51f50 100644 --- a/crates/runtime/src/logic/imports.rs +++ b/crates/runtime/src/logic/imports.rs @@ -69,6 +69,8 @@ impl VMLogic<'_> { fn random_bytes(ptr: u64, len: u64); fn time_now(ptr: u64, len: u64); + + fn send_proposal(actions_ptr: u64, actions_len: u64, id_ptr: u64, id_len: u64); } } } diff --git a/crates/sdk/macros/src/state.rs b/crates/sdk/macros/src/state.rs index d9ccd4548..f2c56619d 100644 --- a/crates/sdk/macros/src/state.rs +++ b/crates/sdk/macros/src/state.rs @@ -50,6 +50,12 @@ impl ToTokens for StateImpl<'_> { impl #impl_generics ::calimero_sdk::state::AppState for #ident #ty_generics #where_clause { type Event<#lifetime> = #event; } + + impl #impl_generics #ident #ty_generics #where_clause { + fn external() -> ::calimero_sdk::env::ext::External { + ::calimero_sdk::env::ext::External {} + } + } } .to_tokens(tokens); } diff --git a/crates/sdk/src/env/ext.rs b/crates/sdk/src/env/ext.rs index 1879e7543..032f7b826 100644 --- a/crates/sdk/src/env/ext.rs +++ b/crates/sdk/src/env/ext.rs @@ -1,8 +1,133 @@ -use borsh::to_vec as to_borsh_vec; +use borsh::{to_vec as to_borsh_vec, to_vec, BorshDeserialize, BorshSerialize}; use super::{expected_boolean, expected_register, panic_str, read_register, DATA_REGISTER}; use crate::sys; -use crate::sys::Buffer; +use crate::sys::{Buffer, BufferMut}; + +/// A blockchain proposal action. +/// +/// This enum represents the different actions that can be executed against a +/// blockchain, and combined into a proposal. +/// +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, PartialEq)] +pub enum ProposalAction { + /// Call a method on a contract. + ExternalFunctionCall { + /// The account ID of the contract to call. + receiver_id: AccountId, + + /// The method name to call. + method_name: String, + + /// The arguments to pass to the method. + args: String, + + /// The amount of tokens to attach to the call. + deposit: u64, + + /// The maximum amount of gas to use for the call. + gas: u64, + }, + + /// Transfer tokens to an account. + Transfer { + /// The account ID of the receiver. + receiver_id: AccountId, + + /// The amount of tokens to transfer. + amount: u64, + }, + + /// Set the number of approvals required for a proposal to be executed. + SetNumApprovals { + /// The number of approvals required. + num_approvals: u32, + }, + + /// Set the number of active proposals allowed at once. + SetActiveProposalsLimit { + /// The number of active proposals allowed. + active_proposals_limit: u32, + }, + + /// Set a value in the contract's context. + SetContextValue { + /// The key to set. + key: Box<[u8]>, + + /// The value to set. + value: Box<[u8]>, + }, +} + +/// Unique identifier for an account. +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub struct AccountId(String); + +/// A draft proposal. +/// +/// This struct is used to build a proposal before sending it to the blockchain. +/// It is distinct from a proposal that has been prepared and needs signing. +/// +#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, Default, Eq, PartialEq)] +pub struct DraftProposal { + /// The actions to be executed by the proposal. One proposal can contain + /// multiple actions to execute. + actions: Vec, +} + +impl DraftProposal { + /// Create a new draft proposal. + #[must_use] + pub const fn new() -> Self { + Self { + actions: Vec::new(), + } + } + + /// Add an action to transfer tokens to an account. + #[must_use] + pub fn transfer(mut self, receiver: AccountId, amount: u64) -> Self { + self.actions.push(ProposalAction::Transfer { + receiver_id: receiver, + amount, + }); + self + } + + /// Finalise the proposal and send it to the blockchain. + #[must_use] + pub fn send(self) -> ProposalId { + let mut buf = [0; 32]; + let actions = to_vec(&self.actions).unwrap(); + + #[expect( + clippy::needless_borrows_for_generic_args, + reason = "We don't want to copy the buffer, but write to the same one that's returned" + )] + unsafe { + sys::send_proposal(Buffer::from(&*actions), BufferMut::new(&mut buf)) + } + + ProposalId(buf) + } +} + +/// Interface for interacting with external proposals for blockchain actions. +#[derive(Clone, Copy, Debug)] +pub struct External; + +impl External { + /// Create a new proposal. This will initially be a draft, until sent. + #[must_use] + pub const fn propose(self) -> DraftProposal { + DraftProposal::new() + } +} + +/// Unique identifier for a proposal. +#[derive(BorshDeserialize, BorshSerialize, Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub struct ProposalId(pub [u8; 32]); #[doc(hidden)] pub unsafe fn fetch( diff --git a/crates/sdk/src/sys.rs b/crates/sdk/src/sys.rs index 121555e20..44a5bcc08 100644 --- a/crates/sdk/src/sys.rs +++ b/crates/sdk/src/sys.rs @@ -37,6 +37,8 @@ wasm_imports! { // -- fn random_bytes(buf: BufferMut<'_>); fn time_now(buf: BufferMut<'_>); + // -- + fn send_proposal(value: Buffer<'_>, buf: BufferMut<'_>); } } From a687c2ae1b18cbda4fbf56b5251ac1b4152bf3df Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Mon, 4 Nov 2024 15:08:25 +0100 Subject: [PATCH 55/75] feat: introduce basic vector and set collections to storage (#914) Co-authored-by: Miraculous Owonubi --- apps/kv-store/src/lib.rs | 9 +- crates/storage-macros/tests/atomic_unit.rs | 20 +- crates/storage-macros/tests/collection.rs | 16 +- .../tests/compile_fail/collection.rs | 2 +- crates/storage/src/collections.rs | 14 + crates/storage/src/collections/error.rs | 17 + .../storage/src/collections/unordered_map.rs | 421 ++++++++++++++++++ .../storage/src/collections/unordered_set.rs | 270 +++++++++++ crates/storage/src/collections/vector.rs | 321 +++++++++++++ crates/storage/src/entities.rs | 6 +- crates/storage/src/lib.rs | 2 +- crates/storage/src/tests/entities.rs | 46 +- crates/storage/src/tests/interface.rs | 68 +-- crates/storage/src/types.rs | 204 --------- 14 files changed, 1136 insertions(+), 280 deletions(-) create mode 100644 crates/storage/src/collections.rs create mode 100644 crates/storage/src/collections/error.rs create mode 100644 crates/storage/src/collections/unordered_map.rs create mode 100644 crates/storage/src/collections/unordered_set.rs create mode 100644 crates/storage/src/collections/vector.rs delete mode 100644 crates/storage/src/types.rs diff --git a/apps/kv-store/src/lib.rs b/apps/kv-store/src/lib.rs index 1aa546e43..ba5d4d5fc 100644 --- a/apps/kv-store/src/lib.rs +++ b/apps/kv-store/src/lib.rs @@ -4,9 +4,8 @@ use std::collections::BTreeMap; use calimero_sdk::types::Error; use calimero_sdk::{app, env}; -use calimero_storage::address::Path; +use calimero_storage::collections::UnorderedMap; use calimero_storage::entities::Element; -use calimero_storage::types::Map; use calimero_storage::AtomicUnit; #[app::state(emits = for<'a> Event<'a>)] @@ -14,7 +13,7 @@ use calimero_storage::AtomicUnit; #[root] #[type_id(1)] pub struct KvStore { - items: Map, + items: UnorderedMap, #[storage] storage: Element, } @@ -32,7 +31,7 @@ impl KvStore { #[app::init] pub fn init() -> KvStore { KvStore { - items: Map::new(&Path::new("::items").unwrap()).unwrap(), + items: UnorderedMap::new().unwrap(), storage: Element::root(), } } @@ -87,7 +86,7 @@ impl KvStore { self.get(key)?.ok_or_else(|| Error::msg("Key not found.")) } - pub fn remove(&mut self, key: &str) -> Result, Error> { + pub fn remove(&mut self, key: &str) -> Result { env::log(&format!("Removing key: {:?}", key)); app::emit!(Event::Removed { key }); diff --git a/crates/storage-macros/tests/atomic_unit.rs b/crates/storage-macros/tests/atomic_unit.rs index 7cac8b516..08b0508e8 100644 --- a/crates/storage-macros/tests/atomic_unit.rs +++ b/crates/storage-macros/tests/atomic_unit.rs @@ -48,7 +48,7 @@ impl Private { Self { public: String::new(), private: String::new(), - storage: Element::new(path), + storage: Element::new(path, None), } } } @@ -68,7 +68,7 @@ impl Simple { Self { name: String::new(), value: 0, - storage: Element::new(path), + storage: Element::new(path, None), } } } @@ -89,7 +89,7 @@ impl Skipped { Self { included: String::new(), skipped: String::new(), - storage: Element::new(path), + storage: Element::new(path, None), } } } @@ -251,8 +251,8 @@ mod hashing { let mut hasher = Sha256::new(); hasher.update(unit.id().as_bytes()); - hasher.update(&to_vec(&unit.public).unwrap()); - hasher.update(&to_vec(&unit.element().metadata()).unwrap()); + hasher.update(to_vec(&unit.public).unwrap()); + hasher.update(to_vec(&unit.element().metadata()).unwrap()); let expected_hash: [u8; 32] = hasher.finalize().into(); assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); @@ -274,9 +274,9 @@ mod hashing { let mut hasher = Sha256::new(); hasher.update(unit.id().as_bytes()); - hasher.update(&to_vec(&unit.name).unwrap()); - hasher.update(&to_vec(&unit.value).unwrap()); - hasher.update(&to_vec(&unit.element().metadata()).unwrap()); + hasher.update(to_vec(&unit.name).unwrap()); + hasher.update(to_vec(&unit.value).unwrap()); + hasher.update(to_vec(&unit.element().metadata()).unwrap()); let expected_hash: [u8; 32] = hasher.finalize().into(); assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); @@ -294,8 +294,8 @@ mod hashing { let mut hasher = Sha256::new(); hasher.update(unit.id().as_bytes()); - hasher.update(&to_vec(&unit.included).unwrap()); - hasher.update(&to_vec(&unit.element().metadata()).unwrap()); + hasher.update(to_vec(&unit.included).unwrap()); + hasher.update(to_vec(&unit.element().metadata()).unwrap()); let expected_hash: [u8; 32] = hasher.finalize().into(); assert_eq!(unit.calculate_merkle_hash().unwrap(), expected_hash); diff --git a/crates/storage-macros/tests/collection.rs b/crates/storage-macros/tests/collection.rs index 217741bef..7145ef22a 100644 --- a/crates/storage-macros/tests/collection.rs +++ b/crates/storage-macros/tests/collection.rs @@ -43,7 +43,7 @@ impl Child { fn new(path: &Path) -> Self { Self { content: String::new(), - storage: Element::new(path), + storage: Element::new(path, None), } } } @@ -53,7 +53,7 @@ impl Child { struct Group; impl Group { - fn new() -> Self { + const fn new() -> Self { Self {} } } @@ -74,7 +74,7 @@ impl Parent { Self { title: String::new(), children: Group::new(), - storage: Element::new(path), + storage: Element::new(path, None), } } } @@ -94,7 +94,7 @@ impl Simple { Self { name: String::new(), value: 0, - storage: Element::new(path), + storage: Element::new(path, None), } } } @@ -135,8 +135,8 @@ mod hashing { let mut hasher = Sha256::new(); hasher.update(child.id().as_bytes()); - hasher.update(&to_vec(&child.content).unwrap()); - hasher.update(&to_vec(&child.element().metadata()).unwrap()); + hasher.update(to_vec(&child.content).unwrap()); + hasher.update(to_vec(&child.element().metadata()).unwrap()); let expected_hash: [u8; 32] = hasher.finalize().into(); assert_eq!(child.calculate_merkle_hash().unwrap(), expected_hash); @@ -149,8 +149,8 @@ mod hashing { let mut hasher = Sha256::new(); hasher.update(parent.id().as_bytes()); - hasher.update(&to_vec(&parent.title).unwrap()); - hasher.update(&to_vec(&parent.element().metadata()).unwrap()); + hasher.update(to_vec(&parent.title).unwrap()); + hasher.update(to_vec(&parent.element().metadata()).unwrap()); let expected_hash: [u8; 32] = hasher.finalize().into(); assert_eq!(parent.calculate_merkle_hash().unwrap(), expected_hash); diff --git a/crates/storage-macros/tests/compile_fail/collection.rs b/crates/storage-macros/tests/compile_fail/collection.rs index 565a0f8eb..2c1ecc34a 100644 --- a/crates/storage-macros/tests/compile_fail/collection.rs +++ b/crates/storage-macros/tests/compile_fail/collection.rs @@ -27,7 +27,7 @@ fn main() { fn child_type_specification() { let parent: Parent = Parent { group: Group {}, - storage: Element::new(&Path::new("::root::node").unwrap()), + storage: Element::new(&Path::new("::root::node").unwrap(), None), }; let _: Vec = Interface::children_of(parent.id(), &parent.group).unwrap(); diff --git a/crates/storage/src/collections.rs b/crates/storage/src/collections.rs new file mode 100644 index 000000000..1122bb681 --- /dev/null +++ b/crates/storage/src/collections.rs @@ -0,0 +1,14 @@ +//! High-level data structures for storage. + +/// This module provides functionality for hashmap data structures. +pub mod unordered_map; +pub use unordered_map::UnorderedMap; +/// This module provides functionality for hashset data structures. +pub mod unordered_set; +pub use unordered_set::UnorderedSet; +/// This module provides functionality for vector data structures. +pub mod vector; +pub use vector::Vector; +/// This module provides functionality for handling errors. +pub mod error; +pub use error::StoreError; diff --git a/crates/storage/src/collections/error.rs b/crates/storage/src/collections/error.rs new file mode 100644 index 000000000..bd91c67ff --- /dev/null +++ b/crates/storage/src/collections/error.rs @@ -0,0 +1,17 @@ +use thiserror::Error; + +// fixme! macro expects `calimero_storage` to be in deps +use crate::address::PathError; +use crate::interface::StorageError; + +/// General error type for storage operations while interacting with complex collections. +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum StoreError { + /// Error while interacting with storage. + #[error(transparent)] + StorageError(#[from] StorageError), + /// Error while interacting with a path. + #[error(transparent)] + PathError(#[from] PathError), +} diff --git a/crates/storage/src/collections/unordered_map.rs b/crates/storage/src/collections/unordered_map.rs new file mode 100644 index 000000000..7eaea3726 --- /dev/null +++ b/crates/storage/src/collections/unordered_map.rs @@ -0,0 +1,421 @@ +use core::borrow::Borrow; +use core::marker::PhantomData; + +use borsh::{BorshDeserialize, BorshSerialize}; +use sha2::{Digest, Sha256}; + +// fixme! macro expects `calimero_storage` to be in deps +use crate as calimero_storage; +use crate::address::{Id, Path}; +use crate::collections::error::StoreError; +use crate::entities::{Data, Element}; +use crate::interface::Interface; +use crate::{AtomicUnit, Collection}; + +/// A map collection that stores key-value pairs. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(255)] +#[root] +pub struct UnorderedMap { + /// The id used for the map's entries. + id: Id, + /// The entries in the map. + entries: Entries, + /// The storage element for the map. + #[storage] + storage: Element, +} + +/// A collection of entries in a map. +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Entry)] +struct Entries { + /// Helper to associate the generic types with the collection. + _priv: PhantomData<(K, V)>, +} + +/// An entry in a map. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(254)] +pub struct Entry { + /// The key for the entry. + key: K, + /// The value for the entry. + value: V, + /// The storage element for the entry. + #[storage] + storage: Element, +} + +impl + UnorderedMap +{ + /// Create a new map collection. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn new() -> Result { + let id = Id::random(); + let mut this = Self { + id: id, + entries: Entries::default(), + storage: Element::new(&Path::new(format!("::unused::map::{id}::path"))?, Some(id)), + }; + + let _ = Interface::save(&mut this)?; + + Ok(this) + } + + /// Compute the ID for a key. + fn compute_id(&self, key: &[u8]) -> Id { + let mut hasher = Sha256::new(); + hasher.update(self.id.as_bytes()); + hasher.update(key); + Id::new(hasher.finalize().into()) + } + + /// Get the raw entry for a key in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + fn get_raw(&self, key: &Q) -> Result>, StoreError> + where + K: Borrow, + Q: PartialEq + AsRef<[u8]> + ?Sized, + { + Ok(Interface::find_by_id::>( + self.compute_id(key.as_ref()), + )?) + } + + /// Insert a key-value pair into the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn insert(&mut self, key: K, value: V) -> Result, StoreError> + where + K: AsRef<[u8]> + PartialEq, + { + if let Some(mut entry) = self.get_raw(&key)? { + let ret_value = entry.value; + entry.value = value; + // has to be called to update the entry + entry.element_mut().update(); + let _ = Interface::save(&mut entry)?; + return Ok(Some(ret_value)); + } + + let path = self.path(); + let storage = Element::new(&path, Some(self.compute_id(key.as_ref()))); + let _ = Interface::add_child_to( + self.storage.id(), + &mut self.entries, + &mut Entry { + key, + value, + storage, + }, + )?; + + Ok(None) + } + + /// Get an iterator over the entries in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn entries(&self) -> Result, StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + Ok(entries.into_iter().map(|entry| (entry.key, entry.value))) + } + + /// Get the number of entries in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn len(&self) -> Result { + Ok(Interface::child_info_for(self.id(), &self.entries)?.len()) + } + + /// Get the value for a key in the map. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn get(&self, key: &Q) -> Result, StoreError> + where + K: Borrow, + Q: PartialEq + AsRef<[u8]> + ?Sized, + { + let entry = Interface::find_by_id::>(self.compute_id(key.as_ref()))?; + let value = entry.map(|e| e.value); + + Ok(value) + } + + /// Check if the map contains a key. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn contains(&self, key: &Q) -> Result + where + K: Borrow + PartialEq, + Q: PartialEq + AsRef<[u8]> + ?Sized, + { + Ok(self.get_raw(key)?.is_some()) + } + + /// Remove a key from the map, returning the value at the key if it previously existed. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn remove(&mut self, key: &Q) -> Result + where + K: Borrow, + Q: PartialEq + AsRef<[u8]> + ?Sized, + { + let entry = Element::new(&self.path(), Some(self.compute_id(key.as_ref()))); + + Ok(Interface::remove_child_from( + self.id(), + &mut self.entries, + entry.id(), + )?) + } + + /// Clear the map, removing all entries. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn clear(&mut self) -> Result<(), StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + for entry in entries { + let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + } + + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use crate::collections::unordered_map::UnorderedMap; + + #[test] + fn test_unordered_map_basic_operations() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key".to_string(), "value".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!( + map.get("key").expect("get failed"), + Some("value".to_string()) + ); + assert_ne!( + map.get("key").expect("get failed"), + Some("value2".to_string()) + ); + + assert_eq!( + map.insert("key".to_string(), "value2".to_string()) + .expect("insert failed"), + Some("value".to_string()) + ); + assert!(map + .insert("key2".to_string(), "value".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!( + map.get("key").expect("get failed"), + Some("value2".to_string()) + ); + assert_eq!( + map.get("key2").expect("get failed"), + Some("value".to_string()) + ); + + assert_eq!(map.remove("key").expect("error while removing key"), true); + assert_eq!(map.remove("key").expect("error while removing key"), false); + + assert_eq!(map.get("key").expect("get failed"), None); + } + + #[test] + fn test_unordered_map_insert_and_get() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key1".to_string(), "value1".to_string()) + .expect("insert failed") + .is_none()); + assert!(map + .insert("key2".to_string(), "value2".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!( + map.get("key1").expect("get failed"), + Some("value1".to_string()) + ); + assert_eq!( + map.get("key2").expect("get failed"), + Some("value2".to_string()) + ); + } + + #[test] + fn test_unordered_map_update_value() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key".to_string(), "value".to_string()) + .expect("insert failed") + .is_none()); + assert!(!map + .insert("key".to_string(), "new_value".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!( + map.get("key").expect("get failed"), + Some("new_value".to_string()) + ); + } + + #[test] + fn test_remove() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key".to_string(), "value".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!(map.remove("key").expect("remove failed"), true); + assert_eq!(map.get("key").expect("get failed"), None); + } + + #[test] + fn test_clear() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key1".to_string(), "value1".to_string()) + .expect("insert failed") + .is_none()); + assert!(map + .insert("key2".to_string(), "value2".to_string()) + .expect("insert failed") + .is_none()); + + map.clear().expect("clear failed"); + + assert_eq!(map.get("key1").expect("get failed"), None); + assert_eq!(map.get("key2").expect("get failed"), None); + } + + #[test] + fn test_unordered_map_len() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert_eq!(map.len().expect("len failed"), 0); + + assert!(map + .insert("key1".to_string(), "value1".to_string()) + .expect("insert failed") + .is_none()); + assert!(map + .insert("key2".to_string(), "value2".to_string()) + .expect("insert failed") + .is_none()); + assert!(!map + .insert("key2".to_string(), "value3".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!(map.len().expect("len failed"), 2); + + assert_eq!(map.remove("key1").expect("remove failed"), true); + + assert_eq!(map.len().expect("len failed"), 1); + } + + #[test] + fn test_unordered_map_contains() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key".to_string(), "value".to_string()) + .expect("insert failed") + .is_none()); + + assert_eq!(map.contains("key").expect("contains failed"), true); + assert_eq!(map.contains("nonexistent").expect("contains failed"), false); + } + + #[test] + fn test_unordered_map_entries() { + let mut map = UnorderedMap::::new().expect("failed to create map"); + + assert!(map + .insert("key1".to_string(), "value1".to_string()) + .expect("insert failed") + .is_none()); + assert!(map + .insert("key2".to_string(), "value2".to_string()) + .expect("insert failed") + .is_none()); + assert!(!map + .insert("key2".to_string(), "value3".to_string()) + .expect("insert failed") + .is_none()); + + let entries: Vec<(String, String)> = map.entries().expect("entries failed").collect(); + + assert_eq!(entries.len(), 2); + assert!(entries.contains(&("key1".to_string(), "value1".to_string()))); + assert!(entries.contains(&("key2".to_string(), "value3".to_string()))); + } +} diff --git a/crates/storage/src/collections/unordered_set.rs b/crates/storage/src/collections/unordered_set.rs new file mode 100644 index 000000000..378ef5bb7 --- /dev/null +++ b/crates/storage/src/collections/unordered_set.rs @@ -0,0 +1,270 @@ +use core::borrow::Borrow; +use core::marker::PhantomData; + +use borsh::{BorshDeserialize, BorshSerialize}; +use sha2::{Digest, Sha256}; + +// fixme! macro expects `calimero_storage` to be in deps +use crate as calimero_storage; +use crate::address::{Id, Path}; +use crate::collections::error::StoreError; +use crate::entities::{Data, Element}; +use crate::interface::Interface; +use crate::{AtomicUnit, Collection}; + +/// A set collection that stores unqiue values once. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(253)] +#[root] +pub struct UnorderedSet { + /// The prefix used for the set's entries. + id: Id, + /// The entries in the set. + entries: Entries, + /// The storage element for the set. + #[storage] + storage: Element, +} + +/// A collection of entries in a set. +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Entry)] +struct Entries { + /// Helper to associate the generic types with the collection. + _priv: PhantomData, +} + +/// An entry in a set. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(252)] +pub struct Entry { + /// The value for the entry. + value: V, + /// The storage element for the entry. + #[storage] + storage: Element, +} + +impl UnorderedSet { + /// Create a new set collection. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn new() -> Result { + let id = Id::random(); + let mut this = Self { + id: id, + entries: Entries::default(), + storage: Element::new(&Path::new(format!("::unused::set::{id}::path"))?, Some(id)), + }; + + let _ = Interface::save(&mut this)?; + + Ok(this) + } + + /// Compute the ID for a value in the set. + fn compute_id(&self, value: &[u8]) -> Id { + let mut hasher = Sha256::new(); + hasher.update(self.id.as_bytes()); + hasher.update(value); + Id::new(hasher.finalize().into()) + } + + /// Insert a value pair into the set collection if the element does not already exist. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn insert(&mut self, value: V) -> Result + where + V: AsRef<[u8]> + PartialEq, + { + let path = self.path(); + + if self.contains(&value)? { + return Ok(false); + } + + let storage = Element::new(&path, Some(self.compute_id(value.as_ref()))); + let _ = Interface::add_child_to( + self.storage.id(), + &mut self.entries, + &mut Entry { value, storage }, + )?; + + Ok(true) + } + + /// Get an iterator over the entries in the set. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn entries(&self) -> Result, StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + Ok(entries.into_iter().map(|entry| entry.value)) + } + + /// Get the number of entries in the set. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn len(&self) -> Result { + Ok(Interface::child_info_for(self.id(), &self.entries)?.len()) + } + + /// Get the value for a key in the set. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn contains(&self, value: &Q) -> Result + where + V: Borrow, + Q: PartialEq + ?Sized + AsRef<[u8]>, + { + let entry = Interface::find_by_id::>(self.compute_id(value.as_ref()))?; + Ok(entry.is_some()) + } + + /// Remove a key from the set, returning the value at the key if it previously existed. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn remove(&mut self, value: &Q) -> Result + where + V: Borrow, + Q: PartialEq + AsRef<[u8]> + ?Sized, + { + let entry = Element::new(&self.path(), Some(self.compute_id(value.as_ref()))); + + Ok(Interface::remove_child_from( + self.id(), + &mut self.entries, + entry.id(), + )?) + } + + /// Clear the set, removing all entries. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn clear(&mut self) -> Result<(), StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + for entry in entries { + let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + } + + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use crate::collections::UnorderedSet; + + #[test] + fn test_unordered_set_operations() { + let mut set = UnorderedSet::::new().expect("failed to create set"); + + assert!(set.insert("value1".to_string()).expect("insert failed")); + + assert_eq!( + set.contains(&"value1".to_string()) + .expect("contains failed"), + true + ); + + assert!(!set.insert("value1".to_string()).expect("insert failed")); + assert!(set.insert("value2".to_string()).expect("insert failed")); + + assert_eq!(set.contains("value3").expect("get failed"), false); + assert_eq!(set.contains("value2").expect("get failed"), true); + + assert_eq!( + set.remove("value1").expect("error while removing key"), + true + ); + assert_eq!( + set.remove("value3").expect("error while removing key"), + false + ); + } + + #[test] + fn test_unordered_set_len() { + let mut set = UnorderedSet::::new().expect("failed to create set"); + + assert!(set.insert("value1".to_string()).expect("insert failed")); + assert!(set.insert("value2".to_string()).expect("insert failed")); + assert!(!set.insert("value2".to_string()).expect("insert failed")); + + assert_eq!(set.len().expect("len failed"), 2); + + assert!(set.remove("value1").expect("remove failed")); + + assert_eq!(set.len().expect("len failed"), 1); + } + + #[test] + fn test_unordered_set_clear() { + let mut set = UnorderedSet::::new().expect("failed to create set"); + + assert!(set.insert("value1".to_string()).expect("insert failed")); + assert!(set.insert("value2".to_string()).expect("insert failed")); + + assert_eq!(set.len().expect("len failed"), 2); + + set.clear().expect("clear failed"); + + assert_eq!(set.len().expect("len failed"), 0); + assert_eq!(set.contains("value1").expect("contains failed"), false); + assert_eq!(set.contains("value2").expect("contains failed"), false); + } + + #[test] + fn test_unordered_set_entries() { + let mut set = UnorderedSet::::new().expect("failed to create set"); + + assert!(set.insert("value1".to_string()).expect("insert failed")); + assert!(set.insert("value2".to_string()).expect("insert failed")); + + let entries: Vec = set.entries().expect("entries failed").collect(); + + assert_eq!(entries.len(), 2); + assert!(entries.contains(&"value1".to_string())); + assert!(entries.contains(&"value2".to_string())); + + assert!(set.remove("value1").expect("remove failed")); + let entries: Vec = set.entries().expect("entries failed").collect(); + assert_eq!(entries.len(), 1); + } +} diff --git a/crates/storage/src/collections/vector.rs b/crates/storage/src/collections/vector.rs new file mode 100644 index 000000000..4454d337b --- /dev/null +++ b/crates/storage/src/collections/vector.rs @@ -0,0 +1,321 @@ +use core::borrow::Borrow; +use core::marker::PhantomData; + +use borsh::{BorshDeserialize, BorshSerialize}; + +// fixme! macro expects `calimero_storage` to be in deps +use crate::address::{Id, Path}; +use crate::collections::error::StoreError; +use crate::entities::{Data, Element}; +use crate::interface::{Interface, StorageError}; +use crate::{self as calimero_storage, AtomicUnit, Collection}; + +/// A vector collection that stores key-value pairs. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(251)] +#[root] +pub struct Vector { + /// The entries in the vector. + entries: Entries, + /// The storage element for the vector. + #[storage] + storage: Element, +} + +/// A collection of entries in a vector. +#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[children(Entry)] +struct Entries { + /// Helper to associate the generic types with the collection. + _priv: PhantomData, +} + +/// An entry in a vector. +#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] +#[type_id(250)] +pub struct Entry { + /// The value for the entry. + value: V, + /// The storage element for the entry. + #[storage] + storage: Element, +} + +impl Vector { + /// Create a new vector collection. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn new() -> Result { + let id = Id::random(); + let mut this = Self { + entries: Entries::default(), + storage: Element::new( + &Path::new(format!("::unused::vector::{id}::path"))?, + Some(id), + ), + }; + + let _ = Interface::save(&mut this)?; + + Ok(this) + } + + /// Add a value to the end of the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn push(&mut self, value: V) -> Result<(), StoreError> { + let mut entry = Entry { + value, + storage: Element::new(&self.path(), None), + }; + + if Interface::add_child_to(self.id(), &mut self.entries, &mut entry)? { + return Ok(()); + } + + Err(StoreError::StorageError(StorageError::ActionNotAllowed( + "Failed to add child".to_owned(), + ))) + } + + /// Remove and return the last value from the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn pop(&mut self) -> Result, StoreError> { + let id = match Interface::child_info_for(self.id(), &self.entries)?.pop() { + Some(info) => info.id(), + None => return Ok(None), + }; + let entry = Interface::find_by_id::>(id)?; + let _ = Interface::remove_child_from(self.id(), &mut self.entries, id)?; + Ok(entry.map(|e| e.value)) + } + + /// Get the raw storage entry at a specific index in the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + fn get_raw(&self, index: usize) -> Result>, StoreError> { + let id = match Interface::child_info_for(self.id(), &self.entries)?.get(index) { + Some(info) => info.id(), + None => return Ok(None), + }; + + let entry = match Interface::find_by_id::>(id) { + Ok(entry) => entry, + Err(_) => return Ok(None), + }; + + Ok(entry) + } + + /// Get the value at a specific index in the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn get(&self, index: usize) -> Result, StoreError> { + Ok(self.get_raw(index)?.map(|entry| entry.value)) + } + + /// Update the value at a specific index in the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn update(&mut self, index: usize, value: V) -> Result<(), StoreError> { + let mut entry = self.get_raw(index)?.ok_or(StoreError::StorageError( + StorageError::ActionNotAllowed("error".to_owned()), + ))?; + + // has to be called to update the entry + entry.value = value; + entry.element_mut().update(); + + let _ = Interface::save::>(&mut entry)?; + + Ok(()) + } + + /// Get an iterator over the entries in the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn entries(&self) -> Result, StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + Ok(entries.into_iter().map(|entry| (entry.value))) + } + + /// Get the number of entries in the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + #[expect(clippy::len_without_is_empty, reason = "TODO: will be implemented")] + pub fn len(&self) -> Result { + Ok(Interface::child_info_for(self.id(), &self.entries)?.len()) + } + + /// Get the value for a key in the vector. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn contains(&self, value: &Q) -> Result + where + V: Borrow, + Q: PartialEq + ?Sized, + { + for entry in self.entries()? { + if value.borrow() == &entry { + return Ok(true); + } + } + + Ok(false) + } + + /// Clear the vector, removing all entries. + /// + /// # Errors + /// + /// If an error occurs when interacting with the storage system, or a child + /// [`Element`](crate::entities::Element) cannot be found, an error will be + /// returned. + /// + pub fn clear(&mut self) -> Result<(), StoreError> { + let entries = Interface::children_of(self.id(), &self.entries)?; + + for entry in entries { + let _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; + } + + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use crate::collections::error::StoreError; + use crate::collections::vector::Vector; + + #[test] + fn test_vector_new() { + let vector: Result, StoreError> = Vector::new(); + assert!(vector.is_ok()); + } + + #[test] + fn test_vector_push() { + let mut vector: Vector = Vector::new().unwrap(); + let value = "test_data".to_string(); + let result = vector.push(value.clone()); + assert!(result.is_ok()); + assert_eq!(vector.len().unwrap(), 1); + } + + #[test] + fn test_vector_get() { + let mut vector: Vector = Vector::new().unwrap(); + let value = "test_data".to_string(); + let _ = vector.push(value.clone()).unwrap(); + let retrieved_value = vector.get(0).unwrap(); + assert_eq!(retrieved_value, Some(value)); + } + + #[test] + fn test_vector_update() { + let mut vector: Vector = Vector::new().unwrap(); + let value1 = "test_data1".to_string(); + let value2 = "test_data2".to_string(); + let _ = vector.push(value1.clone()).unwrap(); + let _ = vector.update(0, value2.clone()).unwrap(); + let retrieved_value = vector.get(0).unwrap(); + assert_eq!(retrieved_value, Some(value2)); + } + + #[test] + fn test_vector_get_non_existent() { + let vector: Vector = Vector::new().unwrap(); + match vector.get(0) { + Ok(retrieved_value) => assert_eq!(retrieved_value, None), + Err(e) => panic!("Error occurred: {:?}", e), + } + } + + #[test] + fn test_vector_pop() { + let mut vector: Vector = Vector::new().unwrap(); + let value = "test_data".to_string(); + let _ = vector.push(value.clone()).unwrap(); + let popped_value = vector.pop().unwrap(); + assert_eq!(popped_value, Some(value)); + assert_eq!(vector.len().unwrap(), 0); + } + + #[test] + fn test_vector_entries() { + let mut vector: Vector = Vector::new().unwrap(); + let value1 = "test_data1".to_string(); + let value2 = "test_data2".to_string(); + let _ = vector.push(value1.clone()).unwrap(); + let _ = vector.push(value2.clone()).unwrap(); + let entries: Vec = vector.entries().unwrap().collect(); + assert_eq!(entries, vec![value1, value2]); + } + + #[test] + fn test_vector_contains() { + let mut vector: Vector = Vector::new().unwrap(); + let value = "test_data".to_string(); + let _ = vector.push(value.clone()).unwrap(); + assert!(vector.contains(&value).unwrap()); + let non_existent_value = "non_existent".to_string(); + assert!(!vector.contains(&non_existent_value).unwrap()); + } + + #[test] + fn test_vector_clear() { + let mut vector: Vector = Vector::new().unwrap(); + let value = "test_data".to_string(); + let _ = vector.push(value.clone()).unwrap(); + vector.clear().unwrap(); + assert_eq!(vector.len().unwrap(), 0); + } +} diff --git a/crates/storage/src/entities.rs b/crates/storage/src/entities.rs index 7a3fb7717..5de099efa 100644 --- a/crates/storage/src/entities.rs +++ b/crates/storage/src/entities.rs @@ -644,6 +644,7 @@ impl Element { /// # Parameters /// /// * `path` - The path to the [`Element`] in the hierarchy of the storage. + /// * `id` - The id of the [`Element`] in the hierarchy of the storage. /// /// # Panics /// @@ -651,10 +652,11 @@ impl Element { /// before the Unix epoch, which should never ever happen! /// #[must_use] - pub fn new(path: &Path) -> Self { + pub fn new(path: &Path, id: Option) -> Self { let timestamp = time_now(); + let element_id = id.unwrap_or_else(Id::random); Self { - id: Id::random(), + id: element_id, is_dirty: true, metadata: Metadata { created_at: timestamp, diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 1a61a882b..206f248a6 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -62,13 +62,13 @@ )] pub mod address; +pub mod collections; pub mod entities; pub mod env; pub mod index; pub mod integration; pub mod interface; pub mod store; -pub mod types; pub use calimero_storage_macros::{AtomicUnit, Collection}; diff --git a/crates/storage/src/tests/entities.rs b/crates/storage/src/tests/entities.rs index b6987305c..6db091247 100644 --- a/crates/storage/src/tests/entities.rs +++ b/crates/storage/src/tests/entities.rs @@ -28,7 +28,7 @@ mod data__public_methods { #[test] fn calculate_merkle_hash() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let person = Person { name: "Alice".to_owned(), age: 30, @@ -47,9 +47,9 @@ mod data__public_methods { #[test] fn calculate_merkle_hash_for_child__valid() { - let parent = Element::new(&Path::new("::root::node").unwrap()); + let parent = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", parent); - let child1 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let child1 = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let mut para1 = Paragraph::new_from_element("Leaf1", child1); assert!(Interface::save(&mut page).unwrap()); @@ -61,7 +61,7 @@ mod data__public_methods { let expected_hash1 = para1.calculate_merkle_hash().unwrap(); assert_eq!(para1_hash, expected_hash1); - let child2 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let child2 = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let para2 = Paragraph::new_from_element("Leaf2", child2); let para2_slice = to_vec(¶2).unwrap(); let para2_hash = page @@ -72,9 +72,9 @@ mod data__public_methods { #[test] fn calculate_merkle_hash_for_child__invalid() { - let parent = Element::new(&Path::new("::root::node").unwrap()); + let parent = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", parent); - let child1 = Element::new(&Path::new("::root::node::leaf").unwrap()); + let child1 = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let mut para1 = Paragraph::new_from_element("Leaf1", child1); assert!(Interface::save(&mut page).unwrap()); @@ -86,9 +86,9 @@ mod data__public_methods { #[test] fn calculate_merkle_hash_for_child__unknown_collection() { - let parent = Element::new(&Path::new("::root::node").unwrap()); + let parent = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", parent); - let child = Element::new(&Path::new("::root::node::leaf").unwrap()); + let child = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let mut para = Paragraph::new_from_element("Leaf", child); assert!(Interface::save(&mut page).unwrap()); @@ -103,7 +103,7 @@ mod data__public_methods { #[test] fn collections() { - let parent = Element::new(&Path::new("::root::node").unwrap()); + let parent = Element::new(&Path::new("::root::node").unwrap(), None); let page = Page::new_from_element("Node", parent); assert_eq!( page.collections(), @@ -112,7 +112,7 @@ mod data__public_methods { } ); - let child = Element::new(&Path::new("::root::node::leaf").unwrap()); + let child = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let para = Paragraph::new_from_element("Leaf", child); assert_eq!(para.collections(), BTreeMap::new()); } @@ -120,7 +120,7 @@ mod data__public_methods { #[test] fn element() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); let person = Person { name: "Alice".to_owned(), age: 30, @@ -132,7 +132,7 @@ mod data__public_methods { #[test] fn element_mut() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); let mut person = Person { name: "Bob".to_owned(), age: 40, @@ -148,7 +148,7 @@ mod data__public_methods { #[test] fn id() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); let id = element.id; let person = Person { name: "Eve".to_owned(), @@ -161,7 +161,7 @@ mod data__public_methods { #[test] fn path() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); let person = Person { name: "Steve".to_owned(), age: 50, @@ -239,7 +239,7 @@ mod element__constructor { .unwrap() .as_nanos() as u64; let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); let timestamp2 = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() @@ -263,7 +263,7 @@ mod element__public_methods { .duration_since(UNIX_EPOCH) .unwrap() .as_nanos() as u64; - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let timestamp2 = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() @@ -275,13 +275,13 @@ mod element__public_methods { #[test] fn id() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); assert_eq!(element.id(), element.id); } #[test] fn is_dirty() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap(), None); assert!(element.is_dirty()); let mut person = Person { @@ -298,7 +298,7 @@ mod element__public_methods { #[test] fn merkle_hash() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let mut person = Person { name: "Steve".to_owned(), age: 50, @@ -321,13 +321,13 @@ mod element__public_methods { #[test] fn path() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); assert_eq!(element.path(), element.path); } #[test] fn update() { - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let updated_at = element.metadata.updated_at; let mut person = Person { name: "Bob".to_owned(), @@ -348,7 +348,7 @@ mod element__public_methods { .duration_since(UNIX_EPOCH) .unwrap() .as_nanos() as u64; - let element = Element::new(&Path::new("::root::node::leaf").unwrap()); + let element = Element::new(&Path::new("::root::node::leaf").unwrap(), None); let mut person = Person { name: "Eve".to_owned(), age: 20, @@ -378,7 +378,7 @@ mod element__traits { #[test] fn display() { let path = Path::new("::root::node::leaf").unwrap(); - let element = Element::new(&path); + let element = Element::new(&path, None); assert_eq!( format!("{element}"), format!("Element {}: ::root::node::leaf", element.id()) diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 45e24c7a6..941547027 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -14,7 +14,7 @@ mod interface__public_methods { #[test] fn children_of() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", element); assert!(Interface::save(&mut page).unwrap()); assert_eq!( @@ -22,9 +22,9 @@ mod interface__public_methods { vec![] ); - let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let child1 = Element::new(&Path::new("::root::node::leaf1").unwrap(), None); + let child2 = Element::new(&Path::new("::root::node::leaf2").unwrap(), None); + let child3 = Element::new(&Path::new("::root::node::leaf3").unwrap(), None); let mut para1 = Paragraph::new_from_element("Leaf1", child1); let mut para2 = Paragraph::new_from_element("Leaf2", child2); let mut para3 = Paragraph::new_from_element("Leaf3", child3); @@ -40,7 +40,7 @@ mod interface__public_methods { #[test] fn find_by_id__existent() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Leaf", element); let id = page.id(); assert!(Interface::save(&mut page).unwrap()); @@ -73,7 +73,7 @@ mod interface__public_methods { #[test] fn save__basic() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", element); assert_ok!(Interface::save(&mut page)); @@ -81,8 +81,8 @@ mod interface__public_methods { #[test] fn save__multiple() { - let element1 = Element::new(&Path::new("::root::node1").unwrap()); - let element2 = Element::new(&Path::new("::root::node2").unwrap()); + let element1 = Element::new(&Path::new("::root::node1").unwrap(), None); + let element2 = Element::new(&Path::new("::root::node2").unwrap(), None); let mut page1 = Page::new_from_element("Node1", element1); let mut page2 = Page::new_from_element("Node2", element2); @@ -94,7 +94,7 @@ mod interface__public_methods { #[test] fn save__not_dirty() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", element); assert!(Interface::save(&mut page).unwrap()); @@ -104,7 +104,7 @@ mod interface__public_methods { #[test] fn save__too_old() { - let element1 = Element::new(&Path::new("::root::node").unwrap()); + let element1 = Element::new(&Path::new("::root::node").unwrap(), None); let mut page1 = Page::new_from_element("Node", element1); let mut page2 = page1.clone(); @@ -118,7 +118,7 @@ mod interface__public_methods { #[test] fn save__update_existing() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut page = Page::new_from_element("Node", element); let id = page.id(); assert!(Interface::save(&mut page).unwrap()); @@ -163,7 +163,10 @@ mod interface__apply_actions { #[test] fn apply_action__add() { - let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let page = Page::new_from_element( + "Test Page", + Element::new(&Path::new("::test").unwrap(), None), + ); let serialized = to_vec(&page).unwrap(); let action = Action::Add { id: page.id(), @@ -182,8 +185,10 @@ mod interface__apply_actions { #[test] fn apply_action__update() { - let mut page = - Page::new_from_element("Old Title", Element::new(&Path::new("::test").unwrap())); + let mut page = Page::new_from_element( + "Old Title", + Element::new(&Path::new("::test").unwrap(), None), + ); assert!(Interface::save(&mut page).unwrap()); page.title = "New Title".to_owned(); @@ -205,8 +210,10 @@ mod interface__apply_actions { #[test] fn apply_action__delete() { - let mut page = - Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let mut page = Page::new_from_element( + "Test Page", + Element::new(&Path::new("::test").unwrap(), None), + ); assert!(Interface::save(&mut page).unwrap()); let action = Action::Delete { @@ -223,7 +230,10 @@ mod interface__apply_actions { #[test] fn apply_action__compare() { - let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let page = Page::new_from_element( + "Test Page", + Element::new(&Path::new("::test").unwrap(), None), + ); let action = Action::Compare { id: page.id() }; // Compare should fail @@ -232,7 +242,10 @@ mod interface__apply_actions { #[test] fn apply_action__wrong_type() { - let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let page = Page::new_from_element( + "Test Page", + Element::new(&Path::new("::test").unwrap(), None), + ); let serialized = to_vec(&page).unwrap(); let action = Action::Add { id: page.id(), @@ -247,7 +260,10 @@ mod interface__apply_actions { #[test] fn apply_action__non_existent_update() { - let page = Page::new_from_element("Test Page", Element::new(&Path::new("::test").unwrap())); + let page = Page::new_from_element( + "Test Page", + Element::new(&Path::new("::test").unwrap(), None), + ); let serialized = to_vec(&page).unwrap(); let action = Action::Update { id: page.id(), @@ -274,7 +290,7 @@ mod interface__comparison { #[test] fn compare_trees__identical() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut local = Page::new_from_element("Test Page", element); let mut foreign = local.clone(); @@ -295,7 +311,7 @@ mod interface__comparison { #[test] fn compare_trees__local_newer() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut local = Page::new_from_element("Test Page", element.clone()); let mut foreign = Page::new_from_element("Old Test Page", element); @@ -327,7 +343,7 @@ mod interface__comparison { #[test] fn compare_trees__foreign_newer() { - let element = Element::new(&Path::new("::root::node").unwrap()); + let element = Element::new(&Path::new("::root::node").unwrap(), None); let mut local = Page::new_from_element("Old Test Page", element.clone()); let mut foreign = Page::new_from_element("Test Page", element); @@ -359,10 +375,10 @@ mod interface__comparison { #[test] fn compare_trees__with_collections() { - let page_element = Element::new(&Path::new("::root::node").unwrap()); - let para1_element = Element::new(&Path::new("::root::node::leaf1").unwrap()); - let para2_element = Element::new(&Path::new("::root::node::leaf2").unwrap()); - let para3_element = Element::new(&Path::new("::root::node::leaf3").unwrap()); + let page_element = Element::new(&Path::new("::root::node").unwrap(), None); + let para1_element = Element::new(&Path::new("::root::node::leaf1").unwrap(), None); + let para2_element = Element::new(&Path::new("::root::node::leaf2").unwrap(), None); + let para3_element = Element::new(&Path::new("::root::node::leaf3").unwrap(), None); let mut local_page = Page::new_from_element("Local Page", page_element.clone()); let mut local_para1 = diff --git a/crates/storage/src/types.rs b/crates/storage/src/types.rs deleted file mode 100644 index 751d6c2d3..000000000 --- a/crates/storage/src/types.rs +++ /dev/null @@ -1,204 +0,0 @@ -//! High-level data structures for storage. - -use core::borrow::Borrow; -use core::marker::PhantomData; - -use borsh::{BorshDeserialize, BorshSerialize}; -use thiserror::Error; - -// fixme! macro expects `calimero_storage` to be in deps -use crate as calimero_storage; -use crate::address::{Path, PathError}; -use crate::entities::{Data, Element}; -use crate::interface::{Interface, StorageError}; -use crate::{AtomicUnit, Collection}; - -/// General error type for storage operations while interacting with complex collections. -#[derive(Debug, Error)] -#[non_exhaustive] -pub enum StoreError { - /// Error while interacting with storage. - #[error(transparent)] - StorageError(#[from] StorageError), - /// Error while interacting with a path. - #[error(transparent)] - PathError(#[from] PathError), -} - -/// A map collection that stores key-value pairs. -#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -#[type_id(255)] -#[root] -pub struct Map { - /// The entries in the map. - entries: Entries, - /// The storage element for the map. - #[storage] - storage: Element, -} - -/// A collection of entries in a map. -#[derive(Collection, Clone, Debug, Eq, PartialEq, PartialOrd)] -#[children(Entry)] -struct Entries { - /// Helper to associate the generic types with the collection. - _priv: PhantomData<(K, V)>, -} - -/// An entry in a map. -#[derive(AtomicUnit, Clone, Debug, Eq, PartialEq, PartialOrd)] -#[type_id(254)] -pub struct Entry { - /// The key for the entry. - key: K, - /// The value for the entry. - value: V, - /// The storage element for the entry. - #[storage] - storage: Element, -} - -impl Map { - /// Create a new map collection. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - pub fn new(path: &Path) -> Result { - let mut this = Self { - entries: Entries::default(), - storage: Element::new(path), - }; - - _ = Interface::save(&mut this)?; - - Ok(this) - } - - /// Insert a key-value pair into the map. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - pub fn insert(&mut self, key: K, value: V) -> Result<(), StoreError> { - let path = self.path(); - // fixme! Reusing the Map's path for now. We "could" concatenate, but it's - // fixme! non-trivial and currently non-functional, so it's been left out - - let storage = Element::new(&path); - // fixme! This uses a random id for the map's entries, which will impair - // fixme! perf on the lookup, as we'd have to fetch and look through all - // fixme! entries to find the one that matches the key we're looking for - // fixme! ideally, the Id should be defined as hash(concat(map_id, key)) - // fixme! which will save on map-wide lookups, getting the item directly - - _ = Interface::add_child_to( - self.storage.id(), - &mut self.entries, - &mut Entry { - key, - value, - storage, - }, - )?; - - Ok(()) - } - - /// Get an iterator over the entries in the map. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - pub fn entries(&self) -> Result, StoreError> { - let entries = Interface::children_of(self.id(), &self.entries)?; - - Ok(entries.into_iter().map(|entry| (entry.key, entry.value))) - } - - /// Get the number of entries in the map. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - #[expect(clippy::len_without_is_empty, reason = "TODO: will be implemented")] - pub fn len(&self) -> Result { - Ok(Interface::child_info_for(self.id(), &self.entries)?.len()) - } - - /// Get the value for a key in the map. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - pub fn get(&self, key: &Q) -> Result, StoreError> - where - K: Borrow, - Q: PartialEq + ?Sized, - { - for (key_, value) in self.entries()? { - if key_.borrow() == key { - return Ok(Some(value)); - } - } - - Ok(None) - } - - /// Remove a key from the map, returning the value at the key if it previously existed. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - pub fn remove(&mut self, key: &Q) -> Result, StoreError> - where - K: Borrow, - Q: PartialEq + ?Sized, - { - let entries = Interface::children_of(self.id(), &self.entries)?; - - let entry_opt = entries.into_iter().find(|entry| entry.key.borrow() == key); - - if let Some(ref entry) = entry_opt { - _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; - } - - Ok(entry_opt.map(|entry| entry.value)) - } - - /// Clear the map, removing all entries. - /// - /// # Errors - /// - /// If an error occurs when interacting with the storage system, or a child - /// [`Element`](crate::entities::Element) cannot be found, an error will be - /// returned. - /// - pub fn clear(&mut self) -> Result<(), StoreError> { - let entries = Interface::children_of(self.id(), &self.entries)?; - - for entry in entries { - _ = Interface::remove_child_from(self.id(), &mut self.entries, entry.id())?; - } - - Ok(()) - } -} From ec9f5219841954c6816e88c8ee9bfd37cba38000 Mon Sep 17 00:00:00 2001 From: Sandi Fatic Date: Mon, 4 Nov 2024 16:26:29 +0100 Subject: [PATCH 56/75] feat: added a simple app with nested map and set (#935) --- Cargo.lock | 8 ++++++ Cargo.toml | 1 + apps/visited/Cargo.toml | 14 +++++++++++ apps/visited/build.sh | 18 ++++++++++++++ apps/visited/src/lib.rs | 55 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 apps/visited/Cargo.toml create mode 100755 apps/visited/build.sh create mode 100644 apps/visited/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 9dd3d106d..9b34af9ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10221,6 +10221,14 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "visited" +version = "0.1.0" +dependencies = [ + "calimero-sdk", + "calimero-storage", +] + [[package]] name = "void" version = "1.0.2" diff --git a/Cargo.toml b/Cargo.toml index 817da3387..7f01e70c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,7 @@ members = [ "./apps/kv-store", "./apps/only-peers", "./apps/gen-ext", + "./apps/visited", "./contracts/context-config", "./contracts/registry", diff --git a/apps/visited/Cargo.toml b/apps/visited/Cargo.toml new file mode 100644 index 000000000..da290a770 --- /dev/null +++ b/apps/visited/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "visited" +version = "0.1.0" +authors.workspace = true +edition.workspace = true +repository.workspace = true +license.workspace = true + +[lib] +crate-type = ["cdylib"] + +[dependencies] +calimero-sdk = { path = "../../crates/sdk" } +calimero-storage = { path = "../../crates/storage" } diff --git a/apps/visited/build.sh b/apps/visited/build.sh new file mode 100755 index 000000000..c993f2db3 --- /dev/null +++ b/apps/visited/build.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -e + +cd "$(dirname $0)" + +TARGET="${CARGO_TARGET_DIR:-../../target}" + +rustup target add wasm32-unknown-unknown + +cargo build --target wasm32-unknown-unknown --profile app-release + +mkdir -p res + +cp $TARGET/wasm32-unknown-unknown/app-release/visited.wasm ./res/ + +if command -v wasm-opt > /dev/null; then + wasm-opt -Oz ./res/visited.wasm -o ./res/visited.wasm +fi diff --git a/apps/visited/src/lib.rs b/apps/visited/src/lib.rs new file mode 100644 index 000000000..563425900 --- /dev/null +++ b/apps/visited/src/lib.rs @@ -0,0 +1,55 @@ +#![allow(clippy::len_without_is_empty)] + +use std::result::Result; + +use calimero_sdk::app; +use calimero_sdk::types::Error; +use calimero_storage::collections::{UnorderedMap, UnorderedSet}; +use calimero_storage::entities::Element; +use calimero_storage::AtomicUnit; + +#[app::state] +#[derive(AtomicUnit, Clone, Debug, PartialEq, PartialOrd)] +#[root] +#[type_id(1)] +pub struct VisitedCities { + visited: UnorderedMap>, + #[storage] + storage: Element, +} + +#[app::logic] +impl VisitedCities { + #[app::init] + pub fn init() -> VisitedCities { + VisitedCities { + visited: UnorderedMap::new().unwrap(), + storage: Element::root(), + } + } + + pub fn add_person(&mut self, person: String) -> Result { + Ok(self + .visited + .insert(person, UnorderedSet::new().unwrap())? + .is_some()) + } + + pub fn add_visited_city(&mut self, person: String, city: String) -> Result { + Ok(self.visited.get(&person)?.unwrap().insert(city)?) + } + + pub fn get_person_with_most_cities_visited(&self) -> Result { + let mut max = 0; + let mut person = String::new(); + + for entry in self.visited.entries()? { + let (person_key, cities_set) = entry; + if cities_set.len()? > max { + max = cities_set.len()?; + person = person_key.clone(); + } + } + Ok(person) + } +} From 4634284b9d968277f827b514e765a8a96d84804a Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Mon, 4 Nov 2024 18:59:14 +0300 Subject: [PATCH 57/75] feat: update sync procedure post-CRDTs (#883) --- Cargo.lock | 6 - apps/kv-store/src/__private.rs | 85 ++++ apps/kv-store/src/lib.rs | 2 + crates/config/src/lib.rs | 41 +- .../config/src/client/env/config/mutate.rs | 6 +- crates/context/config/src/client/relayer.rs | 2 + crates/context/src/lib.rs | 453 +++++++++++------- crates/merod/Cargo.toml | 1 - crates/merod/src/cli/init.rs | 51 +- crates/merod/src/cli/run.rs | 6 +- crates/network/Cargo.toml | 1 - crates/network/src/client.rs | 2 - crates/network/src/config.rs | 32 -- crates/network/src/lib.rs | 1 - crates/network/src/stream.rs | 12 +- crates/network/src/stream/codec.rs | 48 +- crates/network/src/tests/stream/codec.rs | 6 +- crates/node-primitives/src/lib.rs | 6 +- crates/node/Cargo.toml | 6 +- crates/node/src/catchup/actions.rs | 65 --- crates/node/src/interactive_cli.rs | 23 +- .../node/src/interactive_cli/applications.rs | 2 +- crates/node/src/interactive_cli/call.rs | 2 +- crates/node/src/interactive_cli/identity.rs | 2 +- crates/node/src/lib.rs | 341 +++++-------- crates/node/src/sync.rs | 221 +++++++++ crates/node/src/sync/blobs.rs | 169 +++++++ crates/node/src/sync/state.rs | 225 +++++++++ crates/node/src/types.rs | 120 ++--- crates/primitives/src/application.rs | 4 + crates/primitives/src/blobs.rs | 4 + crates/primitives/src/context.rs | 20 +- crates/primitives/src/hash.rs | 25 +- crates/primitives/src/identity.rs | 4 + crates/runtime/examples/demo.rs | 2 +- crates/runtime/src/logic.rs | 42 +- crates/runtime/src/logic/imports.rs | 5 +- crates/sdk/macros/src/logic/method.rs | 6 +- crates/sdk/src/env.rs | 8 +- crates/sdk/src/sys.rs | 3 +- .../applications/install_application.rs | 2 +- crates/storage/src/env.rs | 51 +- crates/storage/src/integration.rs | 2 +- crates/storage/src/interface.rs | 154 ++++-- crates/storage/src/lib.rs | 1 + crates/storage/src/store.rs | 6 +- crates/storage/src/sync.rs | 84 ++++ crates/storage/src/tests/interface.rs | 49 +- crates/store/blobs/examples/blobstore.rs | 17 +- crates/store/blobs/src/lib.rs | 10 +- crates/store/src/types/context.rs | 12 +- 51 files changed, 1612 insertions(+), 836 deletions(-) create mode 100644 apps/kv-store/src/__private.rs delete mode 100644 crates/node/src/catchup/actions.rs create mode 100644 crates/node/src/sync.rs create mode 100644 crates/node/src/sync/blobs.rs create mode 100644 crates/node/src/sync/state.rs create mode 100644 crates/storage/src/sync.rs diff --git a/Cargo.lock b/Cargo.lock index 9b34af9ea..5cdd242f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1199,7 +1199,6 @@ dependencies = [ "multiaddr", "owo-colors", "serde", - "serde_json", "thiserror", "tokio", "tokio-test", @@ -1219,7 +1218,6 @@ dependencies = [ "calimero-primitives", "calimero-runtime", "calimero-server", - "calimero-storage", "calimero-store", "camino", "clap", @@ -1228,12 +1226,9 @@ dependencies = [ "libp2p", "owo-colors", "rand 0.8.5", - "serde", "serde_json", - "thiserror", "tokio", "tracing", - "url", ] [[package]] @@ -5268,7 +5263,6 @@ dependencies = [ "libp2p", "multiaddr", "near-crypto 0.26.0", - "rand 0.8.5", "starknet", "tokio", "toml_edit 0.22.20", diff --git a/apps/kv-store/src/__private.rs b/apps/kv-store/src/__private.rs new file mode 100644 index 000000000..471b84c67 --- /dev/null +++ b/apps/kv-store/src/__private.rs @@ -0,0 +1,85 @@ +use calimero_sdk::borsh::{from_slice, to_vec}; +use calimero_sdk::{app, env}; +use calimero_storage::collections::unordered_map::{Entry, UnorderedMap}; +use calimero_storage::entities::Data; +use calimero_storage::integration::Comparison; +use calimero_storage::interface::{Action, Interface, StorageError}; +use calimero_storage::sync::{self, SyncArtifact}; + +use crate::KvStore; + +#[app::logic] +impl KvStore { + pub fn __calimero_sync_next() -> Result<(), StorageError> { + let args = env::input().expect("fatal: missing input"); + + let artifact = + from_slice::(&args).map_err(StorageError::DeserializationError)?; + + let this = Interface::root::()?; + + match artifact { + SyncArtifact::Actions(actions) => { + for action in actions { + let _ignored = match action { + Action::Add { type_id, .. } | Action::Update { type_id, .. } => { + match type_id { + 1 => Interface::apply_action::(action)?, + 254 => Interface::apply_action::>(action)?, + 255 => { + Interface::apply_action::>(action)? + } + _ => return Err(StorageError::UnknownType(type_id)), + } + } + Action::Delete { .. } => { + todo!("how are we supposed to identify the entity to delete???????") + } + Action::Compare { .. } => { + todo!("how are we supposed to compare when `Comparison` needs `type_id`???????") + } + }; + } + + if let Some(this) = this { + return Interface::commit_root(this); + } + } + SyncArtifact::Comparisons(comparisons) => { + if comparisons.is_empty() { + sync::push_comparison(Comparison { + type_id: ::type_id(), + data: this + .as_ref() + .map(to_vec) + .transpose() + .map_err(StorageError::SerializationError)?, + comparison_data: Interface::generate_comparison_data(this.as_ref())?, + }); + } + + for Comparison { + type_id, + data, + comparison_data, + } in comparisons + { + match type_id { + 1 => Interface::compare_affective::(data, comparison_data)?, + 254 => Interface::compare_affective::>( + data, + comparison_data, + )?, + 255 => Interface::compare_affective::>( + data, + comparison_data, + )?, + _ => return Err(StorageError::UnknownType(type_id)), + }; + } + } + } + + Ok(()) + } +} diff --git a/apps/kv-store/src/lib.rs b/apps/kv-store/src/lib.rs index ba5d4d5fc..ebe163683 100644 --- a/apps/kv-store/src/lib.rs +++ b/apps/kv-store/src/lib.rs @@ -8,6 +8,8 @@ use calimero_storage::collections::UnorderedMap; use calimero_storage::entities::Element; use calimero_storage::AtomicUnit; +mod __private; + #[app::state(emits = for<'a> Event<'a>)] #[derive(AtomicUnit, Clone, Debug, PartialEq, PartialOrd)] #[root] diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 6bb7fb4bb..3c1eb09f4 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -1,7 +1,8 @@ +use core::time::Duration; use std::fs::{read_to_string, write}; use calimero_context::config::ContextConfig; -use calimero_network::config::{BootstrapConfig, CatchupConfig, DiscoveryConfig, SwarmConfig}; +use calimero_network::config::{BootstrapConfig, DiscoveryConfig, SwarmConfig}; use calimero_server::admin::service::AdminConfig; use calimero_server::jsonrpc::JsonRpcConfig; use calimero_server::ws::WsConfig; @@ -24,6 +25,8 @@ pub struct ConfigFile { #[serde(flatten)] pub network: NetworkConfig, + pub sync: SyncConfig, + pub datastore: DataStoreConfig, pub blobstore: BlobStoreConfig, @@ -31,6 +34,14 @@ pub struct ConfigFile { pub context: ContextConfig, } +#[derive(Copy, Clone, Debug, Serialize, Deserialize)] +pub struct SyncConfig { + #[serde(rename = "timeout_ms", with = "serde_duration")] + pub timeout: Duration, + #[serde(rename = "interval_ms", with = "serde_duration")] + pub interval: Duration, +} + #[derive(Debug, Deserialize, Serialize)] #[non_exhaustive] pub struct NetworkConfig { @@ -43,8 +54,6 @@ pub struct NetworkConfig { #[serde(default)] pub discovery: DiscoveryConfig, - - pub catchup: CatchupConfig, } impl NetworkConfig { @@ -54,14 +63,12 @@ impl NetworkConfig { bootstrap: BootstrapConfig, discovery: DiscoveryConfig, server: ServerConfig, - catchup: CatchupConfig, ) -> Self { Self { swarm, server, bootstrap, discovery, - catchup, } } } @@ -128,14 +135,16 @@ impl ConfigFile { #[must_use] pub const fn new( identity: libp2p_identity::Keypair, + network: NetworkConfig, + sync: SyncConfig, datastore: DataStoreConfig, blobstore: BlobStoreConfig, context: ContextConfig, - network: NetworkConfig, ) -> Self { Self { identity, network, + sync, datastore, blobstore, context, @@ -174,6 +183,26 @@ impl ConfigFile { } } +mod serde_duration { + use core::time::Duration; + + use serde::{Deserialize, Deserializer, Serializer}; + + pub fn serialize(duration: &Duration, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_u64(duration.as_millis() as u64) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + u64::deserialize(deserializer).map(Duration::from_millis) + } +} + pub mod serde_identity { use core::fmt::{self, Formatter}; diff --git a/crates/context/config/src/client/env/config/mutate.rs b/crates/context/config/src/client/env/config/mutate.rs index f45f9ba6e..8084261b0 100644 --- a/crates/context/config/src/client/env/config/mutate.rs +++ b/crates/context/config/src/client/env/config/mutate.rs @@ -46,7 +46,11 @@ impl<'a> Method for Mutate<'a> { } fn decode(response: Vec) -> eyre::Result { - serde_json::from_slice(&response).map_err(Into::into) + if !response.is_empty() { + eyre::bail!("unexpected response {:?}", response); + } + + Ok(()) } } diff --git a/crates/context/config/src/client/relayer.rs b/crates/context/config/src/client/relayer.rs index 33ae0600c..1a651c30c 100644 --- a/crates/context/config/src/client/relayer.rs +++ b/crates/context/config/src/client/relayer.rs @@ -60,6 +60,8 @@ impl Transport for RelayerTransport { .send() .await?; + // todo! check response.status code + response.bytes().await.map(Into::into) } } diff --git a/crates/context/src/lib.rs b/crates/context/src/lib.rs index ba43746f4..9c340b3e5 100644 --- a/crates/context/src/lib.rs +++ b/crates/context/src/lib.rs @@ -1,7 +1,6 @@ #![expect(clippy::unwrap_in_result, reason = "Repr transmute")] use core::error::Error; -use core::str::FromStr; use std::collections::HashSet; use std::io::Error as IoError; use std::sync::Arc; @@ -20,7 +19,9 @@ use calimero_network::types::IdentTopic; use calimero_node_primitives::{ExecutionRequest, ServerSender}; use calimero_primitives::application::{Application, ApplicationId, ApplicationSource}; use calimero_primitives::blobs::BlobId; -use calimero_primitives::context::{Context, ContextId, ContextInvitationPayload}; +use calimero_primitives::context::{ + Context, ContextConfigParams, ContextId, ContextInvitationPayload, +}; use calimero_primitives::hash::Hash; use calimero_primitives::identity::{PrivateKey, PublicKey}; use calimero_store::key::{ @@ -38,6 +39,7 @@ use camino::Utf8PathBuf; use eyre::{bail, Result as EyreResult}; use futures_util::{AsyncRead, TryStreamExt}; use rand::rngs::StdRng; +use rand::seq::IteratorRandom; use rand::SeedableRng; use reqwest::{Client as ReqClient, Url}; use tokio::fs::File; @@ -179,7 +181,17 @@ impl ContextManager { bail!("Application is not installed on node.") }; - self.add_context(&context, identity_secret, true)?; + self.add_context( + &context, + identity_secret, + Some(ContextConfigParams { + protocol: self.client_config.new.protocol.as_str().into(), + network_id: self.client_config.new.network.as_str().into(), + contract_id: self.client_config.new.contract_id.as_str().into(), + application_revision: 0, + members_revision: 0, + }), + )?; let (tx, rx) = oneshot::channel(); @@ -222,7 +234,7 @@ impl ContextManager { ApplicationMetadataConfig(Repr::new(application.metadata.into())), ), ) - .send(context.id.rt().expect("infallible conversion")) + .send(*context_secret) .await?; Ok((context.id, identity_secret.public_key())) @@ -237,10 +249,10 @@ impl ContextManager { if let Err(err) = this.delete_context(&context_id).await { error!(%context_id, %err, "Failed to clean up context after failed creation"); } - } - - if let Err(err) = this.subscribe(&context.id).await { - error!(%context_id, %err, "Failed to subscribe to context after creation"); + } else { + if let Err(err) = this.subscribe(&context.id).await { + error!(%context_id, %err, "Failed to subscribe to context after creation"); + } } let _ignored = result_sender.send(result); @@ -253,17 +265,19 @@ impl ContextManager { &self, context: &Context, identity_secret: PrivateKey, - is_new: bool, + context_config: Option>, ) -> EyreResult<()> { let mut handle = self.store.handle(); - if is_new { + if let Some(context_config) = context_config { handle.put( &ContextConfigKey::new(context.id), &ContextConfigValue::new( - self.client_config.new.protocol.as_str().into(), - self.client_config.new.network.as_str().into(), - self.client_config.new.contract_id.as_str().into(), + context_config.protocol.into_owned().into_boxed_str(), + context_config.network_id.into_owned().into_boxed_str(), + context_config.contract_id.into_owned().into_boxed_str(), + context_config.application_revision, + context_config.members_revision, ), )?; @@ -306,7 +320,7 @@ impl ContextManager { bail!("identity mismatch") } - let mut handle = self.store.handle(); + let handle = self.store.handle(); let identity_key = ContextIdentityKey::new(context_id, invitee_id); @@ -314,73 +328,25 @@ impl ContextManager { return Ok(None); } - let client = self.config_client.query::( - protocol.into(), - network_id.into(), - contract_id.into(), - ); - - for (offset, length) in (0..).map(|i| (100_usize.saturating_mul(i), 100)) { - let members = client - .members( - context_id.rt().expect("infallible conversion"), - offset, - length, - ) - .await?; - - if members.is_empty() { - break; - } - - for member in members { - let member = member.as_bytes().into(); - - let key = ContextIdentityKey::new(context_id, member); - - if !handle.has(&key)? { - handle.put(&key, &ContextIdentityValue { private_key: None })?; - } - } - } - - if !handle.has(&identity_key)? { - bail!("unable to join context: not a member, ask for an invite") - }; - - let application = client - .application(context_id.rt().expect("infallible conversion")) - .await?; - - let context = Context::new( - context_id, - application.id.as_bytes().into(), - Hash::default(), - ); - let context_exists = handle.has(&ContextMetaKey::new(context_id))?; - if !self.is_application_installed(&context.application_id)? { - let source = Url::parse(&application.source.0)?; - - let metadata = application.metadata.0.to_vec(); + let mut config = (!context_exists).then(|| ContextConfigParams { + protocol: protocol.into(), + network_id: network_id.into(), + contract_id: contract_id.into(), + application_revision: 0, + members_revision: 0, + }); - let application_id = match source.scheme() { - "http" | "https" => self.install_application_from_url(source, metadata).await?, - _ => self.install_application( - application.blob.as_bytes().into(), - application.size, - &source.into(), - metadata, - )?, - }; + let context = self + .internal_sync_context_config(context_id, config.as_mut()) + .await?; - if application_id != context.application_id { - bail!("application mismatch") - } + if !handle.has(&identity_key)? { + bail!("unable to join context: not a member, invalid invitation?") } - self.add_context(&context, identity_secret, !context_exists)?; + self.add_context(&context, identity_secret, config)?; self.subscribe(&context.id).await?; @@ -435,21 +401,173 @@ impl ContextManager { Ok(Some(invitation_payload)) } + pub async fn sync_context_config(&self, context_id: ContextId) -> EyreResult { + self.internal_sync_context_config(context_id, None).await + } + + async fn internal_sync_context_config( + &self, + context_id: ContextId, + config: Option<&mut ContextConfigParams<'_>>, + ) -> EyreResult { + let mut handle = self.store.handle(); + + let context = handle.get(&ContextMetaKey::new(context_id))?; + + let mut alt_config = config.as_ref().map_or_else( + || { + let Some(config) = handle.get(&ContextConfigKey::new(context_id))? else { + eyre::bail!("Context config not found") + }; + + Ok(Some(ContextConfigParams { + protocol: config.protocol.into_string().into(), + network_id: config.network.into_string().into(), + contract_id: config.contract.into_string().into(), + application_revision: config.application_revision, + members_revision: config.members_revision, + })) + }, + |_| Ok(None), + )?; + + let mut config = config; + let context_exists = alt_config.is_some(); + let Some(config) = config.as_deref_mut().or(alt_config.as_mut()) else { + eyre::bail!("Context config not found") + }; + + let client = self.config_client.query::( + config.protocol.as_ref().into(), + config.network_id.as_ref().into(), + config.contract_id.as_ref().into(), + ); + + let members_revision = client + .members_revision(context_id.rt().expect("infallible conversion")) + .await?; + + if context_exists && members_revision != config.members_revision { + config.members_revision = members_revision; + + for (offset, length) in (0..).map(|i| (100_usize.saturating_mul(i), 100)) { + let members = client + .members( + context_id.rt().expect("infallible conversion"), + offset, + length, + ) + .await?; + + if members.is_empty() { + break; + } + + for member in members { + let member = member.as_bytes().into(); + + let key = ContextIdentityKey::new(context_id, member); + + if !handle.has(&key)? { + handle.put(&key, &ContextIdentityValue { private_key: None })?; + } + } + } + } + + let application_revision = client + .application_revision(context_id.rt().expect("infallible conversion")) + .await?; + + let mut application_id = None; + + if context_exists && application_revision != config.application_revision { + config.application_revision = application_revision; + + let application = client + .application(context_id.rt().expect("infallible conversion")) + .await?; + + let application_id = { + let id = application.id.as_bytes().into(); + application_id = Some(id); + id + }; + + if !self.is_application_installed(&application_id)? { + let source = Url::parse(&application.source.0)?; + + let metadata = application.metadata.0.to_vec(); + + let derived_application_id = match source.scheme() { + "http" | "https" => { + self.install_application_from_url(source, metadata, None) + .await? + } + _ => self.install_application( + application.blob.as_bytes().into(), + application.size, + &source.into(), + metadata, + )?, + }; + + if application_id != derived_application_id { + bail!("application mismatch") + } + } + } + + if let Some(config) = alt_config { + handle.put( + &ContextConfigKey::new(context_id), + &ContextConfigValue::new( + config.protocol.into_owned().into_boxed_str(), + config.network_id.into_owned().into_boxed_str(), + config.contract_id.into_owned().into_boxed_str(), + config.application_revision, + config.members_revision, + ), + )?; + } + + context.map_or_else( + || { + Ok(Context::new( + context_id, + application_id.expect("must've been defined"), + Hash::default(), + )) + }, + |meta| { + let context = Context::new( + context_id, + meta.application.application_id(), + meta.root_hash.into(), + ); + + self.save_context(&context)?; + + Ok(context) + }, + ) + } + pub async fn is_context_pending_catchup(&self, context_id: &ContextId) -> bool { self.state.read().await.pending_catchup.contains(context_id) } - pub async fn get_any_pending_catchup_context(&self) -> Option { + pub async fn get_n_pending_sync_context(&self, amount: usize) -> Vec { self.state .read() .await .pending_catchup .iter() - .next() .copied() + .choose_multiple(&mut rand::thread_rng(), amount) } - pub async fn clear_context_pending_catchup(&self, context_id: &ContextId) -> bool { + pub async fn clear_context_pending_sync(&self, context_id: &ContextId) -> bool { self.state.write().await.pending_catchup.remove(context_id) } @@ -579,21 +697,27 @@ impl ContextManager { let mut iter = handle.iter::()?; - let mut ids = vec![]; + let start = start.and_then(|s| iter.seek(ContextMetaKey::new(s)).transpose()); - if let Some(start) = start { - if let Some(key) = iter.seek(ContextMetaKey::new(start))? { - ids.push(key.context_id()); - } - } + let mut ids = vec![]; - for key in iter.keys() { + for key in start.into_iter().chain(iter.keys()) { ids.push(key?.context_id()); } Ok(ids) } + pub fn has_context_identity( + &self, + context_id: ContextId, + public_key: PublicKey, + ) -> EyreResult { + let handle = self.store.handle(); + + Ok(handle.has(&ContextIdentityKey::new(context_id, public_key))?) + } + fn get_context_identities( &self, context_id: ContextId, @@ -602,18 +726,13 @@ impl ContextManager { let handle = self.store.handle(); let mut iter = handle.iter::()?; - let mut ids = Vec::::new(); - - let first = 'first: { - let Some(k) = iter - .seek(ContextIdentityKey::new(context_id, [0; 32].into())) - .transpose() - else { - break 'first None; - }; - Some((k, iter.read())) - }; + let first = iter + .seek(ContextIdentityKey::new(context_id, [0; 32].into())) + .transpose() + .map(|k| (k, iter.read())); + + let mut ids = Vec::new(); for (k, v) in first.into_iter().chain(iter.entries()) { let (k, v) = (k?, v?); @@ -653,20 +772,11 @@ impl ContextManager { let mut contexts = vec![]; - if let Some(start) = start { - // todo! Iter shouldn't behave like DBIter, first next should return sought element - if let Some(key) = iter.seek(ContextMetaKey::new(start))? { - let value = iter.read()?; + // todo! Iter shouldn't behave like DBIter, first next should return sought element + let start = + start.and_then(|s| Some((iter.seek(ContextMetaKey::new(s)).transpose()?, iter.read()))); - contexts.push(Context::new( - key.context_id(), - value.application.application_id(), - value.root_hash.into(), - )); - } - } - - for (k, v) in iter.entries() { + for (k, v) in start.into_iter().chain(iter.entries()) { let (k, v) = (k?, v?); contexts.push(Context::new( k.context_id(), @@ -683,6 +793,8 @@ impl ContextManager { context_id: ContextId, application_id: ApplicationId, ) -> EyreResult<()> { + // todo! use context config + let mut handle = self.store.handle(); let key = ContextMetaKey::new(context_id); @@ -700,6 +812,35 @@ impl ContextManager { // vv~ these would be more appropriate in an ApplicationManager + #[expect(clippy::similar_names, reason = "Different enough")] + pub async fn add_blob( + &self, + stream: S, + expected_size: Option, + expected_hash: Option, + ) -> EyreResult<(BlobId, u64)> { + let (blob_id, hash, size) = self + .blob_manager + .put_sized(expected_size.map(Size::Exact), stream) + .await?; + + if matches!(expected_hash, Some(expected_hash) if hash != expected_hash) { + bail!("fatal: blob hash mismatch"); + } + + if matches!(expected_size, Some(expected_size) if size != expected_size) { + bail!("fatal: blob size mismatch"); + } + + Ok((blob_id, size)) + } + + pub fn has_blob_available(&self, blob_id: BlobId) -> EyreResult { + Ok(self.blob_manager.has(blob_id)?) + } + + // vv~ these would be more appropriate in an ApplicationManager + fn install_application( &self, blob_id: BlobId, @@ -739,19 +880,12 @@ impl ContextManager { let file = File::open(&path).await?; - let meta = file.metadata().await?; - - let expected_size = meta.len(); + let expected_size = file.metadata().await?.len(); let (blob_id, size) = self - .blob_manager - .put_sized(Some(Size::Exact(expected_size)), file.compat()) + .add_blob(file.compat(), Some(expected_size), None) .await?; - if size != expected_size { - bail!("fatal: file size mismatch") - } - let Ok(uri) = Url::from_file_path(path) else { bail!("non-absolute path") }; @@ -764,8 +898,7 @@ impl ContextManager { &self, url: Url, metadata: Vec, - // hash: Hash, - // todo! BlobMgr should return hash of content + expected_hash: Option, ) -> EyreResult { let uri = url.as_str().parse()?; @@ -774,51 +907,19 @@ impl ContextManager { let expected_size = response.content_length(); let (blob_id, size) = self - .blob_manager - .put_sized( - expected_size.map(Size::Exact), + .add_blob( response .bytes_stream() .map_err(IoError::other) .into_async_read(), + expected_size, + expected_hash, ) .await?; - if matches!(expected_size, Some(expected_size) if size != expected_size) { - bail!("fatal: content size mismatch") - } - - // todo! if blob hash doesn't match, remove it - self.install_application(blob_id, size, &uri, metadata) } - pub async fn install_application_from_stream( - &self, - expected_size: u64, - stream: AR, - source: &ApplicationSource, - metadata: Vec, - // hash: Hash, - // todo! BlobMgr should return hash of content - ) -> EyreResult - where - AR: AsyncRead, - { - let (blob_id, size) = self - .blob_manager - .put_sized(Some(Size::Exact(expected_size)), stream) - .await?; - - if size != expected_size { - bail!("fatal: content size mismatch: {} {}", size, expected_size) - } - - // todo! if blob hash doesn't match, remove it - - self.install_application(blob_id, size, source, metadata) - } - pub fn list_installed_applications(&self) -> EyreResult> { let handle = self.store.handle(); @@ -844,34 +945,14 @@ impl ContextManager { let handle = self.store.handle(); if let Some(application) = handle.get(&ApplicationMetaKey::new(*application_id))? { - if handle.has(&application.blob)? { + if self.has_blob_available(application.blob.blob_id())? { return Ok(true); } - }; + } Ok(false) } - pub async fn get_latest_application(&self, context_id: ContextId) -> EyreResult { - let client = self.config_client.query::( - self.client_config.new.protocol.as_str().into(), - self.client_config.new.network.as_str().into(), - self.client_config.new.contract_id.as_str().into(), - ); - - let application = client - .application(context_id.rt().expect("infallible conversion")) - .await?; - - Ok(Application::new( - application.id.as_bytes().into(), - application.blob.as_bytes().into(), - application.size, - ApplicationSource::from_str(&application.source.0)?, - application.metadata.0.into_inner().into_owned(), - )) - } - pub fn get_application( &self, application_id: &ApplicationId, @@ -895,10 +976,16 @@ impl ContextManager { &self, application_id: &ApplicationId, ) -> EyreResult>> { - let Some(mut stream) = self.get_application_blob(application_id)? else { + let handle = self.store.handle(); + + let Some(application) = handle.get(&ApplicationMetaKey::new(*application_id))? else { return Ok(None); }; + let Some(mut stream) = self.get_blob(application.blob.blob_id())? else { + bail!("fatal: application points to dangling blob"); + }; + // todo! we can preallocate the right capacity here // todo! once `blob_manager::get` -> Blob{size}:Stream let mut buf = vec![]; @@ -911,17 +998,11 @@ impl ContextManager { Ok(Some(buf)) } - pub fn get_application_blob(&self, application_id: &ApplicationId) -> EyreResult> { - let handle = self.store.handle(); - - let Some(application) = handle.get(&ApplicationMetaKey::new(*application_id))? else { + pub fn get_blob(&self, blob_id: BlobId) -> EyreResult> { + let Some(stream) = self.blob_manager.get(blob_id)? else { return Ok(None); }; - let Some(stream) = self.blob_manager.get(application.blob.blob_id())? else { - bail!("fatal: application points to dangling blob"); - }; - Ok(Some(stream)) } diff --git a/crates/merod/Cargo.toml b/crates/merod/Cargo.toml index 21b6e2917..b7f6b0cd6 100644 --- a/crates/merod/Cargo.toml +++ b/crates/merod/Cargo.toml @@ -21,7 +21,6 @@ hex.workspace = true libp2p.workspace = true multiaddr.workspace = true near-crypto.workspace = true -rand.workspace = true starknet.workspace = true tokio = { workspace = true, features = ["io-std", "macros"] } toml_edit.workspace = true diff --git a/crates/merod/src/cli/init.rs b/crates/merod/src/cli/init.rs index 255066d10..a7280c7d0 100644 --- a/crates/merod/src/cli/init.rs +++ b/crates/merod/src/cli/init.rs @@ -4,6 +4,7 @@ use std::fs::{create_dir, create_dir_all}; use calimero_config::{ BlobStoreConfig, ConfigFile, DataStoreConfig as StoreConfigFile, NetworkConfig, ServerConfig, + SyncConfig, }; use calimero_context::config::ContextConfig; use calimero_context_config::client::config::{ @@ -14,8 +15,7 @@ use calimero_context_config::client::protocol::{ near as near_protocol, starknet as starknet_protocol, }; use calimero_network::config::{ - BootstrapConfig, BootstrapNodes, CatchupConfig, DiscoveryConfig, RelayConfig, RendezvousConfig, - SwarmConfig, + BootstrapConfig, BootstrapNodes, DiscoveryConfig, RelayConfig, RendezvousConfig, SwarmConfig, }; use calimero_server::admin::service::AdminConfig; use calimero_server::jsonrpc::JsonRpcConfig; @@ -29,7 +29,6 @@ use eyre::{bail, Result as EyreResult, WrapErr}; use libp2p::identity::Keypair; use multiaddr::{Multiaddr, Protocol}; use near_crypto::{KeyType, SecretKey}; -use rand::{thread_rng, Rng}; use starknet::signers::SigningKey; use tracing::{info, warn}; use url::Url; @@ -175,6 +174,28 @@ impl InitCommand { let config = ConfigFile::new( identity, + NetworkConfig::new( + SwarmConfig::new(listen), + BootstrapConfig::new(BootstrapNodes::new(boot_nodes)), + DiscoveryConfig::new( + mdns, + RendezvousConfig::new(self.rendezvous_registrations_limit), + RelayConfig::new(self.relay_registrations_limit), + ), + ServerConfig::new( + self.server_host + .into_iter() + .map(|host| Multiaddr::from(host).with(Protocol::Tcp(self.server_port))) + .collect(), + Some(AdminConfig::new(true)), + Some(JsonRpcConfig::new(true)), + Some(WsConfig::new(true)), + ), + ), + SyncConfig { + timeout: Duration::from_secs(30), + interval: Duration::from_secs(30), + }, StoreConfigFile::new("data".into()), BlobStoreConfig::new("blobs".into()), ContextConfig { @@ -238,30 +259,6 @@ impl InitCommand { }, }, }, - NetworkConfig::new( - SwarmConfig::new(listen), - BootstrapConfig::new(BootstrapNodes::new(boot_nodes)), - DiscoveryConfig::new( - mdns, - RendezvousConfig::new(self.rendezvous_registrations_limit), - RelayConfig::new(self.relay_registrations_limit), - ), - ServerConfig::new( - self.server_host - .into_iter() - .map(|host| Multiaddr::from(host).with(Protocol::Tcp(self.server_port))) - .collect(), - Some(AdminConfig::new(true)), - Some(JsonRpcConfig::new(true)), - Some(WsConfig::new(true)), - ), - CatchupConfig::new( - 50, - Duration::from_secs(2), - Duration::from_secs(2), - Duration::from_millis(thread_rng().gen_range(0..1001)), - ), - ), ); config.save(&path)?; diff --git a/crates/merod/src/cli/run.rs b/crates/merod/src/cli/run.rs index a023280ec..9f83a7f7e 100644 --- a/crates/merod/src/cli/run.rs +++ b/crates/merod/src/cli/run.rs @@ -1,6 +1,7 @@ use calimero_blobstore::config::BlobStoreConfig; use calimero_config::ConfigFile; use calimero_network::config::NetworkConfig; +use calimero_node::sync::SyncConfig; use calimero_node::{start, NodeConfig}; use calimero_server::config::ServerConfig; use calimero_store::config::StoreConfig; @@ -31,8 +32,11 @@ impl RunCommand { config.network.swarm, config.network.bootstrap, config.network.discovery, - config.network.catchup, ), + SyncConfig { + timeout: config.sync.timeout, + interval: config.sync.interval, + }, StoreConfig::new(path.join(config.datastore.path)), BlobStoreConfig::new(path.join(config.blobstore.path)), config.context, diff --git a/crates/network/Cargo.toml b/crates/network/Cargo.toml index 64c5ccccc..10b0274d2 100644 --- a/crates/network/Cargo.toml +++ b/crates/network/Cargo.toml @@ -31,7 +31,6 @@ libp2p-stream.workspace = true multiaddr.workspace = true owo-colors.workspace = true serde = { workspace = true, features = ["derive"] } -serde_json.workspace = true thiserror.workspace = true tokio = { workspace = true, features = ["io-util", "macros"] } tokio-util = { workspace = true, features = ["codec", "compat"] } diff --git a/crates/network/src/client.rs b/crates/network/src/client.rs index 95513396c..85c858dca 100644 --- a/crates/network/src/client.rs +++ b/crates/network/src/client.rs @@ -5,13 +5,11 @@ use libp2p::gossipsub::{IdentTopic, MessageId, TopicHash}; use libp2p::{Multiaddr, PeerId}; use tokio::sync::{mpsc, oneshot}; -use crate::config::CatchupConfig; use crate::stream::Stream; use crate::Command; #[derive(Clone, Debug)] pub struct NetworkClient { - pub catchup_config: CatchupConfig, pub(crate) sender: mpsc::Sender, } diff --git a/crates/network/src/config.rs b/crates/network/src/config.rs index e912a5b21..da1a35786 100644 --- a/crates/network/src/config.rs +++ b/crates/network/src/config.rs @@ -32,7 +32,6 @@ pub struct NetworkConfig { pub swarm: SwarmConfig, pub bootstrap: BootstrapConfig, pub discovery: DiscoveryConfig, - pub catchup: CatchupConfig, } impl NetworkConfig { @@ -42,14 +41,12 @@ impl NetworkConfig { swarm: SwarmConfig, bootstrap: BootstrapConfig, discovery: DiscoveryConfig, - catchup: CatchupConfig, ) -> Self { Self { identity, swarm, bootstrap, discovery, - catchup, } } } @@ -211,35 +208,6 @@ impl Default for RendezvousConfig { } } -#[derive(Clone, Copy, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct CatchupConfig { - pub batch_size: u8, - - pub receive_timeout: Duration, - - pub interval: Duration, - - pub initial_delay: Duration, -} - -impl CatchupConfig { - #[must_use] - pub const fn new( - batch_size: u8, - receive_timeout: Duration, - interval: Duration, - initial_delay: Duration, - ) -> Self { - Self { - batch_size, - receive_timeout, - interval, - initial_delay, - } - } -} - fn serialize_rendezvous_namespace( namespace: &Namespace, serializer: S, diff --git a/crates/network/src/lib.rs b/crates/network/src/lib.rs index c38549413..7399bf7a9 100644 --- a/crates/network/src/lib.rs +++ b/crates/network/src/lib.rs @@ -168,7 +168,6 @@ fn init( let (event_sender, event_receiver) = mpsc::channel(32); let client = NetworkClient { - catchup_config: config.catchup, sender: command_sender, }; diff --git a/crates/network/src/stream.rs b/crates/network/src/stream.rs index 58e71b7c4..782dcf40e 100644 --- a/crates/network/src/stream.rs +++ b/crates/network/src/stream.rs @@ -14,7 +14,7 @@ use tokio_util::codec::Framed; use tokio_util::compat::{Compat, FuturesAsyncReadCompatExt}; use super::EventLoop; -use crate::stream::codec::MessageJsonCodec; +use crate::stream::codec::MessageCodec; use crate::types::NetworkEvent; mod codec; @@ -28,20 +28,20 @@ pub(crate) const CALIMERO_STREAM_PROTOCOL: StreamProtocol = #[derive(Debug)] pub struct Stream { - inner: Framed>, MessageJsonCodec>, + inner: Framed>, MessageCodec>, } impl Stream { #[must_use] pub fn new(stream: P2pStream) -> Self { let stream = BufStream::new(stream.compat()); - let stream = Framed::new(stream, MessageJsonCodec::new(MAX_MESSAGE_SIZE)); + let stream = Framed::new(stream, MessageCodec::new(MAX_MESSAGE_SIZE)); Self { inner: stream } } } impl FuturesStream for Stream { - type Item = Result; + type Item = Result, CodecError>; fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { let inner = Pin::new(&mut self.get_mut().inner); @@ -49,14 +49,14 @@ impl FuturesStream for Stream { } } -impl FuturesSink for Stream { +impl<'a> FuturesSink> for Stream { type Error = CodecError; fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { self.inner.poll_ready_unpin(cx) } - fn start_send(mut self: Pin<&mut Self>, item: Message) -> Result<(), Self::Error> { + fn start_send(mut self: Pin<&mut Self>, item: Message<'a>) -> Result<(), Self::Error> { self.inner.start_send_unpin(item) } diff --git a/crates/network/src/stream/codec.rs b/crates/network/src/stream/codec.rs index 192cc1531..e3e280d0f 100644 --- a/crates/network/src/stream/codec.rs +++ b/crates/network/src/stream/codec.rs @@ -2,24 +2,25 @@ #[path = "../tests/stream/codec.rs"] mod tests; +use core::slice; +use std::borrow::Cow; use std::io::Error as IoError; use bytes::{Bytes, BytesMut}; use serde::{Deserialize, Serialize}; -use serde_json::{from_slice as from_json_slice, to_vec as to_json_vec, Error as JsonError}; use thiserror::Error as ThisError; use tokio_util::codec::{Decoder, Encoder, LengthDelimitedCodec}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[non_exhaustive] -pub struct Message { - pub data: Vec, +pub struct Message<'a> { + pub data: Cow<'a, [u8]>, } -impl Message { +impl<'a> Message<'a> { #[must_use] - pub const fn new(data: Vec) -> Self { - Self { data } + pub fn new>>(data: T) -> Self { + Self { data: data.into() } } } @@ -28,27 +29,23 @@ impl Message { #[non_exhaustive] pub enum CodecError { StdIo(#[from] IoError), - SerDe(JsonError), } #[derive(Debug)] -pub struct MessageJsonCodec { +pub struct MessageCodec { length_codec: LengthDelimitedCodec, } -impl MessageJsonCodec { +impl MessageCodec { pub fn new(max_message_size: usize) -> Self { - let mut codec = LengthDelimitedCodec::new(); - codec.set_max_frame_length(max_message_size); - - Self { - length_codec: codec, - } + let mut length_codec = LengthDelimitedCodec::new(); + length_codec.set_max_frame_length(max_message_size); + Self { length_codec } } } -impl Decoder for MessageJsonCodec { - type Item = Message; +impl Decoder for MessageCodec { + type Item = Message<'static>; type Error = CodecError; fn decode(&mut self, src: &mut BytesMut) -> Result, Self::Error> { @@ -56,18 +53,23 @@ impl Decoder for MessageJsonCodec { return Ok(None); }; - from_json_slice(&frame).map(Some).map_err(CodecError::SerDe) + Ok(Some(Message { + data: Cow::Owned(frame.into()), + })) } } -impl Encoder for MessageJsonCodec { +impl<'a> Encoder> for MessageCodec { type Error = CodecError; - fn encode(&mut self, item: Message, dst: &mut BytesMut) -> Result<(), Self::Error> { - let json = to_json_vec(&item).map_err(CodecError::SerDe)?; - + fn encode(&mut self, item: Message<'a>, dst: &mut BytesMut) -> Result<(), Self::Error> { + let data = item.data.as_ref(); + let data = Bytes::from_static( + // safety: `LengthDelimitedCodec: Encoder` must prepend the length, so it copies `data` + unsafe { slice::from_raw_parts(data.as_ptr(), data.len()) }, + ); self.length_codec - .encode(Bytes::from(json), dst) + .encode(data, dst) .map_err(CodecError::StdIo) } } diff --git a/crates/network/src/tests/stream/codec.rs b/crates/network/src/tests/stream/codec.rs index f4b2df0ef..5db98188c 100644 --- a/crates/network/src/tests/stream/codec.rs +++ b/crates/network/src/tests/stream/codec.rs @@ -15,7 +15,7 @@ fn test_my_frame_encoding_decoding() { }; let mut buffer = BytesMut::new(); - let mut codec = MessageJsonCodec::new(MAX_MESSAGE_SIZE); + let mut codec = MessageCodec::new(MAX_MESSAGE_SIZE); codec.encode(request.clone(), &mut buffer).unwrap(); codec.encode(response.clone(), &mut buffer).unwrap(); @@ -36,12 +36,12 @@ async fn test_multiple_objects_stream() { }; let mut buffer = BytesMut::new(); - let mut codec = MessageJsonCodec::new(MAX_MESSAGE_SIZE); + let mut codec = MessageCodec::new(MAX_MESSAGE_SIZE); codec.encode(request.clone(), &mut buffer).unwrap(); codec.encode(response.clone(), &mut buffer).unwrap(); let mut stream = Builder::new().read(&buffer.freeze()).build(); - let mut framed = FramedRead::new(&mut stream, MessageJsonCodec::new(MAX_MESSAGE_SIZE)); + let mut framed = FramedRead::new(&mut stream, MessageCodec::new(MAX_MESSAGE_SIZE)); let decoded_request = framed.next().await.unwrap().unwrap(); assert_eq!(decoded_request, request); diff --git a/crates/node-primitives/src/lib.rs b/crates/node-primitives/src/lib.rs index 32a42d6c8..9cf09e72f 100644 --- a/crates/node-primitives/src/lib.rs +++ b/crates/node-primitives/src/lib.rs @@ -43,8 +43,10 @@ pub type ServerSender = mpsc::Sender; pub enum CallError { #[error("no connected peers")] NoConnectedPeers, - #[error("context not found: {context_id}")] - ContextNotFound { context_id: ContextId }, + #[error("context not found")] + ContextNotFound, + #[error("context state not initialized, awaiting state sync")] + Uninitialized, #[error("application not installed: {application_id}")] ApplicationNotInstalled { application_id: ApplicationId }, #[error("action rejected")] diff --git a/crates/node/Cargo.toml b/crates/node/Cargo.toml index 690a96e26..b978cd1d8 100644 --- a/crates/node/Cargo.toml +++ b/crates/node/Cargo.toml @@ -9,18 +9,15 @@ license.workspace = true [dependencies] borsh.workspace = true camino = { workspace = true, features = ["serde1"] } -clap.workspace = true +clap = { workspace = true, features = ["derive"] } eyre.workspace = true futures-util = { workspace = true, features = ["io"] } libp2p.workspace = true owo-colors.workspace = true rand.workspace = true -serde = { workspace = true, features = ["derive"] } serde_json.workspace = true -thiserror.workspace = true tokio = { workspace = true, features = ["io-std", "macros"] } tracing.workspace = true -url.workspace = true calimero-context = { path = "../context" } calimero-blobstore = { path = "../store/blobs" } @@ -29,7 +26,6 @@ calimero-node-primitives = { path = "../node-primitives" } calimero-primitives = { path = "../primitives" } calimero-runtime = { path = "../runtime" } calimero-server = { path = "../server", features = ["jsonrpc", "websocket", "admin"] } -calimero-storage = { path = "../storage" } calimero-store = { path = "../store", features = ["datatypes"] } [lints] diff --git a/crates/node/src/catchup/actions.rs b/crates/node/src/catchup/actions.rs deleted file mode 100644 index 641a69ea8..000000000 --- a/crates/node/src/catchup/actions.rs +++ /dev/null @@ -1,65 +0,0 @@ -use core::mem::take; - -use calimero_network::stream::{Message, Stream}; -use eyre::Result as EyreResult; -use futures_util::SinkExt; -use serde_json::to_vec as to_json_vec; - -use crate::types::{ActionMessage, CatchupActionsBatch, CatchupError, CatchupStreamMessage}; - -pub struct ActionsBatchSender { - batch_size: u8, - batch: Vec, - stream: Box, -} - -impl ActionsBatchSender { - pub(crate) fn new(batch_size: u8, stream: Box) -> Self { - Self { - batch_size, - batch: Vec::with_capacity(batch_size as usize), - stream, - } - } - - pub(crate) async fn send(&mut self, action_message: ActionMessage) -> EyreResult<()> { - self.batch.push(action_message); - - if self.batch.len() == self.batch_size as usize { - let message = CatchupStreamMessage::ActionsBatch(CatchupActionsBatch { - actions: take(&mut self.batch), - }); - - let message = to_json_vec(&message)?; - - self.stream.send(Message::new(message)).await?; - - self.batch.clear(); - } - - Ok(()) - } - - pub(crate) async fn flush(&mut self) -> EyreResult<()> { - if !self.batch.is_empty() { - let message = CatchupStreamMessage::ActionsBatch(CatchupActionsBatch { - actions: take(&mut self.batch), - }); - - let message = to_json_vec(&message)?; - - self.stream.send(Message::new(message)).await?; - } - - Ok(()) - } - - pub(crate) async fn flush_with_error(&mut self, error: CatchupError) -> EyreResult<()> { - self.flush().await?; - - let message = to_json_vec(&CatchupStreamMessage::Error(error))?; - self.stream.send(Message::new(message)).await?; - - Ok(()) - } -} diff --git a/crates/node/src/interactive_cli.rs b/crates/node/src/interactive_cli.rs index 66cdc035a..41373f98e 100644 --- a/crates/node/src/interactive_cli.rs +++ b/crates/node/src/interactive_cli.rs @@ -36,7 +36,7 @@ pub enum SubCommands { pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { // IMPORTANT: Parser needs first string to be binary name - let mut args = vec![""]; + let mut args = vec![""]; args.extend(line.split_whitespace()); let command = match RootCommand::try_parse_from(args) { @@ -47,19 +47,14 @@ pub async fn handle_line(node: &mut Node, line: String) -> eyre::Result<()> { } }; - let result = match command.action { - SubCommands::Application(application) => application.run(node).await, - SubCommands::Call(call) => call.run(node).await, - SubCommands::Context(context) => context.run(node).await, - SubCommands::Identity(identity) => identity.run(node), - SubCommands::Peers(peers) => peers.run(node.network_client.clone().into()).await, - SubCommands::State(state) => state.run(node), - SubCommands::Store(store) => store.run(node), - }; - - if let Err(err) = result { - println!("Error running command: {err}"); - eyre::bail!("Failed to parse command"); + match command.action { + SubCommands::Application(application) => application.run(node).await?, + SubCommands::Call(call) => call.run(node).await?, + SubCommands::Context(context) => context.run(node).await?, + SubCommands::Identity(identity) => identity.run(node)?, + SubCommands::Peers(peers) => peers.run(node.network_client.clone().into()).await?, + SubCommands::State(state) => state.run(node)?, + SubCommands::Store(store) => store.run(node)?, } Ok(()) diff --git a/crates/node/src/interactive_cli/applications.rs b/crates/node/src/interactive_cli/applications.rs index 299fcf94c..e6cc2c479 100644 --- a/crates/node/src/interactive_cli/applications.rs +++ b/crates/node/src/interactive_cli/applications.rs @@ -42,7 +42,7 @@ impl ApplicationCommand { let url = resource.parse()?; println!("{ind} Downloading application.."); node.ctx_manager - .install_application_from_url(url, vec![]) + .install_application_from_url(url, vec![], None) .await? } InstallType::File => { diff --git a/crates/node/src/interactive_cli/call.rs b/crates/node/src/interactive_cli/call.rs index f47d0a5df..2327013b1 100644 --- a/crates/node/src/interactive_cli/call.rs +++ b/crates/node/src/interactive_cli/call.rs @@ -26,7 +26,7 @@ impl CallCommand { let outcome_result = node .handle_call( context.id, - self.method.clone(), + &self.method, serde_json::to_vec(&self.payload)?, self.executor_key, ) diff --git a/crates/node/src/interactive_cli/identity.rs b/crates/node/src/interactive_cli/identity.rs index 5619690b5..063cd2e58 100644 --- a/crates/node/src/interactive_cli/identity.rs +++ b/crates/node/src/interactive_cli/identity.rs @@ -52,8 +52,8 @@ impl IdentityCommand { let entry = format!( "{:44} | {}", - if v.private_key.is_some() { "*" } else { " " }, k.public_key(), + if v.private_key.is_some() { "*" } else { " " }, ); for line in entry.lines() { println!("{}", line.cyan()); diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index b38dffce5..a1c9e51ad 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -6,8 +6,9 @@ use core::future::{pending, Future}; use core::pin::Pin; +use std::time::Duration; -use borsh::to_vec; +use borsh::{from_slice, to_vec}; use calimero_blobstore::config::BlobStoreConfig; use calimero_blobstore::{BlobManager, FileSystem}; use calimero_context::config::ContextConfig; @@ -21,13 +22,11 @@ use calimero_primitives::events::{ ContextEvent, ContextEventPayload, ExecutionEvent, ExecutionEventPayload, NodeEvent, StateMutationPayload, }; +use calimero_primitives::hash::Hash; use calimero_primitives::identity::PublicKey; use calimero_runtime::logic::{Outcome, VMContext, VMLimits}; use calimero_runtime::Constraint; use calimero_server::config::ServerConfig; -use calimero_storage::address::Id; -use calimero_storage::integration::Comparison; -use calimero_storage::interface::Action; use calimero_store::config::StoreConfig; use calimero_store::db::RocksDB; use calimero_store::key::ContextMeta as ContextMetaKey; @@ -36,21 +35,22 @@ use camino::Utf8PathBuf; use eyre::{bail, eyre, Result as EyreResult}; use libp2p::gossipsub::{IdentTopic, Message, TopicHash}; use libp2p::identity::Keypair; -use serde_json::{from_slice as from_json_slice, to_vec as to_json_vec}; +use rand::{thread_rng, Rng}; use tokio::io::{stdin, AsyncBufReadExt, BufReader}; use tokio::select; use tokio::sync::{broadcast, mpsc}; use tokio::time::{interval_at, Instant}; use tracing::{debug, error, info, warn}; -use crate::runtime_compat::RuntimeCompatStore; -use crate::types::{ActionMessage, PeerAction, SyncMessage}; - -pub mod catchup; pub mod interactive_cli; pub mod runtime_compat; +pub mod sync; pub mod types; +use runtime_compat::RuntimeCompatStore; +use sync::SyncConfig; +use types::BroadcastMessage; + type BoxedFuture = Pin>>; #[derive(Debug)] @@ -59,6 +59,7 @@ pub struct NodeConfig { pub home: Utf8PathBuf, pub identity: Keypair, pub network: NetworkConfig, + pub sync: SyncConfig, pub datastore: StoreConfig, pub blobstore: BlobStoreConfig, pub context: ContextConfig, @@ -71,6 +72,7 @@ impl NodeConfig { home: Utf8PathBuf, identity: Keypair, network: NetworkConfig, + sync: SyncConfig, datastore: StoreConfig, blobstore: BlobStoreConfig, context: ContextConfig, @@ -80,6 +82,7 @@ impl NodeConfig { home, identity, network, + sync, datastore, blobstore, context, @@ -90,6 +93,7 @@ impl NodeConfig { #[derive(Debug)] pub struct Node { + sync_config: SyncConfig, store: Store, ctx_manager: ContextManager, network_client: NetworkClient, @@ -120,21 +124,13 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { ) .await?; - let mut node = Node::new( - &config, - network_client.clone(), - node_events.clone(), - ctx_manager.clone(), - store.clone(), - ); - #[expect(trivial_casts, reason = "Necessary here")] let mut server = Box::pin(calimero_server::start( config.server, server_sender, - ctx_manager, - node_events, - store, + ctx_manager.clone(), + node_events.clone(), + store.clone(), )) as BoxedFuture>; let mut stdin = BufReader::new(stdin()).lines(); @@ -152,11 +148,13 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { let mut catchup_interval_tick = interval_at( Instant::now() - .checked_add(config.network.catchup.initial_delay) + .checked_add(Duration::from_millis(thread_rng().gen_range(0..1001))) .ok_or_else(|| eyre!("Overflow when calculating initial catchup interval delay"))?, - config.network.catchup.interval, + config.sync.interval, ); + let mut node = Node::new(config.sync, network_client, node_events, ctx_manager, store); + #[expect(clippy::redundant_pub_crate, reason = "Tokio code")] loop { select! { @@ -169,7 +167,7 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { line = stdin.next_line() => { if let Some(line) = line? { if let Err(err) = interactive_cli::handle_line(&mut node, line).await { - error!("Failed to handle line: {:?}", err); + error!("Failed handling user command: {:?}", err); } } } @@ -179,7 +177,7 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { continue; } Some(request) = server_receiver.recv() => node.handle_server_request(request).await, - _ = catchup_interval_tick.tick() => node.perform_interval_catchup().await, + _ = catchup_interval_tick.tick() => node.perform_interval_sync().await, } } @@ -189,13 +187,14 @@ pub async fn start(config: NodeConfig) -> EyreResult<()> { impl Node { #[must_use] pub const fn new( - _config: &NodeConfig, + sync_config: SyncConfig, network_client: NetworkClient, node_events: broadcast::Sender, ctx_manager: ContextManager, store: Store, ) -> Self { Self { + sync_config, store, ctx_manager, network_client, @@ -230,13 +229,11 @@ impl Node { } } NetworkEvent::StreamOpened { peer_id, stream } => { - info!("Stream opened from peer: {}", peer_id); + debug!(%peer_id, "Stream opened!"); - if let Err(err) = self.handle_opened_stream(stream).await { - error!(?err, "Failed to handle stream"); - } + self.handle_opened_stream(stream).await; - info!("Stream closed from peer: {:?}", peer_id); + debug!(%peer_id, "Stream closed!"); } _ => error!("Unhandled event: {:?}", event), } @@ -296,120 +293,92 @@ impl Node { return Ok(()); }; - match from_json_slice(&message.data)? { - PeerAction::ActionList(action_list) => { - debug!(?action_list, %source, "Received action list"); - - for action in action_list.actions { - debug!(?action, %source, "Received action"); - let Some(mut context) = - self.ctx_manager.get_context(&action_list.context_id)? - else { - bail!("Context '{}' not found", action_list.context_id); - }; - match action { - Action::Compare { id } => { - self.send_comparison_message(&mut context, id, action_list.public_key) - .await - } - Action::Add { .. } | Action::Delete { .. } | Action::Update { .. } => { - self.apply_action(&mut context, &action, action_list.public_key) - .await - } - }?; - } - Ok(()) - } - PeerAction::Sync(sync) => { - debug!(?sync, %source, "Received sync request"); + let message = from_slice::>(&message.data)?; - let Some(mut context) = self.ctx_manager.get_context(&sync.context_id)? else { - bail!("Context '{}' not found", sync.context_id); - }; - let outcome = self - .compare_trees(&mut context, &sync.comparison, sync.public_key) - .await?; - - match outcome.returns { - Ok(Some(actions_data)) => { - let (local_actions, remote_actions): (Vec, Vec) = - from_json_slice(&actions_data)?; - - // Apply local actions - for action in local_actions { - match action { - Action::Compare { id } => { - self.send_comparison_message(&mut context, id, sync.public_key) - .await - } - Action::Add { .. } - | Action::Delete { .. } - | Action::Update { .. } => { - self.apply_action(&mut context, &action, sync.public_key) - .await - } - }?; - } - - if !remote_actions.is_empty() { - // Send remote actions back to the peer - // TODO: This just sends one at present - needs to send a batch - let new_message = ActionMessage { - actions: remote_actions, - context_id: sync.context_id, - public_key: sync.public_key, - root_hash: context.root_hash, - }; - self.push_action(sync.context_id, PeerAction::ActionList(new_message)) - .await?; - } - } - Ok(None) => { - // No actions needed - } - Err(err) => { - error!("Error during comparison: {err:?}"); - // TODO: Handle the error appropriately - } - } - Ok(()) + match message { + BroadcastMessage::StateDelta { + context_id, + author_id, + root_hash, + artifact, + } => { + self.handle_state_delta( + source, + context_id, + author_id, + root_hash, + artifact.into_owned(), + ) + .await?; } } + + todo!() } - async fn send_comparison_message( + async fn handle_state_delta( &mut self, - context: &mut Context, - id: Id, - public_key: PublicKey, + source: PeerId, + context_id: ContextId, + author_id: PublicKey, + root_hash: Hash, + artifact: Vec, ) -> EyreResult<()> { - let compare_outcome = self - .generate_comparison_data(context, id, public_key) - .await?; - match compare_outcome.returns { - Ok(Some(comparison_data)) => { - // Generate a new Comparison for this entity and send it to the peer - let new_sync = SyncMessage { - comparison: from_json_slice(&comparison_data)?, - context_id: context.id, - public_key, - root_hash: context.root_hash, - }; - self.push_action(context.id, PeerAction::Sync(new_sync)) + let Some(mut context) = self.ctx_manager.get_context(&context_id)? else { + bail!("context '{}' not found", context_id); + }; + + if root_hash == context.root_hash { + debug!(%context_id, "Received state delta with same root hash, ignoring.."); + return Ok(()); + } + + let Some(outcome) = self + .execute( + &mut context, + "apply_state_delta", + to_vec(&artifact)?, + author_id, + ) + .await? + else { + bail!("application not installed"); + }; + + if let Some(derived_root_hash) = outcome.root_hash { + if derived_root_hash != *root_hash { + self.initiate_state_sync_process(&mut context, source) .await?; - Ok(()) } - Ok(None) => Err(eyre!("No comparison data generated")), - Err(err) => Err(eyre!(err)), } + + Ok(()) } - async fn push_action(&self, context_id: ContextId, action: PeerAction) -> EyreResult<()> { - drop( - self.network_client - .publish(TopicHash::from_raw(context_id), to_json_vec(&action)?) - .await?, - ); + async fn send_state_delta( + &self, + context: &Context, + outcome: &Outcome, + executor_public_key: PublicKey, + ) -> EyreResult<()> { + if self + .network_client + .mesh_peer_count(TopicHash::from_raw(context.id)) + .await + != 0 + { + let message = to_vec(&BroadcastMessage::StateDelta { + context_id: context.id, + author_id: executor_public_key, + root_hash: context.root_hash, + artifact: outcome.artifact.as_slice().into(), + })?; + + let _ignored = self + .network_client + .publish(TopicHash::from_raw(context.id), message) + .await?; + } Ok(()) } @@ -417,7 +386,7 @@ impl Node { pub async fn handle_server_request(&mut self, request: ExecutionRequest) { let task = self.handle_call( request.context_id, - request.method, + &request.method, request.payload, request.executor_public_key, ); @@ -432,14 +401,18 @@ impl Node { async fn handle_call( &mut self, context_id: ContextId, - method: String, + method: &str, payload: Vec, executor_public_key: PublicKey, ) -> Result { let Ok(Some(mut context)) = self.ctx_manager.get_context(&context_id) else { - return Err(CallError::ContextNotFound { context_id }); + return Err(CallError::ContextNotFound); }; + if method != "init" && &*context.root_hash == &[0; 32] { + return Err(CallError::Uninitialized); + } + let outcome_option = self .execute(&mut context, method, payload, executor_public_key) .await @@ -454,101 +427,23 @@ impl Node { }); }; - if self - .network_client - .mesh_peer_count(TopicHash::from_raw(context.id)) + if let Err(err) = self + .send_state_delta(&context, &outcome, executor_public_key) .await - != 0 { - let actions = outcome - .actions - .iter() - .map(|a| borsh::from_slice(a)) - .collect::, _>>() - .map_err(|err| { - error!(%err, "Failed to deserialize actions."); - CallError::InternalError - })?; - - self.push_action( - context.id, - PeerAction::ActionList(ActionMessage { - actions, - context_id: context.id, - public_key: executor_public_key, - root_hash: context.root_hash, - }), - ) - .await - .map_err(|err| { - error!(%err, "Failed to push action over the network."); - CallError::InternalError - })?; + error!(%err, "Failed to send state delta."); } Ok(outcome) } - async fn apply_action( - &mut self, - context: &mut Context, - action: &Action, - public_key: PublicKey, - ) -> EyreResult<()> { - let outcome = self - .execute( - context, - "apply_action".to_owned(), - to_vec(action)?, - public_key, - ) - .await - .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed")))?; - drop(outcome.returns?); - Ok(()) - } - - async fn compare_trees( - &mut self, - context: &mut Context, - comparison: &Comparison, - public_key: PublicKey, - ) -> EyreResult { - self.execute( - context, - "compare_trees".to_owned(), - to_vec(comparison)?, - public_key, - ) - .await - .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed"))) - } - - async fn generate_comparison_data( - &mut self, - context: &mut Context, - id: Id, - public_key: PublicKey, - ) -> EyreResult { - self.execute( - context, - "generate_comparison_data".to_owned(), - to_vec(&id)?, - public_key, - ) - .await - .and_then(|outcome| outcome.ok_or_else(|| eyre!("Application not installed"))) - } - async fn execute( - &mut self, + &self, context: &mut Context, - method: String, + method: &str, payload: Vec, executor_public_key: PublicKey, ) -> EyreResult> { - let mut storage = RuntimeCompatStore::new(&mut self.store, context.id); - let Some(blob) = self .ctx_manager .load_application_blob(&context.application_id) @@ -557,18 +452,22 @@ impl Node { return Ok(None); }; + let mut store = self.store.clone(); + + let mut storage = RuntimeCompatStore::new(&mut store, context.id); + let outcome = calimero_runtime::run( &blob, &method, - VMContext::new(payload, context.id.into(), *executor_public_key), + VMContext::new(payload, *context.id, *executor_public_key), &mut storage, &get_runtime_limits()?, )?; if outcome.returns.is_ok() { if let Some(root_hash) = outcome.root_hash { - if outcome.actions.is_empty() { - eyre::bail!("Context state changed, but no actions were generated, discarding execution outcome to mitigate potential state inconsistency"); + if outcome.artifact.is_empty() { + eyre::bail!("context state changed, but no actions were generated, discarding execution outcome to mitigate potential state inconsistency"); } context.root_hash = root_hash.into(); diff --git a/crates/node/src/sync.rs b/crates/node/src/sync.rs new file mode 100644 index 000000000..177ab873b --- /dev/null +++ b/crates/node/src/sync.rs @@ -0,0 +1,221 @@ +use std::time::Duration; + +use calimero_network::stream::{Message, Stream}; +use calimero_primitives::context::ContextId; +use eyre::{bail, Result as EyreResult}; +use futures_util::{SinkExt, StreamExt}; +use libp2p::gossipsub::TopicHash; +use libp2p::PeerId; +use rand::seq::SliceRandom; +use rand::thread_rng; +use tokio::time::timeout; +use tracing::{debug, error}; + +use crate::types::{InitPayload, StreamMessage}; +use crate::Node; + +mod blobs; +mod state; + +#[derive(Copy, Clone, Debug)] +pub struct SyncConfig { + pub timeout: Duration, + pub interval: Duration, +} + +async fn send(stream: &mut Stream, message: &StreamMessage<'_>) -> EyreResult<()> { + let message = borsh::to_vec(message)?; + stream.send(Message::new(message)).await?; + Ok(()) +} + +async fn recv( + stream: &mut Stream, + duration: Duration, +) -> EyreResult>> { + let Some(message) = timeout(duration, stream.next()).await? else { + return Ok(None); + }; + + Ok(borsh::from_slice(&message?.data)?) +} + +#[derive(Default)] +struct Sequencer { + current: usize, +} + +impl Sequencer { + fn test(&mut self, idx: usize) -> eyre::Result<()> { + self.current += 1; + + if self.current != idx { + bail!( + "out of sequence message: expected {}, got {}", + self.current, + idx + ); + } + + Ok(()) + } + + fn next(&mut self) -> usize { + let current = self.current; + self.current += 1; + current + } +} + +impl Node { + async fn initiate_sync(&self, context_id: ContextId, chosen_peer: PeerId) -> EyreResult<()> { + let mut context = self.ctx_manager.sync_context_config(context_id).await?; + + let Some(application) = self.ctx_manager.get_application(&context.application_id)? else { + bail!("application not found: {}", context.application_id); + }; + + if !self.ctx_manager.has_blob_available(application.blob)? { + self.initiate_blob_share_process( + &context, + application.blob, + application.size, + chosen_peer, + ) + .await?; + } + + self.initiate_state_sync_process(&mut context, chosen_peer) + .await + } + + pub(crate) async fn handle_opened_stream(&self, mut stream: Box) { + if let Err(err) = self.internal_handle_opened_stream(&mut stream).await { + error!(%err, "Failed to handle stream message"); + + if let Err(err) = send(&mut stream, &StreamMessage::OpaqueError).await { + error!(%err, "Failed to send error message"); + } + } + } + + async fn internal_handle_opened_stream(&self, mut stream: &mut Stream) -> EyreResult<()> { + let Some(message) = recv(&mut stream, self.sync_config.timeout).await? else { + bail!("stream closed unexpectedly") + }; + + let (context_id, their_identity, payload) = match message { + StreamMessage::Init { + context_id, + party_id, + payload, + } => (context_id, party_id, payload), + unexpected @ (StreamMessage::Message { .. } | StreamMessage::OpaqueError) => { + bail!("expected initialization handshake, got {:?}", unexpected) + } + }; + + let Some(mut context) = self.ctx_manager.get_context(&context_id)? else { + bail!("context not found: {}", context_id); + }; + + let mut updated = None; + + if !self + .ctx_manager + .has_context_identity(context_id, their_identity)? + { + updated = Some(self.ctx_manager.sync_context_config(context_id).await?); + + if !self + .ctx_manager + .has_context_identity(context_id, their_identity)? + { + bail!( + "unknown context member {} in context {}", + their_identity, + context_id + ); + } + } + + match payload { + InitPayload::BlobShare { blob_id } => { + self.handle_blob_share_request(context, their_identity, blob_id, &mut stream) + .await? + } + InitPayload::StateSync { + root_hash, + application_id, + } => { + if updated.is_none() && context.application_id != application_id { + updated = Some(self.ctx_manager.sync_context_config(context_id).await?); + } + + if let Some(updated) = updated { + if application_id != updated.application_id { + bail!( + "application mismatch: expected {}, got {}", + updated.application_id, + application_id + ); + } + + context = updated; + } + + self.handle_state_sync_request( + context, + their_identity, + root_hash, + application_id, + &mut stream, + ) + .await? + } + }; + + Ok(()) + } + + pub async fn perform_interval_sync(&self) { + if let Err(err) = timeout(self.sync_config.interval, async { + for context in self.ctx_manager.get_n_pending_sync_context(3).await { + if self.internal_perform_interval_sync(context).await.is_some() { + break; + } + } + }) + .await + { + error!(%err, "Timeout while performing interval sync"); + } + } + + async fn internal_perform_interval_sync(&self, context_id: ContextId) -> Option<()> { + let peers = self + .network_client + .mesh_peers(TopicHash::from_raw(context_id)) + .await; + + for peer_id in peers.choose_multiple(&mut thread_rng(), 3) { + debug!(%context_id, %peer_id, "Attempting to perform interval triggered sync"); + + if let Err(err) = self.initiate_sync(context_id, *peer_id).await { + error!(%err, "Failed to perform interval sync, trying another peer"); + continue; + } + + let _ = self + .ctx_manager + .clear_context_pending_sync(&context_id) + .await; + + debug!(%context_id, %peer_id, "Interval triggered sync successfully finished"); + + return Some(()); + } + + None + } +} diff --git a/crates/node/src/sync/blobs.rs b/crates/node/src/sync/blobs.rs new file mode 100644 index 000000000..49f88a07a --- /dev/null +++ b/crates/node/src/sync/blobs.rs @@ -0,0 +1,169 @@ +use calimero_network::stream::Stream; +use calimero_primitives::blobs::BlobId; +use calimero_primitives::context::Context; +use calimero_primitives::identity::PublicKey; +use eyre::bail; +use futures_util::stream::poll_fn; +use futures_util::TryStreamExt; +use libp2p::PeerId; +use rand::seq::IteratorRandom; +use rand::thread_rng; +use tokio::sync::mpsc; +use tracing::debug; + +use super::{recv, send, Sequencer}; +use crate::types::{InitPayload, MessagePayload, StreamMessage}; +use crate::Node; + +impl Node { + pub async fn initiate_blob_share_process( + &self, + context: &Context, + blob_id: BlobId, + size: u64, + chosen_peer: PeerId, + ) -> eyre::Result<()> { + let identities = self.ctx_manager.get_context_owned_identities(context.id)?; + + let Some(our_identity) = identities.into_iter().choose(&mut thread_rng()) else { + bail!("no identities found for context: {}", context.id); + }; + + let mut stream = self.network_client.open_stream(chosen_peer).await?; + + send( + &mut stream, + &StreamMessage::Init { + context_id: context.id, + party_id: our_identity, + payload: InitPayload::BlobShare { blob_id }, + }, + ) + .await?; + + let Some(ack) = recv(&mut stream, self.sync_config.timeout).await? else { + bail!("no response to blob share request"); + }; + + let _their_identity = match ack { + StreamMessage::Init { + party_id, + payload: + InitPayload::BlobShare { + blob_id: ack_blob_id, + }, + .. + } => { + if ack_blob_id != blob_id { + bail!( + "unexpected ack blob id: expected {}, got {}", + blob_id, + ack_blob_id + ); + } + + party_id + } + unexpected @ (StreamMessage::Init { .. } + | StreamMessage::Message { .. } + | StreamMessage::OpaqueError) => { + bail!("unexpected message: {:?}", unexpected) + } + }; + + let (tx, mut rx) = mpsc::channel(1); + + let add_task = self.ctx_manager.add_blob( + poll_fn(|cx| rx.poll_recv(cx)).into_async_read(), + Some(size), + None, + ); + + let read_task = async { + let mut sequencer = Sequencer::default(); + + while let Some(msg) = recv(&mut stream, self.sync_config.timeout).await? { + let (sequence_id, chunk) = match msg { + StreamMessage::OpaqueError => bail!("other peer ran into an error"), + StreamMessage::Message { + sequence_id, + payload: MessagePayload::BlobShare { chunk }, + } => (sequence_id, chunk), + unexpected @ (StreamMessage::Init { .. } | StreamMessage::Message { .. }) => { + bail!("unexpected message: {:?}", unexpected) + } + }; + + sequencer.test(sequence_id)?; + + tx.send(Ok(chunk)).await?; + } + + Ok(()) + }; + + let ((received_blob_id, _), _) = tokio::try_join!(add_task, read_task)?; + + if received_blob_id != blob_id { + bail!( + "unexpected blob id: expected {}, got {}", + blob_id, + received_blob_id + ); + } + + Ok(()) + } + + pub async fn handle_blob_share_request( + &self, + context: Context, + their_identity: PublicKey, + blob_id: BlobId, + stream: &mut Stream, + ) -> eyre::Result<()> { + debug!( + context_id=%context.id, + their_identity=%their_identity, + blob_id=%blob_id, + "Received blob share request", + ); + + let Some(mut blob) = self.ctx_manager.get_blob(blob_id)? else { + bail!("blob not found: {}", blob_id); + }; + + let identities = self.ctx_manager.get_context_owned_identities(context.id)?; + + let Some(our_identity) = identities.into_iter().choose(&mut thread_rng()) else { + bail!("no identities found for context: {}", context.id); + }; + + send( + stream, + &StreamMessage::Init { + context_id: context.id, + party_id: our_identity, + payload: InitPayload::BlobShare { blob_id }, + }, + ) + .await?; + + let mut sequencer = Sequencer::default(); + + while let Some(chunk) = blob.try_next().await? { + send( + stream, + &StreamMessage::Message { + sequence_id: sequencer.next(), + payload: MessagePayload::BlobShare { + chunk: chunk.into_vec().into(), + }, + }, + ) + .await?; + } + + Ok(()) + } +} diff --git a/crates/node/src/sync/state.rs b/crates/node/src/sync/state.rs new file mode 100644 index 000000000..37ad51409 --- /dev/null +++ b/crates/node/src/sync/state.rs @@ -0,0 +1,225 @@ +use std::borrow::Cow; + +use calimero_network::stream::Stream; +use calimero_primitives::application::ApplicationId; +use calimero_primitives::context::Context; +use calimero_primitives::hash::Hash; +use calimero_primitives::identity::PublicKey; +use eyre::{bail, OptionExt}; +use libp2p::PeerId; +use rand::seq::IteratorRandom; +use rand::thread_rng; +use tracing::debug; + +use crate::sync::{recv, send, Sequencer}; +use crate::types::{InitPayload, MessagePayload, StreamMessage}; +use crate::Node; + +impl Node { + pub async fn initiate_state_sync_process( + &self, + context: &mut Context, + chosen_peer: PeerId, + ) -> eyre::Result<()> { + let identities = self.ctx_manager.get_context_owned_identities(context.id)?; + + let Some(our_identity) = identities.into_iter().choose(&mut thread_rng()) else { + bail!("no identities found for context: {}", context.id); + }; + + let mut stream = self.network_client.open_stream(chosen_peer).await?; + + send( + &mut stream, + &StreamMessage::Init { + context_id: context.id, + party_id: our_identity, + payload: InitPayload::StateSync { + root_hash: context.root_hash, + application_id: context.application_id, + }, + }, + ) + .await?; + + let Some(ack) = recv(&mut stream, self.sync_config.timeout).await? else { + bail!("no response to state sync request"); + }; + + let (root_hash, their_identity) = match ack { + StreamMessage::Init { + party_id, + payload: + InitPayload::StateSync { + root_hash, + application_id, + }, + .. + } => { + if application_id != context.application_id { + bail!( + "unexpected application id: expected {}, got {}", + context.application_id, + application_id + ); + } + + (root_hash, party_id) + } + unexpected @ (StreamMessage::Init { .. } + | StreamMessage::Message { .. } + | StreamMessage::OpaqueError) => { + bail!("unexpected message: {:?}", unexpected) + } + }; + + if root_hash == context.root_hash { + return Ok(()); + } + + let mut sqx_out = Sequencer::default(); + + send( + &mut stream, + &StreamMessage::Message { + sequence_id: sqx_out.next(), + payload: MessagePayload::StateSync { + artifact: Cow::from(&[]), + }, + }, + ) + .await?; + + self.bidirectional_sync( + context, + our_identity, + their_identity, + &mut sqx_out, + &mut stream, + ) + .await?; + + Ok(()) + } + + pub async fn handle_state_sync_request( + &self, + context: Context, + their_identity: PublicKey, + root_hash: Hash, + application_id: ApplicationId, + stream: &mut Stream, + ) -> eyre::Result<()> { + debug!( + context_id=%context.id, + their_identity=%their_identity, + their_root_hash=%root_hash, + their_application_id=%application_id, + "Received state sync request", + ); + + let identities = self.ctx_manager.get_context_owned_identities(context.id)?; + + let Some(our_identity) = identities.into_iter().choose(&mut thread_rng()) else { + bail!("no identities found for context: {}", context.id); + }; + + send( + stream, + &StreamMessage::Init { + context_id: context.id, + party_id: our_identity, + payload: InitPayload::StateSync { + root_hash: context.root_hash, + application_id: context.application_id, + }, + }, + ) + .await?; + + if root_hash == context.root_hash { + return Ok(()); + } + + let mut sqx_out = Sequencer::default(); + + let mut context = context; + self.bidirectional_sync( + &mut context, + our_identity, + their_identity, + &mut sqx_out, + stream, + ) + .await + + // should we compare root hashes again? + } + + async fn bidirectional_sync( + &self, + context: &mut Context, + our_identity: PublicKey, + their_identity: PublicKey, + sqx_out: &mut Sequencer, + stream: &mut Stream, + ) -> eyre::Result<()> { + debug!( + context_id=%context.id, + our_root_hash=%context.root_hash, + our_identity=%our_identity, + their_identity=%their_identity, + "Starting bidirectional sync", + ); + + let mut sqx_in = Sequencer::default(); + + while let Some(msg) = recv(stream, self.sync_config.timeout).await? { + let (sequence_id, artifact) = match msg { + StreamMessage::OpaqueError => bail!("other peer ran into an error"), + StreamMessage::Message { + sequence_id, + payload: MessagePayload::StateSync { artifact }, + } => (sequence_id, artifact), + unexpected @ (StreamMessage::Init { .. } | StreamMessage::Message { .. }) => { + bail!("unexpected message: {:?}", unexpected) + } + }; + + sqx_in.test(sequence_id)?; + + let outcome = self + .execute( + context, + "__calimero_sync_next", + artifact.into_owned(), + our_identity, + ) + .await? + .ok_or_eyre("the application was not found??")?; + + debug!( + context_id=%context.id, + root_hash=?context.root_hash, + "State sync outcome", + ); + + if outcome.artifact.is_empty() { + break; + } + + send( + stream, + &StreamMessage::Message { + sequence_id: sqx_out.next(), + payload: MessagePayload::StateSync { + artifact: Cow::from(&outcome.artifact), + }, + }, + ) + .await?; + } + + Ok(()) + } +} diff --git a/crates/node/src/types.rs b/crates/node/src/types.rs index 5f52b8afc..0c81652f6 100644 --- a/crates/node/src/types.rs +++ b/crates/node/src/types.rs @@ -1,81 +1,55 @@ +#![expect(single_use_lifetimes, reason = "borsh shenanigans")] + +use std::borrow::Cow; + +use borsh::{BorshDeserialize, BorshSerialize}; use calimero_primitives::application::ApplicationId; +use calimero_primitives::blobs::BlobId; use calimero_primitives::context::ContextId; use calimero_primitives::hash::Hash; use calimero_primitives::identity::PublicKey; -use calimero_storage::integration::Comparison; -use calimero_storage::interface::Action; -use serde::{Deserialize, Serialize}; -use thiserror::Error as ThisError; -#[derive(Debug, Deserialize, Serialize)] +#[derive(Debug, BorshSerialize, BorshDeserialize)] #[non_exhaustive] #[expect(clippy::large_enum_variant, reason = "Of no consequence here")] -pub enum PeerAction { - ActionList(ActionMessage), - Sync(SyncMessage), -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub enum CatchupStreamMessage { - ActionsBatch(CatchupActionsBatch), - ApplicationBlobRequest(CatchupApplicationBlobRequest), - ApplicationBlobChunk(CatchupApplicationBlobChunk), - SyncRequest(CatchupSyncRequest), - Error(CatchupError), -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct CatchupApplicationBlobRequest { - pub application_id: ApplicationId, -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct CatchupApplicationBlobChunk { - pub sequential_id: u64, - pub chunk: Box<[u8]>, -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct CatchupSyncRequest { - pub context_id: ContextId, - pub root_hash: Hash, -} - -#[derive(Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct CatchupActionsBatch { - pub actions: Vec, -} - -#[derive(Clone, Copy, Debug, Deserialize, Serialize, ThisError)] -#[non_exhaustive] -pub enum CatchupError { - #[error("context `{context_id:?}` not found")] - ContextNotFound { context_id: ContextId }, - #[error("application `{application_id:?}` not found")] - ApplicationNotFound { application_id: ApplicationId }, - #[error("internal error")] - InternalError, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct ActionMessage { - pub actions: Vec, - pub context_id: ContextId, - pub public_key: PublicKey, - pub root_hash: Hash, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[non_exhaustive] -pub struct SyncMessage { - pub comparison: Comparison, - pub context_id: ContextId, - pub public_key: PublicKey, - pub root_hash: Hash, +pub enum BroadcastMessage<'a> { + StateDelta { + context_id: ContextId, + author_id: PublicKey, + root_hash: Hash, + artifact: Cow<'a, [u8]>, + }, +} + +#[derive(Debug, BorshSerialize, BorshDeserialize)] +pub enum StreamMessage<'a> { + Init { + context_id: ContextId, + party_id: PublicKey, + // nonce: usize, + payload: InitPayload, + }, + Message { + sequence_id: usize, + payload: MessagePayload<'a>, + }, + /// Other peers must not learn anything about the node's state if anything goes wrong. + OpaqueError, +} + +#[derive(Copy, Clone, Debug, BorshSerialize, BorshDeserialize)] +pub enum InitPayload { + BlobShare { + blob_id: BlobId, + }, + StateSync { + root_hash: Hash, + application_id: ApplicationId, + }, +} + +#[derive(Debug, BorshSerialize, BorshDeserialize)] +pub enum MessagePayload<'a> { + StateSync { artifact: Cow<'a, [u8]> }, + BlobShare { chunk: Cow<'a, [u8]> }, } diff --git a/crates/primitives/src/application.rs b/crates/primitives/src/application.rs index 83e6fc6be..68305b134 100644 --- a/crates/primitives/src/application.rs +++ b/crates/primitives/src/application.rs @@ -10,6 +10,10 @@ use crate::blobs::BlobId; use crate::hash::{Hash, HashError}; #[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] +#[cfg_attr( + feature = "borsh", + derive(borsh::BorshDeserialize, borsh::BorshSerialize) +)] // todo! define macros that construct newtypes // todo! wrapping Hash with this interface pub struct ApplicationId(Hash); diff --git a/crates/primitives/src/blobs.rs b/crates/primitives/src/blobs.rs index 88457b0dd..29ca02920 100644 --- a/crates/primitives/src/blobs.rs +++ b/crates/primitives/src/blobs.rs @@ -8,6 +8,10 @@ use thiserror::Error as ThisError; use crate::hash::{Hash, HashError}; #[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] +#[cfg_attr( + feature = "borsh", + derive(borsh::BorshDeserialize, borsh::BorshSerialize) +)] pub struct BlobId(Hash); impl BlobId { diff --git a/crates/primitives/src/context.rs b/crates/primitives/src/context.rs index c84fa2b17..0f05f413c 100644 --- a/crates/primitives/src/context.rs +++ b/crates/primitives/src/context.rs @@ -1,6 +1,7 @@ use core::fmt; use core::ops::Deref; use core::str::FromStr; +use std::borrow::Cow; use std::io; use serde::{Deserialize, Serialize}; @@ -10,6 +11,10 @@ use crate::application::ApplicationId; use crate::hash::{Hash, HashError}; #[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] +#[cfg_attr( + feature = "borsh", + derive(borsh::BorshDeserialize, borsh::BorshSerialize) +)] // todo! define macros that construct newtypes // todo! wrapping Hash with this interface pub struct ContextId(Hash); @@ -20,12 +25,6 @@ impl From<[u8; 32]> for ContextId { } } -impl From for [u8; 32] { - fn from(id: ContextId) -> Self { - *id - } -} - impl Deref for ContextId { type Target = [u8; 32]; @@ -204,3 +203,12 @@ impl Context { } } } + +#[derive(Debug)] +pub struct ContextConfigParams<'a> { + pub protocol: Cow<'a, str>, + pub network_id: Cow<'a, str>, + pub contract_id: Cow<'a, str>, + pub application_revision: u64, + pub members_revision: u64, +} diff --git a/crates/primitives/src/hash.rs b/crates/primitives/src/hash.rs index b71c2bf6b..67ff48a83 100644 --- a/crates/primitives/src/hash.rs +++ b/crates/primitives/src/hash.rs @@ -9,10 +9,10 @@ use core::mem::MaybeUninit; use core::ops::Deref; use core::str::{from_utf8, FromStr}; #[cfg(feature = "borsh")] -use std::io::Result as IoResult; +use std::io; #[cfg(feature = "borsh")] -use borsh::BorshSerialize; +use borsh::{BorshDeserialize, BorshSerialize}; use bs58::decode::Error as Bs58Error; use serde::de::{Error as SerdeError, Visitor}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; @@ -59,7 +59,7 @@ impl Hash { } #[cfg(feature = "borsh")] - pub fn hash_borsh(data: &T) -> IoResult { + pub fn hash_borsh(data: &T) -> io::Result { let mut hasher = Sha256::default(); data.serialize(&mut hasher)?; @@ -195,6 +195,25 @@ impl FromStr for Hash { } } +#[cfg(feature = "borsh")] +impl BorshSerialize for Hash { + fn serialize(&self, writer: &mut W) -> io::Result<()> { + writer.write_all(&self.bytes) + } +} + +#[cfg(feature = "borsh")] +impl BorshDeserialize for Hash { + fn deserialize_reader(reader: &mut R) -> io::Result { + let mut bytes = [0; BYTES_LEN]; + reader.read_exact(&mut bytes)?; + Ok(Self { + bytes, + bs58: MaybeUninit::zeroed(), + }) + } +} + impl Serialize for Hash { fn serialize(&self, serializer: S) -> Result { serializer.serialize_str(self.as_str()) diff --git a/crates/primitives/src/identity.rs b/crates/primitives/src/identity.rs index 94628081e..3fe06c866 100644 --- a/crates/primitives/src/identity.rs +++ b/crates/primitives/src/identity.rs @@ -82,6 +82,10 @@ impl FromStr for PrivateKey { } #[derive(Eq, Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +#[cfg_attr( + feature = "borsh", + derive(borsh::BorshDeserialize, borsh::BorshSerialize) +)] pub struct PublicKey(Hash); impl From<[u8; 32]> for PublicKey { diff --git a/crates/runtime/examples/demo.rs b/crates/runtime/examples/demo.rs index 54e572a64..0a7ba3931 100644 --- a/crates/runtime/examples/demo.rs +++ b/crates/runtime/examples/demo.rs @@ -94,7 +94,7 @@ fn main() -> EyreResult<()> { // dbg!(&outcome); println!("New Root Hash: {:?}", outcome.root_hash); - println!("Actions: {}", outcome.actions.len()); + println!("Artifact Size: {}", outcome.artifact.len()); println!("Logs:"); if outcome.logs.is_empty() { diff --git a/crates/runtime/src/logic.rs b/crates/runtime/src/logic.rs index 1049296a2..b020afb90 100644 --- a/crates/runtime/src/logic.rs +++ b/crates/runtime/src/logic.rs @@ -107,8 +107,8 @@ pub struct VMLogic<'a> { returns: Option, Vec>>, logs: Vec, events: Vec, - actions: Vec>, root_hash: Option<[u8; 32]>, + artifact: Vec, proposals: BTreeMap<[u8; 32], Vec>, } @@ -123,8 +123,8 @@ impl<'a> VMLogic<'a> { returns: None, logs: vec![], events: vec![], - actions: vec![], root_hash: None, + artifact: vec![], proposals: BTreeMap::new(), } } @@ -153,8 +153,8 @@ pub struct Outcome { pub returns: VMLogicResult>, FunctionCallError>, pub logs: Vec, pub events: Vec, - pub actions: Vec>, pub root_hash: Option<[u8; 32]>, + pub artifact: Vec, pub proposals: BTreeMap<[u8; 32], Vec>, // execution runtime // current storage usage of the app @@ -180,11 +180,10 @@ impl VMLogic<'_> { Outcome { returns, - logs: self.logs, events: self.events, - actions: self.actions, root_hash: self.root_hash, + artifact: self.artifact, proposals: self.proposals, } } @@ -369,25 +368,26 @@ impl VMHostFunctions<'_> { Ok(()) } - /// Sends an action to the host. - /// - /// After a storage event, other nodes need to be updated. Consequently, the - /// host must be informed about the action that was taken. This function - /// sends that action to the host, which can then be used to update the - /// network. - /// - pub fn send_action(&mut self, action_ptr: u64, action_len: u64) -> VMLogicResult<()> { - let action_bytes = self.read_guest_memory(action_ptr, action_len)?; - - self.with_logic_mut(|logic| logic.actions.push(action_bytes)); + pub fn commit( + &mut self, + root_hash_ptr: u64, + root_hash_len: u64, + artifact_ptr: u64, + artifact_len: u64, + ) -> VMLogicResult<()> { + let root_hash = self.read_guest_memory_sized::<32>(root_hash_ptr, root_hash_len)?; + let artifact = self.read_guest_memory(artifact_ptr, artifact_len)?; - Ok(()) - } + self.with_logic_mut(|logic| { + if logic.root_hash.is_some() { + return Err(HostError::InvalidMemoryAccess); + } - pub fn commit_root(&mut self, ptr: u64, len: u64) -> VMLogicResult<()> { - let bytes = self.read_guest_memory_sized::<32>(ptr, len)?; + logic.root_hash = Some(root_hash); + logic.artifact = artifact; - let _ = self.with_logic_mut(|logic| logic.root_hash.replace(bytes)); + Ok(()) + })?; Ok(()) } diff --git a/crates/runtime/src/logic/imports.rs b/crates/runtime/src/logic/imports.rs index 531c51f50..9b17a5a1b 100644 --- a/crates/runtime/src/logic/imports.rs +++ b/crates/runtime/src/logic/imports.rs @@ -42,8 +42,7 @@ impl VMLogic<'_> { fn log_utf8(ptr: u64, len: u64); fn emit(kind_ptr: u64, kind_len: u64, data_ptr: u64, data_len: u64); - fn send_action(action_ptr: u64, action_len: u64); - fn commit_root(ptr: u64, len: u64); + fn commit(root_hash_ptr: u64, root_hash_len: u64, artifact_ptr: u64, artifact_len: u64); fn storage_write( key_ptr: u64, @@ -130,7 +129,7 @@ macro_rules! _imports { #[cfg(feature = "host-traces")] { - #[expect(unused_mut, unused_assignments)] + #[allow(unused_mut, unused_assignments)] let mut return_ty = "()"; $( return_ty = stringify!($returns); )? println!( diff --git a/crates/sdk/macros/src/logic/method.rs b/crates/sdk/macros/src/logic/method.rs index d7dd0f750..4f3b83e2d 100644 --- a/crates/sdk/macros/src/logic/method.rs +++ b/crates/sdk/macros/src/logic/method.rs @@ -146,14 +146,14 @@ impl ToTokens for PublicLogicMethod<'_> { let state_finalizer = match (&self.self_type, init_method) { (Some(SelfType::Mutable(_)), _) | (_, true) => quote! { - ::calimero_storage::entities::Data::element_mut(&mut app).update(); - if let Err(_) = ::calimero_storage::interface::Interface::save(&mut app) { - ::calimero_sdk::env::panic_str("Failed to save app state") + if let Err(_) = ::calimero_storage::interface::Interface::commit_root(app) { + ::calimero_sdk::env::panic_str("Failed to commit app state") } }, _ => quote! {}, }; + // todo! when generics are present, strip them let init_impl = if init_method { quote! { impl ::calimero_sdk::state::AppStateInit for #self_ { diff --git a/crates/sdk/src/env.rs b/crates/sdk/src/env.rs index 6951de846..77877db81 100644 --- a/crates/sdk/src/env.rs +++ b/crates/sdk/src/env.rs @@ -158,12 +158,8 @@ pub fn emit(event: &T) { unsafe { sys::emit(Event::new(&kind, &data)) } } -pub fn send_action(action: &[u8]) { - unsafe { sys::send_action(Buffer::from(action)) } -} - -pub fn commit_root(action: &[u8; 32]) { - unsafe { sys::commit_root(Buffer::from(&action[..])) } +pub fn commit(root_hash: &[u8; 32], artifact: &[u8]) { + unsafe { sys::commit(Buffer::from(&root_hash[..]), Buffer::from(artifact)) } } #[inline] diff --git a/crates/sdk/src/sys.rs b/crates/sdk/src/sys.rs index 44a5bcc08..8c3c53428 100644 --- a/crates/sdk/src/sys.rs +++ b/crates/sdk/src/sys.rs @@ -20,8 +20,7 @@ wasm_imports! { fn log_utf8(msg: Buffer<'_>); fn emit(event: Event<'_>); // -- - fn send_action(action: Buffer<'_>); - fn commit_root(root: Buffer<'_>); + fn commit(root: Buffer<'_>, artifact: Buffer<'_>); // -- fn storage_read(key: Buffer<'_>, register_id: RegisterId) -> Bool; fn storage_remove(key: Buffer<'_>, register_id: RegisterId) -> Bool; diff --git a/crates/server/src/admin/handlers/applications/install_application.rs b/crates/server/src/admin/handlers/applications/install_application.rs index 0acd44b56..2217f29f5 100644 --- a/crates/server/src/admin/handlers/applications/install_application.rs +++ b/crates/server/src/admin/handlers/applications/install_application.rs @@ -14,7 +14,7 @@ pub async fn handler( ) -> impl IntoResponse { match state .ctx_manager - .install_application_from_url(req.url, req.metadata /*, req.hash */) + .install_application_from_url(req.url, req.metadata, req.hash) .await { Ok(application_id) => ApiResponse { diff --git a/crates/storage/src/env.rs b/crates/storage/src/env.rs index dabca04ec..44e74874f 100644 --- a/crates/storage/src/env.rs +++ b/crates/storage/src/env.rs @@ -1,35 +1,17 @@ //! Environment bindings for the storage crate. -use borsh::to_vec; #[cfg(target_arch = "wasm32")] use calimero_vm as imp; #[cfg(not(target_arch = "wasm32"))] use mocked as imp; -use crate::interface::Action; use crate::store::Key; -/// Sends an action to the runtime. -/// -/// # Parameters -/// -/// * `action` - The action to send. -/// -/// # Panics -/// -/// This function will panic if the action cannot be serialised. -/// -#[expect(clippy::expect_used, reason = "Effectively infallible here")] -pub fn send_action(action: &Action) { - imp::send_action(&to_vec(&action).expect("Failed to serialize action")); -} - /// Commits the root hash to the runtime. -/// This function should be called after the root hash has been updated. /// #[expect(clippy::missing_const_for_fn, reason = "Cannot be const here")] -pub fn commit_root(root_hash: &[u8; 32]) { - imp::commit_root(root_hash); +pub fn commit(root_hash: &[u8; 32], artifact: &[u8]) { + imp::commit(root_hash, artifact); } /// Reads data from persistent storage. @@ -95,15 +77,9 @@ mod calimero_vm { use crate::store::Key; - /// Sends an action to the runtime. - pub(super) fn send_action(action: &[u8]) { - env::send_action(action); - } - /// Commits the root hash to the runtime. - /// This function should be called after the root hash has been updated. - pub(super) fn commit_root(root_hash: &[u8; 32]) { - env::commit_root(root_hash); + pub(super) fn commit(root_hash: &[u8; 32], artifact: &[u8]) { + env::commit(root_hash, artifact); } /// Reads data from persistent storage. @@ -142,24 +118,27 @@ mod calimero_vm { #[cfg(not(target_arch = "wasm32"))] mod mocked { + use std::cell::RefCell; use std::time::{SystemTime, UNIX_EPOCH}; use rand::RngCore; use crate::store::{Key, MockedStorage, StorageAdaptor}; + thread_local! { + static ROOT_HASH: RefCell> = const { RefCell::new(None) }; + } + /// The default storage system. type DefaultStore = MockedStorage<{ usize::MAX }>; - /// Sends an action to the runtime. - pub(super) const fn send_action(_action: &[u8]) { - // Do nothing. - } - /// Commits the root hash to the runtime. - /// This function should be called after the root hash has been updated. - pub(super) const fn commit_root(_root_hash: &[u8; 32]) { - // Do nothing. + pub(super) fn commit(root_hash: &[u8; 32], _artifact: &[u8]) { + ROOT_HASH.with(|rh| { + if rh.borrow_mut().replace(*root_hash).is_some() { + Option::expect(None, "State previously committed") + } + }); } /// Reads data from persistent storage. diff --git a/crates/storage/src/integration.rs b/crates/storage/src/integration.rs index ca63243d9..0baea1231 100644 --- a/crates/storage/src/integration.rs +++ b/crates/storage/src/integration.rs @@ -25,7 +25,7 @@ pub struct Comparison { pub type_id: u8, /// The serialised data of the entity. - pub data: Vec, + pub data: Option>, /// The comparison data for the entity. pub comparison_data: ComparisonData, diff --git a/crates/storage/src/interface.rs b/crates/storage/src/interface.rs index 2cbdff588..cf3f34d13 100644 --- a/crates/storage/src/interface.rs +++ b/crates/storage/src/interface.rs @@ -226,9 +226,9 @@ use thiserror::Error as ThisError; use crate::address::{Id, Path}; use crate::entities::{ChildInfo, Collection, Data}; -use crate::env; use crate::index::Index; use crate::store::{Key, MainStorage, StorageAdaptor}; +use crate::sync; /// Convenient type alias for the main storage system. pub type Interface = MainInterface; @@ -575,22 +575,28 @@ impl MainInterface { /// data or if there are problems during the comparison process. /// pub fn compare_trees( - foreign_entity: &D, + foreign_entity_data: Option>, foreign_index_data: &ComparisonData, ) -> Result<(Vec, Vec), StorageError> { - if foreign_entity.id() != foreign_index_data.id { - return Err(StorageError::IdentifierMismatch(foreign_index_data.id)); - } - let mut actions = (vec![], vec![]); - let Some(local_entity) = Self::find_by_id::(foreign_entity.id())? else { - // Local entity doesn't exist, so we need to add it - actions.0.push(Action::Add { - id: foreign_entity.id(), - type_id: D::type_id(), - data: to_vec(foreign_entity).map_err(StorageError::SerializationError)?, - ancestors: foreign_index_data.ancestors.clone(), - }); + + let foreign_entity = foreign_entity_data + .as_ref() + .map(|d| D::try_from_slice(d)) + .transpose() + .map_err(StorageError::DeserializationError)?; + + let Some(local_entity) = Self::find_by_id::(foreign_index_data.id)? else { + if let Some(foreign_entity) = foreign_entity_data { + // Local entity doesn't exist, so we need to add it + actions.0.push(Action::Add { + id: foreign_index_data.id, + type_id: D::type_id(), + data: foreign_entity, + ancestors: foreign_index_data.ancestors.clone(), + }); + } + return Ok(actions); }; @@ -598,28 +604,32 @@ impl MainInterface { .ok_or(StorageError::IndexNotFound(local_entity.id()))?; // Compare full Merkle hashes - if local_entity.element().merkle_hash() == foreign_entity.element().merkle_hash() - || local_full_hash == foreign_index_data.full_hash - { + if local_full_hash == foreign_index_data.full_hash { return Ok(actions); } // Compare own hashes and timestamps if local_own_hash != foreign_index_data.own_hash { - if local_entity.element().updated_at() <= foreign_entity.element().updated_at() { - actions.0.push(Action::Update { - id: local_entity.id(), - type_id: D::type_id(), - data: to_vec(foreign_entity).map_err(StorageError::SerializationError)?, - ancestors: foreign_index_data.ancestors.clone(), - }); - } else { - actions.1.push(Action::Update { - id: foreign_entity.id(), - type_id: D::type_id(), - data: to_vec(&local_entity).map_err(StorageError::SerializationError)?, - ancestors: >::get_ancestors_of(local_entity.id())?, - }); + match (foreign_entity, foreign_entity_data) { + (Some(foreign_entity), Some(foreign_entity_data)) + if local_entity.element().updated_at() + <= foreign_entity.element().updated_at() => + { + actions.0.push(Action::Update { + id: local_entity.id(), + type_id: D::type_id(), + data: foreign_entity_data, + ancestors: foreign_index_data.ancestors.clone(), + }); + } + _ => { + actions.1.push(Action::Update { + id: foreign_index_data.id, + type_id: D::type_id(), + data: to_vec(&local_entity).map_err(StorageError::SerializationError)?, + ancestors: >::get_ancestors_of(local_entity.id())?, + }); + } } } @@ -696,6 +706,31 @@ impl MainInterface { Ok(actions) } + /// Compares a foreign entity with a local one, and applies the resulting + /// actions to bring the two entities into sync. + /// + /// # Errors + /// + /// This function will return an error if there are issues accessing local + /// data or if there are problems during the comparison process. + /// + pub fn compare_affective( + data: Option>, + comparison_data: ComparisonData, + ) -> Result<(), StorageError> { + let (local, remote) = Interface::compare_trees::(data, &comparison_data)?; + + for action in local { + let _ignored = Interface::apply_action::(action)?; + } + + for action in remote { + sync::push_action(action); + } + + Ok(()) + } + /// Finds an [`Element`](crate::entities::Element) by its unique identifier. /// /// This will always retrieve a single [`Element`](crate::entities::Element), @@ -824,7 +859,19 @@ impl MainInterface { /// If an error occurs when interacting with the storage system, an error /// will be returned. /// - pub fn generate_comparison_data(entity: &D) -> Result { + pub fn generate_comparison_data( + entity: Option<&D>, + ) -> Result { + let Some(entity) = entity else { + return Ok(ComparisonData { + id: Id::root(), + own_hash: [0; 32], + full_hash: [0; 32], + ancestors: Vec::new(), + children: BTreeMap::new(), + }); + }; + let (full_hash, own_hash) = >::get_hashes_for(entity.id())? .ok_or(StorageError::IndexNotFound(entity.id()))?; @@ -922,10 +969,7 @@ impl MainInterface { _ = S::storage_remove(Key::Entry(child_id)); - // We have to serialise here rather than send the Action itself, as the SDK - // has no knowledge of the Action type, and cannot use it as it would be a - // circular dependency. - env::send_action(&Action::Delete { + sync::push_action(Action::Delete { id: child_id, ancestors, }); @@ -948,6 +992,33 @@ impl MainInterface { Self::find_by_id(Id::root()) } + /// Saves the root entity to the storage system, and commits any recorded + /// actions or comparisons. + /// + /// This function must only be called once otherwise it will panic. + /// + /// # Errors + /// + /// This function will return an error if there are issues accessing local + /// data or if there are problems during the comparison process. + /// + pub fn commit_root(mut root: D) -> Result<(), StorageError> { + if root.id() != Id::root() { + return Err(StorageError::UnexpectedId(root.id())); + } + + // fixme! mutations (action application) doesn't propagate to the root + // fixme! so, a best-attempt approach is to force a save on the root + // fixme! deeply nested entries have undefined behaviour + root.element_mut().is_dirty = true; + + let _ = Self::save(&mut root)?; + + sync::commit_root(&root.element().merkle_hash())?; + + Ok(()) + } + /// Saves an [`Element`](crate::entities::Element) to the storage system. /// /// This will save the provided [`Element`](crate::entities::Element) to the @@ -1039,10 +1110,6 @@ impl MainInterface { &to_vec(entity).map_err(StorageError::SerializationError)?, ); - if Id::root() == id { - env::commit_root(&own_hash); - } - entity.element_mut().is_dirty = false; let action = if is_new { @@ -1061,7 +1128,7 @@ impl MainInterface { } }; - env::send_action(&action); + sync::push_action(action); Ok(true) } @@ -1154,6 +1221,10 @@ pub enum StorageError { #[error("Record not found with ID: {0}")] NotFound(Id), + /// An unexpected ID was encountered. + #[error("Unexpected ID: {0}")] + UnexpectedId(Id), + /// An error occurred during serialization. #[error("Serialization error: {0}")] SerializationError(IoError), @@ -1185,6 +1256,7 @@ impl Serialize for StorageError { | Self::IndexNotFound(id) | Self::IdentifierMismatch(id) | Self::InvalidDataFound(id) + | Self::UnexpectedId(id) | Self::NotFound(id) => serializer.serialize_str(&id.to_string()), Self::StoreError(ref err) => serializer.serialize_str(&err.to_string()), Self::UnknownType(err) => serializer.serialize_u8(err), diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 206f248a6..bcbed3a05 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -69,6 +69,7 @@ pub mod index; pub mod integration; pub mod interface; pub mod store; +pub mod sync; pub use calimero_storage_macros::{AtomicUnit, Collection}; diff --git a/crates/storage/src/store.rs b/crates/storage/src/store.rs index 7f5393057..bcc839472 100644 --- a/crates/storage/src/store.rs +++ b/crates/storage/src/store.rs @@ -1,5 +1,7 @@ //! Storage operations. +use sha2::{Digest, Sha256}; + use crate::address::Id; use crate::env::{storage_read, storage_remove, storage_write}; @@ -17,7 +19,7 @@ pub enum Key { impl Key { /// Converts the key to a byte array. #[must_use] - pub fn to_bytes(&self) -> [u8; 33] { + pub fn to_bytes(&self) -> [u8; 32] { let mut bytes = [0; 33]; match *self { Self::Index(id) => { @@ -29,7 +31,7 @@ impl Key { bytes[1..33].copy_from_slice(id.as_bytes()); } } - bytes + Sha256::digest(bytes).into() } } diff --git a/crates/storage/src/sync.rs b/crates/storage/src/sync.rs new file mode 100644 index 000000000..022d58f55 --- /dev/null +++ b/crates/storage/src/sync.rs @@ -0,0 +1,84 @@ +//! Synchronisation utilities for external runtimes. + +use core::cell::RefCell; +use std::io; + +use borsh::{to_vec, BorshDeserialize, BorshSerialize}; + +use crate::env; +use crate::integration::Comparison; +use crate::interface::Action; + +/// An artifact to aid synchronisation with an external runtime. +#[derive(Debug, BorshSerialize)] +pub enum SyncArtifact { + /// A list of actions. + Actions(Vec), + /// A list of comparisons. + Comparisons(Vec), +} + +impl BorshDeserialize for SyncArtifact { + fn deserialize_reader(reader: &mut R) -> io::Result { + let Ok(tag) = u8::deserialize_reader(reader) else { + return Ok(SyncArtifact::Comparisons(vec![])); + }; + + match tag { + 0 => Ok(SyncArtifact::Actions(Vec::deserialize_reader(reader)?)), + 1 => Ok(SyncArtifact::Comparisons(Vec::deserialize_reader(reader)?)), + _ => Err(io::Error::new(io::ErrorKind::InvalidData, "Invalid tag")), + } + } +} + +thread_local! { + static ACTIONS: RefCell> = const { RefCell::new(Vec::new()) }; + static COMPARISON: RefCell> = const { RefCell::new(Vec::new()) }; +} + +/// Records an action for eventual synchronisation. +/// +/// # Parameters +/// +/// * `action` - The action to record. +/// +pub fn push_action(action: Action) { + ACTIONS.with(|actions| actions.borrow_mut().push(action)); +} + +/// Records a comparison for eventual synchronisation. +/// +/// # Parameters +/// +/// * `comparison` - The comparison to record. +/// +pub fn push_comparison(comparison: Comparison) { + COMPARISON.with(|comparisons| comparisons.borrow_mut().push(comparison)); +} + +/// Commits the root hash to the runtime. +/// This will also commit any recorded actions or comparisons. +/// If both actions and comparisons are present, this function will panic. +/// This function must only be called once. +/// +/// # Errors +/// +/// This function will return an error if there are issues accessing local +/// data or if there are problems during the comparison process. +/// +pub fn commit_root(root_hash: &[u8; 32]) -> eyre::Result<()> { + let actions = ACTIONS.with(RefCell::take); + let comparison = COMPARISON.with(RefCell::take); + + let artifact = match (&*actions, &*comparison) { + (&[], &[]) => vec![], + (&[], _) => to_vec(&SyncArtifact::Comparisons(comparison))?, + (_, &[]) => to_vec(&SyncArtifact::Actions(actions))?, + _ => eyre::bail!("both actions and comparison are present"), + }; + + env::commit(root_hash, &artifact); + + Ok(()) +} diff --git a/crates/storage/src/tests/interface.rs b/crates/storage/src/tests/interface.rs index 941547027..3a44d1484 100644 --- a/crates/storage/src/tests/interface.rs +++ b/crates/storage/src/tests/interface.rs @@ -288,6 +288,19 @@ mod interface__comparison { type ForeignInterface = MainInterface>; + fn compare_trees( + foreign: Option<&D>, + comparison_data: &ComparisonData, + ) -> Result<(Vec, Vec), StorageError> { + Interface::compare_trees::( + foreign + .map(to_vec) + .transpose() + .map_err(StorageError::SerializationError)?, + comparison_data, + ) + } + #[test] fn compare_trees__identical() { let element = Element::new(&Path::new("::root::node").unwrap(), None); @@ -301,9 +314,9 @@ mod interface__comparison { foreign.element().merkle_hash() ); - let result = Interface::compare_trees( - &foreign, - &ForeignInterface::generate_comparison_data(&foreign).unwrap(), + let result = compare_trees( + Some(&foreign), + &ForeignInterface::generate_comparison_data(Some(&foreign)).unwrap(), ) .unwrap(); assert_eq!(result, (vec![], vec![])); @@ -322,9 +335,9 @@ mod interface__comparison { local.element_mut().update(); assert!(Interface::save(&mut local).unwrap()); - let result = Interface::compare_trees( - &foreign, - &ForeignInterface::generate_comparison_data(&foreign).unwrap(), + let result = compare_trees( + Some(&foreign), + &ForeignInterface::generate_comparison_data(Some(&foreign)).unwrap(), ) .unwrap(); assert_eq!( @@ -354,9 +367,9 @@ mod interface__comparison { foreign.element_mut().update(); assert!(ForeignInterface::save(&mut foreign).unwrap()); - let result = Interface::compare_trees( - &foreign, - &ForeignInterface::generate_comparison_data(&foreign).unwrap(), + let result = compare_trees( + Some(&foreign), + &ForeignInterface::generate_comparison_data(Some(&foreign)).unwrap(), ) .unwrap(); assert_eq!( @@ -417,9 +430,9 @@ mod interface__comparison { ) .unwrap()); - let (local_actions, foreign_actions) = Interface::compare_trees( - &foreign_page, - &ForeignInterface::generate_comparison_data(&foreign_page).unwrap(), + let (local_actions, foreign_actions) = compare_trees( + Some(&foreign_page), + &ForeignInterface::generate_comparison_data(Some(&foreign_page)).unwrap(), ) .unwrap(); @@ -462,9 +475,9 @@ mod interface__comparison { ); // Compare the updated para1 - let (local_para1_actions, foreign_para1_actions) = Interface::compare_trees( - &foreign_para1, - &ForeignInterface::generate_comparison_data(&foreign_para1).unwrap(), + let (local_para1_actions, foreign_para1_actions) = compare_trees( + Some(&foreign_para1), + &ForeignInterface::generate_comparison_data(Some(&foreign_para1)).unwrap(), ) .unwrap(); @@ -493,9 +506,9 @@ mod interface__comparison { assert_eq!(foreign_para1_actions, vec![]); // Compare para3 which doesn't exist locally - let (local_para3_actions, foreign_para3_actions) = Interface::compare_trees( - &foreign_para3, - &ForeignInterface::generate_comparison_data(&foreign_para3).unwrap(), + let (local_para3_actions, foreign_para3_actions) = compare_trees( + Some(&foreign_para3), + &ForeignInterface::generate_comparison_data(Some(&foreign_para3)).unwrap(), ) .unwrap(); diff --git a/crates/store/blobs/examples/blobstore.rs b/crates/store/blobs/examples/blobstore.rs index 7ddfdda01..1d5f5e10a 100644 --- a/crates/store/blobs/examples/blobstore.rs +++ b/crates/store/blobs/examples/blobstore.rs @@ -4,7 +4,7 @@ use std::env::args; use std::process::exit; use calimero_blobstore::config::BlobStoreConfig; -use calimero_blobstore::{BlobManager, FileSystem, Size}; +use calimero_blobstore::{BlobManager, FileSystem}; use calimero_store::config::StoreConfig; use calimero_store::db::RocksDB; use calimero_store::Store; @@ -18,16 +18,11 @@ const BLOB_DIR: &'static str = "blob-tests/blob"; #[tokio::main] async fn main() -> EyreResult<()> { - let config = StoreConfig { - path: DATA_DIR.into(), - }; + let config = StoreConfig::new(DATA_DIR.into()); let data_store = Store::open::(&config)?; - let blob_store = FileSystem::new(&BlobStoreConfig { - path: BLOB_DIR.into(), - }) - .await?; + let blob_store = FileSystem::new(&BlobStoreConfig::new(BLOB_DIR.into())).await?; let blob_mgr = BlobManager::new(data_store, blob_store); @@ -50,7 +45,11 @@ async fn main() -> EyreResult<()> { None => { let stdin = stdin().compat(); - println!("{}", blob_mgr.put_sized(None, stdin).await?); + let (blob_id, hash, size) = blob_mgr.put_sized(None, stdin).await?; + + println!("Blob ID: {}", blob_id); + println!("Hash: {}", hash); + println!("Size: {}", size); } } diff --git a/crates/store/blobs/src/lib.rs b/crates/store/blobs/src/lib.rs index fdd6b20c3..0e42af949 100644 --- a/crates/store/blobs/src/lib.rs +++ b/crates/store/blobs/src/lib.rs @@ -96,14 +96,18 @@ impl BlobManager { Blob::new(id, self.clone()) } - pub async fn put(&self, stream: T) -> EyreResult<(BlobId, u64)> + pub async fn put(&self, stream: T) -> EyreResult<(BlobId, Hash, u64)> where T: AsyncRead, { self.put_sized(None, stream).await } - pub async fn put_sized(&self, size: Option, stream: T) -> EyreResult<(BlobId, u64)> + pub async fn put_sized( + &self, + size: Option, + stream: T, + ) -> EyreResult<(BlobId, Hash, u64)> where T: AsyncRead, { @@ -217,7 +221,7 @@ impl BlobManager { &BlobMetaValue::new(size, *hash, links.into_boxed_slice()), )?; - Ok((id, size)) // todo!: Ok(Blob { id, size, hash }::{fn stream()}) + Ok((id, hash, size)) // todo!: Ok(Blob { id, size, hash }::{fn stream()}) } } diff --git a/crates/store/src/types/context.rs b/crates/store/src/types/context.rs index bae6f6f7a..9cc913115 100644 --- a/crates/store/src/types/context.rs +++ b/crates/store/src/types/context.rs @@ -39,15 +39,25 @@ pub struct ContextConfig { pub protocol: Box, pub network: Box, pub contract: Box, + pub application_revision: u64, + pub members_revision: u64, } impl ContextConfig { #[must_use] - pub const fn new(protocol: Box, network: Box, contract: Box) -> Self { + pub const fn new( + protocol: Box, + network: Box, + contract: Box, + application_revision: u64, + members_revision: u64, + ) -> Self { Self { protocol, network, contract, + application_revision, + members_revision, } } } From 410df0aece1b52fd1d1299963ea43917abe7ea94 Mon Sep 17 00:00:00 2001 From: Xabi Losada Date: Mon, 4 Nov 2024 19:17:18 +0100 Subject: [PATCH 58/75] refactor: extract proxy entities (#927) --- contracts/proxy-lib/src/lib.rs | 292 +----------------- contracts/proxy-lib/src/mutate.rs | 267 ++++++++++++++++ .../tests/common/proxy_lib_helper.rs | 48 +-- contracts/proxy-lib/tests/sandbox.rs | 75 +++-- crates/context/config/src/lib.rs | 73 +++++ 5 files changed, 404 insertions(+), 351 deletions(-) create mode 100644 contracts/proxy-lib/src/mutate.rs diff --git a/contracts/proxy-lib/src/lib.rs b/contracts/proxy-lib/src/lib.rs index 6ca327b2f..4fdb0e578 100644 --- a/contracts/proxy-lib/src/lib.rs +++ b/contracts/proxy-lib/src/lib.rs @@ -3,25 +3,15 @@ use std::collections::HashSet; use calimero_context_config::repr::{Repr, ReprTransmute}; use calimero_context_config::types::{ContextId, Signed, SignerId}; -use near_sdk::json_types::{Base64VecU8, U128}; +use calimero_context_config::{Proposal, ProposalId, ProposalWithApprovals}; +use near_sdk::json_types::U128; use near_sdk::store::IterableMap; -use near_sdk::{ - env, near, AccountId, Gas, NearToken, PanicOnDefault, Promise, PromiseError, PromiseOrValue, - PromiseResult, -}; +use near_sdk::{near, AccountId, PanicOnDefault, PromiseError}; pub mod ext_config; +mod mutate; pub use crate::ext_config::config_contract; -pub type ProposalId = u32; - -#[derive(PartialEq, Debug)] -#[near(serializers = [json, borsh])] -pub struct ProposalWithApprovals { - pub proposal_id: ProposalId, - pub num_approvals: usize, -} - enum MemberAction { Approve { identity: Repr, @@ -54,48 +44,6 @@ pub struct FunctionCallPermission { method_names: Vec, } -#[derive(Clone, PartialEq)] -#[near(serializers = [json, borsh])] -pub struct ProposalApprovalWithSigner { - pub proposal_id: ProposalId, - pub signer_id: Repr, - pub added_timestamp: u64, -} - -#[derive(Clone, PartialEq, Debug)] -#[near(serializers = [json, borsh])] -pub enum ProposalAction { - ExternalFunctionCall { - receiver_id: AccountId, - method_name: String, - args: Base64VecU8, - deposit: NearToken, - gas: Gas, - }, - Transfer { - receiver_id: AccountId, - amount: NearToken, - }, - SetNumApprovals { - num_approvals: u32, - }, - SetActiveProposalsLimit { - active_proposals_limit: u32, - }, - SetContextValue { - key: Box<[u8]>, - value: Box<[u8]>, - }, -} - -// The proposal the user makes specifying the receiving account and actions they want to execute (1 tx) -#[derive(Clone, PartialEq, Debug)] -#[near(serializers = [json, borsh])] -pub struct Proposal { - pub author_id: Repr, - pub actions: Vec, -} - #[near] impl ProxyContract { #[init] @@ -113,75 +61,6 @@ impl ProxyContract { } } - pub fn create_and_approve_proposal(&self, proposal: Signed) -> Promise { - // Verify the signature corresponds to the signer_id - let proposal = proposal - .parse(|i| *i.author_id) - .expect("failed to parse input"); - - let author_id = proposal.author_id; - - let num_proposals = self.num_proposals_pk.get(&author_id).unwrap_or(&0) + 1; - assert!( - num_proposals <= self.active_proposals_limit, - "Account has too many active proposals. Confirm or delete some." - ); - self.perform_action_by_member(MemberAction::Create { - proposal, - num_proposals, - }) - } - - pub fn approve(&mut self, proposal: Signed) -> Promise { - let proposal = proposal - .parse(|i| *i.signer_id) - .expect("failed to parse input"); - self.perform_action_by_member(MemberAction::Approve { - identity: proposal.signer_id, - proposal_id: proposal.proposal_id, - }) - } - - fn internal_confirm(&mut self, proposal_id: ProposalId, signer_id: SignerId) { - let approvals = self.approvals.get_mut(&proposal_id).unwrap(); - assert!( - !approvals.contains(&signer_id), - "Already confirmed this proposal with this key" - ); - if approvals.len() as u32 + 1 >= self.num_approvals { - let proposal = self.remove_proposal(proposal_id); - /******************************** - NOTE: If the tx execution fails for any reason, the proposals and approvals are removed already, so the client has to start all over - ********************************/ - self.execute_proposal(proposal); - } else { - approvals.insert(signer_id); - } - } - - fn perform_action_by_member(&self, action: MemberAction) -> Promise { - let identity = match &action { - MemberAction::Approve { identity, .. } => identity, - MemberAction::Create { proposal, .. } => &proposal.author_id, - } - .rt() - .expect("Could not transmute"); - config_contract::ext(self.context_config_account_id.clone()) - .has_member(Repr::new(self.context_id), identity) - .then(match action { - MemberAction::Approve { - identity, - proposal_id, - } => Self::ext(env::current_account_id()) - .internal_approve_proposal(identity, proposal_id), - MemberAction::Create { - proposal, - num_proposals, - } => Self::ext(env::current_account_id()) - .internal_create_proposal(proposal, num_proposals), - }) - } - pub fn proposals(&self, offset: usize, length: usize) -> Vec<(&u32, &Proposal)> { let effective_len = (self.proposals.len() as usize) .saturating_sub(offset) @@ -204,169 +83,6 @@ impl ProxyContract { }) } - #[private] - pub fn internal_approve_proposal( - &mut self, - signer_id: Repr, - proposal_id: ProposalId, - #[callback_result] call_result: Result, // Match the return type - ) -> Option { - assert_membership(call_result); - - self.internal_confirm(proposal_id, signer_id.rt().expect("Invalid signer")); - self.build_proposal_response(proposal_id) - } - - #[private] - pub fn internal_create_proposal( - &mut self, - proposal: Proposal, - num_proposals: u32, - #[callback_result] call_result: Result, // Match the return type - ) -> Option { - assert_membership(call_result); - - self.num_proposals_pk - .insert(*proposal.author_id, num_proposals); - - let proposal_id = self.proposal_nonce; - - self.proposals.insert(proposal_id, proposal.clone()); - self.approvals.insert(proposal_id, HashSet::new()); - self.internal_confirm( - proposal_id, - proposal.author_id.rt().expect("Invalid signer"), - ); - - self.proposal_nonce += 1; - - self.build_proposal_response(proposal_id) - } - - fn build_proposal_response(&self, proposal_id: ProposalId) -> Option { - let approvals = self.get_confirmations_count(proposal_id); - match approvals { - None => None, - _ => Some(ProposalWithApprovals { - proposal_id, - num_approvals: approvals.unwrap().num_approvals, - }), - } - } - - #[private] - pub fn finalize_execution(&mut self, proposal: Proposal) -> bool { - let promise_count = env::promise_results_count(); - if promise_count > 0 { - for i in 0..promise_count { - match env::promise_result(i) { - PromiseResult::Successful(_) => continue, - _ => return false, - } - } - } - - for action in proposal.actions { - match action { - ProposalAction::SetActiveProposalsLimit { - active_proposals_limit, - } => { - self.active_proposals_limit = active_proposals_limit; - } - ProposalAction::SetNumApprovals { num_approvals } => { - self.num_approvals = num_approvals; - } - ProposalAction::SetContextValue { key, value } => { - self.internal_mutate_storage(key, value); - } - _ => {} - } - } - true - } - - fn execute_proposal(&mut self, proposal: Proposal) -> PromiseOrValue { - let mut promise_actions = Vec::new(); - let mut non_promise_actions = Vec::new(); - - for action in proposal.actions { - match action { - ProposalAction::ExternalFunctionCall { .. } | ProposalAction::Transfer { .. } => { - promise_actions.push(action) - } - _ => non_promise_actions.push(action), - } - } - - if promise_actions.is_empty() { - self.finalize_execution(Proposal { - author_id: proposal.author_id, - actions: non_promise_actions, - }); - return PromiseOrValue::Value(true); - } - - let mut chained_promise: Option = None; - - for action in promise_actions { - let promise = match action { - ProposalAction::ExternalFunctionCall { - receiver_id, - method_name, - args, - deposit, - gas, - } => { - Promise::new(receiver_id).function_call(method_name, args.into(), deposit, gas) - } - ProposalAction::Transfer { - receiver_id, - amount, - } => Promise::new(receiver_id).transfer(amount), - _ => continue, - }; - - chained_promise = Some(match chained_promise { - Some(accumulated) => accumulated.then(promise), - None => promise, - }); - } - - match chained_promise { - Some(promise) => PromiseOrValue::Promise(promise.then( - Self::ext(env::current_account_id()).finalize_execution(Proposal { - author_id: proposal.author_id, - actions: non_promise_actions, - }), - )), - None => PromiseOrValue::Value(true), - } - } - - fn remove_proposal(&mut self, proposal_id: ProposalId) -> Proposal { - self.approvals.remove(&proposal_id); - let proposal = self - .proposals - .remove(&proposal_id) - .expect("Failed to remove existing element"); - - let author_id: SignerId = proposal.author_id.rt().expect("Invalid signer"); - let mut num_proposals = *self.num_proposals_pk.get(&author_id).unwrap_or(&0); - - num_proposals = num_proposals.saturating_sub(1); - self.num_proposals_pk.insert(author_id, num_proposals); - proposal - } - - #[private] - pub fn internal_mutate_storage( - &mut self, - key: Box<[u8]>, - value: Box<[u8]>, - ) -> Option> { - self.context_storage.insert(key.clone(), value) - } - #[expect(clippy::type_complexity, reason = "Acceptable here")] pub fn context_storage_entries( &self, diff --git a/contracts/proxy-lib/src/mutate.rs b/contracts/proxy-lib/src/mutate.rs new file mode 100644 index 000000000..761edfcda --- /dev/null +++ b/contracts/proxy-lib/src/mutate.rs @@ -0,0 +1,267 @@ +use std::collections::HashSet; +use std::str::FromStr; + +use calimero_context_config::repr::{Repr, ReprTransmute}; +use calimero_context_config::types::SignerId; +use calimero_context_config::{ + ProposalAction, ProposalId, ProposalWithApprovals, ProxyMutateRequest, +}; +use near_sdk::{ + env, near, AccountId, Gas, NearToken, Promise, PromiseError, PromiseOrValue, PromiseResult, +}; + +use super::{Proposal, ProxyContract, ProxyContractExt, Signed}; +use crate::{assert_membership, config_contract, MemberAction}; + +#[near] +impl ProxyContract { + pub fn mutate(&mut self, request: Signed) -> Promise { + let request = request + .parse(|i| match i { + ProxyMutateRequest::Propose { proposal } => *proposal.author_id, + ProxyMutateRequest::Approve { approval } => *approval.signer_id, + }) + .expect(&format!("Invalid input: {:?}", request)); + match request { + ProxyMutateRequest::Propose { proposal } => self.propose(proposal), + ProxyMutateRequest::Approve { approval } => { + self.perform_action_by_member(MemberAction::Approve { + identity: approval.signer_id, + proposal_id: approval.proposal_id, + }) + } + } + } +} +#[near] +impl ProxyContract { + #[private] + pub fn internal_approve_proposal( + &mut self, + signer_id: Repr, + proposal_id: ProposalId, + #[callback_result] call_result: Result, // Match the return type + ) -> Option { + assert_membership(call_result); + + self.internal_confirm(proposal_id, signer_id.rt().expect("Invalid signer")); + self.build_proposal_response(proposal_id) + } + + #[private] + pub fn internal_create_proposal( + &mut self, + proposal: Proposal, + num_proposals: u32, + #[callback_result] call_result: Result, // Match the return type + ) -> Option { + assert_membership(call_result); + + self.num_proposals_pk + .insert(*proposal.author_id, num_proposals); + + let proposal_id = self.proposal_nonce; + + self.proposals.insert(proposal_id, proposal.clone()); + self.approvals.insert(proposal_id, HashSet::new()); + self.internal_confirm( + proposal_id, + proposal.author_id.rt().expect("Invalid signer"), + ); + + self.proposal_nonce += 1; + + self.build_proposal_response(proposal_id) + } + + #[private] + pub fn finalize_execution(&mut self, proposal: Proposal) -> bool { + let promise_count = env::promise_results_count(); + if promise_count > 0 { + for i in 0..promise_count { + match env::promise_result(i) { + PromiseResult::Successful(_) => continue, + _ => return false, + } + } + } + + for action in proposal.actions { + match action { + ProposalAction::SetActiveProposalsLimit { + active_proposals_limit, + } => { + self.active_proposals_limit = active_proposals_limit; + } + ProposalAction::SetNumApprovals { num_approvals } => { + self.num_approvals = num_approvals; + } + ProposalAction::SetContextValue { key, value } => { + self.internal_mutate_storage(key, value); + } + _ => {} + } + } + true + } + + fn execute_proposal(&mut self, proposal: Proposal) -> PromiseOrValue { + let mut promise_actions = Vec::new(); + let mut non_promise_actions = Vec::new(); + + for action in proposal.actions { + match action { + ProposalAction::ExternalFunctionCall { .. } | ProposalAction::Transfer { .. } => { + promise_actions.push(action) + } + _ => non_promise_actions.push(action), + } + } + + if promise_actions.is_empty() { + self.finalize_execution(Proposal { + author_id: proposal.author_id, + actions: non_promise_actions, + }); + return PromiseOrValue::Value(true); + } + + let mut chained_promise: Option = None; + + for action in promise_actions { + let promise = match action { + ProposalAction::ExternalFunctionCall { + receiver_id, + method_name, + args, + deposit, + gas, + } => { + let account_id: AccountId = + AccountId::from_str(receiver_id.as_str()).expect("Invalid account ID"); + Promise::new(account_id).function_call( + method_name, + args.into(), + NearToken::from_near(deposit), + Gas::from_gas(gas), + ) + } + ProposalAction::Transfer { + receiver_id, + amount, + } => { + let account_id: AccountId = + AccountId::from_str(receiver_id.as_str()).expect("Invalid account ID"); + Promise::new(account_id).transfer(NearToken::from_near(amount)) + } + _ => continue, + }; + + chained_promise = Some(match chained_promise { + Some(accumulated) => accumulated.then(promise), + None => promise, + }); + } + + match chained_promise { + Some(promise) => PromiseOrValue::Promise(promise.then( + Self::ext(env::current_account_id()).finalize_execution(Proposal { + author_id: proposal.author_id, + actions: non_promise_actions, + }), + )), + None => PromiseOrValue::Value(true), + } + } + + #[private] + pub fn internal_mutate_storage( + &mut self, + key: Box<[u8]>, + value: Box<[u8]>, + ) -> Option> { + self.context_storage.insert(key.clone(), value) + } + + fn internal_confirm(&mut self, proposal_id: ProposalId, signer_id: SignerId) { + let approvals = self.approvals.get_mut(&proposal_id).unwrap(); + assert!( + !approvals.contains(&signer_id), + "Already confirmed this proposal with this key" + ); + if approvals.len() as u32 + 1 >= self.num_approvals { + let proposal = self.remove_proposal(proposal_id); + /******************************** + NOTE: If the tx execution fails for any reason, the proposals and approvals are removed already, so the client has to start all over + ********************************/ + self.execute_proposal(proposal); + } else { + approvals.insert(signer_id); + } + } +} + +impl ProxyContract { + fn propose(&self, proposal: Proposal) -> Promise { + let author_id = proposal.author_id; + + let num_proposals = self.num_proposals_pk.get(&author_id).unwrap_or(&0) + 1; + assert!( + num_proposals <= self.active_proposals_limit, + "Account has too many active proposals. Confirm or delete some." + ); + self.perform_action_by_member(MemberAction::Create { + proposal, + num_proposals, + }) + } + + fn perform_action_by_member(&self, action: MemberAction) -> Promise { + let identity = match &action { + MemberAction::Approve { identity, .. } => identity, + MemberAction::Create { proposal, .. } => &proposal.author_id, + } + .rt() + .expect("Could not transmute"); + config_contract::ext(self.context_config_account_id.clone()) + .has_member(Repr::new(self.context_id), identity) + .then(match action { + MemberAction::Approve { + identity, + proposal_id, + } => Self::ext(env::current_account_id()) + .internal_approve_proposal(identity, proposal_id), + MemberAction::Create { + proposal, + num_proposals, + } => Self::ext(env::current_account_id()) + .internal_create_proposal(proposal, num_proposals), + }) + } + + fn build_proposal_response(&self, proposal_id: ProposalId) -> Option { + let approvals = self.get_confirmations_count(proposal_id); + match approvals { + None => None, + _ => Some(ProposalWithApprovals { + proposal_id, + num_approvals: approvals.unwrap().num_approvals, + }), + } + } + + fn remove_proposal(&mut self, proposal_id: ProposalId) -> Proposal { + self.approvals.remove(&proposal_id); + let proposal = self + .proposals + .remove(&proposal_id) + .expect("Failed to remove existing element"); + + let author_id: SignerId = proposal.author_id.rt().expect("Invalid signer"); + let mut num_proposals = *self.num_proposals_pk.get(&author_id).unwrap_or(&0); + + num_proposals = num_proposals.saturating_sub(1); + self.num_proposals_pk.insert(author_id, num_proposals); + proposal + } +} diff --git a/contracts/proxy-lib/tests/common/proxy_lib_helper.rs b/contracts/proxy-lib/tests/common/proxy_lib_helper.rs index 0d7d173ef..62f17e693 100644 --- a/contracts/proxy-lib/tests/common/proxy_lib_helper.rs +++ b/contracts/proxy-lib/tests/common/proxy_lib_helper.rs @@ -1,10 +1,12 @@ use calimero_context_config::repr::{Repr, ReprTransmute}; use calimero_context_config::types::{ContextId, Signed}; +use calimero_context_config::{ + Proposal, ProposalAction, ProposalApprovalWithSigner, ProposalId, ProxyMutateRequest, +}; use ed25519_dalek::{Signer, SigningKey}; use near_workspaces::network::Sandbox; use near_workspaces::result::{ExecutionFinalResult, ViewResultDetails}; use near_workspaces::{Account, Contract, Worker}; -use proxy_lib::{Proposal, ProposalAction, ProposalApprovalWithSigner, ProposalId}; use serde_json::json; use super::deploy_contract; @@ -40,28 +42,30 @@ impl ProxyContractHelper { .await } - pub fn create_proposal( + pub fn create_proposal_request( &self, author: &SigningKey, actions: &Vec, - ) -> eyre::Result> { - let proposal = Proposal { - author_id: author.verifying_key().rt().expect("Invalid signer"), - actions: actions.clone(), + ) -> eyre::Result> { + let request = ProxyMutateRequest::Propose { + proposal: Proposal { + author_id: author.verifying_key().rt().expect("Invalid signer"), + actions: actions.clone(), + }, }; - let signed = Signed::new(&proposal, |p| author.sign(p))?; + let signed = Signed::new(&request, |p| author.sign(p))?; Ok(signed) } - pub async fn create_and_approve_proposal( + pub async fn proxy_mutate( &self, caller: &Account, - proposal: &Signed, + request: &Signed, ) -> eyre::Result { let call = caller - .call(self.proxy_contract.id(), "create_and_approve_proposal") + .call(self.proxy_contract.id(), "mutate") .args_json(json!({ - "proposal": proposal + "request": request })) .max_gas() .transact() @@ -80,20 +84,18 @@ impl ProxyContractHelper { .to_bytes() .rt() .expect("Invalid signer"); - let args = Signed::new( - &{ - ProposalApprovalWithSigner { - signer_id, - proposal_id: proposal_id.clone(), - added_timestamp: 0, - } + + let request = ProxyMutateRequest::Approve { + approval: ProposalApprovalWithSigner { + signer_id, + proposal_id: proposal_id.clone(), + added_timestamp: 0, }, - |p| signer.sign(p), - ) - .expect("Failed to sign proposal"); + }; + let signed_request = Signed::new(&request, |p| signer.sign(p))?; let res = caller - .call(self.proxy_contract.id(), "approve") - .args_json(json!({"proposal": args})) + .call(self.proxy_contract.id(), "mutate") + .args_json(json!({"request": signed_request})) .max_gas() .transact() .await?; diff --git a/contracts/proxy-lib/tests/sandbox.rs b/contracts/proxy-lib/tests/sandbox.rs index f48f38741..929d6f8a4 100644 --- a/contracts/proxy-lib/tests/sandbox.rs +++ b/contracts/proxy-lib/tests/sandbox.rs @@ -1,15 +1,14 @@ use calimero_context_config::repr::ReprTransmute; +use calimero_context_config::{ProposalAction, ProposalWithApprovals}; use common::config_helper::ConfigContractHelper; use common::counter_helper::CounterContractHelper; use common::create_account_with_balance; use common::proxy_lib_helper::ProxyContractHelper; use ed25519_dalek::SigningKey; use eyre::Result; -use near_sdk::json_types::Base64VecU8; -use near_sdk::{Gas, NearToken}; +use near_sdk::NearToken; use near_workspaces::network::Sandbox; use near_workspaces::{Account, Worker}; -use proxy_lib::{Proposal, ProposalAction, ProposalWithApprovals}; mod common; @@ -57,10 +56,10 @@ async fn test_create_proposal() -> Result<()> { let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = setup_test(&worker).await?; - let proposal = proxy_helper.create_proposal(&alice_sk, &vec![])?; + let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; let res: Option = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result()? .json()?; @@ -85,11 +84,10 @@ async fn test_create_proposal_by_non_member() -> Result<()> { // Bob is not a member of the context let bob_sk: SigningKey = common::generate_keypair()?; - let proposal: calimero_context_config::types::Signed = - proxy_helper.create_proposal(&bob_sk, &vec![])?; + let proposal = proxy_helper.create_proposal_request(&bob_sk, &vec![])?; let res = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result(); @@ -114,16 +112,15 @@ async fn test_create_multiple_proposals() -> Result<()> { let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = setup_test(&worker).await?; - let proposal: calimero_context_config::types::Signed = - proxy_helper.create_proposal(&alice_sk, &vec![])?; + let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; let _res = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result(); let res: ProposalWithApprovals = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result()? .json()?; @@ -148,11 +145,10 @@ async fn test_create_proposal_and_approve_by_member() -> Result<()> { .await? .into_result()?; - let proposal: calimero_context_config::types::Signed = - proxy_helper.create_proposal(&alice_sk, &vec![])?; + let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; let res: ProposalWithApprovals = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result()? .json()?; @@ -179,11 +175,10 @@ async fn test_create_proposal_and_approve_by_non_member() -> Result<()> { // Bob is not a member of the context let bob_sk: SigningKey = common::generate_keypair()?; - let proposal: calimero_context_config::types::Signed = - proxy_helper.create_proposal(&alice_sk, &vec![])?; + let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; let res: ProposalWithApprovals = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result()? .json()?; @@ -234,10 +229,10 @@ async fn create_and_approve_proposal( actions: &Vec, members: Vec, ) -> Result<()> { - let proposal = proxy_helper.create_proposal(&members[0], actions)?; + let proposal = proxy_helper.create_proposal_request(&members[0], actions)?; let res: ProposalWithApprovals = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal) .await? .into_result()? .json()?; @@ -280,11 +275,11 @@ async fn test_execute_proposal() -> Result<()> { ); let actions = vec![ProposalAction::ExternalFunctionCall { - receiver_id: counter_helper.counter_contract.id().clone(), + receiver_id: counter_helper.counter_contract.id().to_string(), method_name: "increment".to_string(), - args: Base64VecU8::from(vec![]), - deposit: NearToken::from_near(0), - gas: Gas::from_gas(1_000_000_000_000), + args: serde_json::to_string(&Vec::::new())?, + deposit: 0, + gas: 1_000_000_000_000, }]; let _res = create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; @@ -394,8 +389,8 @@ async fn test_transfer() -> Result<()> { ); let actions = vec![ProposalAction::Transfer { - receiver_id: recipient.id().clone(), - amount: NearToken::from_near(5), + receiver_id: recipient.id().to_string(), + amount: 5, }]; let _res = create_and_approve_proposal(&proxy_helper, &relayer_account, &actions, members).await; @@ -429,11 +424,11 @@ async fn test_combined_proposals() -> Result<()> { let actions = vec![ ProposalAction::ExternalFunctionCall { - receiver_id: counter_helper.counter_contract.id().clone(), + receiver_id: counter_helper.counter_contract.id().to_string(), method_name: "increment".to_string(), - args: Base64VecU8::from(vec![]), - deposit: NearToken::from_near(0), - gas: Gas::from_gas(1_000_000_000_000), + args: serde_json::to_string(&Vec::::new())?, + deposit: 0, + gas: 1_000_000_000_000, }, ProposalAction::SetActiveProposalsLimit { active_proposals_limit: 5, @@ -477,11 +472,11 @@ async fn test_combined_proposal_actions_with_promise_failure() -> Result<()> { let actions = vec![ ProposalAction::ExternalFunctionCall { - receiver_id: counter_helper.counter_contract.id().clone(), + receiver_id: counter_helper.counter_contract.id().to_string(), method_name: "non_existent_method".to_string(), // This method does not exist - args: Base64VecU8::from(vec![]), - deposit: NearToken::from_near(0), - gas: Gas::from_gas(1_000_000_000_000), + args: serde_json::to_string(&Vec::::new())?, + deposit: 0, + gas: 1_000_000_000_000, }, ProposalAction::SetActiveProposalsLimit { active_proposals_limit: 5, @@ -512,23 +507,23 @@ async fn test_view_proposals() -> Result<()> { let proposal1_actions = vec![ProposalAction::SetActiveProposalsLimit { active_proposals_limit: 5, }]; - let proposal1 = proxy_helper.create_proposal(&alice_sk, &proposal1_actions)?; + let proposal1 = proxy_helper.create_proposal_request(&alice_sk, &proposal1_actions)?; let proposal2_actions = vec![ProposalAction::SetNumApprovals { num_approvals: 2 }]; - let proposal2 = proxy_helper.create_proposal(&alice_sk, &proposal2_actions)?; + let proposal2 = proxy_helper.create_proposal_request(&alice_sk, &proposal2_actions)?; let proposal3_actions = vec![ProposalAction::SetContextValue { key: b"example_key".to_vec().into_boxed_slice(), value: b"example_value".to_vec().into_boxed_slice(), }]; - let proposal3 = proxy_helper.create_proposal(&alice_sk, &proposal3_actions)?; + let proposal3 = proxy_helper.create_proposal_request(&alice_sk, &proposal3_actions)?; let _ = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal1) + .proxy_mutate(&relayer_account, &proposal1) .await?; let _ = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal2) + .proxy_mutate(&relayer_account, &proposal2) .await?; let _ = proxy_helper - .create_and_approve_proposal(&relayer_account, &proposal3) + .proxy_mutate(&relayer_account, &proposal3) .await?; let proposals = proxy_helper.view_proposals(&relayer_account, 0, 3).await?; diff --git a/crates/context/config/src/lib.rs b/crates/context/config/src/lib.rs index c8508eb07..4f69816d4 100644 --- a/crates/context/config/src/lib.rs +++ b/crates/context/config/src/lib.rs @@ -3,6 +3,7 @@ use std::borrow::Cow; use std::time; +use borsh::{BorshDeserialize, BorshSerialize}; use serde::{Deserialize, Serialize}; #[cfg(feature = "client")] @@ -109,3 +110,75 @@ pub enum SystemRequest { #[serde(rename_all = "camelCase")] SetValidityThreshold { threshold_ms: Timestamp }, } + +/// Proxy contract +/// TODO: move these to a separate cratexs +pub type ProposalId = u32; +pub type Gas = u64; +pub type NativeToken = u128; + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, BorshDeserialize, BorshSerialize)] +#[serde(tag = "scope", content = "params")] +#[serde(deny_unknown_fields)] +#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] +pub enum ProposalAction { + ExternalFunctionCall { + receiver_id: String, + method_name: String, + args: String, + deposit: NativeToken, + gas: Gas, + }, + Transfer { + receiver_id: String, + amount: NativeToken, + }, + SetNumApprovals { + num_approvals: u32, + }, + SetActiveProposalsLimit { + active_proposals_limit: u32, + }, + SetContextValue { + key: Box<[u8]>, + value: Box<[u8]>, + }, +} + +// The proposal the user makes specifying the receiving account and actions they want to execute (1 tx) +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, BorshDeserialize, BorshSerialize)] +#[serde(deny_unknown_fields)] +#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] +pub struct Proposal { + pub author_id: Repr, + pub actions: Vec, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Copy)] +#[serde(deny_unknown_fields)] +pub struct ProposalApprovalWithSigner { + pub proposal_id: ProposalId, + pub signer_id: Repr, + pub added_timestamp: u64, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(tag = "scope", content = "params")] +#[serde(deny_unknown_fields)] +#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] +pub enum ProxyMutateRequest { + Propose { + proposal: Proposal, + }, + Approve { + approval: ProposalApprovalWithSigner, + }, +} + +#[derive(PartialEq, Serialize, Deserialize, Copy, Clone, Debug)] +#[serde(deny_unknown_fields)] +#[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] +pub struct ProposalWithApprovals { + pub proposal_id: ProposalId, + pub num_approvals: usize, +} From 2a3aa2a08ca3feebd6cad08298609115d26af6ed Mon Sep 17 00:00:00 2001 From: Xabi Losada Date: Mon, 4 Nov 2024 19:51:37 +0100 Subject: [PATCH 59/75] feat: proxy client impl (#929) --- contracts/proxy-lib/src/lib.rs | 10 +- contracts/proxy-lib/src/mutate.rs | 23 +-- .../tests/common/proxy_lib_helper.rs | 17 +- contracts/proxy-lib/tests/sandbox.rs | 153 ++++++++++++++---- crates/context/config/src/client/env.rs | 2 +- crates/context/config/src/client/env/proxy.rs | 12 +- .../config/src/client/env/proxy/mutate.rs | 78 ++++++++- .../src/client/env/proxy/mutate/methods.rs | 41 +++++ .../src/client/env/proxy/mutate/propose.rs | 73 --------- .../config/src/client/env/proxy/query.rs | 22 ++- .../src/client/env/proxy/query/proposal.rs | 42 +++++ .../src/client/env/proxy/query/proposals.rs | 42 +++++ crates/context/config/src/lib.rs | 27 +++- 13 files changed, 402 insertions(+), 140 deletions(-) create mode 100644 crates/context/config/src/client/env/proxy/mutate/methods.rs delete mode 100644 crates/context/config/src/client/env/proxy/mutate/propose.rs create mode 100644 crates/context/config/src/client/env/proxy/query/proposal.rs create mode 100644 crates/context/config/src/client/env/proxy/query/proposals.rs diff --git a/contracts/proxy-lib/src/lib.rs b/contracts/proxy-lib/src/lib.rs index 4fdb0e578..f85caff95 100644 --- a/contracts/proxy-lib/src/lib.rs +++ b/contracts/proxy-lib/src/lib.rs @@ -28,7 +28,6 @@ pub struct ProxyContract { pub context_id: ContextId, pub context_config_account_id: AccountId, pub num_approvals: u32, - pub proposal_nonce: ProposalId, pub proposals: IterableMap, pub approvals: IterableMap>, pub num_proposals_pk: IterableMap, @@ -51,7 +50,6 @@ impl ProxyContract { Self { context_id: context_id.rt().expect("Invalid context id"), context_config_account_id, - proposal_nonce: 0, proposals: IterableMap::new(b"r".to_vec()), approvals: IterableMap::new(b"c".to_vec()), num_proposals_pk: IterableMap::new(b"k".to_vec()), @@ -61,17 +59,21 @@ impl ProxyContract { } } - pub fn proposals(&self, offset: usize, length: usize) -> Vec<(&u32, &Proposal)> { + pub fn proposals(&self, offset: usize, length: usize) -> Vec<&Proposal> { let effective_len = (self.proposals.len() as usize) .saturating_sub(offset) .min(length); let mut proposals = Vec::with_capacity(effective_len); for proposal in self.proposals.iter().skip(offset).take(length) { - proposals.push(proposal); + proposals.push(proposal.1); } proposals } + pub fn proposal(&self, proposal_id: &ProposalId) -> Option { + self.proposals.get(proposal_id).cloned() + } + pub fn get_confirmations_count( &self, proposal_id: ProposalId, diff --git a/contracts/proxy-lib/src/mutate.rs b/contracts/proxy-lib/src/mutate.rs index 761edfcda..ae630dcaa 100644 --- a/contracts/proxy-lib/src/mutate.rs +++ b/contracts/proxy-lib/src/mutate.rs @@ -7,7 +7,8 @@ use calimero_context_config::{ ProposalAction, ProposalId, ProposalWithApprovals, ProxyMutateRequest, }; use near_sdk::{ - env, near, AccountId, Gas, NearToken, Promise, PromiseError, PromiseOrValue, PromiseResult, + env, near, require, AccountId, Gas, NearToken, Promise, PromiseError, PromiseOrValue, + PromiseResult, }; use super::{Proposal, ProxyContract, ProxyContractExt, Signed}; @@ -60,18 +61,13 @@ impl ProxyContract { self.num_proposals_pk .insert(*proposal.author_id, num_proposals); - let proposal_id = self.proposal_nonce; - - self.proposals.insert(proposal_id, proposal.clone()); - self.approvals.insert(proposal_id, HashSet::new()); + self.proposals.insert(proposal.id, proposal.clone()); + self.approvals.insert(proposal.id, HashSet::new()); self.internal_confirm( - proposal_id, + proposal.id, proposal.author_id.rt().expect("Invalid signer"), ); - - self.proposal_nonce += 1; - - self.build_proposal_response(proposal_id) + self.build_proposal_response(proposal.id) } #[private] @@ -120,6 +116,7 @@ impl ProxyContract { if promise_actions.is_empty() { self.finalize_execution(Proposal { + id: proposal.id, author_id: proposal.author_id, actions: non_promise_actions, }); @@ -166,6 +163,7 @@ impl ProxyContract { match chained_promise { Some(promise) => PromiseOrValue::Promise(promise.then( Self::ext(env::current_account_id()).finalize_execution(Proposal { + id: proposal.id, author_id: proposal.author_id, actions: non_promise_actions, }), @@ -203,8 +201,11 @@ impl ProxyContract { impl ProxyContract { fn propose(&self, proposal: Proposal) -> Promise { + require!( + !self.proposals.contains_key(&proposal.id), + "Proposal already exists" + ); let author_id = proposal.author_id; - let num_proposals = self.num_proposals_pk.get(&author_id).unwrap_or(&0) + 1; assert!( num_proposals <= self.active_proposals_limit, diff --git a/contracts/proxy-lib/tests/common/proxy_lib_helper.rs b/contracts/proxy-lib/tests/common/proxy_lib_helper.rs index 62f17e693..f58486900 100644 --- a/contracts/proxy-lib/tests/common/proxy_lib_helper.rs +++ b/contracts/proxy-lib/tests/common/proxy_lib_helper.rs @@ -44,11 +44,13 @@ impl ProxyContractHelper { pub fn create_proposal_request( &self, + id: &ProposalId, author: &SigningKey, actions: &Vec, ) -> eyre::Result> { let request = ProxyMutateRequest::Propose { proposal: Proposal { + id: id.clone(), author_id: author.verifying_key().rt().expect("Invalid signer"), actions: actions.clone(), }, @@ -148,7 +150,7 @@ impl ProxyContractHelper { caller: &Account, offset: usize, length: usize, - ) -> eyre::Result> { + ) -> eyre::Result> { let res = caller .view(self.proxy_contract.id(), "proposals") .args_json(json!({ "offset": offset, "length": length })) @@ -156,4 +158,17 @@ impl ProxyContractHelper { .json()?; Ok(res) } + + pub async fn view_proposal( + &self, + caller: &Account, + id: &ProposalId, + ) -> eyre::Result> { + let res = caller + .view(self.proxy_contract.id(), "proposal") + .args_json(json!({ "proposal_id": id })) + .await? + .json()?; + Ok(res) + } } diff --git a/contracts/proxy-lib/tests/sandbox.rs b/contracts/proxy-lib/tests/sandbox.rs index 929d6f8a4..5722241fa 100644 --- a/contracts/proxy-lib/tests/sandbox.rs +++ b/contracts/proxy-lib/tests/sandbox.rs @@ -1,5 +1,5 @@ use calimero_context_config::repr::ReprTransmute; -use calimero_context_config::{ProposalAction, ProposalWithApprovals}; +use calimero_context_config::{Proposal, ProposalAction, ProposalWithApprovals}; use common::config_helper::ConfigContractHelper; use common::counter_helper::CounterContractHelper; use common::create_account_with_balance; @@ -9,6 +9,7 @@ use eyre::Result; use near_sdk::NearToken; use near_workspaces::network::Sandbox; use near_workspaces::{Account, Worker}; +use rand::Rng; mod common; @@ -56,7 +57,8 @@ async fn test_create_proposal() -> Result<()> { let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = setup_test(&worker).await?; - let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &alice_sk, &vec![])?; let res: Option = proxy_helper .proxy_mutate(&relayer_account, &proposal) @@ -66,7 +68,10 @@ async fn test_create_proposal() -> Result<()> { match res { Some(proposal) => { - assert_eq!(proposal.proposal_id, 0, "Expected proposal_id to be 0"); + assert_eq!( + proposal.proposal_id, proposal_id, + "Expected proposal_id to be 0" + ); assert_eq!(proposal.num_approvals, 1, "Expected 1 approval"); } None => panic!("Expected to create a proposal, but got None"), @@ -75,6 +80,62 @@ async fn test_create_proposal() -> Result<()> { Ok(()) } +#[tokio::test] +async fn test_view_proposal() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = + setup_test(&worker).await?; + + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &alice_sk, &vec![])?; + + let _res = proxy_helper + .proxy_mutate(&relayer_account, &proposal) + .await? + .into_result()?; + + let view_proposal: Option = proxy_helper + .view_proposal(&relayer_account, &proposal_id) + .await?; + assert!(view_proposal.is_some()); + + let result_proposal = view_proposal.unwrap(); + assert_eq!(result_proposal.id, proposal_id); + assert_eq!(result_proposal.actions, vec![]); + assert_eq!(result_proposal.author_id, alice_sk.verifying_key().rt()?); + + let non_existent_proposal_id: u32 = 2; + let view_proposal: Option = proxy_helper + .view_proposal(&relayer_account, &non_existent_proposal_id) + .await?; + assert!(view_proposal.is_none()); + Ok(()) +} + +#[tokio::test] +async fn test_create_proposal_with_existing_id() -> Result<()> { + let worker = near_workspaces::sandbox().await?; + let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = + setup_test(&worker).await?; + + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &alice_sk, &vec![])?; + + let _res = proxy_helper + .proxy_mutate(&relayer_account, &proposal) + .await? + .into_result(); + + let res = proxy_helper + .proxy_mutate(&relayer_account, &proposal) + .await? + .into_result(); + + let error = res.expect_err("Expected an error from the contract"); + assert!(error.to_string().contains("Proposal already exists")); + Ok(()) +} + #[tokio::test] async fn test_create_proposal_by_non_member() -> Result<()> { let worker = near_workspaces::sandbox().await?; @@ -84,7 +145,8 @@ async fn test_create_proposal_by_non_member() -> Result<()> { // Bob is not a member of the context let bob_sk: SigningKey = common::generate_keypair()?; - let proposal = proxy_helper.create_proposal_request(&bob_sk, &vec![])?; + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &bob_sk, &vec![])?; let res = proxy_helper .proxy_mutate(&relayer_account, &proposal) @@ -112,20 +174,28 @@ async fn test_create_multiple_proposals() -> Result<()> { let (_config_helper, proxy_helper, relayer_account, _context_sk, alice_sk) = setup_test(&worker).await?; - let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; + let mut rng = rand::thread_rng(); + let proposal_1_id = rng.gen(); + let proposal_2_id = rng.gen(); + let proposal_1 = proxy_helper.create_proposal_request(&proposal_1_id, &alice_sk, &vec![])?; + let proposal_2 = proxy_helper.create_proposal_request(&proposal_2_id, &alice_sk, &vec![])?; - let _res = proxy_helper - .proxy_mutate(&relayer_account, &proposal) + let res: ProposalWithApprovals = proxy_helper + .proxy_mutate(&relayer_account, &proposal_1) .await? - .into_result(); + .into_result()? + .json()?; + + assert_eq!(res.proposal_id, proposal_1_id); + assert_eq!(res.num_approvals, 1); let res: ProposalWithApprovals = proxy_helper - .proxy_mutate(&relayer_account, &proposal) + .proxy_mutate(&relayer_account, &proposal_2) .await? .into_result()? .json()?; - assert_eq!(res.proposal_id, 1); + assert_eq!(res.proposal_id, proposal_2_id); assert_eq!(res.num_approvals, 1); Ok(()) @@ -145,7 +215,8 @@ async fn test_create_proposal_and_approve_by_member() -> Result<()> { .await? .into_result()?; - let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &alice_sk, &vec![])?; let res: ProposalWithApprovals = proxy_helper .proxy_mutate(&relayer_account, &proposal) @@ -159,7 +230,7 @@ async fn test_create_proposal_and_approve_by_member() -> Result<()> { .into_result()? .json()?; - assert_eq!(res2.proposal_id, 0); + assert_eq!(res2.proposal_id, proposal_id); assert_eq!(res2.num_approvals, 2); Ok(()) @@ -175,7 +246,8 @@ async fn test_create_proposal_and_approve_by_non_member() -> Result<()> { // Bob is not a member of the context let bob_sk: SigningKey = common::generate_keypair()?; - let proposal = proxy_helper.create_proposal_request(&alice_sk, &vec![])?; + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &alice_sk, &vec![])?; let res: ProposalWithApprovals = proxy_helper .proxy_mutate(&relayer_account, &proposal) @@ -229,7 +301,8 @@ async fn create_and_approve_proposal( actions: &Vec, members: Vec, ) -> Result<()> { - let proposal = proxy_helper.create_proposal_request(&members[0], actions)?; + let proposal_id = rand::thread_rng().gen(); + let proposal = proxy_helper.create_proposal_request(&proposal_id, &members[0], actions)?; let res: ProposalWithApprovals = proxy_helper .proxy_mutate(&relayer_account, &proposal) @@ -238,6 +311,7 @@ async fn create_and_approve_proposal( .json()?; assert_eq!(res.num_approvals, 1); + assert_eq!(res.proposal_id, proposal_id); let res: ProposalWithApprovals = proxy_helper .approve_proposal(&relayer_account, &members[1], &res.proposal_id) @@ -507,14 +581,20 @@ async fn test_view_proposals() -> Result<()> { let proposal1_actions = vec![ProposalAction::SetActiveProposalsLimit { active_proposals_limit: 5, }]; - let proposal1 = proxy_helper.create_proposal_request(&alice_sk, &proposal1_actions)?; + let proposal1_id = rand::thread_rng().gen(); + let proposal1 = + proxy_helper.create_proposal_request(&proposal1_id, &alice_sk, &proposal1_actions)?; let proposal2_actions = vec![ProposalAction::SetNumApprovals { num_approvals: 2 }]; - let proposal2 = proxy_helper.create_proposal_request(&alice_sk, &proposal2_actions)?; + let proposal2_id = rand::thread_rng().gen(); + let proposal2 = + proxy_helper.create_proposal_request(&proposal2_id, &alice_sk, &proposal2_actions)?; let proposal3_actions = vec![ProposalAction::SetContextValue { key: b"example_key".to_vec().into_boxed_slice(), value: b"example_value".to_vec().into_boxed_slice(), }]; - let proposal3 = proxy_helper.create_proposal_request(&alice_sk, &proposal3_actions)?; + let proposal3_id = rand::thread_rng().gen(); + let proposal3 = + proxy_helper.create_proposal_request(&proposal3_id, &alice_sk, &proposal3_actions)?; let _ = proxy_helper .proxy_mutate(&relayer_account, &proposal1) @@ -530,20 +610,29 @@ async fn test_view_proposals() -> Result<()> { assert_eq!(proposals.len(), 3, "Expected to retrieve 3 proposals"); - assert_eq!(proposals[0].0, 0, "Expected first proposal to have id 0"); - assert_eq!(proposals[1].0, 1, "Expected second proposal to have id 1"); - assert_eq!(proposals[2].0, 2, "Expected third proposal to have id 2"); + assert_eq!( + proposals[0].id, proposal1_id, + "Expected first proposal to have proposal_id 1" + ); + assert_eq!( + proposals[1].id, proposal2_id, + "Expected second proposal to have proposal_id 2" + ); + assert_eq!( + proposals[2].id, proposal3_id, + "Expected third proposal to have proposal_id 3" + ); assert_eq!( - &proposals[0].1.actions[0], &proposal1_actions[0], + &proposals[0].actions[0], &proposal1_actions[0], "First proposal actions should match proposal 1" ); assert_eq!( - &proposals[1].1.actions[0], &proposal2_actions[0], + &proposals[1].actions[0], &proposal2_actions[0], "Second proposal actions should match proposal 2" ); assert_eq!( - &proposals[2].1.actions[0], &proposal3_actions[0], + &proposals[2].actions[0], &proposal3_actions[0], "Third proposal actions should match proposal 3" ); @@ -557,20 +646,20 @@ async fn test_view_proposals() -> Result<()> { ); assert_eq!( - proposals[0].0, 1, - "Expected the first returned proposal to have id 1" + proposals[0].id, proposal2_id, + "Expected the first returned proposal to have proposal_id 2" ); assert_eq!( - proposals[1].0, 2, - "Expected the second returned proposal to have id 2" + proposals[1].id, proposal3_id, + "Expected the second returned proposal to have proposal_id 3" ); assert_eq!( - &proposals[0].1.actions[0], &proposal2_actions[0], + &proposals[0].actions[0], &proposal2_actions[0], "First proposal actions should match proposal 2" ); assert_eq!( - &proposals[1].1.actions[0], &proposal3_actions[0], + &proposals[1].actions[0], &proposal3_actions[0], "Second proposal actions should match proposal 3" ); @@ -583,12 +672,12 @@ async fn test_view_proposals() -> Result<()> { "Expected to retrieve 1 proposal starting from offset 3" ); assert_eq!( - single_proposal[0].0, 2, - "Expected the proposal to have id 2" + single_proposal[0].id, proposal3_id, + "Expected the proposal to have proposal id 3" ); assert_eq!( - &proposals[1].1.actions[0], &proposal3_actions[0], + &proposals[1].actions[0], &proposal3_actions[0], "first proposal actions should match proposal 3" ); diff --git a/crates/context/config/src/client/env.rs b/crates/context/config/src/client/env.rs index 9c61da3d3..2b1734197 100644 --- a/crates/context/config/src/client/env.rs +++ b/crates/context/config/src/client/env.rs @@ -1,7 +1,7 @@ use super::protocol::Protocol; pub mod config; -// pub mod proxy; +pub mod proxy; pub trait Method { type Returns; diff --git a/crates/context/config/src/client/env/proxy.rs b/crates/context/config/src/client/env/proxy.rs index 684c6f583..7f4d5346c 100644 --- a/crates/context/config/src/client/env/proxy.rs +++ b/crates/context/config/src/client/env/proxy.rs @@ -7,17 +7,17 @@ use mutate::ContextProxyMutate; use query::ContextProxyQuery; #[derive(Copy, Clone, Debug)] -pub enum ContextProxy {} +pub enum ContextConfig {} -impl<'a, T: 'a> Environment<'a, T> for ContextProxy { +impl<'a, T: 'a> Environment<'a, T> for ContextConfig { type Query = ContextProxyQuery<'a, T>; type Mutate = ContextProxyMutate<'a, T>; - fn query(_client: CallClient<'a, T>) -> Self::Query { - todo!() + fn query(client: CallClient<'a, T>) -> Self::Query { + ContextProxyQuery { client } } - fn mutate(_client: CallClient<'a, T>) -> Self::Mutate { - todo!() + fn mutate(client: CallClient<'a, T>) -> Self::Mutate { + ContextProxyMutate { client } } } diff --git a/crates/context/config/src/client/env/proxy/mutate.rs b/crates/context/config/src/client/env/proxy/mutate.rs index 3d86f6a4d..b07059020 100644 --- a/crates/context/config/src/client/env/proxy/mutate.rs +++ b/crates/context/config/src/client/env/proxy/mutate.rs @@ -1,8 +1,82 @@ -use crate::client::CallClient; +use ed25519_dalek::{Signer, SigningKey}; -mod propose; +use crate::client::env::{utils, Method}; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::client::transport::Transport; +use crate::client::{CallClient, ClientError, Operation}; +use crate::types::Signed; +use crate::{ProposalWithApprovals, ProxyMutateRequest}; + +pub mod methods; #[derive(Debug)] pub struct ContextProxyMutate<'a, T> { + pub client: CallClient<'a, T>, +} + +#[derive(Debug)] +pub struct ContextProxyMutateRequest<'a, T> { client: CallClient<'a, T>, + raw_request: ProxyMutateRequest, +} + +#[derive(Debug)] +struct Mutate { + pub(crate) signing_key: [u8; 32], + pub(crate) raw_request: ProxyMutateRequest, +} + +impl Method for Mutate { + const METHOD: &'static str = "mutate"; + + type Returns = Option; + + fn encode(self) -> eyre::Result> { + let signer_sk = SigningKey::from_bytes(&self.signing_key); + + let signed = Signed::new(&self.raw_request, |b| signer_sk.sign(b))?; + + let encoded = serde_json::to_vec(&signed)?; + + Ok(encoded) + } + + fn decode(response: Vec) -> eyre::Result { + serde_json::from_slice(&response).map_err(Into::into) + } +} + +impl Method for Mutate { + type Returns = Option; + + const METHOD: &'static str = "mutate"; + + fn encode(self) -> eyre::Result> { + // sign the params, encode it and return + // since you will have a `Vec` here, you can + // `Vec::with_capacity(32 * calldata.len())` and then + // extend the `Vec` with each `Felt::to_bytes_le()` + // when this `Vec` makes it to `StarknetTransport`, + // reconstruct the `Vec` from it + todo!() + } + + fn decode(_response: Vec) -> eyre::Result { + todo!() + } +} + +impl<'a, T: Transport> ContextProxyMutateRequest<'a, T> { + pub async fn send( + self, + signing_key: [u8; 32], + ) -> Result, ClientError> { + let request = Mutate { + signing_key, + raw_request: self.raw_request, + }; + + utils::send_near_or_starknet(&self.client, Operation::Write(request)).await + } } diff --git a/crates/context/config/src/client/env/proxy/mutate/methods.rs b/crates/context/config/src/client/env/proxy/mutate/methods.rs new file mode 100644 index 000000000..850cef4a5 --- /dev/null +++ b/crates/context/config/src/client/env/proxy/mutate/methods.rs @@ -0,0 +1,41 @@ +use super::{ContextProxyMutate, ContextProxyMutateRequest}; +use crate::repr::Repr; +use crate::types::SignerId; +use crate::{Proposal, ProposalAction, ProposalApprovalWithSigner, ProposalId, ProxyMutateRequest}; + +impl<'a, T> ContextProxyMutate<'a, T> { + pub fn propose( + self, + proposal_id: ProposalId, + author_id: SignerId, + actions: Vec, + ) -> ContextProxyMutateRequest<'a, T> { + ContextProxyMutateRequest { + client: self.client, + raw_request: ProxyMutateRequest::Propose { + proposal: Proposal { + id: proposal_id, + author_id: Repr::new(author_id), + actions, + }, + }, + } + } + + pub fn approve( + self, + signer_id: Repr, + proposal_id: ProposalId, + ) -> ContextProxyMutateRequest<'a, T> { + ContextProxyMutateRequest { + client: self.client, + raw_request: ProxyMutateRequest::Approve { + approval: ProposalApprovalWithSigner { + proposal_id, + signer_id, + added_timestamp: 0, // TODO: add timestamp + }, + }, + } + } +} diff --git a/crates/context/config/src/client/env/proxy/mutate/propose.rs b/crates/context/config/src/client/env/proxy/mutate/propose.rs deleted file mode 100644 index 794e24d38..000000000 --- a/crates/context/config/src/client/env/proxy/mutate/propose.rs +++ /dev/null @@ -1,73 +0,0 @@ -use super::ContextProxyMutate; -use crate::client::env::{utils, Method}; -use crate::client::protocol::near::Near; -use crate::client::protocol::starknet::Starknet; -use crate::client::transport::Transport; -use crate::client::{CallClient, Error, Operation}; - -// todo! this should be replaced with primitives lib -#[derive(Debug)] -pub enum Proposal { - Transfer { recipient: String, amount: u64 }, - // __ -} - -impl<'a, T> ContextProxyMutate<'a, T> { - pub fn propose(self, proposal: Proposal) -> ContextProxyProposeRequest<'a, T> { - ContextProxyProposeRequest { - client: self.client, - proposal, - } - } -} - -#[derive(Debug)] -pub struct ContextProxyProposeRequest<'a, T> { - client: CallClient<'a, T>, - proposal: Proposal, -} - -struct Propose { - signing_key: [u8; 32], - proposal: Proposal, -} - -impl Method for Propose { - const METHOD: &'static str = "propose"; - - type Returns = (); - - fn encode(self) -> eyre::Result> { - // sign the params, encode it and return - todo!() - } - - fn decode(_response: Vec) -> eyre::Result { - todo!() - } -} - -impl Method for Propose { - type Returns = (); - - const METHOD: &'static str = "propose"; - - fn encode(self) -> eyre::Result> { - todo!() - } - - fn decode(_response: Vec) -> eyre::Result { - todo!() - } -} - -impl<'a, T: Transport> ContextProxyProposeRequest<'a, T> { - pub async fn send(self, signing_key: [u8; 32]) -> Result<(), Error> { - let request = Propose { - signing_key, - proposal: self.proposal, - }; - - utils::send_near_or_starknet(&self.client, Operation::Write(request)).await - } -} diff --git a/crates/context/config/src/client/env/proxy/query.rs b/crates/context/config/src/client/env/proxy/query.rs index 090c064be..847a3da48 100644 --- a/crates/context/config/src/client/env/proxy/query.rs +++ b/crates/context/config/src/client/env/proxy/query.rs @@ -1,19 +1,25 @@ +use proposals::ProposalRequest; + +use crate::client::env::utils; use crate::client::transport::Transport; -use crate::client::{CallClient, Error}; +use crate::client::{CallClient, ClientError, Operation}; +use crate::{Proposal, ProposalId}; + +mod proposal; +mod proposals; #[derive(Debug)] pub struct ContextProxyQuery<'a, T> { - client: CallClient<'a, T>, + pub client: CallClient<'a, T>, } -type ProposalId = [u8; 32]; - impl<'a, T: Transport> ContextProxyQuery<'a, T> { pub async fn proposals( &self, - _offset: usize, - _length: usize, - ) -> Result, Error> { - todo!() + offset: usize, + length: usize, + ) -> Result, ClientError> { + let params = ProposalRequest { offset, length }; + utils::send_near_or_starknet(&self.client, Operation::Read(params)).await } } diff --git a/crates/context/config/src/client/env/proxy/query/proposal.rs b/crates/context/config/src/client/env/proxy/query/proposal.rs new file mode 100644 index 000000000..da601b29b --- /dev/null +++ b/crates/context/config/src/client/env/proxy/query/proposal.rs @@ -0,0 +1,42 @@ +use serde::Serialize; + +use super::ProposalId; +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::Proposal; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct ProposalRequest { + pub(super) offset: usize, + pub(super) length: usize, +} + +impl Method for ProposalRequest { + const METHOD: &'static str = "proposal"; + + type Returns = Option; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + let proposal: Option = serde_json::from_slice(&response)?; + Ok(proposal) + } +} + +impl Method for ProposalRequest { + const METHOD: &'static str = "proposals"; + + type Returns = Vec<(ProposalId, Proposal)>; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/client/env/proxy/query/proposals.rs b/crates/context/config/src/client/env/proxy/query/proposals.rs new file mode 100644 index 000000000..a82affd02 --- /dev/null +++ b/crates/context/config/src/client/env/proxy/query/proposals.rs @@ -0,0 +1,42 @@ +use serde::Serialize; + +use super::ProposalId; +use crate::client::env::Method; +use crate::client::protocol::near::Near; +use crate::client::protocol::starknet::Starknet; +use crate::Proposal; + +#[derive(Copy, Clone, Debug, Serialize)] +pub(super) struct ProposalRequest { + pub(super) offset: usize, + pub(super) length: usize, +} + +impl Method for ProposalRequest { + const METHOD: &'static str = "proposals"; + + type Returns = Vec<(ProposalId, Proposal)>; + + fn encode(self) -> eyre::Result> { + serde_json::to_vec(&self).map_err(Into::into) + } + + fn decode(response: Vec) -> eyre::Result { + let proposals: Vec<(ProposalId, Proposal)> = serde_json::from_slice(&response)?; + Ok(proposals) + } +} + +impl Method for ProposalRequest { + const METHOD: &'static str = "proposals"; + + type Returns = Vec<(ProposalId, Proposal)>; + + fn encode(self) -> eyre::Result> { + todo!() + } + + fn decode(response: Vec) -> eyre::Result { + todo!() + } +} diff --git a/crates/context/config/src/lib.rs b/crates/context/config/src/lib.rs index 4f69816d4..5f024dcae 100644 --- a/crates/context/config/src/lib.rs +++ b/crates/context/config/src/lib.rs @@ -117,7 +117,18 @@ pub type ProposalId = u32; pub type Gas = u64; pub type NativeToken = u128; -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, BorshDeserialize, BorshSerialize)] +#[derive( + Debug, + Clone, + PartialEq, + Serialize, + Deserialize, + BorshDeserialize, + BorshSerialize, + Ord, + PartialOrd, + Eq, +)] #[serde(tag = "scope", content = "params")] #[serde(deny_unknown_fields)] #[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] @@ -146,10 +157,22 @@ pub enum ProposalAction { } // The proposal the user makes specifying the receiving account and actions they want to execute (1 tx) -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, BorshDeserialize, BorshSerialize)] +#[derive( + Debug, + Clone, + PartialEq, + Serialize, + Deserialize, + BorshDeserialize, + BorshSerialize, + Ord, + PartialOrd, + Eq, +)] #[serde(deny_unknown_fields)] #[expect(clippy::exhaustive_enums, reason = "Considered to be exhaustive")] pub struct Proposal { + pub id: ProposalId, pub author_id: Repr, pub actions: Vec, } From e76ce41ff34350906bc7d261d478d412fa87fc7b Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Tue, 5 Nov 2024 11:02:31 +0300 Subject: [PATCH 60/75] chore: cleanup (#936) --- crates/context/config/src/client/env/proxy.rs | 4 ++-- crates/node/src/lib.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/context/config/src/client/env/proxy.rs b/crates/context/config/src/client/env/proxy.rs index 7f4d5346c..6845903a0 100644 --- a/crates/context/config/src/client/env/proxy.rs +++ b/crates/context/config/src/client/env/proxy.rs @@ -7,9 +7,9 @@ use mutate::ContextProxyMutate; use query::ContextProxyQuery; #[derive(Copy, Clone, Debug)] -pub enum ContextConfig {} +pub enum ContextProxy {} -impl<'a, T: 'a> Environment<'a, T> for ContextConfig { +impl<'a, T: 'a> Environment<'a, T> for ContextProxy { type Query = ContextProxyQuery<'a, T>; type Mutate = ContextProxyMutate<'a, T>; diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index a1c9e51ad..310a2384c 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -313,7 +313,7 @@ impl Node { } } - todo!() + Ok(()) } async fn handle_state_delta( From f9a0e159344342993e82b386386a5ae276231e84 Mon Sep 17 00:00:00 2001 From: Miraculous Owonubi Date: Tue, 5 Nov 2024 11:40:23 +0300 Subject: [PATCH 61/75] fix: relayer errors should cause transport errors (#938) --- .../src/client/env/proxy/query/proposal.rs | 2 +- .../src/client/env/proxy/query/proposals.rs | 2 +- crates/context/config/src/client/relayer.rs | 26 ++++++++++++++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/crates/context/config/src/client/env/proxy/query/proposal.rs b/crates/context/config/src/client/env/proxy/query/proposal.rs index da601b29b..21be47f27 100644 --- a/crates/context/config/src/client/env/proxy/query/proposal.rs +++ b/crates/context/config/src/client/env/proxy/query/proposal.rs @@ -36,7 +36,7 @@ impl Method for ProposalRequest { todo!() } - fn decode(response: Vec) -> eyre::Result { + fn decode(_response: Vec) -> eyre::Result { todo!() } } diff --git a/crates/context/config/src/client/env/proxy/query/proposals.rs b/crates/context/config/src/client/env/proxy/query/proposals.rs index a82affd02..31cd8b025 100644 --- a/crates/context/config/src/client/env/proxy/query/proposals.rs +++ b/crates/context/config/src/client/env/proxy/query/proposals.rs @@ -36,7 +36,7 @@ impl Method for ProposalRequest { todo!() } - fn decode(response: Vec) -> eyre::Result { + fn decode(_response: Vec) -> eyre::Result { todo!() } } diff --git a/crates/context/config/src/client/relayer.rs b/crates/context/config/src/client/relayer.rs index 1a651c30c..605c05a37 100644 --- a/crates/context/config/src/client/relayer.rs +++ b/crates/context/config/src/client/relayer.rs @@ -1,6 +1,7 @@ use std::borrow::Cow; use serde::{Deserialize, Serialize}; +use thiserror::Error; use url::Url; use super::transport::{Operation, Transport, TransportRequest}; @@ -39,8 +40,22 @@ pub struct RelayRequest<'a> { pub payload: Vec, } +#[derive(Debug, Error)] +pub enum RelayerError { + #[error(transparent)] + Raw(#[from] reqwest::Error), + #[error( + "relayer response ({status}): {}", + body.is_empty().then_some("").unwrap_or(body) + )] + Response { + status: reqwest::StatusCode, + body: String, + }, +} + impl Transport for RelayerTransport { - type Error = reqwest::Error; + type Error = RelayerError; async fn send( &self, @@ -60,8 +75,13 @@ impl Transport for RelayerTransport { .send() .await?; - // todo! check response.status code + if !response.status().is_success() { + return Err(RelayerError::Response { + status: response.status(), + body: response.text().await?, + }); + } - response.bytes().await.map(Into::into) + response.bytes().await.map(Into::into).map_err(Into::into) } } From cd3a318176db561e4994695966996f9f9219405d Mon Sep 17 00:00:00 2001 From: Fran Domovic <93442516+frdomovic@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:39:13 +0100 Subject: [PATCH 62/75] fix(node-ui): expired client key (#939) --- .../build/assets/{main-CEAaf8Ev.js => main-Bzv535nm.js} | 6 +++--- node-ui/build/index.html | 2 +- node-ui/src/api/httpClient.ts | 3 +++ node-ui/src/pages/setup/index.tsx | 8 ++++++-- node-ui/src/utils/storage.ts | 6 ++++++ 5 files changed, 19 insertions(+), 6 deletions(-) rename node-ui/build/assets/{main-CEAaf8Ev.js => main-Bzv535nm.js} (98%) diff --git a/node-ui/build/assets/main-CEAaf8Ev.js b/node-ui/build/assets/main-Bzv535nm.js similarity index 98% rename from node-ui/build/assets/main-CEAaf8Ev.js rename to node-ui/build/assets/main-Bzv535nm.js index 4751ca677..b7df40e79 100644 --- a/node-ui/build/assets/main-CEAaf8Ev.js +++ b/node-ui/build/assets/main-Bzv535nm.js @@ -74,7 +74,7 @@ Error generating stack: `+nt.message+` `)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(a){return a instanceof this?a:new this(a)}static concat(a,...c){const d=new this(a);return c.forEach(tt=>d.set(tt)),d}static accessor(a){const d=(this[$internals]=this[$internals]={accessors:{}}).accessors,tt=this.prototype;function nt($a){const Ys=normalizeHeader($a);d[Ys]||(buildAccessors(tt,$a),d[Ys]=!0)}return utils$A.isArray(a)?a.forEach(nt):nt(a),this}};AxiosHeaders$1.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$A.reduceDescriptors(AxiosHeaders$1.prototype,({value:o},a)=>{let c=a[0].toUpperCase()+a.slice(1);return{get:()=>o,set(d){this[c]=d}}});utils$A.freezeMethods(AxiosHeaders$1);function transformData(o,a){const c=this||defaults$1,d=a||c,tt=AxiosHeaders$1.from(d.headers);let nt=d.data;return utils$A.forEach(o,function(Ys){nt=Ys.call(c,nt,tt.normalize(),a?a.status:void 0)}),tt.normalize(),nt}function isCancel$1(o){return!!(o&&o.__CANCEL__)}function CanceledError$1(o,a,c){AxiosError$1.call(this,o??"canceled",AxiosError$1.ERR_CANCELED,a,c),this.name="CanceledError"}utils$A.inherits(CanceledError$1,AxiosError$1,{__CANCEL__:!0});function settle(o,a,c){const d=c.config.validateStatus;!c.status||!d||d(c.status)?o(c):a(new AxiosError$1("Request failed with status code "+c.status,[AxiosError$1.ERR_BAD_REQUEST,AxiosError$1.ERR_BAD_RESPONSE][Math.floor(c.status/100)-4],c.config,c.request,c))}function parseProtocol(o){const a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(o);return a&&a[1]||""}function speedometer(o,a){o=o||10;const c=new Array(o),d=new Array(o);let tt=0,nt=0,$a;return a=a!==void 0?a:1e3,function(gu){const xu=Date.now(),$u=d[nt];$a||($a=xu),c[tt]=gu,d[tt]=xu;let Iu=nt,Xu=0;for(;Iu!==tt;)Xu+=c[Iu++],Iu=Iu%o;if(tt=(tt+1)%o,tt===nt&&(nt=(nt+1)%o),xu-$a{c=$u,tt=null,nt&&(clearTimeout(nt),nt=null),o.apply(null,xu)};return[(...xu)=>{const $u=Date.now(),Iu=$u-c;Iu>=d?$a(xu,$u):(tt=xu,nt||(nt=setTimeout(()=>{nt=null,$a(tt)},d-Iu)))},()=>tt&&$a(tt)]}const progressEventReducer=(o,a,c=3)=>{let d=0;const tt=speedometer(50,250);return throttle(nt=>{const $a=nt.loaded,Ys=nt.lengthComputable?nt.total:void 0,gu=$a-d,xu=tt(gu),$u=$a<=Ys;d=$a;const Iu={loaded:$a,total:Ys,progress:Ys?$a/Ys:void 0,bytes:gu,rate:xu||void 0,estimated:xu&&Ys&&$u?(Ys-$a)/xu:void 0,event:nt,lengthComputable:Ys!=null,[a?"download":"upload"]:!0};o(Iu)},c)},progressEventDecorator=(o,a)=>{const c=o!=null;return[d=>a[0]({lengthComputable:c,total:o,loaded:d}),a[1]]},asyncDecorator=o=>(...a)=>utils$A.asap(()=>o(...a)),isURLSameOrigin=platform$1.hasStandardBrowserEnv?function(){const a=/(msie|trident)/i.test(navigator.userAgent),c=document.createElement("a");let d;function tt(nt){let $a=nt;return a&&(c.setAttribute("href",$a),$a=c.href),c.setAttribute("href",$a),{href:c.href,protocol:c.protocol?c.protocol.replace(/:$/,""):"",host:c.host,search:c.search?c.search.replace(/^\?/,""):"",hash:c.hash?c.hash.replace(/^#/,""):"",hostname:c.hostname,port:c.port,pathname:c.pathname.charAt(0)==="/"?c.pathname:"/"+c.pathname}}return d=tt(window.location.href),function($a){const Ys=utils$A.isString($a)?tt($a):$a;return Ys.protocol===d.protocol&&Ys.host===d.host}}():function(){return function(){return!0}}(),cookies=platform$1.hasStandardBrowserEnv?{write(o,a,c,d,tt,nt){const $a=[o+"="+encodeURIComponent(a)];utils$A.isNumber(c)&&$a.push("expires="+new Date(c).toGMTString()),utils$A.isString(d)&&$a.push("path="+d),utils$A.isString(tt)&&$a.push("domain="+tt),nt===!0&&$a.push("secure"),document.cookie=$a.join("; ")},read(o){const a=document.cookie.match(new RegExp("(^|;\\s*)("+o+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(o){this.write(o,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(o){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o)}function combineURLs(o,a){return a?o.replace(/\/?\/$/,"")+"/"+a.replace(/^\/+/,""):o}function buildFullPath(o,a){return o&&!isAbsoluteURL(a)?combineURLs(o,a):a}const headersToObject=o=>o instanceof AxiosHeaders$1?{...o}:o;function mergeConfig$1(o,a){a=a||{};const c={};function d(xu,$u,Iu){return utils$A.isPlainObject(xu)&&utils$A.isPlainObject($u)?utils$A.merge.call({caseless:Iu},xu,$u):utils$A.isPlainObject($u)?utils$A.merge({},$u):utils$A.isArray($u)?$u.slice():$u}function tt(xu,$u,Iu){if(utils$A.isUndefined($u)){if(!utils$A.isUndefined(xu))return d(void 0,xu,Iu)}else return d(xu,$u,Iu)}function nt(xu,$u){if(!utils$A.isUndefined($u))return d(void 0,$u)}function $a(xu,$u){if(utils$A.isUndefined($u)){if(!utils$A.isUndefined(xu))return d(void 0,xu)}else return d(void 0,$u)}function Ys(xu,$u,Iu){if(Iu in a)return d(xu,$u);if(Iu in o)return d(void 0,xu)}const gu={url:nt,method:nt,data:nt,baseURL:$a,transformRequest:$a,transformResponse:$a,paramsSerializer:$a,timeout:$a,timeoutMessage:$a,withCredentials:$a,withXSRFToken:$a,adapter:$a,responseType:$a,xsrfCookieName:$a,xsrfHeaderName:$a,onUploadProgress:$a,onDownloadProgress:$a,decompress:$a,maxContentLength:$a,maxBodyLength:$a,beforeRedirect:$a,transport:$a,httpAgent:$a,httpsAgent:$a,cancelToken:$a,socketPath:$a,responseEncoding:$a,validateStatus:Ys,headers:(xu,$u)=>tt(headersToObject(xu),headersToObject($u),!0)};return utils$A.forEach(Object.keys(Object.assign({},o,a)),function($u){const Iu=gu[$u]||tt,Xu=Iu(o[$u],a[$u],$u);utils$A.isUndefined(Xu)&&Iu!==Ys||(c[$u]=Xu)}),c}const resolveConfig=o=>{const a=mergeConfig$1({},o);let{data:c,withXSRFToken:d,xsrfHeaderName:tt,xsrfCookieName:nt,headers:$a,auth:Ys}=a;a.headers=$a=AxiosHeaders$1.from($a),a.url=buildURL(buildFullPath(a.baseURL,a.url),o.params,o.paramsSerializer),Ys&&$a.set("Authorization","Basic "+btoa((Ys.username||"")+":"+(Ys.password?unescape(encodeURIComponent(Ys.password)):"")));let gu;if(utils$A.isFormData(c)){if(platform$1.hasStandardBrowserEnv||platform$1.hasStandardBrowserWebWorkerEnv)$a.setContentType(void 0);else if((gu=$a.getContentType())!==!1){const[xu,...$u]=gu?gu.split(";").map(Iu=>Iu.trim()).filter(Boolean):[];$a.setContentType([xu||"multipart/form-data",...$u].join("; "))}}if(platform$1.hasStandardBrowserEnv&&(d&&utils$A.isFunction(d)&&(d=d(a)),d||d!==!1&&isURLSameOrigin(a.url))){const xu=tt&&nt&&cookies.read(nt);xu&&$a.set(tt,xu)}return a},isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(o){return new Promise(function(c,d){const tt=resolveConfig(o);let nt=tt.data;const $a=AxiosHeaders$1.from(tt.headers).normalize();let{responseType:Ys,onUploadProgress:gu,onDownloadProgress:xu}=tt,$u,Iu,Xu,i0,p0;function w0(){i0&&i0(),p0&&p0(),tt.cancelToken&&tt.cancelToken.unsubscribe($u),tt.signal&&tt.signal.removeEventListener("abort",$u)}let A0=new XMLHttpRequest;A0.open(tt.method.toUpperCase(),tt.url,!0),A0.timeout=tt.timeout;function $0(){if(!A0)return;const L0=AxiosHeaders$1.from("getAllResponseHeaders"in A0&&A0.getAllResponseHeaders()),F0={data:!Ys||Ys==="text"||Ys==="json"?A0.responseText:A0.response,status:A0.status,statusText:A0.statusText,headers:L0,config:o,request:A0};settle(function(g1){c(g1),w0()},function(g1){d(g1),w0()},F0),A0=null}"onloadend"in A0?A0.onloadend=$0:A0.onreadystatechange=function(){!A0||A0.readyState!==4||A0.status===0&&!(A0.responseURL&&A0.responseURL.indexOf("file:")===0)||setTimeout($0)},A0.onabort=function(){A0&&(d(new AxiosError$1("Request aborted",AxiosError$1.ECONNABORTED,o,A0)),A0=null)},A0.onerror=function(){d(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,o,A0)),A0=null},A0.ontimeout=function(){let q0=tt.timeout?"timeout of "+tt.timeout+"ms exceeded":"timeout exceeded";const F0=tt.transitional||transitionalDefaults;tt.timeoutErrorMessage&&(q0=tt.timeoutErrorMessage),d(new AxiosError$1(q0,F0.clarifyTimeoutError?AxiosError$1.ETIMEDOUT:AxiosError$1.ECONNABORTED,o,A0)),A0=null},nt===void 0&&$a.setContentType(null),"setRequestHeader"in A0&&utils$A.forEach($a.toJSON(),function(q0,F0){A0.setRequestHeader(F0,q0)}),utils$A.isUndefined(tt.withCredentials)||(A0.withCredentials=!!tt.withCredentials),Ys&&Ys!=="json"&&(A0.responseType=tt.responseType),xu&&([Xu,p0]=progressEventReducer(xu,!0),A0.addEventListener("progress",Xu)),gu&&A0.upload&&([Iu,i0]=progressEventReducer(gu),A0.upload.addEventListener("progress",Iu),A0.upload.addEventListener("loadend",i0)),(tt.cancelToken||tt.signal)&&($u=L0=>{A0&&(d(!L0||L0.type?new CanceledError$1(null,o,A0):L0),A0.abort(),A0=null)},tt.cancelToken&&tt.cancelToken.subscribe($u),tt.signal&&(tt.signal.aborted?$u():tt.signal.addEventListener("abort",$u)));const O0=parseProtocol(tt.url);if(O0&&platform$1.protocols.indexOf(O0)===-1){d(new AxiosError$1("Unsupported protocol "+O0+":",AxiosError$1.ERR_BAD_REQUEST,o));return}A0.send(nt||null)})},composeSignals=(o,a)=>{let c=new AbortController,d;const tt=function(gu){if(!d){d=!0,$a();const xu=gu instanceof Error?gu:this.reason;c.abort(xu instanceof AxiosError$1?xu:new CanceledError$1(xu instanceof Error?xu.message:xu))}};let nt=a&&setTimeout(()=>{tt(new AxiosError$1(`timeout ${a} of ms exceeded`,AxiosError$1.ETIMEDOUT))},a);const $a=()=>{o&&(nt&&clearTimeout(nt),nt=null,o.forEach(gu=>{gu&&(gu.removeEventListener?gu.removeEventListener("abort",tt):gu.unsubscribe(tt))}),o=null)};o.forEach(gu=>gu&&gu.addEventListener&&gu.addEventListener("abort",tt));const{signal:Ys}=c;return Ys.unsubscribe=$a,[Ys,()=>{nt&&clearTimeout(nt),nt=null}]},streamChunk=function*(o,a){let c=o.byteLength;if(!a||c{const nt=readBytes(o,a,tt);let $a=0,Ys,gu=xu=>{Ys||(Ys=!0,d&&d(xu))};return new ReadableStream({async pull(xu){try{const{done:$u,value:Iu}=await nt.next();if($u){gu(),xu.close();return}let Xu=Iu.byteLength;if(c){let i0=$a+=Xu;c(i0)}xu.enqueue(new Uint8Array(Iu))}catch($u){throw gu($u),$u}},cancel(xu){return gu(xu),nt.return()}},{highWaterMark:2})},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(o=>a=>o.encode(a))(new TextEncoder):async o=>new Uint8Array(await new Response(o).arrayBuffer())),test$6=(o,...a)=>{try{return!!o(...a)}catch{return!1}},supportsRequestStream=isReadableStreamSupported&&test$6(()=>{let o=!1;const a=new Request(platform$1.origin,{body:new ReadableStream,method:"POST",get duplex(){return o=!0,"half"}}).headers.has("Content-Type");return o&&!a}),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&test$6(()=>utils$A.isReadableStream(new Response("").body)),resolvers={stream:supportsResponseStream&&(o=>o.body)};isFetchSupported&&(o=>{["text","arrayBuffer","blob","formData","stream"].forEach(a=>{!resolvers[a]&&(resolvers[a]=utils$A.isFunction(o[a])?c=>c[a]():(c,d)=>{throw new AxiosError$1(`Response type '${a}' is not supported`,AxiosError$1.ERR_NOT_SUPPORT,d)})})})(new Response);const getBodyLength=async o=>{if(o==null)return 0;if(utils$A.isBlob(o))return o.size;if(utils$A.isSpecCompliantForm(o))return(await new Request(o).arrayBuffer()).byteLength;if(utils$A.isArrayBufferView(o)||utils$A.isArrayBuffer(o))return o.byteLength;if(utils$A.isURLSearchParams(o)&&(o=o+""),utils$A.isString(o))return(await encodeText(o)).byteLength},resolveBodyLength=async(o,a)=>{const c=utils$A.toFiniteNumber(o.getContentLength());return c??getBodyLength(a)},fetchAdapter=isFetchSupported&&(async o=>{let{url:a,method:c,data:d,signal:tt,cancelToken:nt,timeout:$a,onDownloadProgress:Ys,onUploadProgress:gu,responseType:xu,headers:$u,withCredentials:Iu="same-origin",fetchOptions:Xu}=resolveConfig(o);xu=xu?(xu+"").toLowerCase():"text";let[i0,p0]=tt||nt||$a?composeSignals([tt,nt],$a):[],w0,A0;const $0=()=>{!w0&&setTimeout(()=>{i0&&i0.unsubscribe()}),w0=!0};let O0;try{if(gu&&supportsRequestStream&&c!=="get"&&c!=="head"&&(O0=await resolveBodyLength($u,d))!==0){let u1=new Request(a,{method:"POST",body:d,duplex:"half"}),g1;if(utils$A.isFormData(d)&&(g1=u1.headers.get("content-type"))&&$u.setContentType(g1),u1.body){const[E1,B1]=progressEventDecorator(O0,progressEventReducer(asyncDecorator(gu)));d=trackStream(u1.body,DEFAULT_CHUNK_SIZE,E1,B1,encodeText)}}utils$A.isString(Iu)||(Iu=Iu?"include":"omit"),A0=new Request(a,{...Xu,signal:i0,method:c.toUpperCase(),headers:$u.normalize().toJSON(),body:d,duplex:"half",credentials:Iu});let L0=await fetch(A0);const q0=supportsResponseStream&&(xu==="stream"||xu==="response");if(supportsResponseStream&&(Ys||q0)){const u1={};["status","statusText","headers"].forEach(lv=>{u1[lv]=L0[lv]});const g1=utils$A.toFiniteNumber(L0.headers.get("content-length")),[E1,B1]=Ys&&progressEventDecorator(g1,progressEventReducer(asyncDecorator(Ys),!0))||[];L0=new Response(trackStream(L0.body,DEFAULT_CHUNK_SIZE,E1,()=>{B1&&B1(),q0&&$0()},encodeText),u1)}xu=xu||"text";let F0=await resolvers[utils$A.findKey(resolvers,xu)||"text"](L0,o);return!q0&&$0(),p0&&p0(),await new Promise((u1,g1)=>{settle(u1,g1,{data:F0,headers:AxiosHeaders$1.from(L0.headers),status:L0.status,statusText:L0.statusText,config:o,request:A0})})}catch(L0){throw $0(),L0&&L0.name==="TypeError"&&/fetch/i.test(L0.message)?Object.assign(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,o,A0),{cause:L0.cause||L0}):AxiosError$1.from(L0,L0&&L0.code,o,A0)}}),knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$A.forEach(knownAdapters,(o,a)=>{if(o){try{Object.defineProperty(o,"name",{value:a})}catch{}Object.defineProperty(o,"adapterName",{value:a})}});const renderReason=o=>`- ${o}`,isResolvedHandle=o=>utils$A.isFunction(o)||o===null||o===!1,adapters={getAdapter:o=>{o=utils$A.isArray(o)?o:[o];const{length:a}=o;let c,d;const tt={};for(let nt=0;nt`adapter ${Ys} `+(gu===!1?"is not supported by the environment":"is not available in the build"));let $a=a?nt.length>1?`since : `+nt.map(renderReason).join(` `):" "+renderReason(nt[0]):"as no adapter specified";throw new AxiosError$1("There is no suitable adapter to dispatch the request "+$a,"ERR_NOT_SUPPORT")}return d},adapters:knownAdapters};function throwIfCancellationRequested(o){if(o.cancelToken&&o.cancelToken.throwIfRequested(),o.signal&&o.signal.aborted)throw new CanceledError$1(null,o)}function dispatchRequest(o){return throwIfCancellationRequested(o),o.headers=AxiosHeaders$1.from(o.headers),o.data=transformData.call(o,o.transformRequest),["post","put","patch"].indexOf(o.method)!==-1&&o.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(o.adapter||defaults$1.adapter)(o).then(function(d){return throwIfCancellationRequested(o),d.data=transformData.call(o,o.transformResponse,d),d.headers=AxiosHeaders$1.from(d.headers),d},function(d){return isCancel$1(d)||(throwIfCancellationRequested(o),d&&d.response&&(d.response.data=transformData.call(o,o.transformResponse,d.response),d.response.headers=AxiosHeaders$1.from(d.response.headers))),Promise.reject(d)})}const VERSION$2="1.7.4",validators$5={};["object","boolean","number","function","string","symbol"].forEach((o,a)=>{validators$5[o]=function(d){return typeof d===o||"a"+(a<1?"n ":" ")+o}});const deprecatedWarnings={};validators$5.transitional=function(a,c,d){function tt(nt,$a){return"[Axios v"+VERSION$2+"] Transitional option '"+nt+"'"+$a+(d?". "+d:"")}return(nt,$a,Ys)=>{if(a===!1)throw new AxiosError$1(tt($a," has been removed"+(c?" in "+c:"")),AxiosError$1.ERR_DEPRECATED);return c&&!deprecatedWarnings[$a]&&(deprecatedWarnings[$a]=!0,console.warn(tt($a," has been deprecated since v"+c+" and will be removed in the near future"))),a?a(nt,$a,Ys):!0}};function assertOptions(o,a,c){if(typeof o!="object")throw new AxiosError$1("options must be an object",AxiosError$1.ERR_BAD_OPTION_VALUE);const d=Object.keys(o);let tt=d.length;for(;tt-- >0;){const nt=d[tt],$a=a[nt];if($a){const Ys=o[nt],gu=Ys===void 0||$a(Ys,nt,o);if(gu!==!0)throw new AxiosError$1("option "+nt+" must be "+gu,AxiosError$1.ERR_BAD_OPTION_VALUE);continue}if(c!==!0)throw new AxiosError$1("Unknown option "+nt,AxiosError$1.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$5},validators$4=validator.validators;let Axios$1=class{constructor(a){this.defaults=a,this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}async request(a,c){try{return await this._request(a,c)}catch(d){if(d instanceof Error){let tt;Error.captureStackTrace?Error.captureStackTrace(tt={}):tt=new Error;const nt=tt.stack?tt.stack.replace(/^.+\n/,""):"";try{d.stack?nt&&!String(d.stack).endsWith(nt.replace(/^.+\n.+\n/,""))&&(d.stack+=` -`+nt):d.stack=nt}catch{}}throw d}}_request(a,c){typeof a=="string"?(c=c||{},c.url=a):c=a||{},c=mergeConfig$1(this.defaults,c);const{transitional:d,paramsSerializer:tt,headers:nt}=c;d!==void 0&&validator.assertOptions(d,{silentJSONParsing:validators$4.transitional(validators$4.boolean),forcedJSONParsing:validators$4.transitional(validators$4.boolean),clarifyTimeoutError:validators$4.transitional(validators$4.boolean)},!1),tt!=null&&(utils$A.isFunction(tt)?c.paramsSerializer={serialize:tt}:validator.assertOptions(tt,{encode:validators$4.function,serialize:validators$4.function},!0)),c.method=(c.method||this.defaults.method||"get").toLowerCase();let $a=nt&&utils$A.merge(nt.common,nt[c.method]);nt&&utils$A.forEach(["delete","get","head","post","put","patch","common"],p0=>{delete nt[p0]}),c.headers=AxiosHeaders$1.concat($a,nt);const Ys=[];let gu=!0;this.interceptors.request.forEach(function(w0){typeof w0.runWhen=="function"&&w0.runWhen(c)===!1||(gu=gu&&w0.synchronous,Ys.unshift(w0.fulfilled,w0.rejected))});const xu=[];this.interceptors.response.forEach(function(w0){xu.push(w0.fulfilled,w0.rejected)});let $u,Iu=0,Xu;if(!gu){const p0=[dispatchRequest.bind(this),void 0];for(p0.unshift.apply(p0,Ys),p0.push.apply(p0,xu),Xu=p0.length,$u=Promise.resolve(c);Iu{if(!d._listeners)return;let nt=d._listeners.length;for(;nt-- >0;)d._listeners[nt](tt);d._listeners=null}),this.promise.then=tt=>{let nt;const $a=new Promise(Ys=>{d.subscribe(Ys),nt=Ys}).then(tt);return $a.cancel=function(){d.unsubscribe(nt)},$a},a(function(nt,$a,Ys){d.reason||(d.reason=new CanceledError$1(nt,$a,Ys),c(d.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;const c=this._listeners.indexOf(a);c!==-1&&this._listeners.splice(c,1)}static source(){let a;return{token:new Ive(function(tt){a=tt}),cancel:a}}};function spread$1(o){return function(c){return o.apply(null,c)}}function isAxiosError$1(o){return utils$A.isObject(o)&&o.isAxiosError===!0}const HttpStatusCode$1={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode$1).forEach(([o,a])=>{HttpStatusCode$1[a]=o});function createInstance(o){const a=new Axios$1(o),c=bind$f(Axios$1.prototype.request,a);return utils$A.extend(c,Axios$1.prototype,a,{allOwnKeys:!0}),utils$A.extend(c,a,null,{allOwnKeys:!0}),c.create=function(tt){return createInstance(mergeConfig$1(o,tt))},c}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError$1;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel$1;axios.VERSION=VERSION$2;axios.toFormData=toFormData$1;axios.AxiosError=AxiosError$1;axios.Cancel=axios.CanceledError;axios.all=function(a){return Promise.all(a)};axios.spread=spread$1;axios.isAxiosError=isAxiosError$1;axios.mergeConfig=mergeConfig$1;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=o=>formDataToJSON(utils$A.isHTMLForm(o)?new FormData(o):o);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const{Axios,AxiosError,CanceledError,isCancel,CancelToken,VERSION:VERSION$1,all:all$1,Cancel,isAxiosError,spread,toFormData,AxiosHeaders,HttpStatusCode,formToJSON,getAdapter,mergeConfig}=axios;class AxiosHttpClient{constructor(a,c){aw(this,"axios");aw(this,"showServerDownPopup");this.axios=a,this.showServerDownPopup=c,this.axios.interceptors.response.use(d=>d,d=>(d.response||this.showServerDownPopup(),Promise.reject(d)))}async get(a,c={}){return this.request(this.axios.get(a,{headers:c}))}async post(a,c,d={}){return this.request(this.axios.post(a,c,{headers:d}))}async put(a,c,d={}){return this.request(this.axios.put(a,c,{headers:d}))}async delete(a,c={}){return this.request(this.axios.delete(a,{headers:c}))}async patch(a,c,d={}){return this.request(this.axios.patch(a,c,{headers:d}))}async head(a,c={}){return this.request(this.axios.head(a,{headers:c}))}async request(a){var c,d,tt;try{const nt=await a;return nt.config.method.toUpperCase()==="HEAD"?{data:void 0}:nt.data}catch(nt){if(nt instanceof AxiosError){if(((d=(c=nt.config)==null?void 0:c.method)==null?void 0:d.toUpperCase())==="HEAD")return{error:{code:nt.request.status,message:nt.message}};const $a=(tt=nt.response)==null?void 0:tt.data,Ys=$a.error;return!$a&&(!Ys||!Ys.message||!Ys.code)?{error:GENERIC_ERROR}:typeof $a=="string"?{error:{code:nt.request.status,message:$a}}:typeof Ys=="string"?{error:{code:nt.request.status,message:Ys}}:{error:{code:(Ys==null?void 0:Ys.code)||nt.request.status,message:Ys==null?void 0:Ys.message}}}return{error:GENERIC_ERROR}}}}const GENERIC_ERROR={code:500,message:"Something went wrong"},useMetamask$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard"},useNear$1={verifyMessageError:"Error while verifying message",missingUrlParamsError:"Missing url parameters",loginError:"Error while login",rootkeyError:"Error while adding root key",messageNotVerifiedError:"Message not verified",signMessageError:"Error while signing message",signOutError:"Failed to signing out"},useStarknet$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard",signMessageError:"Error while signing message",signOutError:"Failed to signing out",errorChangingNetwork:"Error changing network",walletNotFound:"Wallet not found",errorLogin:"Error while login"},useIcp$1={requestNodeDataError:"Error while requesting node data",errorChangingNetwork:"Error changing network",loginError:"Error while login",rootkeyError:"Error while adding root key",signMessageError:"Error while signing message"},loginPage={logoDashboardText:"Admin Dashboard",title:"Calimero Node Admin Dashboard",subtitle:"Start using Calimero by selecting your wallet.",buttonConnectText:"Connect Wallet",loginSelector:{title:"Continue with wallet",metamaskButtonText:"Metamask wallet",nearButtonText:"Near wallet",starknetButtonText:"Starknet wallet",IcpButtonText:"Internet Computer"},nearLogin:{title:"Login with NEAR",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},IcpLogin:{title:"Login with Internet Identity",subtitle:"Choose from which account you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backToLoginPage:"Back to login page"},metamaskLogin:{titleLogin:"Login with Metamask",titleRootKey:"Add Metamask root key",subtitle:"Choose which account from your wallet you want to log in with",authButtonText:"Sign authentication transaction",errorTitleText:"Error signing message",backButtonText:"Back to wallet selector"},starknetLogin:{title:"Login with Starknet",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector",argentXButton:"Login with ArgentX",metamaskButton:"Login with MetaMask",titleRootKey:"Add Starknet root key",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"}},addRootKeyPage={nearRootKey:{title:"Add NEAR root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Add root key",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},starknetRootKey:{title:"Add Starknet root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",argentXButton:"Add root key with ArgentX",metamaskButton:"Add root key with MetaMask",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"},IcpKey:{title:"Add Internet Identity root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",authButtonText:"Add root key",backToLoginPage:"Back to login selector"}},footer={title:"Calimero Network"},navigation={logoDashboardText:"Admin Dashboard",pkTest:"Public Key"},applicationsPage={applicationsTable:{title:"Applications",publishNewAppText:"Publish new application",noAvailableAppsText:"No applications available",noAvailableReleasesText:"No available releases",noInstalledAppsText:"No installed applications",noOwnedAppsText:"No owned applications",installNewAppText:"install new application",actionDialog:{title:"Uninstall Application",subtitle:"Are you sure you want to uninstall this application? This action cannot be undone.",buttonActionText:"Uninstall"}},installApplication:{title:"Install Application",backButtonText:"Back to Applications",selectAppLabel:"Select Application to Install",dropdownPlaceholder:"Applications",packageDetailsLabel:"Package Details",releaseSelectionLabel:"Select Application Release",releaseDetailsLabel:"Release Details",installErrorTitle:"Failed to install application",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",installButtonText:"Install application",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",failInstallTitle:"Error installing application",successInstallTitle:"Application installed successfully"},publishApplication:{title:"Publish new application",addAccountButtonText:"Add wallet account",connectAccountTitle:"Connect owner account",connectAccountSubtitle:"Owner account is holder of application and only that account can publish new releases.",connectAccountButtonText:"Connect account",buttonText:"Publish"},addRelease:{title:"Add new release",buttonText:"Publish",latestReleaseText:"Latest application version is : "}},confirmWallet={logoText:"Admin Dashboard",title:"Confirm Wallet",accountIdText:"Account Id",signatureText:"Signature",publicKeyText:"PublicKey",callbackUrlText:"Callback Url",submitButtonText:"Submit Request",backButtonText:"Back to login"},keysPage={title:"Keys"},keysTable={noKeysText:"No keys found in the node.",headerPkText:"Public Key",headerTypeText:"Type",badgeActiveText:"Active",badgeRevokedText:"Revoked",setActiveText:"Set Active",revokeKeyText:"Revoke Key",addNewText:"Add new Key"},uploadPage={title:"Upload Application",walletButtonText:"Add wallet account",switchPackageText:"Add Package",switchReleaseText:"Add Release"},uploadApplication={title:"Add Release",subtitle:"To install the application first upload the application wasm to the IPFS, select the package you want to add the release for and fill the release details.",uploadIpfsTitle:"IPFS Application upload",inputLabelText:"Select Application .wasm file to upload",buttonUploadLabel:"Upload wasm",buttonUploadText:"Upload",cidLabelText:"File IPFS CID",backButtonText:"Back",releaseTitle:"Add new release",nameLabelText:"Name",pathLabelText:"Path",versionLabelText:"Version",notesLabelText:"Notes",hashLabelText:"Hash",buttonAddReleaseText:"Add Release",versionPlaceholder:"1.0.0",notesPlaceholder:"Initial release",hashPlaceholder:"QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7",addReleaseButtonText:"Add Release",loginLableText:"To Deploy new release, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account",selectPackageLabel:"Select Package",pathPlaceholder:"url to the wasm file"},addPackageForm={title:"Add application details",subtitle:"To successfully install the application, first you need to add the package details and procceed to add relase.",nameLabelText:"Package Name",repositoryLabelText:"Repository URL",descriptionLabelText:"Description",buttonAddPackageText:"Add Package",buttonNextText:"Next",namePlaceholder:"chat-application",repositoryPlaceholder:"https://github.com/",descriptionPlaceholder:"A chat application built for P2P network",loginLableText:"To Deploy new package, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account"},statusModal={buttonContinueText:"Continue",buttonDeleteText:"Delete",buttonCopyText:"Copy",buttonCloseText:"Close",buttonCancelText:"Cancel"},contextPage={contextPageTitle:"Contexts",startNewContextText:"Start new context",joinContextText:"Join existing context",noContextsText:"No contexts found in the node.",contextPageDescription:"Contexts are the core of the Calimero ecosystem. These are application specific networks designed to enable direct communication between users, eliminating the need for intermediaries.",invitedListDescription:"Contexts you have been invited to",noJoinedAppsListText:"You have not joined any contexts.",noInviedAppsListText:"You have not been invited to any contexts.",devApplicationTitle:"Development application",deleteContextText:"Delete Context",contextDetails:{title:"Context Details",clientKeysListDescription:"Client keys are authorization keys used by the application frontend.",noClientKeysText:"No data found.",noUsersText:"No users found in the context.",labelIdText:"Id: ",labelNameText:"Name: ",labelOwnerText:"Owner: ",labelDescriptionText:"Description: ",labelRepositoryText:"Repository URL: ",lableVersionText:"Version: ",labelAppId:"App ID: ",titleApps:"Installed application",localAppTitle:"Metadata not available for locally installed application",titleStorage:"Storage",labelStorageText:"Used: "},actionDialog:{title:"Delete Context",subtitle:"Are you sure you want to delete this context? This action cannot be undone."},contextInvitation:{invitationText:"Invited on ",acceptButtonText:"Accept",declineButtonText:"Decline"}},startContextPage={backButtonText:"back to context select",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",initSectionTitle:"Initialize application state",argsTitleText:"Arguments",methodLabelText:"method name",argsLabelText:"arguments json",buttonFormatText:"format",loginRequestPopupTitle:"Application Sign-in Request - Start Context",detailsText:"Details",applicationList:{listTitle:"Select Available Application",noAvailableAppsText:"No applications available",noOwnedAppsText:"No owned applications installed"},startContextSuccessTitle:"Context started",startedContextMessage:"Application context has been started successfully.",startContextErrorTitle:"Failed to start context",startContextErrorMessage:"Failed to start the application context.",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",successInstallTitle:"Application installed successfully",failInstallTitle:"Error installing application"},joinContextPage={title:"Join existing Context",buttonJoinText:"Join Context",joinErrorTitle:"Failed to join context",joinSuccessTitle:"Context joined",joinSuccessMessage:"Context joined successfully",contextIdLabel:"Context ID"},exportIdentityPage={title:"Export",description:"Export decentralized identifiers (DIDs) associated with the node.",buttonExportText:"Export Identity",exportErrorTitle:"Failed to export node identity",exportSuccessTitle:"Identity exported"},identityPage={title:"Root keys",addRootKeyText:"Add new root key",loggedInLabel:"Logged in with: ",noRootKeysText:"No root keys found in the node."},serverDown={useHookComponentErrorText:"useServerDown must be used within a ServerDownProvider",popupTitle:"503 - Service Unavailable",popupMessage:"The Node Server at {{nodeApiEndpoint}} is unreachable. Please try again later."},nodeDataSource={joinContextErrorTitle:"Error joining context",joinContextErrorMessage:"Failed to join context",unauthorizedErrorMessage:"Unauthorized"},authHeaders={errorText:"Error extracting private key"},walletSelectorContext={alertErrorText:"Failed to initialise wallet selector",componentErrorText:"useWalletSelector must be used within a WalletSelectorContextProvider"},appLoginPopup={createTokenError:"Error creating token, please try again",selectContext:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextsTitle:"Select Context",contextsSubtitle:"To continue select available or start a new context for the application",noContextsText:"No contexts found",selectedContextText:"Selected context Id:",buttonNextText:"Confirm context Id",buttonBackText:"Return to application",buttonCreateText:"Start new"},selectIdentity:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",contextsTitle:"Select context identity",contextsSubtitle:"To continue select available context identity for the application",noContextsText:"No contexts identities found",selectedContextText:"Selected context identity:",backButtonText:"back to context select",buttonNextText:"Confirm context identity",buttonBackText:"Return to application"},createToken:{title:"Application Sign-in Request",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",backButtonText:"back to select context identity",contextIdentityText:"Context Identity: ",detailsText:"Details",buttonNextText:"Create token"}},setupModal$1={inputIdLengthError:"Application ID must be between 32 and 44 characters long.",inputEncodeError:"Application ID must contain only base58 characters.",nodeHealthCheckError:"Connection failed. Please check if node url is correct.",modalTitle:"App setup",urlInputPlacerholder:"node url",buttonSetText:"Set node url"},translations={useMetamask:useMetamask$1,useNear:useNear$1,useStarknet:useStarknet$1,useIcp:useIcp$1,loginPage,addRootKeyPage,footer,navigation,applicationsPage,confirmWallet,keysPage,keysTable,uploadPage,uploadApplication,addPackageForm,statusModal,contextPage,startContextPage,joinContextPage,exportIdentityPage,identityPage,serverDown,nodeDataSource,authHeaders,walletSelectorContext,appLoginPopup,setupModal:setupModal$1};function createAppMetadata(o){var a={contractAppId:o};return Array.from(new TextEncoder().encode(JSON.stringify(a)))}function parseAppMetadata(o){try{if(o.length===0)return null;var a=JSON.parse(new TextDecoder().decode(new Uint8Array(o)));return a}catch{return null}}function getNodeUrl(){let o=getAppEndpointKey();if(!o){let a="http://localhost:2428";return setAppEndpointKey(a),a}return o??""}function getNearEnvironment(){return"testnet"}const Ed25519$1="Ed25519";class CodeError extends Error{constructor(c,d,tt){super(c);aw(this,"code");aw(this,"props");this.code=d,this.name=(tt==null?void 0:tt.name)??"CodeError",this.props=tt??{}}}class AggregateCodeError extends AggregateError{constructor(c,d,tt,nt){super(c,d);aw(this,"code");aw(this,"props");this.code=tt,this.name=(nt==null?void 0:nt.name)??"AggregateCodeError",this.props=nt??{}}}var events={exports:{}},R$3=typeof Reflect=="object"?Reflect:null,ReflectApply=R$3&&typeof R$3.apply=="function"?R$3.apply:function(a,c,d){return Function.prototype.apply.call(a,c,d)},ReflectOwnKeys;R$3&&typeof R$3.ownKeys=="function"?ReflectOwnKeys=R$3.ownKeys:Object.getOwnPropertySymbols?ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a).concat(Object.getOwnPropertySymbols(a))}:ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a)};function ProcessEmitWarning(o){console&&console.warn&&console.warn(o)}var NumberIsNaN=Number.isNaN||function(a){return a!==a};function EventEmitter$1(){EventEmitter$1.init.call(this)}events.exports=EventEmitter$1;events.exports.once=once$2;EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=void 0;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=void 0;var defaultMaxListeners=10;function checkListener(o){if(typeof o!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof o)}Object.defineProperty(EventEmitter$1,"defaultMaxListeners",{enumerable:!0,get:function(){return defaultMaxListeners},set:function(o){if(typeof o!="number"||o<0||NumberIsNaN(o))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+o+".");defaultMaxListeners=o}});EventEmitter$1.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};EventEmitter$1.prototype.setMaxListeners=function(a){if(typeof a!="number"||a<0||NumberIsNaN(a))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+a+".");return this._maxListeners=a,this};function _getMaxListeners(o){return o._maxListeners===void 0?EventEmitter$1.defaultMaxListeners:o._maxListeners}EventEmitter$1.prototype.getMaxListeners=function(){return _getMaxListeners(this)};EventEmitter$1.prototype.emit=function(a){for(var c=[],d=1;d0&&($a=c[0]),$a instanceof Error)throw $a;var Ys=new Error("Unhandled error."+($a?" ("+$a.message+")":""));throw Ys.context=$a,Ys}var gu=nt[a];if(gu===void 0)return!1;if(typeof gu=="function")ReflectApply(gu,this,c);else for(var xu=gu.length,$u=arrayClone(gu,xu),d=0;d0&&$a.length>tt&&!$a.warned){$a.warned=!0;var Ys=new Error("Possible EventEmitter memory leak detected. "+$a.length+" "+String(a)+" listeners added. Use emitter.setMaxListeners() to increase limit");Ys.name="MaxListenersExceededWarning",Ys.emitter=o,Ys.type=a,Ys.count=$a.length,ProcessEmitWarning(Ys)}return o}EventEmitter$1.prototype.addListener=function(a,c){return _addListener(this,a,c,!1)};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function(a,c){return _addListener(this,a,c,!0)};function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(o,a,c){var d={fired:!1,wrapFn:void 0,target:o,type:a,listener:c},tt=onceWrapper.bind(d);return tt.listener=c,d.wrapFn=tt,tt}EventEmitter$1.prototype.once=function(a,c){return checkListener(c),this.on(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.prependOnceListener=function(a,c){return checkListener(c),this.prependListener(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.removeListener=function(a,c){var d,tt,nt,$a,Ys;if(checkListener(c),tt=this._events,tt===void 0)return this;if(d=tt[a],d===void 0)return this;if(d===c||d.listener===c)--this._eventsCount===0?this._events=Object.create(null):(delete tt[a],tt.removeListener&&this.emit("removeListener",a,d.listener||c));else if(typeof d!="function"){for(nt=-1,$a=d.length-1;$a>=0;$a--)if(d[$a]===c||d[$a].listener===c){Ys=d[$a].listener,nt=$a;break}if(nt<0)return this;nt===0?d.shift():spliceOne(d,nt),d.length===1&&(tt[a]=d[0]),tt.removeListener!==void 0&&this.emit("removeListener",a,Ys||c)}return this};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function(a){var c,d,tt;if(d=this._events,d===void 0)return this;if(d.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):d[a]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete d[a]),this;if(arguments.length===0){var nt=Object.keys(d),$a;for(tt=0;tt=0;tt--)this.removeListener(a,c[tt]);return this};function _listeners(o,a,c){var d=o._events;if(d===void 0)return[];var tt=d[a];return tt===void 0?[]:typeof tt=="function"?c?[tt.listener||tt]:[tt]:c?unwrapListeners(tt):arrayClone(tt,tt.length)}EventEmitter$1.prototype.listeners=function(a){return _listeners(this,a,!0)};EventEmitter$1.prototype.rawListeners=function(a){return _listeners(this,a,!1)};EventEmitter$1.listenerCount=function(o,a){return typeof o.listenerCount=="function"?o.listenerCount(a):listenerCount.call(o,a)};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(o){var a=this._events;if(a!==void 0){var c=a[o];if(typeof c=="function")return 1;if(c!==void 0)return c.length}return 0}EventEmitter$1.prototype.eventNames=function(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]};function arrayClone(o,a){for(var c=new Array(a),d=0;d=255)throw new TypeError("Alphabet too long");for(var c=new Uint8Array(256),d=0;d>>0,q0=new Uint8Array(L0);$0!==O0;){for(var F0=p0[$0],u1=0,g1=L0-1;(F0!==0||u1>>0,q0[g1]=F0%Ys>>>0,F0=F0/Ys>>>0;if(F0!==0)throw new Error("Non-zero carry");A0=u1,$0++}for(var E1=L0-A0;E1!==L0&&q0[E1]===0;)E1++;for(var B1=gu.repeat(w0);E1>>0,L0=new Uint8Array(O0);p0[w0];){var q0=c[p0.charCodeAt(w0)];if(q0===255)return;for(var F0=0,u1=O0-1;(q0!==0||F0<$0)&&u1!==-1;u1--,F0++)q0+=Ys*L0[u1]>>>0,L0[u1]=q0%256>>>0,q0=q0/256>>>0;if(q0!==0)throw new Error("Non-zero carry");$0=F0,w0++}if(p0[w0]!==" "){for(var g1=O0-$0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=new Uint8Array(A0+(O0-g1)),B1=A0;g1!==O0;)E1[B1++]=L0[g1++];return E1}}}function i0(p0){var w0=Xu(p0);if(w0)return w0;throw new Error(`Non-${a} character`)}return{encode:Iu,decodeUnsafe:Xu,decode:i0}}var src$2=base$5,_brrp__multiformats_scope_baseX=src$2;class Encoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");this.name=a,this.prefix=c,this.baseEncode=d}encode(a){if(a instanceof Uint8Array)return`${this.prefix}${this.baseEncode(a)}`;throw Error("Unknown type, must be binary type")}}class Decoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseDecode");aw(this,"prefixCodePoint");if(this.name=a,this.prefix=c,c.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=c.codePointAt(0),this.baseDecode=d}decode(a){if(typeof a=="string"){if(a.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(a)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(a.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(a){return or$1(this,a)}}class ComposedDecoder{constructor(a){aw(this,"decoders");this.decoders=a}or(a){return or$1(this,a)}decode(a){const c=a[0],d=this.decoders[c];if(d!=null)return d.decode(a);throw RangeError(`Unable to decode multibase string ${JSON.stringify(a)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}function or$1(o,a){return new ComposedDecoder({...o.decoders??{[o.prefix]:o},...a.decoders??{[a.prefix]:a}})}class Codec{constructor(a,c,d,tt){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");aw(this,"baseDecode");aw(this,"encoder");aw(this,"decoder");this.name=a,this.prefix=c,this.baseEncode=d,this.baseDecode=tt,this.encoder=new Encoder(a,c,d),this.decoder=new Decoder(a,c,tt)}encode(a){return this.encoder.encode(a)}decode(a){return this.decoder.decode(a)}}function from$2({name:o,prefix:a,encode:c,decode:d}){return new Codec(o,a,c,d)}function baseX$1({name:o,prefix:a,alphabet:c}){const{encode:d,decode:tt}=_brrp__multiformats_scope_baseX(c,o);return from$2({prefix:a,name:o,encode:d,decode:nt=>coerce(tt(nt))})}function decode$6(o,a,c,d){const tt={};for(let $u=0;$u=8&&(Ys-=8,$a[xu++]=255&gu>>Ys)}if(Ys>=c||255&gu<<8-Ys)throw new SyntaxError("Unexpected end of data");return $a}function encode$7(o,a,c){const d=a[a.length-1]==="=",tt=(1<c;)$a-=c,nt+=a[tt&Ys>>$a];if($a!==0&&(nt+=a[tt&Ys<=INT;)a[c++]=o&255|MSB$1,o/=128;for(;o&MSBALL;)a[c++]=o&255|MSB$1,o>>>=7;return a[c]=o|0,encode$6.bytes=c-d+1,a}var decode$5=read$2,MSB$1$1=128,REST$1$1=127;function read$2(o,d){var c=0,d=d||0,tt=0,nt=d,$a,Ys=o.length;do{if(nt>=Ys)throw read$2.bytes=0,new RangeError("Could not decode varint");$a=o[nt++],c+=tt<28?($a&REST$1$1)<=MSB$1$1);return read$2.bytes=nt-d,c}var N1$1=Math.pow(2,7),N2$1=Math.pow(2,14),N3$1=Math.pow(2,21),N4$1=Math.pow(2,28),N5$1=Math.pow(2,35),N6$1=Math.pow(2,42),N7$1=Math.pow(2,49),N8=Math.pow(2,56),N9=Math.pow(2,63),length$2=function(o){return ocreate$8(this.code,d))}else throw Error("Unknown type, must be binary type")}}function sha$5(o){return async a=>new Uint8Array(await crypto.subtle.digest(o,a))}const sha256$6=from$1({name:"sha2-256",code:18,encode:sha$5("SHA-256")});function equals(o,a){if(o===a)return!0;if(o.byteLength!==a.byteLength)return!1;for(let c=0;ctt+nt.length,0));const c=allocUnsafe(a);let d=0;for(const tt of o)c.set(tt,d),d+=tt.length;return c}const base10=baseX$1({prefix:"9",name:"base10",alphabet:"0123456789"}),base10$1=Object.freeze(Object.defineProperty({__proto__:null,base10},Symbol.toStringTag,{value:"Module"})),base16=rfc4648({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),base16upper=rfc4648({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),base16$1=Object.freeze(Object.defineProperty({__proto__:null,base16,base16upper},Symbol.toStringTag,{value:"Module"})),base2=rfc4648({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),base2$1=Object.freeze(Object.defineProperty({__proto__:null,base2},Symbol.toStringTag,{value:"Module"})),alphabet$1=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),alphabetBytesToChars=alphabet$1.reduce((o,a,c)=>(o[c]=a,o),[]),alphabetCharsToBytes=alphabet$1.reduce((o,a,c)=>(o[a.codePointAt(0)]=c,o),[]);function encode$4(o){return o.reduce((a,c)=>(a+=alphabetBytesToChars[c],a),"")}function decode$4(o){const a=[];for(const c of o){const d=alphabetCharsToBytes[c.codePointAt(0)];if(d===void 0)throw new Error(`Non-base256emoji character: ${c}`);a.push(d)}return new Uint8Array(a)}const base256emoji=from$2({prefix:"🚀",name:"base256emoji",encode:encode$4,decode:decode$4}),base256emoji$1=Object.freeze(Object.defineProperty({__proto__:null,base256emoji},Symbol.toStringTag,{value:"Module"})),base32=rfc4648({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),base32upper=rfc4648({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),base32pad=rfc4648({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),base32padupper=rfc4648({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),base32hex=rfc4648({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),base32hexupper=rfc4648({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),base32hexpad=rfc4648({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),base32hexpadupper=rfc4648({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),base32z=rfc4648({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5}),base32$1=Object.freeze(Object.defineProperty({__proto__:null,base32,base32hex,base32hexpad,base32hexpadupper,base32hexupper,base32pad,base32padupper,base32upper,base32z},Symbol.toStringTag,{value:"Module"})),base36=baseX$1({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),base36upper=baseX$1({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),base36$1=Object.freeze(Object.defineProperty({__proto__:null,base36,base36upper},Symbol.toStringTag,{value:"Module"})),base64$1=rfc4648({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),base64pad=rfc4648({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),base64url=rfc4648({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),base64urlpad=rfc4648({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6}),base64$2=Object.freeze(Object.defineProperty({__proto__:null,base64:base64$1,base64pad,base64url,base64urlpad},Symbol.toStringTag,{value:"Module"})),base8=rfc4648({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),base8$1=Object.freeze(Object.defineProperty({__proto__:null,base8},Symbol.toStringTag,{value:"Module"})),identity$1=from$2({prefix:"\0",name:"identity",encode:o=>toString$c(o),decode:o=>fromString$1(o)}),identityBase=Object.freeze(Object.defineProperty({__proto__:null,identity:identity$1},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const bases={...identityBase,...base2$1,...base8$1,...base10$1,...base16$1,...base32$1,...base36$1,...base58,...base64$2,...base256emoji$1};function createCodec$1(o,a,c,d){return{name:o,prefix:a,encoder:{name:o,prefix:a,encode:c},decoder:{decode:d}}}const string=createCodec$1("utf8","u",o=>"u"+new TextDecoder("utf8").decode(o),o=>new TextEncoder().encode(o.substring(1))),ascii=createCodec$1("ascii","a",o=>{let a="a";for(let c=0;c{o=o.substring(1);const a=allocUnsafe(o.length);for(let c=0;c0&&!a.includes(o.length))throw new Error(`Uint8Array expected of length ${a}, not of length=${o.length}`)}function hash$a(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$3(o.outputLen),number$3(o.blockLen)}function exists$3(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}function output$3(o,a){bytes$3(o);const c=a.outputLen;if(o.lengthnew Uint32Array(o.buffer,o.byteOffset,Math.floor(o.byteLength/4)),createView$1=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),rotr$1=(o,a)=>o<<32-a|o>>>a,isLE$1=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,byteSwap=o=>o<<24&4278190080|o<<8&16711680|o>>>8&65280|o>>>24&255;function byteSwap32(o){for(let a=0;a{};async function asyncLoop(o,a,c){let d=Date.now();for(let tt=0;tt=0&&nto().update(toBytes$1(d)).digest(),c=o();return a.outputLen=c.outputLen,a.blockLen=c.blockLen,a.create=()=>o(),a}function randomBytes$5(o=32){if(crypto$6&&typeof crypto$6.getRandomValues=="function")return crypto$6.getRandomValues(new Uint8Array(o));throw new Error("crypto.getRandomValues must be defined")}function setBigUint64$3(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ys=Number(c&nt),gu=d?4:0,xu=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+xu,Ys,d)}const Chi$2=(o,a,c)=>o&a^~o&c,Maj$2=(o,a,c)=>o&a^o&c^a&c;class HashMD extends Hash$9{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=createView$1(this.buffer)}update(a){exists$3(this);const{view:c,buffer:d,blockLen:tt}=this;a=toBytes$1(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iu>_32n$2&U32_MASK64$2)}:{h:Number(o>>_32n$2&U32_MASK64$2)|0,l:Number(o&U32_MASK64$2)|0}}function split$8(o,a=!1){let c=new Uint32Array(o.length),d=new Uint32Array(o.length);for(let tt=0;ttBigInt(o>>>0)<<_32n$2|BigInt(a>>>0),shrSH$1=(o,a,c)=>o>>>c,shrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrSH$1=(o,a,c)=>o>>>c|a<<32-c,rotrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrBH$1=(o,a,c)=>o<<64-c|a>>>c-32,rotrBL$1=(o,a,c)=>o>>>c-32|a<<64-c,rotr32H$1=(o,a)=>a,rotr32L$1=(o,a)=>o,rotlSH$2=(o,a,c)=>o<>>32-c,rotlSL$2=(o,a,c)=>a<>>32-c,rotlBH$2=(o,a,c)=>a<>>64-c,rotlBL$2=(o,a,c)=>o<>>64-c;function add$1(o,a,c,d){const tt=(a>>>0)+(d>>>0);return{h:o+c+(tt/2**32|0)|0,l:tt|0}}const add3L$1=(o,a,c)=>(o>>>0)+(a>>>0)+(c>>>0),add3H$1=(o,a,c,d)=>a+c+d+(o/2**32|0)|0,add4L$1=(o,a,c,d)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0),add4H$1=(o,a,c,d,tt)=>a+c+d+tt+(o/2**32|0)|0,add5L$1=(o,a,c,d,tt)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0)+(tt>>>0),add5H$1=(o,a,c,d,tt,nt)=>a+c+d+tt+nt+(o/2**32|0)|0,u64$1={fromBig:fromBig$2,split:split$8,toBig:toBig$1,shrSH:shrSH$1,shrSL:shrSL$1,rotrSH:rotrSH$1,rotrSL:rotrSL$1,rotrBH:rotrBH$1,rotrBL:rotrBL$1,rotr32H:rotr32H$1,rotr32L:rotr32L$1,rotlSH:rotlSH$2,rotlSL:rotlSL$2,rotlBH:rotlBH$2,rotlBL:rotlBL$2,add:add$1,add3L:add3L$1,add3H:add3H$1,add4L:add4L$1,add4H:add4H$1,add5H:add5H$1,add5L:add5L$1},[SHA512_Kh$1,SHA512_Kl$1]=u64$1.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(o=>BigInt(o))),SHA512_W_H$1=new Uint32Array(80),SHA512_W_L$1=new Uint32Array(80);let SHA512$4=class extends HashMD{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:a,Al:c,Bh:d,Bl:tt,Ch:nt,Cl:$a,Dh:Ys,Dl:gu,Eh:xu,El:$u,Fh:Iu,Fl:Xu,Gh:i0,Gl:p0,Hh:w0,Hl:A0}=this;return[a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0]}set(a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0){this.Ah=a|0,this.Al=c|0,this.Bh=d|0,this.Bl=tt|0,this.Ch=nt|0,this.Cl=$a|0,this.Dh=Ys|0,this.Dl=gu|0,this.Eh=xu|0,this.El=$u|0,this.Fh=Iu|0,this.Fl=Xu|0,this.Gh=i0|0,this.Gl=p0|0,this.Hh=w0|0,this.Hl=A0|0}process(a,c){for(let L0=0;L0<16;L0++,c+=4)SHA512_W_H$1[L0]=a.getUint32(c),SHA512_W_L$1[L0]=a.getUint32(c+=4);for(let L0=16;L0<80;L0++){const q0=SHA512_W_H$1[L0-15]|0,F0=SHA512_W_L$1[L0-15]|0,u1=u64$1.rotrSH(q0,F0,1)^u64$1.rotrSH(q0,F0,8)^u64$1.shrSH(q0,F0,7),g1=u64$1.rotrSL(q0,F0,1)^u64$1.rotrSL(q0,F0,8)^u64$1.shrSL(q0,F0,7),E1=SHA512_W_H$1[L0-2]|0,B1=SHA512_W_L$1[L0-2]|0,lv=u64$1.rotrSH(E1,B1,19)^u64$1.rotrBH(E1,B1,61)^u64$1.shrSH(E1,B1,6),j1=u64$1.rotrSL(E1,B1,19)^u64$1.rotrBL(E1,B1,61)^u64$1.shrSL(E1,B1,6),r1=u64$1.add4L(g1,j1,SHA512_W_L$1[L0-7],SHA512_W_L$1[L0-16]),t1=u64$1.add4H(r1,u1,lv,SHA512_W_H$1[L0-7],SHA512_W_H$1[L0-16]);SHA512_W_H$1[L0]=t1|0,SHA512_W_L$1[L0]=r1|0}let{Ah:d,Al:tt,Bh:nt,Bl:$a,Ch:Ys,Cl:gu,Dh:xu,Dl:$u,Eh:Iu,El:Xu,Fh:i0,Fl:p0,Gh:w0,Gl:A0,Hh:$0,Hl:O0}=this;for(let L0=0;L0<80;L0++){const q0=u64$1.rotrSH(Iu,Xu,14)^u64$1.rotrSH(Iu,Xu,18)^u64$1.rotrBH(Iu,Xu,41),F0=u64$1.rotrSL(Iu,Xu,14)^u64$1.rotrSL(Iu,Xu,18)^u64$1.rotrBL(Iu,Xu,41),u1=Iu&i0^~Iu&w0,g1=Xu&p0^~Xu&A0,E1=u64$1.add5L(O0,F0,g1,SHA512_Kl$1[L0],SHA512_W_L$1[L0]),B1=u64$1.add5H(E1,$0,q0,u1,SHA512_Kh$1[L0],SHA512_W_H$1[L0]),lv=E1|0,j1=u64$1.rotrSH(d,tt,28)^u64$1.rotrBH(d,tt,34)^u64$1.rotrBH(d,tt,39),r1=u64$1.rotrSL(d,tt,28)^u64$1.rotrBL(d,tt,34)^u64$1.rotrBL(d,tt,39),t1=d&nt^d&Ys^nt&Ys,D0=tt&$a^tt&gu^$a&gu;$0=w0|0,O0=A0|0,w0=i0|0,A0=p0|0,i0=Iu|0,p0=Xu|0,{h:Iu,l:Xu}=u64$1.add(xu|0,$u|0,B1|0,lv|0),xu=Ys|0,$u=gu|0,Ys=nt|0,gu=$a|0,nt=d|0,$a=tt|0;const Z0=u64$1.add3L(lv,r1,D0);d=u64$1.add3H(Z0,B1,j1,t1),tt=Z0|0}({h:d,l:tt}=u64$1.add(this.Ah|0,this.Al|0,d|0,tt|0)),{h:nt,l:$a}=u64$1.add(this.Bh|0,this.Bl|0,nt|0,$a|0),{h:Ys,l:gu}=u64$1.add(this.Ch|0,this.Cl|0,Ys|0,gu|0),{h:xu,l:$u}=u64$1.add(this.Dh|0,this.Dl|0,xu|0,$u|0),{h:Iu,l:Xu}=u64$1.add(this.Eh|0,this.El|0,Iu|0,Xu|0),{h:i0,l:p0}=u64$1.add(this.Fh|0,this.Fl|0,i0|0,p0|0),{h:w0,l:A0}=u64$1.add(this.Gh|0,this.Gl|0,w0|0,A0|0),{h:$0,l:O0}=u64$1.add(this.Hh|0,this.Hl|0,$0|0,O0|0),this.set(d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0,$0,O0)}roundClean(){SHA512_W_H$1.fill(0),SHA512_W_L$1.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};const sha512$3=wrapConstructor$1(()=>new SHA512$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$f=BigInt(0),_1n$h=BigInt(1),_2n$c=BigInt(2);function isBytes$6(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function abytes(o){if(!isBytes$6(o))throw new Error("Uint8Array expected")}const hexes$2=Array.from({length:256},(o,a)=>a.toString(16).padStart(2,"0"));function bytesToHex$2(o){abytes(o);let a="";for(let c=0;c=asciis$1._0&&o<=asciis$1._9)return o-asciis$1._0;if(o>=asciis$1._A&&o<=asciis$1._F)return o-(asciis$1._A-10);if(o>=asciis$1._a&&o<=asciis$1._f)return o-(asciis$1._a-10)}function hexToBytes$3(o){if(typeof o!="string")throw new Error("hex string expected, got "+typeof o);const a=o.length,c=a/2;if(a%2)throw new Error("padded hex string expected, got unpadded hex of length "+a);const d=new Uint8Array(c);for(let tt=0,nt=0;tt_0n$f;o>>=_1n$h,a+=1);return a}function bitGet$2(o,a){return o>>BigInt(a)&_1n$h}function bitSet$2(o,a,c){return o|(c?_1n$h:_0n$f)<(_2n$c<new Uint8Array(o),u8fr$2=o=>Uint8Array.from(o);function createHmacDrbg$2(o,a,c){if(typeof o!="number"||o<2)throw new Error("hashLen must be a number");if(typeof a!="number"||a<2)throw new Error("qByteLen must be a number");if(typeof c!="function")throw new Error("hmacFn must be a function");let d=u8n$2(o),tt=u8n$2(o),nt=0;const $a=()=>{d.fill(1),tt.fill(0),nt=0},Ys=(...Iu)=>c(tt,d,...Iu),gu=(Iu=u8n$2())=>{tt=Ys(u8fr$2([0]),Iu),d=Ys(),Iu.length!==0&&(tt=Ys(u8fr$2([1]),Iu),d=Ys())},xu=()=>{if(nt++>=1e3)throw new Error("drbg: tried 1000 values");let Iu=0;const Xu=[];for(;Iu{$a(),gu(Iu);let i0;for(;!(i0=Xu(xu()));)gu();return $a(),i0}}const validatorFns$2={bigint:o=>typeof o=="bigint",function:o=>typeof o=="function",boolean:o=>typeof o=="boolean",string:o=>typeof o=="string",stringOrUint8Array:o=>typeof o=="string"||isBytes$6(o),isSafeInteger:o=>Number.isSafeInteger(o),array:o=>Array.isArray(o),field:(o,a)=>a.Fp.isValid(o),hash:o=>typeof o=="function"&&Number.isSafeInteger(o.outputLen)};function validateObject$2(o,a,c={}){const d=(tt,nt,$a)=>{const Ys=validatorFns$2[nt];if(typeof Ys!="function")throw new Error(`Invalid validator "${nt}", expected function`);const gu=o[tt];if(!($a&&gu===void 0)&&!Ys(gu,o))throw new Error(`Invalid param ${String(tt)}=${gu} (${typeof gu}), expected ${nt}`)};for(const[tt,nt]of Object.entries(a))d(tt,nt,!1);for(const[tt,nt]of Object.entries(c))d(tt,nt,!0);return o}const ut$4=Object.freeze(Object.defineProperty({__proto__:null,abytes,bitGet:bitGet$2,bitLen:bitLen$2,bitMask:bitMask$2,bitSet:bitSet$2,bytesToHex:bytesToHex$2,bytesToNumberBE:bytesToNumberBE$2,bytesToNumberLE:bytesToNumberLE$2,concatBytes:concatBytes$3,createHmacDrbg:createHmacDrbg$2,ensureBytes:ensureBytes$3,equalBytes:equalBytes$2,hexToBytes:hexToBytes$3,hexToNumber:hexToNumber$2,isBytes:isBytes$6,numberToBytesBE:numberToBytesBE$2,numberToBytesLE:numberToBytesLE$2,numberToHexUnpadded:numberToHexUnpadded$2,numberToVarBytesBE:numberToVarBytesBE$2,utf8ToBytes:utf8ToBytes$3,validateObject:validateObject$2},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$e=BigInt(0),_1n$g=BigInt(1),_2n$b=BigInt(2),_3n$4=BigInt(3),_4n$3=BigInt(4),_5n$3=BigInt(5),_8n$4=BigInt(8);BigInt(9);BigInt(16);function mod$2(o,a){const c=o%a;return c>=_0n$e?c:a+c}function pow$4(o,a,c){if(c<=_0n$e||a<_0n$e)throw new Error("Expected power/modulo > 0");if(c===_1n$g)return _0n$e;let d=_1n$g;for(;a>_0n$e;)a&_1n$g&&(d=d*o%c),o=o*o%c,a>>=_1n$g;return d}function pow2$1(o,a,c){let d=o;for(;a-- >_0n$e;)d*=d,d%=c;return d}function invert$2(o,a){if(o===_0n$e||a<=_0n$e)throw new Error(`invert: expected positive integers, got n=${o} mod=${a}`);let c=mod$2(o,a),d=a,tt=_0n$e,nt=_1n$g;for(;c!==_0n$e;){const Ys=d/c,gu=d%c,xu=tt-nt*Ys;d=c,c=gu,tt=nt,nt=xu}if(d!==_1n$g)throw new Error("invert: does not exist");return mod$2(tt,a)}function tonelliShanks$2(o){const a=(o-_1n$g)/_2n$b;let c,d,tt;for(c=o-_1n$g,d=0;c%_2n$b===_0n$e;c/=_2n$b,d++);for(tt=_2n$b;tt(mod$2(o,a)&_1n$g)===_1n$g,FIELD_FIELDS$2=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField$2(o){const a={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},c=FIELD_FIELDS$2.reduce((d,tt)=>(d[tt]="function",d),a);return validateObject$2(o,c)}function FpPow$2(o,a,c){if(c<_0n$e)throw new Error("Expected power > 0");if(c===_0n$e)return o.ONE;if(c===_1n$g)return a;let d=o.ONE,tt=a;for(;c>_0n$e;)c&_1n$g&&(d=o.mul(d,tt)),tt=o.sqr(tt),c>>=_1n$g;return d}function FpInvertBatch$2(o,a){const c=new Array(a.length),d=a.reduce((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=nt,o.mul(nt,$a)),o.ONE),tt=o.inv(d);return a.reduceRight((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=o.mul(nt,c[Ys]),o.mul(nt,$a)),tt),c}function nLength$2(o,a){const c=a!==void 0?a:o.toString(2).length,d=Math.ceil(c/8);return{nBitLength:c,nByteLength:d}}function Field$2(o,a,c=!1,d={}){if(o<=_0n$e)throw new Error(`Expected Field ORDER > 0, got ${o}`);const{nBitLength:tt,nByteLength:nt}=nLength$2(o,a);if(nt>2048)throw new Error("Field lengths over 2048 bytes are not supported");const $a=FpSqrt$2(o),Ys=Object.freeze({ORDER:o,BITS:tt,BYTES:nt,MASK:bitMask$2(tt),ZERO:_0n$e,ONE:_1n$g,create:gu=>mod$2(gu,o),isValid:gu=>{if(typeof gu!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof gu}`);return _0n$e<=gu&&gugu===_0n$e,isOdd:gu=>(gu&_1n$g)===_1n$g,neg:gu=>mod$2(-gu,o),eql:(gu,xu)=>gu===xu,sqr:gu=>mod$2(gu*gu,o),add:(gu,xu)=>mod$2(gu+xu,o),sub:(gu,xu)=>mod$2(gu-xu,o),mul:(gu,xu)=>mod$2(gu*xu,o),pow:(gu,xu)=>FpPow$2(Ys,gu,xu),div:(gu,xu)=>mod$2(gu*invert$2(xu,o),o),sqrN:gu=>gu*gu,addN:(gu,xu)=>gu+xu,subN:(gu,xu)=>gu-xu,mulN:(gu,xu)=>gu*xu,inv:gu=>invert$2(gu,o),sqrt:d.sqrt||(gu=>$a(Ys,gu)),invertBatch:gu=>FpInvertBatch$2(Ys,gu),cmov:(gu,xu,$u)=>$u?xu:gu,toBytes:gu=>c?numberToBytesLE$2(gu,nt):numberToBytesBE$2(gu,nt),fromBytes:gu=>{if(gu.length!==nt)throw new Error(`Fp.fromBytes: expected ${nt}, got ${gu.length}`);return c?bytesToNumberLE$2(gu):bytesToNumberBE$2(gu)}});return Object.freeze(Ys)}function FpSqrtEven$1(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?o.neg(c):c}function getFieldBytesLength$2(o){if(typeof o!="bigint")throw new Error("field order must be bigint");const a=o.toString(2).length;return Math.ceil(a/8)}function getMinHashLength$2(o){const a=getFieldBytesLength$2(o);return a+Math.ceil(a/2)}function mapHashToField$2(o,a,c=!1){const d=o.length,tt=getFieldBytesLength$2(a),nt=getMinHashLength$2(a);if(d<16||d1024)throw new Error(`expected ${nt}-1024 bytes of input, got ${d}`);const $a=c?bytesToNumberBE$2(o):bytesToNumberLE$2(o),Ys=mod$2($a,a-_1n$g)+_1n$g;return c?numberToBytesLE$2(Ys,tt):numberToBytesBE$2(Ys,tt)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$d=BigInt(0),_1n$f=BigInt(1);function wNAF$2(o,a){const c=(tt,nt)=>{const $a=nt.negate();return tt?$a:nt},d=tt=>{const nt=Math.ceil(a/tt)+1,$a=2**(tt-1);return{windows:nt,windowSize:$a}};return{constTimeNegate:c,unsafeLadder(tt,nt){let $a=o.ZERO,Ys=tt;for(;nt>_0n$d;)nt&_1n$f&&($a=$a.add(Ys)),Ys=Ys.double(),nt>>=_1n$f;return $a},precomputeWindow(tt,nt){const{windows:$a,windowSize:Ys}=d(nt),gu=[];let xu=tt,$u=xu;for(let Iu=0;Iu<$a;Iu++){$u=xu,gu.push($u);for(let Xu=1;Xu>=i0,A0>gu&&(A0-=Xu,$a+=_1n$f);const $0=w0,O0=w0+Math.abs(A0)-1,L0=p0%2!==0,q0=A0<0;A0===0?$u=$u.add(c(L0,nt[$0])):xu=xu.add(c(q0,nt[O0]))}return{p:xu,f:$u}},wNAFCached(tt,nt,$a,Ys){const gu=tt._WINDOW_SIZE||1;let xu=nt.get(tt);return xu||(xu=this.precomputeWindow(tt,gu),gu!==1&&nt.set(tt,Ys(xu))),this.wNAF(gu,xu,$a)}}}function validateBasic$2(o){return validateField$2(o.Fp),validateObject$2(o,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...nLength$2(o.n,o.nBitLength),...o,p:o.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$c=BigInt(0),_1n$e=BigInt(1),_2n$a=BigInt(2),_8n$3=BigInt(8),VERIFY_DEFAULT$1={zip215:!0};function validateOpts$6(o){const a=validateBasic$2(o);return validateObject$2(o,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...a})}function twistedEdwards$1(o){const a=validateOpts$6(o),{Fp:c,n:d,prehash:tt,hash:nt,randomBytes:$a,nByteLength:Ys,h:gu}=a,xu=_2n$a<{try{return{isValid:!0,value:c.sqrt(m1*c.inv(c1))}}catch{return{isValid:!1,value:_0n$c}}}),Xu=a.adjustScalarBytes||(m1=>m1),i0=a.domain||((m1,c1,G0)=>{if(c1.length||G0)throw new Error("Contexts/pre-hash are not supported");return m1}),p0=m1=>typeof m1=="bigint"&&_0n$cp0(m1)&&p0(c1)&&m1m1===_0n$c||w0(m1,xu);function $0(m1,c1){if(w0(m1,c1))return m1;throw new Error(`Expected valid scalar < ${c1}, got ${typeof m1} ${m1}`)}function O0(m1){return m1===_0n$c?m1:$0(m1,d)}const L0=new Map;function q0(m1){if(!(m1 instanceof F0))throw new Error("ExtendedPoint expected")}class F0{constructor(c1,G0,o1,d1){if(this.ex=c1,this.ey=G0,this.ez=o1,this.et=d1,!A0(c1))throw new Error("x required");if(!A0(G0))throw new Error("y required");if(!A0(o1))throw new Error("z required");if(!A0(d1))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(c1){if(c1 instanceof F0)throw new Error("extended point not allowed");const{x:G0,y:o1}=c1||{};if(!A0(G0)||!A0(o1))throw new Error("invalid affine point");return new F0(G0,o1,_1n$e,$u(G0*o1))}static normalizeZ(c1){const G0=c.invertBatch(c1.map(o1=>o1.ez));return c1.map((o1,d1)=>o1.toAffine(G0[d1])).map(F0.fromAffine)}_setWindowSize(c1){this._WINDOW_SIZE=c1,L0.delete(this)}assertValidity(){const{a:c1,d:G0}=a;if(this.is0())throw new Error("bad point: ZERO");const{ex:o1,ey:d1,ez:R1,et:O1}=this,Q1=$u(o1*o1),rv=$u(d1*d1),D1=$u(R1*R1),ev=$u(D1*D1),Mv=$u(Q1*c1),Zv=$u(D1*$u(Mv+rv)),fv=$u(ev+$u(G0*$u(Q1*rv)));if(Zv!==fv)throw new Error("bad point: equation left != right (1)");const cv=$u(o1*d1),ly=$u(R1*O1);if(cv!==ly)throw new Error("bad point: equation left != right (2)")}equals(c1){q0(c1);const{ex:G0,ey:o1,ez:d1}=this,{ex:R1,ey:O1,ez:Q1}=c1,rv=$u(G0*Q1),D1=$u(R1*d1),ev=$u(o1*Q1),Mv=$u(O1*d1);return rv===D1&&ev===Mv}is0(){return this.equals(F0.ZERO)}negate(){return new F0($u(-this.ex),this.ey,this.ez,$u(-this.et))}double(){const{a:c1}=a,{ex:G0,ey:o1,ez:d1}=this,R1=$u(G0*G0),O1=$u(o1*o1),Q1=$u(_2n$a*$u(d1*d1)),rv=$u(c1*R1),D1=G0+o1,ev=$u($u(D1*D1)-R1-O1),Mv=rv+O1,Zv=Mv-Q1,fv=rv-O1,cv=$u(ev*Zv),ly=$u(Mv*fv),Cy=$u(ev*fv),Ly=$u(Zv*Mv);return new F0(cv,ly,Ly,Cy)}add(c1){q0(c1);const{a:G0,d:o1}=a,{ex:d1,ey:R1,ez:O1,et:Q1}=this,{ex:rv,ey:D1,ez:ev,et:Mv}=c1;if(G0===BigInt(-1)){const vw=$u((R1-d1)*(D1+rv)),Hw=$u((R1+d1)*(D1-rv)),uw=$u(Hw-vw);if(uw===_0n$c)return this.double();const Nw=$u(O1*_2n$a*Mv),lw=$u(Q1*_2n$a*ev),Lw=lw+Nw,zw=Hw+vw,A2=lw-Nw,kv=$u(Lw*uw),Y1=$u(zw*A2),tv=$u(Lw*A2),Yv=$u(uw*zw);return new F0(kv,Y1,Yv,tv)}const Zv=$u(d1*rv),fv=$u(R1*D1),cv=$u(Q1*o1*Mv),ly=$u(O1*ev),Cy=$u((d1+R1)*(rv+D1)-Zv-fv),Ly=ly-cv,Hy=ly+cv,t2=$u(fv-G0*Zv),C2=$u(Cy*Ly),Dy=$u(Hy*t2),jw=$u(Cy*t2),pw=$u(Ly*Hy);return new F0(C2,Dy,pw,jw)}subtract(c1){return this.add(c1.negate())}wNAF(c1){return E1.wNAFCached(this,L0,c1,F0.normalizeZ)}multiply(c1){const{p:G0,f:o1}=this.wNAF($0(c1,d));return F0.normalizeZ([G0,o1])[0]}multiplyUnsafe(c1){let G0=O0(c1);return G0===_0n$c?g1:this.equals(g1)||G0===_1n$e?this:this.equals(u1)?this.wNAF(G0).p:E1.unsafeLadder(this,G0)}isSmallOrder(){return this.multiplyUnsafe(gu).is0()}isTorsionFree(){return E1.unsafeLadder(this,d).is0()}toAffine(c1){const{ex:G0,ey:o1,ez:d1}=this,R1=this.is0();c1==null&&(c1=R1?_8n$3:c.inv(d1));const O1=$u(G0*c1),Q1=$u(o1*c1),rv=$u(d1*c1);if(R1)return{x:_0n$c,y:_1n$e};if(rv!==_1n$e)throw new Error("invZ was invalid");return{x:O1,y:Q1}}clearCofactor(){const{h:c1}=a;return c1===_1n$e?this:this.multiplyUnsafe(c1)}static fromHex(c1,G0=!1){const{d:o1,a:d1}=a,R1=c.BYTES;c1=ensureBytes$3("pointHex",c1,R1);const O1=c1.slice(),Q1=c1[R1-1];O1[R1-1]=Q1&-129;const rv=bytesToNumberLE$2(O1);rv===_0n$c||(G0?$0(rv,xu):$0(rv,c.ORDER));const D1=$u(rv*rv),ev=$u(D1-_1n$e),Mv=$u(o1*D1-d1);let{isValid:Zv,value:fv}=Iu(ev,Mv);if(!Zv)throw new Error("Point.fromHex: invalid y coordinate");const cv=(fv&_1n$e)===_1n$e,ly=(Q1&128)!==0;if(!G0&&fv===_0n$c&&ly)throw new Error("Point.fromHex: x=0 and x_0=1");return ly!==cv&&(fv=$u(-fv)),F0.fromAffine({x:fv,y:rv})}static fromPrivateKey(c1){return j1(c1).point}toRawBytes(){const{x:c1,y:G0}=this.toAffine(),o1=numberToBytesLE$2(G0,c.BYTES);return o1[o1.length-1]|=c1&_1n$e?128:0,o1}toHex(){return bytesToHex$2(this.toRawBytes())}}F0.BASE=new F0(a.Gx,a.Gy,_1n$e,$u(a.Gx*a.Gy)),F0.ZERO=new F0(_0n$c,_1n$e,_1n$e,_0n$c);const{BASE:u1,ZERO:g1}=F0,E1=wNAF$2(F0,Ys*8);function B1(m1){return mod$2(m1,d)}function lv(m1){return B1(bytesToNumberLE$2(m1))}function j1(m1){const c1=Ys;m1=ensureBytes$3("private key",m1,c1);const G0=ensureBytes$3("hashed private key",nt(m1),2*c1),o1=Xu(G0.slice(0,c1)),d1=G0.slice(c1,2*c1),R1=lv(o1),O1=u1.multiply(R1),Q1=O1.toRawBytes();return{head:o1,prefix:d1,scalar:R1,point:O1,pointBytes:Q1}}function r1(m1){return j1(m1).pointBytes}function t1(m1=new Uint8Array,...c1){const G0=concatBytes$3(...c1);return lv(nt(i0(G0,ensureBytes$3("context",m1),!!tt)))}function D0(m1,c1,G0={}){m1=ensureBytes$3("message",m1),tt&&(m1=tt(m1));const{prefix:o1,scalar:d1,pointBytes:R1}=j1(c1),O1=t1(G0.context,o1,m1),Q1=u1.multiply(O1).toRawBytes(),rv=t1(G0.context,Q1,R1,m1),D1=B1(O1+rv*d1);O0(D1);const ev=concatBytes$3(Q1,numberToBytesLE$2(D1,c.BYTES));return ensureBytes$3("result",ev,Ys*2)}const Z0=VERIFY_DEFAULT$1;function f1(m1,c1,G0,o1=Z0){const{context:d1,zip215:R1}=o1,O1=c.BYTES;m1=ensureBytes$3("signature",m1,2*O1),c1=ensureBytes$3("message",c1),tt&&(c1=tt(c1));const Q1=bytesToNumberLE$2(m1.slice(O1,2*O1));let rv,D1,ev;try{rv=F0.fromHex(G0,R1),D1=F0.fromHex(m1.slice(0,O1),R1),ev=u1.multiplyUnsafe(Q1)}catch{return!1}if(!R1&&rv.isSmallOrder())return!1;const Mv=t1(d1,D1.toRawBytes(),rv.toRawBytes(),c1);return D1.add(rv.multiplyUnsafe(Mv)).subtract(ev).clearCofactor().equals(F0.ZERO)}return u1._setWindowSize(8),{CURVE:a,getPublicKey:r1,sign:D0,verify:f1,ExtendedPoint:F0,utils:{getExtendedPublicKey:j1,randomPrivateKey:()=>$a(c.BYTES),precompute(m1=8,c1=F0.BASE){return c1._setWindowSize(m1),c1.multiply(BigInt(3)),c1}}}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ED25519_P=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),ED25519_SQRT_M1=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");BigInt(0);const _1n$d=BigInt(1),_2n$9=BigInt(2),_5n$2=BigInt(5),_10n=BigInt(10),_20n=BigInt(20),_40n=BigInt(40),_80n=BigInt(80);function ed25519_pow_2_252_3(o){const a=ED25519_P,d=o*o%a*o%a,tt=pow2$1(d,_2n$9,a)*d%a,nt=pow2$1(tt,_1n$d,a)*o%a,$a=pow2$1(nt,_5n$2,a)*nt%a,Ys=pow2$1($a,_10n,a)*$a%a,gu=pow2$1(Ys,_20n,a)*Ys%a,xu=pow2$1(gu,_40n,a)*gu%a,$u=pow2$1(xu,_80n,a)*xu%a,Iu=pow2$1($u,_80n,a)*xu%a,Xu=pow2$1(Iu,_10n,a)*$a%a;return{pow_p_5_8:pow2$1(Xu,_2n$9,a)*o%a,b2:d}}function adjustScalarBytes(o){return o[0]&=248,o[31]&=127,o[31]|=64,o}function uvRatio(o,a){const c=ED25519_P,d=mod$2(a*a*a,c),tt=mod$2(d*d*a,c),nt=ed25519_pow_2_252_3(o*tt).pow_p_5_8;let $a=mod$2(o*d*nt,c);const Ys=mod$2(a*$a*$a,c),gu=$a,xu=mod$2($a*ED25519_SQRT_M1,c),$u=Ys===o,Iu=Ys===mod$2(-o,c),Xu=Ys===mod$2(-o*ED25519_SQRT_M1,c);return $u&&($a=gu),(Iu||Xu)&&($a=xu),isNegativeLE$1($a,c)&&($a=mod$2(-$a,c)),{isValid:$u||Iu,value:$a}}const Fp$2=Field$2(ED25519_P,void 0,!0),ed25519Defaults={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Fp$2,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:sha512$3,randomBytes:randomBytes$5,adjustScalarBytes,uvRatio},ed25519$1=twistedEdwards$1(ed25519Defaults);function ed25519_domain(o,a,c){if(a.length>255)throw new Error("Context is too big");return concatBytes$4(utf8ToBytes$4("SigEd25519 no Ed25519 collisions"),new Uint8Array([c?1:0,a.length]),a,o)}({...ed25519Defaults});({...ed25519Defaults});const ELL2_C1=(Fp$2.ORDER+BigInt(3))/BigInt(8);Fp$2.pow(_2n$9,ELL2_C1);Fp$2.sqrt(Fp$2.neg(Fp$2.ONE));(Fp$2.ORDER-BigInt(5))/BigInt(8);BigInt(486662);FpSqrtEven$1(Fp$2,Fp$2.neg(BigInt(486664)));BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const PUBLIC_KEY_BYTE_LENGTH=32,PRIVATE_KEY_BYTE_LENGTH=64,KEYS_BYTE_LENGTH=32;function generateKey$2(){const o=ed25519$1.utils.randomPrivateKey(),a=ed25519$1.getPublicKey(o);return{privateKey:concatKeys(o,a),publicKey:a}}function generateKeyFromSeed(o){if(o.length!==KEYS_BYTE_LENGTH)throw new TypeError('"seed" must be 32 bytes in length.');if(!(o instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');const a=o,c=ed25519$1.getPublicKey(a);return{privateKey:concatKeys(a,c),publicKey:c}}function hashAndSign$2(o,a){const c=o.subarray(0,KEYS_BYTE_LENGTH);return ed25519$1.sign(a instanceof Uint8Array?a:a.subarray(),c)}function hashAndVerify$2(o,a,c){return ed25519$1.verify(a,c instanceof Uint8Array?c:c.subarray(),o)}function concatKeys(o,a){const c=new Uint8Array(PRIVATE_KEY_BYTE_LENGTH);for(let d=0;dNumber.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function encodeUint8Array(o,a,c=0){switch(encodingLength(o)){case 8:a[c++]=o&255|MSB,o/=128;case 7:a[c++]=o&255|MSB,o/=128;case 6:a[c++]=o&255|MSB,o/=128;case 5:a[c++]=o&255|MSB,o/=128;case 4:a[c++]=o&255|MSB,o>>>=7;case 3:a[c++]=o&255|MSB,o>>>=7;case 2:a[c++]=o&255|MSB,o>>>=7;case 1:{a[c++]=o&255,o>>>=7;break}default:throw new Error("unreachable")}return a}function decodeUint8Array(o,a){let c=o[a],d=0;if(d+=c&REST,c>>31>0){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(c+d*4294967296)}return this.lo+this.hi*4294967296}toBigInt(a=!1){if(a)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(BigInt(c)+(BigInt(d)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(a=!1){return this.toBigInt(a).toString()}zzEncode(){const a=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^a)>>>0,this.lo=(this.lo<<1^a)>>>0,this}zzDecode(){const a=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^a)>>>0,this.hi=(this.hi>>>1^a)>>>0,this}length(){const a=this.lo,c=(this.lo>>>28|this.hi<<4)>>>0,d=this.hi>>>24;return d===0?c===0?a<16384?a<128?1:2:a<2097152?3:4:c<16384?c<128?5:6:c<2097152?7:8:d<128?9:10}static fromBigInt(a){if(a===0n)return zero$2;if(aMIN_SAFE_NUMBER_INTEGER)return this.fromNumber(Number(a));const c=a<0n;c&&(a=-a);let d=a>>32n,tt=a-(d<<32n);return c&&(d=~d|0n,tt=~tt|0n,++tt>TWO_32&&(tt=0n,++d>TWO_32&&(d=0n))),new LongBits(Number(tt),Number(d))}static fromNumber(a){if(a===0)return zero$2;const c=a<0;c&&(a=-a);let d=a>>>0,tt=(a-d)/4294967296>>>0;return c&&(tt=~tt>>>0,d=~d>>>0,++d>4294967295&&(d=0,++tt>4294967295&&(tt=0))),new LongBits(d,tt)}static from(a){return typeof a=="number"?LongBits.fromNumber(a):typeof a=="bigint"?LongBits.fromBigInt(a):typeof a=="string"?LongBits.fromBigInt(BigInt(a)):a.low!=null||a.high!=null?new LongBits(a.low>>>0,a.high>>>0):zero$2}}const zero$2=new LongBits(0,0);zero$2.toBigInt=function(){return 0n};zero$2.zzEncode=zero$2.zzDecode=function(){return this};zero$2.length=function(){return 1};const TWO_32=4294967296n;function length$1(o){let a=0,c=0;for(let d=0;d191&&Ys<224?nt[$a++]=(Ys&31)<<6|o[a++]&63:Ys>239&&Ys<365?(Ys=((Ys&7)<<18|(o[a++]&63)<<12|(o[a++]&63)<<6|o[a++]&63)-65536,nt[$a++]=55296+(Ys>>10),nt[$a++]=56320+(Ys&1023)):nt[$a++]=(Ys&15)<<12|(o[a++]&63)<<6|o[a++]&63,$a>8191&&((tt??(tt=[])).push(String.fromCharCode.apply(String,nt)),$a=0);return tt!=null?($a>0&&tt.push(String.fromCharCode.apply(String,nt.slice(0,$a))),tt.join("")):String.fromCharCode.apply(String,nt.slice(0,$a))}function write$1(o,a,c){const d=c;let tt,nt;for(let $a=0;$a>6|192,a[c++]=tt&63|128):(tt&64512)===55296&&((nt=o.charCodeAt($a+1))&64512)===56320?(tt=65536+((tt&1023)<<10)+(nt&1023),++$a,a[c++]=tt>>18|240,a[c++]=tt>>12&63|128,a[c++]=tt>>6&63|128,a[c++]=tt&63|128):(a[c++]=tt>>12|224,a[c++]=tt>>6&63|128,a[c++]=tt&63|128);return c-d}function indexOutOfRange(o,a){return RangeError(`index out of range: ${o.pos} + ${a??1} > ${o.len}`)}function readFixed32End(o,a){return(o[a-4]|o[a-3]<<8|o[a-2]<<16|o[a-1]<<24)>>>0}class Uint8ArrayReader{constructor(a){aw(this,"buf");aw(this,"pos");aw(this,"len");aw(this,"_slice",Uint8Array.prototype.subarray);this.buf=a,this.pos=0,this.len=a.length}uint32(){let a=4294967295;if(a=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(a=(a|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return a;if((this.pos+=5)>this.len)throw this.pos=this.len,indexOutOfRange(this,10);return a}int32(){return this.uint32()|0}sint32(){const a=this.uint32();return a>>>1^-(a&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);const a=readFloatLE(this.buf,this.pos);return this.pos+=4,a}double(){if(this.pos+8>this.len)throw indexOutOfRange(this,4);const a=readDoubleLE(this.buf,this.pos);return this.pos+=8,a}bytes(){const a=this.uint32(),c=this.pos,d=this.pos+a;if(d>this.len)throw indexOutOfRange(this,a);return this.pos+=a,c===d?new Uint8Array(0):this.buf.subarray(c,d)}string(){const a=this.bytes();return read$1(a,0,a.length)}skip(a){if(typeof a=="number"){if(this.pos+a>this.len)throw indexOutOfRange(this,a);this.pos+=a}else do if(this.pos>=this.len)throw indexOutOfRange(this);while(this.buf[this.pos++]&128);return this}skipType(a){switch(a){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(a=this.uint32()&7)!==4;)this.skipType(a);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${a} at offset ${this.pos}`)}return this}readLongVarint(){const a=new LongBits(0,0);let c=0;if(this.len-this.pos>4){for(;c<4;++c)if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a;if(a.lo=(a.lo|(this.buf[this.pos]&127)<<28)>>>0,a.hi=(a.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return a;c=0}else{for(;c<3;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}return a.lo=(a.lo|(this.buf[this.pos++]&127)<>>0,a}if(this.len-this.pos>4){for(;c<5;++c)if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}else for(;c<5;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw indexOutOfRange(this,8);const a=readFixed32End(this.buf,this.pos+=4),c=readFixed32End(this.buf,this.pos+=4);return new LongBits(a,c)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){const a=decodeUint8Array(this.buf,this.pos);return this.pos+=encodingLength(a),a}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}}function createReader(o){return new Uint8ArrayReader(o instanceof Uint8Array?o:o.subarray())}function decodeMessage(o,a,c){const d=createReader(o);return a.decode(d,void 0,c)}function pool(o){let d,tt=8192;return function($a){if($a<1||$a>4096)return allocUnsafe($a);tt+$a>8192&&(d=allocUnsafe(8192),tt=0);const Ys=d.subarray(tt,tt+=$a);return tt&7&&(tt=(tt|7)+1),Ys}}let Op$1=class{constructor(a,c,d){aw(this,"fn");aw(this,"len");aw(this,"next");aw(this,"val");this.fn=a,this.len=c,this.next=void 0,this.val=d}};function noop$b(){}class State{constructor(a){aw(this,"head");aw(this,"tail");aw(this,"len");aw(this,"next");this.head=a.head,this.tail=a.tail,this.len=a.len,this.next=a.states}}const bufferPool=pool();function alloc$1(o){return globalThis.Buffer!=null?allocUnsafe(o):bufferPool(o)}class Uint8ArrayWriter{constructor(){aw(this,"len");aw(this,"head");aw(this,"tail");aw(this,"states");this.len=0,this.head=new Op$1(noop$b,0,0),this.tail=this.head,this.states=null}_push(a,c,d){return this.tail=this.tail.next=new Op$1(a,c,d),this.len+=c,this}uint32(a){return this.len+=(this.tail=this.tail.next=new VarintOp((a=a>>>0)<128?1:a<16384?2:a<2097152?3:a<268435456?4:5,a)).len,this}int32(a){return a<0?this._push(writeVarint64,10,LongBits.fromNumber(a)):this.uint32(a)}sint32(a){return this.uint32((a<<1^a>>31)>>>0)}uint64(a){const c=LongBits.fromBigInt(a);return this._push(writeVarint64,c.length(),c)}uint64Number(a){return this._push(encodeUint8Array,encodingLength(a),a)}uint64String(a){return this.uint64(BigInt(a))}int64(a){return this.uint64(a)}int64Number(a){return this.uint64Number(a)}int64String(a){return this.uint64String(a)}sint64(a){const c=LongBits.fromBigInt(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64Number(a){const c=LongBits.fromNumber(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64String(a){return this.sint64(BigInt(a))}bool(a){return this._push(writeByte,1,a?1:0)}fixed32(a){return this._push(writeFixed32,4,a>>>0)}sfixed32(a){return this.fixed32(a)}fixed64(a){const c=LongBits.fromBigInt(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64Number(a){const c=LongBits.fromNumber(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64String(a){return this.fixed64(BigInt(a))}sfixed64(a){return this.fixed64(a)}sfixed64Number(a){return this.fixed64Number(a)}sfixed64String(a){return this.fixed64String(a)}float(a){return this._push(writeFloatLE,4,a)}double(a){return this._push(writeDoubleLE,8,a)}bytes(a){const c=a.length>>>0;return c===0?this._push(writeByte,1,0):this.uint32(c)._push(writeBytes,c,a)}string(a){const c=length$1(a);return c!==0?this.uint32(c)._push(write$1,c,a):this._push(writeByte,1,0)}fork(){return this.states=new State(this),this.head=this.tail=new Op$1(noop$b,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Op$1(noop$b,0,0),this.len=0),this}ldelim(){const a=this.head,c=this.tail,d=this.len;return this.reset().uint32(d),d!==0&&(this.tail.next=a.next,this.tail=c,this.len+=d),this}finish(){let a=this.head.next;const c=alloc$1(this.len);let d=0;for(;a!=null;)a.fn(a.val,c,d),d+=a.len,a=a.next;return c}}function writeByte(o,a,c){a[c]=o&255}function writeVarint32(o,a,c){for(;o>127;)a[c++]=o&127|128,o>>>=7;a[c]=o}class VarintOp extends Op$1{constructor(c,d){super(writeVarint32,c,d);aw(this,"next");this.next=void 0}}function writeVarint64(o,a,c){for(;o.hi!==0;)a[c++]=o.lo&127|128,o.lo=(o.lo>>>7|o.hi<<25)>>>0,o.hi>>>=7;for(;o.lo>127;)a[c++]=o.lo&127|128,o.lo=o.lo>>>7;a[c++]=o.lo}function writeFixed32(o,a,c){a[c]=o&255,a[c+1]=o>>>8&255,a[c+2]=o>>>16&255,a[c+3]=o>>>24}function writeBytes(o,a,c){a.set(o,c)}globalThis.Buffer!=null&&(Uint8ArrayWriter.prototype.bytes=function(o){const a=o.length>>>0;return this.uint32(a),a>0&&this._push(writeBytesBuffer,a,o),this},Uint8ArrayWriter.prototype.string=function(o){const a=globalThis.Buffer.byteLength(o);return this.uint32(a),a>0&&this._push(writeStringBuffer,a,o),this});function writeBytesBuffer(o,a,c){a.set(o,c)}function writeStringBuffer(o,a,c){o.length<40?write$1(o,a,c):a.utf8Write!=null?a.utf8Write(o,c):a.set(fromString(o),c)}function createWriter(){return new Uint8ArrayWriter}function encodeMessage(o,a){const c=createWriter();return a.encode(o,c,{lengthDelimited:!1}),c.finish()}var CODEC_TYPES;(function(o){o[o.VARINT=0]="VARINT",o[o.BIT64=1]="BIT64",o[o.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",o[o.START_GROUP=3]="START_GROUP",o[o.END_GROUP=4]="END_GROUP",o[o.BIT32=5]="BIT32"})(CODEC_TYPES||(CODEC_TYPES={}));function createCodec(o,a,c,d){return{name:o,type:a,encode:c,decode:d}}function enumeration(o){function a(tt){if(o[tt.toString()]==null)throw new Error("Invalid enum value");return o[tt]}const c=function(nt,$a){const Ys=a(nt);$a.int32(Ys)},d=function(nt){const $a=nt.int32();return a($a)};return createCodec("enum",CODEC_TYPES.VARINT,c,d)}function message(o,a){return createCodec("message",CODEC_TYPES.LENGTH_DELIMITED,o,a)}var KeyType;(function(o){o.RSA="RSA",o.Ed25519="Ed25519",o.Secp256k1="Secp256k1"})(KeyType||(KeyType={}));var __KeyTypeValues;(function(o){o[o.RSA=0]="RSA",o[o.Ed25519=1]="Ed25519",o[o.Secp256k1=2]="Secp256k1"})(__KeyTypeValues||(__KeyTypeValues={}));(function(o){o.codec=()=>enumeration(__KeyTypeValues)})(KeyType||(KeyType={}));var PublicKey$2;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PublicKey$2||(PublicKey$2={}));var PrivateKey;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PrivateKey||(PrivateKey={}));class Ed25519PublicKey{constructor(a){aw(this,"_key");this._key=ensureKey(a,PUBLIC_KEY_BYTE_LENGTH)}verify(a,c){return hashAndVerify$2(this._key,c,a)}marshal(){return this._key}get bytes(){return PublicKey$2.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class Ed25519PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=ensureKey(a,PRIVATE_KEY_BYTE_LENGTH),this._publicKey=ensureKey(c,PUBLIC_KEY_BYTE_LENGTH)}sign(a){return hashAndSign$2(this._key,a)}get public(){return new Ed25519PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}async id(){const a=identity$2.digest(this.public.bytes);return base58btc.encode(a.bytes).substring(1)}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalEd25519PrivateKey(o){if(o.length>PRIVATE_KEY_BYTE_LENGTH){o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH+PUBLIC_KEY_BYTE_LENGTH);const d=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),tt=o.subarray(PRIVATE_KEY_BYTE_LENGTH,o.length);return new Ed25519PrivateKey(d,tt)}o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH);const a=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),c=o.subarray(PUBLIC_KEY_BYTE_LENGTH);return new Ed25519PrivateKey(a,c)}function unmarshalEd25519PublicKey(o){return o=ensureKey(o,PUBLIC_KEY_BYTE_LENGTH),new Ed25519PublicKey(o)}async function generateKeyPair$3(){const{privateKey:o,publicKey:a}=generateKey$2();return new Ed25519PrivateKey(o,a)}async function generateKeyPairFromSeed(o){const{privateKey:a,publicKey:c}=generateKeyFromSeed(o);return new Ed25519PrivateKey(a,c)}function ensureKey(o,a){if(o=Uint8Array.from(o??[]),o.length!==a)throw new CodeError(`Key must be a Uint8Array of length ${a}, got ${o.length}`,"ERR_INVALID_KEY_TYPE");return o}const Ed25519=Object.freeze(Object.defineProperty({__proto__:null,Ed25519PrivateKey,Ed25519PublicKey,generateKeyPair:generateKeyPair$3,generateKeyPairFromSeed,unmarshalEd25519PrivateKey,unmarshalEd25519PublicKey},Symbol.toStringTag,{value:"Module"}));function toString$b(o,a="utf8"){const c=BASES[a];if(c==null)throw new Error(`Unsupported encoding "${a}"`);return c.encoder.encode(o).substring(1)}function randomBytes$4(o){if(isNaN(o)||o<=0)throw new CodeError("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return randomBytes$5(o)}let HMAC$1=class extends Hash$9{constructor(a,c){super(),this.finished=!1,this.destroyed=!1,hash$a(a);const d=toBytes$1(c);if(this.iHash=a.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const tt=this.blockLen,nt=new Uint8Array(tt);nt.set(d.length>tt?a.create().update(d).digest():d);for(let $a=0;$anew HMAC$1(o,a).update(c).digest();hmac$2.create=(o,a)=>new HMAC$1(o,a);function pbkdf2Init(o,a,c,d){hash$a(o);const tt=checkOpts({dkLen:32,asyncTick:10},d),{c:nt,dkLen:$a,asyncTick:Ys}=tt;if(number$3(nt),number$3($a),number$3(Ys),nt<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const gu=toBytes$1(a),xu=toBytes$1(c),$u=new Uint8Array($a),Iu=hmac$2.create(o,gu),Xu=Iu._cloneInto().update(xu);return{c:nt,dkLen:$a,asyncTick:Ys,DK:$u,PRF:Iu,PRFSalt:Xu}}function pbkdf2Output(o,a,c,d,tt){return o.destroy(),a.destroy(),d&&d.destroy(),tt.fill(0),c}async function pbkdf2Async(o,a,c,d){const{c:tt,dkLen:nt,asyncTick:$a,DK:Ys,PRF:gu,PRFSalt:xu}=pbkdf2Init(o,a,c,d);let $u;const Iu=new Uint8Array(4),Xu=createView$1(Iu),i0=new Uint8Array(gu.outputLen);for(let p0=1,w0=0;w0{gu._cloneInto($u).update(i0).digestInto(i0);for(let $0=0;$0{delete nt[p0]}),c.headers=AxiosHeaders$1.concat($a,nt);const Ys=[];let gu=!0;this.interceptors.request.forEach(function(w0){typeof w0.runWhen=="function"&&w0.runWhen(c)===!1||(gu=gu&&w0.synchronous,Ys.unshift(w0.fulfilled,w0.rejected))});const xu=[];this.interceptors.response.forEach(function(w0){xu.push(w0.fulfilled,w0.rejected)});let $u,Iu=0,Xu;if(!gu){const p0=[dispatchRequest.bind(this),void 0];for(p0.unshift.apply(p0,Ys),p0.push.apply(p0,xu),Xu=p0.length,$u=Promise.resolve(c);Iu{if(!d._listeners)return;let nt=d._listeners.length;for(;nt-- >0;)d._listeners[nt](tt);d._listeners=null}),this.promise.then=tt=>{let nt;const $a=new Promise(Ys=>{d.subscribe(Ys),nt=Ys}).then(tt);return $a.cancel=function(){d.unsubscribe(nt)},$a},a(function(nt,$a,Ys){d.reason||(d.reason=new CanceledError$1(nt,$a,Ys),c(d.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;const c=this._listeners.indexOf(a);c!==-1&&this._listeners.splice(c,1)}static source(){let a;return{token:new Ive(function(tt){a=tt}),cancel:a}}};function spread$1(o){return function(c){return o.apply(null,c)}}function isAxiosError$1(o){return utils$A.isObject(o)&&o.isAxiosError===!0}const HttpStatusCode$1={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode$1).forEach(([o,a])=>{HttpStatusCode$1[a]=o});function createInstance(o){const a=new Axios$1(o),c=bind$f(Axios$1.prototype.request,a);return utils$A.extend(c,Axios$1.prototype,a,{allOwnKeys:!0}),utils$A.extend(c,a,null,{allOwnKeys:!0}),c.create=function(tt){return createInstance(mergeConfig$1(o,tt))},c}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError$1;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel$1;axios.VERSION=VERSION$2;axios.toFormData=toFormData$1;axios.AxiosError=AxiosError$1;axios.Cancel=axios.CanceledError;axios.all=function(a){return Promise.all(a)};axios.spread=spread$1;axios.isAxiosError=isAxiosError$1;axios.mergeConfig=mergeConfig$1;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=o=>formDataToJSON(utils$A.isHTMLForm(o)?new FormData(o):o);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const{Axios,AxiosError,CanceledError,isCancel,CancelToken,VERSION:VERSION$1,all:all$1,Cancel,isAxiosError,spread,toFormData,AxiosHeaders,HttpStatusCode,formToJSON,getAdapter,mergeConfig}=axios;class AxiosHttpClient{constructor(a,c){aw(this,"axios");aw(this,"showServerDownPopup");this.axios=a,this.showServerDownPopup=c,this.axios.interceptors.response.use(d=>d,d=>{var tt;return((tt=d.response)==null?void 0:tt.status)===401&&(window.location.href="/admin-dashboard/"),d.response||this.showServerDownPopup(),Promise.reject(d)})}async get(a,c={}){return this.request(this.axios.get(a,{headers:c}))}async post(a,c,d={}){return this.request(this.axios.post(a,c,{headers:d}))}async put(a,c,d={}){return this.request(this.axios.put(a,c,{headers:d}))}async delete(a,c={}){return this.request(this.axios.delete(a,{headers:c}))}async patch(a,c,d={}){return this.request(this.axios.patch(a,c,{headers:d}))}async head(a,c={}){return this.request(this.axios.head(a,{headers:c}))}async request(a){var c,d,tt;try{const nt=await a;return nt.config.method.toUpperCase()==="HEAD"?{data:void 0}:nt.data}catch(nt){if(nt instanceof AxiosError){if(((d=(c=nt.config)==null?void 0:c.method)==null?void 0:d.toUpperCase())==="HEAD")return{error:{code:nt.request.status,message:nt.message}};const $a=(tt=nt.response)==null?void 0:tt.data,Ys=$a.error;return!$a&&(!Ys||!Ys.message||!Ys.code)?{error:GENERIC_ERROR}:typeof $a=="string"?{error:{code:nt.request.status,message:$a}}:typeof Ys=="string"?{error:{code:nt.request.status,message:Ys}}:{error:{code:(Ys==null?void 0:Ys.code)||nt.request.status,message:Ys==null?void 0:Ys.message}}}return{error:GENERIC_ERROR}}}}const GENERIC_ERROR={code:500,message:"Something went wrong"},useMetamask$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard"},useNear$1={verifyMessageError:"Error while verifying message",missingUrlParamsError:"Missing url parameters",loginError:"Error while login",rootkeyError:"Error while adding root key",messageNotVerifiedError:"Message not verified",signMessageError:"Error while signing message",signOutError:"Failed to signing out"},useStarknet$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard",signMessageError:"Error while signing message",signOutError:"Failed to signing out",errorChangingNetwork:"Error changing network",walletNotFound:"Wallet not found",errorLogin:"Error while login"},useIcp$1={requestNodeDataError:"Error while requesting node data",errorChangingNetwork:"Error changing network",loginError:"Error while login",rootkeyError:"Error while adding root key",signMessageError:"Error while signing message"},loginPage={logoDashboardText:"Admin Dashboard",title:"Calimero Node Admin Dashboard",subtitle:"Start using Calimero by selecting your wallet.",buttonConnectText:"Connect Wallet",loginSelector:{title:"Continue with wallet",metamaskButtonText:"Metamask wallet",nearButtonText:"Near wallet",starknetButtonText:"Starknet wallet",IcpButtonText:"Internet Computer"},nearLogin:{title:"Login with NEAR",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},IcpLogin:{title:"Login with Internet Identity",subtitle:"Choose from which account you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backToLoginPage:"Back to login page"},metamaskLogin:{titleLogin:"Login with Metamask",titleRootKey:"Add Metamask root key",subtitle:"Choose which account from your wallet you want to log in with",authButtonText:"Sign authentication transaction",errorTitleText:"Error signing message",backButtonText:"Back to wallet selector"},starknetLogin:{title:"Login with Starknet",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector",argentXButton:"Login with ArgentX",metamaskButton:"Login with MetaMask",titleRootKey:"Add Starknet root key",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"}},addRootKeyPage={nearRootKey:{title:"Add NEAR root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Add root key",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},starknetRootKey:{title:"Add Starknet root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",argentXButton:"Add root key with ArgentX",metamaskButton:"Add root key with MetaMask",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"},IcpKey:{title:"Add Internet Identity root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",authButtonText:"Add root key",backToLoginPage:"Back to login selector"}},footer={title:"Calimero Network"},navigation={logoDashboardText:"Admin Dashboard",pkTest:"Public Key"},applicationsPage={applicationsTable:{title:"Applications",publishNewAppText:"Publish new application",noAvailableAppsText:"No applications available",noAvailableReleasesText:"No available releases",noInstalledAppsText:"No installed applications",noOwnedAppsText:"No owned applications",installNewAppText:"install new application",actionDialog:{title:"Uninstall Application",subtitle:"Are you sure you want to uninstall this application? This action cannot be undone.",buttonActionText:"Uninstall"}},installApplication:{title:"Install Application",backButtonText:"Back to Applications",selectAppLabel:"Select Application to Install",dropdownPlaceholder:"Applications",packageDetailsLabel:"Package Details",releaseSelectionLabel:"Select Application Release",releaseDetailsLabel:"Release Details",installErrorTitle:"Failed to install application",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",installButtonText:"Install application",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",failInstallTitle:"Error installing application",successInstallTitle:"Application installed successfully"},publishApplication:{title:"Publish new application",addAccountButtonText:"Add wallet account",connectAccountTitle:"Connect owner account",connectAccountSubtitle:"Owner account is holder of application and only that account can publish new releases.",connectAccountButtonText:"Connect account",buttonText:"Publish"},addRelease:{title:"Add new release",buttonText:"Publish",latestReleaseText:"Latest application version is : "}},confirmWallet={logoText:"Admin Dashboard",title:"Confirm Wallet",accountIdText:"Account Id",signatureText:"Signature",publicKeyText:"PublicKey",callbackUrlText:"Callback Url",submitButtonText:"Submit Request",backButtonText:"Back to login"},keysPage={title:"Keys"},keysTable={noKeysText:"No keys found in the node.",headerPkText:"Public Key",headerTypeText:"Type",badgeActiveText:"Active",badgeRevokedText:"Revoked",setActiveText:"Set Active",revokeKeyText:"Revoke Key",addNewText:"Add new Key"},uploadPage={title:"Upload Application",walletButtonText:"Add wallet account",switchPackageText:"Add Package",switchReleaseText:"Add Release"},uploadApplication={title:"Add Release",subtitle:"To install the application first upload the application wasm to the IPFS, select the package you want to add the release for and fill the release details.",uploadIpfsTitle:"IPFS Application upload",inputLabelText:"Select Application .wasm file to upload",buttonUploadLabel:"Upload wasm",buttonUploadText:"Upload",cidLabelText:"File IPFS CID",backButtonText:"Back",releaseTitle:"Add new release",nameLabelText:"Name",pathLabelText:"Path",versionLabelText:"Version",notesLabelText:"Notes",hashLabelText:"Hash",buttonAddReleaseText:"Add Release",versionPlaceholder:"1.0.0",notesPlaceholder:"Initial release",hashPlaceholder:"QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7",addReleaseButtonText:"Add Release",loginLableText:"To Deploy new release, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account",selectPackageLabel:"Select Package",pathPlaceholder:"url to the wasm file"},addPackageForm={title:"Add application details",subtitle:"To successfully install the application, first you need to add the package details and procceed to add relase.",nameLabelText:"Package Name",repositoryLabelText:"Repository URL",descriptionLabelText:"Description",buttonAddPackageText:"Add Package",buttonNextText:"Next",namePlaceholder:"chat-application",repositoryPlaceholder:"https://github.com/",descriptionPlaceholder:"A chat application built for P2P network",loginLableText:"To Deploy new package, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account"},statusModal={buttonContinueText:"Continue",buttonDeleteText:"Delete",buttonCopyText:"Copy",buttonCloseText:"Close",buttonCancelText:"Cancel"},contextPage={contextPageTitle:"Contexts",startNewContextText:"Start new context",joinContextText:"Join existing context",noContextsText:"No contexts found in the node.",contextPageDescription:"Contexts are the core of the Calimero ecosystem. These are application specific networks designed to enable direct communication between users, eliminating the need for intermediaries.",invitedListDescription:"Contexts you have been invited to",noJoinedAppsListText:"You have not joined any contexts.",noInviedAppsListText:"You have not been invited to any contexts.",devApplicationTitle:"Development application",deleteContextText:"Delete Context",contextDetails:{title:"Context Details",clientKeysListDescription:"Client keys are authorization keys used by the application frontend.",noClientKeysText:"No data found.",noUsersText:"No users found in the context.",labelIdText:"Id: ",labelNameText:"Name: ",labelOwnerText:"Owner: ",labelDescriptionText:"Description: ",labelRepositoryText:"Repository URL: ",lableVersionText:"Version: ",labelAppId:"App ID: ",titleApps:"Installed application",localAppTitle:"Metadata not available for locally installed application",titleStorage:"Storage",labelStorageText:"Used: "},actionDialog:{title:"Delete Context",subtitle:"Are you sure you want to delete this context? This action cannot be undone."},contextInvitation:{invitationText:"Invited on ",acceptButtonText:"Accept",declineButtonText:"Decline"}},startContextPage={backButtonText:"back to context select",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",initSectionTitle:"Initialize application state",argsTitleText:"Arguments",methodLabelText:"method name",argsLabelText:"arguments json",buttonFormatText:"format",loginRequestPopupTitle:"Application Sign-in Request - Start Context",detailsText:"Details",applicationList:{listTitle:"Select Available Application",noAvailableAppsText:"No applications available",noOwnedAppsText:"No owned applications installed"},startContextSuccessTitle:"Context started",startedContextMessage:"Application context has been started successfully.",startContextErrorTitle:"Failed to start context",startContextErrorMessage:"Failed to start the application context.",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",successInstallTitle:"Application installed successfully",failInstallTitle:"Error installing application"},joinContextPage={title:"Join existing Context",buttonJoinText:"Join Context",joinErrorTitle:"Failed to join context",joinSuccessTitle:"Context joined",joinSuccessMessage:"Context joined successfully",contextIdLabel:"Context ID"},exportIdentityPage={title:"Export",description:"Export decentralized identifiers (DIDs) associated with the node.",buttonExportText:"Export Identity",exportErrorTitle:"Failed to export node identity",exportSuccessTitle:"Identity exported"},identityPage={title:"Root keys",addRootKeyText:"Add new root key",loggedInLabel:"Logged in with: ",noRootKeysText:"No root keys found in the node."},serverDown={useHookComponentErrorText:"useServerDown must be used within a ServerDownProvider",popupTitle:"503 - Service Unavailable",popupMessage:"The Node Server at {{nodeApiEndpoint}} is unreachable. Please try again later."},nodeDataSource={joinContextErrorTitle:"Error joining context",joinContextErrorMessage:"Failed to join context",unauthorizedErrorMessage:"Unauthorized"},authHeaders={errorText:"Error extracting private key"},walletSelectorContext={alertErrorText:"Failed to initialise wallet selector",componentErrorText:"useWalletSelector must be used within a WalletSelectorContextProvider"},appLoginPopup={createTokenError:"Error creating token, please try again",selectContext:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextsTitle:"Select Context",contextsSubtitle:"To continue select available or start a new context for the application",noContextsText:"No contexts found",selectedContextText:"Selected context Id:",buttonNextText:"Confirm context Id",buttonBackText:"Return to application",buttonCreateText:"Start new"},selectIdentity:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",contextsTitle:"Select context identity",contextsSubtitle:"To continue select available context identity for the application",noContextsText:"No contexts identities found",selectedContextText:"Selected context identity:",backButtonText:"back to context select",buttonNextText:"Confirm context identity",buttonBackText:"Return to application"},createToken:{title:"Application Sign-in Request",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",backButtonText:"back to select context identity",contextIdentityText:"Context Identity: ",detailsText:"Details",buttonNextText:"Create token"}},setupModal$1={inputIdLengthError:"Application ID must be between 32 and 44 characters long.",inputEncodeError:"Application ID must contain only base58 characters.",nodeHealthCheckError:"Connection failed. Please check if node url is correct.",modalTitle:"App setup",urlInputPlacerholder:"node url",buttonSetText:"Set node url"},translations={useMetamask:useMetamask$1,useNear:useNear$1,useStarknet:useStarknet$1,useIcp:useIcp$1,loginPage,addRootKeyPage,footer,navigation,applicationsPage,confirmWallet,keysPage,keysTable,uploadPage,uploadApplication,addPackageForm,statusModal,contextPage,startContextPage,joinContextPage,exportIdentityPage,identityPage,serverDown,nodeDataSource,authHeaders,walletSelectorContext,appLoginPopup,setupModal:setupModal$1};function createAppMetadata(o){var a={contractAppId:o};return Array.from(new TextEncoder().encode(JSON.stringify(a)))}function parseAppMetadata(o){try{if(o.length===0)return null;var a=JSON.parse(new TextDecoder().decode(new Uint8Array(o)));return a}catch{return null}}function getNodeUrl(){let o=getAppEndpointKey();if(!o){let a="http://localhost:2428";return setAppEndpointKey(a),a}return o??""}function getNearEnvironment(){return"testnet"}const Ed25519$1="Ed25519";class CodeError extends Error{constructor(c,d,tt){super(c);aw(this,"code");aw(this,"props");this.code=d,this.name=(tt==null?void 0:tt.name)??"CodeError",this.props=tt??{}}}class AggregateCodeError extends AggregateError{constructor(c,d,tt,nt){super(c,d);aw(this,"code");aw(this,"props");this.code=tt,this.name=(nt==null?void 0:nt.name)??"AggregateCodeError",this.props=nt??{}}}var events={exports:{}},R$3=typeof Reflect=="object"?Reflect:null,ReflectApply=R$3&&typeof R$3.apply=="function"?R$3.apply:function(a,c,d){return Function.prototype.apply.call(a,c,d)},ReflectOwnKeys;R$3&&typeof R$3.ownKeys=="function"?ReflectOwnKeys=R$3.ownKeys:Object.getOwnPropertySymbols?ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a).concat(Object.getOwnPropertySymbols(a))}:ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a)};function ProcessEmitWarning(o){console&&console.warn&&console.warn(o)}var NumberIsNaN=Number.isNaN||function(a){return a!==a};function EventEmitter$1(){EventEmitter$1.init.call(this)}events.exports=EventEmitter$1;events.exports.once=once$2;EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=void 0;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=void 0;var defaultMaxListeners=10;function checkListener(o){if(typeof o!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof o)}Object.defineProperty(EventEmitter$1,"defaultMaxListeners",{enumerable:!0,get:function(){return defaultMaxListeners},set:function(o){if(typeof o!="number"||o<0||NumberIsNaN(o))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+o+".");defaultMaxListeners=o}});EventEmitter$1.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};EventEmitter$1.prototype.setMaxListeners=function(a){if(typeof a!="number"||a<0||NumberIsNaN(a))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+a+".");return this._maxListeners=a,this};function _getMaxListeners(o){return o._maxListeners===void 0?EventEmitter$1.defaultMaxListeners:o._maxListeners}EventEmitter$1.prototype.getMaxListeners=function(){return _getMaxListeners(this)};EventEmitter$1.prototype.emit=function(a){for(var c=[],d=1;d0&&($a=c[0]),$a instanceof Error)throw $a;var Ys=new Error("Unhandled error."+($a?" ("+$a.message+")":""));throw Ys.context=$a,Ys}var gu=nt[a];if(gu===void 0)return!1;if(typeof gu=="function")ReflectApply(gu,this,c);else for(var xu=gu.length,$u=arrayClone(gu,xu),d=0;d0&&$a.length>tt&&!$a.warned){$a.warned=!0;var Ys=new Error("Possible EventEmitter memory leak detected. "+$a.length+" "+String(a)+" listeners added. Use emitter.setMaxListeners() to increase limit");Ys.name="MaxListenersExceededWarning",Ys.emitter=o,Ys.type=a,Ys.count=$a.length,ProcessEmitWarning(Ys)}return o}EventEmitter$1.prototype.addListener=function(a,c){return _addListener(this,a,c,!1)};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function(a,c){return _addListener(this,a,c,!0)};function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(o,a,c){var d={fired:!1,wrapFn:void 0,target:o,type:a,listener:c},tt=onceWrapper.bind(d);return tt.listener=c,d.wrapFn=tt,tt}EventEmitter$1.prototype.once=function(a,c){return checkListener(c),this.on(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.prependOnceListener=function(a,c){return checkListener(c),this.prependListener(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.removeListener=function(a,c){var d,tt,nt,$a,Ys;if(checkListener(c),tt=this._events,tt===void 0)return this;if(d=tt[a],d===void 0)return this;if(d===c||d.listener===c)--this._eventsCount===0?this._events=Object.create(null):(delete tt[a],tt.removeListener&&this.emit("removeListener",a,d.listener||c));else if(typeof d!="function"){for(nt=-1,$a=d.length-1;$a>=0;$a--)if(d[$a]===c||d[$a].listener===c){Ys=d[$a].listener,nt=$a;break}if(nt<0)return this;nt===0?d.shift():spliceOne(d,nt),d.length===1&&(tt[a]=d[0]),tt.removeListener!==void 0&&this.emit("removeListener",a,Ys||c)}return this};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function(a){var c,d,tt;if(d=this._events,d===void 0)return this;if(d.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):d[a]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete d[a]),this;if(arguments.length===0){var nt=Object.keys(d),$a;for(tt=0;tt=0;tt--)this.removeListener(a,c[tt]);return this};function _listeners(o,a,c){var d=o._events;if(d===void 0)return[];var tt=d[a];return tt===void 0?[]:typeof tt=="function"?c?[tt.listener||tt]:[tt]:c?unwrapListeners(tt):arrayClone(tt,tt.length)}EventEmitter$1.prototype.listeners=function(a){return _listeners(this,a,!0)};EventEmitter$1.prototype.rawListeners=function(a){return _listeners(this,a,!1)};EventEmitter$1.listenerCount=function(o,a){return typeof o.listenerCount=="function"?o.listenerCount(a):listenerCount.call(o,a)};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(o){var a=this._events;if(a!==void 0){var c=a[o];if(typeof c=="function")return 1;if(c!==void 0)return c.length}return 0}EventEmitter$1.prototype.eventNames=function(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]};function arrayClone(o,a){for(var c=new Array(a),d=0;d=255)throw new TypeError("Alphabet too long");for(var c=new Uint8Array(256),d=0;d>>0,q0=new Uint8Array(L0);$0!==O0;){for(var F0=p0[$0],u1=0,g1=L0-1;(F0!==0||u1>>0,q0[g1]=F0%Ys>>>0,F0=F0/Ys>>>0;if(F0!==0)throw new Error("Non-zero carry");A0=u1,$0++}for(var E1=L0-A0;E1!==L0&&q0[E1]===0;)E1++;for(var B1=gu.repeat(w0);E1>>0,L0=new Uint8Array(O0);p0[w0];){var q0=c[p0.charCodeAt(w0)];if(q0===255)return;for(var F0=0,u1=O0-1;(q0!==0||F0<$0)&&u1!==-1;u1--,F0++)q0+=Ys*L0[u1]>>>0,L0[u1]=q0%256>>>0,q0=q0/256>>>0;if(q0!==0)throw new Error("Non-zero carry");$0=F0,w0++}if(p0[w0]!==" "){for(var g1=O0-$0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=new Uint8Array(A0+(O0-g1)),B1=A0;g1!==O0;)E1[B1++]=L0[g1++];return E1}}}function i0(p0){var w0=Xu(p0);if(w0)return w0;throw new Error(`Non-${a} character`)}return{encode:Iu,decodeUnsafe:Xu,decode:i0}}var src$2=base$5,_brrp__multiformats_scope_baseX=src$2;class Encoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");this.name=a,this.prefix=c,this.baseEncode=d}encode(a){if(a instanceof Uint8Array)return`${this.prefix}${this.baseEncode(a)}`;throw Error("Unknown type, must be binary type")}}class Decoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseDecode");aw(this,"prefixCodePoint");if(this.name=a,this.prefix=c,c.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=c.codePointAt(0),this.baseDecode=d}decode(a){if(typeof a=="string"){if(a.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(a)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(a.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(a){return or$1(this,a)}}class ComposedDecoder{constructor(a){aw(this,"decoders");this.decoders=a}or(a){return or$1(this,a)}decode(a){const c=a[0],d=this.decoders[c];if(d!=null)return d.decode(a);throw RangeError(`Unable to decode multibase string ${JSON.stringify(a)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}function or$1(o,a){return new ComposedDecoder({...o.decoders??{[o.prefix]:o},...a.decoders??{[a.prefix]:a}})}class Codec{constructor(a,c,d,tt){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");aw(this,"baseDecode");aw(this,"encoder");aw(this,"decoder");this.name=a,this.prefix=c,this.baseEncode=d,this.baseDecode=tt,this.encoder=new Encoder(a,c,d),this.decoder=new Decoder(a,c,tt)}encode(a){return this.encoder.encode(a)}decode(a){return this.decoder.decode(a)}}function from$2({name:o,prefix:a,encode:c,decode:d}){return new Codec(o,a,c,d)}function baseX$1({name:o,prefix:a,alphabet:c}){const{encode:d,decode:tt}=_brrp__multiformats_scope_baseX(c,o);return from$2({prefix:a,name:o,encode:d,decode:nt=>coerce(tt(nt))})}function decode$6(o,a,c,d){const tt={};for(let $u=0;$u=8&&(Ys-=8,$a[xu++]=255&gu>>Ys)}if(Ys>=c||255&gu<<8-Ys)throw new SyntaxError("Unexpected end of data");return $a}function encode$7(o,a,c){const d=a[a.length-1]==="=",tt=(1<c;)$a-=c,nt+=a[tt&Ys>>$a];if($a!==0&&(nt+=a[tt&Ys<=INT;)a[c++]=o&255|MSB$1,o/=128;for(;o&MSBALL;)a[c++]=o&255|MSB$1,o>>>=7;return a[c]=o|0,encode$6.bytes=c-d+1,a}var decode$5=read$2,MSB$1$1=128,REST$1$1=127;function read$2(o,d){var c=0,d=d||0,tt=0,nt=d,$a,Ys=o.length;do{if(nt>=Ys)throw read$2.bytes=0,new RangeError("Could not decode varint");$a=o[nt++],c+=tt<28?($a&REST$1$1)<=MSB$1$1);return read$2.bytes=nt-d,c}var N1$1=Math.pow(2,7),N2$1=Math.pow(2,14),N3$1=Math.pow(2,21),N4$1=Math.pow(2,28),N5$1=Math.pow(2,35),N6$1=Math.pow(2,42),N7$1=Math.pow(2,49),N8=Math.pow(2,56),N9=Math.pow(2,63),length$2=function(o){return ocreate$8(this.code,d))}else throw Error("Unknown type, must be binary type")}}function sha$5(o){return async a=>new Uint8Array(await crypto.subtle.digest(o,a))}const sha256$6=from$1({name:"sha2-256",code:18,encode:sha$5("SHA-256")});function equals(o,a){if(o===a)return!0;if(o.byteLength!==a.byteLength)return!1;for(let c=0;ctt+nt.length,0));const c=allocUnsafe(a);let d=0;for(const tt of o)c.set(tt,d),d+=tt.length;return c}const base10=baseX$1({prefix:"9",name:"base10",alphabet:"0123456789"}),base10$1=Object.freeze(Object.defineProperty({__proto__:null,base10},Symbol.toStringTag,{value:"Module"})),base16=rfc4648({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),base16upper=rfc4648({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),base16$1=Object.freeze(Object.defineProperty({__proto__:null,base16,base16upper},Symbol.toStringTag,{value:"Module"})),base2=rfc4648({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),base2$1=Object.freeze(Object.defineProperty({__proto__:null,base2},Symbol.toStringTag,{value:"Module"})),alphabet$1=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),alphabetBytesToChars=alphabet$1.reduce((o,a,c)=>(o[c]=a,o),[]),alphabetCharsToBytes=alphabet$1.reduce((o,a,c)=>(o[a.codePointAt(0)]=c,o),[]);function encode$4(o){return o.reduce((a,c)=>(a+=alphabetBytesToChars[c],a),"")}function decode$4(o){const a=[];for(const c of o){const d=alphabetCharsToBytes[c.codePointAt(0)];if(d===void 0)throw new Error(`Non-base256emoji character: ${c}`);a.push(d)}return new Uint8Array(a)}const base256emoji=from$2({prefix:"🚀",name:"base256emoji",encode:encode$4,decode:decode$4}),base256emoji$1=Object.freeze(Object.defineProperty({__proto__:null,base256emoji},Symbol.toStringTag,{value:"Module"})),base32=rfc4648({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),base32upper=rfc4648({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),base32pad=rfc4648({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),base32padupper=rfc4648({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),base32hex=rfc4648({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),base32hexupper=rfc4648({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),base32hexpad=rfc4648({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),base32hexpadupper=rfc4648({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),base32z=rfc4648({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5}),base32$1=Object.freeze(Object.defineProperty({__proto__:null,base32,base32hex,base32hexpad,base32hexpadupper,base32hexupper,base32pad,base32padupper,base32upper,base32z},Symbol.toStringTag,{value:"Module"})),base36=baseX$1({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),base36upper=baseX$1({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),base36$1=Object.freeze(Object.defineProperty({__proto__:null,base36,base36upper},Symbol.toStringTag,{value:"Module"})),base64$1=rfc4648({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),base64pad=rfc4648({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),base64url=rfc4648({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),base64urlpad=rfc4648({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6}),base64$2=Object.freeze(Object.defineProperty({__proto__:null,base64:base64$1,base64pad,base64url,base64urlpad},Symbol.toStringTag,{value:"Module"})),base8=rfc4648({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),base8$1=Object.freeze(Object.defineProperty({__proto__:null,base8},Symbol.toStringTag,{value:"Module"})),identity$1=from$2({prefix:"\0",name:"identity",encode:o=>toString$c(o),decode:o=>fromString$1(o)}),identityBase=Object.freeze(Object.defineProperty({__proto__:null,identity:identity$1},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const bases={...identityBase,...base2$1,...base8$1,...base10$1,...base16$1,...base32$1,...base36$1,...base58,...base64$2,...base256emoji$1};function createCodec$1(o,a,c,d){return{name:o,prefix:a,encoder:{name:o,prefix:a,encode:c},decoder:{decode:d}}}const string=createCodec$1("utf8","u",o=>"u"+new TextDecoder("utf8").decode(o),o=>new TextEncoder().encode(o.substring(1))),ascii=createCodec$1("ascii","a",o=>{let a="a";for(let c=0;c{o=o.substring(1);const a=allocUnsafe(o.length);for(let c=0;c0&&!a.includes(o.length))throw new Error(`Uint8Array expected of length ${a}, not of length=${o.length}`)}function hash$a(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$3(o.outputLen),number$3(o.blockLen)}function exists$3(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}function output$3(o,a){bytes$3(o);const c=a.outputLen;if(o.lengthnew Uint32Array(o.buffer,o.byteOffset,Math.floor(o.byteLength/4)),createView$1=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),rotr$1=(o,a)=>o<<32-a|o>>>a,isLE$1=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,byteSwap=o=>o<<24&4278190080|o<<8&16711680|o>>>8&65280|o>>>24&255;function byteSwap32(o){for(let a=0;a{};async function asyncLoop(o,a,c){let d=Date.now();for(let tt=0;tt=0&&nto().update(toBytes$1(d)).digest(),c=o();return a.outputLen=c.outputLen,a.blockLen=c.blockLen,a.create=()=>o(),a}function randomBytes$5(o=32){if(crypto$6&&typeof crypto$6.getRandomValues=="function")return crypto$6.getRandomValues(new Uint8Array(o));throw new Error("crypto.getRandomValues must be defined")}function setBigUint64$3(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ys=Number(c&nt),gu=d?4:0,xu=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+xu,Ys,d)}const Chi$2=(o,a,c)=>o&a^~o&c,Maj$2=(o,a,c)=>o&a^o&c^a&c;class HashMD extends Hash$9{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=createView$1(this.buffer)}update(a){exists$3(this);const{view:c,buffer:d,blockLen:tt}=this;a=toBytes$1(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iu>_32n$2&U32_MASK64$2)}:{h:Number(o>>_32n$2&U32_MASK64$2)|0,l:Number(o&U32_MASK64$2)|0}}function split$8(o,a=!1){let c=new Uint32Array(o.length),d=new Uint32Array(o.length);for(let tt=0;ttBigInt(o>>>0)<<_32n$2|BigInt(a>>>0),shrSH$1=(o,a,c)=>o>>>c,shrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrSH$1=(o,a,c)=>o>>>c|a<<32-c,rotrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrBH$1=(o,a,c)=>o<<64-c|a>>>c-32,rotrBL$1=(o,a,c)=>o>>>c-32|a<<64-c,rotr32H$1=(o,a)=>a,rotr32L$1=(o,a)=>o,rotlSH$2=(o,a,c)=>o<>>32-c,rotlSL$2=(o,a,c)=>a<>>32-c,rotlBH$2=(o,a,c)=>a<>>64-c,rotlBL$2=(o,a,c)=>o<>>64-c;function add$1(o,a,c,d){const tt=(a>>>0)+(d>>>0);return{h:o+c+(tt/2**32|0)|0,l:tt|0}}const add3L$1=(o,a,c)=>(o>>>0)+(a>>>0)+(c>>>0),add3H$1=(o,a,c,d)=>a+c+d+(o/2**32|0)|0,add4L$1=(o,a,c,d)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0),add4H$1=(o,a,c,d,tt)=>a+c+d+tt+(o/2**32|0)|0,add5L$1=(o,a,c,d,tt)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0)+(tt>>>0),add5H$1=(o,a,c,d,tt,nt)=>a+c+d+tt+nt+(o/2**32|0)|0,u64$1={fromBig:fromBig$2,split:split$8,toBig:toBig$1,shrSH:shrSH$1,shrSL:shrSL$1,rotrSH:rotrSH$1,rotrSL:rotrSL$1,rotrBH:rotrBH$1,rotrBL:rotrBL$1,rotr32H:rotr32H$1,rotr32L:rotr32L$1,rotlSH:rotlSH$2,rotlSL:rotlSL$2,rotlBH:rotlBH$2,rotlBL:rotlBL$2,add:add$1,add3L:add3L$1,add3H:add3H$1,add4L:add4L$1,add4H:add4H$1,add5H:add5H$1,add5L:add5L$1},[SHA512_Kh$1,SHA512_Kl$1]=u64$1.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(o=>BigInt(o))),SHA512_W_H$1=new Uint32Array(80),SHA512_W_L$1=new Uint32Array(80);let SHA512$4=class extends HashMD{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:a,Al:c,Bh:d,Bl:tt,Ch:nt,Cl:$a,Dh:Ys,Dl:gu,Eh:xu,El:$u,Fh:Iu,Fl:Xu,Gh:i0,Gl:p0,Hh:w0,Hl:A0}=this;return[a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0]}set(a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0){this.Ah=a|0,this.Al=c|0,this.Bh=d|0,this.Bl=tt|0,this.Ch=nt|0,this.Cl=$a|0,this.Dh=Ys|0,this.Dl=gu|0,this.Eh=xu|0,this.El=$u|0,this.Fh=Iu|0,this.Fl=Xu|0,this.Gh=i0|0,this.Gl=p0|0,this.Hh=w0|0,this.Hl=A0|0}process(a,c){for(let L0=0;L0<16;L0++,c+=4)SHA512_W_H$1[L0]=a.getUint32(c),SHA512_W_L$1[L0]=a.getUint32(c+=4);for(let L0=16;L0<80;L0++){const q0=SHA512_W_H$1[L0-15]|0,F0=SHA512_W_L$1[L0-15]|0,u1=u64$1.rotrSH(q0,F0,1)^u64$1.rotrSH(q0,F0,8)^u64$1.shrSH(q0,F0,7),g1=u64$1.rotrSL(q0,F0,1)^u64$1.rotrSL(q0,F0,8)^u64$1.shrSL(q0,F0,7),E1=SHA512_W_H$1[L0-2]|0,B1=SHA512_W_L$1[L0-2]|0,lv=u64$1.rotrSH(E1,B1,19)^u64$1.rotrBH(E1,B1,61)^u64$1.shrSH(E1,B1,6),j1=u64$1.rotrSL(E1,B1,19)^u64$1.rotrBL(E1,B1,61)^u64$1.shrSL(E1,B1,6),r1=u64$1.add4L(g1,j1,SHA512_W_L$1[L0-7],SHA512_W_L$1[L0-16]),t1=u64$1.add4H(r1,u1,lv,SHA512_W_H$1[L0-7],SHA512_W_H$1[L0-16]);SHA512_W_H$1[L0]=t1|0,SHA512_W_L$1[L0]=r1|0}let{Ah:d,Al:tt,Bh:nt,Bl:$a,Ch:Ys,Cl:gu,Dh:xu,Dl:$u,Eh:Iu,El:Xu,Fh:i0,Fl:p0,Gh:w0,Gl:A0,Hh:$0,Hl:O0}=this;for(let L0=0;L0<80;L0++){const q0=u64$1.rotrSH(Iu,Xu,14)^u64$1.rotrSH(Iu,Xu,18)^u64$1.rotrBH(Iu,Xu,41),F0=u64$1.rotrSL(Iu,Xu,14)^u64$1.rotrSL(Iu,Xu,18)^u64$1.rotrBL(Iu,Xu,41),u1=Iu&i0^~Iu&w0,g1=Xu&p0^~Xu&A0,E1=u64$1.add5L(O0,F0,g1,SHA512_Kl$1[L0],SHA512_W_L$1[L0]),B1=u64$1.add5H(E1,$0,q0,u1,SHA512_Kh$1[L0],SHA512_W_H$1[L0]),lv=E1|0,j1=u64$1.rotrSH(d,tt,28)^u64$1.rotrBH(d,tt,34)^u64$1.rotrBH(d,tt,39),r1=u64$1.rotrSL(d,tt,28)^u64$1.rotrBL(d,tt,34)^u64$1.rotrBL(d,tt,39),t1=d&nt^d&Ys^nt&Ys,D0=tt&$a^tt&gu^$a&gu;$0=w0|0,O0=A0|0,w0=i0|0,A0=p0|0,i0=Iu|0,p0=Xu|0,{h:Iu,l:Xu}=u64$1.add(xu|0,$u|0,B1|0,lv|0),xu=Ys|0,$u=gu|0,Ys=nt|0,gu=$a|0,nt=d|0,$a=tt|0;const Z0=u64$1.add3L(lv,r1,D0);d=u64$1.add3H(Z0,B1,j1,t1),tt=Z0|0}({h:d,l:tt}=u64$1.add(this.Ah|0,this.Al|0,d|0,tt|0)),{h:nt,l:$a}=u64$1.add(this.Bh|0,this.Bl|0,nt|0,$a|0),{h:Ys,l:gu}=u64$1.add(this.Ch|0,this.Cl|0,Ys|0,gu|0),{h:xu,l:$u}=u64$1.add(this.Dh|0,this.Dl|0,xu|0,$u|0),{h:Iu,l:Xu}=u64$1.add(this.Eh|0,this.El|0,Iu|0,Xu|0),{h:i0,l:p0}=u64$1.add(this.Fh|0,this.Fl|0,i0|0,p0|0),{h:w0,l:A0}=u64$1.add(this.Gh|0,this.Gl|0,w0|0,A0|0),{h:$0,l:O0}=u64$1.add(this.Hh|0,this.Hl|0,$0|0,O0|0),this.set(d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0,$0,O0)}roundClean(){SHA512_W_H$1.fill(0),SHA512_W_L$1.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};const sha512$3=wrapConstructor$1(()=>new SHA512$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$f=BigInt(0),_1n$h=BigInt(1),_2n$c=BigInt(2);function isBytes$6(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function abytes(o){if(!isBytes$6(o))throw new Error("Uint8Array expected")}const hexes$2=Array.from({length:256},(o,a)=>a.toString(16).padStart(2,"0"));function bytesToHex$2(o){abytes(o);let a="";for(let c=0;c=asciis$1._0&&o<=asciis$1._9)return o-asciis$1._0;if(o>=asciis$1._A&&o<=asciis$1._F)return o-(asciis$1._A-10);if(o>=asciis$1._a&&o<=asciis$1._f)return o-(asciis$1._a-10)}function hexToBytes$3(o){if(typeof o!="string")throw new Error("hex string expected, got "+typeof o);const a=o.length,c=a/2;if(a%2)throw new Error("padded hex string expected, got unpadded hex of length "+a);const d=new Uint8Array(c);for(let tt=0,nt=0;tt_0n$f;o>>=_1n$h,a+=1);return a}function bitGet$2(o,a){return o>>BigInt(a)&_1n$h}function bitSet$2(o,a,c){return o|(c?_1n$h:_0n$f)<(_2n$c<new Uint8Array(o),u8fr$2=o=>Uint8Array.from(o);function createHmacDrbg$2(o,a,c){if(typeof o!="number"||o<2)throw new Error("hashLen must be a number");if(typeof a!="number"||a<2)throw new Error("qByteLen must be a number");if(typeof c!="function")throw new Error("hmacFn must be a function");let d=u8n$2(o),tt=u8n$2(o),nt=0;const $a=()=>{d.fill(1),tt.fill(0),nt=0},Ys=(...Iu)=>c(tt,d,...Iu),gu=(Iu=u8n$2())=>{tt=Ys(u8fr$2([0]),Iu),d=Ys(),Iu.length!==0&&(tt=Ys(u8fr$2([1]),Iu),d=Ys())},xu=()=>{if(nt++>=1e3)throw new Error("drbg: tried 1000 values");let Iu=0;const Xu=[];for(;Iu{$a(),gu(Iu);let i0;for(;!(i0=Xu(xu()));)gu();return $a(),i0}}const validatorFns$2={bigint:o=>typeof o=="bigint",function:o=>typeof o=="function",boolean:o=>typeof o=="boolean",string:o=>typeof o=="string",stringOrUint8Array:o=>typeof o=="string"||isBytes$6(o),isSafeInteger:o=>Number.isSafeInteger(o),array:o=>Array.isArray(o),field:(o,a)=>a.Fp.isValid(o),hash:o=>typeof o=="function"&&Number.isSafeInteger(o.outputLen)};function validateObject$2(o,a,c={}){const d=(tt,nt,$a)=>{const Ys=validatorFns$2[nt];if(typeof Ys!="function")throw new Error(`Invalid validator "${nt}", expected function`);const gu=o[tt];if(!($a&&gu===void 0)&&!Ys(gu,o))throw new Error(`Invalid param ${String(tt)}=${gu} (${typeof gu}), expected ${nt}`)};for(const[tt,nt]of Object.entries(a))d(tt,nt,!1);for(const[tt,nt]of Object.entries(c))d(tt,nt,!0);return o}const ut$4=Object.freeze(Object.defineProperty({__proto__:null,abytes,bitGet:bitGet$2,bitLen:bitLen$2,bitMask:bitMask$2,bitSet:bitSet$2,bytesToHex:bytesToHex$2,bytesToNumberBE:bytesToNumberBE$2,bytesToNumberLE:bytesToNumberLE$2,concatBytes:concatBytes$3,createHmacDrbg:createHmacDrbg$2,ensureBytes:ensureBytes$3,equalBytes:equalBytes$2,hexToBytes:hexToBytes$3,hexToNumber:hexToNumber$2,isBytes:isBytes$6,numberToBytesBE:numberToBytesBE$2,numberToBytesLE:numberToBytesLE$2,numberToHexUnpadded:numberToHexUnpadded$2,numberToVarBytesBE:numberToVarBytesBE$2,utf8ToBytes:utf8ToBytes$3,validateObject:validateObject$2},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$e=BigInt(0),_1n$g=BigInt(1),_2n$b=BigInt(2),_3n$4=BigInt(3),_4n$3=BigInt(4),_5n$3=BigInt(5),_8n$4=BigInt(8);BigInt(9);BigInt(16);function mod$2(o,a){const c=o%a;return c>=_0n$e?c:a+c}function pow$4(o,a,c){if(c<=_0n$e||a<_0n$e)throw new Error("Expected power/modulo > 0");if(c===_1n$g)return _0n$e;let d=_1n$g;for(;a>_0n$e;)a&_1n$g&&(d=d*o%c),o=o*o%c,a>>=_1n$g;return d}function pow2$1(o,a,c){let d=o;for(;a-- >_0n$e;)d*=d,d%=c;return d}function invert$2(o,a){if(o===_0n$e||a<=_0n$e)throw new Error(`invert: expected positive integers, got n=${o} mod=${a}`);let c=mod$2(o,a),d=a,tt=_0n$e,nt=_1n$g;for(;c!==_0n$e;){const Ys=d/c,gu=d%c,xu=tt-nt*Ys;d=c,c=gu,tt=nt,nt=xu}if(d!==_1n$g)throw new Error("invert: does not exist");return mod$2(tt,a)}function tonelliShanks$2(o){const a=(o-_1n$g)/_2n$b;let c,d,tt;for(c=o-_1n$g,d=0;c%_2n$b===_0n$e;c/=_2n$b,d++);for(tt=_2n$b;tt(mod$2(o,a)&_1n$g)===_1n$g,FIELD_FIELDS$2=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField$2(o){const a={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},c=FIELD_FIELDS$2.reduce((d,tt)=>(d[tt]="function",d),a);return validateObject$2(o,c)}function FpPow$2(o,a,c){if(c<_0n$e)throw new Error("Expected power > 0");if(c===_0n$e)return o.ONE;if(c===_1n$g)return a;let d=o.ONE,tt=a;for(;c>_0n$e;)c&_1n$g&&(d=o.mul(d,tt)),tt=o.sqr(tt),c>>=_1n$g;return d}function FpInvertBatch$2(o,a){const c=new Array(a.length),d=a.reduce((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=nt,o.mul(nt,$a)),o.ONE),tt=o.inv(d);return a.reduceRight((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=o.mul(nt,c[Ys]),o.mul(nt,$a)),tt),c}function nLength$2(o,a){const c=a!==void 0?a:o.toString(2).length,d=Math.ceil(c/8);return{nBitLength:c,nByteLength:d}}function Field$2(o,a,c=!1,d={}){if(o<=_0n$e)throw new Error(`Expected Field ORDER > 0, got ${o}`);const{nBitLength:tt,nByteLength:nt}=nLength$2(o,a);if(nt>2048)throw new Error("Field lengths over 2048 bytes are not supported");const $a=FpSqrt$2(o),Ys=Object.freeze({ORDER:o,BITS:tt,BYTES:nt,MASK:bitMask$2(tt),ZERO:_0n$e,ONE:_1n$g,create:gu=>mod$2(gu,o),isValid:gu=>{if(typeof gu!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof gu}`);return _0n$e<=gu&&gugu===_0n$e,isOdd:gu=>(gu&_1n$g)===_1n$g,neg:gu=>mod$2(-gu,o),eql:(gu,xu)=>gu===xu,sqr:gu=>mod$2(gu*gu,o),add:(gu,xu)=>mod$2(gu+xu,o),sub:(gu,xu)=>mod$2(gu-xu,o),mul:(gu,xu)=>mod$2(gu*xu,o),pow:(gu,xu)=>FpPow$2(Ys,gu,xu),div:(gu,xu)=>mod$2(gu*invert$2(xu,o),o),sqrN:gu=>gu*gu,addN:(gu,xu)=>gu+xu,subN:(gu,xu)=>gu-xu,mulN:(gu,xu)=>gu*xu,inv:gu=>invert$2(gu,o),sqrt:d.sqrt||(gu=>$a(Ys,gu)),invertBatch:gu=>FpInvertBatch$2(Ys,gu),cmov:(gu,xu,$u)=>$u?xu:gu,toBytes:gu=>c?numberToBytesLE$2(gu,nt):numberToBytesBE$2(gu,nt),fromBytes:gu=>{if(gu.length!==nt)throw new Error(`Fp.fromBytes: expected ${nt}, got ${gu.length}`);return c?bytesToNumberLE$2(gu):bytesToNumberBE$2(gu)}});return Object.freeze(Ys)}function FpSqrtEven$1(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?o.neg(c):c}function getFieldBytesLength$2(o){if(typeof o!="bigint")throw new Error("field order must be bigint");const a=o.toString(2).length;return Math.ceil(a/8)}function getMinHashLength$2(o){const a=getFieldBytesLength$2(o);return a+Math.ceil(a/2)}function mapHashToField$2(o,a,c=!1){const d=o.length,tt=getFieldBytesLength$2(a),nt=getMinHashLength$2(a);if(d<16||d1024)throw new Error(`expected ${nt}-1024 bytes of input, got ${d}`);const $a=c?bytesToNumberBE$2(o):bytesToNumberLE$2(o),Ys=mod$2($a,a-_1n$g)+_1n$g;return c?numberToBytesLE$2(Ys,tt):numberToBytesBE$2(Ys,tt)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$d=BigInt(0),_1n$f=BigInt(1);function wNAF$2(o,a){const c=(tt,nt)=>{const $a=nt.negate();return tt?$a:nt},d=tt=>{const nt=Math.ceil(a/tt)+1,$a=2**(tt-1);return{windows:nt,windowSize:$a}};return{constTimeNegate:c,unsafeLadder(tt,nt){let $a=o.ZERO,Ys=tt;for(;nt>_0n$d;)nt&_1n$f&&($a=$a.add(Ys)),Ys=Ys.double(),nt>>=_1n$f;return $a},precomputeWindow(tt,nt){const{windows:$a,windowSize:Ys}=d(nt),gu=[];let xu=tt,$u=xu;for(let Iu=0;Iu<$a;Iu++){$u=xu,gu.push($u);for(let Xu=1;Xu>=i0,A0>gu&&(A0-=Xu,$a+=_1n$f);const $0=w0,O0=w0+Math.abs(A0)-1,L0=p0%2!==0,q0=A0<0;A0===0?$u=$u.add(c(L0,nt[$0])):xu=xu.add(c(q0,nt[O0]))}return{p:xu,f:$u}},wNAFCached(tt,nt,$a,Ys){const gu=tt._WINDOW_SIZE||1;let xu=nt.get(tt);return xu||(xu=this.precomputeWindow(tt,gu),gu!==1&&nt.set(tt,Ys(xu))),this.wNAF(gu,xu,$a)}}}function validateBasic$2(o){return validateField$2(o.Fp),validateObject$2(o,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...nLength$2(o.n,o.nBitLength),...o,p:o.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$c=BigInt(0),_1n$e=BigInt(1),_2n$a=BigInt(2),_8n$3=BigInt(8),VERIFY_DEFAULT$1={zip215:!0};function validateOpts$6(o){const a=validateBasic$2(o);return validateObject$2(o,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...a})}function twistedEdwards$1(o){const a=validateOpts$6(o),{Fp:c,n:d,prehash:tt,hash:nt,randomBytes:$a,nByteLength:Ys,h:gu}=a,xu=_2n$a<{try{return{isValid:!0,value:c.sqrt(m1*c.inv(c1))}}catch{return{isValid:!1,value:_0n$c}}}),Xu=a.adjustScalarBytes||(m1=>m1),i0=a.domain||((m1,c1,G0)=>{if(c1.length||G0)throw new Error("Contexts/pre-hash are not supported");return m1}),p0=m1=>typeof m1=="bigint"&&_0n$cp0(m1)&&p0(c1)&&m1m1===_0n$c||w0(m1,xu);function $0(m1,c1){if(w0(m1,c1))return m1;throw new Error(`Expected valid scalar < ${c1}, got ${typeof m1} ${m1}`)}function O0(m1){return m1===_0n$c?m1:$0(m1,d)}const L0=new Map;function q0(m1){if(!(m1 instanceof F0))throw new Error("ExtendedPoint expected")}class F0{constructor(c1,G0,o1,d1){if(this.ex=c1,this.ey=G0,this.ez=o1,this.et=d1,!A0(c1))throw new Error("x required");if(!A0(G0))throw new Error("y required");if(!A0(o1))throw new Error("z required");if(!A0(d1))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(c1){if(c1 instanceof F0)throw new Error("extended point not allowed");const{x:G0,y:o1}=c1||{};if(!A0(G0)||!A0(o1))throw new Error("invalid affine point");return new F0(G0,o1,_1n$e,$u(G0*o1))}static normalizeZ(c1){const G0=c.invertBatch(c1.map(o1=>o1.ez));return c1.map((o1,d1)=>o1.toAffine(G0[d1])).map(F0.fromAffine)}_setWindowSize(c1){this._WINDOW_SIZE=c1,L0.delete(this)}assertValidity(){const{a:c1,d:G0}=a;if(this.is0())throw new Error("bad point: ZERO");const{ex:o1,ey:d1,ez:R1,et:O1}=this,Q1=$u(o1*o1),rv=$u(d1*d1),D1=$u(R1*R1),ev=$u(D1*D1),Mv=$u(Q1*c1),Zv=$u(D1*$u(Mv+rv)),fv=$u(ev+$u(G0*$u(Q1*rv)));if(Zv!==fv)throw new Error("bad point: equation left != right (1)");const cv=$u(o1*d1),ly=$u(R1*O1);if(cv!==ly)throw new Error("bad point: equation left != right (2)")}equals(c1){q0(c1);const{ex:G0,ey:o1,ez:d1}=this,{ex:R1,ey:O1,ez:Q1}=c1,rv=$u(G0*Q1),D1=$u(R1*d1),ev=$u(o1*Q1),Mv=$u(O1*d1);return rv===D1&&ev===Mv}is0(){return this.equals(F0.ZERO)}negate(){return new F0($u(-this.ex),this.ey,this.ez,$u(-this.et))}double(){const{a:c1}=a,{ex:G0,ey:o1,ez:d1}=this,R1=$u(G0*G0),O1=$u(o1*o1),Q1=$u(_2n$a*$u(d1*d1)),rv=$u(c1*R1),D1=G0+o1,ev=$u($u(D1*D1)-R1-O1),Mv=rv+O1,Zv=Mv-Q1,fv=rv-O1,cv=$u(ev*Zv),ly=$u(Mv*fv),Cy=$u(ev*fv),Ly=$u(Zv*Mv);return new F0(cv,ly,Ly,Cy)}add(c1){q0(c1);const{a:G0,d:o1}=a,{ex:d1,ey:R1,ez:O1,et:Q1}=this,{ex:rv,ey:D1,ez:ev,et:Mv}=c1;if(G0===BigInt(-1)){const vw=$u((R1-d1)*(D1+rv)),Hw=$u((R1+d1)*(D1-rv)),uw=$u(Hw-vw);if(uw===_0n$c)return this.double();const Nw=$u(O1*_2n$a*Mv),lw=$u(Q1*_2n$a*ev),Lw=lw+Nw,zw=Hw+vw,A2=lw-Nw,kv=$u(Lw*uw),Y1=$u(zw*A2),tv=$u(Lw*A2),Yv=$u(uw*zw);return new F0(kv,Y1,Yv,tv)}const Zv=$u(d1*rv),fv=$u(R1*D1),cv=$u(Q1*o1*Mv),ly=$u(O1*ev),Cy=$u((d1+R1)*(rv+D1)-Zv-fv),Ly=ly-cv,Hy=ly+cv,t2=$u(fv-G0*Zv),C2=$u(Cy*Ly),Dy=$u(Hy*t2),jw=$u(Cy*t2),pw=$u(Ly*Hy);return new F0(C2,Dy,pw,jw)}subtract(c1){return this.add(c1.negate())}wNAF(c1){return E1.wNAFCached(this,L0,c1,F0.normalizeZ)}multiply(c1){const{p:G0,f:o1}=this.wNAF($0(c1,d));return F0.normalizeZ([G0,o1])[0]}multiplyUnsafe(c1){let G0=O0(c1);return G0===_0n$c?g1:this.equals(g1)||G0===_1n$e?this:this.equals(u1)?this.wNAF(G0).p:E1.unsafeLadder(this,G0)}isSmallOrder(){return this.multiplyUnsafe(gu).is0()}isTorsionFree(){return E1.unsafeLadder(this,d).is0()}toAffine(c1){const{ex:G0,ey:o1,ez:d1}=this,R1=this.is0();c1==null&&(c1=R1?_8n$3:c.inv(d1));const O1=$u(G0*c1),Q1=$u(o1*c1),rv=$u(d1*c1);if(R1)return{x:_0n$c,y:_1n$e};if(rv!==_1n$e)throw new Error("invZ was invalid");return{x:O1,y:Q1}}clearCofactor(){const{h:c1}=a;return c1===_1n$e?this:this.multiplyUnsafe(c1)}static fromHex(c1,G0=!1){const{d:o1,a:d1}=a,R1=c.BYTES;c1=ensureBytes$3("pointHex",c1,R1);const O1=c1.slice(),Q1=c1[R1-1];O1[R1-1]=Q1&-129;const rv=bytesToNumberLE$2(O1);rv===_0n$c||(G0?$0(rv,xu):$0(rv,c.ORDER));const D1=$u(rv*rv),ev=$u(D1-_1n$e),Mv=$u(o1*D1-d1);let{isValid:Zv,value:fv}=Iu(ev,Mv);if(!Zv)throw new Error("Point.fromHex: invalid y coordinate");const cv=(fv&_1n$e)===_1n$e,ly=(Q1&128)!==0;if(!G0&&fv===_0n$c&&ly)throw new Error("Point.fromHex: x=0 and x_0=1");return ly!==cv&&(fv=$u(-fv)),F0.fromAffine({x:fv,y:rv})}static fromPrivateKey(c1){return j1(c1).point}toRawBytes(){const{x:c1,y:G0}=this.toAffine(),o1=numberToBytesLE$2(G0,c.BYTES);return o1[o1.length-1]|=c1&_1n$e?128:0,o1}toHex(){return bytesToHex$2(this.toRawBytes())}}F0.BASE=new F0(a.Gx,a.Gy,_1n$e,$u(a.Gx*a.Gy)),F0.ZERO=new F0(_0n$c,_1n$e,_1n$e,_0n$c);const{BASE:u1,ZERO:g1}=F0,E1=wNAF$2(F0,Ys*8);function B1(m1){return mod$2(m1,d)}function lv(m1){return B1(bytesToNumberLE$2(m1))}function j1(m1){const c1=Ys;m1=ensureBytes$3("private key",m1,c1);const G0=ensureBytes$3("hashed private key",nt(m1),2*c1),o1=Xu(G0.slice(0,c1)),d1=G0.slice(c1,2*c1),R1=lv(o1),O1=u1.multiply(R1),Q1=O1.toRawBytes();return{head:o1,prefix:d1,scalar:R1,point:O1,pointBytes:Q1}}function r1(m1){return j1(m1).pointBytes}function t1(m1=new Uint8Array,...c1){const G0=concatBytes$3(...c1);return lv(nt(i0(G0,ensureBytes$3("context",m1),!!tt)))}function D0(m1,c1,G0={}){m1=ensureBytes$3("message",m1),tt&&(m1=tt(m1));const{prefix:o1,scalar:d1,pointBytes:R1}=j1(c1),O1=t1(G0.context,o1,m1),Q1=u1.multiply(O1).toRawBytes(),rv=t1(G0.context,Q1,R1,m1),D1=B1(O1+rv*d1);O0(D1);const ev=concatBytes$3(Q1,numberToBytesLE$2(D1,c.BYTES));return ensureBytes$3("result",ev,Ys*2)}const Z0=VERIFY_DEFAULT$1;function f1(m1,c1,G0,o1=Z0){const{context:d1,zip215:R1}=o1,O1=c.BYTES;m1=ensureBytes$3("signature",m1,2*O1),c1=ensureBytes$3("message",c1),tt&&(c1=tt(c1));const Q1=bytesToNumberLE$2(m1.slice(O1,2*O1));let rv,D1,ev;try{rv=F0.fromHex(G0,R1),D1=F0.fromHex(m1.slice(0,O1),R1),ev=u1.multiplyUnsafe(Q1)}catch{return!1}if(!R1&&rv.isSmallOrder())return!1;const Mv=t1(d1,D1.toRawBytes(),rv.toRawBytes(),c1);return D1.add(rv.multiplyUnsafe(Mv)).subtract(ev).clearCofactor().equals(F0.ZERO)}return u1._setWindowSize(8),{CURVE:a,getPublicKey:r1,sign:D0,verify:f1,ExtendedPoint:F0,utils:{getExtendedPublicKey:j1,randomPrivateKey:()=>$a(c.BYTES),precompute(m1=8,c1=F0.BASE){return c1._setWindowSize(m1),c1.multiply(BigInt(3)),c1}}}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ED25519_P=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),ED25519_SQRT_M1=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");BigInt(0);const _1n$d=BigInt(1),_2n$9=BigInt(2),_5n$2=BigInt(5),_10n=BigInt(10),_20n=BigInt(20),_40n=BigInt(40),_80n=BigInt(80);function ed25519_pow_2_252_3(o){const a=ED25519_P,d=o*o%a*o%a,tt=pow2$1(d,_2n$9,a)*d%a,nt=pow2$1(tt,_1n$d,a)*o%a,$a=pow2$1(nt,_5n$2,a)*nt%a,Ys=pow2$1($a,_10n,a)*$a%a,gu=pow2$1(Ys,_20n,a)*Ys%a,xu=pow2$1(gu,_40n,a)*gu%a,$u=pow2$1(xu,_80n,a)*xu%a,Iu=pow2$1($u,_80n,a)*xu%a,Xu=pow2$1(Iu,_10n,a)*$a%a;return{pow_p_5_8:pow2$1(Xu,_2n$9,a)*o%a,b2:d}}function adjustScalarBytes(o){return o[0]&=248,o[31]&=127,o[31]|=64,o}function uvRatio(o,a){const c=ED25519_P,d=mod$2(a*a*a,c),tt=mod$2(d*d*a,c),nt=ed25519_pow_2_252_3(o*tt).pow_p_5_8;let $a=mod$2(o*d*nt,c);const Ys=mod$2(a*$a*$a,c),gu=$a,xu=mod$2($a*ED25519_SQRT_M1,c),$u=Ys===o,Iu=Ys===mod$2(-o,c),Xu=Ys===mod$2(-o*ED25519_SQRT_M1,c);return $u&&($a=gu),(Iu||Xu)&&($a=xu),isNegativeLE$1($a,c)&&($a=mod$2(-$a,c)),{isValid:$u||Iu,value:$a}}const Fp$2=Field$2(ED25519_P,void 0,!0),ed25519Defaults={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Fp$2,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:sha512$3,randomBytes:randomBytes$5,adjustScalarBytes,uvRatio},ed25519$1=twistedEdwards$1(ed25519Defaults);function ed25519_domain(o,a,c){if(a.length>255)throw new Error("Context is too big");return concatBytes$4(utf8ToBytes$4("SigEd25519 no Ed25519 collisions"),new Uint8Array([c?1:0,a.length]),a,o)}({...ed25519Defaults});({...ed25519Defaults});const ELL2_C1=(Fp$2.ORDER+BigInt(3))/BigInt(8);Fp$2.pow(_2n$9,ELL2_C1);Fp$2.sqrt(Fp$2.neg(Fp$2.ONE));(Fp$2.ORDER-BigInt(5))/BigInt(8);BigInt(486662);FpSqrtEven$1(Fp$2,Fp$2.neg(BigInt(486664)));BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const PUBLIC_KEY_BYTE_LENGTH=32,PRIVATE_KEY_BYTE_LENGTH=64,KEYS_BYTE_LENGTH=32;function generateKey$2(){const o=ed25519$1.utils.randomPrivateKey(),a=ed25519$1.getPublicKey(o);return{privateKey:concatKeys(o,a),publicKey:a}}function generateKeyFromSeed(o){if(o.length!==KEYS_BYTE_LENGTH)throw new TypeError('"seed" must be 32 bytes in length.');if(!(o instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');const a=o,c=ed25519$1.getPublicKey(a);return{privateKey:concatKeys(a,c),publicKey:c}}function hashAndSign$2(o,a){const c=o.subarray(0,KEYS_BYTE_LENGTH);return ed25519$1.sign(a instanceof Uint8Array?a:a.subarray(),c)}function hashAndVerify$2(o,a,c){return ed25519$1.verify(a,c instanceof Uint8Array?c:c.subarray(),o)}function concatKeys(o,a){const c=new Uint8Array(PRIVATE_KEY_BYTE_LENGTH);for(let d=0;dNumber.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function encodeUint8Array(o,a,c=0){switch(encodingLength(o)){case 8:a[c++]=o&255|MSB,o/=128;case 7:a[c++]=o&255|MSB,o/=128;case 6:a[c++]=o&255|MSB,o/=128;case 5:a[c++]=o&255|MSB,o/=128;case 4:a[c++]=o&255|MSB,o>>>=7;case 3:a[c++]=o&255|MSB,o>>>=7;case 2:a[c++]=o&255|MSB,o>>>=7;case 1:{a[c++]=o&255,o>>>=7;break}default:throw new Error("unreachable")}return a}function decodeUint8Array(o,a){let c=o[a],d=0;if(d+=c&REST,c>>31>0){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(c+d*4294967296)}return this.lo+this.hi*4294967296}toBigInt(a=!1){if(a)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(BigInt(c)+(BigInt(d)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(a=!1){return this.toBigInt(a).toString()}zzEncode(){const a=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^a)>>>0,this.lo=(this.lo<<1^a)>>>0,this}zzDecode(){const a=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^a)>>>0,this.hi=(this.hi>>>1^a)>>>0,this}length(){const a=this.lo,c=(this.lo>>>28|this.hi<<4)>>>0,d=this.hi>>>24;return d===0?c===0?a<16384?a<128?1:2:a<2097152?3:4:c<16384?c<128?5:6:c<2097152?7:8:d<128?9:10}static fromBigInt(a){if(a===0n)return zero$2;if(aMIN_SAFE_NUMBER_INTEGER)return this.fromNumber(Number(a));const c=a<0n;c&&(a=-a);let d=a>>32n,tt=a-(d<<32n);return c&&(d=~d|0n,tt=~tt|0n,++tt>TWO_32&&(tt=0n,++d>TWO_32&&(d=0n))),new LongBits(Number(tt),Number(d))}static fromNumber(a){if(a===0)return zero$2;const c=a<0;c&&(a=-a);let d=a>>>0,tt=(a-d)/4294967296>>>0;return c&&(tt=~tt>>>0,d=~d>>>0,++d>4294967295&&(d=0,++tt>4294967295&&(tt=0))),new LongBits(d,tt)}static from(a){return typeof a=="number"?LongBits.fromNumber(a):typeof a=="bigint"?LongBits.fromBigInt(a):typeof a=="string"?LongBits.fromBigInt(BigInt(a)):a.low!=null||a.high!=null?new LongBits(a.low>>>0,a.high>>>0):zero$2}}const zero$2=new LongBits(0,0);zero$2.toBigInt=function(){return 0n};zero$2.zzEncode=zero$2.zzDecode=function(){return this};zero$2.length=function(){return 1};const TWO_32=4294967296n;function length$1(o){let a=0,c=0;for(let d=0;d191&&Ys<224?nt[$a++]=(Ys&31)<<6|o[a++]&63:Ys>239&&Ys<365?(Ys=((Ys&7)<<18|(o[a++]&63)<<12|(o[a++]&63)<<6|o[a++]&63)-65536,nt[$a++]=55296+(Ys>>10),nt[$a++]=56320+(Ys&1023)):nt[$a++]=(Ys&15)<<12|(o[a++]&63)<<6|o[a++]&63,$a>8191&&((tt??(tt=[])).push(String.fromCharCode.apply(String,nt)),$a=0);return tt!=null?($a>0&&tt.push(String.fromCharCode.apply(String,nt.slice(0,$a))),tt.join("")):String.fromCharCode.apply(String,nt.slice(0,$a))}function write$1(o,a,c){const d=c;let tt,nt;for(let $a=0;$a>6|192,a[c++]=tt&63|128):(tt&64512)===55296&&((nt=o.charCodeAt($a+1))&64512)===56320?(tt=65536+((tt&1023)<<10)+(nt&1023),++$a,a[c++]=tt>>18|240,a[c++]=tt>>12&63|128,a[c++]=tt>>6&63|128,a[c++]=tt&63|128):(a[c++]=tt>>12|224,a[c++]=tt>>6&63|128,a[c++]=tt&63|128);return c-d}function indexOutOfRange(o,a){return RangeError(`index out of range: ${o.pos} + ${a??1} > ${o.len}`)}function readFixed32End(o,a){return(o[a-4]|o[a-3]<<8|o[a-2]<<16|o[a-1]<<24)>>>0}class Uint8ArrayReader{constructor(a){aw(this,"buf");aw(this,"pos");aw(this,"len");aw(this,"_slice",Uint8Array.prototype.subarray);this.buf=a,this.pos=0,this.len=a.length}uint32(){let a=4294967295;if(a=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(a=(a|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return a;if((this.pos+=5)>this.len)throw this.pos=this.len,indexOutOfRange(this,10);return a}int32(){return this.uint32()|0}sint32(){const a=this.uint32();return a>>>1^-(a&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);const a=readFloatLE(this.buf,this.pos);return this.pos+=4,a}double(){if(this.pos+8>this.len)throw indexOutOfRange(this,4);const a=readDoubleLE(this.buf,this.pos);return this.pos+=8,a}bytes(){const a=this.uint32(),c=this.pos,d=this.pos+a;if(d>this.len)throw indexOutOfRange(this,a);return this.pos+=a,c===d?new Uint8Array(0):this.buf.subarray(c,d)}string(){const a=this.bytes();return read$1(a,0,a.length)}skip(a){if(typeof a=="number"){if(this.pos+a>this.len)throw indexOutOfRange(this,a);this.pos+=a}else do if(this.pos>=this.len)throw indexOutOfRange(this);while(this.buf[this.pos++]&128);return this}skipType(a){switch(a){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(a=this.uint32()&7)!==4;)this.skipType(a);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${a} at offset ${this.pos}`)}return this}readLongVarint(){const a=new LongBits(0,0);let c=0;if(this.len-this.pos>4){for(;c<4;++c)if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a;if(a.lo=(a.lo|(this.buf[this.pos]&127)<<28)>>>0,a.hi=(a.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return a;c=0}else{for(;c<3;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}return a.lo=(a.lo|(this.buf[this.pos++]&127)<>>0,a}if(this.len-this.pos>4){for(;c<5;++c)if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}else for(;c<5;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw indexOutOfRange(this,8);const a=readFixed32End(this.buf,this.pos+=4),c=readFixed32End(this.buf,this.pos+=4);return new LongBits(a,c)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){const a=decodeUint8Array(this.buf,this.pos);return this.pos+=encodingLength(a),a}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}}function createReader(o){return new Uint8ArrayReader(o instanceof Uint8Array?o:o.subarray())}function decodeMessage(o,a,c){const d=createReader(o);return a.decode(d,void 0,c)}function pool(o){let d,tt=8192;return function($a){if($a<1||$a>4096)return allocUnsafe($a);tt+$a>8192&&(d=allocUnsafe(8192),tt=0);const Ys=d.subarray(tt,tt+=$a);return tt&7&&(tt=(tt|7)+1),Ys}}let Op$1=class{constructor(a,c,d){aw(this,"fn");aw(this,"len");aw(this,"next");aw(this,"val");this.fn=a,this.len=c,this.next=void 0,this.val=d}};function noop$b(){}class State{constructor(a){aw(this,"head");aw(this,"tail");aw(this,"len");aw(this,"next");this.head=a.head,this.tail=a.tail,this.len=a.len,this.next=a.states}}const bufferPool=pool();function alloc$1(o){return globalThis.Buffer!=null?allocUnsafe(o):bufferPool(o)}class Uint8ArrayWriter{constructor(){aw(this,"len");aw(this,"head");aw(this,"tail");aw(this,"states");this.len=0,this.head=new Op$1(noop$b,0,0),this.tail=this.head,this.states=null}_push(a,c,d){return this.tail=this.tail.next=new Op$1(a,c,d),this.len+=c,this}uint32(a){return this.len+=(this.tail=this.tail.next=new VarintOp((a=a>>>0)<128?1:a<16384?2:a<2097152?3:a<268435456?4:5,a)).len,this}int32(a){return a<0?this._push(writeVarint64,10,LongBits.fromNumber(a)):this.uint32(a)}sint32(a){return this.uint32((a<<1^a>>31)>>>0)}uint64(a){const c=LongBits.fromBigInt(a);return this._push(writeVarint64,c.length(),c)}uint64Number(a){return this._push(encodeUint8Array,encodingLength(a),a)}uint64String(a){return this.uint64(BigInt(a))}int64(a){return this.uint64(a)}int64Number(a){return this.uint64Number(a)}int64String(a){return this.uint64String(a)}sint64(a){const c=LongBits.fromBigInt(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64Number(a){const c=LongBits.fromNumber(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64String(a){return this.sint64(BigInt(a))}bool(a){return this._push(writeByte,1,a?1:0)}fixed32(a){return this._push(writeFixed32,4,a>>>0)}sfixed32(a){return this.fixed32(a)}fixed64(a){const c=LongBits.fromBigInt(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64Number(a){const c=LongBits.fromNumber(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64String(a){return this.fixed64(BigInt(a))}sfixed64(a){return this.fixed64(a)}sfixed64Number(a){return this.fixed64Number(a)}sfixed64String(a){return this.fixed64String(a)}float(a){return this._push(writeFloatLE,4,a)}double(a){return this._push(writeDoubleLE,8,a)}bytes(a){const c=a.length>>>0;return c===0?this._push(writeByte,1,0):this.uint32(c)._push(writeBytes,c,a)}string(a){const c=length$1(a);return c!==0?this.uint32(c)._push(write$1,c,a):this._push(writeByte,1,0)}fork(){return this.states=new State(this),this.head=this.tail=new Op$1(noop$b,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Op$1(noop$b,0,0),this.len=0),this}ldelim(){const a=this.head,c=this.tail,d=this.len;return this.reset().uint32(d),d!==0&&(this.tail.next=a.next,this.tail=c,this.len+=d),this}finish(){let a=this.head.next;const c=alloc$1(this.len);let d=0;for(;a!=null;)a.fn(a.val,c,d),d+=a.len,a=a.next;return c}}function writeByte(o,a,c){a[c]=o&255}function writeVarint32(o,a,c){for(;o>127;)a[c++]=o&127|128,o>>>=7;a[c]=o}class VarintOp extends Op$1{constructor(c,d){super(writeVarint32,c,d);aw(this,"next");this.next=void 0}}function writeVarint64(o,a,c){for(;o.hi!==0;)a[c++]=o.lo&127|128,o.lo=(o.lo>>>7|o.hi<<25)>>>0,o.hi>>>=7;for(;o.lo>127;)a[c++]=o.lo&127|128,o.lo=o.lo>>>7;a[c++]=o.lo}function writeFixed32(o,a,c){a[c]=o&255,a[c+1]=o>>>8&255,a[c+2]=o>>>16&255,a[c+3]=o>>>24}function writeBytes(o,a,c){a.set(o,c)}globalThis.Buffer!=null&&(Uint8ArrayWriter.prototype.bytes=function(o){const a=o.length>>>0;return this.uint32(a),a>0&&this._push(writeBytesBuffer,a,o),this},Uint8ArrayWriter.prototype.string=function(o){const a=globalThis.Buffer.byteLength(o);return this.uint32(a),a>0&&this._push(writeStringBuffer,a,o),this});function writeBytesBuffer(o,a,c){a.set(o,c)}function writeStringBuffer(o,a,c){o.length<40?write$1(o,a,c):a.utf8Write!=null?a.utf8Write(o,c):a.set(fromString(o),c)}function createWriter(){return new Uint8ArrayWriter}function encodeMessage(o,a){const c=createWriter();return a.encode(o,c,{lengthDelimited:!1}),c.finish()}var CODEC_TYPES;(function(o){o[o.VARINT=0]="VARINT",o[o.BIT64=1]="BIT64",o[o.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",o[o.START_GROUP=3]="START_GROUP",o[o.END_GROUP=4]="END_GROUP",o[o.BIT32=5]="BIT32"})(CODEC_TYPES||(CODEC_TYPES={}));function createCodec(o,a,c,d){return{name:o,type:a,encode:c,decode:d}}function enumeration(o){function a(tt){if(o[tt.toString()]==null)throw new Error("Invalid enum value");return o[tt]}const c=function(nt,$a){const Ys=a(nt);$a.int32(Ys)},d=function(nt){const $a=nt.int32();return a($a)};return createCodec("enum",CODEC_TYPES.VARINT,c,d)}function message(o,a){return createCodec("message",CODEC_TYPES.LENGTH_DELIMITED,o,a)}var KeyType;(function(o){o.RSA="RSA",o.Ed25519="Ed25519",o.Secp256k1="Secp256k1"})(KeyType||(KeyType={}));var __KeyTypeValues;(function(o){o[o.RSA=0]="RSA",o[o.Ed25519=1]="Ed25519",o[o.Secp256k1=2]="Secp256k1"})(__KeyTypeValues||(__KeyTypeValues={}));(function(o){o.codec=()=>enumeration(__KeyTypeValues)})(KeyType||(KeyType={}));var PublicKey$2;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PublicKey$2||(PublicKey$2={}));var PrivateKey;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PrivateKey||(PrivateKey={}));class Ed25519PublicKey{constructor(a){aw(this,"_key");this._key=ensureKey(a,PUBLIC_KEY_BYTE_LENGTH)}verify(a,c){return hashAndVerify$2(this._key,c,a)}marshal(){return this._key}get bytes(){return PublicKey$2.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class Ed25519PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=ensureKey(a,PRIVATE_KEY_BYTE_LENGTH),this._publicKey=ensureKey(c,PUBLIC_KEY_BYTE_LENGTH)}sign(a){return hashAndSign$2(this._key,a)}get public(){return new Ed25519PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}async id(){const a=identity$2.digest(this.public.bytes);return base58btc.encode(a.bytes).substring(1)}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalEd25519PrivateKey(o){if(o.length>PRIVATE_KEY_BYTE_LENGTH){o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH+PUBLIC_KEY_BYTE_LENGTH);const d=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),tt=o.subarray(PRIVATE_KEY_BYTE_LENGTH,o.length);return new Ed25519PrivateKey(d,tt)}o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH);const a=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),c=o.subarray(PUBLIC_KEY_BYTE_LENGTH);return new Ed25519PrivateKey(a,c)}function unmarshalEd25519PublicKey(o){return o=ensureKey(o,PUBLIC_KEY_BYTE_LENGTH),new Ed25519PublicKey(o)}async function generateKeyPair$3(){const{privateKey:o,publicKey:a}=generateKey$2();return new Ed25519PrivateKey(o,a)}async function generateKeyPairFromSeed(o){const{privateKey:a,publicKey:c}=generateKeyFromSeed(o);return new Ed25519PrivateKey(a,c)}function ensureKey(o,a){if(o=Uint8Array.from(o??[]),o.length!==a)throw new CodeError(`Key must be a Uint8Array of length ${a}, got ${o.length}`,"ERR_INVALID_KEY_TYPE");return o}const Ed25519=Object.freeze(Object.defineProperty({__proto__:null,Ed25519PrivateKey,Ed25519PublicKey,generateKeyPair:generateKeyPair$3,generateKeyPairFromSeed,unmarshalEd25519PrivateKey,unmarshalEd25519PublicKey},Symbol.toStringTag,{value:"Module"}));function toString$b(o,a="utf8"){const c=BASES[a];if(c==null)throw new Error(`Unsupported encoding "${a}"`);return c.encoder.encode(o).substring(1)}function randomBytes$4(o){if(isNaN(o)||o<=0)throw new CodeError("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return randomBytes$5(o)}let HMAC$1=class extends Hash$9{constructor(a,c){super(),this.finished=!1,this.destroyed=!1,hash$a(a);const d=toBytes$1(c);if(this.iHash=a.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const tt=this.blockLen,nt=new Uint8Array(tt);nt.set(d.length>tt?a.create().update(d).digest():d);for(let $a=0;$anew HMAC$1(o,a).update(c).digest();hmac$2.create=(o,a)=>new HMAC$1(o,a);function pbkdf2Init(o,a,c,d){hash$a(o);const tt=checkOpts({dkLen:32,asyncTick:10},d),{c:nt,dkLen:$a,asyncTick:Ys}=tt;if(number$3(nt),number$3($a),number$3(Ys),nt<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const gu=toBytes$1(a),xu=toBytes$1(c),$u=new Uint8Array($a),Iu=hmac$2.create(o,gu),Xu=Iu._cloneInto().update(xu);return{c:nt,dkLen:$a,asyncTick:Ys,DK:$u,PRF:Iu,PRFSalt:Xu}}function pbkdf2Output(o,a,c,d,tt){return o.destroy(),a.destroy(),d&&d.destroy(),tt.fill(0),c}async function pbkdf2Async(o,a,c,d){const{c:tt,dkLen:nt,asyncTick:$a,DK:Ys,PRF:gu,PRFSalt:xu}=pbkdf2Init(o,a,c,d);let $u;const Iu=new Uint8Array(4),Xu=createView$1(Iu),i0=new Uint8Array(gu.outputLen);for(let p0=1,w0=0;w0{gu._cloneInto($u).update(i0).digestInto(i0);for(let $0=0;$00&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=d,c+d>a.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):c+d}toBER(a,c){const d=new ArrayBuffer(2);if(!a){const tt=new Uint8Array(d);tt[0]=5,tt[1]=0}return c&&c.write(d),d}onAsciiEncoding(){return`${this.constructor.NAME}`}}_a$t=Null;typeStore.Null=_a$t;Null.NAME="NULL";class LocalBooleanValueBlock extends HexBlock(ValueBlock){constructor({value:a,...c}={}){super(c),c.valueHex?this.valueHexView=BufferSourceConverter.toUint8Array(c.valueHex):this.valueHexView=new Uint8Array(1),a&&(this.value=a)}get value(){for(const a of this.valueHexView)if(a>0)return!0;return!1}set value(a){this.valueHexView[0]=a?255:0}fromBER(a,c,d){const tt=BufferSourceConverter.toUint8Array(a);return checkBufferParams(this,tt,c,d)?(this.valueHexView=tt.subarray(c,c+d),d>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,utilDecodeTC.call(this),this.blockLength=d,c+d):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}}LocalBooleanValueBlock.NAME="BooleanValueBlock";var _a$s;let Boolean$1=class extends BaseBlock{constructor(a={}){super(a,LocalBooleanValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(a){this.valueBlock.value=a}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};_a$s=Boolean$1;typeStore.Boolean=_a$s;Boolean$1.NAME="BOOLEAN";class LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock){constructor({isConstructed:a=!1,...c}={}){super(c),this.isConstructed=a}fromBER(a,c,d){let tt=0;if(this.isConstructed){if(this.isHexOnly=!1,tt=LocalConstructedValueBlock.prototype.fromBER.call(this,a,c,d),tt===-1)return tt;for(let nt=0;nt0&&xu.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=xu.unusedBits}return tt}const nt=BufferSourceConverter.toUint8Array(a);if(!checkBufferParams(this,nt,c,d))return-1;const $a=nt.subarray(c,c+d);if(this.unusedBits=$a[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){const Ys=$a.subarray(1);try{if(Ys.byteLength){const gu=localFromBER(Ys,0,Ys.byteLength);gu.offset!==-1&&gu.offset===d-1&&(this.value=[gu.result])}}catch{}}return this.valueHexView=$a.subarray(1),this.blockLength=$a.length,c+d}toBER(a,c){if(this.isConstructed)return LocalConstructedValueBlock.prototype.toBER.call(this,a,c);if(a)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return EMPTY_BUFFER;const d=new Uint8Array(this.valueHexView.length+1);return d[0]=this.unusedBits,d.set(this.valueHexView,1),d.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}}LocalBitStringValueBlock.NAME="BitStringValueBlock";var _a$q;class BitString extends BaseBlock{constructor({idBlock:a={},lenBlock:c={},...d}={}){var tt,nt;(tt=d.isConstructed)!==null&&tt!==void 0||(d.isConstructed=!!(!((nt=d.value)===null||nt===void 0)&&nt.length)),super({idBlock:{isConstructed:d.isConstructed,...a},lenBlock:{...c,isIndefiniteForm:!!d.isIndefiniteForm},...d},LocalBitStringValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(a,c,d){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(a,c,d)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Constructed.prototype.onAsciiEncoding.call(this);{const a=[],c=this.valueBlock.valueHexView;for(const tt of c)a.push(tt.toString(2).padStart(8,"0"));const d=a.join("");return`${this.constructor.NAME} : ${d.substring(0,d.length-this.valueBlock.unusedBits)}`}}}_a$q=BitString;typeStore.BitString=_a$q;BitString.NAME=BIT_STRING_NAME;var _a$p;function viewAdd(o,a){const c=new Uint8Array([0]),d=new Uint8Array(o),tt=new Uint8Array(a);let nt=d.slice(0);const $a=nt.length-1,Ys=tt.slice(0),gu=Ys.length-1;let xu=0;const $u=gu<$a?$a:gu;let Iu=0;for(let Xu=$u;Xu>=0;Xu--,Iu++){switch(!0){case Iu=nt.length:nt=utilConcatView(new Uint8Array([xu%10]),nt);break;default:nt[$a-Iu]=xu%10}}return c[0]>0&&(nt=utilConcatView(c,nt)),nt}function power2(o){if(o>=powers2.length)for(let a=powers2.length;a<=o;a++){const c=new Uint8Array([0]);let d=powers2[a-1].slice(0);for(let tt=d.length-1;tt>=0;tt--){const nt=new Uint8Array([(d[tt]<<1)+c[0]]);c[0]=nt[0]/10,d[tt]=nt[0]%10}c[0]>0&&(d=utilConcatView(c,d)),powers2.push(d)}return powers2[o]}function viewSub(o,a){let c=0;const d=new Uint8Array(o),tt=new Uint8Array(a),nt=d.slice(0),$a=nt.length-1,Ys=tt.slice(0),gu=Ys.length-1;let xu,$u=0;for(let Iu=gu;Iu>=0;Iu--,$u++)switch(xu=nt[$a-$u]-Ys[gu-$u]-c,!0){case xu<0:c=1,nt[$a-$u]=xu+10;break;default:c=0,nt[$a-$u]=xu}if(c>0)for(let Iu=$a-gu+1;Iu>=0;Iu--,$u++)if(xu=nt[$a-$u]-c,xu<0)c=1,nt[$a-$u]=xu+10;else{c=0,nt[$a-$u]=xu;break}return nt.slice()}class LocalIntegerValueBlock extends HexBlock(ValueBlock){constructor({value:a,...c}={}){super(c),this._valueDec=0,c.valueHex&&this.setValueHex(),a!==void 0&&(this.valueDec=a)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=utilDecodeTC.call(this)))}set valueDec(a){this._valueDec=a,this.isHexOnly=!1,this.valueHexView=new Uint8Array(utilEncodeTC(a))}get valueDec(){return this._valueDec}fromDER(a,c,d,tt=0){const nt=this.fromBER(a,c,d);if(nt===-1)return nt;const $a=this.valueHexView;return $a[0]===0&&$a[1]&128?this.valueHexView=$a.subarray(1):tt!==0&&$a.length1&&(tt=$a.length+1),this.valueHexView=$a.subarray(tt-$a.length)),nt}toDER(a=!1){const c=this.valueHexView;switch(!0){case(c[0]&128)!==0:{const d=new Uint8Array(this.valueHexView.length+1);d[0]=0,d.set(c,1),this.valueHexView=d}break;case(c[0]===0&&(c[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(a)}fromBER(a,c,d){const tt=super.fromBER(a,c,d);return tt===-1||this.setValueHex(),tt}toBER(a){return a?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){const a=this.valueHexView.length*8-1;let c=new Uint8Array(this.valueHexView.length*8/3),d=0,tt;const nt=this.valueHexView;let $a="",Ys=!1;for(let gu=nt.byteLength-1;gu>=0;gu--){tt=nt[gu];for(let xu=0;xu<8;xu++){if((tt&1)===1)switch(d){case a:c=viewSub(power2(d),c),$a="-";break;default:c=viewAdd(c,power2(d))}d++,tt>>=1}}for(let gu=0;gu0;){const nt=new LocalSidValueBlock;if(tt=nt.fromBER(a,tt,d),tt===-1)return this.blockLength=0,this.error=nt.error,tt;this.value.length===0&&(nt.isFirstSid=!0),this.blockLength+=nt.blockLength,d-=nt.blockLength,this.value.push(nt)}return tt}toBER(a){const c=[];for(let d=0;dNumber.MAX_SAFE_INTEGER){assertBigInt();const Ys=BigInt(tt);$a.valueBigInt=Ys}else if($a.valueDec=parseInt(tt,10),isNaN($a.valueDec))return;this.value.length||($a.isFirstSid=!0,nt=!0),this.value.push($a)}while(d!==-1)}toString(){let a="",c=!1;for(let d=0;d0;){const nt=new LocalRelativeSidValueBlock;if(tt=nt.fromBER(a,tt,d),tt===-1)return this.blockLength=0,this.error=nt.error,tt;this.blockLength+=nt.blockLength,d-=nt.blockLength,this.value.push(nt)}return tt}toBER(a,c){const d=[];for(let tt=0;tt4)continue;const Ys=4-$a.length;for(let gu=$a.length-1;gu>=0;gu--)d[tt*4+gu+Ys]=$a[gu]}this.valueBlock.value=a}}LocalUniversalStringValueBlock.NAME="UniversalStringValueBlock";var _a$g;class UniversalString extends LocalUniversalStringValueBlock{constructor({...a}={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}}_a$g=UniversalString;typeStore.UniversalString=_a$g;UniversalString.NAME="UniversalString";var _a$f;class NumericString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}}_a$f=NumericString;typeStore.NumericString=_a$f;NumericString.NAME="NumericString";var _a$e;class PrintableString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}}_a$e=PrintableString;typeStore.PrintableString=_a$e;PrintableString.NAME="PrintableString";var _a$d;class TeletexString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}}_a$d=TeletexString;typeStore.TeletexString=_a$d;TeletexString.NAME="TeletexString";var _a$c;class VideotexString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}}_a$c=VideotexString;typeStore.VideotexString=_a$c;VideotexString.NAME="VideotexString";var _a$b;class IA5String extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}}_a$b=IA5String;typeStore.IA5String=_a$b;IA5String.NAME="IA5String";var _a$a;class GraphicString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}}_a$a=GraphicString;typeStore.GraphicString=_a$a;GraphicString.NAME="GraphicString";var _a$9;class VisibleString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}}_a$9=VisibleString;typeStore.VisibleString=_a$9;VisibleString.NAME="VisibleString";var _a$8;class GeneralString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}}_a$8=GeneralString;typeStore.GeneralString=_a$8;GeneralString.NAME="GeneralString";var _a$7;class CharacterString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}}_a$7=CharacterString;typeStore.CharacterString=_a$7;CharacterString.NAME="CharacterString";var _a$6;class UTCTime extends VisibleString{constructor({value:a,valueDate:c,...d}={}){if(super(d),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,a){this.fromString(a),this.valueBlock.valueHexView=new Uint8Array(a.length);for(let tt=0;tt=50?this.year=1900+tt:this.year=2e3+tt,this.month=parseInt(d[2],10),this.day=parseInt(d[3],10),this.hour=parseInt(d[4],10),this.minute=parseInt(d[5],10),this.second=parseInt(d[6],10)}toString(a="iso"){if(a==="iso"){const c=new Array(7);return c[0]=padNumber(this.year<2e3?this.year-1900:this.year-2e3,2),c[1]=padNumber(this.month,2),c[2]=padNumber(this.day,2),c[3]=padNumber(this.hour,2),c[4]=padNumber(this.minute,2),c[5]=padNumber(this.second,2),c[6]="Z",c.join("")}return super.toString(a)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}}_a$6=UTCTime;typeStore.UTCTime=_a$6;UTCTime.NAME="UTCTime";var _a$5;class GeneralizedTime extends UTCTime{constructor(a={}){var c;super(a),(c=this.millisecond)!==null&&c!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(a){super.fromDate(a),this.millisecond=a.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(a){let c=!1,d="",tt="",nt=0,$a,Ys=0,gu=0;if(a[a.length-1]==="Z")d=a.substring(0,a.length-1),c=!0;else{const Iu=new Number(a[a.length-1]);if(isNaN(Iu.valueOf()))throw new Error("Wrong input string for conversion");d=a}if(c){if(d.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(d.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let Iu=1,Xu=d.indexOf("+"),i0="";if(Xu===-1&&(Xu=d.indexOf("-"),Iu=-1),Xu!==-1){if(i0=d.substring(Xu+1),d=d.substring(0,Xu),i0.length!==2&&i0.length!==4)throw new Error("Wrong input string for conversion");let p0=parseInt(i0.substring(0,2),10);if(isNaN(p0.valueOf()))throw new Error("Wrong input string for conversion");if(Ys=Iu*p0,i0.length===4){if(p0=parseInt(i0.substring(2,4),10),isNaN(p0.valueOf()))throw new Error("Wrong input string for conversion");gu=Iu*p0}}}let xu=d.indexOf(".");if(xu===-1&&(xu=d.indexOf(",")),xu!==-1){const Iu=new Number(`0${d.substring(xu)}`);if(isNaN(Iu.valueOf()))throw new Error("Wrong input string for conversion");nt=Iu.valueOf(),tt=d.substring(0,xu)}else tt=d;switch(!0){case tt.length===8:if($a=/(\d{4})(\d{2})(\d{2})/ig,xu!==-1)throw new Error("Wrong input string for conversion");break;case tt.length===10:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,xu!==-1){let Iu=60*nt;this.minute=Math.floor(Iu),Iu=60*(Iu-this.minute),this.second=Math.floor(Iu),Iu=1e3*(Iu-this.second),this.millisecond=Math.floor(Iu)}break;case tt.length===12:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,xu!==-1){let Iu=60*nt;this.second=Math.floor(Iu),Iu=1e3*(Iu-this.second),this.millisecond=Math.floor(Iu)}break;case tt.length===14:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,xu!==-1){const Iu=1e3*nt;this.millisecond=Math.floor(Iu)}break;default:throw new Error("Wrong input string for conversion")}const $u=$a.exec(tt);if($u===null)throw new Error("Wrong input string for conversion");for(let Iu=1;Iu<$u.length;Iu++)switch(Iu){case 1:this.year=parseInt($u[Iu],10);break;case 2:this.month=parseInt($u[Iu],10);break;case 3:this.day=parseInt($u[Iu],10);break;case 4:this.hour=parseInt($u[Iu],10)+Ys;break;case 5:this.minute=parseInt($u[Iu],10)+gu;break;case 6:this.second=parseInt($u[Iu],10);break;default:throw new Error("Wrong input string for conversion")}if(c===!1){const Iu=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=Iu.getUTCFullYear(),this.month=Iu.getUTCMonth(),this.day=Iu.getUTCDay(),this.hour=Iu.getUTCHours(),this.minute=Iu.getUTCMinutes(),this.second=Iu.getUTCSeconds(),this.millisecond=Iu.getUTCMilliseconds()}}toString(a="iso"){if(a==="iso"){const c=[];return c.push(padNumber(this.year,4)),c.push(padNumber(this.month,2)),c.push(padNumber(this.day,2)),c.push(padNumber(this.hour,2)),c.push(padNumber(this.minute,2)),c.push(padNumber(this.second,2)),this.millisecond!==0&&(c.push("."),c.push(padNumber(this.millisecond,3))),c.push("Z"),c.join("")}return super.toString(a)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}}_a$5=GeneralizedTime;typeStore.GeneralizedTime=_a$5;GeneralizedTime.NAME="GeneralizedTime";var _a$4;class DATE extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}}_a$4=DATE;typeStore.DATE=_a$4;DATE.NAME="DATE";var _a$3;class TimeOfDay extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}}_a$3=TimeOfDay;typeStore.TimeOfDay=_a$3;TimeOfDay.NAME="TimeOfDay";var _a$2;class DateTime extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}}_a$2=DateTime;typeStore.DateTime=_a$2;DateTime.NAME="DateTime";var _a$1$1;class Duration extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}}_a$1$1=Duration;typeStore.Duration=_a$1$1;Duration.NAME="Duration";var _a$x;let TIME$1=class extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};_a$x=TIME$1;typeStore.TIME=_a$x;TIME$1.NAME="TIME";function pkcs1ToJwk(o){const{result:a}=fromBER(o),c=a.valueBlock.value;return{n:toString$b(bnToBuf(c[1].toBigInt()),"base64url"),e:toString$b(bnToBuf(c[2].toBigInt()),"base64url"),d:toString$b(bnToBuf(c[3].toBigInt()),"base64url"),p:toString$b(bnToBuf(c[4].toBigInt()),"base64url"),q:toString$b(bnToBuf(c[5].toBigInt()),"base64url"),dp:toString$b(bnToBuf(c[6].toBigInt()),"base64url"),dq:toString$b(bnToBuf(c[7].toBigInt()),"base64url"),qi:toString$b(bnToBuf(c[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function jwkToPkcs1(o){if(o.n==null||o.e==null||o.d==null||o.p==null||o.q==null||o.dp==null||o.dq==null||o.qi==null)throw new CodeError("JWK was missing components","ERR_INVALID_PARAMETERS");const c=new Sequence({value:[new Integer({value:0}),Integer.fromBigInt(bufToBn(fromString(o.n,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.e,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.d,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.p,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.q,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.dp,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.dq,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.qi,"base64url")))]}).toBER();return new Uint8Array(c,0,c.byteLength)}function pkixToJwk(o){const{result:a}=fromBER(o),c=a.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:toString$b(bnToBuf(c[0].toBigInt()),"base64url"),e:toString$b(bnToBuf(c[1].toBigInt()),"base64url")}}function jwkToPkix(o){if(o.n==null||o.e==null)throw new CodeError("JWK was missing components","ERR_INVALID_PARAMETERS");const c=new Sequence({value:[new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.1.1"}),new Null]}),new BitString({valueHex:new Sequence({value:[Integer.fromBigInt(bufToBn(fromString(o.n,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(c,0,c.byteLength)}function bnToBuf(o){let a=o.toString(16);a.length%2>0&&(a=`0${a}`);const c=a.length/2,d=new Uint8Array(c);let tt=0,nt=0;for(;tt0&&(d=`0${d}`),a.push(d)}),BigInt("0x"+a.join(""))}const SALT_LENGTH=16,KEY_SIZE=32,ITERATIONS=1e4;async function exportToPem(o,a){const c=webcrypto.get(),tt=new Sequence({value:[new Integer({value:0}),new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.1.1"}),new Null]}),new OctetString({valueHex:o.marshal()})]}).toBER(),nt=new Uint8Array(tt,0,tt.byteLength),$a=randomBytes$4(SALT_LENGTH),Ys=await pbkdf2Async(sha512$3,a,$a,{c:ITERATIONS,dkLen:KEY_SIZE}),gu=randomBytes$4(16),xu=await c.subtle.importKey("raw",Ys,"AES-CBC",!1,["encrypt"]),$u=await c.subtle.encrypt({name:"AES-CBC",iv:gu},xu,nt),Iu=new Sequence({value:[new OctetString({valueHex:$a}),new Integer({value:ITERATIONS}),new Integer({value:KEY_SIZE}),new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.2.11"}),new Null]})]}),Xu=new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.5.13"}),new Sequence({value:[new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.5.12"}),Iu]}),new Sequence({value:[new ObjectIdentifier({value:"2.16.840.1.101.3.4.1.42"}),new OctetString({valueHex:gu})]})]})]}),p0=new Sequence({value:[Xu,new OctetString({valueHex:$u})]}).toBER(),w0=new Uint8Array(p0,0,p0.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...toString$b(w0,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(` -`)}async function generateKey$1(o){const a=await webcrypto.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:o,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),c=await exportKey(a);return{privateKey:c[0],publicKey:c[1]}}async function unmarshalPrivateKey$1(o){const c=[await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await derivePublicFromPrivate(o)],d=await exportKey({privateKey:c[0],publicKey:c[1]});return{privateKey:d[0],publicKey:d[1]}}async function hashAndSign$1(o,a){const c=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),d=await webcrypto.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},c,a instanceof Uint8Array?a:a.subarray());return new Uint8Array(d,0,d.byteLength)}async function hashAndVerify$1(o,a,c){const d=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return webcrypto.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},d,a,c instanceof Uint8Array?c:c.subarray())}async function exportKey(o){if(o.privateKey==null||o.publicKey==null)throw new CodeError("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([webcrypto.get().subtle.exportKey("jwk",o.privateKey),webcrypto.get().subtle.exportKey("jwk",o.publicKey)])}async function derivePublicFromPrivate(o){return webcrypto.get().subtle.importKey("jwk",{kty:o.kty,n:o.n,e:o.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function keySize(o){if(o.kty!=="RSA")throw new CodeError("invalid key type","ERR_INVALID_KEY_TYPE");if(o.n==null)throw new CodeError("invalid key modulus","ERR_INVALID_KEY_MODULUS");return fromString(o.n,"base64url").length*8}const MAX_RSA_KEY_SIZE=8192;class RsaPublicKey{constructor(a){aw(this,"_key");this._key=a}verify(a,c){return hashAndVerify$1(this._key,c,a)}marshal(){return jwkToPkix(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class RsaPrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c}genSecret(){return randomBytes$4(16)}sign(a){return hashAndSign$1(this._key,a)}get public(){if(this._publicKey==null)throw new CodeError("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new RsaPublicKey(this._publicKey)}marshal(){return jwkToPkcs1(this._key)}get bytes(){return PrivateKey.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="pkcs-8"){if(c==="pkcs-8")return exportToPem(this,a);if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}async function unmarshalRsaPrivateKey(o){const a=pkcs1ToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const c=await unmarshalPrivateKey$1(a);return new RsaPrivateKey(c.privateKey,c.publicKey)}function unmarshalRsaPublicKey(o){const a=pkixToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new RsaPublicKey(a)}async function fromJwk(o){if(keySize(o)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await unmarshalPrivateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}async function generateKeyPair$2(o){if(o>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await generateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}const RSA=Object.freeze(Object.defineProperty({__proto__:null,MAX_RSA_KEY_SIZE,RsaPrivateKey,RsaPublicKey,fromJwk,generateKeyPair:generateKeyPair$2,unmarshalRsaPrivateKey,unmarshalRsaPublicKey},Symbol.toStringTag,{value:"Module"})),SHA256_K$2=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),SHA256_IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),SHA256_W$2=new Uint32Array(64);let SHA256$4=class extends HashMD{constructor(){super(64,32,8,!1),this.A=SHA256_IV[0]|0,this.B=SHA256_IV[1]|0,this.C=SHA256_IV[2]|0,this.D=SHA256_IV[3]|0,this.E=SHA256_IV[4]|0,this.F=SHA256_IV[5]|0,this.G=SHA256_IV[6]|0,this.H=SHA256_IV[7]|0}get(){const{A:a,B:c,C:d,D:tt,E:nt,F:$a,G:Ys,H:gu}=this;return[a,c,d,tt,nt,$a,Ys,gu]}set(a,c,d,tt,nt,$a,Ys,gu){this.A=a|0,this.B=c|0,this.C=d|0,this.D=tt|0,this.E=nt|0,this.F=$a|0,this.G=Ys|0,this.H=gu|0}process(a,c){for(let Iu=0;Iu<16;Iu++,c+=4)SHA256_W$2[Iu]=a.getUint32(c,!1);for(let Iu=16;Iu<64;Iu++){const Xu=SHA256_W$2[Iu-15],i0=SHA256_W$2[Iu-2],p0=rotr$1(Xu,7)^rotr$1(Xu,18)^Xu>>>3,w0=rotr$1(i0,17)^rotr$1(i0,19)^i0>>>10;SHA256_W$2[Iu]=w0+SHA256_W$2[Iu-7]+p0+SHA256_W$2[Iu-16]|0}let{A:d,B:tt,C:nt,D:$a,E:Ys,F:gu,G:xu,H:$u}=this;for(let Iu=0;Iu<64;Iu++){const Xu=rotr$1(Ys,6)^rotr$1(Ys,11)^rotr$1(Ys,25),i0=$u+Xu+Chi$2(Ys,gu,xu)+SHA256_K$2[Iu]+SHA256_W$2[Iu]|0,w0=(rotr$1(d,2)^rotr$1(d,13)^rotr$1(d,22))+Maj$2(d,tt,nt)|0;$u=xu,xu=gu,gu=Ys,Ys=$a+i0|0,$a=nt,nt=tt,tt=d,d=i0+w0|0}d=d+this.A|0,tt=tt+this.B|0,nt=nt+this.C|0,$a=$a+this.D|0,Ys=Ys+this.E|0,gu=gu+this.F|0,xu=xu+this.G|0,$u=$u+this.H|0,this.set(d,tt,nt,$a,Ys,gu,xu,$u)}roundClean(){SHA256_W$2.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const sha256$5=wrapConstructor$1(()=>new SHA256$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function validatePointOpts$1(o){const a=validateBasic$2(o);validateObject$2(a,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:c,Fp:d,a:tt}=a;if(c){if(!d.eql(tt,d.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof c!="object"||typeof c.beta!="bigint"||typeof c.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...a})}const{bytesToNumberBE:b2n$1,hexToBytes:h2b$1}=ut$4,DER$1={Err:class extends Error{constructor(a=""){super(a)}},_parseInt(o){const{Err:a}=DER$1;if(o.length<2||o[0]!==2)throw new a("Invalid signature integer tag");const c=o[1],d=o.subarray(2,c+2);if(!c||d.length!==c)throw new a("Invalid signature integer: wrong length");if(d[0]&128)throw new a("Invalid signature integer: negative");if(d[0]===0&&!(d[1]&128))throw new a("Invalid signature integer: unnecessary leading zero");return{d:b2n$1(d),l:o.subarray(c+2)}},toSig(o){const{Err:a}=DER$1,c=typeof o=="string"?h2b$1(o):o;abytes(c);let d=c.length;if(d<2||c[0]!=48)throw new a("Invalid signature tag");if(c[1]!==d-2)throw new a("Invalid signature: incorrect length");const{d:tt,l:nt}=DER$1._parseInt(c.subarray(2)),{d:$a,l:Ys}=DER$1._parseInt(nt);if(Ys.length)throw new a("Invalid signature: left bytes after parsing");return{r:tt,s:$a}},hexFromSig(o){const a=xu=>Number.parseInt(xu[0],16)&8?"00"+xu:xu,c=xu=>{const $u=xu.toString(16);return $u.length&1?`0${$u}`:$u},d=a(c(o.s)),tt=a(c(o.r)),nt=d.length/2,$a=tt.length/2,Ys=c(nt),gu=c($a);return`30${c($a+nt+4)}02${gu}${tt}02${Ys}${d}`}},_0n$b=BigInt(0),_1n$c=BigInt(1),_2n$8=BigInt(2),_3n$3=BigInt(3),_4n$2=BigInt(4);function weierstrassPoints$1(o){const a=validatePointOpts$1(o),{Fp:c}=a,d=a.toBytes||((p0,w0,A0)=>{const $0=w0.toAffine();return concatBytes$3(Uint8Array.from([4]),c.toBytes($0.x),c.toBytes($0.y))}),tt=a.fromBytes||(p0=>{const w0=p0.subarray(1),A0=c.fromBytes(w0.subarray(0,c.BYTES)),$0=c.fromBytes(w0.subarray(c.BYTES,2*c.BYTES));return{x:A0,y:$0}});function nt(p0){const{a:w0,b:A0}=a,$0=c.sqr(p0),O0=c.mul($0,p0);return c.add(c.add(O0,c.mul(p0,w0)),A0)}if(!c.eql(c.sqr(a.Gy),nt(a.Gx)))throw new Error("bad generator point: equation left != right");function $a(p0){return typeof p0=="bigint"&&_0n$bc.eql(L0,c.ZERO);return O0(A0)&&O0($0)?Iu.ZERO:new Iu(A0,$0,c.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(w0){const A0=c.invertBatch(w0.map($0=>$0.pz));return w0.map(($0,O0)=>$0.toAffine(A0[O0])).map(Iu.fromAffine)}static fromHex(w0){const A0=Iu.fromAffine(tt(ensureBytes$3("pointHex",w0)));return A0.assertValidity(),A0}static fromPrivateKey(w0){return Iu.BASE.multiply(gu(w0))}_setWindowSize(w0){this._WINDOW_SIZE=w0,xu.delete(this)}assertValidity(){if(this.is0()){if(a.allowInfinityPoint&&!c.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:w0,y:A0}=this.toAffine();if(!c.isValid(w0)||!c.isValid(A0))throw new Error("bad point: x or y not FE");const $0=c.sqr(A0),O0=nt(w0);if(!c.eql($0,O0))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:w0}=this.toAffine();if(c.isOdd)return!c.isOdd(w0);throw new Error("Field doesn't support isOdd")}equals(w0){$u(w0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:q0,pz:F0}=w0,u1=c.eql(c.mul(A0,F0),c.mul(L0,O0)),g1=c.eql(c.mul($0,F0),c.mul(q0,O0));return u1&&g1}negate(){return new Iu(this.px,c.neg(this.py),this.pz)}double(){const{a:w0,b:A0}=a,$0=c.mul(A0,_3n$3),{px:O0,py:L0,pz:q0}=this;let F0=c.ZERO,u1=c.ZERO,g1=c.ZERO,E1=c.mul(O0,O0),B1=c.mul(L0,L0),lv=c.mul(q0,q0),j1=c.mul(O0,L0);return j1=c.add(j1,j1),g1=c.mul(O0,q0),g1=c.add(g1,g1),F0=c.mul(w0,g1),u1=c.mul($0,lv),u1=c.add(F0,u1),F0=c.sub(B1,u1),u1=c.add(B1,u1),u1=c.mul(F0,u1),F0=c.mul(j1,F0),g1=c.mul($0,g1),lv=c.mul(w0,lv),j1=c.sub(E1,lv),j1=c.mul(w0,j1),j1=c.add(j1,g1),g1=c.add(E1,E1),E1=c.add(g1,E1),E1=c.add(E1,lv),E1=c.mul(E1,j1),u1=c.add(u1,E1),lv=c.mul(L0,q0),lv=c.add(lv,lv),E1=c.mul(lv,j1),F0=c.sub(F0,E1),g1=c.mul(lv,B1),g1=c.add(g1,g1),g1=c.add(g1,g1),new Iu(F0,u1,g1)}add(w0){$u(w0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:q0,pz:F0}=w0;let u1=c.ZERO,g1=c.ZERO,E1=c.ZERO;const B1=a.a,lv=c.mul(a.b,_3n$3);let j1=c.mul(A0,L0),r1=c.mul($0,q0),t1=c.mul(O0,F0),D0=c.add(A0,$0),Z0=c.add(L0,q0);D0=c.mul(D0,Z0),Z0=c.add(j1,r1),D0=c.sub(D0,Z0),Z0=c.add(A0,O0);let f1=c.add(L0,F0);return Z0=c.mul(Z0,f1),f1=c.add(j1,t1),Z0=c.sub(Z0,f1),f1=c.add($0,O0),u1=c.add(q0,F0),f1=c.mul(f1,u1),u1=c.add(r1,t1),f1=c.sub(f1,u1),E1=c.mul(B1,Z0),u1=c.mul(lv,t1),E1=c.add(u1,E1),u1=c.sub(r1,E1),E1=c.add(r1,E1),g1=c.mul(u1,E1),r1=c.add(j1,j1),r1=c.add(r1,j1),t1=c.mul(B1,t1),Z0=c.mul(lv,Z0),r1=c.add(r1,t1),t1=c.sub(j1,t1),t1=c.mul(B1,t1),Z0=c.add(Z0,t1),j1=c.mul(r1,Z0),g1=c.add(g1,j1),j1=c.mul(f1,Z0),u1=c.mul(D0,u1),u1=c.sub(u1,j1),j1=c.mul(D0,r1),E1=c.mul(f1,E1),E1=c.add(E1,j1),new Iu(u1,g1,E1)}subtract(w0){return this.add(w0.negate())}is0(){return this.equals(Iu.ZERO)}wNAF(w0){return i0.wNAFCached(this,xu,w0,A0=>{const $0=c.invertBatch(A0.map(O0=>O0.pz));return A0.map((O0,L0)=>O0.toAffine($0[L0])).map(Iu.fromAffine)})}multiplyUnsafe(w0){const A0=Iu.ZERO;if(w0===_0n$b)return A0;if(Ys(w0),w0===_1n$c)return this;const{endo:$0}=a;if(!$0)return i0.unsafeLadder(this,w0);let{k1neg:O0,k1:L0,k2neg:q0,k2:F0}=$0.splitScalar(w0),u1=A0,g1=A0,E1=this;for(;L0>_0n$b||F0>_0n$b;)L0&_1n$c&&(u1=u1.add(E1)),F0&_1n$c&&(g1=g1.add(E1)),E1=E1.double(),L0>>=_1n$c,F0>>=_1n$c;return O0&&(u1=u1.negate()),q0&&(g1=g1.negate()),g1=new Iu(c.mul(g1.px,$0.beta),g1.py,g1.pz),u1.add(g1)}multiply(w0){Ys(w0);let A0=w0,$0,O0;const{endo:L0}=a;if(L0){const{k1neg:q0,k1:F0,k2neg:u1,k2:g1}=L0.splitScalar(A0);let{p:E1,f:B1}=this.wNAF(F0),{p:lv,f:j1}=this.wNAF(g1);E1=i0.constTimeNegate(q0,E1),lv=i0.constTimeNegate(u1,lv),lv=new Iu(c.mul(lv.px,L0.beta),lv.py,lv.pz),$0=E1.add(lv),O0=B1.add(j1)}else{const{p:q0,f:F0}=this.wNAF(A0);$0=q0,O0=F0}return Iu.normalizeZ([$0,O0])[0]}multiplyAndAddUnsafe(w0,A0,$0){const O0=Iu.BASE,L0=(F0,u1)=>u1===_0n$b||u1===_1n$c||!F0.equals(O0)?F0.multiplyUnsafe(u1):F0.multiply(u1),q0=L0(this,A0).add(L0(w0,$0));return q0.is0()?void 0:q0}toAffine(w0){const{px:A0,py:$0,pz:O0}=this,L0=this.is0();w0==null&&(w0=L0?c.ONE:c.inv(O0));const q0=c.mul(A0,w0),F0=c.mul($0,w0),u1=c.mul(O0,w0);if(L0)return{x:c.ZERO,y:c.ZERO};if(!c.eql(u1,c.ONE))throw new Error("invZ was invalid");return{x:q0,y:F0}}isTorsionFree(){const{h:w0,isTorsionFree:A0}=a;if(w0===_1n$c)return!0;if(A0)return A0(Iu,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:w0,clearCofactor:A0}=a;return w0===_1n$c?this:A0?A0(Iu,this):this.multiplyUnsafe(a.h)}toRawBytes(w0=!0){return this.assertValidity(),d(Iu,this,w0)}toHex(w0=!0){return bytesToHex$2(this.toRawBytes(w0))}}Iu.BASE=new Iu(a.Gx,a.Gy,c.ONE),Iu.ZERO=new Iu(c.ZERO,c.ONE,c.ZERO);const Xu=a.nBitLength,i0=wNAF$2(Iu,a.endo?Math.ceil(Xu/2):Xu);return{CURVE:a,ProjectivePoint:Iu,normPrivateKeyToScalar:gu,weierstrassEquation:nt,isWithinCurveOrder:$a}}function validateOpts$5(o){const a=validateBasic$2(o);return validateObject$2(a,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...a})}function weierstrass$1(o){const a=validateOpts$5(o),{Fp:c,n:d}=a,tt=c.BYTES+1,nt=2*c.BYTES+1;function $a(Z0){return _0n$bbytesToHex$2(numberToBytesBE$2(Z0,a.nByteLength));function p0(Z0){const f1=d>>_1n$c;return Z0>f1}function w0(Z0){return p0(Z0)?Ys(-Z0):Z0}const A0=(Z0,f1,w1)=>bytesToNumberBE$2(Z0.slice(f1,w1));class $0{constructor(f1,w1,m1){this.r=f1,this.s=w1,this.recovery=m1,this.assertValidity()}static fromCompact(f1){const w1=a.nByteLength;return f1=ensureBytes$3("compactSignature",f1,w1*2),new $0(A0(f1,0,w1),A0(f1,w1,2*w1))}static fromDER(f1){const{r:w1,s:m1}=DER$1.toSig(ensureBytes$3("DER",f1));return new $0(w1,m1)}assertValidity(){if(!Xu(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!Xu(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(f1){return new $0(this.r,this.s,f1)}recoverPublicKey(f1){const{r:w1,s:m1,recovery:c1}=this,G0=g1(ensureBytes$3("msgHash",f1));if(c1==null||![0,1,2,3].includes(c1))throw new Error("recovery id invalid");const o1=c1===2||c1===3?w1+a.n:w1;if(o1>=c.ORDER)throw new Error("recovery id 2 or 3 invalid");const d1=c1&1?"03":"02",R1=xu.fromHex(d1+i0(o1)),O1=gu(o1),Q1=Ys(-G0*O1),rv=Ys(m1*O1),D1=xu.BASE.multiplyAndAddUnsafe(R1,Q1,rv);if(!D1)throw new Error("point at infinify");return D1.assertValidity(),D1}hasHighS(){return p0(this.s)}normalizeS(){return this.hasHighS()?new $0(this.r,Ys(-this.s),this.recovery):this}toDERRawBytes(){return hexToBytes$3(this.toDERHex())}toDERHex(){return DER$1.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return hexToBytes$3(this.toCompactHex())}toCompactHex(){return i0(this.r)+i0(this.s)}}const O0={isValidPrivateKey(Z0){try{return $u(Z0),!0}catch{return!1}},normPrivateKeyToScalar:$u,randomPrivateKey:()=>{const Z0=getMinHashLength$2(a.n);return mapHashToField$2(a.randomBytes(Z0),a.n)},precompute(Z0=8,f1=xu.BASE){return f1._setWindowSize(Z0),f1.multiply(BigInt(3)),f1}};function L0(Z0,f1=!0){return xu.fromPrivateKey(Z0).toRawBytes(f1)}function q0(Z0){const f1=isBytes$6(Z0),w1=typeof Z0=="string",m1=(f1||w1)&&Z0.length;return f1?m1===tt||m1===nt:w1?m1===2*tt||m1===2*nt:Z0 instanceof xu}function F0(Z0,f1,w1=!0){if(q0(Z0))throw new Error("first arg must be private key");if(!q0(f1))throw new Error("second arg must be public key");return xu.fromHex(f1).multiply($u(Z0)).toRawBytes(w1)}const u1=a.bits2int||function(Z0){const f1=bytesToNumberBE$2(Z0),w1=Z0.length*8-a.nBitLength;return w1>0?f1>>BigInt(w1):f1},g1=a.bits2int_modN||function(Z0){return Ys(u1(Z0))},E1=bitMask$2(a.nBitLength);function B1(Z0){if(typeof Z0!="bigint")throw new Error("bigint expected");if(!(_0n$b<=Z0&&Z0Mv in w1))throw new Error("sign() legacy options not supported");const{hash:m1,randomBytes:c1}=a;let{lowS:G0,prehash:o1,extraEntropy:d1}=w1;G0==null&&(G0=!0),Z0=ensureBytes$3("msgHash",Z0),o1&&(Z0=ensureBytes$3("prehashed msgHash",m1(Z0)));const R1=g1(Z0),O1=$u(f1),Q1=[B1(O1),B1(R1)];if(d1!=null&&d1!==!1){const Mv=d1===!0?c1(c.BYTES):d1;Q1.push(ensureBytes$3("extraEntropy",Mv))}const rv=concatBytes$3(...Q1),D1=R1;function ev(Mv){const Zv=u1(Mv);if(!Xu(Zv))return;const fv=gu(Zv),cv=xu.BASE.multiply(Zv).toAffine(),ly=Ys(cv.x);if(ly===_0n$b)return;const Cy=Ys(fv*Ys(D1+ly*O1));if(Cy===_0n$b)return;let Ly=(cv.x===ly?0:2)|Number(cv.y&_1n$c),Hy=Cy;return G0&&p0(Cy)&&(Hy=w0(Cy),Ly^=1),new $0(ly,Hy,Ly)}return{seed:rv,k2sig:ev}}const j1={lowS:a.lowS,prehash:!1},r1={lowS:a.lowS,prehash:!1};function t1(Z0,f1,w1=j1){const{seed:m1,k2sig:c1}=lv(Z0,f1,w1),G0=a;return createHmacDrbg$2(G0.hash.outputLen,G0.nByteLength,G0.hmac)(m1,c1)}xu.BASE._setWindowSize(8);function D0(Z0,f1,w1,m1=r1){var cv;const c1=Z0;if(f1=ensureBytes$3("msgHash",f1),w1=ensureBytes$3("publicKey",w1),"strict"in m1)throw new Error("options.strict was renamed to lowS");const{lowS:G0,prehash:o1}=m1;let d1,R1;try{if(typeof c1=="string"||isBytes$6(c1))try{d1=$0.fromDER(c1)}catch(ly){if(!(ly instanceof DER$1.Err))throw ly;d1=$0.fromCompact(c1)}else if(typeof c1=="object"&&typeof c1.r=="bigint"&&typeof c1.s=="bigint"){const{r:ly,s:Cy}=c1;d1=new $0(ly,Cy)}else throw new Error("PARSE");R1=xu.fromHex(w1)}catch(ly){if(ly.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(G0&&d1.hasHighS())return!1;o1&&(f1=a.hash(f1));const{r:O1,s:Q1}=d1,rv=g1(f1),D1=gu(Q1),ev=Ys(rv*D1),Mv=Ys(O1*D1),Zv=(cv=xu.BASE.multiplyAndAddUnsafe(R1,ev,Mv))==null?void 0:cv.toAffine();return Zv?Ys(Zv.x)===O1:!1}return{CURVE:a,getPublicKey:L0,getSharedSecret:F0,sign:t1,verify:D0,ProjectivePoint:xu,Signature:$0,utils:O0}}function SWUFpSqrtRatio(o,a){const c=o.ORDER;let d=_0n$b;for(let p0=c-_1n$c;p0%_2n$8===_0n$b;p0/=_2n$8)d+=_1n$c;const tt=d,nt=_2n$8<{let A0=Iu,$0=o.pow(w0,xu),O0=o.sqr($0);O0=o.mul(O0,w0);let L0=o.mul(p0,O0);L0=o.pow(L0,gu),L0=o.mul(L0,$0),$0=o.mul(L0,w0),O0=o.mul(L0,p0);let q0=o.mul(O0,$0);L0=o.pow(q0,$u);let F0=o.eql(L0,o.ONE);$0=o.mul(O0,Xu),L0=o.mul(q0,A0),O0=o.cmov($0,O0,F0),q0=o.cmov(L0,q0,F0);for(let u1=tt;u1>_1n$c;u1--){let g1=u1-_2n$8;g1=_2n$8<{let O0=o.sqr($0);const L0=o.mul(A0,$0);O0=o.mul(O0,L0);let q0=o.pow(O0,p0);q0=o.mul(q0,L0);const F0=o.mul(q0,w0),u1=o.mul(o.sqr(q0),$0),g1=o.eql(u1,A0);let E1=o.cmov(F0,q0,g1);return{isValid:g1,value:E1}}}return i0}function mapToCurveSimpleSWU(o,a){if(validateField$2(o),!o.isValid(a.A)||!o.isValid(a.B)||!o.isValid(a.Z))throw new Error("mapToCurveSimpleSWU: invalid opts");const c=SWUFpSqrtRatio(o,a.Z);if(!o.isOdd)throw new Error("Fp.isOdd is not implemented!");return d=>{let tt,nt,$a,Ys,gu,xu,$u,Iu;tt=o.sqr(d),tt=o.mul(tt,a.Z),nt=o.sqr(tt),nt=o.add(nt,tt),$a=o.add(nt,o.ONE),$a=o.mul($a,a.B),Ys=o.cmov(a.Z,o.neg(nt),!o.eql(nt,o.ZERO)),Ys=o.mul(Ys,a.A),nt=o.sqr($a),xu=o.sqr(Ys),gu=o.mul(xu,a.A),nt=o.add(nt,gu),nt=o.mul(nt,$a),xu=o.mul(xu,Ys),gu=o.mul(xu,a.B),nt=o.add(nt,gu),$u=o.mul(tt,$a);const{isValid:Xu,value:i0}=c(nt,xu);Iu=o.mul(tt,d),Iu=o.mul(Iu,i0),$u=o.cmov($u,$a,Xu),Iu=o.cmov(Iu,i0,Xu);const p0=o.isOdd(d)===o.isOdd(Iu);return Iu=o.cmov(o.neg(Iu),Iu,p0),$u=o.div($u,Ys),{x:$u,y:Iu}}}const weierstrass$2=Object.freeze(Object.defineProperty({__proto__:null,DER:DER$1,SWUFpSqrtRatio,mapToCurveSimpleSWU,weierstrass:weierstrass$1,weierstrassPoints:weierstrassPoints$1},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function getHash$1(o){return{hash:o,hmac:(a,...c)=>hmac$2(o,a,concatBytes$4(...c)),randomBytes:randomBytes$5}}function createCurve(o,a){const c=d=>weierstrass$1({...o,...getHash$1(d)});return Object.freeze({...c(a),create:c})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1P=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),secp256k1N=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),_1n$b=BigInt(1),_2n$7=BigInt(2),divNearest=(o,a)=>(o+a/_2n$7)/a;function sqrtMod(o){const a=secp256k1P,c=BigInt(3),d=BigInt(6),tt=BigInt(11),nt=BigInt(22),$a=BigInt(23),Ys=BigInt(44),gu=BigInt(88),xu=o*o*o%a,$u=xu*xu*o%a,Iu=pow2$1($u,c,a)*$u%a,Xu=pow2$1(Iu,c,a)*$u%a,i0=pow2$1(Xu,_2n$7,a)*xu%a,p0=pow2$1(i0,tt,a)*i0%a,w0=pow2$1(p0,nt,a)*p0%a,A0=pow2$1(w0,Ys,a)*w0%a,$0=pow2$1(A0,gu,a)*A0%a,O0=pow2$1($0,Ys,a)*w0%a,L0=pow2$1(O0,c,a)*$u%a,q0=pow2$1(L0,$a,a)*p0%a,F0=pow2$1(q0,d,a)*xu%a,u1=pow2$1(F0,_2n$7,a);if(!Fp$1.eql(Fp$1.sqr(u1),o))throw new Error("Cannot find square root");return u1}const Fp$1=Field$2(secp256k1P,void 0,void 0,{sqrt:sqrtMod}),secp256k1$1=createCurve({a:BigInt(0),b:BigInt(7),Fp:Fp$1,n:secp256k1N,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:o=>{const a=secp256k1N,c=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),d=-_1n$b*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),tt=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),nt=c,$a=BigInt("0x100000000000000000000000000000000"),Ys=divNearest(nt*o,a),gu=divNearest(-d*o,a);let xu=mod$2(o-Ys*c-gu*tt,a),$u=mod$2(-Ys*d-gu*nt,a);const Iu=xu>$a,Xu=$u>$a;if(Iu&&(xu=a-xu),Xu&&($u=a-$u),xu>$a||$u>$a)throw new Error("splitScalar: Endomorphism failed, k="+o);return{k1neg:Iu,k1:xu,k2neg:Xu,k2:$u}}}},sha256$5);BigInt(0);secp256k1$1.ProjectivePoint;function generateKey(){return secp256k1$1.utils.randomPrivateKey()}function hashAndSign(o,a){const c=sha256$6.digest(a instanceof Uint8Array?a:a.subarray());if(isPromise(c))return c.then(({digest:d})=>secp256k1$1.sign(d,o).toDERRawBytes()).catch(d=>{throw new CodeError(String(d),"ERR_INVALID_INPUT")});try{return secp256k1$1.sign(c.digest,o).toDERRawBytes()}catch(d){throw new CodeError(String(d),"ERR_INVALID_INPUT")}}function hashAndVerify(o,a,c){const d=sha256$6.digest(c instanceof Uint8Array?c:c.subarray());if(isPromise(d))return d.then(({digest:tt})=>secp256k1$1.verify(a,tt,o)).catch(tt=>{throw new CodeError(String(tt),"ERR_INVALID_INPUT")});try{return secp256k1$1.verify(a,d.digest,o)}catch(tt){throw new CodeError(String(tt),"ERR_INVALID_INPUT")}}function compressPublicKey(o){return secp256k1$1.ProjectivePoint.fromHex(o).toRawBytes(!0)}function validatePrivateKey(o){try{secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}function validatePublicKey(o){try{secp256k1$1.ProjectivePoint.fromHex(o)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PUBLIC_KEY")}}function computePublicKey(o){try{return secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}class Secp256k1PublicKey{constructor(a){aw(this,"_key");validatePublicKey(a),this._key=a}verify(a,c){return hashAndVerify(this._key,c,a)}marshal(){return compressPublicKey(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}}class Secp256k1PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c??computePublicKey(a),validatePrivateKey(this._key),validatePublicKey(this._publicKey)}sign(a){return hashAndSign(this._key,a)}get public(){return new Secp256k1PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalSecp256k1PrivateKey(o){return new Secp256k1PrivateKey(o)}function unmarshalSecp256k1PublicKey(o){return new Secp256k1PublicKey(o)}async function generateKeyPair$1(){const o=generateKey();return new Secp256k1PrivateKey(o)}const Secp256k1=Object.freeze(Object.defineProperty({__proto__:null,Secp256k1PrivateKey,Secp256k1PublicKey,generateKeyPair:generateKeyPair$1,unmarshalSecp256k1PrivateKey,unmarshalSecp256k1PublicKey},Symbol.toStringTag,{value:"Module"})),supportedKeys={rsa:RSA,ed25519:Ed25519,secp256k1:Secp256k1};function unsupportedKey(o){const a=Object.keys(supportedKeys).join(" / ");return new CodeError(`invalid or unsupported key type ${o}. Must be ${a}`,"ERR_UNSUPPORTED_KEY_TYPE")}function typeToKey(o){if(o=o.toLowerCase(),o==="rsa"||o==="ed25519"||o==="secp256k1")return supportedKeys[o];throw unsupportedKey(o)}async function generateKeyPair(o,a){return typeToKey(o).generateKeyPair(2048)}async function unmarshalPrivateKey(o){const a=PrivateKey.decode(o),c=a.Data??new Uint8Array;switch(a.Type){case KeyType.RSA:return supportedKeys.rsa.unmarshalRsaPrivateKey(c);case KeyType.Ed25519:return supportedKeys.ed25519.unmarshalEd25519PrivateKey(c);case KeyType.Secp256k1:return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(c);default:throw unsupportedKey(a.Type??"RSA")}}function base$4(o){if(o.length>=255)throw new TypeError("Alphabet too long");for(var a=new Uint8Array(256),c=0;c>>0,L0=new Uint8Array(O0);A0!==$0;){for(var q0=i0[A0],F0=0,u1=O0-1;(q0!==0||F0>>0,L0[u1]=q0%$a>>>0,q0=q0/$a>>>0;if(q0!==0)throw new Error("Non-zero carry");w0=F0,A0++}for(var g1=O0-w0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=Ys.repeat(p0);g1>>0,O0=new Uint8Array($0);i0[p0];){var L0=a[i0.charCodeAt(p0)];if(L0===255)return;for(var q0=0,F0=$0-1;(L0!==0||q0>>0,O0[F0]=L0%256>>>0,L0=L0/256>>>0;if(L0!==0)throw new Error("Non-zero carry");A0=q0,p0++}for(var u1=$0-A0;u1!==$0&&O0[u1]===0;)u1++;for(var g1=new Uint8Array(w0+($0-u1)),E1=w0;u1!==$0;)g1[E1++]=O0[u1++];return g1}function Xu(i0){var p0=Iu(i0);if(p0)return p0;throw new Error("Non-base"+$a+" character")}return{encode:$u,decodeUnsafe:Iu,decode:Xu}}var src$1=base$4;const basex$2=src$1,ALPHABET$2="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";var bs58$2=basex$2(ALPHABET$2);const bs58$3=getDefaultExportFromCjs$1(bs58$2),CLIENT_KEY$1="client-key",AUTHORIZED$1="node-authorized",CALLBACK_URL="callback-url",APPLICATION_ID="application-id",setStorageCallbackUrl=o=>{localStorage.setItem(CALLBACK_URL,JSON.stringify(o))},getStorageCallbackUrl=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CALLBACK_URL);return o?JSON.parse(o):null}return null},setStorageApplicationId=o=>{localStorage.setItem(APPLICATION_ID,JSON.stringify(o))},getStorageApplicationId=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(APPLICATION_ID);return o?JSON.parse(o):null}return null},setStorageClientKey=o=>{localStorage.setItem(CLIENT_KEY$1,JSON.stringify(o))},getStorageClientKey=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CLIENT_KEY$1);if(!o)return null;let a=JSON.parse(o);if(a)return a}return null},setStorageNodeAuthorized=()=>{localStorage.setItem(AUTHORIZED$1,JSON.stringify(!0))},getStorageNodeAuthorized=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(AUTHORIZED$1);if(o!==null){let a=JSON.parse(o);if(a)return a}else return null}return null};async function createAuthHeader(o,a){const c=await getPrivateKey();if(!c)return null;const tt=new TextEncoder().encode(o),nt=bs58$3.encode(c.public.bytes),$a=await crypto.subtle.digest("SHA-256",tt),Ys=new Uint8Array($a),gu=await c.sign(Ys),xu=bs58$3.encode(gu),$u=bs58$3.encode(Ys);return{wallet_type:JSON.stringify(WalletType.NEAR({networkId:a})),signing_key:nt,signature:xu,challenge:$u}}async function getPrivateKey(){try{const o=getStorageClientKey();return o?await unmarshalPrivateKey(bs58$3.decode(o.privateKey)):null}catch(o){return console.error("Error extracting private key:",o),null}}const t$6=translations.nodeDataSource;var Network=(o=>(o.NEAR="NEAR",o.ETH="ETH",o.BNB="BNB",o.ARB="ARB",o.ZK="ZK",o.STARKNET="STARKNET",o.ICP="ICP",o))(Network||{}),WalletType;(o=>{function a({networkId:$a="mainnet"}){return{type:"NEAR",networkId:$a}}o.NEAR=a;function c({chainId:$a=1}){return{type:"ETH",chainId:$a}}o.ETH=c;function d({walletName:$a="MS"}){return{type:"STARKNET",walletName:$a}}o.STARKNET=d;const tt="rdmx6-jaaaa-aaaaa-aaadq-cai";function nt({canisterId:$a=tt,walletName:Ys="II"}){return{type:"ICP",canisterId:$a,walletName:Ys}}o.ICP=nt})(WalletType||(WalletType={}));class NodeDataSource{constructor(a){aw(this,"client");this.client=a}async getInstalledApplications(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications`,a??{})}catch(a){return console.error("Error fetching installed applications:",a),{error:{code:500,message:"Failed to fetch installed applications."}}}}async getInstalledApplicationDetails(a){try{const c=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications/${a}`,c??{})}catch(c){return console.error("Error fetching installed application:",c),{error:{code:500,message:"Failed to fetch installed application."}}}}async getContexts(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts`,a??{})}catch(a){return console.error("Error fetching contexts:",a),{error:{code:500,message:"Failed to fetch context data."}}}}async getContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context data."}}}}async getContextClientKeys(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/client-keys`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context client keys."}}}}async getContextUsers(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/users`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context users."}}}}async getContextStorageUsage(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/storage`,c??{})}catch(c){return console.error("Error fetching context storage usage:",c),{error:{code:500,message:"Failed to fetch context storage usage."}}}}async deleteContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.delete(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error deleting context:",c),{error:{code:500,message:"Failed to delete context."}}}}async startContexts(a,c){try{const d=await createAuthHeader(JSON.stringify({applicationId:a,initArguments:c}),getNearEnvironment()),nt=new TextEncoder().encode(JSON.stringify(c)),$a=Array.from(nt);return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts`,{applicationId:a,initializationParams:$a},d??{})}catch(d){return console.error("Error starting contexts:",d),{error:{code:500,message:"Failed to start context."}}}}async getDidList(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/did`,a??{})}catch(a){return console.error("Error fetching root keys:",a),{error:{code:500,message:"Failed to fetch root keys."}}}}async health(a){return await this.client.get(`${a.url}/admin-api/health`)}async installApplication(a,c,d,tt){try{const nt=await createAuthHeader(JSON.stringify({selectedPackageId:a,selectedVersion:c,hash:tt}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/install-application`,{url:d,version:c,metadata:createAppMetadata(a)},nt??{})}catch(nt){return console.error("Error installing application:",nt),{error:{code:500,message:"Failed to install application."}}}}async uninstallApplication(a){try{const c=await createAuthHeader(JSON.stringify({applicationId:a}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/uninstall-application`,{applicationId:a},c??{})}catch(c){return console.error("Error uninstalling application:",c),{error:{code:500,message:"Failed to uninstall application."}}}}async joinContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts/${a}/join`,{},c??{})}catch(c){return console.error(`${t$6.joinContextErrorTitle}: ${c}`),{error:{code:500,message:t$6.joinContextErrorMessage}}}}async login(a){return await this.client.post(`${getAppEndpointKey()}/admin-api/add-client-key`,{...a})}async requestChallenge(){return await this.client.post(`${getAppEndpointKey()}/admin-api/request-challenge`,{})}async addRootKey(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.post(`${getAppEndpointKey()}/admin-api/root-key`,{...a},c):{error:{code:401,message:"Unauthorized"}}}async getContextIdentity(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/identities`,c):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}async createAccessToken(a,c){const d=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return d?await this.client.post(`${getAppEndpointKey()}/admin-api/generate-jwt-token`,{contextId:a,executorPublicKey:c},d):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}}class ApiClient{constructor(a){aw(this,"nodeApi");this.nodeApi=new NodeDataSource(a)}node(){return this.nodeApi}}const apiClient=o=>{const a=new AxiosHttpClient(axios,o);return new ApiClient(a)},APP_URL="app-url",AUTHORIZED="node-authorized",CLIENT_KEY="client-key",NODE_URL="node-url",getAppEndpointKey=()=>{try{if(typeof window<"u"&&window.localStorage){let o=localStorage.getItem(APP_URL);if(o){let a=JSON.parse(o);if(a&&a.length>0)return a}}return null}catch{return null}},setAppEndpointKey=o=>{localStorage.setItem(APP_URL,JSON.stringify(o))},getClientKey=()=>localStorage.getItem(CLIENT_KEY)??"",isNodeAuthorized=()=>{const o=localStorage.getItem(AUTHORIZED);return o?JSON.parse(o):!1},setNodeUrlFromQuery=async o=>{const c=new URLSearchParams(window.location.search).get(NODE_URL);if(c&&await verifyNodeUrl(c,o)){setAppEndpointKey(c);const d=`${window.location.pathname}auth`;window.location.href=d}else if(c)window.alert("Node URL is not valid or not reachable. Please try again.");else return},verifyNodeUrl=async(o,a)=>{try{return new URL(o),!!(await apiClient(a).node().health({url:o})).data}catch{return!1}};var classnames={exports:{}};/*! +`)}async function generateKey$1(o){const a=await webcrypto.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:o,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),c=await exportKey(a);return{privateKey:c[0],publicKey:c[1]}}async function unmarshalPrivateKey$1(o){const c=[await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await derivePublicFromPrivate(o)],d=await exportKey({privateKey:c[0],publicKey:c[1]});return{privateKey:d[0],publicKey:d[1]}}async function hashAndSign$1(o,a){const c=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),d=await webcrypto.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},c,a instanceof Uint8Array?a:a.subarray());return new Uint8Array(d,0,d.byteLength)}async function hashAndVerify$1(o,a,c){const d=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return webcrypto.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},d,a,c instanceof Uint8Array?c:c.subarray())}async function exportKey(o){if(o.privateKey==null||o.publicKey==null)throw new CodeError("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([webcrypto.get().subtle.exportKey("jwk",o.privateKey),webcrypto.get().subtle.exportKey("jwk",o.publicKey)])}async function derivePublicFromPrivate(o){return webcrypto.get().subtle.importKey("jwk",{kty:o.kty,n:o.n,e:o.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function keySize(o){if(o.kty!=="RSA")throw new CodeError("invalid key type","ERR_INVALID_KEY_TYPE");if(o.n==null)throw new CodeError("invalid key modulus","ERR_INVALID_KEY_MODULUS");return fromString(o.n,"base64url").length*8}const MAX_RSA_KEY_SIZE=8192;class RsaPublicKey{constructor(a){aw(this,"_key");this._key=a}verify(a,c){return hashAndVerify$1(this._key,c,a)}marshal(){return jwkToPkix(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class RsaPrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c}genSecret(){return randomBytes$4(16)}sign(a){return hashAndSign$1(this._key,a)}get public(){if(this._publicKey==null)throw new CodeError("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new RsaPublicKey(this._publicKey)}marshal(){return jwkToPkcs1(this._key)}get bytes(){return PrivateKey.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="pkcs-8"){if(c==="pkcs-8")return exportToPem(this,a);if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}async function unmarshalRsaPrivateKey(o){const a=pkcs1ToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const c=await unmarshalPrivateKey$1(a);return new RsaPrivateKey(c.privateKey,c.publicKey)}function unmarshalRsaPublicKey(o){const a=pkixToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new RsaPublicKey(a)}async function fromJwk(o){if(keySize(o)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await unmarshalPrivateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}async function generateKeyPair$2(o){if(o>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await generateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}const RSA=Object.freeze(Object.defineProperty({__proto__:null,MAX_RSA_KEY_SIZE,RsaPrivateKey,RsaPublicKey,fromJwk,generateKeyPair:generateKeyPair$2,unmarshalRsaPrivateKey,unmarshalRsaPublicKey},Symbol.toStringTag,{value:"Module"})),SHA256_K$2=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),SHA256_IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),SHA256_W$2=new Uint32Array(64);let SHA256$4=class extends HashMD{constructor(){super(64,32,8,!1),this.A=SHA256_IV[0]|0,this.B=SHA256_IV[1]|0,this.C=SHA256_IV[2]|0,this.D=SHA256_IV[3]|0,this.E=SHA256_IV[4]|0,this.F=SHA256_IV[5]|0,this.G=SHA256_IV[6]|0,this.H=SHA256_IV[7]|0}get(){const{A:a,B:c,C:d,D:tt,E:nt,F:$a,G:Ys,H:gu}=this;return[a,c,d,tt,nt,$a,Ys,gu]}set(a,c,d,tt,nt,$a,Ys,gu){this.A=a|0,this.B=c|0,this.C=d|0,this.D=tt|0,this.E=nt|0,this.F=$a|0,this.G=Ys|0,this.H=gu|0}process(a,c){for(let Iu=0;Iu<16;Iu++,c+=4)SHA256_W$2[Iu]=a.getUint32(c,!1);for(let Iu=16;Iu<64;Iu++){const Xu=SHA256_W$2[Iu-15],i0=SHA256_W$2[Iu-2],p0=rotr$1(Xu,7)^rotr$1(Xu,18)^Xu>>>3,w0=rotr$1(i0,17)^rotr$1(i0,19)^i0>>>10;SHA256_W$2[Iu]=w0+SHA256_W$2[Iu-7]+p0+SHA256_W$2[Iu-16]|0}let{A:d,B:tt,C:nt,D:$a,E:Ys,F:gu,G:xu,H:$u}=this;for(let Iu=0;Iu<64;Iu++){const Xu=rotr$1(Ys,6)^rotr$1(Ys,11)^rotr$1(Ys,25),i0=$u+Xu+Chi$2(Ys,gu,xu)+SHA256_K$2[Iu]+SHA256_W$2[Iu]|0,w0=(rotr$1(d,2)^rotr$1(d,13)^rotr$1(d,22))+Maj$2(d,tt,nt)|0;$u=xu,xu=gu,gu=Ys,Ys=$a+i0|0,$a=nt,nt=tt,tt=d,d=i0+w0|0}d=d+this.A|0,tt=tt+this.B|0,nt=nt+this.C|0,$a=$a+this.D|0,Ys=Ys+this.E|0,gu=gu+this.F|0,xu=xu+this.G|0,$u=$u+this.H|0,this.set(d,tt,nt,$a,Ys,gu,xu,$u)}roundClean(){SHA256_W$2.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const sha256$5=wrapConstructor$1(()=>new SHA256$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function validatePointOpts$1(o){const a=validateBasic$2(o);validateObject$2(a,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:c,Fp:d,a:tt}=a;if(c){if(!d.eql(tt,d.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof c!="object"||typeof c.beta!="bigint"||typeof c.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...a})}const{bytesToNumberBE:b2n$1,hexToBytes:h2b$1}=ut$4,DER$1={Err:class extends Error{constructor(a=""){super(a)}},_parseInt(o){const{Err:a}=DER$1;if(o.length<2||o[0]!==2)throw new a("Invalid signature integer tag");const c=o[1],d=o.subarray(2,c+2);if(!c||d.length!==c)throw new a("Invalid signature integer: wrong length");if(d[0]&128)throw new a("Invalid signature integer: negative");if(d[0]===0&&!(d[1]&128))throw new a("Invalid signature integer: unnecessary leading zero");return{d:b2n$1(d),l:o.subarray(c+2)}},toSig(o){const{Err:a}=DER$1,c=typeof o=="string"?h2b$1(o):o;abytes(c);let d=c.length;if(d<2||c[0]!=48)throw new a("Invalid signature tag");if(c[1]!==d-2)throw new a("Invalid signature: incorrect length");const{d:tt,l:nt}=DER$1._parseInt(c.subarray(2)),{d:$a,l:Ys}=DER$1._parseInt(nt);if(Ys.length)throw new a("Invalid signature: left bytes after parsing");return{r:tt,s:$a}},hexFromSig(o){const a=xu=>Number.parseInt(xu[0],16)&8?"00"+xu:xu,c=xu=>{const $u=xu.toString(16);return $u.length&1?`0${$u}`:$u},d=a(c(o.s)),tt=a(c(o.r)),nt=d.length/2,$a=tt.length/2,Ys=c(nt),gu=c($a);return`30${c($a+nt+4)}02${gu}${tt}02${Ys}${d}`}},_0n$b=BigInt(0),_1n$c=BigInt(1),_2n$8=BigInt(2),_3n$3=BigInt(3),_4n$2=BigInt(4);function weierstrassPoints$1(o){const a=validatePointOpts$1(o),{Fp:c}=a,d=a.toBytes||((p0,w0,A0)=>{const $0=w0.toAffine();return concatBytes$3(Uint8Array.from([4]),c.toBytes($0.x),c.toBytes($0.y))}),tt=a.fromBytes||(p0=>{const w0=p0.subarray(1),A0=c.fromBytes(w0.subarray(0,c.BYTES)),$0=c.fromBytes(w0.subarray(c.BYTES,2*c.BYTES));return{x:A0,y:$0}});function nt(p0){const{a:w0,b:A0}=a,$0=c.sqr(p0),O0=c.mul($0,p0);return c.add(c.add(O0,c.mul(p0,w0)),A0)}if(!c.eql(c.sqr(a.Gy),nt(a.Gx)))throw new Error("bad generator point: equation left != right");function $a(p0){return typeof p0=="bigint"&&_0n$bc.eql(L0,c.ZERO);return O0(A0)&&O0($0)?Iu.ZERO:new Iu(A0,$0,c.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(w0){const A0=c.invertBatch(w0.map($0=>$0.pz));return w0.map(($0,O0)=>$0.toAffine(A0[O0])).map(Iu.fromAffine)}static fromHex(w0){const A0=Iu.fromAffine(tt(ensureBytes$3("pointHex",w0)));return A0.assertValidity(),A0}static fromPrivateKey(w0){return Iu.BASE.multiply(gu(w0))}_setWindowSize(w0){this._WINDOW_SIZE=w0,xu.delete(this)}assertValidity(){if(this.is0()){if(a.allowInfinityPoint&&!c.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:w0,y:A0}=this.toAffine();if(!c.isValid(w0)||!c.isValid(A0))throw new Error("bad point: x or y not FE");const $0=c.sqr(A0),O0=nt(w0);if(!c.eql($0,O0))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:w0}=this.toAffine();if(c.isOdd)return!c.isOdd(w0);throw new Error("Field doesn't support isOdd")}equals(w0){$u(w0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:q0,pz:F0}=w0,u1=c.eql(c.mul(A0,F0),c.mul(L0,O0)),g1=c.eql(c.mul($0,F0),c.mul(q0,O0));return u1&&g1}negate(){return new Iu(this.px,c.neg(this.py),this.pz)}double(){const{a:w0,b:A0}=a,$0=c.mul(A0,_3n$3),{px:O0,py:L0,pz:q0}=this;let F0=c.ZERO,u1=c.ZERO,g1=c.ZERO,E1=c.mul(O0,O0),B1=c.mul(L0,L0),lv=c.mul(q0,q0),j1=c.mul(O0,L0);return j1=c.add(j1,j1),g1=c.mul(O0,q0),g1=c.add(g1,g1),F0=c.mul(w0,g1),u1=c.mul($0,lv),u1=c.add(F0,u1),F0=c.sub(B1,u1),u1=c.add(B1,u1),u1=c.mul(F0,u1),F0=c.mul(j1,F0),g1=c.mul($0,g1),lv=c.mul(w0,lv),j1=c.sub(E1,lv),j1=c.mul(w0,j1),j1=c.add(j1,g1),g1=c.add(E1,E1),E1=c.add(g1,E1),E1=c.add(E1,lv),E1=c.mul(E1,j1),u1=c.add(u1,E1),lv=c.mul(L0,q0),lv=c.add(lv,lv),E1=c.mul(lv,j1),F0=c.sub(F0,E1),g1=c.mul(lv,B1),g1=c.add(g1,g1),g1=c.add(g1,g1),new Iu(F0,u1,g1)}add(w0){$u(w0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:q0,pz:F0}=w0;let u1=c.ZERO,g1=c.ZERO,E1=c.ZERO;const B1=a.a,lv=c.mul(a.b,_3n$3);let j1=c.mul(A0,L0),r1=c.mul($0,q0),t1=c.mul(O0,F0),D0=c.add(A0,$0),Z0=c.add(L0,q0);D0=c.mul(D0,Z0),Z0=c.add(j1,r1),D0=c.sub(D0,Z0),Z0=c.add(A0,O0);let f1=c.add(L0,F0);return Z0=c.mul(Z0,f1),f1=c.add(j1,t1),Z0=c.sub(Z0,f1),f1=c.add($0,O0),u1=c.add(q0,F0),f1=c.mul(f1,u1),u1=c.add(r1,t1),f1=c.sub(f1,u1),E1=c.mul(B1,Z0),u1=c.mul(lv,t1),E1=c.add(u1,E1),u1=c.sub(r1,E1),E1=c.add(r1,E1),g1=c.mul(u1,E1),r1=c.add(j1,j1),r1=c.add(r1,j1),t1=c.mul(B1,t1),Z0=c.mul(lv,Z0),r1=c.add(r1,t1),t1=c.sub(j1,t1),t1=c.mul(B1,t1),Z0=c.add(Z0,t1),j1=c.mul(r1,Z0),g1=c.add(g1,j1),j1=c.mul(f1,Z0),u1=c.mul(D0,u1),u1=c.sub(u1,j1),j1=c.mul(D0,r1),E1=c.mul(f1,E1),E1=c.add(E1,j1),new Iu(u1,g1,E1)}subtract(w0){return this.add(w0.negate())}is0(){return this.equals(Iu.ZERO)}wNAF(w0){return i0.wNAFCached(this,xu,w0,A0=>{const $0=c.invertBatch(A0.map(O0=>O0.pz));return A0.map((O0,L0)=>O0.toAffine($0[L0])).map(Iu.fromAffine)})}multiplyUnsafe(w0){const A0=Iu.ZERO;if(w0===_0n$b)return A0;if(Ys(w0),w0===_1n$c)return this;const{endo:$0}=a;if(!$0)return i0.unsafeLadder(this,w0);let{k1neg:O0,k1:L0,k2neg:q0,k2:F0}=$0.splitScalar(w0),u1=A0,g1=A0,E1=this;for(;L0>_0n$b||F0>_0n$b;)L0&_1n$c&&(u1=u1.add(E1)),F0&_1n$c&&(g1=g1.add(E1)),E1=E1.double(),L0>>=_1n$c,F0>>=_1n$c;return O0&&(u1=u1.negate()),q0&&(g1=g1.negate()),g1=new Iu(c.mul(g1.px,$0.beta),g1.py,g1.pz),u1.add(g1)}multiply(w0){Ys(w0);let A0=w0,$0,O0;const{endo:L0}=a;if(L0){const{k1neg:q0,k1:F0,k2neg:u1,k2:g1}=L0.splitScalar(A0);let{p:E1,f:B1}=this.wNAF(F0),{p:lv,f:j1}=this.wNAF(g1);E1=i0.constTimeNegate(q0,E1),lv=i0.constTimeNegate(u1,lv),lv=new Iu(c.mul(lv.px,L0.beta),lv.py,lv.pz),$0=E1.add(lv),O0=B1.add(j1)}else{const{p:q0,f:F0}=this.wNAF(A0);$0=q0,O0=F0}return Iu.normalizeZ([$0,O0])[0]}multiplyAndAddUnsafe(w0,A0,$0){const O0=Iu.BASE,L0=(F0,u1)=>u1===_0n$b||u1===_1n$c||!F0.equals(O0)?F0.multiplyUnsafe(u1):F0.multiply(u1),q0=L0(this,A0).add(L0(w0,$0));return q0.is0()?void 0:q0}toAffine(w0){const{px:A0,py:$0,pz:O0}=this,L0=this.is0();w0==null&&(w0=L0?c.ONE:c.inv(O0));const q0=c.mul(A0,w0),F0=c.mul($0,w0),u1=c.mul(O0,w0);if(L0)return{x:c.ZERO,y:c.ZERO};if(!c.eql(u1,c.ONE))throw new Error("invZ was invalid");return{x:q0,y:F0}}isTorsionFree(){const{h:w0,isTorsionFree:A0}=a;if(w0===_1n$c)return!0;if(A0)return A0(Iu,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:w0,clearCofactor:A0}=a;return w0===_1n$c?this:A0?A0(Iu,this):this.multiplyUnsafe(a.h)}toRawBytes(w0=!0){return this.assertValidity(),d(Iu,this,w0)}toHex(w0=!0){return bytesToHex$2(this.toRawBytes(w0))}}Iu.BASE=new Iu(a.Gx,a.Gy,c.ONE),Iu.ZERO=new Iu(c.ZERO,c.ONE,c.ZERO);const Xu=a.nBitLength,i0=wNAF$2(Iu,a.endo?Math.ceil(Xu/2):Xu);return{CURVE:a,ProjectivePoint:Iu,normPrivateKeyToScalar:gu,weierstrassEquation:nt,isWithinCurveOrder:$a}}function validateOpts$5(o){const a=validateBasic$2(o);return validateObject$2(a,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...a})}function weierstrass$1(o){const a=validateOpts$5(o),{Fp:c,n:d}=a,tt=c.BYTES+1,nt=2*c.BYTES+1;function $a(Z0){return _0n$bbytesToHex$2(numberToBytesBE$2(Z0,a.nByteLength));function p0(Z0){const f1=d>>_1n$c;return Z0>f1}function w0(Z0){return p0(Z0)?Ys(-Z0):Z0}const A0=(Z0,f1,w1)=>bytesToNumberBE$2(Z0.slice(f1,w1));class $0{constructor(f1,w1,m1){this.r=f1,this.s=w1,this.recovery=m1,this.assertValidity()}static fromCompact(f1){const w1=a.nByteLength;return f1=ensureBytes$3("compactSignature",f1,w1*2),new $0(A0(f1,0,w1),A0(f1,w1,2*w1))}static fromDER(f1){const{r:w1,s:m1}=DER$1.toSig(ensureBytes$3("DER",f1));return new $0(w1,m1)}assertValidity(){if(!Xu(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!Xu(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(f1){return new $0(this.r,this.s,f1)}recoverPublicKey(f1){const{r:w1,s:m1,recovery:c1}=this,G0=g1(ensureBytes$3("msgHash",f1));if(c1==null||![0,1,2,3].includes(c1))throw new Error("recovery id invalid");const o1=c1===2||c1===3?w1+a.n:w1;if(o1>=c.ORDER)throw new Error("recovery id 2 or 3 invalid");const d1=c1&1?"03":"02",R1=xu.fromHex(d1+i0(o1)),O1=gu(o1),Q1=Ys(-G0*O1),rv=Ys(m1*O1),D1=xu.BASE.multiplyAndAddUnsafe(R1,Q1,rv);if(!D1)throw new Error("point at infinify");return D1.assertValidity(),D1}hasHighS(){return p0(this.s)}normalizeS(){return this.hasHighS()?new $0(this.r,Ys(-this.s),this.recovery):this}toDERRawBytes(){return hexToBytes$3(this.toDERHex())}toDERHex(){return DER$1.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return hexToBytes$3(this.toCompactHex())}toCompactHex(){return i0(this.r)+i0(this.s)}}const O0={isValidPrivateKey(Z0){try{return $u(Z0),!0}catch{return!1}},normPrivateKeyToScalar:$u,randomPrivateKey:()=>{const Z0=getMinHashLength$2(a.n);return mapHashToField$2(a.randomBytes(Z0),a.n)},precompute(Z0=8,f1=xu.BASE){return f1._setWindowSize(Z0),f1.multiply(BigInt(3)),f1}};function L0(Z0,f1=!0){return xu.fromPrivateKey(Z0).toRawBytes(f1)}function q0(Z0){const f1=isBytes$6(Z0),w1=typeof Z0=="string",m1=(f1||w1)&&Z0.length;return f1?m1===tt||m1===nt:w1?m1===2*tt||m1===2*nt:Z0 instanceof xu}function F0(Z0,f1,w1=!0){if(q0(Z0))throw new Error("first arg must be private key");if(!q0(f1))throw new Error("second arg must be public key");return xu.fromHex(f1).multiply($u(Z0)).toRawBytes(w1)}const u1=a.bits2int||function(Z0){const f1=bytesToNumberBE$2(Z0),w1=Z0.length*8-a.nBitLength;return w1>0?f1>>BigInt(w1):f1},g1=a.bits2int_modN||function(Z0){return Ys(u1(Z0))},E1=bitMask$2(a.nBitLength);function B1(Z0){if(typeof Z0!="bigint")throw new Error("bigint expected");if(!(_0n$b<=Z0&&Z0Mv in w1))throw new Error("sign() legacy options not supported");const{hash:m1,randomBytes:c1}=a;let{lowS:G0,prehash:o1,extraEntropy:d1}=w1;G0==null&&(G0=!0),Z0=ensureBytes$3("msgHash",Z0),o1&&(Z0=ensureBytes$3("prehashed msgHash",m1(Z0)));const R1=g1(Z0),O1=$u(f1),Q1=[B1(O1),B1(R1)];if(d1!=null&&d1!==!1){const Mv=d1===!0?c1(c.BYTES):d1;Q1.push(ensureBytes$3("extraEntropy",Mv))}const rv=concatBytes$3(...Q1),D1=R1;function ev(Mv){const Zv=u1(Mv);if(!Xu(Zv))return;const fv=gu(Zv),cv=xu.BASE.multiply(Zv).toAffine(),ly=Ys(cv.x);if(ly===_0n$b)return;const Cy=Ys(fv*Ys(D1+ly*O1));if(Cy===_0n$b)return;let Ly=(cv.x===ly?0:2)|Number(cv.y&_1n$c),Hy=Cy;return G0&&p0(Cy)&&(Hy=w0(Cy),Ly^=1),new $0(ly,Hy,Ly)}return{seed:rv,k2sig:ev}}const j1={lowS:a.lowS,prehash:!1},r1={lowS:a.lowS,prehash:!1};function t1(Z0,f1,w1=j1){const{seed:m1,k2sig:c1}=lv(Z0,f1,w1),G0=a;return createHmacDrbg$2(G0.hash.outputLen,G0.nByteLength,G0.hmac)(m1,c1)}xu.BASE._setWindowSize(8);function D0(Z0,f1,w1,m1=r1){var cv;const c1=Z0;if(f1=ensureBytes$3("msgHash",f1),w1=ensureBytes$3("publicKey",w1),"strict"in m1)throw new Error("options.strict was renamed to lowS");const{lowS:G0,prehash:o1}=m1;let d1,R1;try{if(typeof c1=="string"||isBytes$6(c1))try{d1=$0.fromDER(c1)}catch(ly){if(!(ly instanceof DER$1.Err))throw ly;d1=$0.fromCompact(c1)}else if(typeof c1=="object"&&typeof c1.r=="bigint"&&typeof c1.s=="bigint"){const{r:ly,s:Cy}=c1;d1=new $0(ly,Cy)}else throw new Error("PARSE");R1=xu.fromHex(w1)}catch(ly){if(ly.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(G0&&d1.hasHighS())return!1;o1&&(f1=a.hash(f1));const{r:O1,s:Q1}=d1,rv=g1(f1),D1=gu(Q1),ev=Ys(rv*D1),Mv=Ys(O1*D1),Zv=(cv=xu.BASE.multiplyAndAddUnsafe(R1,ev,Mv))==null?void 0:cv.toAffine();return Zv?Ys(Zv.x)===O1:!1}return{CURVE:a,getPublicKey:L0,getSharedSecret:F0,sign:t1,verify:D0,ProjectivePoint:xu,Signature:$0,utils:O0}}function SWUFpSqrtRatio(o,a){const c=o.ORDER;let d=_0n$b;for(let p0=c-_1n$c;p0%_2n$8===_0n$b;p0/=_2n$8)d+=_1n$c;const tt=d,nt=_2n$8<{let A0=Iu,$0=o.pow(w0,xu),O0=o.sqr($0);O0=o.mul(O0,w0);let L0=o.mul(p0,O0);L0=o.pow(L0,gu),L0=o.mul(L0,$0),$0=o.mul(L0,w0),O0=o.mul(L0,p0);let q0=o.mul(O0,$0);L0=o.pow(q0,$u);let F0=o.eql(L0,o.ONE);$0=o.mul(O0,Xu),L0=o.mul(q0,A0),O0=o.cmov($0,O0,F0),q0=o.cmov(L0,q0,F0);for(let u1=tt;u1>_1n$c;u1--){let g1=u1-_2n$8;g1=_2n$8<{let O0=o.sqr($0);const L0=o.mul(A0,$0);O0=o.mul(O0,L0);let q0=o.pow(O0,p0);q0=o.mul(q0,L0);const F0=o.mul(q0,w0),u1=o.mul(o.sqr(q0),$0),g1=o.eql(u1,A0);let E1=o.cmov(F0,q0,g1);return{isValid:g1,value:E1}}}return i0}function mapToCurveSimpleSWU(o,a){if(validateField$2(o),!o.isValid(a.A)||!o.isValid(a.B)||!o.isValid(a.Z))throw new Error("mapToCurveSimpleSWU: invalid opts");const c=SWUFpSqrtRatio(o,a.Z);if(!o.isOdd)throw new Error("Fp.isOdd is not implemented!");return d=>{let tt,nt,$a,Ys,gu,xu,$u,Iu;tt=o.sqr(d),tt=o.mul(tt,a.Z),nt=o.sqr(tt),nt=o.add(nt,tt),$a=o.add(nt,o.ONE),$a=o.mul($a,a.B),Ys=o.cmov(a.Z,o.neg(nt),!o.eql(nt,o.ZERO)),Ys=o.mul(Ys,a.A),nt=o.sqr($a),xu=o.sqr(Ys),gu=o.mul(xu,a.A),nt=o.add(nt,gu),nt=o.mul(nt,$a),xu=o.mul(xu,Ys),gu=o.mul(xu,a.B),nt=o.add(nt,gu),$u=o.mul(tt,$a);const{isValid:Xu,value:i0}=c(nt,xu);Iu=o.mul(tt,d),Iu=o.mul(Iu,i0),$u=o.cmov($u,$a,Xu),Iu=o.cmov(Iu,i0,Xu);const p0=o.isOdd(d)===o.isOdd(Iu);return Iu=o.cmov(o.neg(Iu),Iu,p0),$u=o.div($u,Ys),{x:$u,y:Iu}}}const weierstrass$2=Object.freeze(Object.defineProperty({__proto__:null,DER:DER$1,SWUFpSqrtRatio,mapToCurveSimpleSWU,weierstrass:weierstrass$1,weierstrassPoints:weierstrassPoints$1},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function getHash$1(o){return{hash:o,hmac:(a,...c)=>hmac$2(o,a,concatBytes$4(...c)),randomBytes:randomBytes$5}}function createCurve(o,a){const c=d=>weierstrass$1({...o,...getHash$1(d)});return Object.freeze({...c(a),create:c})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1P=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),secp256k1N=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),_1n$b=BigInt(1),_2n$7=BigInt(2),divNearest=(o,a)=>(o+a/_2n$7)/a;function sqrtMod(o){const a=secp256k1P,c=BigInt(3),d=BigInt(6),tt=BigInt(11),nt=BigInt(22),$a=BigInt(23),Ys=BigInt(44),gu=BigInt(88),xu=o*o*o%a,$u=xu*xu*o%a,Iu=pow2$1($u,c,a)*$u%a,Xu=pow2$1(Iu,c,a)*$u%a,i0=pow2$1(Xu,_2n$7,a)*xu%a,p0=pow2$1(i0,tt,a)*i0%a,w0=pow2$1(p0,nt,a)*p0%a,A0=pow2$1(w0,Ys,a)*w0%a,$0=pow2$1(A0,gu,a)*A0%a,O0=pow2$1($0,Ys,a)*w0%a,L0=pow2$1(O0,c,a)*$u%a,q0=pow2$1(L0,$a,a)*p0%a,F0=pow2$1(q0,d,a)*xu%a,u1=pow2$1(F0,_2n$7,a);if(!Fp$1.eql(Fp$1.sqr(u1),o))throw new Error("Cannot find square root");return u1}const Fp$1=Field$2(secp256k1P,void 0,void 0,{sqrt:sqrtMod}),secp256k1$1=createCurve({a:BigInt(0),b:BigInt(7),Fp:Fp$1,n:secp256k1N,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:o=>{const a=secp256k1N,c=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),d=-_1n$b*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),tt=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),nt=c,$a=BigInt("0x100000000000000000000000000000000"),Ys=divNearest(nt*o,a),gu=divNearest(-d*o,a);let xu=mod$2(o-Ys*c-gu*tt,a),$u=mod$2(-Ys*d-gu*nt,a);const Iu=xu>$a,Xu=$u>$a;if(Iu&&(xu=a-xu),Xu&&($u=a-$u),xu>$a||$u>$a)throw new Error("splitScalar: Endomorphism failed, k="+o);return{k1neg:Iu,k1:xu,k2neg:Xu,k2:$u}}}},sha256$5);BigInt(0);secp256k1$1.ProjectivePoint;function generateKey(){return secp256k1$1.utils.randomPrivateKey()}function hashAndSign(o,a){const c=sha256$6.digest(a instanceof Uint8Array?a:a.subarray());if(isPromise(c))return c.then(({digest:d})=>secp256k1$1.sign(d,o).toDERRawBytes()).catch(d=>{throw new CodeError(String(d),"ERR_INVALID_INPUT")});try{return secp256k1$1.sign(c.digest,o).toDERRawBytes()}catch(d){throw new CodeError(String(d),"ERR_INVALID_INPUT")}}function hashAndVerify(o,a,c){const d=sha256$6.digest(c instanceof Uint8Array?c:c.subarray());if(isPromise(d))return d.then(({digest:tt})=>secp256k1$1.verify(a,tt,o)).catch(tt=>{throw new CodeError(String(tt),"ERR_INVALID_INPUT")});try{return secp256k1$1.verify(a,d.digest,o)}catch(tt){throw new CodeError(String(tt),"ERR_INVALID_INPUT")}}function compressPublicKey(o){return secp256k1$1.ProjectivePoint.fromHex(o).toRawBytes(!0)}function validatePrivateKey(o){try{secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}function validatePublicKey(o){try{secp256k1$1.ProjectivePoint.fromHex(o)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PUBLIC_KEY")}}function computePublicKey(o){try{return secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}class Secp256k1PublicKey{constructor(a){aw(this,"_key");validatePublicKey(a),this._key=a}verify(a,c){return hashAndVerify(this._key,c,a)}marshal(){return compressPublicKey(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}}class Secp256k1PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c??computePublicKey(a),validatePrivateKey(this._key),validatePublicKey(this._publicKey)}sign(a){return hashAndSign(this._key,a)}get public(){return new Secp256k1PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalSecp256k1PrivateKey(o){return new Secp256k1PrivateKey(o)}function unmarshalSecp256k1PublicKey(o){return new Secp256k1PublicKey(o)}async function generateKeyPair$1(){const o=generateKey();return new Secp256k1PrivateKey(o)}const Secp256k1=Object.freeze(Object.defineProperty({__proto__:null,Secp256k1PrivateKey,Secp256k1PublicKey,generateKeyPair:generateKeyPair$1,unmarshalSecp256k1PrivateKey,unmarshalSecp256k1PublicKey},Symbol.toStringTag,{value:"Module"})),supportedKeys={rsa:RSA,ed25519:Ed25519,secp256k1:Secp256k1};function unsupportedKey(o){const a=Object.keys(supportedKeys).join(" / ");return new CodeError(`invalid or unsupported key type ${o}. Must be ${a}`,"ERR_UNSUPPORTED_KEY_TYPE")}function typeToKey(o){if(o=o.toLowerCase(),o==="rsa"||o==="ed25519"||o==="secp256k1")return supportedKeys[o];throw unsupportedKey(o)}async function generateKeyPair(o,a){return typeToKey(o).generateKeyPair(2048)}async function unmarshalPrivateKey(o){const a=PrivateKey.decode(o),c=a.Data??new Uint8Array;switch(a.Type){case KeyType.RSA:return supportedKeys.rsa.unmarshalRsaPrivateKey(c);case KeyType.Ed25519:return supportedKeys.ed25519.unmarshalEd25519PrivateKey(c);case KeyType.Secp256k1:return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(c);default:throw unsupportedKey(a.Type??"RSA")}}function base$4(o){if(o.length>=255)throw new TypeError("Alphabet too long");for(var a=new Uint8Array(256),c=0;c>>0,L0=new Uint8Array(O0);A0!==$0;){for(var q0=i0[A0],F0=0,u1=O0-1;(q0!==0||F0>>0,L0[u1]=q0%$a>>>0,q0=q0/$a>>>0;if(q0!==0)throw new Error("Non-zero carry");w0=F0,A0++}for(var g1=O0-w0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=Ys.repeat(p0);g1>>0,O0=new Uint8Array($0);i0[p0];){var L0=a[i0.charCodeAt(p0)];if(L0===255)return;for(var q0=0,F0=$0-1;(L0!==0||q0>>0,O0[F0]=L0%256>>>0,L0=L0/256>>>0;if(L0!==0)throw new Error("Non-zero carry");A0=q0,p0++}for(var u1=$0-A0;u1!==$0&&O0[u1]===0;)u1++;for(var g1=new Uint8Array(w0+($0-u1)),E1=w0;u1!==$0;)g1[E1++]=O0[u1++];return g1}function Xu(i0){var p0=Iu(i0);if(p0)return p0;throw new Error("Non-base"+$a+" character")}return{encode:$u,decodeUnsafe:Iu,decode:Xu}}var src$1=base$4;const basex$2=src$1,ALPHABET$2="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";var bs58$2=basex$2(ALPHABET$2);const bs58$3=getDefaultExportFromCjs$1(bs58$2),CLIENT_KEY$1="client-key",AUTHORIZED$1="node-authorized",CALLBACK_URL="callback-url",APPLICATION_ID="application-id",setStorageCallbackUrl=o=>{localStorage.setItem(CALLBACK_URL,JSON.stringify(o))},getStorageCallbackUrl=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CALLBACK_URL);return o?JSON.parse(o):null}return null},setStorageApplicationId=o=>{localStorage.setItem(APPLICATION_ID,JSON.stringify(o))},getStorageApplicationId=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(APPLICATION_ID);return o?JSON.parse(o):null}return null},setStorageClientKey=o=>{localStorage.setItem(CLIENT_KEY$1,JSON.stringify(o))},getStorageClientKey=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CLIENT_KEY$1);if(!o)return null;let a=JSON.parse(o);if(a)return a}return null},setStorageNodeAuthorized=()=>{localStorage.setItem(AUTHORIZED$1,JSON.stringify(!0))},getStorageNodeAuthorized=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(AUTHORIZED$1);if(o!==null){let a=JSON.parse(o);if(a)return a}else return null}return null};async function createAuthHeader(o,a){const c=await getPrivateKey();if(!c)return null;const tt=new TextEncoder().encode(o),nt=bs58$3.encode(c.public.bytes),$a=await crypto.subtle.digest("SHA-256",tt),Ys=new Uint8Array($a),gu=await c.sign(Ys),xu=bs58$3.encode(gu),$u=bs58$3.encode(Ys);return{wallet_type:JSON.stringify(WalletType.NEAR({networkId:a})),signing_key:nt,signature:xu,challenge:$u}}async function getPrivateKey(){try{const o=getStorageClientKey();return o?await unmarshalPrivateKey(bs58$3.decode(o.privateKey)):null}catch(o){return console.error("Error extracting private key:",o),null}}const t$6=translations.nodeDataSource;var Network=(o=>(o.NEAR="NEAR",o.ETH="ETH",o.BNB="BNB",o.ARB="ARB",o.ZK="ZK",o.STARKNET="STARKNET",o.ICP="ICP",o))(Network||{}),WalletType;(o=>{function a({networkId:$a="mainnet"}){return{type:"NEAR",networkId:$a}}o.NEAR=a;function c({chainId:$a=1}){return{type:"ETH",chainId:$a}}o.ETH=c;function d({walletName:$a="MS"}){return{type:"STARKNET",walletName:$a}}o.STARKNET=d;const tt="rdmx6-jaaaa-aaaaa-aaadq-cai";function nt({canisterId:$a=tt,walletName:Ys="II"}){return{type:"ICP",canisterId:$a,walletName:Ys}}o.ICP=nt})(WalletType||(WalletType={}));class NodeDataSource{constructor(a){aw(this,"client");this.client=a}async getInstalledApplications(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications`,a??{})}catch(a){return console.error("Error fetching installed applications:",a),{error:{code:500,message:"Failed to fetch installed applications."}}}}async getInstalledApplicationDetails(a){try{const c=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications/${a}`,c??{})}catch(c){return console.error("Error fetching installed application:",c),{error:{code:500,message:"Failed to fetch installed application."}}}}async getContexts(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts`,a??{})}catch(a){return console.error("Error fetching contexts:",a),{error:{code:500,message:"Failed to fetch context data."}}}}async getContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context data."}}}}async getContextClientKeys(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/client-keys`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context client keys."}}}}async getContextUsers(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/users`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context users."}}}}async getContextStorageUsage(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/storage`,c??{})}catch(c){return console.error("Error fetching context storage usage:",c),{error:{code:500,message:"Failed to fetch context storage usage."}}}}async deleteContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.delete(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error deleting context:",c),{error:{code:500,message:"Failed to delete context."}}}}async startContexts(a,c){try{const d=await createAuthHeader(JSON.stringify({applicationId:a,initArguments:c}),getNearEnvironment()),nt=new TextEncoder().encode(JSON.stringify(c)),$a=Array.from(nt);return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts`,{applicationId:a,initializationParams:$a},d??{})}catch(d){return console.error("Error starting contexts:",d),{error:{code:500,message:"Failed to start context."}}}}async getDidList(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/did`,a??{})}catch(a){return console.error("Error fetching root keys:",a),{error:{code:500,message:"Failed to fetch root keys."}}}}async health(a){return await this.client.get(`${a.url}/admin-api/health`)}async installApplication(a,c,d,tt){try{const nt=await createAuthHeader(JSON.stringify({selectedPackageId:a,selectedVersion:c,hash:tt}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/install-application`,{url:d,version:c,metadata:createAppMetadata(a)},nt??{})}catch(nt){return console.error("Error installing application:",nt),{error:{code:500,message:"Failed to install application."}}}}async uninstallApplication(a){try{const c=await createAuthHeader(JSON.stringify({applicationId:a}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/uninstall-application`,{applicationId:a},c??{})}catch(c){return console.error("Error uninstalling application:",c),{error:{code:500,message:"Failed to uninstall application."}}}}async joinContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts/${a}/join`,{},c??{})}catch(c){return console.error(`${t$6.joinContextErrorTitle}: ${c}`),{error:{code:500,message:t$6.joinContextErrorMessage}}}}async login(a){return await this.client.post(`${getAppEndpointKey()}/admin-api/add-client-key`,{...a})}async requestChallenge(){return await this.client.post(`${getAppEndpointKey()}/admin-api/request-challenge`,{})}async addRootKey(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.post(`${getAppEndpointKey()}/admin-api/root-key`,{...a},c):{error:{code:401,message:"Unauthorized"}}}async getContextIdentity(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/identities`,c):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}async createAccessToken(a,c){const d=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return d?await this.client.post(`${getAppEndpointKey()}/admin-api/generate-jwt-token`,{contextId:a,executorPublicKey:c},d):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}}class ApiClient{constructor(a){aw(this,"nodeApi");this.nodeApi=new NodeDataSource(a)}node(){return this.nodeApi}}const apiClient=o=>{const a=new AxiosHttpClient(axios,o);return new ApiClient(a)},APP_URL="app-url",AUTHORIZED="node-authorized",CLIENT_KEY="client-key",NODE_URL="node-url",clearStorage=()=>{localStorage.removeItem(APP_URL),localStorage.removeItem(AUTHORIZED),localStorage.removeItem(CLIENT_KEY)},getAppEndpointKey=()=>{try{if(typeof window<"u"&&window.localStorage){let o=localStorage.getItem(APP_URL);if(o){let a=JSON.parse(o);if(a&&a.length>0)return a}}return null}catch{return null}},setAppEndpointKey=o=>{localStorage.setItem(APP_URL,JSON.stringify(o))},getClientKey=()=>localStorage.getItem(CLIENT_KEY)??"",isNodeAuthorized=()=>{const o=localStorage.getItem(AUTHORIZED);return o?JSON.parse(o):!1},setNodeUrlFromQuery=async o=>{const c=new URLSearchParams(window.location.search).get(NODE_URL);if(c&&await verifyNodeUrl(c,o)){setAppEndpointKey(c);const d=`${window.location.pathname}auth`;window.location.href=d}else if(c)window.alert("Node URL is not valid or not reachable. Please try again.");else return},verifyNodeUrl=async(o,a)=>{try{return new URL(o),!!(await apiClient(a).node().health({url:o})).data}catch{return!1}};var classnames={exports:{}};/*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames @@ -2386,7 +2386,7 @@ You might need to use a local HTTP server (instead of file://): https://reactjs. } } } -`;function SetupModal({successRoute:o,setNodeUrl:a,getNodeUrl:c}){const d=translations.setupModal,[tt,nt]=reactExports.useState(null),[$a,Ys]=reactExports.useState(!1),[gu,xu]=reactExports.useState(null),$u=1e3;reactExports.useEffect(()=>{xu(c())},[c]);function Iu(w0){try{return new URL(w0),!0}catch{return!1}}const Xu=w0=>{nt(""),xu(w0)},i0=reactExports.useCallback(async()=>{if(gu)if(Iu(gu.toString())){Ys(!0);const w0=new Promise(A0=>setTimeout(A0,$u));try{const A0=apiClient(()=>{nt(d.nodeHealthCheckError),Ys(!1)}).node().health({url:gu});Promise.all([w0,A0]).then(([,$0])=>{$0.data?(nt(""),a(gu),o()):nt(d.nodeHealthCheckError),Ys(!1)})}catch(A0){console.log(A0),nt(d.nodeHealthCheckError),Ys(!1)}}else nt(d.nodeHealthCheckError)},[a,o,d.nodeHealthCheckError,gu]),p0=()=>!gu;return jsxRuntimeExports.jsx(Wrapper$5,{children:jsxRuntimeExports.jsx("div",{className:"flex-wrapper",children:jsxRuntimeExports.jsx("div",{className:"inner-wrapper",children:jsxRuntimeExports.jsxs("div",{className:"content-wrapper",children:[jsxRuntimeExports.jsx("div",{className:"title",children:d.modalTitle}),$a?jsxRuntimeExports.jsx(Loading,{loaderColor:"#FF7A00",loaderSize:"48px",borderSize:"5px"}):jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"popup-wrapper",children:[jsxRuntimeExports.jsx("input",{type:"text",placeholder:d.urlInputPlacerholder,inputMode:"url",value:(gu==null?void 0:gu.toString())||"",onChange:w0=>{Xu(w0.target.value)},className:"input-field"}),jsxRuntimeExports.jsx("div",{className:"error",children:tt}),jsxRuntimeExports.jsx("button",{className:"button",style:{cursor:p0()?"not-allowed":"pointer"},disabled:p0(),onClick:i0,children:jsxRuntimeExports.jsx("span",{children:d.buttonSetText})})]})})]})})})})}function SetupPage(){const o=useNavigate();return jsxRuntimeExports.jsx(ContentWrapper,{children:jsxRuntimeExports.jsx(SetupModal,{successRoute:()=>o("/auth"),setNodeUrl:setAppEndpointKey,getNodeUrl})})}var browser={},canPromise$1=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then},qrcode={},utils$2={};let toSJISFunction;const CODEWORDS_COUNT=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];utils$2.getSymbolSize=function o(a){if(!a)throw new Error('"version" cannot be null or undefined');if(a<1||a>40)throw new Error('"version" should be in range from 1 to 40');return a*4+17};utils$2.getSymbolTotalCodewords=function o(a){return CODEWORDS_COUNT[a]};utils$2.getBCHDigit=function(o){let a=0;for(;o!==0;)a++,o>>>=1;return a};utils$2.setToSJISFunction=function o(a){if(typeof a!="function")throw new Error('"toSJISFunc" is not a valid function.');toSJISFunction=a};utils$2.isKanjiModeEnabled=function(){return typeof toSJISFunction<"u"};utils$2.toSJIS=function o(a){return toSJISFunction(a)};var errorCorrectionLevel={};(function(o){o.L={bit:1},o.M={bit:0},o.Q={bit:3},o.H={bit:2};function a(c){if(typeof c!="string")throw new Error("Param is not a string");switch(c.toLowerCase()){case"l":case"low":return o.L;case"m":case"medium":return o.M;case"q":case"quartile":return o.Q;case"h":case"high":return o.H;default:throw new Error("Unknown EC Level: "+c)}}o.isValid=function(d){return d&&typeof d.bit<"u"&&d.bit>=0&&d.bit<4},o.from=function(d,tt){if(o.isValid(d))return d;try{return a(d)}catch{return tt}}})(errorCorrectionLevel);function BitBuffer$1(){this.buffer=[],this.length=0}BitBuffer$1.prototype={get:function(o){const a=Math.floor(o/8);return(this.buffer[a]>>>7-o%8&1)===1},put:function(o,a){for(let c=0;c>>a-c-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(o){const a=Math.floor(this.length/8);this.buffer.length<=a&&this.buffer.push(0),o&&(this.buffer[a]|=128>>>this.length%8),this.length++}};var bitBuffer=BitBuffer$1;function BitMatrix$1(o){if(!o||o<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=o,this.data=new Uint8Array(o*o),this.reservedBit=new Uint8Array(o*o)}BitMatrix$1.prototype.set=function(o,a,c,d){const tt=o*this.size+a;this.data[tt]=c,d&&(this.reservedBit[tt]=!0)};BitMatrix$1.prototype.get=function(o,a){return this.data[o*this.size+a]};BitMatrix$1.prototype.xor=function(o,a,c){this.data[o*this.size+a]^=c};BitMatrix$1.prototype.isReserved=function(o,a){return this.reservedBit[o*this.size+a]};var bitMatrix=BitMatrix$1,alignmentPattern={};(function(o){const a=utils$2.getSymbolSize;o.getRowColCoords=function(d){if(d===1)return[];const tt=Math.floor(d/7)+2,nt=a(d),$a=nt===145?26:Math.ceil((nt-13)/(2*tt-2))*2,Ys=[nt-7];for(let gu=1;gu=0&&tt<=7},o.from=function(tt){return o.isValid(tt)?parseInt(tt,10):void 0},o.getPenaltyN1=function(tt){const nt=tt.size;let $a=0,Ys=0,gu=0,xu=null,$u=null;for(let Iu=0;Iu=5&&($a+=a.N1+(Ys-5)),xu=i0,Ys=1),i0=tt.get(Xu,Iu),i0===$u?gu++:(gu>=5&&($a+=a.N1+(gu-5)),$u=i0,gu=1)}Ys>=5&&($a+=a.N1+(Ys-5)),gu>=5&&($a+=a.N1+(gu-5))}return $a},o.getPenaltyN2=function(tt){const nt=tt.size;let $a=0;for(let Ys=0;Ys=10&&(Ys===1488||Ys===93)&&$a++,gu=gu<<1&2047|tt.get($u,xu),$u>=10&&(gu===1488||gu===93)&&$a++}return $a*a.N3},o.getPenaltyN4=function(tt){let nt=0;const $a=tt.data.length;for(let gu=0;gu<$a;gu++)nt+=tt.data[gu];return Math.abs(Math.ceil(nt*100/$a/5)-10)*a.N4};function c(d,tt,nt){switch(d){case o.Patterns.PATTERN000:return(tt+nt)%2===0;case o.Patterns.PATTERN001:return tt%2===0;case o.Patterns.PATTERN010:return nt%3===0;case o.Patterns.PATTERN011:return(tt+nt)%3===0;case o.Patterns.PATTERN100:return(Math.floor(tt/2)+Math.floor(nt/3))%2===0;case o.Patterns.PATTERN101:return tt*nt%2+tt*nt%3===0;case o.Patterns.PATTERN110:return(tt*nt%2+tt*nt%3)%2===0;case o.Patterns.PATTERN111:return(tt*nt%3+(tt+nt)%2)%2===0;default:throw new Error("bad maskPattern:"+d)}}o.applyMask=function(tt,nt){const $a=nt.size;for(let Ys=0;Ys<$a;Ys++)for(let gu=0;gu<$a;gu++)nt.isReserved(gu,Ys)||nt.xor(gu,Ys,c(tt,gu,Ys))},o.getBestMask=function(tt,nt){const $a=Object.keys(o.Patterns).length;let Ys=0,gu=1/0;for(let xu=0;xu<$a;xu++){nt(xu),o.applyMask(xu,tt);const $u=o.getPenaltyN1(tt)+o.getPenaltyN2(tt)+o.getPenaltyN3(tt)+o.getPenaltyN4(tt);o.applyMask(xu,tt),$u=0;){const $a=nt[0];for(let gu=0;gu0){const nt=new Uint8Array(this.degree);return nt.set(d,tt),nt}return d};var reedSolomonEncoder=ReedSolomonEncoder$1,version$3={},mode={},versionCheck={};versionCheck.isValid=function o(a){return!isNaN(a)&&a>=1&&a<=40};var regex={};const numeric="[0-9]+",alphanumeric="[A-Z $%*+\\-./:]+";let kanji="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";kanji=kanji.replace(/u/g,"\\u");const byte="(?:(?![A-Z0-9 $%*+\\-./:]|"+kanji+`)(?:.|[\r +`;function SetupModal({successRoute:o,setNodeUrl:a,getNodeUrl:c}){const d=translations.setupModal,[tt,nt]=reactExports.useState(null),[$a,Ys]=reactExports.useState(!1),[gu,xu]=reactExports.useState(null),$u=1e3;reactExports.useEffect(()=>{xu(c())},[c]);function Iu(w0){try{return new URL(w0),!0}catch{return!1}}const Xu=w0=>{nt(""),xu(w0)},i0=reactExports.useCallback(async()=>{if(gu)if(Iu(gu.toString())){Ys(!0);const w0=new Promise(A0=>setTimeout(A0,$u));try{const A0=apiClient(()=>{nt(d.nodeHealthCheckError),Ys(!1)}).node().health({url:gu});Promise.all([w0,A0]).then(([,$0])=>{$0.data?(nt(""),a(gu),o()):nt(d.nodeHealthCheckError),Ys(!1)})}catch(A0){console.log(A0),nt(d.nodeHealthCheckError),Ys(!1)}}else nt(d.nodeHealthCheckError)},[a,o,d.nodeHealthCheckError,gu]),p0=()=>!gu;return jsxRuntimeExports.jsx(Wrapper$5,{children:jsxRuntimeExports.jsx("div",{className:"flex-wrapper",children:jsxRuntimeExports.jsx("div",{className:"inner-wrapper",children:jsxRuntimeExports.jsxs("div",{className:"content-wrapper",children:[jsxRuntimeExports.jsx("div",{className:"title",children:d.modalTitle}),$a?jsxRuntimeExports.jsx(Loading,{loaderColor:"#FF7A00",loaderSize:"48px",borderSize:"5px"}):jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"popup-wrapper",children:[jsxRuntimeExports.jsx("input",{type:"text",placeholder:d.urlInputPlacerholder,inputMode:"url",value:(gu==null?void 0:gu.toString())||"",onChange:w0=>{Xu(w0.target.value)},className:"input-field"}),jsxRuntimeExports.jsx("div",{className:"error",children:tt}),jsxRuntimeExports.jsx("button",{className:"button",style:{cursor:p0()?"not-allowed":"pointer"},disabled:p0(),onClick:i0,children:jsxRuntimeExports.jsx("span",{children:d.buttonSetText})})]})})]})})})})}function SetupPage(){const o=useNavigate();return reactExports.useEffect(()=>{clearStorage()},[]),jsxRuntimeExports.jsx(ContentWrapper,{children:jsxRuntimeExports.jsx(SetupModal,{successRoute:()=>o("/auth"),setNodeUrl:setAppEndpointKey,getNodeUrl})})}var browser={},canPromise$1=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then},qrcode={},utils$2={};let toSJISFunction;const CODEWORDS_COUNT=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];utils$2.getSymbolSize=function o(a){if(!a)throw new Error('"version" cannot be null or undefined');if(a<1||a>40)throw new Error('"version" should be in range from 1 to 40');return a*4+17};utils$2.getSymbolTotalCodewords=function o(a){return CODEWORDS_COUNT[a]};utils$2.getBCHDigit=function(o){let a=0;for(;o!==0;)a++,o>>>=1;return a};utils$2.setToSJISFunction=function o(a){if(typeof a!="function")throw new Error('"toSJISFunc" is not a valid function.');toSJISFunction=a};utils$2.isKanjiModeEnabled=function(){return typeof toSJISFunction<"u"};utils$2.toSJIS=function o(a){return toSJISFunction(a)};var errorCorrectionLevel={};(function(o){o.L={bit:1},o.M={bit:0},o.Q={bit:3},o.H={bit:2};function a(c){if(typeof c!="string")throw new Error("Param is not a string");switch(c.toLowerCase()){case"l":case"low":return o.L;case"m":case"medium":return o.M;case"q":case"quartile":return o.Q;case"h":case"high":return o.H;default:throw new Error("Unknown EC Level: "+c)}}o.isValid=function(d){return d&&typeof d.bit<"u"&&d.bit>=0&&d.bit<4},o.from=function(d,tt){if(o.isValid(d))return d;try{return a(d)}catch{return tt}}})(errorCorrectionLevel);function BitBuffer$1(){this.buffer=[],this.length=0}BitBuffer$1.prototype={get:function(o){const a=Math.floor(o/8);return(this.buffer[a]>>>7-o%8&1)===1},put:function(o,a){for(let c=0;c>>a-c-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(o){const a=Math.floor(this.length/8);this.buffer.length<=a&&this.buffer.push(0),o&&(this.buffer[a]|=128>>>this.length%8),this.length++}};var bitBuffer=BitBuffer$1;function BitMatrix$1(o){if(!o||o<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=o,this.data=new Uint8Array(o*o),this.reservedBit=new Uint8Array(o*o)}BitMatrix$1.prototype.set=function(o,a,c,d){const tt=o*this.size+a;this.data[tt]=c,d&&(this.reservedBit[tt]=!0)};BitMatrix$1.prototype.get=function(o,a){return this.data[o*this.size+a]};BitMatrix$1.prototype.xor=function(o,a,c){this.data[o*this.size+a]^=c};BitMatrix$1.prototype.isReserved=function(o,a){return this.reservedBit[o*this.size+a]};var bitMatrix=BitMatrix$1,alignmentPattern={};(function(o){const a=utils$2.getSymbolSize;o.getRowColCoords=function(d){if(d===1)return[];const tt=Math.floor(d/7)+2,nt=a(d),$a=nt===145?26:Math.ceil((nt-13)/(2*tt-2))*2,Ys=[nt-7];for(let gu=1;gu=0&&tt<=7},o.from=function(tt){return o.isValid(tt)?parseInt(tt,10):void 0},o.getPenaltyN1=function(tt){const nt=tt.size;let $a=0,Ys=0,gu=0,xu=null,$u=null;for(let Iu=0;Iu=5&&($a+=a.N1+(Ys-5)),xu=i0,Ys=1),i0=tt.get(Xu,Iu),i0===$u?gu++:(gu>=5&&($a+=a.N1+(gu-5)),$u=i0,gu=1)}Ys>=5&&($a+=a.N1+(Ys-5)),gu>=5&&($a+=a.N1+(gu-5))}return $a},o.getPenaltyN2=function(tt){const nt=tt.size;let $a=0;for(let Ys=0;Ys=10&&(Ys===1488||Ys===93)&&$a++,gu=gu<<1&2047|tt.get($u,xu),$u>=10&&(gu===1488||gu===93)&&$a++}return $a*a.N3},o.getPenaltyN4=function(tt){let nt=0;const $a=tt.data.length;for(let gu=0;gu<$a;gu++)nt+=tt.data[gu];return Math.abs(Math.ceil(nt*100/$a/5)-10)*a.N4};function c(d,tt,nt){switch(d){case o.Patterns.PATTERN000:return(tt+nt)%2===0;case o.Patterns.PATTERN001:return tt%2===0;case o.Patterns.PATTERN010:return nt%3===0;case o.Patterns.PATTERN011:return(tt+nt)%3===0;case o.Patterns.PATTERN100:return(Math.floor(tt/2)+Math.floor(nt/3))%2===0;case o.Patterns.PATTERN101:return tt*nt%2+tt*nt%3===0;case o.Patterns.PATTERN110:return(tt*nt%2+tt*nt%3)%2===0;case o.Patterns.PATTERN111:return(tt*nt%3+(tt+nt)%2)%2===0;default:throw new Error("bad maskPattern:"+d)}}o.applyMask=function(tt,nt){const $a=nt.size;for(let Ys=0;Ys<$a;Ys++)for(let gu=0;gu<$a;gu++)nt.isReserved(gu,Ys)||nt.xor(gu,Ys,c(tt,gu,Ys))},o.getBestMask=function(tt,nt){const $a=Object.keys(o.Patterns).length;let Ys=0,gu=1/0;for(let xu=0;xu<$a;xu++){nt(xu),o.applyMask(xu,tt);const $u=o.getPenaltyN1(tt)+o.getPenaltyN2(tt)+o.getPenaltyN3(tt)+o.getPenaltyN4(tt);o.applyMask(xu,tt),$u=0;){const $a=nt[0];for(let gu=0;gu0){const nt=new Uint8Array(this.degree);return nt.set(d,tt),nt}return d};var reedSolomonEncoder=ReedSolomonEncoder$1,version$3={},mode={},versionCheck={};versionCheck.isValid=function o(a){return!isNaN(a)&&a>=1&&a<=40};var regex={};const numeric="[0-9]+",alphanumeric="[A-Z $%*+\\-./:]+";let kanji="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";kanji=kanji.replace(/u/g,"\\u");const byte="(?:(?![A-Z0-9 $%*+\\-./:]|"+kanji+`)(?:.|[\r ]))+`;regex.KANJI=new RegExp(kanji,"g");regex.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");regex.BYTE=new RegExp(byte,"g");regex.NUMERIC=new RegExp(numeric,"g");regex.ALPHANUMERIC=new RegExp(alphanumeric,"g");const TEST_KANJI=new RegExp("^"+kanji+"$"),TEST_NUMERIC=new RegExp("^"+numeric+"$"),TEST_ALPHANUMERIC=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");regex.testKanji=function o(a){return TEST_KANJI.test(a)};regex.testNumeric=function o(a){return TEST_NUMERIC.test(a)};regex.testAlphanumeric=function o(a){return TEST_ALPHANUMERIC.test(a)};(function(o){const a=versionCheck,c=regex;o.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},o.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},o.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},o.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},o.MIXED={bit:-1},o.getCharCountIndicator=function(nt,$a){if(!nt.ccBits)throw new Error("Invalid mode: "+nt);if(!a.isValid($a))throw new Error("Invalid version: "+$a);return $a>=1&&$a<10?nt.ccBits[0]:$a<27?nt.ccBits[1]:nt.ccBits[2]},o.getBestModeForData=function(nt){return c.testNumeric(nt)?o.NUMERIC:c.testAlphanumeric(nt)?o.ALPHANUMERIC:c.testKanji(nt)?o.KANJI:o.BYTE},o.toString=function(nt){if(nt&&nt.id)return nt.id;throw new Error("Invalid mode")},o.isValid=function(nt){return nt&&nt.bit&&nt.ccBits};function d(tt){if(typeof tt!="string")throw new Error("Param is not a string");switch(tt.toLowerCase()){case"numeric":return o.NUMERIC;case"alphanumeric":return o.ALPHANUMERIC;case"kanji":return o.KANJI;case"byte":return o.BYTE;default:throw new Error("Unknown mode: "+tt)}}o.from=function(nt,$a){if(o.isValid(nt))return nt;try{return d(nt)}catch{return $a}}})(mode);(function(o){const a=utils$2,c=errorCorrectionCode,d=errorCorrectionLevel,tt=mode,nt=versionCheck,$a=7973,Ys=a.getBCHDigit($a);function gu(Xu,i0,p0){for(let w0=1;w0<=40;w0++)if(i0<=o.getCapacity(w0,p0,Xu))return w0}function xu(Xu,i0){return tt.getCharCountIndicator(Xu,i0)+4}function $u(Xu,i0){let p0=0;return Xu.forEach(function(w0){const A0=xu(w0.mode,i0);p0+=A0+w0.getBitsLength()}),p0}function Iu(Xu,i0){for(let p0=1;p0<=40;p0++)if($u(Xu,p0)<=o.getCapacity(p0,i0,tt.MIXED))return p0}o.from=function(i0,p0){return nt.isValid(i0)?parseInt(i0,10):p0},o.getCapacity=function(i0,p0,w0){if(!nt.isValid(i0))throw new Error("Invalid QR Code version");typeof w0>"u"&&(w0=tt.BYTE);const A0=a.getSymbolTotalCodewords(i0),$0=c.getTotalCodewordsCount(i0,p0),O0=(A0-$0)*8;if(w0===tt.MIXED)return O0;const L0=O0-xu(w0,i0);switch(w0){case tt.NUMERIC:return Math.floor(L0/10*3);case tt.ALPHANUMERIC:return Math.floor(L0/11*2);case tt.KANJI:return Math.floor(L0/13);case tt.BYTE:default:return Math.floor(L0/8)}},o.getBestVersionForData=function(i0,p0){let w0;const A0=d.from(p0,d.M);if(Array.isArray(i0)){if(i0.length>1)return Iu(i0,A0);if(i0.length===0)return 1;w0=i0[0]}else w0=i0;return gu(w0.mode,w0.getLength(),A0)},o.getEncodedBits=function(i0){if(!nt.isValid(i0)||i0<7)throw new Error("Invalid QR Code version");let p0=i0<<12;for(;a.getBCHDigit(p0)-Ys>=0;)p0^=$a<=0;)tt^=G15<0&&(d=this.data.substr(c),tt=parseInt(d,10),a.put(tt,nt*3+1))};var numericData=NumericData;const Mode$3=mode,ALPHA_NUM_CHARS=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function AlphanumericData(o){this.mode=Mode$3.ALPHANUMERIC,this.data=o}AlphanumericData.getBitsLength=function o(a){return 11*Math.floor(a/2)+6*(a%2)};AlphanumericData.prototype.getLength=function o(){return this.data.length};AlphanumericData.prototype.getBitsLength=function o(){return AlphanumericData.getBitsLength(this.data.length)};AlphanumericData.prototype.write=function o(a){let c;for(c=0;c+2<=this.data.length;c+=2){let d=ALPHA_NUM_CHARS.indexOf(this.data[c])*45;d+=ALPHA_NUM_CHARS.indexOf(this.data[c+1]),a.put(d,11)}this.data.length%2&&a.put(ALPHA_NUM_CHARS.indexOf(this.data[c]),6)};var alphanumericData=AlphanumericData,encodeUtf8$1=function o(a){for(var c=[],d=a.length,tt=0;tt=55296&&nt<=56319&&d>tt+1){var $a=a.charCodeAt(tt+1);$a>=56320&&$a<=57343&&(nt=(nt-55296)*1024+$a-56320+65536,tt+=1)}if(nt<128){c.push(nt);continue}if(nt<2048){c.push(nt>>6|192),c.push(nt&63|128);continue}if(nt<55296||nt>=57344&&nt<65536){c.push(nt>>12|224),c.push(nt>>6&63|128),c.push(nt&63|128);continue}if(nt>=65536&&nt<=1114111){c.push(nt>>18|240),c.push(nt>>12&63|128),c.push(nt>>6&63|128),c.push(nt&63|128);continue}c.push(239,191,189)}return new Uint8Array(c).buffer};const encodeUtf8=encodeUtf8$1,Mode$2=mode;function ByteData(o){this.mode=Mode$2.BYTE,typeof o=="string"&&(o=encodeUtf8(o)),this.data=new Uint8Array(o)}ByteData.getBitsLength=function o(a){return a*8};ByteData.prototype.getLength=function o(){return this.data.length};ByteData.prototype.getBitsLength=function o(){return ByteData.getBitsLength(this.data.length)};ByteData.prototype.write=function(o){for(let a=0,c=this.data.length;a=33088&&c<=40956)c-=33088;else if(c>=57408&&c<=60351)c-=49472;else throw new Error("Invalid SJIS character: "+this.data[a]+` Make sure your charset is UTF-8`);c=(c>>>8&255)*192+(c&255),o.put(c,13)}};var kanjiData=KanjiData,dijkstra={exports:{}};(function(o){var a={single_source_shortest_paths:function(c,d,tt){var nt={},$a={};$a[d]=0;var Ys=a.PriorityQueue.make();Ys.push(d,0);for(var gu,xu,$u,Iu,Xu,i0,p0,w0,A0;!Ys.empty();){gu=Ys.pop(),xu=gu.value,Iu=gu.cost,Xu=c[xu]||{};for($u in Xu)Xu.hasOwnProperty($u)&&(i0=Xu[$u],p0=Iu+i0,w0=$a[$u],A0=typeof $a[$u]>"u",(A0||w0>p0)&&($a[$u]=p0,Ys.push($u,p0),nt[$u]=xu))}if(typeof tt<"u"&&typeof $a[tt]>"u"){var $0=["Could not find a path from ",d," to ",tt,"."].join("");throw new Error($0)}return nt},extract_shortest_path_from_predecessor_list:function(c,d){for(var tt=[],nt=d;nt;)tt.push(nt),c[nt],nt=c[nt];return tt.reverse(),tt},find_path:function(c,d,tt){var nt=a.single_source_shortest_paths(c,d,tt);return a.extract_shortest_path_from_predecessor_list(nt,tt)},PriorityQueue:{make:function(c){var d=a.PriorityQueue,tt={},nt;c=c||{};for(nt in d)d.hasOwnProperty(nt)&&(tt[nt]=d[nt]);return tt.queue=[],tt.sorter=c.sorter||d.default_sorter,tt},default_sorter:function(c,d){return c.cost-d.cost},push:function(c,d){var tt={value:c,cost:d};this.queue.push(tt),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};o.exports=a})(dijkstra);var dijkstraExports=dijkstra.exports;(function(o){const a=mode,c=numericData,d=alphanumericData,tt=byteData,nt=kanjiData,$a=regex,Ys=utils$2,gu=dijkstraExports;function xu($0){return unescape(encodeURIComponent($0)).length}function $u($0,O0,L0){const q0=[];let F0;for(;(F0=$0.exec(L0))!==null;)q0.push({data:F0[0],index:F0.index,mode:O0,length:F0[0].length});return q0}function Iu($0){const O0=$u($a.NUMERIC,a.NUMERIC,$0),L0=$u($a.ALPHANUMERIC,a.ALPHANUMERIC,$0);let q0,F0;return Ys.isKanjiModeEnabled()?(q0=$u($a.BYTE,a.BYTE,$0),F0=$u($a.KANJI,a.KANJI,$0)):(q0=$u($a.BYTE_KANJI,a.BYTE,$0),F0=[]),O0.concat(L0,q0,F0).sort(function(g1,E1){return g1.index-E1.index}).map(function(g1){return{data:g1.data,mode:g1.mode,length:g1.length}})}function Xu($0,O0){switch(O0){case a.NUMERIC:return c.getBitsLength($0);case a.ALPHANUMERIC:return d.getBitsLength($0);case a.KANJI:return nt.getBitsLength($0);case a.BYTE:return tt.getBitsLength($0)}}function i0($0){return $0.reduce(function(O0,L0){const q0=O0.length-1>=0?O0[O0.length-1]:null;return q0&&q0.mode===L0.mode?(O0[O0.length-1].data+=L0.data,O0):(O0.push(L0),O0)},[])}function p0($0){const O0=[];for(let L0=0;L0<$0.length;L0++){const q0=$0[L0];switch(q0.mode){case a.NUMERIC:O0.push([q0,{data:q0.data,mode:a.ALPHANUMERIC,length:q0.length},{data:q0.data,mode:a.BYTE,length:q0.length}]);break;case a.ALPHANUMERIC:O0.push([q0,{data:q0.data,mode:a.BYTE,length:q0.length}]);break;case a.KANJI:O0.push([q0,{data:q0.data,mode:a.BYTE,length:xu(q0.data)}]);break;case a.BYTE:O0.push([{data:q0.data,mode:a.BYTE,length:xu(q0.data)}])}}return O0}function w0($0,O0){const L0={},q0={start:{}};let F0=["start"];for(let u1=0;u1<$0.length;u1++){const g1=$0[u1],E1=[];for(let B1=0;B1=0&&Ys<=6&&(gu===0||gu===6)||gu>=0&&gu<=6&&(Ys===0||Ys===6)||Ys>=2&&Ys<=4&&gu>=2&&gu<=4?o.set(nt+Ys,$a+gu,!0,!0):o.set(nt+Ys,$a+gu,!1,!0))}}function setupTimingPattern(o){const a=o.size;for(let c=8;c>Ys&1)===1,o.set(tt,nt,$a,!0),o.set(nt,tt,$a,!0)}function setupFormatInfo(o,a,c){const d=o.size,tt=FormatInfo.getEncodedBits(a,c);let nt,$a;for(nt=0;nt<15;nt++)$a=(tt>>nt&1)===1,nt<6?o.set(nt,8,$a,!0):nt<8?o.set(nt+1,8,$a,!0):o.set(d-15+nt,8,$a,!0),nt<8?o.set(8,d-nt-1,$a,!0):nt<9?o.set(8,15-nt-1+1,$a,!0):o.set(8,15-nt-1,$a,!0);o.set(d-8,8,1,!0)}function setupData(o,a){const c=o.size;let d=-1,tt=c-1,nt=7,$a=0;for(let Ys=c-1;Ys>0;Ys-=2)for(Ys===6&&Ys--;;){for(let gu=0;gu<2;gu++)if(!o.isReserved(tt,Ys-gu)){let xu=!1;$a>>nt&1)===1),o.set(tt,Ys-gu,xu),nt--,nt===-1&&($a++,nt=7)}if(tt+=d,tt<0||c<=tt){tt-=d,d=-d;break}}}function createData(o,a,c){const d=new BitBuffer;c.forEach(function(gu){d.put(gu.mode.bit,4),d.put(gu.getLength(),Mode.getCharCountIndicator(gu.mode,o)),gu.write(d)});const tt=Utils$1.getSymbolTotalCodewords(o),nt=ECCode.getTotalCodewordsCount(o,a),$a=(tt-nt)*8;for(d.getLengthInBits()+4<=$a&&d.put(0,4);d.getLengthInBits()%8!==0;)d.putBit(0);const Ys=($a-d.getLengthInBits())/8;for(let gu=0;gu - + diff --git a/node-ui/src/api/httpClient.ts b/node-ui/src/api/httpClient.ts index cbd57b5e9..f545ffb35 100644 --- a/node-ui/src/api/httpClient.ts +++ b/node-ui/src/api/httpClient.ts @@ -41,6 +41,9 @@ export class AxiosHttpClient implements HttpClient { this.axios.interceptors.response.use( (response: AxiosResponse) => response, (error: AxiosError) => { + if (error.response?.status === 401) { + window.location.href = '/admin-dashboard/'; + } if (!error.response) { this.showServerDownPopup(); } diff --git a/node-ui/src/pages/setup/index.tsx b/node-ui/src/pages/setup/index.tsx index f2e40ddd1..590571664 100644 --- a/node-ui/src/pages/setup/index.tsx +++ b/node-ui/src/pages/setup/index.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import { setAppEndpointKey } from '../../utils/storage'; +import { clearStorage, setAppEndpointKey } from '../../utils/storage'; import ContentWrapper from '../../components/login/ContentWrapper'; import { SetupModal } from '../../components/setup/SetupModal'; import { getNodeUrl } from '../../utils/node'; @@ -8,6 +8,10 @@ import { getNodeUrl } from '../../utils/node'; export default function SetupPage() { const navigate = useNavigate(); + useEffect(() => { + clearStorage(); + }, []); + return ( { + localStorage.removeItem(APP_URL); + localStorage.removeItem(AUTHORIZED); + localStorage.removeItem(CLIENT_KEY); +}; + export const getAppEndpointKey = (): string | null => { try { if (typeof window !== 'undefined' && window.localStorage) { From 1ff135104a586d4909b86e84a56bd8a200232cc0 Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Wed, 6 Nov 2024 15:31:05 +0800 Subject: [PATCH 63/75] chore: run only rust tests affected with changed files (#928) Co-authored-by: Sandi Fatic --- .github/workflows/rust.yml | 11 ++- .husky/pre-commit | 9 ++- crates/merod/src/cli.rs | 1 + scripts/test.sh | 154 ++++++++++++++++++++++++++++++++++++- 4 files changed, 168 insertions(+), 7 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 324ed57d4..c61f71f13 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -74,8 +74,17 @@ jobs: - name: Build run: cargo build --verbose + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v45 + with: + files: | + **.rs + - name: Run tests + env: + CHANGED_RUST_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | chmod +x $GITHUB_WORKSPACE/scripts/build-all-apps.sh chmod +x $GITHUB_WORKSPACE/scripts/test.sh - $GITHUB_WORKSPACE/scripts/test.sh + $GITHUB_WORKSPACE/scripts/test.sh --local ${CHANGED_RUST_FILES} diff --git a/.husky/pre-commit b/.husky/pre-commit index 3ed7257d8..02b857533 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -4,15 +4,18 @@ echo "Running pre-commit hook..." # Check for changes in Markdown or MDX files -if git diff --cached --name-only | grep -qE '\.mdx?$'; then +if git diff --cached --name-only | grep -q '\.mdx?$'; then echo "Markdown or MDX files have been changed." pnpm format:md fi # Check for changes in Rust files -if git diff --cached --name-only | grep -qE '\.rs$'; then +if git diff --cached --name-only | grep -q '\.rs$'; then echo "Running checks for the Rust code..." cargo +nightly fmt + # Run tests only for the changed files + # changed_rust_files=$(git diff --cached --name-only | grep -E '\.rs$') + # ./scripts/test.sh --local ${changed_rust_files} fi # Check for changes in the 'node-ui' directory (Next.js app) @@ -25,4 +28,4 @@ fi if git diff --cached --name-only | grep -q '^packages/calimero-sdk/'; then echo "Running checks for the packages/calimero-sdk..." (cd packages/calimero-sdk && pnpm prettier && pnpm lint:fix) -fi \ No newline at end of file +fi diff --git a/crates/merod/src/cli.rs b/crates/merod/src/cli.rs index b4a90e810..dc7415c0f 100644 --- a/crates/merod/src/cli.rs +++ b/crates/merod/src/cli.rs @@ -37,6 +37,7 @@ pub const EXAMPLES: &str = r" "Examples:", EXAMPLES ))] + pub struct RootCommand { #[command(flatten)] pub args: RootArgs, diff --git a/scripts/test.sh b/scripts/test.sh index 35438717e..c3f5ffa00 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -5,7 +5,46 @@ set -ex cd "$(dirname $0)" -# prepare apps +# Check for valid arguments +if [ "$#" -eq 0 ]; then + echo "No arguments provided. Use --all or --local followed by files." + exit 1 +fi + +# Initialize variables +mode="" +changed_files=() + +# Parse arguments +for arg in "$@"; do + case $arg in + --all) + mode="all" + ;; + --local) + mode="local" + ;; + *) + if [ -n "$mode" ]; then + changed_files+=("$arg") + fi + ;; + esac +done + +# Check if neither --all nor --local was provided +if [ -z "$mode" ]; then + echo "Either --all or --local must be provided." + exit 1 +fi + +# Check for changed Rust files if local is specified +if [ "$mode" = "local" ] && [ -z "$changed_files" ]; then + echo "No files provided for local mode. Either no changes were made or the files were not provided." + exit 0 +fi + +# Prepare apps ./build-all-apps.sh # Prepare contracts @@ -13,5 +52,114 @@ cd "$(dirname $0)" ../contracts/context-config/build.sh ../contracts/proxy-lib/build-test-deps.sh -# Run cargo test -cargo test +# Run all tests +if [ "$mode" = "all" ]; then + echo "Running all tests..." + cargo +nightly test + exit 0 +fi + +# Run tests for changed files +echo "The following Rust files have changed:" "${changed_files[@]}" +# Find affected crates +changed_crates=() +# List of crates defined in workspace +all_crates=($(awk '/\[workspace\]/,/^\s*$/' ../Cargo.toml | grep -E 'members' -A 100 | grep -Eo '"[^"]*"' | tr -d '"' | sed 's|^\./||')) +echo "All workspace crates" "${all_crates[@]}" + +for file in "${changed_files[@]}"; do + # Extract the crate name by stripping the path to get the crate folder + crate_name=$(echo "$file" | sed -E 's|^(crates/[^/]+)/.*|\1|') + changed_crates+=("$crate_name") +done +echo "Detected crates from changed files" "${changed_crates[@]}" + +# Remove duplicates +unique_changed_crates=() +for item in "${changed_crates[@]}"; do + # Check if item is already in unique_array + duplicate=false + for unique_item in "${unique_changed_crates[@]}"; do + if [[ "$item" == "$unique_item" ]]; then + duplicate=true + break + fi + done + # If item is not a duplicate, add it to unique_array + if ! $duplicate; then + unique_changed_crates+=("$item") + fi +done +echo "Unique crates from changed files" "${unique_changed_crates[@]}" + +# array of dependencies in format crates/crate +dep_arr=() +for changed_crate in "${unique_changed_crates[@]}"; do + # Replace "crates/" with "calimero-" to find dependencies as dependencies are imported as calimero-name from crates/name + # e.g. In list I have crates/node-primitives but as dependency it is calimero-node-primitives. + calimero_package_name+=("${changed_crate/crates\//calimero-}") + # get list of all dependencies from the crate including external dependencies + dependencies=($(cargo metadata --format-version=1 --no-deps | jq -r --arg CRATE "$calimero_package_name" ' + .packages[] | + select(.dependencies | any(.name == $CRATE)) | + .name + ')) + + for dep in "${dependencies[@]}"; do + # Compare dependency with list of crates from workspace to skip external dependencies + calimero_dep_crate_path="${dep/calimero-/crates/}" + for crate in "${all_crates[@]}"; do + if [[ "$crate" == "$calimero_dep_crate_path" ]]; then + echo "Found matching dependency: $calimero_dep_crate_path" + dep_arr+=("$calimero_dep_crate_path") + fi + done + done +done +echo "Dependencies array:" "${dep_arr[@]}" + +# Merge crates from changed file and their dependencies +for item in "${dep_arr[@]}"; do + if [[ -z "${seen[$item]}" ]]; then + seen[$item]=1 # Mark the item as seen + unique_changed_crates+=("$item") + fi +done + +# Remove duplicates +crates_to_test=() +for item in "${unique_changed_crates[@]}"; do + # Check if item is already in unique_array + duplicate=false + for unique_item in "${crates_to_test[@]}"; do + if [[ "$item" == "$unique_item" ]]; then + duplicate=true + break + fi + done + # If item is not a duplicate, add it to unique_array + if ! $duplicate; then + crates_to_test+=("$item") + fi +done + +# Install the nightly toolchain +rustup toolchain install nightly + +# Run tests for each module and its dependencies +echo "Running tests for affected modules and their dependencies..." +echo "Crates to run tests:" "${crates_to_test[@]}" +for crate in "${crates_to_test[@]}"; do + # Convert from folder name to package name + crate_package_name=("${crate/crates\//calimero-}") + if [[ "$crate_package_name" == "calimero-merod" ]]; then + echo "Testing crate merod" + cargo +nightly test -p "merod" + elif [[ "$crate_package_name" == "calimero-meroctl" ]]; then + echo "Testing crate meroctl" + cargo +nightly test -p "meroctl" + else + echo "Testing crate $crate_package_name" + cargo +nightly test -p "$crate_package_name" + fi +done From b9ea894beb7189920adbefd67ef00ac751d51b4e Mon Sep 17 00:00:00 2001 From: Matej Vukosav Date: Wed, 6 Nov 2024 16:16:24 +0800 Subject: [PATCH 64/75] fix: update admin dashboard api (#932) Co-authored-by: Fran Domovic --- .../{main-Bzv535nm.js => main-B1C-7lql.js} | 410 +++++++++--------- node-ui/build/index.html | 2 +- node-ui/src/api/dataSource/NodeDataSource.ts | 32 +- node-ui/src/api/nodeApi.ts | 14 +- .../src/components/context/ContextTable.tsx | 5 +- .../login/applicationLogin/AppLoginPopup.tsx | 9 +- .../applicationLogin/StartContextStep.tsx | 2 +- node-ui/src/pages/ContextDetails.tsx | 6 +- node-ui/src/pages/Contexts.tsx | 21 +- node-ui/src/pages/InstallApplication.tsx | 2 +- node-ui/src/pages/StartContext.tsx | 4 +- node-ui/src/types/context.ts | 4 + 12 files changed, 249 insertions(+), 262 deletions(-) rename node-ui/build/assets/{main-Bzv535nm.js => main-B1C-7lql.js} (81%) diff --git a/node-ui/build/assets/main-Bzv535nm.js b/node-ui/build/assets/main-B1C-7lql.js similarity index 81% rename from node-ui/build/assets/main-Bzv535nm.js rename to node-ui/build/assets/main-B1C-7lql.js index b7df40e79..4588f7a5f 100644 --- a/node-ui/build/assets/main-Bzv535nm.js +++ b/node-ui/build/assets/main-B1C-7lql.js @@ -6,7 +6,7 @@ var qve=Object.defineProperty;var Wve=(o,a,c)=>a in o?qve(o,a,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var l$1=Symbol.for("react.element"),n$1=Symbol.for("react.portal"),p$2=Symbol.for("react.fragment"),q$4=Symbol.for("react.strict_mode"),r$1=Symbol.for("react.profiler"),t$7=Symbol.for("react.provider"),u=Symbol.for("react.context"),v$3=Symbol.for("react.forward_ref"),w$3=Symbol.for("react.suspense"),x$4=Symbol.for("react.memo"),y$3=Symbol.for("react.lazy"),z$4=Symbol.iterator;function A$4(o){return o===null||typeof o!="object"?null:(o=z$4&&o[z$4]||o["@@iterator"],typeof o=="function"?o:null)}var B$4={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C$5=Object.assign,D$4={};function E$3(o,a,c){this.props=o,this.context=a,this.refs=D$4,this.updater=c||B$4}E$3.prototype.isReactComponent={};E$3.prototype.setState=function(o,a){if(typeof o!="object"&&typeof o!="function"&&o!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,o,a,"setState")};E$3.prototype.forceUpdate=function(o){this.updater.enqueueForceUpdate(this,o,"forceUpdate")};function F$3(){}F$3.prototype=E$3.prototype;function G$5(o,a,c){this.props=o,this.context=a,this.refs=D$4,this.updater=c||B$4}var H$5=G$5.prototype=new F$3;H$5.constructor=G$5;C$5(H$5,E$3.prototype);H$5.isPureReactComponent=!0;var I$3=Array.isArray,J$2=Object.prototype.hasOwnProperty,K$8={current:null},L$5={key:!0,ref:!0,__self:!0,__source:!0};function M$4(o,a,c){var d,tt={},nt=null,$a=null;if(a!=null)for(d in a.ref!==void 0&&($a=a.ref),a.key!==void 0&&(nt=""+a.key),a)J$2.call(a,d)&&!L$5.hasOwnProperty(d)&&(tt[d]=a[d]);var Ys=arguments.length-2;if(Ys===1)tt.children=c;else if(1a in o?qve(o,a,{enumerable:!0,con * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(o){function a(m1,c1){var G0=m1.length;m1.push(c1);e:for(;0>>1,d1=m1[o1];if(0>>1;o1tt(Q1,G0))rvtt(D1,Q1)?(m1[o1]=D1,m1[rv]=G0,o1=rv):(m1[o1]=Q1,m1[O1]=G0,o1=O1);else if(rvtt(D1,G0))m1[o1]=D1,m1[rv]=G0,o1=rv;else break e}}return c1}function tt(m1,c1){var G0=m1.sortIndex-c1.sortIndex;return G0!==0?G0:m1.id-c1.id}if(typeof performance=="object"&&typeof performance.now=="function"){var nt=performance;o.unstable_now=function(){return nt.now()}}else{var $a=Date,Ys=$a.now();o.unstable_now=function(){return $a.now()-Ys}}var gu=[],xu=[],$u=1,Iu=null,Xu=3,i0=!1,p0=!1,w0=!1,A0=typeof setTimeout=="function"?setTimeout:null,$0=typeof clearTimeout=="function"?clearTimeout:null,O0=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function L0(m1){for(var c1=c(xu);c1!==null;){if(c1.callback===null)d(xu);else if(c1.startTime<=m1)d(xu),c1.sortIndex=c1.expirationTime,a(gu,c1);else break;c1=c(xu)}}function q0(m1){if(w0=!1,L0(m1),!p0)if(c(gu)!==null)p0=!0,f1(F0);else{var c1=c(xu);c1!==null&&w1(q0,c1.startTime-m1)}}function F0(m1,c1){p0=!1,w0&&(w0=!1,$0(E1),E1=-1),i0=!0;var G0=Xu;try{for(L0(c1),Iu=c(gu);Iu!==null&&(!(Iu.expirationTime>c1)||m1&&!j1());){var o1=Iu.callback;if(typeof o1=="function"){Iu.callback=null,Xu=Iu.priorityLevel;var d1=o1(Iu.expirationTime<=c1);c1=o.unstable_now(),typeof d1=="function"?Iu.callback=d1:Iu===c(gu)&&d(gu),L0(c1)}else d(gu);Iu=c(gu)}if(Iu!==null)var R1=!0;else{var O1=c(xu);O1!==null&&w1(q0,O1.startTime-c1),R1=!1}return R1}finally{Iu=null,Xu=G0,i0=!1}}var u1=!1,g1=null,E1=-1,B1=5,lv=-1;function j1(){return!(o.unstable_now()-lvm1||125o1?(m1.sortIndex=G0,a(xu,m1),c(gu)===null&&m1===c(xu)&&(w0?($0(E1),E1=-1):w0=!0,w1(q0,G0-o1))):(m1.sortIndex=d1,a(gu,m1),p0||i0||(p0=!0,f1(F0))),m1},o.unstable_shouldYield=j1,o.unstable_wrapCallback=function(m1){var c1=Xu;return function(){var G0=Xu;Xu=c1;try{return m1.apply(this,arguments)}finally{Xu=G0}}}})(scheduler_production_min);scheduler.exports=scheduler_production_min;var schedulerExports=scheduler.exports;/** + */(function(o){function a(m1,c1){var G0=m1.length;m1.push(c1);e:for(;0>>1,d1=m1[o1];if(0>>1;o1tt(Q1,G0))rvtt(D1,Q1)?(m1[o1]=D1,m1[rv]=G0,o1=rv):(m1[o1]=Q1,m1[O1]=G0,o1=O1);else if(rvtt(D1,G0))m1[o1]=D1,m1[rv]=G0,o1=rv;else break e}}return c1}function tt(m1,c1){var G0=m1.sortIndex-c1.sortIndex;return G0!==0?G0:m1.id-c1.id}if(typeof performance=="object"&&typeof performance.now=="function"){var nt=performance;o.unstable_now=function(){return nt.now()}}else{var $a=Date,Ws=$a.now();o.unstable_now=function(){return $a.now()-Ws}}var gu=[],Su=[],$u=1,Iu=null,Xu=3,r0=!1,p0=!1,y0=!1,A0=typeof setTimeout=="function"?setTimeout:null,$0=typeof clearTimeout=="function"?clearTimeout:null,O0=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function L0(m1){for(var c1=c(Su);c1!==null;){if(c1.callback===null)d(Su);else if(c1.startTime<=m1)d(Su),c1.sortIndex=c1.expirationTime,a(gu,c1);else break;c1=c(Su)}}function V0(m1){if(y0=!1,L0(m1),!p0)if(c(gu)!==null)p0=!0,f1(F0);else{var c1=c(Su);c1!==null&&w1(V0,c1.startTime-m1)}}function F0(m1,c1){p0=!1,y0&&(y0=!1,$0(E1),E1=-1),r0=!0;var G0=Xu;try{for(L0(c1),Iu=c(gu);Iu!==null&&(!(Iu.expirationTime>c1)||m1&&!j1());){var o1=Iu.callback;if(typeof o1=="function"){Iu.callback=null,Xu=Iu.priorityLevel;var d1=o1(Iu.expirationTime<=c1);c1=o.unstable_now(),typeof d1=="function"?Iu.callback=d1:Iu===c(gu)&&d(gu),L0(c1)}else d(gu);Iu=c(gu)}if(Iu!==null)var R1=!0;else{var O1=c(Su);O1!==null&&w1(V0,O1.startTime-c1),R1=!1}return R1}finally{Iu=null,Xu=G0,r0=!1}}var u1=!1,g1=null,E1=-1,B1=5,lv=-1;function j1(){return!(o.unstable_now()-lvm1||125o1?(m1.sortIndex=G0,a(Su,m1),c(gu)===null&&m1===c(Su)&&(y0?($0(E1),E1=-1):y0=!0,w1(V0,G0-o1))):(m1.sortIndex=d1,a(gu,m1),p0||r0||(p0=!0,f1(F0))),m1},o.unstable_shouldYield=j1,o.unstable_wrapCallback=function(m1){var c1=Xu;return function(){var G0=Xu;Xu=c1;try{return m1.apply(this,arguments)}finally{Xu=G0}}}})(scheduler_production_min);scheduler.exports=scheduler_production_min;var schedulerExports=scheduler.exports;/** * @license React * react-dom.production.min.js * @@ -31,13 +31,13 @@ var qve=Object.defineProperty;var Wve=(o,a,c)=>a in o?qve(o,a,{enumerable:!0,con * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var aa$1=reactExports,ca$1=schedulerExports;function p(o){for(var a="https://reactjs.org/docs/error-decoder.html?invariant="+o,c=1;c"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ja$1=Object.prototype.hasOwnProperty,ka$1=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,la$1={},ma$1={};function oa$1(o){return ja$1.call(ma$1,o)?!0:ja$1.call(la$1,o)?!1:ka$1.test(o)?ma$1[o]=!0:(la$1[o]=!0,!1)}function pa$1(o,a,c,d){if(c!==null&&c.type===0)return!1;switch(typeof a){case"function":case"symbol":return!0;case"boolean":return d?!1:c!==null?!c.acceptsBooleans:(o=o.toLowerCase().slice(0,5),o!=="data-"&&o!=="aria-");default:return!1}}function qa$1(o,a,c,d){if(a===null||typeof a>"u"||pa$1(o,a,c,d))return!0;if(d)return!1;if(c!==null)switch(c.type){case 3:return!a;case 4:return a===!1;case 5:return isNaN(a);case 6:return isNaN(a)||1>a}return!1}function v$1(o,a,c,d,tt,nt,$a){this.acceptsBooleans=a===2||a===3||a===4,this.attributeName=d,this.attributeNamespace=tt,this.mustUseProperty=c,this.propertyName=o,this.type=a,this.sanitizeURL=nt,this.removeEmptyString=$a}var z$3={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(o){z$3[o]=new v$1(o,0,!1,o,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(o){var a=o[0];z$3[a]=new v$1(a,1,!1,o[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(o){z$3[o]=new v$1(o,2,!1,o.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(o){z$3[o]=new v$1(o,2,!1,o,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(o){z$3[o]=new v$1(o,3,!1,o.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(o){z$3[o]=new v$1(o,3,!0,o,null,!1,!1)});["capture","download"].forEach(function(o){z$3[o]=new v$1(o,4,!1,o,null,!1,!1)});["cols","rows","size","span"].forEach(function(o){z$3[o]=new v$1(o,6,!1,o,null,!1,!1)});["rowSpan","start"].forEach(function(o){z$3[o]=new v$1(o,5,!1,o.toLowerCase(),null,!1,!1)});var ra$1=/[\-:]([a-z])/g;function sa$1(o){return o[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(o){var a=o.replace(ra$1,sa$1);z$3[a]=new v$1(a,1,!1,o,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(o){var a=o.replace(ra$1,sa$1);z$3[a]=new v$1(a,1,!1,o,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(o){var a=o.replace(ra$1,sa$1);z$3[a]=new v$1(a,1,!1,o,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(o){z$3[o]=new v$1(o,1,!1,o.toLowerCase(),null,!1,!1)});z$3.xlinkHref=new v$1("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(o){z$3[o]=new v$1(o,1,!1,o.toLowerCase(),null,!0,!0)});function ta$1(o,a,c,d){var tt=z$3.hasOwnProperty(a)?z$3[a]:null;(tt!==null?tt.type!==0:d||!(2Ys||tt[$a]!==nt[Ys]){var gu=` -`+tt[$a].replace(" at new "," at ");return o.displayName&&gu.includes("")&&(gu=gu.replace("",o.displayName)),gu}while(1<=$a&&0<=Ys);break}}}finally{Na$1=!1,Error.prepareStackTrace=c}return(o=o?o.displayName||o.name:"")?Ma$1(o):""}function Pa$1(o){switch(o.tag){case 5:return Ma$1(o.type);case 16:return Ma$1("Lazy");case 13:return Ma$1("Suspense");case 19:return Ma$1("SuspenseList");case 0:case 2:case 15:return o=Oa$1(o.type,!1),o;case 11:return o=Oa$1(o.type.render,!1),o;case 1:return o=Oa$1(o.type,!0),o;default:return""}}function Qa$1(o){if(o==null)return null;if(typeof o=="function")return o.displayName||o.name||null;if(typeof o=="string")return o;switch(o){case ya$1:return"Fragment";case wa$1:return"Portal";case Aa$1:return"Profiler";case za$1:return"StrictMode";case Ea$1:return"Suspense";case Fa$1:return"SuspenseList"}if(typeof o=="object")switch(o.$$typeof){case Ca$1:return(o.displayName||"Context")+".Consumer";case Ba$1:return(o._context.displayName||"Context")+".Provider";case Da$1:var a=o.render;return o=o.displayName,o||(o=a.displayName||a.name||"",o=o!==""?"ForwardRef("+o+")":"ForwardRef"),o;case Ga$1:return a=o.displayName||null,a!==null?a:Qa$1(o.type)||"Memo";case Ha$1:a=o._payload,o=o._init;try{return Qa$1(o(a))}catch{}}return null}function Ra$1(o){var a=o.type;switch(o.tag){case 24:return"Cache";case 9:return(a.displayName||"Context")+".Consumer";case 10:return(a._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return o=a.render,o=o.displayName||o.name||"",a.displayName||(o!==""?"ForwardRef("+o+")":"ForwardRef");case 7:return"Fragment";case 5:return a;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Qa$1(a);case 8:return a===za$1?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a}return null}function Sa$1(o){switch(typeof o){case"boolean":case"number":case"string":case"undefined":return o;case"object":return o;default:return""}}function Ta$1(o){var a=o.type;return(o=o.nodeName)&&o.toLowerCase()==="input"&&(a==="checkbox"||a==="radio")}function Ua$1(o){var a=Ta$1(o)?"checked":"value",c=Object.getOwnPropertyDescriptor(o.constructor.prototype,a),d=""+o[a];if(!o.hasOwnProperty(a)&&typeof c<"u"&&typeof c.get=="function"&&typeof c.set=="function"){var tt=c.get,nt=c.set;return Object.defineProperty(o,a,{configurable:!0,get:function(){return tt.call(this)},set:function($a){d=""+$a,nt.call(this,$a)}}),Object.defineProperty(o,a,{enumerable:c.enumerable}),{getValue:function(){return d},setValue:function($a){d=""+$a},stopTracking:function(){o._valueTracker=null,delete o[a]}}}}function Va$1(o){o._valueTracker||(o._valueTracker=Ua$1(o))}function Wa$1(o){if(!o)return!1;var a=o._valueTracker;if(!a)return!0;var c=a.getValue(),d="";return o&&(d=Ta$1(o)?o.checked?"true":"false":o.value),o=d,o!==c?(a.setValue(o),!0):!1}function Xa$1(o){if(o=o||(typeof document<"u"?document:void 0),typeof o>"u")return null;try{return o.activeElement||o.body}catch{return o.body}}function Ya$1(o,a){var c=a.checked;return A$3({},a,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:c??o._wrapperState.initialChecked})}function Za$1(o,a){var c=a.defaultValue==null?"":a.defaultValue,d=a.checked!=null?a.checked:a.defaultChecked;c=Sa$1(a.value!=null?a.value:c),o._wrapperState={initialChecked:d,initialValue:c,controlled:a.type==="checkbox"||a.type==="radio"?a.checked!=null:a.value!=null}}function ab(o,a){a=a.checked,a!=null&&ta$1(o,"checked",a,!1)}function bb(o,a){ab(o,a);var c=Sa$1(a.value),d=a.type;if(c!=null)d==="number"?(c===0&&o.value===""||o.value!=c)&&(o.value=""+c):o.value!==""+c&&(o.value=""+c);else if(d==="submit"||d==="reset"){o.removeAttribute("value");return}a.hasOwnProperty("value")?cb(o,a.type,c):a.hasOwnProperty("defaultValue")&&cb(o,a.type,Sa$1(a.defaultValue)),a.checked==null&&a.defaultChecked!=null&&(o.defaultChecked=!!a.defaultChecked)}function db(o,a,c){if(a.hasOwnProperty("value")||a.hasOwnProperty("defaultValue")){var d=a.type;if(!(d!=="submit"&&d!=="reset"||a.value!==void 0&&a.value!==null))return;a=""+o._wrapperState.initialValue,c||a===o.value||(o.value=a),o.defaultValue=a}c=o.name,c!==""&&(o.name=""),o.defaultChecked=!!o._wrapperState.initialChecked,c!==""&&(o.name=c)}function cb(o,a,c){(a!=="number"||Xa$1(o.ownerDocument)!==o)&&(c==null?o.defaultValue=""+o._wrapperState.initialValue:o.defaultValue!==""+c&&(o.defaultValue=""+c))}var eb=Array.isArray;function fb(o,a,c,d){if(o=o.options,a){a={};for(var tt=0;tt"+a.valueOf().toString()+"",a=mb.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;a.firstChild;)o.appendChild(a.firstChild)}});function ob(o,a){if(a){var c=o.firstChild;if(c&&c===o.lastChild&&c.nodeType===3){c.nodeValue=a;return}}o.textContent=a}var pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=["Webkit","ms","Moz","O"];Object.keys(pb).forEach(function(o){qb.forEach(function(a){a=a+o.charAt(0).toUpperCase()+o.substring(1),pb[a]=pb[o]})});function rb(o,a,c){return a==null||typeof a=="boolean"||a===""?"":c||typeof a!="number"||a===0||pb.hasOwnProperty(o)&&pb[o]?(""+a).trim():a+"px"}function sb(o,a){o=o.style;for(var c in a)if(a.hasOwnProperty(c)){var d=c.indexOf("--")===0,tt=rb(c,a[c],d);c==="float"&&(c="cssFloat"),d?o.setProperty(c,tt):o[c]=tt}}var tb=A$3({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ub(o,a){if(a){if(tb[o]&&(a.children!=null||a.dangerouslySetInnerHTML!=null))throw Error(p(137,o));if(a.dangerouslySetInnerHTML!=null){if(a.children!=null)throw Error(p(60));if(typeof a.dangerouslySetInnerHTML!="object"||!("__html"in a.dangerouslySetInnerHTML))throw Error(p(61))}if(a.style!=null&&typeof a.style!="object")throw Error(p(62))}}function vb(o,a){if(o.indexOf("-")===-1)return typeof a.is=="string";switch(o){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var wb=null;function xb(o){return o=o.target||o.srcElement||window,o.correspondingUseElement&&(o=o.correspondingUseElement),o.nodeType===3?o.parentNode:o}var yb=null,zb=null,Ab=null;function Bb(o){if(o=Cb(o)){if(typeof yb!="function")throw Error(p(280));var a=o.stateNode;a&&(a=Db(a),yb(o.stateNode,o.type,a))}}function Eb(o){zb?Ab?Ab.push(o):Ab=[o]:zb=o}function Fb(){if(zb){var o=zb,a=Ab;if(Ab=zb=null,Bb(o),a)for(o=0;o>>=0,o===0?32:31-(pc$1(o)/qc|0)|0}var rc$1=64,sc=4194304;function tc$1(o){switch(o&-o){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return o&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return o}}function uc$1(o,a){var c=o.pendingLanes;if(c===0)return 0;var d=0,tt=o.suspendedLanes,nt=o.pingedLanes,$a=c&268435455;if($a!==0){var Ys=$a&~tt;Ys!==0?d=tc$1(Ys):(nt&=$a,nt!==0&&(d=tc$1(nt)))}else $a=c&~tt,$a!==0?d=tc$1($a):nt!==0&&(d=tc$1(nt));if(d===0)return 0;if(a!==0&&a!==d&&!(a&tt)&&(tt=d&-d,nt=a&-a,tt>=nt||tt===16&&(nt&4194240)!==0))return a;if(d&4&&(d|=c&16),a=o.entangledLanes,a!==0)for(o=o.entanglements,a&=d;0c;c++)a.push(o);return a}function Ac(o,a,c){o.pendingLanes|=a,a!==536870912&&(o.suspendedLanes=0,o.pingedLanes=0),o=o.eventTimes,a=31-oc$1(a),o[a]=c}function Bc(o,a){var c=o.pendingLanes&~a;o.pendingLanes=a,o.suspendedLanes=0,o.pingedLanes=0,o.expiredLanes&=a,o.mutableReadLanes&=a,o.entangledLanes&=a,a=o.entanglements;var d=o.eventTimes;for(o=o.expirationTimes;0=be$2),ee$2=" ",fe$2=!1;function ge$2(o,a){switch(o){case"keyup":return $d$1.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function he$2(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var ie$2=!1;function je$2(o,a){switch(o){case"compositionend":return he$2(a);case"keypress":return a.which!==32?null:(fe$2=!0,ee$2);case"textInput":return o=a.data,o===ee$2&&fe$2?null:o;default:return null}}function ke$2(o,a){if(ie$2)return o==="compositionend"||!ae$2&&ge$2(o,a)?(o=nd$1(),md$1=ld$1=kd$1=null,ie$2=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:c,offset:a-o};o=d}e:{for(;c;){if(c.nextSibling){c=c.nextSibling;break e}c=c.parentNode}c=void 0}c=Je$2(c)}}function Le$2(o,a){return o&&a?o===a?!0:o&&o.nodeType===3?!1:a&&a.nodeType===3?Le$2(o,a.parentNode):"contains"in o?o.contains(a):o.compareDocumentPosition?!!(o.compareDocumentPosition(a)&16):!1:!1}function Me$2(){for(var o=window,a=Xa$1();a instanceof o.HTMLIFrameElement;){try{var c=typeof a.contentWindow.location.href=="string"}catch{c=!1}if(c)o=a.contentWindow;else break;a=Xa$1(o.document)}return a}function Ne$2(o){var a=o&&o.nodeName&&o.nodeName.toLowerCase();return a&&(a==="input"&&(o.type==="text"||o.type==="search"||o.type==="tel"||o.type==="url"||o.type==="password")||a==="textarea"||o.contentEditable==="true")}function Oe$2(o){var a=Me$2(),c=o.focusedElem,d=o.selectionRange;if(a!==c&&c&&c.ownerDocument&&Le$2(c.ownerDocument.documentElement,c)){if(d!==null&&Ne$2(c)){if(a=d.start,o=d.end,o===void 0&&(o=a),"selectionStart"in c)c.selectionStart=a,c.selectionEnd=Math.min(o,c.value.length);else if(o=(a=c.ownerDocument||document)&&a.defaultView||window,o.getSelection){o=o.getSelection();var tt=c.textContent.length,nt=Math.min(d.start,tt);d=d.end===void 0?nt:Math.min(d.end,tt),!o.extend&&nt>d&&(tt=d,d=nt,nt=tt),tt=Ke$2(c,nt);var $a=Ke$2(c,d);tt&&$a&&(o.rangeCount!==1||o.anchorNode!==tt.node||o.anchorOffset!==tt.offset||o.focusNode!==$a.node||o.focusOffset!==$a.offset)&&(a=a.createRange(),a.setStart(tt.node,tt.offset),o.removeAllRanges(),nt>d?(o.addRange(a),o.extend($a.node,$a.offset)):(a.setEnd($a.node,$a.offset),o.addRange(a)))}}for(a=[],o=c;o=o.parentNode;)o.nodeType===1&&a.push({element:o,left:o.scrollLeft,top:o.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;c=document.documentMode,Qe$2=null,Re$2=null,Se$2=null,Te$2=!1;function Ue$2(o,a,c){var d=c.window===c?c.document:c.nodeType===9?c:c.ownerDocument;Te$2||Qe$2==null||Qe$2!==Xa$1(d)||(d=Qe$2,"selectionStart"in d&&Ne$2(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se$2&&Ie$2(Se$2,d)||(Se$2=d,d=oe$2(Re$2,"onSelect"),0Tf$1||(o.current=Sf$1[Tf$1],Sf$1[Tf$1]=null,Tf$1--)}function G$4(o,a){Tf$1++,Sf$1[Tf$1]=o.current,o.current=a}var Vf$1={},H$4=Uf$1(Vf$1),Wf$1=Uf$1(!1),Xf$1=Vf$1;function Yf$1(o,a){var c=o.type.contextTypes;if(!c)return Vf$1;var d=o.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===a)return d.__reactInternalMemoizedMaskedChildContext;var tt={},nt;for(nt in c)tt[nt]=a[nt];return d&&(o=o.stateNode,o.__reactInternalMemoizedUnmaskedChildContext=a,o.__reactInternalMemoizedMaskedChildContext=tt),tt}function Zf$1(o){return o=o.childContextTypes,o!=null}function $f$1(){E$2(Wf$1),E$2(H$4)}function ag$1(o,a,c){if(H$4.current!==Vf$1)throw Error(p(168));G$4(H$4,a),G$4(Wf$1,c)}function bg$2(o,a,c){var d=o.stateNode;if(a=a.childContextTypes,typeof d.getChildContext!="function")return c;d=d.getChildContext();for(var tt in d)if(!(tt in a))throw Error(p(108,Ra$1(o)||"Unknown",tt));return A$3({},c,d)}function cg$1(o){return o=(o=o.stateNode)&&o.__reactInternalMemoizedMergedChildContext||Vf$1,Xf$1=H$4.current,G$4(H$4,o),G$4(Wf$1,Wf$1.current),!0}function dg$1(o,a,c){var d=o.stateNode;if(!d)throw Error(p(169));c?(o=bg$2(o,a,Xf$1),d.__reactInternalMemoizedMergedChildContext=o,E$2(Wf$1),E$2(H$4),G$4(H$4,o)):E$2(Wf$1),G$4(Wf$1,c)}var eg$1=null,fg$1=!1,gg$1=!1;function hg$1(o){eg$1===null?eg$1=[o]:eg$1.push(o)}function ig(o){fg$1=!0,hg$1(o)}function jg$1(){if(!gg$1&&eg$1!==null){gg$1=!0;var o=0,a=C$4;try{var c=eg$1;for(C$4=1;o>=$a,tt-=$a,rg=1<<32-oc$1(a)+tt|c<E1?(B1=g1,g1=null):B1=g1.sibling;var lv=Xu($0,g1,L0[E1],q0);if(lv===null){g1===null&&(g1=B1);break}o&&g1&&lv.alternate===null&&a($0,g1),O0=nt(lv,O0,E1),u1===null?F0=lv:u1.sibling=lv,u1=lv,g1=B1}if(E1===L0.length)return c($0,g1),I$2&&tg$1($0,E1),F0;if(g1===null){for(;E1E1?(B1=g1,g1=null):B1=g1.sibling;var j1=Xu($0,g1,lv.value,q0);if(j1===null){g1===null&&(g1=B1);break}o&&g1&&j1.alternate===null&&a($0,g1),O0=nt(j1,O0,E1),u1===null?F0=j1:u1.sibling=j1,u1=j1,g1=B1}if(lv.done)return c($0,g1),I$2&&tg$1($0,E1),F0;if(g1===null){for(;!lv.done;E1++,lv=L0.next())lv=Iu($0,lv.value,q0),lv!==null&&(O0=nt(lv,O0,E1),u1===null?F0=lv:u1.sibling=lv,u1=lv);return I$2&&tg$1($0,E1),F0}for(g1=d($0,g1);!lv.done;E1++,lv=L0.next())lv=i0(g1,$0,E1,lv.value,q0),lv!==null&&(o&&lv.alternate!==null&&g1.delete(lv.key===null?E1:lv.key),O0=nt(lv,O0,E1),u1===null?F0=lv:u1.sibling=lv,u1=lv);return o&&g1.forEach(function(r1){return a($0,r1)}),I$2&&tg$1($0,E1),F0}function A0($0,O0,L0,q0){if(typeof L0=="object"&&L0!==null&&L0.type===ya$1&&L0.key===null&&(L0=L0.props.children),typeof L0=="object"&&L0!==null){switch(L0.$$typeof){case va$1:e:{for(var F0=L0.key,u1=O0;u1!==null;){if(u1.key===F0){if(F0=L0.type,F0===ya$1){if(u1.tag===7){c($0,u1.sibling),O0=tt(u1,L0.props.children),O0.return=$0,$0=O0;break e}}else if(u1.elementType===F0||typeof F0=="object"&&F0!==null&&F0.$$typeof===Ha$1&&Ng$1(F0)===u1.type){c($0,u1.sibling),O0=tt(u1,L0.props),O0.ref=Lg($0,u1,L0),O0.return=$0,$0=O0;break e}c($0,u1);break}else a($0,u1);u1=u1.sibling}L0.type===ya$1?(O0=Tg$1(L0.props.children,$0.mode,q0,L0.key),O0.return=$0,$0=O0):(q0=Rg(L0.type,L0.key,L0.props,null,$0.mode,q0),q0.ref=Lg($0,O0,L0),q0.return=$0,$0=q0)}return $a($0);case wa$1:e:{for(u1=L0.key;O0!==null;){if(O0.key===u1)if(O0.tag===4&&O0.stateNode.containerInfo===L0.containerInfo&&O0.stateNode.implementation===L0.implementation){c($0,O0.sibling),O0=tt(O0,L0.children||[]),O0.return=$0,$0=O0;break e}else{c($0,O0);break}else a($0,O0);O0=O0.sibling}O0=Sg$1(L0,$0.mode,q0),O0.return=$0,$0=O0}return $a($0);case Ha$1:return u1=L0._init,A0($0,O0,u1(L0._payload),q0)}if(eb(L0))return p0($0,O0,L0,q0);if(Ka$1(L0))return w0($0,O0,L0,q0);Mg($0,L0)}return typeof L0=="string"&&L0!==""||typeof L0=="number"?(L0=""+L0,O0!==null&&O0.tag===6?(c($0,O0.sibling),O0=tt(O0,L0),O0.return=$0,$0=O0):(c($0,O0),O0=Qg(L0,$0.mode,q0),O0.return=$0,$0=O0),$a($0)):c($0,O0)}return A0}var Ug$1=Og(!0),Vg$1=Og(!1),Wg=Uf$1(null),Xg=null,Yg=null,Zg=null;function $g$1(){Zg=Yg=Xg=null}function ah$1(o){var a=Wg.current;E$2(Wg),o._currentValue=a}function bh$1(o,a,c){for(;o!==null;){var d=o.alternate;if((o.childLanes&a)!==a?(o.childLanes|=a,d!==null&&(d.childLanes|=a)):d!==null&&(d.childLanes&a)!==a&&(d.childLanes|=a),o===c)break;o=o.return}}function ch$2(o,a){Xg=o,Zg=Yg=null,o=o.dependencies,o!==null&&o.firstContext!==null&&(o.lanes&a&&(dh$2=!0),o.firstContext=null)}function eh$1(o){var a=o._currentValue;if(Zg!==o)if(o={context:o,memoizedValue:a,next:null},Yg===null){if(Xg===null)throw Error(p(308));Yg=o,Xg.dependencies={lanes:0,firstContext:o}}else Yg=Yg.next=o;return a}var fh$1=null;function gh$1(o){fh$1===null?fh$1=[o]:fh$1.push(o)}function hh$1(o,a,c,d){var tt=a.interleaved;return tt===null?(c.next=c,gh$1(a)):(c.next=tt.next,tt.next=c),a.interleaved=c,ih$1(o,d)}function ih$1(o,a){o.lanes|=a;var c=o.alternate;for(c!==null&&(c.lanes|=a),c=o,o=o.return;o!==null;)o.childLanes|=a,c=o.alternate,c!==null&&(c.childLanes|=a),c=o,o=o.return;return c.tag===3?c.stateNode:null}var jh$1=!1;function kh$1(o){o.updateQueue={baseState:o.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function lh$1(o,a){o=o.updateQueue,a.updateQueue===o&&(a.updateQueue={baseState:o.baseState,firstBaseUpdate:o.firstBaseUpdate,lastBaseUpdate:o.lastBaseUpdate,shared:o.shared,effects:o.effects})}function mh$1(o,a){return{eventTime:o,lane:a,tag:0,payload:null,callback:null,next:null}}function nh$1(o,a,c){var d=o.updateQueue;if(d===null)return null;if(d=d.shared,K$7&2){var tt=d.pending;return tt===null?a.next=a:(a.next=tt.next,tt.next=a),d.pending=a,ih$1(o,c)}return tt=d.interleaved,tt===null?(a.next=a,gh$1(d)):(a.next=tt.next,tt.next=a),d.interleaved=a,ih$1(o,c)}function oh$1(o,a,c){if(a=a.updateQueue,a!==null&&(a=a.shared,(c&4194240)!==0)){var d=a.lanes;d&=o.pendingLanes,c|=d,a.lanes=c,Cc(o,c)}}function ph$1(o,a){var c=o.updateQueue,d=o.alternate;if(d!==null&&(d=d.updateQueue,c===d)){var tt=null,nt=null;if(c=c.firstBaseUpdate,c!==null){do{var $a={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};nt===null?tt=nt=$a:nt=nt.next=$a,c=c.next}while(c!==null);nt===null?tt=nt=a:nt=nt.next=a}else tt=nt=a;c={baseState:d.baseState,firstBaseUpdate:tt,lastBaseUpdate:nt,shared:d.shared,effects:d.effects},o.updateQueue=c;return}o=c.lastBaseUpdate,o===null?c.firstBaseUpdate=a:o.next=a,c.lastBaseUpdate=a}function qh$1(o,a,c,d){var tt=o.updateQueue;jh$1=!1;var nt=tt.firstBaseUpdate,$a=tt.lastBaseUpdate,Ys=tt.shared.pending;if(Ys!==null){tt.shared.pending=null;var gu=Ys,xu=gu.next;gu.next=null,$a===null?nt=xu:$a.next=xu,$a=gu;var $u=o.alternate;$u!==null&&($u=$u.updateQueue,Ys=$u.lastBaseUpdate,Ys!==$a&&(Ys===null?$u.firstBaseUpdate=xu:Ys.next=xu,$u.lastBaseUpdate=gu))}if(nt!==null){var Iu=tt.baseState;$a=0,$u=xu=gu=null,Ys=nt;do{var Xu=Ys.lane,i0=Ys.eventTime;if((d&Xu)===Xu){$u!==null&&($u=$u.next={eventTime:i0,lane:0,tag:Ys.tag,payload:Ys.payload,callback:Ys.callback,next:null});e:{var p0=o,w0=Ys;switch(Xu=a,i0=c,w0.tag){case 1:if(p0=w0.payload,typeof p0=="function"){Iu=p0.call(i0,Iu,Xu);break e}Iu=p0;break e;case 3:p0.flags=p0.flags&-65537|128;case 0:if(p0=w0.payload,Xu=typeof p0=="function"?p0.call(i0,Iu,Xu):p0,Xu==null)break e;Iu=A$3({},Iu,Xu);break e;case 2:jh$1=!0}}Ys.callback!==null&&Ys.lane!==0&&(o.flags|=64,Xu=tt.effects,Xu===null?tt.effects=[Ys]:Xu.push(Ys))}else i0={eventTime:i0,lane:Xu,tag:Ys.tag,payload:Ys.payload,callback:Ys.callback,next:null},$u===null?(xu=$u=i0,gu=Iu):$u=$u.next=i0,$a|=Xu;if(Ys=Ys.next,Ys===null){if(Ys=tt.shared.pending,Ys===null)break;Xu=Ys,Ys=Xu.next,Xu.next=null,tt.lastBaseUpdate=Xu,tt.shared.pending=null}}while(!0);if($u===null&&(gu=Iu),tt.baseState=gu,tt.firstBaseUpdate=xu,tt.lastBaseUpdate=$u,a=tt.shared.interleaved,a!==null){tt=a;do $a|=tt.lane,tt=tt.next;while(tt!==a)}else nt===null&&(tt.shared.lanes=0);rh$2|=$a,o.lanes=$a,o.memoizedState=Iu}}function sh$2(o,a,c){if(o=a.effects,a.effects=null,o!==null)for(a=0;ac?c:4,o(!0);var d=Gh$1.transition;Gh$1.transition={};try{o(!1),a()}finally{C$4=c,Gh$1.transition=d}}function wi$1(){return Uh$1().memoizedState}function xi$1(o,a,c){var d=yi$1(o);if(c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null},zi$1(o))Ai$1(a,c);else if(c=hh$1(o,a,c,d),c!==null){var tt=R$4();gi$1(c,o,d,tt),Bi$1(c,a,d)}}function ii$1(o,a,c){var d=yi$1(o),tt={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi$1(o))Ai$1(a,tt);else{var nt=o.alternate;if(o.lanes===0&&(nt===null||nt.lanes===0)&&(nt=a.lastRenderedReducer,nt!==null))try{var $a=a.lastRenderedState,Ys=nt($a,c);if(tt.hasEagerState=!0,tt.eagerState=Ys,He$2(Ys,$a)){var gu=a.interleaved;gu===null?(tt.next=tt,gh$1(a)):(tt.next=gu.next,gu.next=tt),a.interleaved=tt;return}}catch{}finally{}c=hh$1(o,a,tt,d),c!==null&&(tt=R$4(),gi$1(c,o,d,tt),Bi$1(c,a,d))}}function zi$1(o){var a=o.alternate;return o===M$3||a!==null&&a===M$3}function Ai$1(o,a){Jh$1=Ih$1=!0;var c=o.pending;c===null?a.next=a:(a.next=c.next,c.next=a),o.pending=a}function Bi$1(o,a,c){if(c&4194240){var d=a.lanes;d&=o.pendingLanes,c|=d,a.lanes=c,Cc(o,c)}}var Rh$1={readContext:eh$1,useCallback:P$1,useContext:P$1,useEffect:P$1,useImperativeHandle:P$1,useInsertionEffect:P$1,useLayoutEffect:P$1,useMemo:P$1,useReducer:P$1,useRef:P$1,useState:P$1,useDebugValue:P$1,useDeferredValue:P$1,useTransition:P$1,useMutableSource:P$1,useSyncExternalStore:P$1,useId:P$1,unstable_isNewReconciler:!1},Oh$1={readContext:eh$1,useCallback:function(o,a){return Th$1().memoizedState=[o,a===void 0?null:a],o},useContext:eh$1,useEffect:mi$1,useImperativeHandle:function(o,a,c){return c=c!=null?c.concat([o]):null,ki$1(4194308,4,pi$1.bind(null,a,o),c)},useLayoutEffect:function(o,a){return ki$1(4194308,4,o,a)},useInsertionEffect:function(o,a){return ki$1(4,2,o,a)},useMemo:function(o,a){var c=Th$1();return a=a===void 0?null:a,o=o(),c.memoizedState=[o,a],o},useReducer:function(o,a,c){var d=Th$1();return a=c!==void 0?c(a):a,d.memoizedState=d.baseState=a,o={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:o,lastRenderedState:a},d.queue=o,o=o.dispatch=xi$1.bind(null,M$3,o),[d.memoizedState,o]},useRef:function(o){var a=Th$1();return o={current:o},a.memoizedState=o},useState:hi$2,useDebugValue:ri$1,useDeferredValue:function(o){return Th$1().memoizedState=o},useTransition:function(){var o=hi$2(!1),a=o[0];return o=vi$2.bind(null,o[1]),Th$1().memoizedState=o,[a,o]},useMutableSource:function(){},useSyncExternalStore:function(o,a,c){var d=M$3,tt=Th$1();if(I$2){if(c===void 0)throw Error(p(407));c=c()}else{if(c=a(),Q$3===null)throw Error(p(349));Hh$1&30||di$1(d,a,c)}tt.memoizedState=c;var nt={value:c,getSnapshot:a};return tt.queue=nt,mi$1(ai$1.bind(null,d,nt,o),[o]),d.flags|=2048,bi$1(9,ci$1.bind(null,d,nt,c,a),void 0,null),c},useId:function(){var o=Th$1(),a=Q$3.identifierPrefix;if(I$2){var c=sg$1,d=rg;c=(d&~(1<<32-oc$1(d)-1)).toString(32)+c,a=":"+a+"R"+c,c=Kh$2++,0Ws||tt[$a]!==nt[Ws]){var gu=` +`+tt[$a].replace(" at new "," at ");return o.displayName&&gu.includes("")&&(gu=gu.replace("",o.displayName)),gu}while(1<=$a&&0<=Ws);break}}}finally{Na$1=!1,Error.prepareStackTrace=c}return(o=o?o.displayName||o.name:"")?Ma$1(o):""}function Pa$1(o){switch(o.tag){case 5:return Ma$1(o.type);case 16:return Ma$1("Lazy");case 13:return Ma$1("Suspense");case 19:return Ma$1("SuspenseList");case 0:case 2:case 15:return o=Oa$1(o.type,!1),o;case 11:return o=Oa$1(o.type.render,!1),o;case 1:return o=Oa$1(o.type,!0),o;default:return""}}function Qa$1(o){if(o==null)return null;if(typeof o=="function")return o.displayName||o.name||null;if(typeof o=="string")return o;switch(o){case ya$1:return"Fragment";case wa$1:return"Portal";case Aa$1:return"Profiler";case za$1:return"StrictMode";case Ea$1:return"Suspense";case Fa$1:return"SuspenseList"}if(typeof o=="object")switch(o.$$typeof){case Ca$1:return(o.displayName||"Context")+".Consumer";case Ba$1:return(o._context.displayName||"Context")+".Provider";case Da$1:var a=o.render;return o=o.displayName,o||(o=a.displayName||a.name||"",o=o!==""?"ForwardRef("+o+")":"ForwardRef"),o;case Ga$1:return a=o.displayName||null,a!==null?a:Qa$1(o.type)||"Memo";case Ha$1:a=o._payload,o=o._init;try{return Qa$1(o(a))}catch{}}return null}function Ra$1(o){var a=o.type;switch(o.tag){case 24:return"Cache";case 9:return(a.displayName||"Context")+".Consumer";case 10:return(a._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return o=a.render,o=o.displayName||o.name||"",a.displayName||(o!==""?"ForwardRef("+o+")":"ForwardRef");case 7:return"Fragment";case 5:return a;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Qa$1(a);case 8:return a===za$1?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a}return null}function Sa$1(o){switch(typeof o){case"boolean":case"number":case"string":case"undefined":return o;case"object":return o;default:return""}}function Ta$1(o){var a=o.type;return(o=o.nodeName)&&o.toLowerCase()==="input"&&(a==="checkbox"||a==="radio")}function Ua$1(o){var a=Ta$1(o)?"checked":"value",c=Object.getOwnPropertyDescriptor(o.constructor.prototype,a),d=""+o[a];if(!o.hasOwnProperty(a)&&typeof c<"u"&&typeof c.get=="function"&&typeof c.set=="function"){var tt=c.get,nt=c.set;return Object.defineProperty(o,a,{configurable:!0,get:function(){return tt.call(this)},set:function($a){d=""+$a,nt.call(this,$a)}}),Object.defineProperty(o,a,{enumerable:c.enumerable}),{getValue:function(){return d},setValue:function($a){d=""+$a},stopTracking:function(){o._valueTracker=null,delete o[a]}}}}function Va$1(o){o._valueTracker||(o._valueTracker=Ua$1(o))}function Wa$1(o){if(!o)return!1;var a=o._valueTracker;if(!a)return!0;var c=a.getValue(),d="";return o&&(d=Ta$1(o)?o.checked?"true":"false":o.value),o=d,o!==c?(a.setValue(o),!0):!1}function Xa$1(o){if(o=o||(typeof document<"u"?document:void 0),typeof o>"u")return null;try{return o.activeElement||o.body}catch{return o.body}}function Ya$1(o,a){var c=a.checked;return A$3({},a,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:c??o._wrapperState.initialChecked})}function Za$1(o,a){var c=a.defaultValue==null?"":a.defaultValue,d=a.checked!=null?a.checked:a.defaultChecked;c=Sa$1(a.value!=null?a.value:c),o._wrapperState={initialChecked:d,initialValue:c,controlled:a.type==="checkbox"||a.type==="radio"?a.checked!=null:a.value!=null}}function ab(o,a){a=a.checked,a!=null&&ta$1(o,"checked",a,!1)}function bb(o,a){ab(o,a);var c=Sa$1(a.value),d=a.type;if(c!=null)d==="number"?(c===0&&o.value===""||o.value!=c)&&(o.value=""+c):o.value!==""+c&&(o.value=""+c);else if(d==="submit"||d==="reset"){o.removeAttribute("value");return}a.hasOwnProperty("value")?cb(o,a.type,c):a.hasOwnProperty("defaultValue")&&cb(o,a.type,Sa$1(a.defaultValue)),a.checked==null&&a.defaultChecked!=null&&(o.defaultChecked=!!a.defaultChecked)}function db(o,a,c){if(a.hasOwnProperty("value")||a.hasOwnProperty("defaultValue")){var d=a.type;if(!(d!=="submit"&&d!=="reset"||a.value!==void 0&&a.value!==null))return;a=""+o._wrapperState.initialValue,c||a===o.value||(o.value=a),o.defaultValue=a}c=o.name,c!==""&&(o.name=""),o.defaultChecked=!!o._wrapperState.initialChecked,c!==""&&(o.name=c)}function cb(o,a,c){(a!=="number"||Xa$1(o.ownerDocument)!==o)&&(c==null?o.defaultValue=""+o._wrapperState.initialValue:o.defaultValue!==""+c&&(o.defaultValue=""+c))}var eb=Array.isArray;function fb(o,a,c,d){if(o=o.options,a){a={};for(var tt=0;tt"+a.valueOf().toString()+"",a=mb.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;a.firstChild;)o.appendChild(a.firstChild)}});function ob(o,a){if(a){var c=o.firstChild;if(c&&c===o.lastChild&&c.nodeType===3){c.nodeValue=a;return}}o.textContent=a}var pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=["Webkit","ms","Moz","O"];Object.keys(pb).forEach(function(o){qb.forEach(function(a){a=a+o.charAt(0).toUpperCase()+o.substring(1),pb[a]=pb[o]})});function rb(o,a,c){return a==null||typeof a=="boolean"||a===""?"":c||typeof a!="number"||a===0||pb.hasOwnProperty(o)&&pb[o]?(""+a).trim():a+"px"}function sb(o,a){o=o.style;for(var c in a)if(a.hasOwnProperty(c)){var d=c.indexOf("--")===0,tt=rb(c,a[c],d);c==="float"&&(c="cssFloat"),d?o.setProperty(c,tt):o[c]=tt}}var tb=A$3({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ub(o,a){if(a){if(tb[o]&&(a.children!=null||a.dangerouslySetInnerHTML!=null))throw Error(p(137,o));if(a.dangerouslySetInnerHTML!=null){if(a.children!=null)throw Error(p(60));if(typeof a.dangerouslySetInnerHTML!="object"||!("__html"in a.dangerouslySetInnerHTML))throw Error(p(61))}if(a.style!=null&&typeof a.style!="object")throw Error(p(62))}}function vb(o,a){if(o.indexOf("-")===-1)return typeof a.is=="string";switch(o){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var wb=null;function xb(o){return o=o.target||o.srcElement||window,o.correspondingUseElement&&(o=o.correspondingUseElement),o.nodeType===3?o.parentNode:o}var yb=null,zb=null,Ab=null;function Bb(o){if(o=Cb(o)){if(typeof yb!="function")throw Error(p(280));var a=o.stateNode;a&&(a=Db(a),yb(o.stateNode,o.type,a))}}function Eb(o){zb?Ab?Ab.push(o):Ab=[o]:zb=o}function Fb(){if(zb){var o=zb,a=Ab;if(Ab=zb=null,Bb(o),a)for(o=0;o>>=0,o===0?32:31-(pc$1(o)/qc|0)|0}var rc$1=64,sc=4194304;function tc$1(o){switch(o&-o){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return o&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return o}}function uc$1(o,a){var c=o.pendingLanes;if(c===0)return 0;var d=0,tt=o.suspendedLanes,nt=o.pingedLanes,$a=c&268435455;if($a!==0){var Ws=$a&~tt;Ws!==0?d=tc$1(Ws):(nt&=$a,nt!==0&&(d=tc$1(nt)))}else $a=c&~tt,$a!==0?d=tc$1($a):nt!==0&&(d=tc$1(nt));if(d===0)return 0;if(a!==0&&a!==d&&!(a&tt)&&(tt=d&-d,nt=a&-a,tt>=nt||tt===16&&(nt&4194240)!==0))return a;if(d&4&&(d|=c&16),a=o.entangledLanes,a!==0)for(o=o.entanglements,a&=d;0c;c++)a.push(o);return a}function Ac(o,a,c){o.pendingLanes|=a,a!==536870912&&(o.suspendedLanes=0,o.pingedLanes=0),o=o.eventTimes,a=31-oc$1(a),o[a]=c}function Bc(o,a){var c=o.pendingLanes&~a;o.pendingLanes=a,o.suspendedLanes=0,o.pingedLanes=0,o.expiredLanes&=a,o.mutableReadLanes&=a,o.entangledLanes&=a,a=o.entanglements;var d=o.eventTimes;for(o=o.expirationTimes;0=be$2),ee$2=" ",fe$2=!1;function ge$2(o,a){switch(o){case"keyup":return $d$1.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function he$2(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var ie$2=!1;function je$2(o,a){switch(o){case"compositionend":return he$2(a);case"keypress":return a.which!==32?null:(fe$2=!0,ee$2);case"textInput":return o=a.data,o===ee$2&&fe$2?null:o;default:return null}}function ke$2(o,a){if(ie$2)return o==="compositionend"||!ae$2&&ge$2(o,a)?(o=nd$1(),md$1=ld$1=kd$1=null,ie$2=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:c,offset:a-o};o=d}e:{for(;c;){if(c.nextSibling){c=c.nextSibling;break e}c=c.parentNode}c=void 0}c=Je$2(c)}}function Le$2(o,a){return o&&a?o===a?!0:o&&o.nodeType===3?!1:a&&a.nodeType===3?Le$2(o,a.parentNode):"contains"in o?o.contains(a):o.compareDocumentPosition?!!(o.compareDocumentPosition(a)&16):!1:!1}function Me$2(){for(var o=window,a=Xa$1();a instanceof o.HTMLIFrameElement;){try{var c=typeof a.contentWindow.location.href=="string"}catch{c=!1}if(c)o=a.contentWindow;else break;a=Xa$1(o.document)}return a}function Ne$2(o){var a=o&&o.nodeName&&o.nodeName.toLowerCase();return a&&(a==="input"&&(o.type==="text"||o.type==="search"||o.type==="tel"||o.type==="url"||o.type==="password")||a==="textarea"||o.contentEditable==="true")}function Oe$2(o){var a=Me$2(),c=o.focusedElem,d=o.selectionRange;if(a!==c&&c&&c.ownerDocument&&Le$2(c.ownerDocument.documentElement,c)){if(d!==null&&Ne$2(c)){if(a=d.start,o=d.end,o===void 0&&(o=a),"selectionStart"in c)c.selectionStart=a,c.selectionEnd=Math.min(o,c.value.length);else if(o=(a=c.ownerDocument||document)&&a.defaultView||window,o.getSelection){o=o.getSelection();var tt=c.textContent.length,nt=Math.min(d.start,tt);d=d.end===void 0?nt:Math.min(d.end,tt),!o.extend&&nt>d&&(tt=d,d=nt,nt=tt),tt=Ke$2(c,nt);var $a=Ke$2(c,d);tt&&$a&&(o.rangeCount!==1||o.anchorNode!==tt.node||o.anchorOffset!==tt.offset||o.focusNode!==$a.node||o.focusOffset!==$a.offset)&&(a=a.createRange(),a.setStart(tt.node,tt.offset),o.removeAllRanges(),nt>d?(o.addRange(a),o.extend($a.node,$a.offset)):(a.setEnd($a.node,$a.offset),o.addRange(a)))}}for(a=[],o=c;o=o.parentNode;)o.nodeType===1&&a.push({element:o,left:o.scrollLeft,top:o.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;c=document.documentMode,Qe$2=null,Re$2=null,Se$2=null,Te$2=!1;function Ue$2(o,a,c){var d=c.window===c?c.document:c.nodeType===9?c:c.ownerDocument;Te$2||Qe$2==null||Qe$2!==Xa$1(d)||(d=Qe$2,"selectionStart"in d&&Ne$2(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se$2&&Ie$2(Se$2,d)||(Se$2=d,d=oe$2(Re$2,"onSelect"),0Tf$1||(o.current=Sf$1[Tf$1],Sf$1[Tf$1]=null,Tf$1--)}function G$4(o,a){Tf$1++,Sf$1[Tf$1]=o.current,o.current=a}var Vf$1={},H$4=Uf$1(Vf$1),Wf$1=Uf$1(!1),Xf$1=Vf$1;function Yf$1(o,a){var c=o.type.contextTypes;if(!c)return Vf$1;var d=o.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===a)return d.__reactInternalMemoizedMaskedChildContext;var tt={},nt;for(nt in c)tt[nt]=a[nt];return d&&(o=o.stateNode,o.__reactInternalMemoizedUnmaskedChildContext=a,o.__reactInternalMemoizedMaskedChildContext=tt),tt}function Zf$1(o){return o=o.childContextTypes,o!=null}function $f$1(){E$2(Wf$1),E$2(H$4)}function ag$1(o,a,c){if(H$4.current!==Vf$1)throw Error(p(168));G$4(H$4,a),G$4(Wf$1,c)}function bg$2(o,a,c){var d=o.stateNode;if(a=a.childContextTypes,typeof d.getChildContext!="function")return c;d=d.getChildContext();for(var tt in d)if(!(tt in a))throw Error(p(108,Ra$1(o)||"Unknown",tt));return A$3({},c,d)}function cg$1(o){return o=(o=o.stateNode)&&o.__reactInternalMemoizedMergedChildContext||Vf$1,Xf$1=H$4.current,G$4(H$4,o),G$4(Wf$1,Wf$1.current),!0}function dg$1(o,a,c){var d=o.stateNode;if(!d)throw Error(p(169));c?(o=bg$2(o,a,Xf$1),d.__reactInternalMemoizedMergedChildContext=o,E$2(Wf$1),E$2(H$4),G$4(H$4,o)):E$2(Wf$1),G$4(Wf$1,c)}var eg$1=null,fg$1=!1,gg$1=!1;function hg$1(o){eg$1===null?eg$1=[o]:eg$1.push(o)}function ig(o){fg$1=!0,hg$1(o)}function jg$1(){if(!gg$1&&eg$1!==null){gg$1=!0;var o=0,a=C$4;try{var c=eg$1;for(C$4=1;o>=$a,tt-=$a,rg=1<<32-oc$1(a)+tt|c<E1?(B1=g1,g1=null):B1=g1.sibling;var lv=Xu($0,g1,L0[E1],V0);if(lv===null){g1===null&&(g1=B1);break}o&&g1&&lv.alternate===null&&a($0,g1),O0=nt(lv,O0,E1),u1===null?F0=lv:u1.sibling=lv,u1=lv,g1=B1}if(E1===L0.length)return c($0,g1),I$2&&tg$1($0,E1),F0;if(g1===null){for(;E1E1?(B1=g1,g1=null):B1=g1.sibling;var j1=Xu($0,g1,lv.value,V0);if(j1===null){g1===null&&(g1=B1);break}o&&g1&&j1.alternate===null&&a($0,g1),O0=nt(j1,O0,E1),u1===null?F0=j1:u1.sibling=j1,u1=j1,g1=B1}if(lv.done)return c($0,g1),I$2&&tg$1($0,E1),F0;if(g1===null){for(;!lv.done;E1++,lv=L0.next())lv=Iu($0,lv.value,V0),lv!==null&&(O0=nt(lv,O0,E1),u1===null?F0=lv:u1.sibling=lv,u1=lv);return I$2&&tg$1($0,E1),F0}for(g1=d($0,g1);!lv.done;E1++,lv=L0.next())lv=r0(g1,$0,E1,lv.value,V0),lv!==null&&(o&&lv.alternate!==null&&g1.delete(lv.key===null?E1:lv.key),O0=nt(lv,O0,E1),u1===null?F0=lv:u1.sibling=lv,u1=lv);return o&&g1.forEach(function(r1){return a($0,r1)}),I$2&&tg$1($0,E1),F0}function A0($0,O0,L0,V0){if(typeof L0=="object"&&L0!==null&&L0.type===ya$1&&L0.key===null&&(L0=L0.props.children),typeof L0=="object"&&L0!==null){switch(L0.$$typeof){case va$1:e:{for(var F0=L0.key,u1=O0;u1!==null;){if(u1.key===F0){if(F0=L0.type,F0===ya$1){if(u1.tag===7){c($0,u1.sibling),O0=tt(u1,L0.props.children),O0.return=$0,$0=O0;break e}}else if(u1.elementType===F0||typeof F0=="object"&&F0!==null&&F0.$$typeof===Ha$1&&Ng$1(F0)===u1.type){c($0,u1.sibling),O0=tt(u1,L0.props),O0.ref=Lg($0,u1,L0),O0.return=$0,$0=O0;break e}c($0,u1);break}else a($0,u1);u1=u1.sibling}L0.type===ya$1?(O0=Tg$1(L0.props.children,$0.mode,V0,L0.key),O0.return=$0,$0=O0):(V0=Rg(L0.type,L0.key,L0.props,null,$0.mode,V0),V0.ref=Lg($0,O0,L0),V0.return=$0,$0=V0)}return $a($0);case wa$1:e:{for(u1=L0.key;O0!==null;){if(O0.key===u1)if(O0.tag===4&&O0.stateNode.containerInfo===L0.containerInfo&&O0.stateNode.implementation===L0.implementation){c($0,O0.sibling),O0=tt(O0,L0.children||[]),O0.return=$0,$0=O0;break e}else{c($0,O0);break}else a($0,O0);O0=O0.sibling}O0=Sg$1(L0,$0.mode,V0),O0.return=$0,$0=O0}return $a($0);case Ha$1:return u1=L0._init,A0($0,O0,u1(L0._payload),V0)}if(eb(L0))return p0($0,O0,L0,V0);if(Ka$1(L0))return y0($0,O0,L0,V0);Mg($0,L0)}return typeof L0=="string"&&L0!==""||typeof L0=="number"?(L0=""+L0,O0!==null&&O0.tag===6?(c($0,O0.sibling),O0=tt(O0,L0),O0.return=$0,$0=O0):(c($0,O0),O0=Qg(L0,$0.mode,V0),O0.return=$0,$0=O0),$a($0)):c($0,O0)}return A0}var Ug$1=Og(!0),Vg$1=Og(!1),Wg=Uf$1(null),Xg=null,Yg=null,Zg=null;function $g$1(){Zg=Yg=Xg=null}function ah$1(o){var a=Wg.current;E$2(Wg),o._currentValue=a}function bh$1(o,a,c){for(;o!==null;){var d=o.alternate;if((o.childLanes&a)!==a?(o.childLanes|=a,d!==null&&(d.childLanes|=a)):d!==null&&(d.childLanes&a)!==a&&(d.childLanes|=a),o===c)break;o=o.return}}function ch$2(o,a){Xg=o,Zg=Yg=null,o=o.dependencies,o!==null&&o.firstContext!==null&&(o.lanes&a&&(dh$2=!0),o.firstContext=null)}function eh$1(o){var a=o._currentValue;if(Zg!==o)if(o={context:o,memoizedValue:a,next:null},Yg===null){if(Xg===null)throw Error(p(308));Yg=o,Xg.dependencies={lanes:0,firstContext:o}}else Yg=Yg.next=o;return a}var fh$1=null;function gh$1(o){fh$1===null?fh$1=[o]:fh$1.push(o)}function hh$1(o,a,c,d){var tt=a.interleaved;return tt===null?(c.next=c,gh$1(a)):(c.next=tt.next,tt.next=c),a.interleaved=c,ih$1(o,d)}function ih$1(o,a){o.lanes|=a;var c=o.alternate;for(c!==null&&(c.lanes|=a),c=o,o=o.return;o!==null;)o.childLanes|=a,c=o.alternate,c!==null&&(c.childLanes|=a),c=o,o=o.return;return c.tag===3?c.stateNode:null}var jh$1=!1;function kh$1(o){o.updateQueue={baseState:o.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function lh$1(o,a){o=o.updateQueue,a.updateQueue===o&&(a.updateQueue={baseState:o.baseState,firstBaseUpdate:o.firstBaseUpdate,lastBaseUpdate:o.lastBaseUpdate,shared:o.shared,effects:o.effects})}function mh$1(o,a){return{eventTime:o,lane:a,tag:0,payload:null,callback:null,next:null}}function nh$1(o,a,c){var d=o.updateQueue;if(d===null)return null;if(d=d.shared,K$7&2){var tt=d.pending;return tt===null?a.next=a:(a.next=tt.next,tt.next=a),d.pending=a,ih$1(o,c)}return tt=d.interleaved,tt===null?(a.next=a,gh$1(d)):(a.next=tt.next,tt.next=a),d.interleaved=a,ih$1(o,c)}function oh$1(o,a,c){if(a=a.updateQueue,a!==null&&(a=a.shared,(c&4194240)!==0)){var d=a.lanes;d&=o.pendingLanes,c|=d,a.lanes=c,Cc(o,c)}}function ph$1(o,a){var c=o.updateQueue,d=o.alternate;if(d!==null&&(d=d.updateQueue,c===d)){var tt=null,nt=null;if(c=c.firstBaseUpdate,c!==null){do{var $a={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};nt===null?tt=nt=$a:nt=nt.next=$a,c=c.next}while(c!==null);nt===null?tt=nt=a:nt=nt.next=a}else tt=nt=a;c={baseState:d.baseState,firstBaseUpdate:tt,lastBaseUpdate:nt,shared:d.shared,effects:d.effects},o.updateQueue=c;return}o=c.lastBaseUpdate,o===null?c.firstBaseUpdate=a:o.next=a,c.lastBaseUpdate=a}function qh$1(o,a,c,d){var tt=o.updateQueue;jh$1=!1;var nt=tt.firstBaseUpdate,$a=tt.lastBaseUpdate,Ws=tt.shared.pending;if(Ws!==null){tt.shared.pending=null;var gu=Ws,Su=gu.next;gu.next=null,$a===null?nt=Su:$a.next=Su,$a=gu;var $u=o.alternate;$u!==null&&($u=$u.updateQueue,Ws=$u.lastBaseUpdate,Ws!==$a&&(Ws===null?$u.firstBaseUpdate=Su:Ws.next=Su,$u.lastBaseUpdate=gu))}if(nt!==null){var Iu=tt.baseState;$a=0,$u=Su=gu=null,Ws=nt;do{var Xu=Ws.lane,r0=Ws.eventTime;if((d&Xu)===Xu){$u!==null&&($u=$u.next={eventTime:r0,lane:0,tag:Ws.tag,payload:Ws.payload,callback:Ws.callback,next:null});e:{var p0=o,y0=Ws;switch(Xu=a,r0=c,y0.tag){case 1:if(p0=y0.payload,typeof p0=="function"){Iu=p0.call(r0,Iu,Xu);break e}Iu=p0;break e;case 3:p0.flags=p0.flags&-65537|128;case 0:if(p0=y0.payload,Xu=typeof p0=="function"?p0.call(r0,Iu,Xu):p0,Xu==null)break e;Iu=A$3({},Iu,Xu);break e;case 2:jh$1=!0}}Ws.callback!==null&&Ws.lane!==0&&(o.flags|=64,Xu=tt.effects,Xu===null?tt.effects=[Ws]:Xu.push(Ws))}else r0={eventTime:r0,lane:Xu,tag:Ws.tag,payload:Ws.payload,callback:Ws.callback,next:null},$u===null?(Su=$u=r0,gu=Iu):$u=$u.next=r0,$a|=Xu;if(Ws=Ws.next,Ws===null){if(Ws=tt.shared.pending,Ws===null)break;Xu=Ws,Ws=Xu.next,Xu.next=null,tt.lastBaseUpdate=Xu,tt.shared.pending=null}}while(!0);if($u===null&&(gu=Iu),tt.baseState=gu,tt.firstBaseUpdate=Su,tt.lastBaseUpdate=$u,a=tt.shared.interleaved,a!==null){tt=a;do $a|=tt.lane,tt=tt.next;while(tt!==a)}else nt===null&&(tt.shared.lanes=0);rh$2|=$a,o.lanes=$a,o.memoizedState=Iu}}function sh$2(o,a,c){if(o=a.effects,a.effects=null,o!==null)for(a=0;ac?c:4,o(!0);var d=Gh$1.transition;Gh$1.transition={};try{o(!1),a()}finally{C$4=c,Gh$1.transition=d}}function wi$1(){return Uh$1().memoizedState}function xi$1(o,a,c){var d=yi$1(o);if(c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null},zi$1(o))Ai$1(a,c);else if(c=hh$1(o,a,c,d),c!==null){var tt=R$4();gi$1(c,o,d,tt),Bi$1(c,a,d)}}function ii$1(o,a,c){var d=yi$1(o),tt={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi$1(o))Ai$1(a,tt);else{var nt=o.alternate;if(o.lanes===0&&(nt===null||nt.lanes===0)&&(nt=a.lastRenderedReducer,nt!==null))try{var $a=a.lastRenderedState,Ws=nt($a,c);if(tt.hasEagerState=!0,tt.eagerState=Ws,He$2(Ws,$a)){var gu=a.interleaved;gu===null?(tt.next=tt,gh$1(a)):(tt.next=gu.next,gu.next=tt),a.interleaved=tt;return}}catch{}finally{}c=hh$1(o,a,tt,d),c!==null&&(tt=R$4(),gi$1(c,o,d,tt),Bi$1(c,a,d))}}function zi$1(o){var a=o.alternate;return o===M$3||a!==null&&a===M$3}function Ai$1(o,a){Jh$1=Ih$1=!0;var c=o.pending;c===null?a.next=a:(a.next=c.next,c.next=a),o.pending=a}function Bi$1(o,a,c){if(c&4194240){var d=a.lanes;d&=o.pendingLanes,c|=d,a.lanes=c,Cc(o,c)}}var Rh$1={readContext:eh$1,useCallback:P$1,useContext:P$1,useEffect:P$1,useImperativeHandle:P$1,useInsertionEffect:P$1,useLayoutEffect:P$1,useMemo:P$1,useReducer:P$1,useRef:P$1,useState:P$1,useDebugValue:P$1,useDeferredValue:P$1,useTransition:P$1,useMutableSource:P$1,useSyncExternalStore:P$1,useId:P$1,unstable_isNewReconciler:!1},Oh$1={readContext:eh$1,useCallback:function(o,a){return Th$1().memoizedState=[o,a===void 0?null:a],o},useContext:eh$1,useEffect:mi$1,useImperativeHandle:function(o,a,c){return c=c!=null?c.concat([o]):null,ki$1(4194308,4,pi$1.bind(null,a,o),c)},useLayoutEffect:function(o,a){return ki$1(4194308,4,o,a)},useInsertionEffect:function(o,a){return ki$1(4,2,o,a)},useMemo:function(o,a){var c=Th$1();return a=a===void 0?null:a,o=o(),c.memoizedState=[o,a],o},useReducer:function(o,a,c){var d=Th$1();return a=c!==void 0?c(a):a,d.memoizedState=d.baseState=a,o={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:o,lastRenderedState:a},d.queue=o,o=o.dispatch=xi$1.bind(null,M$3,o),[d.memoizedState,o]},useRef:function(o){var a=Th$1();return o={current:o},a.memoizedState=o},useState:hi$2,useDebugValue:ri$1,useDeferredValue:function(o){return Th$1().memoizedState=o},useTransition:function(){var o=hi$2(!1),a=o[0];return o=vi$2.bind(null,o[1]),Th$1().memoizedState=o,[a,o]},useMutableSource:function(){},useSyncExternalStore:function(o,a,c){var d=M$3,tt=Th$1();if(I$2){if(c===void 0)throw Error(p(407));c=c()}else{if(c=a(),Q$3===null)throw Error(p(349));Hh$1&30||di$1(d,a,c)}tt.memoizedState=c;var nt={value:c,getSnapshot:a};return tt.queue=nt,mi$1(ai$1.bind(null,d,nt,o),[o]),d.flags|=2048,bi$1(9,ci$1.bind(null,d,nt,c,a),void 0,null),c},useId:function(){var o=Th$1(),a=Q$3.identifierPrefix;if(I$2){var c=sg$1,d=rg;c=(d&~(1<<32-oc$1(d)-1)).toString(32)+c,a=":"+a+"R"+c,c=Kh$2++,0<\/script>",o=o.removeChild(o.firstChild)):typeof d.is=="string"?o=$a.createElement(c,{is:d.is}):(o=$a.createElement(c),c==="select"&&($a=o,d.multiple?$a.multiple=!0:d.size&&($a.size=d.size))):o=$a.createElementNS(o,c),o[Of$1]=a,o[Pf$1]=d,zj(o,a,!1,!1),a.stateNode=o;e:{switch($a=vb(c,d),c){case"dialog":D$3("cancel",o),D$3("close",o),tt=d;break;case"iframe":case"object":case"embed":D$3("load",o),tt=d;break;case"video":case"audio":for(tt=0;ttGj&&(a.flags|=128,d=!0,Dj(nt,!1),a.lanes=4194304)}else{if(!d)if(o=Ch$2($a),o!==null){if(a.flags|=128,d=!0,c=o.updateQueue,c!==null&&(a.updateQueue=c,a.flags|=4),Dj(nt,!0),nt.tail===null&&nt.tailMode==="hidden"&&!$a.alternate&&!I$2)return S$3(a),null}else 2*B$3()-nt.renderingStartTime>Gj&&c!==1073741824&&(a.flags|=128,d=!0,Dj(nt,!1),a.lanes=4194304);nt.isBackwards?($a.sibling=a.child,a.child=$a):(c=nt.last,c!==null?c.sibling=$a:a.child=$a,nt.last=$a)}return nt.tail!==null?(a=nt.tail,nt.rendering=a,nt.tail=a.sibling,nt.renderingStartTime=B$3(),a.sibling=null,c=L$4.current,G$4(L$4,d?c&1|2:c&1),a):(S$3(a),null);case 22:case 23:return Hj(),d=a.memoizedState!==null,o!==null&&o.memoizedState!==null!==d&&(a.flags|=8192),d&&a.mode&1?fj&1073741824&&(S$3(a),a.subtreeFlags&6&&(a.flags|=8192)):S$3(a),null;case 24:return null;case 25:return null}throw Error(p(156,a.tag))}function Ij(o,a){switch(wg(a),a.tag){case 1:return Zf$1(a.type)&&$f$1(),o=a.flags,o&65536?(a.flags=o&-65537|128,a):null;case 3:return zh$2(),E$2(Wf$1),E$2(H$4),Eh$1(),o=a.flags,o&65536&&!(o&128)?(a.flags=o&-65537|128,a):null;case 5:return Bh$1(a),null;case 13:if(E$2(L$4),o=a.memoizedState,o!==null&&o.dehydrated!==null){if(a.alternate===null)throw Error(p(340));Ig$1()}return o=a.flags,o&65536?(a.flags=o&-65537|128,a):null;case 19:return E$2(L$4),null;case 4:return zh$2(),null;case 10:return ah$1(a.type._context),null;case 22:case 23:return Hj(),null;case 24:return null;default:return null}}var Jj=!1,U$2=!1,Kj=typeof WeakSet=="function"?WeakSet:Set,V$3=null;function Lj(o,a){var c=o.ref;if(c!==null)if(typeof c=="function")try{c(null)}catch(d){W$8(o,a,d)}else c.current=null}function Mj(o,a,c){try{c()}catch(d){W$8(o,a,d)}}var Nj=!1;function Oj(o,a){if(Cf$1=dd$1,o=Me$2(),Ne$2(o)){if("selectionStart"in o)var c={start:o.selectionStart,end:o.selectionEnd};else e:{c=(c=o.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&d.rangeCount!==0){c=d.anchorNode;var tt=d.anchorOffset,nt=d.focusNode;d=d.focusOffset;try{c.nodeType,nt.nodeType}catch{c=null;break e}var $a=0,Ys=-1,gu=-1,xu=0,$u=0,Iu=o,Xu=null;t:for(;;){for(var i0;Iu!==c||tt!==0&&Iu.nodeType!==3||(Ys=$a+tt),Iu!==nt||d!==0&&Iu.nodeType!==3||(gu=$a+d),Iu.nodeType===3&&($a+=Iu.nodeValue.length),(i0=Iu.firstChild)!==null;)Xu=Iu,Iu=i0;for(;;){if(Iu===o)break t;if(Xu===c&&++xu===tt&&(Ys=$a),Xu===nt&&++$u===d&&(gu=$a),(i0=Iu.nextSibling)!==null)break;Iu=Xu,Xu=Iu.parentNode}Iu=i0}c=Ys===-1||gu===-1?null:{start:Ys,end:gu}}else c=null}c=c||{start:0,end:0}}else c=null;for(Df$1={focusedElem:o,selectionRange:c},dd$1=!1,V$3=a;V$3!==null;)if(a=V$3,o=a.child,(a.subtreeFlags&1028)!==0&&o!==null)o.return=a,V$3=o;else for(;V$3!==null;){a=V$3;try{var p0=a.alternate;if(a.flags&1024)switch(a.tag){case 0:case 11:case 15:break;case 1:if(p0!==null){var w0=p0.memoizedProps,A0=p0.memoizedState,$0=a.stateNode,O0=$0.getSnapshotBeforeUpdate(a.elementType===a.type?w0:Ci$1(a.type,w0),A0);$0.__reactInternalSnapshotBeforeUpdate=O0}break;case 3:var L0=a.stateNode.containerInfo;L0.nodeType===1?L0.textContent="":L0.nodeType===9&&L0.documentElement&&L0.removeChild(L0.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163))}}catch(q0){W$8(a,a.return,q0)}if(o=a.sibling,o!==null){o.return=a.return,V$3=o;break}V$3=a.return}return p0=Nj,Nj=!1,p0}function Pj(o,a,c){var d=a.updateQueue;if(d=d!==null?d.lastEffect:null,d!==null){var tt=d=d.next;do{if((tt.tag&o)===o){var nt=tt.destroy;tt.destroy=void 0,nt!==void 0&&Mj(a,c,nt)}tt=tt.next}while(tt!==d)}}function Qj(o,a){if(a=a.updateQueue,a=a!==null?a.lastEffect:null,a!==null){var c=a=a.next;do{if((c.tag&o)===o){var d=c.create;c.destroy=d()}c=c.next}while(c!==a)}}function Rj(o){var a=o.ref;if(a!==null){var c=o.stateNode;switch(o.tag){case 5:o=c;break;default:o=c}typeof a=="function"?a(o):a.current=o}}function Sj(o){var a=o.alternate;a!==null&&(o.alternate=null,Sj(a)),o.child=null,o.deletions=null,o.sibling=null,o.tag===5&&(a=o.stateNode,a!==null&&(delete a[Of$1],delete a[Pf$1],delete a[of$1],delete a[Qf$1],delete a[Rf$1])),o.stateNode=null,o.return=null,o.dependencies=null,o.memoizedProps=null,o.memoizedState=null,o.pendingProps=null,o.stateNode=null,o.updateQueue=null}function Tj(o){return o.tag===5||o.tag===3||o.tag===4}function Uj(o){e:for(;;){for(;o.sibling===null;){if(o.return===null||Tj(o.return))return null;o=o.return}for(o.sibling.return=o.return,o=o.sibling;o.tag!==5&&o.tag!==6&&o.tag!==18;){if(o.flags&2||o.child===null||o.tag===4)continue e;o.child.return=o,o=o.child}if(!(o.flags&2))return o.stateNode}}function Vj(o,a,c){var d=o.tag;if(d===5||d===6)o=o.stateNode,a?c.nodeType===8?c.parentNode.insertBefore(o,a):c.insertBefore(o,a):(c.nodeType===8?(a=c.parentNode,a.insertBefore(o,c)):(a=c,a.appendChild(o)),c=c._reactRootContainer,c!=null||a.onclick!==null||(a.onclick=Bf$1));else if(d!==4&&(o=o.child,o!==null))for(Vj(o,a,c),o=o.sibling;o!==null;)Vj(o,a,c),o=o.sibling}function Wj(o,a,c){var d=o.tag;if(d===5||d===6)o=o.stateNode,a?c.insertBefore(o,a):c.appendChild(o);else if(d!==4&&(o=o.child,o!==null))for(Wj(o,a,c),o=o.sibling;o!==null;)Wj(o,a,c),o=o.sibling}var X$2=null,Xj=!1;function Yj(o,a,c){for(c=c.child;c!==null;)Zj(o,a,c),c=c.sibling}function Zj(o,a,c){if(lc$1&&typeof lc$1.onCommitFiberUnmount=="function")try{lc$1.onCommitFiberUnmount(kc,c)}catch{}switch(c.tag){case 5:U$2||Lj(c,a);case 6:var d=X$2,tt=Xj;X$2=null,Yj(o,a,c),X$2=d,Xj=tt,X$2!==null&&(Xj?(o=X$2,c=c.stateNode,o.nodeType===8?o.parentNode.removeChild(c):o.removeChild(c)):X$2.removeChild(c.stateNode));break;case 18:X$2!==null&&(Xj?(o=X$2,c=c.stateNode,o.nodeType===8?Kf$1(o.parentNode,c):o.nodeType===1&&Kf$1(o,c),bd$1(o)):Kf$1(X$2,c.stateNode));break;case 4:d=X$2,tt=Xj,X$2=c.stateNode.containerInfo,Xj=!0,Yj(o,a,c),X$2=d,Xj=tt;break;case 0:case 11:case 14:case 15:if(!U$2&&(d=c.updateQueue,d!==null&&(d=d.lastEffect,d!==null))){tt=d=d.next;do{var nt=tt,$a=nt.destroy;nt=nt.tag,$a!==void 0&&(nt&2||nt&4)&&Mj(c,a,$a),tt=tt.next}while(tt!==d)}Yj(o,a,c);break;case 1:if(!U$2&&(Lj(c,a),d=c.stateNode,typeof d.componentWillUnmount=="function"))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(Ys){W$8(c,a,Ys)}Yj(o,a,c);break;case 21:Yj(o,a,c);break;case 22:c.mode&1?(U$2=(d=U$2)||c.memoizedState!==null,Yj(o,a,c),U$2=d):Yj(o,a,c);break;default:Yj(o,a,c)}}function ak(o){var a=o.updateQueue;if(a!==null){o.updateQueue=null;var c=o.stateNode;c===null&&(c=o.stateNode=new Kj),a.forEach(function(d){var tt=bk.bind(null,o,d);c.has(d)||(c.add(d),d.then(tt,tt))})}}function ck(o,a){var c=a.deletions;if(c!==null)for(var d=0;dtt&&(tt=$a),d&=~nt}if(d=tt,d=B$3()-d,d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3e3>d?3e3:4320>d?4320:1960*lk(d/1960))-d,10o?16:o,wk===null)var d=!1;else{if(o=wk,wk=null,xk=0,K$7&6)throw Error(p(331));var tt=K$7;for(K$7|=4,V$3=o.current;V$3!==null;){var nt=V$3,$a=nt.child;if(V$3.flags&16){var Ys=nt.deletions;if(Ys!==null){for(var gu=0;guB$3()-fk?Kk(o,0):rk|=c),Dk(o,a)}function Yk(o,a){a===0&&(o.mode&1?(a=sc,sc<<=1,!(sc&130023424)&&(sc=4194304)):a=1);var c=R$4();o=ih$1(o,a),o!==null&&(Ac(o,a,c),Dk(o,c))}function uj(o){var a=o.memoizedState,c=0;a!==null&&(c=a.retryLane),Yk(o,c)}function bk(o,a){var c=0;switch(o.tag){case 13:var d=o.stateNode,tt=o.memoizedState;tt!==null&&(c=tt.retryLane);break;case 19:d=o.stateNode;break;default:throw Error(p(314))}d!==null&&d.delete(a),Yk(o,c)}var Vk;Vk=function(o,a,c){if(o!==null)if(o.memoizedProps!==a.pendingProps||Wf$1.current)dh$2=!0;else{if(!(o.lanes&c)&&!(a.flags&128))return dh$2=!1,yj(o,a,c);dh$2=!!(o.flags&131072)}else dh$2=!1,I$2&&a.flags&1048576&&ug$1(a,ng,a.index);switch(a.lanes=0,a.tag){case 2:var d=a.type;ij(o,a),o=a.pendingProps;var tt=Yf$1(a,H$4.current);ch$2(a,c),tt=Nh$1(null,a,d,o,tt,c);var nt=Sh$1();return a.flags|=1,typeof tt=="object"&&tt!==null&&typeof tt.render=="function"&&tt.$$typeof===void 0?(a.tag=1,a.memoizedState=null,a.updateQueue=null,Zf$1(d)?(nt=!0,cg$1(a)):nt=!1,a.memoizedState=tt.state!==null&&tt.state!==void 0?tt.state:null,kh$1(a),tt.updater=Ei$1,a.stateNode=tt,tt._reactInternals=a,Ii$1(a,d,o,c),a=jj(null,a,d,!0,nt,c)):(a.tag=0,I$2&&nt&&vg$1(a),Xi$1(null,a,tt,c),a=a.child),a;case 16:d=a.elementType;e:{switch(ij(o,a),o=a.pendingProps,tt=d._init,d=tt(d._payload),a.type=d,tt=a.tag=Zk(d),o=Ci$1(d,o),tt){case 0:a=cj(null,a,d,o,c);break e;case 1:a=hj(null,a,d,o,c);break e;case 11:a=Yi$1(null,a,d,o,c);break e;case 14:a=$i$1(null,a,d,Ci$1(d.type,o),c);break e}throw Error(p(306,d,""))}return a;case 0:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),cj(o,a,d,tt,c);case 1:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),hj(o,a,d,tt,c);case 3:e:{if(kj(a),o===null)throw Error(p(387));d=a.pendingProps,nt=a.memoizedState,tt=nt.element,lh$1(o,a),qh$1(a,d,null,c);var $a=a.memoizedState;if(d=$a.element,nt.isDehydrated)if(nt={element:d,isDehydrated:!1,cache:$a.cache,pendingSuspenseBoundaries:$a.pendingSuspenseBoundaries,transitions:$a.transitions},a.updateQueue.baseState=nt,a.memoizedState=nt,a.flags&256){tt=Ji$1(Error(p(423)),a),a=lj(o,a,d,c,tt);break e}else if(d!==tt){tt=Ji$1(Error(p(424)),a),a=lj(o,a,d,c,tt);break e}else for(yg$1=Lf$1(a.stateNode.containerInfo.firstChild),xg=a,I$2=!0,zg$1=null,c=Vg$1(a,null,d,c),a.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{if(Ig$1(),d===tt){a=Zi$1(o,a,c);break e}Xi$1(o,a,d,c)}a=a.child}return a;case 5:return Ah$1(a),o===null&&Eg(a),d=a.type,tt=a.pendingProps,nt=o!==null?o.memoizedProps:null,$a=tt.children,Ef$1(d,tt)?$a=null:nt!==null&&Ef$1(d,nt)&&(a.flags|=32),gj(o,a),Xi$1(o,a,$a,c),a.child;case 6:return o===null&&Eg(a),null;case 13:return oj(o,a,c);case 4:return yh$1(a,a.stateNode.containerInfo),d=a.pendingProps,o===null?a.child=Ug$1(a,null,d,c):Xi$1(o,a,d,c),a.child;case 11:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),Yi$1(o,a,d,tt,c);case 7:return Xi$1(o,a,a.pendingProps,c),a.child;case 8:return Xi$1(o,a,a.pendingProps.children,c),a.child;case 12:return Xi$1(o,a,a.pendingProps.children,c),a.child;case 10:e:{if(d=a.type._context,tt=a.pendingProps,nt=a.memoizedProps,$a=tt.value,G$4(Wg,d._currentValue),d._currentValue=$a,nt!==null)if(He$2(nt.value,$a)){if(nt.children===tt.children&&!Wf$1.current){a=Zi$1(o,a,c);break e}}else for(nt=a.child,nt!==null&&(nt.return=a);nt!==null;){var Ys=nt.dependencies;if(Ys!==null){$a=nt.child;for(var gu=Ys.firstContext;gu!==null;){if(gu.context===d){if(nt.tag===1){gu=mh$1(-1,c&-c),gu.tag=2;var xu=nt.updateQueue;if(xu!==null){xu=xu.shared;var $u=xu.pending;$u===null?gu.next=gu:(gu.next=$u.next,$u.next=gu),xu.pending=gu}}nt.lanes|=c,gu=nt.alternate,gu!==null&&(gu.lanes|=c),bh$1(nt.return,c,a),Ys.lanes|=c;break}gu=gu.next}}else if(nt.tag===10)$a=nt.type===a.type?null:nt.child;else if(nt.tag===18){if($a=nt.return,$a===null)throw Error(p(341));$a.lanes|=c,Ys=$a.alternate,Ys!==null&&(Ys.lanes|=c),bh$1($a,c,a),$a=nt.sibling}else $a=nt.child;if($a!==null)$a.return=nt;else for($a=nt;$a!==null;){if($a===a){$a=null;break}if(nt=$a.sibling,nt!==null){nt.return=$a.return,$a=nt;break}$a=$a.return}nt=$a}Xi$1(o,a,tt.children,c),a=a.child}return a;case 9:return tt=a.type,d=a.pendingProps.children,ch$2(a,c),tt=eh$1(tt),d=d(tt),a.flags|=1,Xi$1(o,a,d,c),a.child;case 14:return d=a.type,tt=Ci$1(d,a.pendingProps),tt=Ci$1(d.type,tt),$i$1(o,a,d,tt,c);case 15:return bj(o,a,a.type,a.pendingProps,c);case 17:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),ij(o,a),a.tag=1,Zf$1(d)?(o=!0,cg$1(a)):o=!1,ch$2(a,c),Gi$1(a,d,tt),Ii$1(a,d,tt,c),jj(null,a,d,!0,o,c);case 19:return xj(o,a,c);case 22:return dj(o,a,c)}throw Error(p(156,a.tag))};function Fk(o,a){return ac(o,a)}function $k(o,a,c,d){this.tag=o,this.key=c,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=a,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=d,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bg(o,a,c,d){return new $k(o,a,c,d)}function aj(o){return o=o.prototype,!(!o||!o.isReactComponent)}function Zk(o){if(typeof o=="function")return aj(o)?1:0;if(o!=null){if(o=o.$$typeof,o===Da$1)return 11;if(o===Ga$1)return 14}return 2}function Pg(o,a){var c=o.alternate;return c===null?(c=Bg(o.tag,a,o.key,o.mode),c.elementType=o.elementType,c.type=o.type,c.stateNode=o.stateNode,c.alternate=o,o.alternate=c):(c.pendingProps=a,c.type=o.type,c.flags=0,c.subtreeFlags=0,c.deletions=null),c.flags=o.flags&14680064,c.childLanes=o.childLanes,c.lanes=o.lanes,c.child=o.child,c.memoizedProps=o.memoizedProps,c.memoizedState=o.memoizedState,c.updateQueue=o.updateQueue,a=o.dependencies,c.dependencies=a===null?null:{lanes:a.lanes,firstContext:a.firstContext},c.sibling=o.sibling,c.index=o.index,c.ref=o.ref,c}function Rg(o,a,c,d,tt,nt){var $a=2;if(d=o,typeof o=="function")aj(o)&&($a=1);else if(typeof o=="string")$a=5;else e:switch(o){case ya$1:return Tg$1(c.children,tt,nt,a);case za$1:$a=8,tt|=8;break;case Aa$1:return o=Bg(12,c,a,tt|2),o.elementType=Aa$1,o.lanes=nt,o;case Ea$1:return o=Bg(13,c,a,tt),o.elementType=Ea$1,o.lanes=nt,o;case Fa$1:return o=Bg(19,c,a,tt),o.elementType=Fa$1,o.lanes=nt,o;case Ia$1:return pj(c,tt,nt,a);default:if(typeof o=="object"&&o!==null)switch(o.$$typeof){case Ba$1:$a=10;break e;case Ca$1:$a=9;break e;case Da$1:$a=11;break e;case Ga$1:$a=14;break e;case Ha$1:$a=16,d=null;break e}throw Error(p(130,o==null?o:typeof o,""))}return a=Bg($a,c,a,tt),a.elementType=o,a.type=d,a.lanes=nt,a}function Tg$1(o,a,c,d){return o=Bg(7,o,d,a),o.lanes=c,o}function pj(o,a,c,d){return o=Bg(22,o,d,a),o.elementType=Ia$1,o.lanes=c,o.stateNode={isHidden:!1},o}function Qg(o,a,c){return o=Bg(6,o,null,a),o.lanes=c,o}function Sg$1(o,a,c){return a=Bg(4,o.children!==null?o.children:[],o.key,a),a.lanes=c,a.stateNode={containerInfo:o.containerInfo,pendingChildren:null,implementation:o.implementation},a}function al$1(o,a,c,d,tt){this.tag=a,this.containerInfo=o,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zc(0),this.expirationTimes=zc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zc(0),this.identifierPrefix=d,this.onRecoverableError=tt,this.mutableSourceEagerHydrationData=null}function bl$1(o,a,c,d,tt,nt,$a,Ys,gu){return o=new al$1(o,a,c,Ys,gu),a===1?(a=1,nt===!0&&(a|=8)):a=0,nt=Bg(3,null,null,a),o.current=nt,nt.stateNode=o,nt.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null},kh$1(nt),o}function cl$1(o,a,c){var d=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE)}catch(o){console.error(o)}}checkDCE(),reactDom.exports=reactDom_production_min;var reactDomExports=reactDom.exports;const ReactDOM=getDefaultExportFromCjs$1(reactDomExports);var createRoot,m$1=reactDomExports;createRoot=client.createRoot=m$1.createRoot,client.hydrateRoot=m$1.hydrateRoot;/** +`+nt.stack}return{value:o,source:a,stack:tt,digest:null}}function Ki$1(o,a,c){return{value:o,source:null,stack:c??null,digest:a??null}}function Li$1(o,a){try{console.error(a.value)}catch(c){setTimeout(function(){throw c})}}var Mi$1=typeof WeakMap=="function"?WeakMap:Map;function Ni$1(o,a,c){c=mh$1(-1,c),c.tag=3,c.payload={element:null};var d=a.value;return c.callback=function(){Oi$1||(Oi$1=!0,Pi$1=d),Li$1(o,a)},c}function Qi$1(o,a,c){c=mh$1(-1,c),c.tag=3;var d=o.type.getDerivedStateFromError;if(typeof d=="function"){var tt=a.value;c.payload=function(){return d(tt)},c.callback=function(){Li$1(o,a)}}var nt=o.stateNode;return nt!==null&&typeof nt.componentDidCatch=="function"&&(c.callback=function(){Li$1(o,a),typeof d!="function"&&(Ri$1===null?Ri$1=new Set([this]):Ri$1.add(this));var $a=a.stack;this.componentDidCatch(a.value,{componentStack:$a!==null?$a:""})}),c}function Si$1(o,a,c){var d=o.pingCache;if(d===null){d=o.pingCache=new Mi$1;var tt=new Set;d.set(a,tt)}else tt=d.get(a),tt===void 0&&(tt=new Set,d.set(a,tt));tt.has(c)||(tt.add(c),o=Ti$1.bind(null,o,a,c),a.then(o,o))}function Ui$1(o){do{var a;if((a=o.tag===13)&&(a=o.memoizedState,a=a!==null?a.dehydrated!==null:!0),a)return o;o=o.return}while(o!==null);return null}function Vi$1(o,a,c,d,tt){return o.mode&1?(o.flags|=65536,o.lanes=tt,o):(o===a?o.flags|=65536:(o.flags|=128,c.flags|=131072,c.flags&=-52805,c.tag===1&&(c.alternate===null?c.tag=17:(a=mh$1(-1,1),a.tag=2,nh$1(c,a,1))),c.lanes|=1),o)}var Wi$1=ua$1.ReactCurrentOwner,dh$2=!1;function Xi$1(o,a,c,d){a.child=o===null?Vg$1(a,null,c,d):Ug$1(a,o.child,c,d)}function Yi$1(o,a,c,d,tt){c=c.render;var nt=a.ref;return ch$2(a,tt),d=Nh$1(o,a,c,d,nt,tt),c=Sh$1(),o!==null&&!dh$2?(a.updateQueue=o.updateQueue,a.flags&=-2053,o.lanes&=~tt,Zi$1(o,a,tt)):(I$2&&c&&vg$1(a),a.flags|=1,Xi$1(o,a,d,tt),a.child)}function $i$1(o,a,c,d,tt){if(o===null){var nt=c.type;return typeof nt=="function"&&!aj(nt)&&nt.defaultProps===void 0&&c.compare===null&&c.defaultProps===void 0?(a.tag=15,a.type=nt,bj(o,a,nt,d,tt)):(o=Rg(c.type,null,d,a,a.mode,tt),o.ref=a.ref,o.return=a,a.child=o)}if(nt=o.child,!(o.lanes&tt)){var $a=nt.memoizedProps;if(c=c.compare,c=c!==null?c:Ie$2,c($a,d)&&o.ref===a.ref)return Zi$1(o,a,tt)}return a.flags|=1,o=Pg(nt,d),o.ref=a.ref,o.return=a,a.child=o}function bj(o,a,c,d,tt){if(o!==null){var nt=o.memoizedProps;if(Ie$2(nt,d)&&o.ref===a.ref)if(dh$2=!1,a.pendingProps=d=nt,(o.lanes&tt)!==0)o.flags&131072&&(dh$2=!0);else return a.lanes=o.lanes,Zi$1(o,a,tt)}return cj(o,a,c,d,tt)}function dj(o,a,c){var d=a.pendingProps,tt=d.children,nt=o!==null?o.memoizedState:null;if(d.mode==="hidden")if(!(a.mode&1))a.memoizedState={baseLanes:0,cachePool:null,transitions:null},G$4(ej,fj),fj|=c;else{if(!(c&1073741824))return o=nt!==null?nt.baseLanes|c:c,a.lanes=a.childLanes=1073741824,a.memoizedState={baseLanes:o,cachePool:null,transitions:null},a.updateQueue=null,G$4(ej,fj),fj|=o,null;a.memoizedState={baseLanes:0,cachePool:null,transitions:null},d=nt!==null?nt.baseLanes:c,G$4(ej,fj),fj|=d}else nt!==null?(d=nt.baseLanes|c,a.memoizedState=null):d=c,G$4(ej,fj),fj|=d;return Xi$1(o,a,tt,c),a.child}function gj(o,a){var c=a.ref;(o===null&&c!==null||o!==null&&o.ref!==c)&&(a.flags|=512,a.flags|=2097152)}function cj(o,a,c,d,tt){var nt=Zf$1(c)?Xf$1:H$4.current;return nt=Yf$1(a,nt),ch$2(a,tt),c=Nh$1(o,a,c,d,nt,tt),d=Sh$1(),o!==null&&!dh$2?(a.updateQueue=o.updateQueue,a.flags&=-2053,o.lanes&=~tt,Zi$1(o,a,tt)):(I$2&&d&&vg$1(a),a.flags|=1,Xi$1(o,a,c,tt),a.child)}function hj(o,a,c,d,tt){if(Zf$1(c)){var nt=!0;cg$1(a)}else nt=!1;if(ch$2(a,tt),a.stateNode===null)ij(o,a),Gi$1(a,c,d),Ii$1(a,c,d,tt),d=!0;else if(o===null){var $a=a.stateNode,Ws=a.memoizedProps;$a.props=Ws;var gu=$a.context,Su=c.contextType;typeof Su=="object"&&Su!==null?Su=eh$1(Su):(Su=Zf$1(c)?Xf$1:H$4.current,Su=Yf$1(a,Su));var $u=c.getDerivedStateFromProps,Iu=typeof $u=="function"||typeof $a.getSnapshotBeforeUpdate=="function";Iu||typeof $a.UNSAFE_componentWillReceiveProps!="function"&&typeof $a.componentWillReceiveProps!="function"||(Ws!==d||gu!==Su)&&Hi$1(a,$a,d,Su),jh$1=!1;var Xu=a.memoizedState;$a.state=Xu,qh$1(a,d,$a,tt),gu=a.memoizedState,Ws!==d||Xu!==gu||Wf$1.current||jh$1?(typeof $u=="function"&&(Di$1(a,c,$u,d),gu=a.memoizedState),(Ws=jh$1||Fi$1(a,c,Ws,d,Xu,gu,Su))?(Iu||typeof $a.UNSAFE_componentWillMount!="function"&&typeof $a.componentWillMount!="function"||(typeof $a.componentWillMount=="function"&&$a.componentWillMount(),typeof $a.UNSAFE_componentWillMount=="function"&&$a.UNSAFE_componentWillMount()),typeof $a.componentDidMount=="function"&&(a.flags|=4194308)):(typeof $a.componentDidMount=="function"&&(a.flags|=4194308),a.memoizedProps=d,a.memoizedState=gu),$a.props=d,$a.state=gu,$a.context=Su,d=Ws):(typeof $a.componentDidMount=="function"&&(a.flags|=4194308),d=!1)}else{$a=a.stateNode,lh$1(o,a),Ws=a.memoizedProps,Su=a.type===a.elementType?Ws:Ci$1(a.type,Ws),$a.props=Su,Iu=a.pendingProps,Xu=$a.context,gu=c.contextType,typeof gu=="object"&&gu!==null?gu=eh$1(gu):(gu=Zf$1(c)?Xf$1:H$4.current,gu=Yf$1(a,gu));var r0=c.getDerivedStateFromProps;($u=typeof r0=="function"||typeof $a.getSnapshotBeforeUpdate=="function")||typeof $a.UNSAFE_componentWillReceiveProps!="function"&&typeof $a.componentWillReceiveProps!="function"||(Ws!==Iu||Xu!==gu)&&Hi$1(a,$a,d,gu),jh$1=!1,Xu=a.memoizedState,$a.state=Xu,qh$1(a,d,$a,tt);var p0=a.memoizedState;Ws!==Iu||Xu!==p0||Wf$1.current||jh$1?(typeof r0=="function"&&(Di$1(a,c,r0,d),p0=a.memoizedState),(Su=jh$1||Fi$1(a,c,Su,d,Xu,p0,gu)||!1)?($u||typeof $a.UNSAFE_componentWillUpdate!="function"&&typeof $a.componentWillUpdate!="function"||(typeof $a.componentWillUpdate=="function"&&$a.componentWillUpdate(d,p0,gu),typeof $a.UNSAFE_componentWillUpdate=="function"&&$a.UNSAFE_componentWillUpdate(d,p0,gu)),typeof $a.componentDidUpdate=="function"&&(a.flags|=4),typeof $a.getSnapshotBeforeUpdate=="function"&&(a.flags|=1024)):(typeof $a.componentDidUpdate!="function"||Ws===o.memoizedProps&&Xu===o.memoizedState||(a.flags|=4),typeof $a.getSnapshotBeforeUpdate!="function"||Ws===o.memoizedProps&&Xu===o.memoizedState||(a.flags|=1024),a.memoizedProps=d,a.memoizedState=p0),$a.props=d,$a.state=p0,$a.context=gu,d=Su):(typeof $a.componentDidUpdate!="function"||Ws===o.memoizedProps&&Xu===o.memoizedState||(a.flags|=4),typeof $a.getSnapshotBeforeUpdate!="function"||Ws===o.memoizedProps&&Xu===o.memoizedState||(a.flags|=1024),d=!1)}return jj(o,a,c,d,nt,tt)}function jj(o,a,c,d,tt,nt){gj(o,a);var $a=(a.flags&128)!==0;if(!d&&!$a)return tt&&dg$1(a,c,!1),Zi$1(o,a,nt);d=a.stateNode,Wi$1.current=a;var Ws=$a&&typeof c.getDerivedStateFromError!="function"?null:d.render();return a.flags|=1,o!==null&&$a?(a.child=Ug$1(a,o.child,null,nt),a.child=Ug$1(a,null,Ws,nt)):Xi$1(o,a,Ws,nt),a.memoizedState=d.state,tt&&dg$1(a,c,!0),a.child}function kj(o){var a=o.stateNode;a.pendingContext?ag$1(o,a.pendingContext,a.pendingContext!==a.context):a.context&&ag$1(o,a.context,!1),yh$1(o,a.containerInfo)}function lj(o,a,c,d,tt){return Ig$1(),Jg(tt),a.flags|=256,Xi$1(o,a,c,d),a.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(o){return{baseLanes:o,cachePool:null,transitions:null}}function oj(o,a,c){var d=a.pendingProps,tt=L$4.current,nt=!1,$a=(a.flags&128)!==0,Ws;if((Ws=$a)||(Ws=o!==null&&o.memoizedState===null?!1:(tt&2)!==0),Ws?(nt=!0,a.flags&=-129):(o===null||o.memoizedState!==null)&&(tt|=1),G$4(L$4,tt&1),o===null)return Eg(a),o=a.memoizedState,o!==null&&(o=o.dehydrated,o!==null)?(a.mode&1?o.data==="$!"?a.lanes=8:a.lanes=1073741824:a.lanes=1,null):($a=d.children,o=d.fallback,nt?(d=a.mode,nt=a.child,$a={mode:"hidden",children:$a},!(d&1)&&nt!==null?(nt.childLanes=0,nt.pendingProps=$a):nt=pj($a,d,0,null),o=Tg$1(o,d,c,null),nt.return=a,o.return=a,nt.sibling=o,a.child=nt,a.child.memoizedState=nj(c),a.memoizedState=mj,o):qj(a,$a));if(tt=o.memoizedState,tt!==null&&(Ws=tt.dehydrated,Ws!==null))return rj(o,a,$a,d,Ws,tt,c);if(nt){nt=d.fallback,$a=a.mode,tt=o.child,Ws=tt.sibling;var gu={mode:"hidden",children:d.children};return!($a&1)&&a.child!==tt?(d=a.child,d.childLanes=0,d.pendingProps=gu,a.deletions=null):(d=Pg(tt,gu),d.subtreeFlags=tt.subtreeFlags&14680064),Ws!==null?nt=Pg(Ws,nt):(nt=Tg$1(nt,$a,c,null),nt.flags|=2),nt.return=a,d.return=a,d.sibling=nt,a.child=d,d=nt,nt=a.child,$a=o.child.memoizedState,$a=$a===null?nj(c):{baseLanes:$a.baseLanes|c,cachePool:null,transitions:$a.transitions},nt.memoizedState=$a,nt.childLanes=o.childLanes&~c,a.memoizedState=mj,d}return nt=o.child,o=nt.sibling,d=Pg(nt,{mode:"visible",children:d.children}),!(a.mode&1)&&(d.lanes=c),d.return=a,d.sibling=null,o!==null&&(c=a.deletions,c===null?(a.deletions=[o],a.flags|=16):c.push(o)),a.child=d,a.memoizedState=null,d}function qj(o,a){return a=pj({mode:"visible",children:a},o.mode,0,null),a.return=o,o.child=a}function sj(o,a,c,d){return d!==null&&Jg(d),Ug$1(a,o.child,null,c),o=qj(a,a.pendingProps.children),o.flags|=2,a.memoizedState=null,o}function rj(o,a,c,d,tt,nt,$a){if(c)return a.flags&256?(a.flags&=-257,d=Ki$1(Error(p(422))),sj(o,a,$a,d)):a.memoizedState!==null?(a.child=o.child,a.flags|=128,null):(nt=d.fallback,tt=a.mode,d=pj({mode:"visible",children:d.children},tt,0,null),nt=Tg$1(nt,tt,$a,null),nt.flags|=2,d.return=a,nt.return=a,d.sibling=nt,a.child=d,a.mode&1&&Ug$1(a,o.child,null,$a),a.child.memoizedState=nj($a),a.memoizedState=mj,nt);if(!(a.mode&1))return sj(o,a,$a,null);if(tt.data==="$!"){if(d=tt.nextSibling&&tt.nextSibling.dataset,d)var Ws=d.dgst;return d=Ws,nt=Error(p(419)),d=Ki$1(nt,d,void 0),sj(o,a,$a,d)}if(Ws=($a&o.childLanes)!==0,dh$2||Ws){if(d=Q$3,d!==null){switch($a&-$a){case 4:tt=2;break;case 16:tt=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:tt=32;break;case 536870912:tt=268435456;break;default:tt=0}tt=tt&(d.suspendedLanes|$a)?0:tt,tt!==0&&tt!==nt.retryLane&&(nt.retryLane=tt,ih$1(o,tt),gi$1(d,o,tt,-1))}return tj(),d=Ki$1(Error(p(421))),sj(o,a,$a,d)}return tt.data==="$?"?(a.flags|=128,a.child=o.child,a=uj.bind(null,o),tt._reactRetry=a,null):(o=nt.treeContext,yg$1=Lf$1(tt.nextSibling),xg=a,I$2=!0,zg$1=null,o!==null&&(og$1[pg$1++]=rg,og$1[pg$1++]=sg$1,og$1[pg$1++]=qg$1,rg=o.id,sg$1=o.overflow,qg$1=a),a=qj(a,d.children),a.flags|=4096,a)}function vj(o,a,c){o.lanes|=a;var d=o.alternate;d!==null&&(d.lanes|=a),bh$1(o.return,a,c)}function wj(o,a,c,d,tt){var nt=o.memoizedState;nt===null?o.memoizedState={isBackwards:a,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:tt}:(nt.isBackwards=a,nt.rendering=null,nt.renderingStartTime=0,nt.last=d,nt.tail=c,nt.tailMode=tt)}function xj(o,a,c){var d=a.pendingProps,tt=d.revealOrder,nt=d.tail;if(Xi$1(o,a,d.children,c),d=L$4.current,d&2)d=d&1|2,a.flags|=128;else{if(o!==null&&o.flags&128)e:for(o=a.child;o!==null;){if(o.tag===13)o.memoizedState!==null&&vj(o,c,a);else if(o.tag===19)vj(o,c,a);else if(o.child!==null){o.child.return=o,o=o.child;continue}if(o===a)break e;for(;o.sibling===null;){if(o.return===null||o.return===a)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}d&=1}if(G$4(L$4,d),!(a.mode&1))a.memoizedState=null;else switch(tt){case"forwards":for(c=a.child,tt=null;c!==null;)o=c.alternate,o!==null&&Ch$2(o)===null&&(tt=c),c=c.sibling;c=tt,c===null?(tt=a.child,a.child=null):(tt=c.sibling,c.sibling=null),wj(a,!1,tt,c,nt);break;case"backwards":for(c=null,tt=a.child,a.child=null;tt!==null;){if(o=tt.alternate,o!==null&&Ch$2(o)===null){a.child=tt;break}o=tt.sibling,tt.sibling=c,c=tt,tt=o}wj(a,!0,c,null,nt);break;case"together":wj(a,!1,null,null,void 0);break;default:a.memoizedState=null}return a.child}function ij(o,a){!(a.mode&1)&&o!==null&&(o.alternate=null,a.alternate=null,a.flags|=2)}function Zi$1(o,a,c){if(o!==null&&(a.dependencies=o.dependencies),rh$2|=a.lanes,!(c&a.childLanes))return null;if(o!==null&&a.child!==o.child)throw Error(p(153));if(a.child!==null){for(o=a.child,c=Pg(o,o.pendingProps),a.child=c,c.return=a;o.sibling!==null;)o=o.sibling,c=c.sibling=Pg(o,o.pendingProps),c.return=a;c.sibling=null}return a.child}function yj(o,a,c){switch(a.tag){case 3:kj(a),Ig$1();break;case 5:Ah$1(a);break;case 1:Zf$1(a.type)&&cg$1(a);break;case 4:yh$1(a,a.stateNode.containerInfo);break;case 10:var d=a.type._context,tt=a.memoizedProps.value;G$4(Wg,d._currentValue),d._currentValue=tt;break;case 13:if(d=a.memoizedState,d!==null)return d.dehydrated!==null?(G$4(L$4,L$4.current&1),a.flags|=128,null):c&a.child.childLanes?oj(o,a,c):(G$4(L$4,L$4.current&1),o=Zi$1(o,a,c),o!==null?o.sibling:null);G$4(L$4,L$4.current&1);break;case 19:if(d=(c&a.childLanes)!==0,o.flags&128){if(d)return xj(o,a,c);a.flags|=128}if(tt=a.memoizedState,tt!==null&&(tt.rendering=null,tt.tail=null,tt.lastEffect=null),G$4(L$4,L$4.current),d)break;return null;case 22:case 23:return a.lanes=0,dj(o,a,c)}return Zi$1(o,a,c)}var zj,Aj,Bj,Cj;zj=function(o,a){for(var c=a.child;c!==null;){if(c.tag===5||c.tag===6)o.appendChild(c.stateNode);else if(c.tag!==4&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===a)break;for(;c.sibling===null;){if(c.return===null||c.return===a)return;c=c.return}c.sibling.return=c.return,c=c.sibling}};Aj=function(){};Bj=function(o,a,c,d){var tt=o.memoizedProps;if(tt!==d){o=a.stateNode,xh$1(uh$1.current);var nt=null;switch(c){case"input":tt=Ya$1(o,tt),d=Ya$1(o,d),nt=[];break;case"select":tt=A$3({},tt,{value:void 0}),d=A$3({},d,{value:void 0}),nt=[];break;case"textarea":tt=gb(o,tt),d=gb(o,d),nt=[];break;default:typeof tt.onClick!="function"&&typeof d.onClick=="function"&&(o.onclick=Bf$1)}ub(c,d);var $a;c=null;for(Su in tt)if(!d.hasOwnProperty(Su)&&tt.hasOwnProperty(Su)&&tt[Su]!=null)if(Su==="style"){var Ws=tt[Su];for($a in Ws)Ws.hasOwnProperty($a)&&(c||(c={}),c[$a]="")}else Su!=="dangerouslySetInnerHTML"&&Su!=="children"&&Su!=="suppressContentEditableWarning"&&Su!=="suppressHydrationWarning"&&Su!=="autoFocus"&&(ea$1.hasOwnProperty(Su)?nt||(nt=[]):(nt=nt||[]).push(Su,null));for(Su in d){var gu=d[Su];if(Ws=tt!=null?tt[Su]:void 0,d.hasOwnProperty(Su)&&gu!==Ws&&(gu!=null||Ws!=null))if(Su==="style")if(Ws){for($a in Ws)!Ws.hasOwnProperty($a)||gu&&gu.hasOwnProperty($a)||(c||(c={}),c[$a]="");for($a in gu)gu.hasOwnProperty($a)&&Ws[$a]!==gu[$a]&&(c||(c={}),c[$a]=gu[$a])}else c||(nt||(nt=[]),nt.push(Su,c)),c=gu;else Su==="dangerouslySetInnerHTML"?(gu=gu?gu.__html:void 0,Ws=Ws?Ws.__html:void 0,gu!=null&&Ws!==gu&&(nt=nt||[]).push(Su,gu)):Su==="children"?typeof gu!="string"&&typeof gu!="number"||(nt=nt||[]).push(Su,""+gu):Su!=="suppressContentEditableWarning"&&Su!=="suppressHydrationWarning"&&(ea$1.hasOwnProperty(Su)?(gu!=null&&Su==="onScroll"&&D$3("scroll",o),nt||Ws===gu||(nt=[])):(nt=nt||[]).push(Su,gu))}c&&(nt=nt||[]).push("style",c);var Su=nt;(a.updateQueue=Su)&&(a.flags|=4)}};Cj=function(o,a,c,d){c!==d&&(a.flags|=4)};function Dj(o,a){if(!I$2)switch(o.tailMode){case"hidden":a=o.tail;for(var c=null;a!==null;)a.alternate!==null&&(c=a),a=a.sibling;c===null?o.tail=null:c.sibling=null;break;case"collapsed":c=o.tail;for(var d=null;c!==null;)c.alternate!==null&&(d=c),c=c.sibling;d===null?a||o.tail===null?o.tail=null:o.tail.sibling=null:d.sibling=null}}function S$3(o){var a=o.alternate!==null&&o.alternate.child===o.child,c=0,d=0;if(a)for(var tt=o.child;tt!==null;)c|=tt.lanes|tt.childLanes,d|=tt.subtreeFlags&14680064,d|=tt.flags&14680064,tt.return=o,tt=tt.sibling;else for(tt=o.child;tt!==null;)c|=tt.lanes|tt.childLanes,d|=tt.subtreeFlags,d|=tt.flags,tt.return=o,tt=tt.sibling;return o.subtreeFlags|=d,o.childLanes=c,a}function Ej(o,a,c){var d=a.pendingProps;switch(wg(a),a.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S$3(a),null;case 1:return Zf$1(a.type)&&$f$1(),S$3(a),null;case 3:return d=a.stateNode,zh$2(),E$2(Wf$1),E$2(H$4),Eh$1(),d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null),(o===null||o.child===null)&&(Gg(a)?a.flags|=4:o===null||o.memoizedState.isDehydrated&&!(a.flags&256)||(a.flags|=1024,zg$1!==null&&(Fj(zg$1),zg$1=null))),Aj(o,a),S$3(a),null;case 5:Bh$1(a);var tt=xh$1(wh$1.current);if(c=a.type,o!==null&&a.stateNode!=null)Bj(o,a,c,d,tt),o.ref!==a.ref&&(a.flags|=512,a.flags|=2097152);else{if(!d){if(a.stateNode===null)throw Error(p(166));return S$3(a),null}if(o=xh$1(uh$1.current),Gg(a)){d=a.stateNode,c=a.type;var nt=a.memoizedProps;switch(d[Of$1]=a,d[Pf$1]=nt,o=(a.mode&1)!==0,c){case"dialog":D$3("cancel",d),D$3("close",d);break;case"iframe":case"object":case"embed":D$3("load",d);break;case"video":case"audio":for(tt=0;tt<\/script>",o=o.removeChild(o.firstChild)):typeof d.is=="string"?o=$a.createElement(c,{is:d.is}):(o=$a.createElement(c),c==="select"&&($a=o,d.multiple?$a.multiple=!0:d.size&&($a.size=d.size))):o=$a.createElementNS(o,c),o[Of$1]=a,o[Pf$1]=d,zj(o,a,!1,!1),a.stateNode=o;e:{switch($a=vb(c,d),c){case"dialog":D$3("cancel",o),D$3("close",o),tt=d;break;case"iframe":case"object":case"embed":D$3("load",o),tt=d;break;case"video":case"audio":for(tt=0;ttGj&&(a.flags|=128,d=!0,Dj(nt,!1),a.lanes=4194304)}else{if(!d)if(o=Ch$2($a),o!==null){if(a.flags|=128,d=!0,c=o.updateQueue,c!==null&&(a.updateQueue=c,a.flags|=4),Dj(nt,!0),nt.tail===null&&nt.tailMode==="hidden"&&!$a.alternate&&!I$2)return S$3(a),null}else 2*B$3()-nt.renderingStartTime>Gj&&c!==1073741824&&(a.flags|=128,d=!0,Dj(nt,!1),a.lanes=4194304);nt.isBackwards?($a.sibling=a.child,a.child=$a):(c=nt.last,c!==null?c.sibling=$a:a.child=$a,nt.last=$a)}return nt.tail!==null?(a=nt.tail,nt.rendering=a,nt.tail=a.sibling,nt.renderingStartTime=B$3(),a.sibling=null,c=L$4.current,G$4(L$4,d?c&1|2:c&1),a):(S$3(a),null);case 22:case 23:return Hj(),d=a.memoizedState!==null,o!==null&&o.memoizedState!==null!==d&&(a.flags|=8192),d&&a.mode&1?fj&1073741824&&(S$3(a),a.subtreeFlags&6&&(a.flags|=8192)):S$3(a),null;case 24:return null;case 25:return null}throw Error(p(156,a.tag))}function Ij(o,a){switch(wg(a),a.tag){case 1:return Zf$1(a.type)&&$f$1(),o=a.flags,o&65536?(a.flags=o&-65537|128,a):null;case 3:return zh$2(),E$2(Wf$1),E$2(H$4),Eh$1(),o=a.flags,o&65536&&!(o&128)?(a.flags=o&-65537|128,a):null;case 5:return Bh$1(a),null;case 13:if(E$2(L$4),o=a.memoizedState,o!==null&&o.dehydrated!==null){if(a.alternate===null)throw Error(p(340));Ig$1()}return o=a.flags,o&65536?(a.flags=o&-65537|128,a):null;case 19:return E$2(L$4),null;case 4:return zh$2(),null;case 10:return ah$1(a.type._context),null;case 22:case 23:return Hj(),null;case 24:return null;default:return null}}var Jj=!1,U$2=!1,Kj=typeof WeakSet=="function"?WeakSet:Set,V$3=null;function Lj(o,a){var c=o.ref;if(c!==null)if(typeof c=="function")try{c(null)}catch(d){W$8(o,a,d)}else c.current=null}function Mj(o,a,c){try{c()}catch(d){W$8(o,a,d)}}var Nj=!1;function Oj(o,a){if(Cf$1=dd$1,o=Me$2(),Ne$2(o)){if("selectionStart"in o)var c={start:o.selectionStart,end:o.selectionEnd};else e:{c=(c=o.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&d.rangeCount!==0){c=d.anchorNode;var tt=d.anchorOffset,nt=d.focusNode;d=d.focusOffset;try{c.nodeType,nt.nodeType}catch{c=null;break e}var $a=0,Ws=-1,gu=-1,Su=0,$u=0,Iu=o,Xu=null;t:for(;;){for(var r0;Iu!==c||tt!==0&&Iu.nodeType!==3||(Ws=$a+tt),Iu!==nt||d!==0&&Iu.nodeType!==3||(gu=$a+d),Iu.nodeType===3&&($a+=Iu.nodeValue.length),(r0=Iu.firstChild)!==null;)Xu=Iu,Iu=r0;for(;;){if(Iu===o)break t;if(Xu===c&&++Su===tt&&(Ws=$a),Xu===nt&&++$u===d&&(gu=$a),(r0=Iu.nextSibling)!==null)break;Iu=Xu,Xu=Iu.parentNode}Iu=r0}c=Ws===-1||gu===-1?null:{start:Ws,end:gu}}else c=null}c=c||{start:0,end:0}}else c=null;for(Df$1={focusedElem:o,selectionRange:c},dd$1=!1,V$3=a;V$3!==null;)if(a=V$3,o=a.child,(a.subtreeFlags&1028)!==0&&o!==null)o.return=a,V$3=o;else for(;V$3!==null;){a=V$3;try{var p0=a.alternate;if(a.flags&1024)switch(a.tag){case 0:case 11:case 15:break;case 1:if(p0!==null){var y0=p0.memoizedProps,A0=p0.memoizedState,$0=a.stateNode,O0=$0.getSnapshotBeforeUpdate(a.elementType===a.type?y0:Ci$1(a.type,y0),A0);$0.__reactInternalSnapshotBeforeUpdate=O0}break;case 3:var L0=a.stateNode.containerInfo;L0.nodeType===1?L0.textContent="":L0.nodeType===9&&L0.documentElement&&L0.removeChild(L0.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163))}}catch(V0){W$8(a,a.return,V0)}if(o=a.sibling,o!==null){o.return=a.return,V$3=o;break}V$3=a.return}return p0=Nj,Nj=!1,p0}function Pj(o,a,c){var d=a.updateQueue;if(d=d!==null?d.lastEffect:null,d!==null){var tt=d=d.next;do{if((tt.tag&o)===o){var nt=tt.destroy;tt.destroy=void 0,nt!==void 0&&Mj(a,c,nt)}tt=tt.next}while(tt!==d)}}function Qj(o,a){if(a=a.updateQueue,a=a!==null?a.lastEffect:null,a!==null){var c=a=a.next;do{if((c.tag&o)===o){var d=c.create;c.destroy=d()}c=c.next}while(c!==a)}}function Rj(o){var a=o.ref;if(a!==null){var c=o.stateNode;switch(o.tag){case 5:o=c;break;default:o=c}typeof a=="function"?a(o):a.current=o}}function Sj(o){var a=o.alternate;a!==null&&(o.alternate=null,Sj(a)),o.child=null,o.deletions=null,o.sibling=null,o.tag===5&&(a=o.stateNode,a!==null&&(delete a[Of$1],delete a[Pf$1],delete a[of$1],delete a[Qf$1],delete a[Rf$1])),o.stateNode=null,o.return=null,o.dependencies=null,o.memoizedProps=null,o.memoizedState=null,o.pendingProps=null,o.stateNode=null,o.updateQueue=null}function Tj(o){return o.tag===5||o.tag===3||o.tag===4}function Uj(o){e:for(;;){for(;o.sibling===null;){if(o.return===null||Tj(o.return))return null;o=o.return}for(o.sibling.return=o.return,o=o.sibling;o.tag!==5&&o.tag!==6&&o.tag!==18;){if(o.flags&2||o.child===null||o.tag===4)continue e;o.child.return=o,o=o.child}if(!(o.flags&2))return o.stateNode}}function Vj(o,a,c){var d=o.tag;if(d===5||d===6)o=o.stateNode,a?c.nodeType===8?c.parentNode.insertBefore(o,a):c.insertBefore(o,a):(c.nodeType===8?(a=c.parentNode,a.insertBefore(o,c)):(a=c,a.appendChild(o)),c=c._reactRootContainer,c!=null||a.onclick!==null||(a.onclick=Bf$1));else if(d!==4&&(o=o.child,o!==null))for(Vj(o,a,c),o=o.sibling;o!==null;)Vj(o,a,c),o=o.sibling}function Wj(o,a,c){var d=o.tag;if(d===5||d===6)o=o.stateNode,a?c.insertBefore(o,a):c.appendChild(o);else if(d!==4&&(o=o.child,o!==null))for(Wj(o,a,c),o=o.sibling;o!==null;)Wj(o,a,c),o=o.sibling}var X$2=null,Xj=!1;function Yj(o,a,c){for(c=c.child;c!==null;)Zj(o,a,c),c=c.sibling}function Zj(o,a,c){if(lc$1&&typeof lc$1.onCommitFiberUnmount=="function")try{lc$1.onCommitFiberUnmount(kc,c)}catch{}switch(c.tag){case 5:U$2||Lj(c,a);case 6:var d=X$2,tt=Xj;X$2=null,Yj(o,a,c),X$2=d,Xj=tt,X$2!==null&&(Xj?(o=X$2,c=c.stateNode,o.nodeType===8?o.parentNode.removeChild(c):o.removeChild(c)):X$2.removeChild(c.stateNode));break;case 18:X$2!==null&&(Xj?(o=X$2,c=c.stateNode,o.nodeType===8?Kf$1(o.parentNode,c):o.nodeType===1&&Kf$1(o,c),bd$1(o)):Kf$1(X$2,c.stateNode));break;case 4:d=X$2,tt=Xj,X$2=c.stateNode.containerInfo,Xj=!0,Yj(o,a,c),X$2=d,Xj=tt;break;case 0:case 11:case 14:case 15:if(!U$2&&(d=c.updateQueue,d!==null&&(d=d.lastEffect,d!==null))){tt=d=d.next;do{var nt=tt,$a=nt.destroy;nt=nt.tag,$a!==void 0&&(nt&2||nt&4)&&Mj(c,a,$a),tt=tt.next}while(tt!==d)}Yj(o,a,c);break;case 1:if(!U$2&&(Lj(c,a),d=c.stateNode,typeof d.componentWillUnmount=="function"))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(Ws){W$8(c,a,Ws)}Yj(o,a,c);break;case 21:Yj(o,a,c);break;case 22:c.mode&1?(U$2=(d=U$2)||c.memoizedState!==null,Yj(o,a,c),U$2=d):Yj(o,a,c);break;default:Yj(o,a,c)}}function ak(o){var a=o.updateQueue;if(a!==null){o.updateQueue=null;var c=o.stateNode;c===null&&(c=o.stateNode=new Kj),a.forEach(function(d){var tt=bk.bind(null,o,d);c.has(d)||(c.add(d),d.then(tt,tt))})}}function ck(o,a){var c=a.deletions;if(c!==null)for(var d=0;dtt&&(tt=$a),d&=~nt}if(d=tt,d=B$3()-d,d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3e3>d?3e3:4320>d?4320:1960*lk(d/1960))-d,10o?16:o,wk===null)var d=!1;else{if(o=wk,wk=null,xk=0,K$7&6)throw Error(p(331));var tt=K$7;for(K$7|=4,V$3=o.current;V$3!==null;){var nt=V$3,$a=nt.child;if(V$3.flags&16){var Ws=nt.deletions;if(Ws!==null){for(var gu=0;guB$3()-fk?Kk(o,0):rk|=c),Dk(o,a)}function Yk(o,a){a===0&&(o.mode&1?(a=sc,sc<<=1,!(sc&130023424)&&(sc=4194304)):a=1);var c=R$4();o=ih$1(o,a),o!==null&&(Ac(o,a,c),Dk(o,c))}function uj(o){var a=o.memoizedState,c=0;a!==null&&(c=a.retryLane),Yk(o,c)}function bk(o,a){var c=0;switch(o.tag){case 13:var d=o.stateNode,tt=o.memoizedState;tt!==null&&(c=tt.retryLane);break;case 19:d=o.stateNode;break;default:throw Error(p(314))}d!==null&&d.delete(a),Yk(o,c)}var Vk;Vk=function(o,a,c){if(o!==null)if(o.memoizedProps!==a.pendingProps||Wf$1.current)dh$2=!0;else{if(!(o.lanes&c)&&!(a.flags&128))return dh$2=!1,yj(o,a,c);dh$2=!!(o.flags&131072)}else dh$2=!1,I$2&&a.flags&1048576&&ug$1(a,ng,a.index);switch(a.lanes=0,a.tag){case 2:var d=a.type;ij(o,a),o=a.pendingProps;var tt=Yf$1(a,H$4.current);ch$2(a,c),tt=Nh$1(null,a,d,o,tt,c);var nt=Sh$1();return a.flags|=1,typeof tt=="object"&&tt!==null&&typeof tt.render=="function"&&tt.$$typeof===void 0?(a.tag=1,a.memoizedState=null,a.updateQueue=null,Zf$1(d)?(nt=!0,cg$1(a)):nt=!1,a.memoizedState=tt.state!==null&&tt.state!==void 0?tt.state:null,kh$1(a),tt.updater=Ei$1,a.stateNode=tt,tt._reactInternals=a,Ii$1(a,d,o,c),a=jj(null,a,d,!0,nt,c)):(a.tag=0,I$2&&nt&&vg$1(a),Xi$1(null,a,tt,c),a=a.child),a;case 16:d=a.elementType;e:{switch(ij(o,a),o=a.pendingProps,tt=d._init,d=tt(d._payload),a.type=d,tt=a.tag=Zk(d),o=Ci$1(d,o),tt){case 0:a=cj(null,a,d,o,c);break e;case 1:a=hj(null,a,d,o,c);break e;case 11:a=Yi$1(null,a,d,o,c);break e;case 14:a=$i$1(null,a,d,Ci$1(d.type,o),c);break e}throw Error(p(306,d,""))}return a;case 0:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),cj(o,a,d,tt,c);case 1:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),hj(o,a,d,tt,c);case 3:e:{if(kj(a),o===null)throw Error(p(387));d=a.pendingProps,nt=a.memoizedState,tt=nt.element,lh$1(o,a),qh$1(a,d,null,c);var $a=a.memoizedState;if(d=$a.element,nt.isDehydrated)if(nt={element:d,isDehydrated:!1,cache:$a.cache,pendingSuspenseBoundaries:$a.pendingSuspenseBoundaries,transitions:$a.transitions},a.updateQueue.baseState=nt,a.memoizedState=nt,a.flags&256){tt=Ji$1(Error(p(423)),a),a=lj(o,a,d,c,tt);break e}else if(d!==tt){tt=Ji$1(Error(p(424)),a),a=lj(o,a,d,c,tt);break e}else for(yg$1=Lf$1(a.stateNode.containerInfo.firstChild),xg=a,I$2=!0,zg$1=null,c=Vg$1(a,null,d,c),a.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{if(Ig$1(),d===tt){a=Zi$1(o,a,c);break e}Xi$1(o,a,d,c)}a=a.child}return a;case 5:return Ah$1(a),o===null&&Eg(a),d=a.type,tt=a.pendingProps,nt=o!==null?o.memoizedProps:null,$a=tt.children,Ef$1(d,tt)?$a=null:nt!==null&&Ef$1(d,nt)&&(a.flags|=32),gj(o,a),Xi$1(o,a,$a,c),a.child;case 6:return o===null&&Eg(a),null;case 13:return oj(o,a,c);case 4:return yh$1(a,a.stateNode.containerInfo),d=a.pendingProps,o===null?a.child=Ug$1(a,null,d,c):Xi$1(o,a,d,c),a.child;case 11:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),Yi$1(o,a,d,tt,c);case 7:return Xi$1(o,a,a.pendingProps,c),a.child;case 8:return Xi$1(o,a,a.pendingProps.children,c),a.child;case 12:return Xi$1(o,a,a.pendingProps.children,c),a.child;case 10:e:{if(d=a.type._context,tt=a.pendingProps,nt=a.memoizedProps,$a=tt.value,G$4(Wg,d._currentValue),d._currentValue=$a,nt!==null)if(He$2(nt.value,$a)){if(nt.children===tt.children&&!Wf$1.current){a=Zi$1(o,a,c);break e}}else for(nt=a.child,nt!==null&&(nt.return=a);nt!==null;){var Ws=nt.dependencies;if(Ws!==null){$a=nt.child;for(var gu=Ws.firstContext;gu!==null;){if(gu.context===d){if(nt.tag===1){gu=mh$1(-1,c&-c),gu.tag=2;var Su=nt.updateQueue;if(Su!==null){Su=Su.shared;var $u=Su.pending;$u===null?gu.next=gu:(gu.next=$u.next,$u.next=gu),Su.pending=gu}}nt.lanes|=c,gu=nt.alternate,gu!==null&&(gu.lanes|=c),bh$1(nt.return,c,a),Ws.lanes|=c;break}gu=gu.next}}else if(nt.tag===10)$a=nt.type===a.type?null:nt.child;else if(nt.tag===18){if($a=nt.return,$a===null)throw Error(p(341));$a.lanes|=c,Ws=$a.alternate,Ws!==null&&(Ws.lanes|=c),bh$1($a,c,a),$a=nt.sibling}else $a=nt.child;if($a!==null)$a.return=nt;else for($a=nt;$a!==null;){if($a===a){$a=null;break}if(nt=$a.sibling,nt!==null){nt.return=$a.return,$a=nt;break}$a=$a.return}nt=$a}Xi$1(o,a,tt.children,c),a=a.child}return a;case 9:return tt=a.type,d=a.pendingProps.children,ch$2(a,c),tt=eh$1(tt),d=d(tt),a.flags|=1,Xi$1(o,a,d,c),a.child;case 14:return d=a.type,tt=Ci$1(d,a.pendingProps),tt=Ci$1(d.type,tt),$i$1(o,a,d,tt,c);case 15:return bj(o,a,a.type,a.pendingProps,c);case 17:return d=a.type,tt=a.pendingProps,tt=a.elementType===d?tt:Ci$1(d,tt),ij(o,a),a.tag=1,Zf$1(d)?(o=!0,cg$1(a)):o=!1,ch$2(a,c),Gi$1(a,d,tt),Ii$1(a,d,tt,c),jj(null,a,d,!0,o,c);case 19:return xj(o,a,c);case 22:return dj(o,a,c)}throw Error(p(156,a.tag))};function Fk(o,a){return ac(o,a)}function $k(o,a,c,d){this.tag=o,this.key=c,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=a,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=d,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bg(o,a,c,d){return new $k(o,a,c,d)}function aj(o){return o=o.prototype,!(!o||!o.isReactComponent)}function Zk(o){if(typeof o=="function")return aj(o)?1:0;if(o!=null){if(o=o.$$typeof,o===Da$1)return 11;if(o===Ga$1)return 14}return 2}function Pg(o,a){var c=o.alternate;return c===null?(c=Bg(o.tag,a,o.key,o.mode),c.elementType=o.elementType,c.type=o.type,c.stateNode=o.stateNode,c.alternate=o,o.alternate=c):(c.pendingProps=a,c.type=o.type,c.flags=0,c.subtreeFlags=0,c.deletions=null),c.flags=o.flags&14680064,c.childLanes=o.childLanes,c.lanes=o.lanes,c.child=o.child,c.memoizedProps=o.memoizedProps,c.memoizedState=o.memoizedState,c.updateQueue=o.updateQueue,a=o.dependencies,c.dependencies=a===null?null:{lanes:a.lanes,firstContext:a.firstContext},c.sibling=o.sibling,c.index=o.index,c.ref=o.ref,c}function Rg(o,a,c,d,tt,nt){var $a=2;if(d=o,typeof o=="function")aj(o)&&($a=1);else if(typeof o=="string")$a=5;else e:switch(o){case ya$1:return Tg$1(c.children,tt,nt,a);case za$1:$a=8,tt|=8;break;case Aa$1:return o=Bg(12,c,a,tt|2),o.elementType=Aa$1,o.lanes=nt,o;case Ea$1:return o=Bg(13,c,a,tt),o.elementType=Ea$1,o.lanes=nt,o;case Fa$1:return o=Bg(19,c,a,tt),o.elementType=Fa$1,o.lanes=nt,o;case Ia$1:return pj(c,tt,nt,a);default:if(typeof o=="object"&&o!==null)switch(o.$$typeof){case Ba$1:$a=10;break e;case Ca$1:$a=9;break e;case Da$1:$a=11;break e;case Ga$1:$a=14;break e;case Ha$1:$a=16,d=null;break e}throw Error(p(130,o==null?o:typeof o,""))}return a=Bg($a,c,a,tt),a.elementType=o,a.type=d,a.lanes=nt,a}function Tg$1(o,a,c,d){return o=Bg(7,o,d,a),o.lanes=c,o}function pj(o,a,c,d){return o=Bg(22,o,d,a),o.elementType=Ia$1,o.lanes=c,o.stateNode={isHidden:!1},o}function Qg(o,a,c){return o=Bg(6,o,null,a),o.lanes=c,o}function Sg$1(o,a,c){return a=Bg(4,o.children!==null?o.children:[],o.key,a),a.lanes=c,a.stateNode={containerInfo:o.containerInfo,pendingChildren:null,implementation:o.implementation},a}function al$1(o,a,c,d,tt){this.tag=a,this.containerInfo=o,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zc(0),this.expirationTimes=zc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zc(0),this.identifierPrefix=d,this.onRecoverableError=tt,this.mutableSourceEagerHydrationData=null}function bl$1(o,a,c,d,tt,nt,$a,Ws,gu){return o=new al$1(o,a,c,Ws,gu),a===1?(a=1,nt===!0&&(a|=8)):a=0,nt=Bg(3,null,null,a),o.current=nt,nt.stateNode=o,nt.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null},kh$1(nt),o}function cl$1(o,a,c){var d=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE)}catch(o){console.error(o)}}checkDCE(),reactDom.exports=reactDom_production_min;var reactDomExports=reactDom.exports;const ReactDOM=getDefaultExportFromCjs$1(reactDomExports);var createRoot,m$1=reactDomExports;createRoot=client.createRoot=m$1.createRoot,client.hydrateRoot=m$1.hydrateRoot;/** * @remix-run/router v1.19.1 * * Copyright (c) Remix Software Inc. @@ -46,7 +46,7 @@ Error generating stack: `+nt.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function _extends$a(){return _extends$a=Object.assign?Object.assign.bind():function(o){for(var a=1;a"u")throw new Error(a)}function warning$2(o,a){if(!o){typeof console<"u"&&console.warn(a);try{throw new Error(a)}catch{}}}function createKey(){return Math.random().toString(36).substr(2,8)}function getHistoryState(o,a){return{usr:o.state,key:o.key,idx:a}}function createLocation(o,a,c,d){return c===void 0&&(c=null),_extends$a({pathname:typeof o=="string"?o:o.pathname,search:"",hash:""},typeof a=="string"?parsePath(a):a,{state:c,key:a&&a.key||d||createKey()})}function createPath(o){let{pathname:a="/",search:c="",hash:d=""}=o;return c&&c!=="?"&&(a+=c.charAt(0)==="?"?c:"?"+c),d&&d!=="#"&&(a+=d.charAt(0)==="#"?d:"#"+d),a}function parsePath(o){let a={};if(o){let c=o.indexOf("#");c>=0&&(a.hash=o.substr(c),o=o.substr(0,c));let d=o.indexOf("?");d>=0&&(a.search=o.substr(d),o=o.substr(0,d)),o&&(a.pathname=o)}return a}function getUrlBasedHistory(o,a,c,d){d===void 0&&(d={});let{window:tt=document.defaultView,v5Compat:nt=!1}=d,$a=tt.history,Ys=Action$1.Pop,gu=null,xu=$u();xu==null&&(xu=0,$a.replaceState(_extends$a({},$a.state,{idx:xu}),""));function $u(){return($a.state||{idx:null}).idx}function Iu(){Ys=Action$1.Pop;let A0=$u(),$0=A0==null?null:A0-xu;xu=A0,gu&&gu({action:Ys,location:w0.location,delta:$0})}function Xu(A0,$0){Ys=Action$1.Push;let O0=createLocation(w0.location,A0,$0);xu=$u()+1;let L0=getHistoryState(O0,xu),q0=w0.createHref(O0);try{$a.pushState(L0,"",q0)}catch(F0){if(F0 instanceof DOMException&&F0.name==="DataCloneError")throw F0;tt.location.assign(q0)}nt&&gu&&gu({action:Ys,location:w0.location,delta:1})}function i0(A0,$0){Ys=Action$1.Replace;let O0=createLocation(w0.location,A0,$0);xu=$u();let L0=getHistoryState(O0,xu),q0=w0.createHref(O0);$a.replaceState(L0,"",q0),nt&&gu&&gu({action:Ys,location:w0.location,delta:0})}function p0(A0){let $0=tt.location.origin!=="null"?tt.location.origin:tt.location.href,O0=typeof A0=="string"?A0:createPath(A0);return O0=O0.replace(/ $/,"%20"),invariant($0,"No window.location.(origin|href) available to create URL for href: "+O0),new URL(O0,$0)}let w0={get action(){return Ys},get location(){return o(tt,$a)},listen(A0){if(gu)throw new Error("A history only accepts one active listener");return tt.addEventListener(PopStateEventType,Iu),gu=A0,()=>{tt.removeEventListener(PopStateEventType,Iu),gu=null}},createHref(A0){return a(tt,A0)},createURL:p0,encodeLocation(A0){let $0=p0(A0);return{pathname:$0.pathname,search:$0.search,hash:$0.hash}},push:Xu,replace:i0,go(A0){return $a.go(A0)}};return w0}var ResultType;(function(o){o.data="data",o.deferred="deferred",o.redirect="redirect",o.error="error"})(ResultType||(ResultType={}));function matchRoutes(o,a,c){return c===void 0&&(c="/"),matchRoutesImpl(o,a,c,!1)}function matchRoutesImpl(o,a,c,d){let tt=typeof a=="string"?parsePath(a):a,nt=stripBasename(tt.pathname||"/",c);if(nt==null)return null;let $a=flattenRoutes(o);rankRouteBranches($a);let Ys=null;for(let gu=0;Ys==null&&gu<$a.length;++gu){let xu=decodePath(nt);Ys=matchRouteBranch($a[gu],xu,d)}return Ys}function flattenRoutes(o,a,c,d){a===void 0&&(a=[]),c===void 0&&(c=[]),d===void 0&&(d="");let tt=(nt,$a,Ys)=>{let gu={relativePath:Ys===void 0?nt.path||"":Ys,caseSensitive:nt.caseSensitive===!0,childrenIndex:$a,route:nt};gu.relativePath.startsWith("/")&&(invariant(gu.relativePath.startsWith(d),'Absolute route path "'+gu.relativePath+'" nested under path '+('"'+d+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),gu.relativePath=gu.relativePath.slice(d.length));let xu=joinPaths([d,gu.relativePath]),$u=c.concat(gu);nt.children&&nt.children.length>0&&(invariant(nt.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+xu+'".')),flattenRoutes(nt.children,a,$u,xu)),!(nt.path==null&&!nt.index)&&a.push({path:xu,score:computeScore(xu,nt.index),routesMeta:$u})};return o.forEach((nt,$a)=>{var Ys;if(nt.path===""||!((Ys=nt.path)!=null&&Ys.includes("?")))tt(nt,$a);else for(let gu of explodeOptionalSegments(nt.path))tt(nt,$a,gu)}),a}function explodeOptionalSegments(o){let a=o.split("/");if(a.length===0)return[];let[c,...d]=a,tt=c.endsWith("?"),nt=c.replace(/\?$/,"");if(d.length===0)return tt?[nt,""]:[nt];let $a=explodeOptionalSegments(d.join("/")),Ys=[];return Ys.push(...$a.map(gu=>gu===""?nt:[nt,gu].join("/"))),tt&&Ys.push(...$a),Ys.map(gu=>o.startsWith("/")&&gu===""?"/":gu)}function rankRouteBranches(o){o.sort((a,c)=>a.score!==c.score?c.score-a.score:compareIndexes(a.routesMeta.map(d=>d.childrenIndex),c.routesMeta.map(d=>d.childrenIndex)))}const paramRe=/^:[\w-]+$/,dynamicSegmentValue=3,indexRouteValue=2,emptySegmentValue=1,staticSegmentValue=10,splatPenalty=-2,isSplat=o=>o==="*";function computeScore(o,a){let c=o.split("/"),d=c.length;return c.some(isSplat)&&(d+=splatPenalty),a&&(d+=indexRouteValue),c.filter(tt=>!isSplat(tt)).reduce((tt,nt)=>tt+(paramRe.test(nt)?dynamicSegmentValue:nt===""?emptySegmentValue:staticSegmentValue),d)}function compareIndexes(o,a){return o.length===a.length&&o.slice(0,-1).every((d,tt)=>d===a[tt])?o[o.length-1]-a[a.length-1]:0}function matchRouteBranch(o,a,c){let{routesMeta:d}=o,tt={},nt="/",$a=[];for(let Ys=0;Ys{let{paramName:Xu,isOptional:i0}=$u;if(Xu==="*"){let w0=Ys[Iu]||"";$a=nt.slice(0,nt.length-w0.length).replace(/(.)\/+$/,"$1")}const p0=Ys[Iu];return i0&&!p0?xu[Xu]=void 0:xu[Xu]=(p0||"").replace(/%2F/g,"/"),xu},{}),pathname:nt,pathnameBase:$a,pattern:o}}function compilePath(o,a,c){a===void 0&&(a=!1),c===void 0&&(c=!0),warning$2(o==="*"||!o.endsWith("*")||o.endsWith("/*"),'Route path "'+o+'" will be treated as if it were '+('"'+o.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+o.replace(/\*$/,"/*")+'".'));let d=[],tt="^"+o.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,($a,Ys,gu)=>(d.push({paramName:Ys,isOptional:gu!=null}),gu?"/?([^\\/]+)?":"/([^\\/]+)"));return o.endsWith("*")?(d.push({paramName:"*"}),tt+=o==="*"||o==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):c?tt+="\\/*$":o!==""&&o!=="/"&&(tt+="(?:(?=\\/|$))"),[new RegExp(tt,a?void 0:"i"),d]}function decodePath(o){try{return o.split("/").map(a=>decodeURIComponent(a).replace(/\//g,"%2F")).join("/")}catch(a){return warning$2(!1,'The URL path "'+o+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+a+").")),o}}function stripBasename(o,a){if(a==="/")return o;if(!o.toLowerCase().startsWith(a.toLowerCase()))return null;let c=a.endsWith("/")?a.length-1:a.length,d=o.charAt(c);return d&&d!=="/"?null:o.slice(c)||"/"}function resolvePath(o,a){a===void 0&&(a="/");let{pathname:c,search:d="",hash:tt=""}=typeof o=="string"?parsePath(o):o;return{pathname:c?c.startsWith("/")?c:resolvePathname(c,a):a,search:normalizeSearch(d),hash:normalizeHash(tt)}}function resolvePathname(o,a){let c=a.replace(/\/+$/,"").split("/");return o.split("/").forEach(tt=>{tt===".."?c.length>1&&c.pop():tt!=="."&&c.push(tt)}),c.length>1?c.join("/"):"/"}function getInvalidPathError(o,a,c,d){return"Cannot include a '"+o+"' character in a manually specified "+("`to."+a+"` field ["+JSON.stringify(d)+"]. Please separate it out to the ")+("`to."+c+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function getPathContributingMatches(o){return o.filter((a,c)=>c===0||a.route.path&&a.route.path.length>0)}function getResolveToMatches(o,a){let c=getPathContributingMatches(o);return a?c.map((d,tt)=>tt===c.length-1?d.pathname:d.pathnameBase):c.map(d=>d.pathnameBase)}function resolveTo(o,a,c,d){d===void 0&&(d=!1);let tt;typeof o=="string"?tt=parsePath(o):(tt=_extends$a({},o),invariant(!tt.pathname||!tt.pathname.includes("?"),getInvalidPathError("?","pathname","search",tt)),invariant(!tt.pathname||!tt.pathname.includes("#"),getInvalidPathError("#","pathname","hash",tt)),invariant(!tt.search||!tt.search.includes("#"),getInvalidPathError("#","search","hash",tt)));let nt=o===""||tt.pathname==="",$a=nt?"/":tt.pathname,Ys;if($a==null)Ys=c;else{let Iu=a.length-1;if(!d&&$a.startsWith("..")){let Xu=$a.split("/");for(;Xu[0]==="..";)Xu.shift(),Iu-=1;tt.pathname=Xu.join("/")}Ys=Iu>=0?a[Iu]:"/"}let gu=resolvePath(tt,Ys),xu=$a&&$a!=="/"&&$a.endsWith("/"),$u=(nt||$a===".")&&c.endsWith("/");return!gu.pathname.endsWith("/")&&(xu||$u)&&(gu.pathname+="/"),gu}const joinPaths=o=>o.join("/").replace(/\/\/+/g,"/"),normalizePathname=o=>o.replace(/\/+$/,"").replace(/^\/*/,"/"),normalizeSearch=o=>!o||o==="?"?"":o.startsWith("?")?o:"?"+o,normalizeHash=o=>!o||o==="#"?"":o.startsWith("#")?o:"#"+o;function isRouteErrorResponse(o){return o!=null&&typeof o.status=="number"&&typeof o.statusText=="string"&&typeof o.internal=="boolean"&&"data"in o}const validMutationMethodsArr=["post","put","patch","delete"];new Set(validMutationMethodsArr);const validRequestMethodsArr=["get",...validMutationMethodsArr];new Set(validRequestMethodsArr);/** + */function _extends$a(){return _extends$a=Object.assign?Object.assign.bind():function(o){for(var a=1;a"u")throw new Error(a)}function warning$2(o,a){if(!o){typeof console<"u"&&console.warn(a);try{throw new Error(a)}catch{}}}function createKey(){return Math.random().toString(36).substr(2,8)}function getHistoryState(o,a){return{usr:o.state,key:o.key,idx:a}}function createLocation(o,a,c,d){return c===void 0&&(c=null),_extends$a({pathname:typeof o=="string"?o:o.pathname,search:"",hash:""},typeof a=="string"?parsePath(a):a,{state:c,key:a&&a.key||d||createKey()})}function createPath(o){let{pathname:a="/",search:c="",hash:d=""}=o;return c&&c!=="?"&&(a+=c.charAt(0)==="?"?c:"?"+c),d&&d!=="#"&&(a+=d.charAt(0)==="#"?d:"#"+d),a}function parsePath(o){let a={};if(o){let c=o.indexOf("#");c>=0&&(a.hash=o.substr(c),o=o.substr(0,c));let d=o.indexOf("?");d>=0&&(a.search=o.substr(d),o=o.substr(0,d)),o&&(a.pathname=o)}return a}function getUrlBasedHistory(o,a,c,d){d===void 0&&(d={});let{window:tt=document.defaultView,v5Compat:nt=!1}=d,$a=tt.history,Ws=Action$1.Pop,gu=null,Su=$u();Su==null&&(Su=0,$a.replaceState(_extends$a({},$a.state,{idx:Su}),""));function $u(){return($a.state||{idx:null}).idx}function Iu(){Ws=Action$1.Pop;let A0=$u(),$0=A0==null?null:A0-Su;Su=A0,gu&&gu({action:Ws,location:y0.location,delta:$0})}function Xu(A0,$0){Ws=Action$1.Push;let O0=createLocation(y0.location,A0,$0);Su=$u()+1;let L0=getHistoryState(O0,Su),V0=y0.createHref(O0);try{$a.pushState(L0,"",V0)}catch(F0){if(F0 instanceof DOMException&&F0.name==="DataCloneError")throw F0;tt.location.assign(V0)}nt&&gu&&gu({action:Ws,location:y0.location,delta:1})}function r0(A0,$0){Ws=Action$1.Replace;let O0=createLocation(y0.location,A0,$0);Su=$u();let L0=getHistoryState(O0,Su),V0=y0.createHref(O0);$a.replaceState(L0,"",V0),nt&&gu&&gu({action:Ws,location:y0.location,delta:0})}function p0(A0){let $0=tt.location.origin!=="null"?tt.location.origin:tt.location.href,O0=typeof A0=="string"?A0:createPath(A0);return O0=O0.replace(/ $/,"%20"),invariant($0,"No window.location.(origin|href) available to create URL for href: "+O0),new URL(O0,$0)}let y0={get action(){return Ws},get location(){return o(tt,$a)},listen(A0){if(gu)throw new Error("A history only accepts one active listener");return tt.addEventListener(PopStateEventType,Iu),gu=A0,()=>{tt.removeEventListener(PopStateEventType,Iu),gu=null}},createHref(A0){return a(tt,A0)},createURL:p0,encodeLocation(A0){let $0=p0(A0);return{pathname:$0.pathname,search:$0.search,hash:$0.hash}},push:Xu,replace:r0,go(A0){return $a.go(A0)}};return y0}var ResultType;(function(o){o.data="data",o.deferred="deferred",o.redirect="redirect",o.error="error"})(ResultType||(ResultType={}));function matchRoutes(o,a,c){return c===void 0&&(c="/"),matchRoutesImpl(o,a,c,!1)}function matchRoutesImpl(o,a,c,d){let tt=typeof a=="string"?parsePath(a):a,nt=stripBasename(tt.pathname||"/",c);if(nt==null)return null;let $a=flattenRoutes(o);rankRouteBranches($a);let Ws=null;for(let gu=0;Ws==null&&gu<$a.length;++gu){let Su=decodePath(nt);Ws=matchRouteBranch($a[gu],Su,d)}return Ws}function flattenRoutes(o,a,c,d){a===void 0&&(a=[]),c===void 0&&(c=[]),d===void 0&&(d="");let tt=(nt,$a,Ws)=>{let gu={relativePath:Ws===void 0?nt.path||"":Ws,caseSensitive:nt.caseSensitive===!0,childrenIndex:$a,route:nt};gu.relativePath.startsWith("/")&&(invariant(gu.relativePath.startsWith(d),'Absolute route path "'+gu.relativePath+'" nested under path '+('"'+d+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),gu.relativePath=gu.relativePath.slice(d.length));let Su=joinPaths([d,gu.relativePath]),$u=c.concat(gu);nt.children&&nt.children.length>0&&(invariant(nt.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+Su+'".')),flattenRoutes(nt.children,a,$u,Su)),!(nt.path==null&&!nt.index)&&a.push({path:Su,score:computeScore(Su,nt.index),routesMeta:$u})};return o.forEach((nt,$a)=>{var Ws;if(nt.path===""||!((Ws=nt.path)!=null&&Ws.includes("?")))tt(nt,$a);else for(let gu of explodeOptionalSegments(nt.path))tt(nt,$a,gu)}),a}function explodeOptionalSegments(o){let a=o.split("/");if(a.length===0)return[];let[c,...d]=a,tt=c.endsWith("?"),nt=c.replace(/\?$/,"");if(d.length===0)return tt?[nt,""]:[nt];let $a=explodeOptionalSegments(d.join("/")),Ws=[];return Ws.push(...$a.map(gu=>gu===""?nt:[nt,gu].join("/"))),tt&&Ws.push(...$a),Ws.map(gu=>o.startsWith("/")&&gu===""?"/":gu)}function rankRouteBranches(o){o.sort((a,c)=>a.score!==c.score?c.score-a.score:compareIndexes(a.routesMeta.map(d=>d.childrenIndex),c.routesMeta.map(d=>d.childrenIndex)))}const paramRe=/^:[\w-]+$/,dynamicSegmentValue=3,indexRouteValue=2,emptySegmentValue=1,staticSegmentValue=10,splatPenalty=-2,isSplat=o=>o==="*";function computeScore(o,a){let c=o.split("/"),d=c.length;return c.some(isSplat)&&(d+=splatPenalty),a&&(d+=indexRouteValue),c.filter(tt=>!isSplat(tt)).reduce((tt,nt)=>tt+(paramRe.test(nt)?dynamicSegmentValue:nt===""?emptySegmentValue:staticSegmentValue),d)}function compareIndexes(o,a){return o.length===a.length&&o.slice(0,-1).every((d,tt)=>d===a[tt])?o[o.length-1]-a[a.length-1]:0}function matchRouteBranch(o,a,c){let{routesMeta:d}=o,tt={},nt="/",$a=[];for(let Ws=0;Ws{let{paramName:Xu,isOptional:r0}=$u;if(Xu==="*"){let y0=Ws[Iu]||"";$a=nt.slice(0,nt.length-y0.length).replace(/(.)\/+$/,"$1")}const p0=Ws[Iu];return r0&&!p0?Su[Xu]=void 0:Su[Xu]=(p0||"").replace(/%2F/g,"/"),Su},{}),pathname:nt,pathnameBase:$a,pattern:o}}function compilePath(o,a,c){a===void 0&&(a=!1),c===void 0&&(c=!0),warning$2(o==="*"||!o.endsWith("*")||o.endsWith("/*"),'Route path "'+o+'" will be treated as if it were '+('"'+o.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+o.replace(/\*$/,"/*")+'".'));let d=[],tt="^"+o.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,($a,Ws,gu)=>(d.push({paramName:Ws,isOptional:gu!=null}),gu?"/?([^\\/]+)?":"/([^\\/]+)"));return o.endsWith("*")?(d.push({paramName:"*"}),tt+=o==="*"||o==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):c?tt+="\\/*$":o!==""&&o!=="/"&&(tt+="(?:(?=\\/|$))"),[new RegExp(tt,a?void 0:"i"),d]}function decodePath(o){try{return o.split("/").map(a=>decodeURIComponent(a).replace(/\//g,"%2F")).join("/")}catch(a){return warning$2(!1,'The URL path "'+o+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+a+").")),o}}function stripBasename(o,a){if(a==="/")return o;if(!o.toLowerCase().startsWith(a.toLowerCase()))return null;let c=a.endsWith("/")?a.length-1:a.length,d=o.charAt(c);return d&&d!=="/"?null:o.slice(c)||"/"}function resolvePath(o,a){a===void 0&&(a="/");let{pathname:c,search:d="",hash:tt=""}=typeof o=="string"?parsePath(o):o;return{pathname:c?c.startsWith("/")?c:resolvePathname(c,a):a,search:normalizeSearch(d),hash:normalizeHash(tt)}}function resolvePathname(o,a){let c=a.replace(/\/+$/,"").split("/");return o.split("/").forEach(tt=>{tt===".."?c.length>1&&c.pop():tt!=="."&&c.push(tt)}),c.length>1?c.join("/"):"/"}function getInvalidPathError(o,a,c,d){return"Cannot include a '"+o+"' character in a manually specified "+("`to."+a+"` field ["+JSON.stringify(d)+"]. Please separate it out to the ")+("`to."+c+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function getPathContributingMatches(o){return o.filter((a,c)=>c===0||a.route.path&&a.route.path.length>0)}function getResolveToMatches(o,a){let c=getPathContributingMatches(o);return a?c.map((d,tt)=>tt===c.length-1?d.pathname:d.pathnameBase):c.map(d=>d.pathnameBase)}function resolveTo(o,a,c,d){d===void 0&&(d=!1);let tt;typeof o=="string"?tt=parsePath(o):(tt=_extends$a({},o),invariant(!tt.pathname||!tt.pathname.includes("?"),getInvalidPathError("?","pathname","search",tt)),invariant(!tt.pathname||!tt.pathname.includes("#"),getInvalidPathError("#","pathname","hash",tt)),invariant(!tt.search||!tt.search.includes("#"),getInvalidPathError("#","search","hash",tt)));let nt=o===""||tt.pathname==="",$a=nt?"/":tt.pathname,Ws;if($a==null)Ws=c;else{let Iu=a.length-1;if(!d&&$a.startsWith("..")){let Xu=$a.split("/");for(;Xu[0]==="..";)Xu.shift(),Iu-=1;tt.pathname=Xu.join("/")}Ws=Iu>=0?a[Iu]:"/"}let gu=resolvePath(tt,Ws),Su=$a&&$a!=="/"&&$a.endsWith("/"),$u=(nt||$a===".")&&c.endsWith("/");return!gu.pathname.endsWith("/")&&(Su||$u)&&(gu.pathname+="/"),gu}const joinPaths=o=>o.join("/").replace(/\/\/+/g,"/"),normalizePathname=o=>o.replace(/\/+$/,"").replace(/^\/*/,"/"),normalizeSearch=o=>!o||o==="?"?"":o.startsWith("?")?o:"?"+o,normalizeHash=o=>!o||o==="#"?"":o.startsWith("#")?o:"#"+o;function isRouteErrorResponse(o){return o!=null&&typeof o.status=="number"&&typeof o.statusText=="string"&&typeof o.internal=="boolean"&&"data"in o}const validMutationMethodsArr=["post","put","patch","delete"];new Set(validMutationMethodsArr);const validRequestMethodsArr=["get",...validMutationMethodsArr];new Set(validRequestMethodsArr);/** * React Router v6.26.1 * * Copyright (c) Remix Software Inc. @@ -55,7 +55,7 @@ Error generating stack: `+nt.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function _extends$9(){return _extends$9=Object.assign?Object.assign.bind():function(o){for(var a=1;a{Ys.current=!0}),reactExports.useCallback(function(xu,$u){if($u===void 0&&($u={}),!Ys.current)return;if(typeof xu=="number"){d.go(xu);return}let Iu=resolveTo(xu,JSON.parse($a),nt,$u.relative==="path");o==null&&a!=="/"&&(Iu.pathname=Iu.pathname==="/"?a:joinPaths([a,Iu.pathname])),($u.replace?d.replace:d.push)(Iu,$u.state,$u)},[a,d,$a,nt,o])}const OutletContext=reactExports.createContext(null);function useOutlet(o){let a=reactExports.useContext(RouteContext).outlet;return a&&reactExports.createElement(OutletContext.Provider,{value:o},a)}function useParams(){let{matches:o}=reactExports.useContext(RouteContext),a=o[o.length-1];return a?a.params:{}}function useResolvedPath(o,a){let{relative:c}=a===void 0?{}:a,{future:d}=reactExports.useContext(NavigationContext),{matches:tt}=reactExports.useContext(RouteContext),{pathname:nt}=useLocation(),$a=JSON.stringify(getResolveToMatches(tt,d.v7_relativeSplatPath));return reactExports.useMemo(()=>resolveTo(o,JSON.parse($a),nt,c==="path"),[o,$a,nt,c])}function useRoutes(o,a){return useRoutesImpl(o,a)}function useRoutesImpl(o,a,c,d){useInRouterContext()||invariant(!1);let{navigator:tt}=reactExports.useContext(NavigationContext),{matches:nt}=reactExports.useContext(RouteContext),$a=nt[nt.length-1],Ys=$a?$a.params:{};$a&&$a.pathname;let gu=$a?$a.pathnameBase:"/";$a&&$a.route;let xu=useLocation(),$u;if(a){var Iu;let A0=typeof a=="string"?parsePath(a):a;gu==="/"||(Iu=A0.pathname)!=null&&Iu.startsWith(gu)||invariant(!1),$u=A0}else $u=xu;let Xu=$u.pathname||"/",i0=Xu;if(gu!=="/"){let A0=gu.replace(/^\//,"").split("/");i0="/"+Xu.replace(/^\//,"").split("/").slice(A0.length).join("/")}let p0=matchRoutes(o,{pathname:i0}),w0=_renderMatches(p0&&p0.map(A0=>Object.assign({},A0,{params:Object.assign({},Ys,A0.params),pathname:joinPaths([gu,tt.encodeLocation?tt.encodeLocation(A0.pathname).pathname:A0.pathname]),pathnameBase:A0.pathnameBase==="/"?gu:joinPaths([gu,tt.encodeLocation?tt.encodeLocation(A0.pathnameBase).pathname:A0.pathnameBase])})),nt,c,d);return a&&w0?reactExports.createElement(LocationContext.Provider,{value:{location:_extends$9({pathname:"/",search:"",hash:"",state:null,key:"default"},$u),navigationType:Action$1.Pop}},w0):w0}function DefaultErrorComponent(){let o=useRouteError(),a=isRouteErrorResponse(o)?o.status+" "+o.statusText:o instanceof Error?o.message:JSON.stringify(o),c=o instanceof Error?o.stack:null,tt={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return reactExports.createElement(reactExports.Fragment,null,reactExports.createElement("h2",null,"Unexpected Application Error!"),reactExports.createElement("h3",{style:{fontStyle:"italic"}},a),c?reactExports.createElement("pre",{style:tt},c):null,null)}const defaultErrorElement=reactExports.createElement(DefaultErrorComponent,null);class RenderErrorBoundary extends reactExports.Component{constructor(a){super(a),this.state={location:a.location,revalidation:a.revalidation,error:a.error}}static getDerivedStateFromError(a){return{error:a}}static getDerivedStateFromProps(a,c){return c.location!==a.location||c.revalidation!=="idle"&&a.revalidation==="idle"?{error:a.error,location:a.location,revalidation:a.revalidation}:{error:a.error!==void 0?a.error:c.error,location:c.location,revalidation:a.revalidation||c.revalidation}}componentDidCatch(a,c){console.error("React Router caught the following error during render",a,c)}render(){return this.state.error!==void 0?reactExports.createElement(RouteContext.Provider,{value:this.props.routeContext},reactExports.createElement(RouteErrorContext.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function RenderedRoute(o){let{routeContext:a,match:c,children:d}=o,tt=reactExports.useContext(DataRouterContext);return tt&&tt.static&&tt.staticContext&&(c.route.errorElement||c.route.ErrorBoundary)&&(tt.staticContext._deepestRenderedBoundaryId=c.route.id),reactExports.createElement(RouteContext.Provider,{value:a},d)}function _renderMatches(o,a,c,d){var tt;if(a===void 0&&(a=[]),c===void 0&&(c=null),d===void 0&&(d=null),o==null){var nt;if(!c)return null;if(c.errors)o=c.matches;else if((nt=d)!=null&&nt.v7_partialHydration&&a.length===0&&!c.initialized&&c.matches.length>0)o=c.matches;else return null}let $a=o,Ys=(tt=c)==null?void 0:tt.errors;if(Ys!=null){let $u=$a.findIndex(Iu=>Iu.route.id&&(Ys==null?void 0:Ys[Iu.route.id])!==void 0);$u>=0||invariant(!1),$a=$a.slice(0,Math.min($a.length,$u+1))}let gu=!1,xu=-1;if(c&&d&&d.v7_partialHydration)for(let $u=0;$u<$a.length;$u++){let Iu=$a[$u];if((Iu.route.HydrateFallback||Iu.route.hydrateFallbackElement)&&(xu=$u),Iu.route.id){let{loaderData:Xu,errors:i0}=c,p0=Iu.route.loader&&Xu[Iu.route.id]===void 0&&(!i0||i0[Iu.route.id]===void 0);if(Iu.route.lazy||p0){gu=!0,xu>=0?$a=$a.slice(0,xu+1):$a=[$a[0]];break}}}return $a.reduceRight(($u,Iu,Xu)=>{let i0,p0=!1,w0=null,A0=null;c&&(i0=Ys&&Iu.route.id?Ys[Iu.route.id]:void 0,w0=Iu.route.errorElement||defaultErrorElement,gu&&(xu<0&&Xu===0?(p0=!0,A0=null):xu===Xu&&(p0=!0,A0=Iu.route.hydrateFallbackElement||null)));let $0=a.concat($a.slice(0,Xu+1)),O0=()=>{let L0;return i0?L0=w0:p0?L0=A0:Iu.route.Component?L0=reactExports.createElement(Iu.route.Component,null):Iu.route.element?L0=Iu.route.element:L0=$u,reactExports.createElement(RenderedRoute,{match:Iu,routeContext:{outlet:$u,matches:$0,isDataRoute:c!=null},children:L0})};return c&&(Iu.route.ErrorBoundary||Iu.route.errorElement||Xu===0)?reactExports.createElement(RenderErrorBoundary,{location:c.location,revalidation:c.revalidation,component:w0,error:i0,children:O0(),routeContext:{outlet:null,matches:$0,isDataRoute:!0}}):O0()},null)}var DataRouterHook$1=function(o){return o.UseBlocker="useBlocker",o.UseRevalidator="useRevalidator",o.UseNavigateStable="useNavigate",o}(DataRouterHook$1||{}),DataRouterStateHook$1=function(o){return o.UseBlocker="useBlocker",o.UseLoaderData="useLoaderData",o.UseActionData="useActionData",o.UseRouteError="useRouteError",o.UseNavigation="useNavigation",o.UseRouteLoaderData="useRouteLoaderData",o.UseMatches="useMatches",o.UseRevalidator="useRevalidator",o.UseNavigateStable="useNavigate",o.UseRouteId="useRouteId",o}(DataRouterStateHook$1||{});function useDataRouterContext(o){let a=reactExports.useContext(DataRouterContext);return a||invariant(!1),a}function useDataRouterState(o){let a=reactExports.useContext(DataRouterStateContext);return a||invariant(!1),a}function useRouteContext(o){let a=reactExports.useContext(RouteContext);return a||invariant(!1),a}function useCurrentRouteId(o){let a=useRouteContext(),c=a.matches[a.matches.length-1];return c.route.id||invariant(!1),c.route.id}function useRouteError(){var o;let a=reactExports.useContext(RouteErrorContext),c=useDataRouterState(DataRouterStateHook$1.UseRouteError),d=useCurrentRouteId(DataRouterStateHook$1.UseRouteError);return a!==void 0?a:(o=c.errors)==null?void 0:o[d]}function useNavigateStable(){let{router:o}=useDataRouterContext(DataRouterHook$1.UseNavigateStable),a=useCurrentRouteId(DataRouterStateHook$1.UseNavigateStable),c=reactExports.useRef(!1);return useIsomorphicLayoutEffect(()=>{c.current=!0}),reactExports.useCallback(function(tt,nt){nt===void 0&&(nt={}),c.current&&(typeof tt=="number"?o.navigate(tt):o.navigate(tt,_extends$9({fromRouteId:a},nt)))},[o,a])}function Outlet(o){return useOutlet(o.context)}function Route(o){invariant(!1)}function Router(o){let{basename:a="/",children:c=null,location:d,navigationType:tt=Action$1.Pop,navigator:nt,static:$a=!1,future:Ys}=o;useInRouterContext()&&invariant(!1);let gu=a.replace(/^\/*/,"/"),xu=reactExports.useMemo(()=>({basename:gu,navigator:nt,static:$a,future:_extends$9({v7_relativeSplatPath:!1},Ys)}),[gu,Ys,nt,$a]);typeof d=="string"&&(d=parsePath(d));let{pathname:$u="/",search:Iu="",hash:Xu="",state:i0=null,key:p0="default"}=d,w0=reactExports.useMemo(()=>{let A0=stripBasename($u,gu);return A0==null?null:{location:{pathname:A0,search:Iu,hash:Xu,state:i0,key:p0},navigationType:tt}},[gu,$u,Iu,Xu,i0,p0,tt]);return w0==null?null:reactExports.createElement(NavigationContext.Provider,{value:xu},reactExports.createElement(LocationContext.Provider,{children:c,value:w0}))}function Routes(o){let{children:a,location:c}=o;return useRoutes(createRoutesFromChildren(a),c)}new Promise(()=>{});function createRoutesFromChildren(o,a){a===void 0&&(a=[]);let c=[];return reactExports.Children.forEach(o,(d,tt)=>{if(!reactExports.isValidElement(d))return;let nt=[...a,tt];if(d.type===reactExports.Fragment){c.push.apply(c,createRoutesFromChildren(d.props.children,nt));return}d.type!==Route&&invariant(!1),!d.props.index||!d.props.children||invariant(!1);let $a={id:d.props.id||nt.join("-"),caseSensitive:d.props.caseSensitive,element:d.props.element,Component:d.props.Component,index:d.props.index,path:d.props.path,loader:d.props.loader,action:d.props.action,errorElement:d.props.errorElement,ErrorBoundary:d.props.ErrorBoundary,hasErrorBoundary:d.props.ErrorBoundary!=null||d.props.errorElement!=null,shouldRevalidate:d.props.shouldRevalidate,handle:d.props.handle,lazy:d.props.lazy};d.props.children&&($a.children=createRoutesFromChildren(d.props.children,nt)),c.push($a)}),c}/** + */function _extends$9(){return _extends$9=Object.assign?Object.assign.bind():function(o){for(var a=1;a{Ws.current=!0}),reactExports.useCallback(function(Su,$u){if($u===void 0&&($u={}),!Ws.current)return;if(typeof Su=="number"){d.go(Su);return}let Iu=resolveTo(Su,JSON.parse($a),nt,$u.relative==="path");o==null&&a!=="/"&&(Iu.pathname=Iu.pathname==="/"?a:joinPaths([a,Iu.pathname])),($u.replace?d.replace:d.push)(Iu,$u.state,$u)},[a,d,$a,nt,o])}const OutletContext=reactExports.createContext(null);function useOutlet(o){let a=reactExports.useContext(RouteContext).outlet;return a&&reactExports.createElement(OutletContext.Provider,{value:o},a)}function useParams(){let{matches:o}=reactExports.useContext(RouteContext),a=o[o.length-1];return a?a.params:{}}function useResolvedPath(o,a){let{relative:c}=a===void 0?{}:a,{future:d}=reactExports.useContext(NavigationContext),{matches:tt}=reactExports.useContext(RouteContext),{pathname:nt}=useLocation(),$a=JSON.stringify(getResolveToMatches(tt,d.v7_relativeSplatPath));return reactExports.useMemo(()=>resolveTo(o,JSON.parse($a),nt,c==="path"),[o,$a,nt,c])}function useRoutes(o,a){return useRoutesImpl(o,a)}function useRoutesImpl(o,a,c,d){useInRouterContext()||invariant(!1);let{navigator:tt}=reactExports.useContext(NavigationContext),{matches:nt}=reactExports.useContext(RouteContext),$a=nt[nt.length-1],Ws=$a?$a.params:{};$a&&$a.pathname;let gu=$a?$a.pathnameBase:"/";$a&&$a.route;let Su=useLocation(),$u;if(a){var Iu;let A0=typeof a=="string"?parsePath(a):a;gu==="/"||(Iu=A0.pathname)!=null&&Iu.startsWith(gu)||invariant(!1),$u=A0}else $u=Su;let Xu=$u.pathname||"/",r0=Xu;if(gu!=="/"){let A0=gu.replace(/^\//,"").split("/");r0="/"+Xu.replace(/^\//,"").split("/").slice(A0.length).join("/")}let p0=matchRoutes(o,{pathname:r0}),y0=_renderMatches(p0&&p0.map(A0=>Object.assign({},A0,{params:Object.assign({},Ws,A0.params),pathname:joinPaths([gu,tt.encodeLocation?tt.encodeLocation(A0.pathname).pathname:A0.pathname]),pathnameBase:A0.pathnameBase==="/"?gu:joinPaths([gu,tt.encodeLocation?tt.encodeLocation(A0.pathnameBase).pathname:A0.pathnameBase])})),nt,c,d);return a&&y0?reactExports.createElement(LocationContext.Provider,{value:{location:_extends$9({pathname:"/",search:"",hash:"",state:null,key:"default"},$u),navigationType:Action$1.Pop}},y0):y0}function DefaultErrorComponent(){let o=useRouteError(),a=isRouteErrorResponse(o)?o.status+" "+o.statusText:o instanceof Error?o.message:JSON.stringify(o),c=o instanceof Error?o.stack:null,tt={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return reactExports.createElement(reactExports.Fragment,null,reactExports.createElement("h2",null,"Unexpected Application Error!"),reactExports.createElement("h3",{style:{fontStyle:"italic"}},a),c?reactExports.createElement("pre",{style:tt},c):null,null)}const defaultErrorElement=reactExports.createElement(DefaultErrorComponent,null);class RenderErrorBoundary extends reactExports.Component{constructor(a){super(a),this.state={location:a.location,revalidation:a.revalidation,error:a.error}}static getDerivedStateFromError(a){return{error:a}}static getDerivedStateFromProps(a,c){return c.location!==a.location||c.revalidation!=="idle"&&a.revalidation==="idle"?{error:a.error,location:a.location,revalidation:a.revalidation}:{error:a.error!==void 0?a.error:c.error,location:c.location,revalidation:a.revalidation||c.revalidation}}componentDidCatch(a,c){console.error("React Router caught the following error during render",a,c)}render(){return this.state.error!==void 0?reactExports.createElement(RouteContext.Provider,{value:this.props.routeContext},reactExports.createElement(RouteErrorContext.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function RenderedRoute(o){let{routeContext:a,match:c,children:d}=o,tt=reactExports.useContext(DataRouterContext);return tt&&tt.static&&tt.staticContext&&(c.route.errorElement||c.route.ErrorBoundary)&&(tt.staticContext._deepestRenderedBoundaryId=c.route.id),reactExports.createElement(RouteContext.Provider,{value:a},d)}function _renderMatches(o,a,c,d){var tt;if(a===void 0&&(a=[]),c===void 0&&(c=null),d===void 0&&(d=null),o==null){var nt;if(!c)return null;if(c.errors)o=c.matches;else if((nt=d)!=null&&nt.v7_partialHydration&&a.length===0&&!c.initialized&&c.matches.length>0)o=c.matches;else return null}let $a=o,Ws=(tt=c)==null?void 0:tt.errors;if(Ws!=null){let $u=$a.findIndex(Iu=>Iu.route.id&&(Ws==null?void 0:Ws[Iu.route.id])!==void 0);$u>=0||invariant(!1),$a=$a.slice(0,Math.min($a.length,$u+1))}let gu=!1,Su=-1;if(c&&d&&d.v7_partialHydration)for(let $u=0;$u<$a.length;$u++){let Iu=$a[$u];if((Iu.route.HydrateFallback||Iu.route.hydrateFallbackElement)&&(Su=$u),Iu.route.id){let{loaderData:Xu,errors:r0}=c,p0=Iu.route.loader&&Xu[Iu.route.id]===void 0&&(!r0||r0[Iu.route.id]===void 0);if(Iu.route.lazy||p0){gu=!0,Su>=0?$a=$a.slice(0,Su+1):$a=[$a[0]];break}}}return $a.reduceRight(($u,Iu,Xu)=>{let r0,p0=!1,y0=null,A0=null;c&&(r0=Ws&&Iu.route.id?Ws[Iu.route.id]:void 0,y0=Iu.route.errorElement||defaultErrorElement,gu&&(Su<0&&Xu===0?(p0=!0,A0=null):Su===Xu&&(p0=!0,A0=Iu.route.hydrateFallbackElement||null)));let $0=a.concat($a.slice(0,Xu+1)),O0=()=>{let L0;return r0?L0=y0:p0?L0=A0:Iu.route.Component?L0=reactExports.createElement(Iu.route.Component,null):Iu.route.element?L0=Iu.route.element:L0=$u,reactExports.createElement(RenderedRoute,{match:Iu,routeContext:{outlet:$u,matches:$0,isDataRoute:c!=null},children:L0})};return c&&(Iu.route.ErrorBoundary||Iu.route.errorElement||Xu===0)?reactExports.createElement(RenderErrorBoundary,{location:c.location,revalidation:c.revalidation,component:y0,error:r0,children:O0(),routeContext:{outlet:null,matches:$0,isDataRoute:!0}}):O0()},null)}var DataRouterHook$1=function(o){return o.UseBlocker="useBlocker",o.UseRevalidator="useRevalidator",o.UseNavigateStable="useNavigate",o}(DataRouterHook$1||{}),DataRouterStateHook$1=function(o){return o.UseBlocker="useBlocker",o.UseLoaderData="useLoaderData",o.UseActionData="useActionData",o.UseRouteError="useRouteError",o.UseNavigation="useNavigation",o.UseRouteLoaderData="useRouteLoaderData",o.UseMatches="useMatches",o.UseRevalidator="useRevalidator",o.UseNavigateStable="useNavigate",o.UseRouteId="useRouteId",o}(DataRouterStateHook$1||{});function useDataRouterContext(o){let a=reactExports.useContext(DataRouterContext);return a||invariant(!1),a}function useDataRouterState(o){let a=reactExports.useContext(DataRouterStateContext);return a||invariant(!1),a}function useRouteContext(o){let a=reactExports.useContext(RouteContext);return a||invariant(!1),a}function useCurrentRouteId(o){let a=useRouteContext(),c=a.matches[a.matches.length-1];return c.route.id||invariant(!1),c.route.id}function useRouteError(){var o;let a=reactExports.useContext(RouteErrorContext),c=useDataRouterState(DataRouterStateHook$1.UseRouteError),d=useCurrentRouteId(DataRouterStateHook$1.UseRouteError);return a!==void 0?a:(o=c.errors)==null?void 0:o[d]}function useNavigateStable(){let{router:o}=useDataRouterContext(DataRouterHook$1.UseNavigateStable),a=useCurrentRouteId(DataRouterStateHook$1.UseNavigateStable),c=reactExports.useRef(!1);return useIsomorphicLayoutEffect(()=>{c.current=!0}),reactExports.useCallback(function(tt,nt){nt===void 0&&(nt={}),c.current&&(typeof tt=="number"?o.navigate(tt):o.navigate(tt,_extends$9({fromRouteId:a},nt)))},[o,a])}function Outlet(o){return useOutlet(o.context)}function Route(o){invariant(!1)}function Router(o){let{basename:a="/",children:c=null,location:d,navigationType:tt=Action$1.Pop,navigator:nt,static:$a=!1,future:Ws}=o;useInRouterContext()&&invariant(!1);let gu=a.replace(/^\/*/,"/"),Su=reactExports.useMemo(()=>({basename:gu,navigator:nt,static:$a,future:_extends$9({v7_relativeSplatPath:!1},Ws)}),[gu,Ws,nt,$a]);typeof d=="string"&&(d=parsePath(d));let{pathname:$u="/",search:Iu="",hash:Xu="",state:r0=null,key:p0="default"}=d,y0=reactExports.useMemo(()=>{let A0=stripBasename($u,gu);return A0==null?null:{location:{pathname:A0,search:Iu,hash:Xu,state:r0,key:p0},navigationType:tt}},[gu,$u,Iu,Xu,r0,p0,tt]);return y0==null?null:reactExports.createElement(NavigationContext.Provider,{value:Su},reactExports.createElement(LocationContext.Provider,{children:c,value:y0}))}function Routes(o){let{children:a,location:c}=o;return useRoutes(createRoutesFromChildren(a),c)}new Promise(()=>{});function createRoutesFromChildren(o,a){a===void 0&&(a=[]);let c=[];return reactExports.Children.forEach(o,(d,tt)=>{if(!reactExports.isValidElement(d))return;let nt=[...a,tt];if(d.type===reactExports.Fragment){c.push.apply(c,createRoutesFromChildren(d.props.children,nt));return}d.type!==Route&&invariant(!1),!d.props.index||!d.props.children||invariant(!1);let $a={id:d.props.id||nt.join("-"),caseSensitive:d.props.caseSensitive,element:d.props.element,Component:d.props.Component,index:d.props.index,path:d.props.path,loader:d.props.loader,action:d.props.action,errorElement:d.props.errorElement,ErrorBoundary:d.props.ErrorBoundary,hasErrorBoundary:d.props.ErrorBoundary!=null||d.props.errorElement!=null,shouldRevalidate:d.props.shouldRevalidate,handle:d.props.handle,lazy:d.props.lazy};d.props.children&&($a.children=createRoutesFromChildren(d.props.children,nt)),c.push($a)}),c}/** * React Router DOM v6.26.1 * * Copyright (c) Remix Software Inc. @@ -64,17 +64,17 @@ Error generating stack: `+nt.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function _extends$8(){return _extends$8=Object.assign?Object.assign.bind():function(o){for(var a=1;a=0)&&(c[tt]=o[tt]);return c}function isModifiedEvent$1(o){return!!(o.metaKey||o.altKey||o.ctrlKey||o.shiftKey)}function shouldProcessLinkClick(o,a){return o.button===0&&(!a||a==="_self")&&!isModifiedEvent$1(o)}const _excluded$8=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],REACT_ROUTER_VERSION="6";try{window.__reactRouterVersion=REACT_ROUTER_VERSION}catch{}const START_TRANSITION="startTransition",startTransitionImpl=e[START_TRANSITION];function BrowserRouter(o){let{basename:a,children:c,future:d,window:tt}=o,nt=reactExports.useRef();nt.current==null&&(nt.current=createBrowserHistory({window:tt,v5Compat:!0}));let $a=nt.current,[Ys,gu]=reactExports.useState({action:$a.action,location:$a.location}),{v7_startTransition:xu}=d||{},$u=reactExports.useCallback(Iu=>{xu&&startTransitionImpl?startTransitionImpl(()=>gu(Iu)):gu(Iu)},[gu,xu]);return reactExports.useLayoutEffect(()=>$a.listen($u),[$a,$u]),reactExports.createElement(Router,{basename:a,children:c,location:Ys.location,navigationType:Ys.action,navigator:$a,future:d})}const isBrowser=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ABSOLUTE_URL_REGEX=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Link=reactExports.forwardRef(function(a,c){let{onClick:d,relative:tt,reloadDocument:nt,replace:$a,state:Ys,target:gu,to:xu,preventScrollReset:$u,unstable_viewTransition:Iu}=a,Xu=_objectWithoutPropertiesLoose$9(a,_excluded$8),{basename:i0}=reactExports.useContext(NavigationContext),p0,w0=!1;if(typeof xu=="string"&&ABSOLUTE_URL_REGEX.test(xu)&&(p0=xu,isBrowser))try{let L0=new URL(window.location.href),q0=xu.startsWith("//")?new URL(L0.protocol+xu):new URL(xu),F0=stripBasename(q0.pathname,i0);q0.origin===L0.origin&&F0!=null?xu=F0+q0.search+q0.hash:w0=!0}catch{}let A0=useHref(xu,{relative:tt}),$0=useLinkClickHandler(xu,{replace:$a,state:Ys,target:gu,preventScrollReset:$u,relative:tt,unstable_viewTransition:Iu});function O0(L0){d&&d(L0),L0.defaultPrevented||$0(L0)}return reactExports.createElement("a",_extends$8({},Xu,{href:p0||A0,onClick:w0||nt?d:O0,ref:c,target:gu}))});var DataRouterHook;(function(o){o.UseScrollRestoration="useScrollRestoration",o.UseSubmit="useSubmit",o.UseSubmitFetcher="useSubmitFetcher",o.UseFetcher="useFetcher",o.useViewTransitionState="useViewTransitionState"})(DataRouterHook||(DataRouterHook={}));var DataRouterStateHook;(function(o){o.UseFetcher="useFetcher",o.UseFetchers="useFetchers",o.UseScrollRestoration="useScrollRestoration"})(DataRouterStateHook||(DataRouterStateHook={}));function useLinkClickHandler(o,a){let{target:c,replace:d,state:tt,preventScrollReset:nt,relative:$a,unstable_viewTransition:Ys}=a===void 0?{}:a,gu=useNavigate(),xu=useLocation(),$u=useResolvedPath(o,{relative:$a});return reactExports.useCallback(Iu=>{if(shouldProcessLinkClick(Iu,c)){Iu.preventDefault();let Xu=d!==void 0?d:createPath(xu)===createPath($u);gu(o,{replace:Xu,state:tt,preventScrollReset:nt,relative:$a,unstable_viewTransition:Ys})}},[xu,gu,$u,d,tt,c,o,nt,$a,Ys])}const global$u=globalThis||void 0||self;function getDefaultExportFromCjs(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var browser$h={exports:{}},process$7=browser$h.exports={},cachedSetTimeout,cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?cachedSetTimeout=setTimeout:cachedSetTimeout=defaultSetTimout}catch{cachedSetTimeout=defaultSetTimout}try{typeof clearTimeout=="function"?cachedClearTimeout=clearTimeout:cachedClearTimeout=defaultClearTimeout}catch{cachedClearTimeout=defaultClearTimeout}})();function runTimeout(o){if(cachedSetTimeout===setTimeout)return setTimeout(o,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(o,0);try{return cachedSetTimeout(o,0)}catch{try{return cachedSetTimeout.call(null,o,0)}catch{return cachedSetTimeout.call(this,o,0)}}}function runClearTimeout(o){if(cachedClearTimeout===clearTimeout)return clearTimeout(o);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(o);try{return cachedClearTimeout(o)}catch{try{return cachedClearTimeout.call(null,o)}catch{return cachedClearTimeout.call(this,o)}}}var queue$5=[],draining=!1,currentQueue,queueIndex=-1;function cleanUpNextTick(){!draining||!currentQueue||(draining=!1,currentQueue.length?queue$5=currentQueue.concat(queue$5):queueIndex=-1,queue$5.length&&drainQueue())}function drainQueue(){if(!draining){var o=runTimeout(cleanUpNextTick);draining=!0;for(var a=queue$5.length;a;){for(currentQueue=queue$5,queue$5=[];++queueIndex1)for(var c=1;ca=>{const c=toString$d.call(a);return o[c]||(o[c]=c.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=o=>(o=o.toLowerCase(),a=>kindOf(a)===o),typeOfTest=o=>a=>typeof a===o,{isArray:isArray$5}=Array,isUndefined$1=typeOfTest("undefined");function isBuffer(o){return o!==null&&!isUndefined$1(o)&&o.constructor!==null&&!isUndefined$1(o.constructor)&&isFunction$3(o.constructor.isBuffer)&&o.constructor.isBuffer(o)}const isArrayBuffer$1=kindOfTest("ArrayBuffer");function isArrayBufferView$1(o){let a;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?a=ArrayBuffer.isView(o):a=o&&o.buffer&&isArrayBuffer$1(o.buffer),a}const isString$4=typeOfTest("string"),isFunction$3=typeOfTest("function"),isNumber$3=typeOfTest("number"),isObject$i=o=>o!==null&&typeof o=="object",isBoolean$2=o=>o===!0||o===!1,isPlainObject$1=o=>{if(kindOf(o)!=="object")return!1;const a=getPrototypeOf$6(o);return(a===null||a===Object.prototype||Object.getPrototypeOf(a)===null)&&!(Symbol.toStringTag in o)&&!(Symbol.iterator in o)},isDate$2=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=o=>isObject$i(o)&&isFunction$3(o.pipe),isFormData=o=>{let a;return o&&(typeof FormData=="function"&&o instanceof FormData||isFunction$3(o.append)&&((a=kindOf(o))==="formdata"||a==="object"&&isFunction$3(o.toString)&&o.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),[isReadableStream,isRequest$2,isResponse,isHeaders]=["ReadableStream","Request","Response","Headers"].map(kindOfTest),trim$1=o=>o.trim?o.trim():o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach$3(o,a,{allOwnKeys:c=!1}={}){if(o===null||typeof o>"u")return;let d,tt;if(typeof o!="object"&&(o=[o]),isArray$5(o))for(d=0,tt=o.length;d0;)if(tt=c[d],a===tt.toLowerCase())return tt;return null}const _global=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global$u,isContextDefined=o=>!isUndefined$1(o)&&o!==_global;function merge$3(){const{caseless:o}=isContextDefined(this)&&this||{},a={},c=(d,tt)=>{const nt=o&&findKey(a,tt)||tt;isPlainObject$1(a[nt])&&isPlainObject$1(d)?a[nt]=merge$3(a[nt],d):isPlainObject$1(d)?a[nt]=merge$3({},d):isArray$5(d)?a[nt]=d.slice():a[nt]=d};for(let d=0,tt=arguments.length;d(forEach$3(a,(tt,nt)=>{c&&isFunction$3(tt)?o[nt]=bind$f(tt,c):o[nt]=tt},{allOwnKeys:d}),o),stripBOM=o=>(o.charCodeAt(0)===65279&&(o=o.slice(1)),o),inherits$r=(o,a,c,d)=>{o.prototype=Object.create(a.prototype,d),o.prototype.constructor=o,Object.defineProperty(o,"super",{value:a.prototype}),c&&Object.assign(o.prototype,c)},toFlatObject=(o,a,c,d)=>{let tt,nt,$a;const Ys={};if(a=a||{},o==null)return a;do{for(tt=Object.getOwnPropertyNames(o),nt=tt.length;nt-- >0;)$a=tt[nt],(!d||d($a,o,a))&&!Ys[$a]&&(a[$a]=o[$a],Ys[$a]=!0);o=c!==!1&&getPrototypeOf$6(o)}while(o&&(!c||c(o,a))&&o!==Object.prototype);return a},endsWith$1=(o,a,c)=>{o=String(o),(c===void 0||c>o.length)&&(c=o.length),c-=a.length;const d=o.indexOf(a,c);return d!==-1&&d===c},toArray$3=o=>{if(!o)return null;if(isArray$5(o))return o;let a=o.length;if(!isNumber$3(a))return null;const c=new Array(a);for(;a-- >0;)c[a]=o[a];return c},isTypedArray$3=(o=>a=>o&&a instanceof o)(typeof Uint8Array<"u"&&getPrototypeOf$6(Uint8Array)),forEachEntry=(o,a)=>{const d=(o&&o[Symbol.iterator]).call(o);let tt;for(;(tt=d.next())&&!tt.done;){const nt=tt.value;a.call(o,nt[0],nt[1])}},matchAll=(o,a)=>{let c;const d=[];for(;(c=o.exec(a))!==null;)d.push(c);return d},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=o=>o.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(c,d,tt){return d.toUpperCase()+tt}),hasOwnProperty$6=(({hasOwnProperty:o})=>(a,c)=>o.call(a,c))(Object.prototype),isRegExp$4=kindOfTest("RegExp"),reduceDescriptors=(o,a)=>{const c=Object.getOwnPropertyDescriptors(o),d={};forEach$3(c,(tt,nt)=>{let $a;($a=a(tt,nt,o))!==!1&&(d[nt]=$a||tt)}),Object.defineProperties(o,d)},freezeMethods=o=>{reduceDescriptors(o,(a,c)=>{if(isFunction$3(o)&&["arguments","caller","callee"].indexOf(c)!==-1)return!1;const d=o[c];if(isFunction$3(d)){if(a.enumerable=!1,"writable"in a){a.writable=!1;return}a.set||(a.set=()=>{throw Error("Can not rewrite read-only method '"+c+"'")})}})},toObjectSet=(o,a)=>{const c={},d=tt=>{tt.forEach(nt=>{c[nt]=!0})};return isArray$5(o)?d(o):d(String(o).split(a)),c},noop$c=()=>{},toFiniteNumber=(o,a)=>o!=null&&Number.isFinite(o=+o)?o:a,ALPHA$1="abcdefghijklmnopqrstuvwxyz",DIGIT$1="0123456789",ALPHABET$3={DIGIT:DIGIT$1,ALPHA:ALPHA$1,ALPHA_DIGIT:ALPHA$1+ALPHA$1.toUpperCase()+DIGIT$1},generateString=(o=16,a=ALPHABET$3.ALPHA_DIGIT)=>{let c="";const{length:d}=a;for(;o--;)c+=a[Math.random()*d|0];return c};function isSpecCompliantForm(o){return!!(o&&isFunction$3(o.append)&&o[Symbol.toStringTag]==="FormData"&&o[Symbol.iterator])}const toJSONObject=o=>{const a=new Array(10),c=(d,tt)=>{if(isObject$i(d)){if(a.indexOf(d)>=0)return;if(!("toJSON"in d)){a[tt]=d;const nt=isArray$5(d)?[]:{};return forEach$3(d,($a,Ys)=>{const gu=c($a,tt+1);!isUndefined$1(gu)&&(nt[Ys]=gu)}),a[tt]=void 0,nt}}return d};return c(o,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable$4=o=>o&&(isObject$i(o)||isFunction$3(o))&&isFunction$3(o.then)&&isFunction$3(o.catch),_setImmediate=((o,a)=>o?setImmediate:a?((c,d)=>(_global.addEventListener("message",({source:tt,data:nt})=>{tt===_global&&nt===c&&d.length&&d.shift()()},!1),tt=>{d.push(tt),_global.postMessage(c,"*")}))(`axios@${Math.random()}`,[]):c=>setTimeout(c))(typeof setImmediate=="function",isFunction$3(_global.postMessage)),asap=typeof queueMicrotask<"u"?queueMicrotask.bind(_global):typeof process$1$4<"u"&&process$1$4.nextTick||_setImmediate,utils$A={isArray:isArray$5,isArrayBuffer:isArrayBuffer$1,isBuffer,isFormData,isArrayBufferView:isArrayBufferView$1,isString:isString$4,isNumber:isNumber$3,isBoolean:isBoolean$2,isObject:isObject$i,isPlainObject:isPlainObject$1,isReadableStream,isRequest:isRequest$2,isResponse,isHeaders,isUndefined:isUndefined$1,isDate:isDate$2,isFile,isBlob,isRegExp:isRegExp$4,isFunction:isFunction$3,isStream,isURLSearchParams,isTypedArray:isTypedArray$3,isFileList,forEach:forEach$3,merge:merge$3,extend,trim:trim$1,stripBOM,inherits:inherits$r,toFlatObject,kindOf,kindOfTest,endsWith:endsWith$1,toArray:toArray$3,forEachEntry,matchAll,isHTMLForm,hasOwnProperty:hasOwnProperty$6,hasOwnProp:hasOwnProperty$6,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$c,toFiniteNumber,findKey,global:_global,isContextDefined,ALPHABET:ALPHABET$3,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable:isThenable$4,setImmediate:_setImmediate,asap};var buffer$2={},base64Js={};base64Js.byteLength=byteLength;base64Js.toByteArray=toByteArray;base64Js.fromByteArray=fromByteArray;var lookup=[],revLookup=[],Arr=typeof Uint8Array<"u"?Uint8Array:Array,code$3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code$3.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var c=o.indexOf("=");c===-1&&(c=a);var d=c===a?0:4-c%4;return[c,d]}function byteLength(o){var a=getLens(o),c=a[0],d=a[1];return(c+d)*3/4-d}function _byteLength(o,a,c){return(a+c)*3/4-c}function toByteArray(o){var a,c=getLens(o),d=c[0],tt=c[1],nt=new Arr(_byteLength(o,d,tt)),$a=0,Ys=tt>0?d-4:d,gu;for(gu=0;gu>16&255,nt[$a++]=a>>8&255,nt[$a++]=a&255;return tt===2&&(a=revLookup[o.charCodeAt(gu)]<<2|revLookup[o.charCodeAt(gu+1)]>>4,nt[$a++]=a&255),tt===1&&(a=revLookup[o.charCodeAt(gu)]<<10|revLookup[o.charCodeAt(gu+1)]<<4|revLookup[o.charCodeAt(gu+2)]>>2,nt[$a++]=a>>8&255,nt[$a++]=a&255),nt}function tripletToBase64(o){return lookup[o>>18&63]+lookup[o>>12&63]+lookup[o>>6&63]+lookup[o&63]}function encodeChunk(o,a,c){for(var d,tt=[],nt=a;ntYs?Ys:$a+nt));return d===1?(a=o[c-1],tt.push(lookup[a>>2]+lookup[a<<4&63]+"==")):d===2&&(a=(o[c-2]<<8)+o[c-1],tt.push(lookup[a>>10]+lookup[a>>4&63]+lookup[a<<2&63]+"=")),tt.join("")}var ieee754$1={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ieee754$1.read=function(o,a,c,d,tt){var nt,$a,Ys=tt*8-d-1,gu=(1<>1,$u=-7,Iu=c?tt-1:0,Xu=c?-1:1,i0=o[a+Iu];for(Iu+=Xu,nt=i0&(1<<-$u)-1,i0>>=-$u,$u+=Ys;$u>0;nt=nt*256+o[a+Iu],Iu+=Xu,$u-=8);for($a=nt&(1<<-$u)-1,nt>>=-$u,$u+=d;$u>0;$a=$a*256+o[a+Iu],Iu+=Xu,$u-=8);if(nt===0)nt=1-xu;else{if(nt===gu)return $a?NaN:(i0?-1:1)*(1/0);$a=$a+Math.pow(2,d),nt=nt-xu}return(i0?-1:1)*$a*Math.pow(2,nt-d)};ieee754$1.write=function(o,a,c,d,tt,nt){var $a,Ys,gu,xu=nt*8-tt-1,$u=(1<>1,Xu=tt===23?Math.pow(2,-24)-Math.pow(2,-77):0,i0=d?0:nt-1,p0=d?1:-1,w0=a<0||a===0&&1/a<0?1:0;for(a=Math.abs(a),isNaN(a)||a===1/0?(Ys=isNaN(a)?1:0,$a=$u):($a=Math.floor(Math.log(a)/Math.LN2),a*(gu=Math.pow(2,-$a))<1&&($a--,gu*=2),$a+Iu>=1?a+=Xu/gu:a+=Xu*Math.pow(2,1-Iu),a*gu>=2&&($a++,gu/=2),$a+Iu>=$u?(Ys=0,$a=$u):$a+Iu>=1?(Ys=(a*gu-1)*Math.pow(2,tt),$a=$a+Iu):(Ys=a*Math.pow(2,Iu-1)*Math.pow(2,tt),$a=0));tt>=8;o[c+i0]=Ys&255,i0+=p0,Ys/=256,tt-=8);for($a=$a<0;o[c+i0]=$a&255,i0+=p0,$a/=256,xu-=8);o[c+i0-p0]|=w0*128};/*! + */function _extends$8(){return _extends$8=Object.assign?Object.assign.bind():function(o){for(var a=1;a=0)&&(c[tt]=o[tt]);return c}function isModifiedEvent$1(o){return!!(o.metaKey||o.altKey||o.ctrlKey||o.shiftKey)}function shouldProcessLinkClick(o,a){return o.button===0&&(!a||a==="_self")&&!isModifiedEvent$1(o)}const _excluded$8=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],REACT_ROUTER_VERSION="6";try{window.__reactRouterVersion=REACT_ROUTER_VERSION}catch{}const START_TRANSITION="startTransition",startTransitionImpl=e[START_TRANSITION];function BrowserRouter(o){let{basename:a,children:c,future:d,window:tt}=o,nt=reactExports.useRef();nt.current==null&&(nt.current=createBrowserHistory({window:tt,v5Compat:!0}));let $a=nt.current,[Ws,gu]=reactExports.useState({action:$a.action,location:$a.location}),{v7_startTransition:Su}=d||{},$u=reactExports.useCallback(Iu=>{Su&&startTransitionImpl?startTransitionImpl(()=>gu(Iu)):gu(Iu)},[gu,Su]);return reactExports.useLayoutEffect(()=>$a.listen($u),[$a,$u]),reactExports.createElement(Router,{basename:a,children:c,location:Ws.location,navigationType:Ws.action,navigator:$a,future:d})}const isBrowser=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ABSOLUTE_URL_REGEX=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Link=reactExports.forwardRef(function(a,c){let{onClick:d,relative:tt,reloadDocument:nt,replace:$a,state:Ws,target:gu,to:Su,preventScrollReset:$u,unstable_viewTransition:Iu}=a,Xu=_objectWithoutPropertiesLoose$9(a,_excluded$8),{basename:r0}=reactExports.useContext(NavigationContext),p0,y0=!1;if(typeof Su=="string"&&ABSOLUTE_URL_REGEX.test(Su)&&(p0=Su,isBrowser))try{let L0=new URL(window.location.href),V0=Su.startsWith("//")?new URL(L0.protocol+Su):new URL(Su),F0=stripBasename(V0.pathname,r0);V0.origin===L0.origin&&F0!=null?Su=F0+V0.search+V0.hash:y0=!0}catch{}let A0=useHref(Su,{relative:tt}),$0=useLinkClickHandler(Su,{replace:$a,state:Ws,target:gu,preventScrollReset:$u,relative:tt,unstable_viewTransition:Iu});function O0(L0){d&&d(L0),L0.defaultPrevented||$0(L0)}return reactExports.createElement("a",_extends$8({},Xu,{href:p0||A0,onClick:y0||nt?d:O0,ref:c,target:gu}))});var DataRouterHook;(function(o){o.UseScrollRestoration="useScrollRestoration",o.UseSubmit="useSubmit",o.UseSubmitFetcher="useSubmitFetcher",o.UseFetcher="useFetcher",o.useViewTransitionState="useViewTransitionState"})(DataRouterHook||(DataRouterHook={}));var DataRouterStateHook;(function(o){o.UseFetcher="useFetcher",o.UseFetchers="useFetchers",o.UseScrollRestoration="useScrollRestoration"})(DataRouterStateHook||(DataRouterStateHook={}));function useLinkClickHandler(o,a){let{target:c,replace:d,state:tt,preventScrollReset:nt,relative:$a,unstable_viewTransition:Ws}=a===void 0?{}:a,gu=useNavigate(),Su=useLocation(),$u=useResolvedPath(o,{relative:$a});return reactExports.useCallback(Iu=>{if(shouldProcessLinkClick(Iu,c)){Iu.preventDefault();let Xu=d!==void 0?d:createPath(Su)===createPath($u);gu(o,{replace:Xu,state:tt,preventScrollReset:nt,relative:$a,unstable_viewTransition:Ws})}},[Su,gu,$u,d,tt,c,o,nt,$a,Ws])}const global$u=globalThis||void 0||self;function getDefaultExportFromCjs(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var browser$h={exports:{}},process$7=browser$h.exports={},cachedSetTimeout,cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?cachedSetTimeout=setTimeout:cachedSetTimeout=defaultSetTimout}catch{cachedSetTimeout=defaultSetTimout}try{typeof clearTimeout=="function"?cachedClearTimeout=clearTimeout:cachedClearTimeout=defaultClearTimeout}catch{cachedClearTimeout=defaultClearTimeout}})();function runTimeout(o){if(cachedSetTimeout===setTimeout)return setTimeout(o,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(o,0);try{return cachedSetTimeout(o,0)}catch{try{return cachedSetTimeout.call(null,o,0)}catch{return cachedSetTimeout.call(this,o,0)}}}function runClearTimeout(o){if(cachedClearTimeout===clearTimeout)return clearTimeout(o);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(o);try{return cachedClearTimeout(o)}catch{try{return cachedClearTimeout.call(null,o)}catch{return cachedClearTimeout.call(this,o)}}}var queue$5=[],draining=!1,currentQueue,queueIndex=-1;function cleanUpNextTick(){!draining||!currentQueue||(draining=!1,currentQueue.length?queue$5=currentQueue.concat(queue$5):queueIndex=-1,queue$5.length&&drainQueue())}function drainQueue(){if(!draining){var o=runTimeout(cleanUpNextTick);draining=!0;for(var a=queue$5.length;a;){for(currentQueue=queue$5,queue$5=[];++queueIndex1)for(var c=1;ca=>{const c=toString$d.call(a);return o[c]||(o[c]=c.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=o=>(o=o.toLowerCase(),a=>kindOf(a)===o),typeOfTest=o=>a=>typeof a===o,{isArray:isArray$5}=Array,isUndefined$1=typeOfTest("undefined");function isBuffer(o){return o!==null&&!isUndefined$1(o)&&o.constructor!==null&&!isUndefined$1(o.constructor)&&isFunction$3(o.constructor.isBuffer)&&o.constructor.isBuffer(o)}const isArrayBuffer$1=kindOfTest("ArrayBuffer");function isArrayBufferView$1(o){let a;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?a=ArrayBuffer.isView(o):a=o&&o.buffer&&isArrayBuffer$1(o.buffer),a}const isString$4=typeOfTest("string"),isFunction$3=typeOfTest("function"),isNumber$3=typeOfTest("number"),isObject$i=o=>o!==null&&typeof o=="object",isBoolean$2=o=>o===!0||o===!1,isPlainObject$1=o=>{if(kindOf(o)!=="object")return!1;const a=getPrototypeOf$6(o);return(a===null||a===Object.prototype||Object.getPrototypeOf(a)===null)&&!(Symbol.toStringTag in o)&&!(Symbol.iterator in o)},isDate$2=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=o=>isObject$i(o)&&isFunction$3(o.pipe),isFormData=o=>{let a;return o&&(typeof FormData=="function"&&o instanceof FormData||isFunction$3(o.append)&&((a=kindOf(o))==="formdata"||a==="object"&&isFunction$3(o.toString)&&o.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),[isReadableStream,isRequest,isResponse,isHeaders]=["ReadableStream","Request","Response","Headers"].map(kindOfTest),trim$1=o=>o.trim?o.trim():o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach$3(o,a,{allOwnKeys:c=!1}={}){if(o===null||typeof o>"u")return;let d,tt;if(typeof o!="object"&&(o=[o]),isArray$5(o))for(d=0,tt=o.length;d0;)if(tt=c[d],a===tt.toLowerCase())return tt;return null}const _global=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global$u,isContextDefined=o=>!isUndefined$1(o)&&o!==_global;function merge$3(){const{caseless:o}=isContextDefined(this)&&this||{},a={},c=(d,tt)=>{const nt=o&&findKey(a,tt)||tt;isPlainObject$1(a[nt])&&isPlainObject$1(d)?a[nt]=merge$3(a[nt],d):isPlainObject$1(d)?a[nt]=merge$3({},d):isArray$5(d)?a[nt]=d.slice():a[nt]=d};for(let d=0,tt=arguments.length;d(forEach$3(a,(tt,nt)=>{c&&isFunction$3(tt)?o[nt]=bind$f(tt,c):o[nt]=tt},{allOwnKeys:d}),o),stripBOM=o=>(o.charCodeAt(0)===65279&&(o=o.slice(1)),o),inherits$r=(o,a,c,d)=>{o.prototype=Object.create(a.prototype,d),o.prototype.constructor=o,Object.defineProperty(o,"super",{value:a.prototype}),c&&Object.assign(o.prototype,c)},toFlatObject=(o,a,c,d)=>{let tt,nt,$a;const Ws={};if(a=a||{},o==null)return a;do{for(tt=Object.getOwnPropertyNames(o),nt=tt.length;nt-- >0;)$a=tt[nt],(!d||d($a,o,a))&&!Ws[$a]&&(a[$a]=o[$a],Ws[$a]=!0);o=c!==!1&&getPrototypeOf$6(o)}while(o&&(!c||c(o,a))&&o!==Object.prototype);return a},endsWith=(o,a,c)=>{o=String(o),(c===void 0||c>o.length)&&(c=o.length),c-=a.length;const d=o.indexOf(a,c);return d!==-1&&d===c},toArray$3=o=>{if(!o)return null;if(isArray$5(o))return o;let a=o.length;if(!isNumber$3(a))return null;const c=new Array(a);for(;a-- >0;)c[a]=o[a];return c},isTypedArray$3=(o=>a=>o&&a instanceof o)(typeof Uint8Array<"u"&&getPrototypeOf$6(Uint8Array)),forEachEntry=(o,a)=>{const d=(o&&o[Symbol.iterator]).call(o);let tt;for(;(tt=d.next())&&!tt.done;){const nt=tt.value;a.call(o,nt[0],nt[1])}},matchAll=(o,a)=>{let c;const d=[];for(;(c=o.exec(a))!==null;)d.push(c);return d},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=o=>o.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(c,d,tt){return d.toUpperCase()+tt}),hasOwnProperty$6=(({hasOwnProperty:o})=>(a,c)=>o.call(a,c))(Object.prototype),isRegExp$4=kindOfTest("RegExp"),reduceDescriptors=(o,a)=>{const c=Object.getOwnPropertyDescriptors(o),d={};forEach$3(c,(tt,nt)=>{let $a;($a=a(tt,nt,o))!==!1&&(d[nt]=$a||tt)}),Object.defineProperties(o,d)},freezeMethods=o=>{reduceDescriptors(o,(a,c)=>{if(isFunction$3(o)&&["arguments","caller","callee"].indexOf(c)!==-1)return!1;const d=o[c];if(isFunction$3(d)){if(a.enumerable=!1,"writable"in a){a.writable=!1;return}a.set||(a.set=()=>{throw Error("Can not rewrite read-only method '"+c+"'")})}})},toObjectSet=(o,a)=>{const c={},d=tt=>{tt.forEach(nt=>{c[nt]=!0})};return isArray$5(o)?d(o):d(String(o).split(a)),c},noop$a=()=>{},toFiniteNumber=(o,a)=>o!=null&&Number.isFinite(o=+o)?o:a,ALPHA$1="abcdefghijklmnopqrstuvwxyz",DIGIT$1="0123456789",ALPHABET$3={DIGIT:DIGIT$1,ALPHA:ALPHA$1,ALPHA_DIGIT:ALPHA$1+ALPHA$1.toUpperCase()+DIGIT$1},generateString=(o=16,a=ALPHABET$3.ALPHA_DIGIT)=>{let c="";const{length:d}=a;for(;o--;)c+=a[Math.random()*d|0];return c};function isSpecCompliantForm(o){return!!(o&&isFunction$3(o.append)&&o[Symbol.toStringTag]==="FormData"&&o[Symbol.iterator])}const toJSONObject=o=>{const a=new Array(10),c=(d,tt)=>{if(isObject$i(d)){if(a.indexOf(d)>=0)return;if(!("toJSON"in d)){a[tt]=d;const nt=isArray$5(d)?[]:{};return forEach$3(d,($a,Ws)=>{const gu=c($a,tt+1);!isUndefined$1(gu)&&(nt[Ws]=gu)}),a[tt]=void 0,nt}}return d};return c(o,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable$4=o=>o&&(isObject$i(o)||isFunction$3(o))&&isFunction$3(o.then)&&isFunction$3(o.catch),_setImmediate=((o,a)=>o?setImmediate:a?((c,d)=>(_global.addEventListener("message",({source:tt,data:nt})=>{tt===_global&&nt===c&&d.length&&d.shift()()},!1),tt=>{d.push(tt),_global.postMessage(c,"*")}))(`axios@${Math.random()}`,[]):c=>setTimeout(c))(typeof setImmediate=="function",isFunction$3(_global.postMessage)),asap=typeof queueMicrotask<"u"?queueMicrotask.bind(_global):typeof process$1$4<"u"&&process$1$4.nextTick||_setImmediate,utils$A={isArray:isArray$5,isArrayBuffer:isArrayBuffer$1,isBuffer,isFormData,isArrayBufferView:isArrayBufferView$1,isString:isString$4,isNumber:isNumber$3,isBoolean:isBoolean$2,isObject:isObject$i,isPlainObject:isPlainObject$1,isReadableStream,isRequest,isResponse,isHeaders,isUndefined:isUndefined$1,isDate:isDate$2,isFile,isBlob,isRegExp:isRegExp$4,isFunction:isFunction$3,isStream,isURLSearchParams,isTypedArray:isTypedArray$3,isFileList,forEach:forEach$3,merge:merge$3,extend,trim:trim$1,stripBOM,inherits:inherits$r,toFlatObject,kindOf,kindOfTest,endsWith,toArray:toArray$3,forEachEntry,matchAll,isHTMLForm,hasOwnProperty:hasOwnProperty$6,hasOwnProp:hasOwnProperty$6,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$a,toFiniteNumber,findKey,global:_global,isContextDefined,ALPHABET:ALPHABET$3,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable:isThenable$4,setImmediate:_setImmediate,asap};var buffer$2={},base64Js={};base64Js.byteLength=byteLength;base64Js.toByteArray=toByteArray;base64Js.fromByteArray=fromByteArray;var lookup=[],revLookup=[],Arr=typeof Uint8Array<"u"?Uint8Array:Array,code$3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code$3.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var c=o.indexOf("=");c===-1&&(c=a);var d=c===a?0:4-c%4;return[c,d]}function byteLength(o){var a=getLens(o),c=a[0],d=a[1];return(c+d)*3/4-d}function _byteLength(o,a,c){return(a+c)*3/4-c}function toByteArray(o){var a,c=getLens(o),d=c[0],tt=c[1],nt=new Arr(_byteLength(o,d,tt)),$a=0,Ws=tt>0?d-4:d,gu;for(gu=0;gu>16&255,nt[$a++]=a>>8&255,nt[$a++]=a&255;return tt===2&&(a=revLookup[o.charCodeAt(gu)]<<2|revLookup[o.charCodeAt(gu+1)]>>4,nt[$a++]=a&255),tt===1&&(a=revLookup[o.charCodeAt(gu)]<<10|revLookup[o.charCodeAt(gu+1)]<<4|revLookup[o.charCodeAt(gu+2)]>>2,nt[$a++]=a>>8&255,nt[$a++]=a&255),nt}function tripletToBase64(o){return lookup[o>>18&63]+lookup[o>>12&63]+lookup[o>>6&63]+lookup[o&63]}function encodeChunk(o,a,c){for(var d,tt=[],nt=a;ntWs?Ws:$a+nt));return d===1?(a=o[c-1],tt.push(lookup[a>>2]+lookup[a<<4&63]+"==")):d===2&&(a=(o[c-2]<<8)+o[c-1],tt.push(lookup[a>>10]+lookup[a>>4&63]+lookup[a<<2&63]+"=")),tt.join("")}var ieee754$1={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ieee754$1.read=function(o,a,c,d,tt){var nt,$a,Ws=tt*8-d-1,gu=(1<>1,$u=-7,Iu=c?tt-1:0,Xu=c?-1:1,r0=o[a+Iu];for(Iu+=Xu,nt=r0&(1<<-$u)-1,r0>>=-$u,$u+=Ws;$u>0;nt=nt*256+o[a+Iu],Iu+=Xu,$u-=8);for($a=nt&(1<<-$u)-1,nt>>=-$u,$u+=d;$u>0;$a=$a*256+o[a+Iu],Iu+=Xu,$u-=8);if(nt===0)nt=1-Su;else{if(nt===gu)return $a?NaN:(r0?-1:1)*(1/0);$a=$a+Math.pow(2,d),nt=nt-Su}return(r0?-1:1)*$a*Math.pow(2,nt-d)};ieee754$1.write=function(o,a,c,d,tt,nt){var $a,Ws,gu,Su=nt*8-tt-1,$u=(1<>1,Xu=tt===23?Math.pow(2,-24)-Math.pow(2,-77):0,r0=d?0:nt-1,p0=d?1:-1,y0=a<0||a===0&&1/a<0?1:0;for(a=Math.abs(a),isNaN(a)||a===1/0?(Ws=isNaN(a)?1:0,$a=$u):($a=Math.floor(Math.log(a)/Math.LN2),a*(gu=Math.pow(2,-$a))<1&&($a--,gu*=2),$a+Iu>=1?a+=Xu/gu:a+=Xu*Math.pow(2,1-Iu),a*gu>=2&&($a++,gu/=2),$a+Iu>=$u?(Ws=0,$a=$u):$a+Iu>=1?(Ws=(a*gu-1)*Math.pow(2,tt),$a=$a+Iu):(Ws=a*Math.pow(2,Iu-1)*Math.pow(2,tt),$a=0));tt>=8;o[c+r0]=Ws&255,r0+=p0,Ws/=256,tt-=8);for($a=$a<0;o[c+r0]=$a&255,r0+=p0,$a/=256,Su-=8);o[c+r0-p0]|=y0*128};/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */(function(o){const a=base64Js,c=ieee754$1,d=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;o.Buffer=$u,o.SlowBuffer=F0,o.INSPECT_MAX_BYTES=50;const tt=2147483647;o.kMaxLength=tt;const{Uint8Array:nt,ArrayBuffer:$a,SharedArrayBuffer:Ys}=globalThis;$u.TYPED_ARRAY_SUPPORT=gu(),!$u.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function gu(){try{const kv=new nt(1),Y1={foo:function(){return 42}};return Object.setPrototypeOf(Y1,nt.prototype),Object.setPrototypeOf(kv,Y1),kv.foo()===42}catch{return!1}}Object.defineProperty($u.prototype,"parent",{enumerable:!0,get:function(){if($u.isBuffer(this))return this.buffer}}),Object.defineProperty($u.prototype,"offset",{enumerable:!0,get:function(){if($u.isBuffer(this))return this.byteOffset}});function xu(kv){if(kv>tt)throw new RangeError('The value "'+kv+'" is invalid for option "size"');const Y1=new nt(kv);return Object.setPrototypeOf(Y1,$u.prototype),Y1}function $u(kv,Y1,tv){if(typeof kv=="number"){if(typeof Y1=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return p0(kv)}return Iu(kv,Y1,tv)}$u.poolSize=8192;function Iu(kv,Y1,tv){if(typeof kv=="string")return w0(kv,Y1);if($a.isView(kv))return $0(kv);if(kv==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof kv);if(Nw(kv,$a)||kv&&Nw(kv.buffer,$a)||typeof Ys<"u"&&(Nw(kv,Ys)||kv&&Nw(kv.buffer,Ys)))return O0(kv,Y1,tv);if(typeof kv=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const Yv=kv.valueOf&&kv.valueOf();if(Yv!=null&&Yv!==kv)return $u.from(Yv,Y1,tv);const By=L0(kv);if(By)return By;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof kv[Symbol.toPrimitive]=="function")return $u.from(kv[Symbol.toPrimitive]("string"),Y1,tv);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof kv)}$u.from=function(kv,Y1,tv){return Iu(kv,Y1,tv)},Object.setPrototypeOf($u.prototype,nt.prototype),Object.setPrototypeOf($u,nt);function Xu(kv){if(typeof kv!="number")throw new TypeError('"size" argument must be of type number');if(kv<0)throw new RangeError('The value "'+kv+'" is invalid for option "size"')}function i0(kv,Y1,tv){return Xu(kv),kv<=0?xu(kv):Y1!==void 0?typeof tv=="string"?xu(kv).fill(Y1,tv):xu(kv).fill(Y1):xu(kv)}$u.alloc=function(kv,Y1,tv){return i0(kv,Y1,tv)};function p0(kv){return Xu(kv),xu(kv<0?0:q0(kv)|0)}$u.allocUnsafe=function(kv){return p0(kv)},$u.allocUnsafeSlow=function(kv){return p0(kv)};function w0(kv,Y1){if((typeof Y1!="string"||Y1==="")&&(Y1="utf8"),!$u.isEncoding(Y1))throw new TypeError("Unknown encoding: "+Y1);const tv=u1(kv,Y1)|0;let Yv=xu(tv);const By=Yv.write(kv,Y1);return By!==tv&&(Yv=Yv.slice(0,By)),Yv}function A0(kv){const Y1=kv.length<0?0:q0(kv.length)|0,tv=xu(Y1);for(let Yv=0;Yv=tt)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+tt.toString(16)+" bytes");return kv|0}function F0(kv){return+kv!=kv&&(kv=0),$u.alloc(+kv)}$u.isBuffer=function(Y1){return Y1!=null&&Y1._isBuffer===!0&&Y1!==$u.prototype},$u.compare=function(Y1,tv){if(Nw(Y1,nt)&&(Y1=$u.from(Y1,Y1.offset,Y1.byteLength)),Nw(tv,nt)&&(tv=$u.from(tv,tv.offset,tv.byteLength)),!$u.isBuffer(Y1)||!$u.isBuffer(tv))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(Y1===tv)return 0;let Yv=Y1.length,By=tv.length;for(let Qy=0,e2=Math.min(Yv,By);QyBy.length?($u.isBuffer(e2)||(e2=$u.from(e2)),e2.copy(By,Qy)):nt.prototype.set.call(By,e2,Qy);else if($u.isBuffer(e2))e2.copy(By,Qy);else throw new TypeError('"list" argument must be an Array of Buffers');Qy+=e2.length}return By};function u1(kv,Y1){if($u.isBuffer(kv))return kv.length;if($a.isView(kv)||Nw(kv,$a))return kv.byteLength;if(typeof kv!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof kv);const tv=kv.length,Yv=arguments.length>2&&arguments[2]===!0;if(!Yv&&tv===0)return 0;let By=!1;for(;;)switch(Y1){case"ascii":case"latin1":case"binary":return tv;case"utf8":case"utf-8":return jw(kv).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return tv*2;case"hex":return tv>>>1;case"base64":return Hw(kv).length;default:if(By)return Yv?-1:jw(kv).length;Y1=(""+Y1).toLowerCase(),By=!0}}$u.byteLength=u1;function g1(kv,Y1,tv){let Yv=!1;if((Y1===void 0||Y1<0)&&(Y1=0),Y1>this.length||((tv===void 0||tv>this.length)&&(tv=this.length),tv<=0)||(tv>>>=0,Y1>>>=0,tv<=Y1))return"";for(kv||(kv="utf8");;)switch(kv){case"hex":return d1(this,Y1,tv);case"utf8":case"utf-8":return w1(this,Y1,tv);case"ascii":return G0(this,Y1,tv);case"latin1":case"binary":return o1(this,Y1,tv);case"base64":return f1(this,Y1,tv);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R1(this,Y1,tv);default:if(Yv)throw new TypeError("Unknown encoding: "+kv);kv=(kv+"").toLowerCase(),Yv=!0}}$u.prototype._isBuffer=!0;function E1(kv,Y1,tv){const Yv=kv[Y1];kv[Y1]=kv[tv],kv[tv]=Yv}$u.prototype.swap16=function(){const Y1=this.length;if(Y1%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let tv=0;tvtv&&(Y1+=" ... "),""},d&&($u.prototype[d]=$u.prototype.inspect),$u.prototype.compare=function(Y1,tv,Yv,By,Qy){if(Nw(Y1,nt)&&(Y1=$u.from(Y1,Y1.offset,Y1.byteLength)),!$u.isBuffer(Y1))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof Y1);if(tv===void 0&&(tv=0),Yv===void 0&&(Yv=Y1?Y1.length:0),By===void 0&&(By=0),Qy===void 0&&(Qy=this.length),tv<0||Yv>Y1.length||By<0||Qy>this.length)throw new RangeError("out of range index");if(By>=Qy&&tv>=Yv)return 0;if(By>=Qy)return-1;if(tv>=Yv)return 1;if(tv>>>=0,Yv>>>=0,By>>>=0,Qy>>>=0,this===Y1)return 0;let e2=Qy-By,Kw=Yv-tv;const r$=Math.min(e2,Kw),v3=this.slice(By,Qy),d$=Y1.slice(tv,Yv);for(let $2=0;$22147483647?tv=2147483647:tv<-2147483648&&(tv=-2147483648),tv=+tv,lw(tv)&&(tv=By?0:kv.length-1),tv<0&&(tv=kv.length+tv),tv>=kv.length){if(By)return-1;tv=kv.length-1}else if(tv<0)if(By)tv=0;else return-1;if(typeof Y1=="string"&&(Y1=$u.from(Y1,Yv)),$u.isBuffer(Y1))return Y1.length===0?-1:lv(kv,Y1,tv,Yv,By);if(typeof Y1=="number")return Y1=Y1&255,typeof nt.prototype.indexOf=="function"?By?nt.prototype.indexOf.call(kv,Y1,tv):nt.prototype.lastIndexOf.call(kv,Y1,tv):lv(kv,[Y1],tv,Yv,By);throw new TypeError("val must be string, number or Buffer")}function lv(kv,Y1,tv,Yv,By){let Qy=1,e2=kv.length,Kw=Y1.length;if(Yv!==void 0&&(Yv=String(Yv).toLowerCase(),Yv==="ucs2"||Yv==="ucs-2"||Yv==="utf16le"||Yv==="utf-16le")){if(kv.length<2||Y1.length<2)return-1;Qy=2,e2/=2,Kw/=2,tv/=2}function r$(d$,$2){return Qy===1?d$[$2]:d$.readUInt16BE($2*Qy)}let v3;if(By){let d$=-1;for(v3=tv;v3e2&&(tv=e2-Kw),v3=tv;v3>=0;v3--){let d$=!0;for(let $2=0;$2By&&(Yv=By)):Yv=By;const Qy=Y1.length;Yv>Qy/2&&(Yv=Qy/2);let e2;for(e2=0;e2>>0,isFinite(Yv)?(Yv=Yv>>>0,By===void 0&&(By="utf8")):(By=Yv,Yv=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const Qy=this.length-tv;if((Yv===void 0||Yv>Qy)&&(Yv=Qy),Y1.length>0&&(Yv<0||tv<0)||tv>this.length)throw new RangeError("Attempt to write outside buffer bounds");By||(By="utf8");let e2=!1;for(;;)switch(By){case"hex":return j1(this,Y1,tv,Yv);case"utf8":case"utf-8":return r1(this,Y1,tv,Yv);case"ascii":case"latin1":case"binary":return t1(this,Y1,tv,Yv);case"base64":return D0(this,Y1,tv,Yv);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Z0(this,Y1,tv,Yv);default:if(e2)throw new TypeError("Unknown encoding: "+By);By=(""+By).toLowerCase(),e2=!0}},$u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function f1(kv,Y1,tv){return Y1===0&&tv===kv.length?a.fromByteArray(kv):a.fromByteArray(kv.slice(Y1,tv))}function w1(kv,Y1,tv){tv=Math.min(kv.length,tv);const Yv=[];let By=Y1;for(;By239?4:Qy>223?3:Qy>191?2:1;if(By+Kw<=tv){let r$,v3,d$,$2;switch(Kw){case 1:Qy<128&&(e2=Qy);break;case 2:r$=kv[By+1],(r$&192)===128&&($2=(Qy&31)<<6|r$&63,$2>127&&(e2=$2));break;case 3:r$=kv[By+1],v3=kv[By+2],(r$&192)===128&&(v3&192)===128&&($2=(Qy&15)<<12|(r$&63)<<6|v3&63,$2>2047&&($2<55296||$2>57343)&&(e2=$2));break;case 4:r$=kv[By+1],v3=kv[By+2],d$=kv[By+3],(r$&192)===128&&(v3&192)===128&&(d$&192)===128&&($2=(Qy&15)<<18|(r$&63)<<12|(v3&63)<<6|d$&63,$2>65535&&$2<1114112&&(e2=$2))}}e2===null?(e2=65533,Kw=1):e2>65535&&(e2-=65536,Yv.push(e2>>>10&1023|55296),e2=56320|e2&1023),Yv.push(e2),By+=Kw}return c1(Yv)}const m1=4096;function c1(kv){const Y1=kv.length;if(Y1<=m1)return String.fromCharCode.apply(String,kv);let tv="",Yv=0;for(;YvYv)&&(tv=Yv);let By="";for(let Qy=Y1;QyYv&&(Y1=Yv),tv<0?(tv+=Yv,tv<0&&(tv=0)):tv>Yv&&(tv=Yv),tvtv)throw new RangeError("Trying to access beyond buffer length")}$u.prototype.readUintLE=$u.prototype.readUIntLE=function(Y1,tv,Yv){Y1=Y1>>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=this[Y1],Qy=1,e2=0;for(;++e2>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=this[Y1+--tv],Qy=1;for(;tv>0&&(Qy*=256);)By+=this[Y1+--tv]*Qy;return By},$u.prototype.readUint8=$u.prototype.readUInt8=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,1,this.length),this[Y1]},$u.prototype.readUint16LE=$u.prototype.readUInt16LE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,2,this.length),this[Y1]|this[Y1+1]<<8},$u.prototype.readUint16BE=$u.prototype.readUInt16BE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,2,this.length),this[Y1]<<8|this[Y1+1]},$u.prototype.readUint32LE=$u.prototype.readUInt32LE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),(this[Y1]|this[Y1+1]<<8|this[Y1+2]<<16)+this[Y1+3]*16777216},$u.prototype.readUint32BE=$u.prototype.readUInt32BE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),this[Y1]*16777216+(this[Y1+1]<<16|this[Y1+2]<<8|this[Y1+3])},$u.prototype.readBigUInt64LE=zw(function(Y1){Y1=Y1>>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=tv+this[++Y1]*2**8+this[++Y1]*2**16+this[++Y1]*2**24,Qy=this[++Y1]+this[++Y1]*2**8+this[++Y1]*2**16+Yv*2**24;return BigInt(By)+(BigInt(Qy)<>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=tv*2**24+this[++Y1]*2**16+this[++Y1]*2**8+this[++Y1],Qy=this[++Y1]*2**24+this[++Y1]*2**16+this[++Y1]*2**8+Yv;return(BigInt(By)<>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=this[Y1],Qy=1,e2=0;for(;++e2=Qy&&(By-=Math.pow(2,8*tv)),By},$u.prototype.readIntBE=function(Y1,tv,Yv){Y1=Y1>>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=tv,Qy=1,e2=this[Y1+--By];for(;By>0&&(Qy*=256);)e2+=this[Y1+--By]*Qy;return Qy*=128,e2>=Qy&&(e2-=Math.pow(2,8*tv)),e2},$u.prototype.readInt8=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,1,this.length),this[Y1]&128?(255-this[Y1]+1)*-1:this[Y1]},$u.prototype.readInt16LE=function(Y1,tv){Y1=Y1>>>0,tv||O1(Y1,2,this.length);const Yv=this[Y1]|this[Y1+1]<<8;return Yv&32768?Yv|4294901760:Yv},$u.prototype.readInt16BE=function(Y1,tv){Y1=Y1>>>0,tv||O1(Y1,2,this.length);const Yv=this[Y1+1]|this[Y1]<<8;return Yv&32768?Yv|4294901760:Yv},$u.prototype.readInt32LE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),this[Y1]|this[Y1+1]<<8|this[Y1+2]<<16|this[Y1+3]<<24},$u.prototype.readInt32BE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),this[Y1]<<24|this[Y1+1]<<16|this[Y1+2]<<8|this[Y1+3]},$u.prototype.readBigInt64LE=zw(function(Y1){Y1=Y1>>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=this[Y1+4]+this[Y1+5]*2**8+this[Y1+6]*2**16+(Yv<<24);return(BigInt(By)<>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=(tv<<24)+this[++Y1]*2**16+this[++Y1]*2**8+this[++Y1];return(BigInt(By)<>>0,tv||O1(Y1,4,this.length),c.read(this,Y1,!0,23,4)},$u.prototype.readFloatBE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),c.read(this,Y1,!1,23,4)},$u.prototype.readDoubleLE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,8,this.length),c.read(this,Y1,!0,52,8)},$u.prototype.readDoubleBE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,8,this.length),c.read(this,Y1,!1,52,8)};function Q1(kv,Y1,tv,Yv,By,Qy){if(!$u.isBuffer(kv))throw new TypeError('"buffer" argument must be a Buffer instance');if(Y1>By||Y1kv.length)throw new RangeError("Index out of range")}$u.prototype.writeUintLE=$u.prototype.writeUIntLE=function(Y1,tv,Yv,By){if(Y1=+Y1,tv=tv>>>0,Yv=Yv>>>0,!By){const Kw=Math.pow(2,8*Yv)-1;Q1(this,Y1,tv,Yv,Kw,0)}let Qy=1,e2=0;for(this[tv]=Y1&255;++e2>>0,Yv=Yv>>>0,!By){const Kw=Math.pow(2,8*Yv)-1;Q1(this,Y1,tv,Yv,Kw,0)}let Qy=Yv-1,e2=1;for(this[tv+Qy]=Y1&255;--Qy>=0&&(e2*=256);)this[tv+Qy]=Y1/e2&255;return tv+Yv},$u.prototype.writeUint8=$u.prototype.writeUInt8=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,1,255,0),this[tv]=Y1&255,tv+1},$u.prototype.writeUint16LE=$u.prototype.writeUInt16LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,65535,0),this[tv]=Y1&255,this[tv+1]=Y1>>>8,tv+2},$u.prototype.writeUint16BE=$u.prototype.writeUInt16BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,65535,0),this[tv]=Y1>>>8,this[tv+1]=Y1&255,tv+2},$u.prototype.writeUint32LE=$u.prototype.writeUInt32LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,4294967295,0),this[tv+3]=Y1>>>24,this[tv+2]=Y1>>>16,this[tv+1]=Y1>>>8,this[tv]=Y1&255,tv+4},$u.prototype.writeUint32BE=$u.prototype.writeUInt32BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,4294967295,0),this[tv]=Y1>>>24,this[tv+1]=Y1>>>16,this[tv+2]=Y1>>>8,this[tv+3]=Y1&255,tv+4};function rv(kv,Y1,tv,Yv,By){Ly(Y1,Yv,By,kv,tv,7);let Qy=Number(Y1&BigInt(4294967295));kv[tv++]=Qy,Qy=Qy>>8,kv[tv++]=Qy,Qy=Qy>>8,kv[tv++]=Qy,Qy=Qy>>8,kv[tv++]=Qy;let e2=Number(Y1>>BigInt(32)&BigInt(4294967295));return kv[tv++]=e2,e2=e2>>8,kv[tv++]=e2,e2=e2>>8,kv[tv++]=e2,e2=e2>>8,kv[tv++]=e2,tv}function D1(kv,Y1,tv,Yv,By){Ly(Y1,Yv,By,kv,tv,7);let Qy=Number(Y1&BigInt(4294967295));kv[tv+7]=Qy,Qy=Qy>>8,kv[tv+6]=Qy,Qy=Qy>>8,kv[tv+5]=Qy,Qy=Qy>>8,kv[tv+4]=Qy;let e2=Number(Y1>>BigInt(32)&BigInt(4294967295));return kv[tv+3]=e2,e2=e2>>8,kv[tv+2]=e2,e2=e2>>8,kv[tv+1]=e2,e2=e2>>8,kv[tv]=e2,tv+8}$u.prototype.writeBigUInt64LE=zw(function(Y1,tv=0){return rv(this,Y1,tv,BigInt(0),BigInt("0xffffffffffffffff"))}),$u.prototype.writeBigUInt64BE=zw(function(Y1,tv=0){return D1(this,Y1,tv,BigInt(0),BigInt("0xffffffffffffffff"))}),$u.prototype.writeIntLE=function(Y1,tv,Yv,By){if(Y1=+Y1,tv=tv>>>0,!By){const r$=Math.pow(2,8*Yv-1);Q1(this,Y1,tv,Yv,r$-1,-r$)}let Qy=0,e2=1,Kw=0;for(this[tv]=Y1&255;++Qy>0)-Kw&255;return tv+Yv},$u.prototype.writeIntBE=function(Y1,tv,Yv,By){if(Y1=+Y1,tv=tv>>>0,!By){const r$=Math.pow(2,8*Yv-1);Q1(this,Y1,tv,Yv,r$-1,-r$)}let Qy=Yv-1,e2=1,Kw=0;for(this[tv+Qy]=Y1&255;--Qy>=0&&(e2*=256);)Y1<0&&Kw===0&&this[tv+Qy+1]!==0&&(Kw=1),this[tv+Qy]=(Y1/e2>>0)-Kw&255;return tv+Yv},$u.prototype.writeInt8=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,1,127,-128),Y1<0&&(Y1=255+Y1+1),this[tv]=Y1&255,tv+1},$u.prototype.writeInt16LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,32767,-32768),this[tv]=Y1&255,this[tv+1]=Y1>>>8,tv+2},$u.prototype.writeInt16BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,32767,-32768),this[tv]=Y1>>>8,this[tv+1]=Y1&255,tv+2},$u.prototype.writeInt32LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,2147483647,-2147483648),this[tv]=Y1&255,this[tv+1]=Y1>>>8,this[tv+2]=Y1>>>16,this[tv+3]=Y1>>>24,tv+4},$u.prototype.writeInt32BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,2147483647,-2147483648),Y1<0&&(Y1=4294967295+Y1+1),this[tv]=Y1>>>24,this[tv+1]=Y1>>>16,this[tv+2]=Y1>>>8,this[tv+3]=Y1&255,tv+4},$u.prototype.writeBigInt64LE=zw(function(Y1,tv=0){return rv(this,Y1,tv,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),$u.prototype.writeBigInt64BE=zw(function(Y1,tv=0){return D1(this,Y1,tv,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function ev(kv,Y1,tv,Yv,By,Qy){if(tv+Yv>kv.length)throw new RangeError("Index out of range");if(tv<0)throw new RangeError("Index out of range")}function Mv(kv,Y1,tv,Yv,By){return Y1=+Y1,tv=tv>>>0,By||ev(kv,Y1,tv,4),c.write(kv,Y1,tv,Yv,23,4),tv+4}$u.prototype.writeFloatLE=function(Y1,tv,Yv){return Mv(this,Y1,tv,!0,Yv)},$u.prototype.writeFloatBE=function(Y1,tv,Yv){return Mv(this,Y1,tv,!1,Yv)};function Zv(kv,Y1,tv,Yv,By){return Y1=+Y1,tv=tv>>>0,By||ev(kv,Y1,tv,8),c.write(kv,Y1,tv,Yv,52,8),tv+8}$u.prototype.writeDoubleLE=function(Y1,tv,Yv){return Zv(this,Y1,tv,!0,Yv)},$u.prototype.writeDoubleBE=function(Y1,tv,Yv){return Zv(this,Y1,tv,!1,Yv)},$u.prototype.copy=function(Y1,tv,Yv,By){if(!$u.isBuffer(Y1))throw new TypeError("argument should be a Buffer");if(Yv||(Yv=0),!By&&By!==0&&(By=this.length),tv>=Y1.length&&(tv=Y1.length),tv||(tv=0),By>0&&By=this.length)throw new RangeError("Index out of range");if(By<0)throw new RangeError("sourceEnd out of bounds");By>this.length&&(By=this.length),Y1.length-tv>>0,Yv=Yv===void 0?this.length:Yv>>>0,Y1||(Y1=0);let Qy;if(typeof Y1=="number")for(Qy=tv;Qy2**32?By=ly(String(tv)):typeof tv=="bigint"&&(By=String(tv),(tv>BigInt(2)**BigInt(32)||tv<-(BigInt(2)**BigInt(32)))&&(By=ly(By)),By+="n"),Yv+=` It must be ${Y1}. Received ${By}`,Yv},RangeError);function ly(kv){let Y1="",tv=kv.length;const Yv=kv[0]==="-"?1:0;for(;tv>=Yv+4;tv-=3)Y1=`_${kv.slice(tv-3,tv)}${Y1}`;return`${kv.slice(0,tv)}${Y1}`}function Cy(kv,Y1,tv){Hy(Y1,"offset"),(kv[Y1]===void 0||kv[Y1+tv]===void 0)&&t2(Y1,kv.length-(tv+1))}function Ly(kv,Y1,tv,Yv,By,Qy){if(kv>tv||kv= 0${e2} and < 2${e2} ** ${(Qy+1)*8}${e2}`:Kw=`>= -(2${e2} ** ${(Qy+1)*8-1}${e2}) and < 2 ** ${(Qy+1)*8-1}${e2}`,new fv.ERR_OUT_OF_RANGE("value",Kw,kv)}Cy(Yv,By,Qy)}function Hy(kv,Y1){if(typeof kv!="number")throw new fv.ERR_INVALID_ARG_TYPE(Y1,"number",kv)}function t2(kv,Y1,tv){throw Math.floor(kv)!==kv?(Hy(kv,tv),new fv.ERR_OUT_OF_RANGE("offset","an integer",kv)):Y1<0?new fv.ERR_BUFFER_OUT_OF_BOUNDS:new fv.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${Y1}`,kv)}const C2=/[^+/0-9A-Za-z-_]/g;function Dy(kv){if(kv=kv.split("=")[0],kv=kv.trim().replace(C2,""),kv.length<2)return"";for(;kv.length%4!==0;)kv=kv+"=";return kv}function jw(kv,Y1){Y1=Y1||1/0;let tv;const Yv=kv.length;let By=null;const Qy=[];for(let e2=0;e255295&&tv<57344){if(!By){if(tv>56319){(Y1-=3)>-1&&Qy.push(239,191,189);continue}else if(e2+1===Yv){(Y1-=3)>-1&&Qy.push(239,191,189);continue}By=tv;continue}if(tv<56320){(Y1-=3)>-1&&Qy.push(239,191,189),By=tv;continue}tv=(By-55296<<10|tv-56320)+65536}else By&&(Y1-=3)>-1&&Qy.push(239,191,189);if(By=null,tv<128){if((Y1-=1)<0)break;Qy.push(tv)}else if(tv<2048){if((Y1-=2)<0)break;Qy.push(tv>>6|192,tv&63|128)}else if(tv<65536){if((Y1-=3)<0)break;Qy.push(tv>>12|224,tv>>6&63|128,tv&63|128)}else if(tv<1114112){if((Y1-=4)<0)break;Qy.push(tv>>18|240,tv>>12&63|128,tv>>6&63|128,tv&63|128)}else throw new Error("Invalid code point")}return Qy}function pw(kv){const Y1=[];for(let tv=0;tv>8,By=tv%256,Qy.push(By),Qy.push(Yv);return Qy}function Hw(kv){return a.toByteArray(Dy(kv))}function uw(kv,Y1,tv,Yv){let By;for(By=0;By=Y1.length||By>=kv.length);++By)Y1[By+tv]=kv[By];return By}function Nw(kv,Y1){return kv instanceof Y1||kv!=null&&kv.constructor!=null&&kv.constructor.name!=null&&kv.constructor.name===Y1.name}function lw(kv){return kv!==kv}const Lw=function(){const kv="0123456789abcdef",Y1=new Array(256);for(let tv=0;tv<16;++tv){const Yv=tv*16;for(let By=0;By<16;++By)Y1[Yv+By]=kv[tv]+kv[By]}return Y1}();function zw(kv){return typeof BigInt>"u"?A2:kv}function A2(){throw new Error("BigInt not supported")}})(buffer$2);const Buffer$C=buffer$2.Buffer,Blob$2=buffer$2.Blob,BlobOptions=buffer$2.BlobOptions,Buffer$1$1=buffer$2.Buffer,File$1=buffer$2.File,FileOptions=buffer$2.FileOptions,INSPECT_MAX_BYTES=buffer$2.INSPECT_MAX_BYTES,SlowBuffer=buffer$2.SlowBuffer,TranscodeEncoding=buffer$2.TranscodeEncoding,atob$1=buffer$2.atob,btoa$1=buffer$2.btoa,constants$7=buffer$2.constants,isAscii=buffer$2.isAscii,isUtf8=buffer$2.isUtf8,kMaxLength=buffer$2.kMaxLength,kStringMaxLength=buffer$2.kStringMaxLength,resolveObjectURL=buffer$2.resolveObjectURL,transcode=buffer$2.transcode,dist$1=Object.freeze(Object.defineProperty({__proto__:null,Blob:Blob$2,BlobOptions,Buffer:Buffer$1$1,File:File$1,FileOptions,INSPECT_MAX_BYTES,SlowBuffer,TranscodeEncoding,atob:atob$1,btoa:btoa$1,constants:constants$7,default:Buffer$C,isAscii,isUtf8,kMaxLength,kStringMaxLength,resolveObjectURL,transcode},Symbol.toStringTag,{value:"Module"}));function AxiosError$1(o,a,c,d,tt){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=o,this.name="AxiosError",a&&(this.code=a),c&&(this.config=c),d&&(this.request=d),tt&&(this.response=tt)}utils$A.inherits(AxiosError$1,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$A.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError$1.prototype,descriptors$4={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(o=>{descriptors$4[o]={value:o}});Object.defineProperties(AxiosError$1,descriptors$4);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError$1.from=(o,a,c,d,tt,nt)=>{const $a=Object.create(prototype$1);return utils$A.toFlatObject(o,$a,function(gu){return gu!==Error.prototype},Ys=>Ys!=="isAxiosError"),AxiosError$1.call($a,o.message,a,c,d,tt),$a.cause=o,$a.name=o.name,nt&&Object.assign($a,nt),$a};const httpAdapter=null;function isVisitable(o){return utils$A.isPlainObject(o)||utils$A.isArray(o)}function removeBrackets(o){return utils$A.endsWith(o,"[]")?o.slice(0,-2):o}function renderKey(o,a,c){return o?o.concat(a).map(function(tt,nt){return tt=removeBrackets(tt),!c&&nt?"["+tt+"]":tt}).join(c?".":""):a}function isFlatArray(o){return utils$A.isArray(o)&&!o.some(isVisitable)}const predicates=utils$A.toFlatObject(utils$A,{},null,function(a){return/^is[A-Z]/.test(a)});function toFormData$1(o,a,c){if(!utils$A.isObject(o))throw new TypeError("target must be an object");a=a||new FormData,c=utils$A.toFlatObject(c,{metaTokens:!0,dots:!1,indexes:!1},!1,function(w0,A0){return!utils$A.isUndefined(A0[w0])});const d=c.metaTokens,tt=c.visitor||$u,nt=c.dots,$a=c.indexes,gu=(c.Blob||typeof Blob<"u"&&Blob)&&utils$A.isSpecCompliantForm(a);if(!utils$A.isFunction(tt))throw new TypeError("visitor must be a function");function xu(p0){if(p0===null)return"";if(utils$A.isDate(p0))return p0.toISOString();if(!gu&&utils$A.isBlob(p0))throw new AxiosError$1("Blob is not supported. Use a Buffer instead.");return utils$A.isArrayBuffer(p0)||utils$A.isTypedArray(p0)?gu&&typeof Blob=="function"?new Blob([p0]):Buffer$C.from(p0):p0}function $u(p0,w0,A0){let $0=p0;if(p0&&!A0&&typeof p0=="object"){if(utils$A.endsWith(w0,"{}"))w0=d?w0:w0.slice(0,-2),p0=JSON.stringify(p0);else if(utils$A.isArray(p0)&&isFlatArray(p0)||(utils$A.isFileList(p0)||utils$A.endsWith(w0,"[]"))&&($0=utils$A.toArray(p0)))return w0=removeBrackets(w0),$0.forEach(function(L0,q0){!(utils$A.isUndefined(L0)||L0===null)&&a.append($a===!0?renderKey([w0],q0,nt):$a===null?w0:w0+"[]",xu(L0))}),!1}return isVisitable(p0)?!0:(a.append(renderKey(A0,w0,nt),xu(p0)),!1)}const Iu=[],Xu=Object.assign(predicates,{defaultVisitor:$u,convertValue:xu,isVisitable});function i0(p0,w0){if(!utils$A.isUndefined(p0)){if(Iu.indexOf(p0)!==-1)throw Error("Circular reference detected in "+w0.join("."));Iu.push(p0),utils$A.forEach(p0,function($0,O0){(!(utils$A.isUndefined($0)||$0===null)&&tt.call(a,$0,utils$A.isString(O0)?O0.trim():O0,w0,Xu))===!0&&i0($0,w0?w0.concat(O0):[O0])}),Iu.pop()}}if(!utils$A.isObject(o))throw new TypeError("data must be an object");return i0(o),a}function encode$9(o){const a={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(o).replace(/[!'()~]|%20|%00/g,function(d){return a[d]})}function AxiosURLSearchParams(o,a){this._pairs=[],o&&toFormData$1(o,this,a)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function(a,c){this._pairs.push([a,c])};prototype.toString=function(a){const c=a?function(d){return a.call(this,d,encode$9)}:encode$9;return this._pairs.map(function(tt){return c(tt[0])+"="+c(tt[1])},"").join("&")};function encode$8(o){return encodeURIComponent(o).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(o,a,c){if(!a)return o;const d=c&&c.encode||encode$8,tt=c&&c.serialize;let nt;if(tt?nt=tt(a,c):nt=utils$A.isURLSearchParams(a)?a.toString():new AxiosURLSearchParams(a,c).toString(d),nt){const $a=o.indexOf("#");$a!==-1&&(o=o.slice(0,$a)),o+=(o.indexOf("?")===-1?"?":"&")+nt}return o}class InterceptorManager{constructor(){this.handlers=[]}use(a,c,d){return this.handlers.push({fulfilled:a,rejected:c,synchronous:d?d.synchronous:!1,runWhen:d?d.runWhen:null}),this.handlers.length-1}eject(a){this.handlers[a]&&(this.handlers[a]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(a){utils$A.forEach(this.handlers,function(d){d!==null&&a(d)})}}const transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$3=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$2={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$3,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]},hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(o=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(o)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",origin=hasBrowserEnv&&window.location.href||"http://localhost",utils$z=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv,hasStandardBrowserEnv,hasStandardBrowserWebWorkerEnv,origin},Symbol.toStringTag,{value:"Module"})),platform$1={...utils$z,...platform$2};function toURLEncodedForm(o,a){return toFormData$1(o,new platform$1.classes.URLSearchParams,Object.assign({visitor:function(c,d,tt,nt){return platform$1.isNode&&utils$A.isBuffer(c)?(this.append(d,c.toString("base64")),!1):nt.defaultVisitor.apply(this,arguments)}},a))}function parsePropPath(o){return utils$A.matchAll(/\w+|\[(\w*)]/g,o).map(a=>a[0]==="[]"?"":a[1]||a[0])}function arrayToObject(o){const a={},c=Object.keys(o);let d;const tt=c.length;let nt;for(d=0;d=c.length;return $a=!$a&&utils$A.isArray(tt)?tt.length:$a,gu?(utils$A.hasOwnProp(tt,$a)?tt[$a]=[tt[$a],d]:tt[$a]=d,!Ys):((!tt[$a]||!utils$A.isObject(tt[$a]))&&(tt[$a]=[]),a(c,d,tt[$a],nt)&&utils$A.isArray(tt[$a])&&(tt[$a]=arrayToObject(tt[$a])),!Ys)}if(utils$A.isFormData(o)&&utils$A.isFunction(o.entries)){const c={};return utils$A.forEachEntry(o,(d,tt)=>{a(parsePropPath(d),tt,c,0)}),c}return null}function stringifySafely(o,a,c){if(utils$A.isString(o))try{return(a||JSON.parse)(o),utils$A.trim(o)}catch(d){if(d.name!=="SyntaxError")throw d}return(c||JSON.stringify)(o)}const defaults$1={transitional:transitionalDefaults,adapter:["xhr","http","fetch"],transformRequest:[function(a,c){const d=c.getContentType()||"",tt=d.indexOf("application/json")>-1,nt=utils$A.isObject(a);if(nt&&utils$A.isHTMLForm(a)&&(a=new FormData(a)),utils$A.isFormData(a))return tt?JSON.stringify(formDataToJSON(a)):a;if(utils$A.isArrayBuffer(a)||utils$A.isBuffer(a)||utils$A.isStream(a)||utils$A.isFile(a)||utils$A.isBlob(a)||utils$A.isReadableStream(a))return a;if(utils$A.isArrayBufferView(a))return a.buffer;if(utils$A.isURLSearchParams(a))return c.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),a.toString();let Ys;if(nt){if(d.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(a,this.formSerializer).toString();if((Ys=utils$A.isFileList(a))||d.indexOf("multipart/form-data")>-1){const gu=this.env&&this.env.FormData;return toFormData$1(Ys?{"files[]":a}:a,gu&&new gu,this.formSerializer)}}return nt||tt?(c.setContentType("application/json",!1),stringifySafely(a)):a}],transformResponse:[function(a){const c=this.transitional||defaults$1.transitional,d=c&&c.forcedJSONParsing,tt=this.responseType==="json";if(utils$A.isResponse(a)||utils$A.isReadableStream(a))return a;if(a&&utils$A.isString(a)&&(d&&!this.responseType||tt)){const $a=!(c&&c.silentJSONParsing)&&tt;try{return JSON.parse(a)}catch(Ys){if($a)throw Ys.name==="SyntaxError"?AxiosError$1.from(Ys,AxiosError$1.ERR_BAD_RESPONSE,this,null,this.response):Ys}}return a}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform$1.classes.FormData,Blob:platform$1.classes.Blob},validateStatus:function(a){return a>=200&&a<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$A.forEach(["delete","get","head","post","put","patch"],o=>{defaults$1.headers[o]={}});const ignoreDuplicateOf=utils$A.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),parseHeaders$1=o=>{const a={};let c,d,tt;return o&&o.split(` -`).forEach(function($a){tt=$a.indexOf(":"),c=$a.substring(0,tt).trim().toLowerCase(),d=$a.substring(tt+1).trim(),!(!c||a[c]&&ignoreDuplicateOf[c])&&(c==="set-cookie"?a[c]?a[c].push(d):a[c]=[d]:a[c]=a[c]?a[c]+", "+d:d)}),a},$internals=Symbol("internals");function normalizeHeader(o){return o&&String(o).trim().toLowerCase()}function normalizeValue$1(o){return o===!1||o==null?o:utils$A.isArray(o)?o.map(normalizeValue$1):String(o)}function parseTokens(o){const a=Object.create(null),c=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let d;for(;d=c.exec(o);)a[d[1]]=d[2];return a}const isValidHeaderName=o=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(o.trim());function matchHeaderValue(o,a,c,d,tt){if(utils$A.isFunction(d))return d.call(this,a,c);if(tt&&(a=c),!!utils$A.isString(a)){if(utils$A.isString(d))return a.indexOf(d)!==-1;if(utils$A.isRegExp(d))return d.test(a)}}function formatHeader(o){return o.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(a,c,d)=>c.toUpperCase()+d)}function buildAccessors(o,a){const c=utils$A.toCamelCase(" "+a);["get","set","has"].forEach(d=>{Object.defineProperty(o,d+c,{value:function(tt,nt,$a){return this[d].call(this,a,tt,nt,$a)},configurable:!0})})}let AxiosHeaders$1=class{constructor(a){a&&this.set(a)}set(a,c,d){const tt=this;function nt(Ys,gu,xu){const $u=normalizeHeader(gu);if(!$u)throw new Error("header name must be a non-empty string");const Iu=utils$A.findKey(tt,$u);(!Iu||tt[Iu]===void 0||xu===!0||xu===void 0&&tt[Iu]!==!1)&&(tt[Iu||gu]=normalizeValue$1(Ys))}const $a=(Ys,gu)=>utils$A.forEach(Ys,(xu,$u)=>nt(xu,$u,gu));if(utils$A.isPlainObject(a)||a instanceof this.constructor)$a(a,c);else if(utils$A.isString(a)&&(a=a.trim())&&!isValidHeaderName(a))$a(parseHeaders$1(a),c);else if(utils$A.isHeaders(a))for(const[Ys,gu]of a.entries())nt(gu,Ys,d);else a!=null&&nt(c,a,d);return this}get(a,c){if(a=normalizeHeader(a),a){const d=utils$A.findKey(this,a);if(d){const tt=this[d];if(!c)return tt;if(c===!0)return parseTokens(tt);if(utils$A.isFunction(c))return c.call(this,tt,d);if(utils$A.isRegExp(c))return c.exec(tt);throw new TypeError("parser must be boolean|regexp|function")}}}has(a,c){if(a=normalizeHeader(a),a){const d=utils$A.findKey(this,a);return!!(d&&this[d]!==void 0&&(!c||matchHeaderValue(this,this[d],d,c)))}return!1}delete(a,c){const d=this;let tt=!1;function nt($a){if($a=normalizeHeader($a),$a){const Ys=utils$A.findKey(d,$a);Ys&&(!c||matchHeaderValue(d,d[Ys],Ys,c))&&(delete d[Ys],tt=!0)}}return utils$A.isArray(a)?a.forEach(nt):nt(a),tt}clear(a){const c=Object.keys(this);let d=c.length,tt=!1;for(;d--;){const nt=c[d];(!a||matchHeaderValue(this,this[nt],nt,a,!0))&&(delete this[nt],tt=!0)}return tt}normalize(a){const c=this,d={};return utils$A.forEach(this,(tt,nt)=>{const $a=utils$A.findKey(d,nt);if($a){c[$a]=normalizeValue$1(tt),delete c[nt];return}const Ys=a?formatHeader(nt):String(nt).trim();Ys!==nt&&delete c[nt],c[Ys]=normalizeValue$1(tt),d[Ys]=!0}),this}concat(...a){return this.constructor.concat(this,...a)}toJSON(a){const c=Object.create(null);return utils$A.forEach(this,(d,tt)=>{d!=null&&d!==!1&&(c[tt]=a&&utils$A.isArray(d)?d.join(", "):d)}),c}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([a,c])=>a+": "+c).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(a){return a instanceof this?a:new this(a)}static concat(a,...c){const d=new this(a);return c.forEach(tt=>d.set(tt)),d}static accessor(a){const d=(this[$internals]=this[$internals]={accessors:{}}).accessors,tt=this.prototype;function nt($a){const Ys=normalizeHeader($a);d[Ys]||(buildAccessors(tt,$a),d[Ys]=!0)}return utils$A.isArray(a)?a.forEach(nt):nt(a),this}};AxiosHeaders$1.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$A.reduceDescriptors(AxiosHeaders$1.prototype,({value:o},a)=>{let c=a[0].toUpperCase()+a.slice(1);return{get:()=>o,set(d){this[c]=d}}});utils$A.freezeMethods(AxiosHeaders$1);function transformData(o,a){const c=this||defaults$1,d=a||c,tt=AxiosHeaders$1.from(d.headers);let nt=d.data;return utils$A.forEach(o,function(Ys){nt=Ys.call(c,nt,tt.normalize(),a?a.status:void 0)}),tt.normalize(),nt}function isCancel$1(o){return!!(o&&o.__CANCEL__)}function CanceledError$1(o,a,c){AxiosError$1.call(this,o??"canceled",AxiosError$1.ERR_CANCELED,a,c),this.name="CanceledError"}utils$A.inherits(CanceledError$1,AxiosError$1,{__CANCEL__:!0});function settle(o,a,c){const d=c.config.validateStatus;!c.status||!d||d(c.status)?o(c):a(new AxiosError$1("Request failed with status code "+c.status,[AxiosError$1.ERR_BAD_REQUEST,AxiosError$1.ERR_BAD_RESPONSE][Math.floor(c.status/100)-4],c.config,c.request,c))}function parseProtocol(o){const a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(o);return a&&a[1]||""}function speedometer(o,a){o=o||10;const c=new Array(o),d=new Array(o);let tt=0,nt=0,$a;return a=a!==void 0?a:1e3,function(gu){const xu=Date.now(),$u=d[nt];$a||($a=xu),c[tt]=gu,d[tt]=xu;let Iu=nt,Xu=0;for(;Iu!==tt;)Xu+=c[Iu++],Iu=Iu%o;if(tt=(tt+1)%o,tt===nt&&(nt=(nt+1)%o),xu-$a{c=$u,tt=null,nt&&(clearTimeout(nt),nt=null),o.apply(null,xu)};return[(...xu)=>{const $u=Date.now(),Iu=$u-c;Iu>=d?$a(xu,$u):(tt=xu,nt||(nt=setTimeout(()=>{nt=null,$a(tt)},d-Iu)))},()=>tt&&$a(tt)]}const progressEventReducer=(o,a,c=3)=>{let d=0;const tt=speedometer(50,250);return throttle(nt=>{const $a=nt.loaded,Ys=nt.lengthComputable?nt.total:void 0,gu=$a-d,xu=tt(gu),$u=$a<=Ys;d=$a;const Iu={loaded:$a,total:Ys,progress:Ys?$a/Ys:void 0,bytes:gu,rate:xu||void 0,estimated:xu&&Ys&&$u?(Ys-$a)/xu:void 0,event:nt,lengthComputable:Ys!=null,[a?"download":"upload"]:!0};o(Iu)},c)},progressEventDecorator=(o,a)=>{const c=o!=null;return[d=>a[0]({lengthComputable:c,total:o,loaded:d}),a[1]]},asyncDecorator=o=>(...a)=>utils$A.asap(()=>o(...a)),isURLSameOrigin=platform$1.hasStandardBrowserEnv?function(){const a=/(msie|trident)/i.test(navigator.userAgent),c=document.createElement("a");let d;function tt(nt){let $a=nt;return a&&(c.setAttribute("href",$a),$a=c.href),c.setAttribute("href",$a),{href:c.href,protocol:c.protocol?c.protocol.replace(/:$/,""):"",host:c.host,search:c.search?c.search.replace(/^\?/,""):"",hash:c.hash?c.hash.replace(/^#/,""):"",hostname:c.hostname,port:c.port,pathname:c.pathname.charAt(0)==="/"?c.pathname:"/"+c.pathname}}return d=tt(window.location.href),function($a){const Ys=utils$A.isString($a)?tt($a):$a;return Ys.protocol===d.protocol&&Ys.host===d.host}}():function(){return function(){return!0}}(),cookies=platform$1.hasStandardBrowserEnv?{write(o,a,c,d,tt,nt){const $a=[o+"="+encodeURIComponent(a)];utils$A.isNumber(c)&&$a.push("expires="+new Date(c).toGMTString()),utils$A.isString(d)&&$a.push("path="+d),utils$A.isString(tt)&&$a.push("domain="+tt),nt===!0&&$a.push("secure"),document.cookie=$a.join("; ")},read(o){const a=document.cookie.match(new RegExp("(^|;\\s*)("+o+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(o){this.write(o,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(o){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o)}function combineURLs(o,a){return a?o.replace(/\/?\/$/,"")+"/"+a.replace(/^\/+/,""):o}function buildFullPath(o,a){return o&&!isAbsoluteURL(a)?combineURLs(o,a):a}const headersToObject=o=>o instanceof AxiosHeaders$1?{...o}:o;function mergeConfig$1(o,a){a=a||{};const c={};function d(xu,$u,Iu){return utils$A.isPlainObject(xu)&&utils$A.isPlainObject($u)?utils$A.merge.call({caseless:Iu},xu,$u):utils$A.isPlainObject($u)?utils$A.merge({},$u):utils$A.isArray($u)?$u.slice():$u}function tt(xu,$u,Iu){if(utils$A.isUndefined($u)){if(!utils$A.isUndefined(xu))return d(void 0,xu,Iu)}else return d(xu,$u,Iu)}function nt(xu,$u){if(!utils$A.isUndefined($u))return d(void 0,$u)}function $a(xu,$u){if(utils$A.isUndefined($u)){if(!utils$A.isUndefined(xu))return d(void 0,xu)}else return d(void 0,$u)}function Ys(xu,$u,Iu){if(Iu in a)return d(xu,$u);if(Iu in o)return d(void 0,xu)}const gu={url:nt,method:nt,data:nt,baseURL:$a,transformRequest:$a,transformResponse:$a,paramsSerializer:$a,timeout:$a,timeoutMessage:$a,withCredentials:$a,withXSRFToken:$a,adapter:$a,responseType:$a,xsrfCookieName:$a,xsrfHeaderName:$a,onUploadProgress:$a,onDownloadProgress:$a,decompress:$a,maxContentLength:$a,maxBodyLength:$a,beforeRedirect:$a,transport:$a,httpAgent:$a,httpsAgent:$a,cancelToken:$a,socketPath:$a,responseEncoding:$a,validateStatus:Ys,headers:(xu,$u)=>tt(headersToObject(xu),headersToObject($u),!0)};return utils$A.forEach(Object.keys(Object.assign({},o,a)),function($u){const Iu=gu[$u]||tt,Xu=Iu(o[$u],a[$u],$u);utils$A.isUndefined(Xu)&&Iu!==Ys||(c[$u]=Xu)}),c}const resolveConfig=o=>{const a=mergeConfig$1({},o);let{data:c,withXSRFToken:d,xsrfHeaderName:tt,xsrfCookieName:nt,headers:$a,auth:Ys}=a;a.headers=$a=AxiosHeaders$1.from($a),a.url=buildURL(buildFullPath(a.baseURL,a.url),o.params,o.paramsSerializer),Ys&&$a.set("Authorization","Basic "+btoa((Ys.username||"")+":"+(Ys.password?unescape(encodeURIComponent(Ys.password)):"")));let gu;if(utils$A.isFormData(c)){if(platform$1.hasStandardBrowserEnv||platform$1.hasStandardBrowserWebWorkerEnv)$a.setContentType(void 0);else if((gu=$a.getContentType())!==!1){const[xu,...$u]=gu?gu.split(";").map(Iu=>Iu.trim()).filter(Boolean):[];$a.setContentType([xu||"multipart/form-data",...$u].join("; "))}}if(platform$1.hasStandardBrowserEnv&&(d&&utils$A.isFunction(d)&&(d=d(a)),d||d!==!1&&isURLSameOrigin(a.url))){const xu=tt&&nt&&cookies.read(nt);xu&&$a.set(tt,xu)}return a},isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(o){return new Promise(function(c,d){const tt=resolveConfig(o);let nt=tt.data;const $a=AxiosHeaders$1.from(tt.headers).normalize();let{responseType:Ys,onUploadProgress:gu,onDownloadProgress:xu}=tt,$u,Iu,Xu,i0,p0;function w0(){i0&&i0(),p0&&p0(),tt.cancelToken&&tt.cancelToken.unsubscribe($u),tt.signal&&tt.signal.removeEventListener("abort",$u)}let A0=new XMLHttpRequest;A0.open(tt.method.toUpperCase(),tt.url,!0),A0.timeout=tt.timeout;function $0(){if(!A0)return;const L0=AxiosHeaders$1.from("getAllResponseHeaders"in A0&&A0.getAllResponseHeaders()),F0={data:!Ys||Ys==="text"||Ys==="json"?A0.responseText:A0.response,status:A0.status,statusText:A0.statusText,headers:L0,config:o,request:A0};settle(function(g1){c(g1),w0()},function(g1){d(g1),w0()},F0),A0=null}"onloadend"in A0?A0.onloadend=$0:A0.onreadystatechange=function(){!A0||A0.readyState!==4||A0.status===0&&!(A0.responseURL&&A0.responseURL.indexOf("file:")===0)||setTimeout($0)},A0.onabort=function(){A0&&(d(new AxiosError$1("Request aborted",AxiosError$1.ECONNABORTED,o,A0)),A0=null)},A0.onerror=function(){d(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,o,A0)),A0=null},A0.ontimeout=function(){let q0=tt.timeout?"timeout of "+tt.timeout+"ms exceeded":"timeout exceeded";const F0=tt.transitional||transitionalDefaults;tt.timeoutErrorMessage&&(q0=tt.timeoutErrorMessage),d(new AxiosError$1(q0,F0.clarifyTimeoutError?AxiosError$1.ETIMEDOUT:AxiosError$1.ECONNABORTED,o,A0)),A0=null},nt===void 0&&$a.setContentType(null),"setRequestHeader"in A0&&utils$A.forEach($a.toJSON(),function(q0,F0){A0.setRequestHeader(F0,q0)}),utils$A.isUndefined(tt.withCredentials)||(A0.withCredentials=!!tt.withCredentials),Ys&&Ys!=="json"&&(A0.responseType=tt.responseType),xu&&([Xu,p0]=progressEventReducer(xu,!0),A0.addEventListener("progress",Xu)),gu&&A0.upload&&([Iu,i0]=progressEventReducer(gu),A0.upload.addEventListener("progress",Iu),A0.upload.addEventListener("loadend",i0)),(tt.cancelToken||tt.signal)&&($u=L0=>{A0&&(d(!L0||L0.type?new CanceledError$1(null,o,A0):L0),A0.abort(),A0=null)},tt.cancelToken&&tt.cancelToken.subscribe($u),tt.signal&&(tt.signal.aborted?$u():tt.signal.addEventListener("abort",$u)));const O0=parseProtocol(tt.url);if(O0&&platform$1.protocols.indexOf(O0)===-1){d(new AxiosError$1("Unsupported protocol "+O0+":",AxiosError$1.ERR_BAD_REQUEST,o));return}A0.send(nt||null)})},composeSignals=(o,a)=>{let c=new AbortController,d;const tt=function(gu){if(!d){d=!0,$a();const xu=gu instanceof Error?gu:this.reason;c.abort(xu instanceof AxiosError$1?xu:new CanceledError$1(xu instanceof Error?xu.message:xu))}};let nt=a&&setTimeout(()=>{tt(new AxiosError$1(`timeout ${a} of ms exceeded`,AxiosError$1.ETIMEDOUT))},a);const $a=()=>{o&&(nt&&clearTimeout(nt),nt=null,o.forEach(gu=>{gu&&(gu.removeEventListener?gu.removeEventListener("abort",tt):gu.unsubscribe(tt))}),o=null)};o.forEach(gu=>gu&&gu.addEventListener&&gu.addEventListener("abort",tt));const{signal:Ys}=c;return Ys.unsubscribe=$a,[Ys,()=>{nt&&clearTimeout(nt),nt=null}]},streamChunk=function*(o,a){let c=o.byteLength;if(!a||c{const nt=readBytes(o,a,tt);let $a=0,Ys,gu=xu=>{Ys||(Ys=!0,d&&d(xu))};return new ReadableStream({async pull(xu){try{const{done:$u,value:Iu}=await nt.next();if($u){gu(),xu.close();return}let Xu=Iu.byteLength;if(c){let i0=$a+=Xu;c(i0)}xu.enqueue(new Uint8Array(Iu))}catch($u){throw gu($u),$u}},cancel(xu){return gu(xu),nt.return()}},{highWaterMark:2})},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(o=>a=>o.encode(a))(new TextEncoder):async o=>new Uint8Array(await new Response(o).arrayBuffer())),test$6=(o,...a)=>{try{return!!o(...a)}catch{return!1}},supportsRequestStream=isReadableStreamSupported&&test$6(()=>{let o=!1;const a=new Request(platform$1.origin,{body:new ReadableStream,method:"POST",get duplex(){return o=!0,"half"}}).headers.has("Content-Type");return o&&!a}),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&test$6(()=>utils$A.isReadableStream(new Response("").body)),resolvers={stream:supportsResponseStream&&(o=>o.body)};isFetchSupported&&(o=>{["text","arrayBuffer","blob","formData","stream"].forEach(a=>{!resolvers[a]&&(resolvers[a]=utils$A.isFunction(o[a])?c=>c[a]():(c,d)=>{throw new AxiosError$1(`Response type '${a}' is not supported`,AxiosError$1.ERR_NOT_SUPPORT,d)})})})(new Response);const getBodyLength=async o=>{if(o==null)return 0;if(utils$A.isBlob(o))return o.size;if(utils$A.isSpecCompliantForm(o))return(await new Request(o).arrayBuffer()).byteLength;if(utils$A.isArrayBufferView(o)||utils$A.isArrayBuffer(o))return o.byteLength;if(utils$A.isURLSearchParams(o)&&(o=o+""),utils$A.isString(o))return(await encodeText(o)).byteLength},resolveBodyLength=async(o,a)=>{const c=utils$A.toFiniteNumber(o.getContentLength());return c??getBodyLength(a)},fetchAdapter=isFetchSupported&&(async o=>{let{url:a,method:c,data:d,signal:tt,cancelToken:nt,timeout:$a,onDownloadProgress:Ys,onUploadProgress:gu,responseType:xu,headers:$u,withCredentials:Iu="same-origin",fetchOptions:Xu}=resolveConfig(o);xu=xu?(xu+"").toLowerCase():"text";let[i0,p0]=tt||nt||$a?composeSignals([tt,nt],$a):[],w0,A0;const $0=()=>{!w0&&setTimeout(()=>{i0&&i0.unsubscribe()}),w0=!0};let O0;try{if(gu&&supportsRequestStream&&c!=="get"&&c!=="head"&&(O0=await resolveBodyLength($u,d))!==0){let u1=new Request(a,{method:"POST",body:d,duplex:"half"}),g1;if(utils$A.isFormData(d)&&(g1=u1.headers.get("content-type"))&&$u.setContentType(g1),u1.body){const[E1,B1]=progressEventDecorator(O0,progressEventReducer(asyncDecorator(gu)));d=trackStream(u1.body,DEFAULT_CHUNK_SIZE,E1,B1,encodeText)}}utils$A.isString(Iu)||(Iu=Iu?"include":"omit"),A0=new Request(a,{...Xu,signal:i0,method:c.toUpperCase(),headers:$u.normalize().toJSON(),body:d,duplex:"half",credentials:Iu});let L0=await fetch(A0);const q0=supportsResponseStream&&(xu==="stream"||xu==="response");if(supportsResponseStream&&(Ys||q0)){const u1={};["status","statusText","headers"].forEach(lv=>{u1[lv]=L0[lv]});const g1=utils$A.toFiniteNumber(L0.headers.get("content-length")),[E1,B1]=Ys&&progressEventDecorator(g1,progressEventReducer(asyncDecorator(Ys),!0))||[];L0=new Response(trackStream(L0.body,DEFAULT_CHUNK_SIZE,E1,()=>{B1&&B1(),q0&&$0()},encodeText),u1)}xu=xu||"text";let F0=await resolvers[utils$A.findKey(resolvers,xu)||"text"](L0,o);return!q0&&$0(),p0&&p0(),await new Promise((u1,g1)=>{settle(u1,g1,{data:F0,headers:AxiosHeaders$1.from(L0.headers),status:L0.status,statusText:L0.statusText,config:o,request:A0})})}catch(L0){throw $0(),L0&&L0.name==="TypeError"&&/fetch/i.test(L0.message)?Object.assign(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,o,A0),{cause:L0.cause||L0}):AxiosError$1.from(L0,L0&&L0.code,o,A0)}}),knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$A.forEach(knownAdapters,(o,a)=>{if(o){try{Object.defineProperty(o,"name",{value:a})}catch{}Object.defineProperty(o,"adapterName",{value:a})}});const renderReason=o=>`- ${o}`,isResolvedHandle=o=>utils$A.isFunction(o)||o===null||o===!1,adapters={getAdapter:o=>{o=utils$A.isArray(o)?o:[o];const{length:a}=o;let c,d;const tt={};for(let nt=0;nt`adapter ${Ys} `+(gu===!1?"is not supported by the environment":"is not available in the build"));let $a=a?nt.length>1?`since : + */(function(o){const a=base64Js,c=ieee754$1,d=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;o.Buffer=$u,o.SlowBuffer=F0,o.INSPECT_MAX_BYTES=50;const tt=2147483647;o.kMaxLength=tt;const{Uint8Array:nt,ArrayBuffer:$a,SharedArrayBuffer:Ws}=globalThis;$u.TYPED_ARRAY_SUPPORT=gu(),!$u.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function gu(){try{const kv=new nt(1),Y1={foo:function(){return 42}};return Object.setPrototypeOf(Y1,nt.prototype),Object.setPrototypeOf(kv,Y1),kv.foo()===42}catch{return!1}}Object.defineProperty($u.prototype,"parent",{enumerable:!0,get:function(){if($u.isBuffer(this))return this.buffer}}),Object.defineProperty($u.prototype,"offset",{enumerable:!0,get:function(){if($u.isBuffer(this))return this.byteOffset}});function Su(kv){if(kv>tt)throw new RangeError('The value "'+kv+'" is invalid for option "size"');const Y1=new nt(kv);return Object.setPrototypeOf(Y1,$u.prototype),Y1}function $u(kv,Y1,tv){if(typeof kv=="number"){if(typeof Y1=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return p0(kv)}return Iu(kv,Y1,tv)}$u.poolSize=8192;function Iu(kv,Y1,tv){if(typeof kv=="string")return y0(kv,Y1);if($a.isView(kv))return $0(kv);if(kv==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof kv);if(Nw(kv,$a)||kv&&Nw(kv.buffer,$a)||typeof Ws<"u"&&(Nw(kv,Ws)||kv&&Nw(kv.buffer,Ws)))return O0(kv,Y1,tv);if(typeof kv=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const Yv=kv.valueOf&&kv.valueOf();if(Yv!=null&&Yv!==kv)return $u.from(Yv,Y1,tv);const By=L0(kv);if(By)return By;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof kv[Symbol.toPrimitive]=="function")return $u.from(kv[Symbol.toPrimitive]("string"),Y1,tv);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof kv)}$u.from=function(kv,Y1,tv){return Iu(kv,Y1,tv)},Object.setPrototypeOf($u.prototype,nt.prototype),Object.setPrototypeOf($u,nt);function Xu(kv){if(typeof kv!="number")throw new TypeError('"size" argument must be of type number');if(kv<0)throw new RangeError('The value "'+kv+'" is invalid for option "size"')}function r0(kv,Y1,tv){return Xu(kv),kv<=0?Su(kv):Y1!==void 0?typeof tv=="string"?Su(kv).fill(Y1,tv):Su(kv).fill(Y1):Su(kv)}$u.alloc=function(kv,Y1,tv){return r0(kv,Y1,tv)};function p0(kv){return Xu(kv),Su(kv<0?0:V0(kv)|0)}$u.allocUnsafe=function(kv){return p0(kv)},$u.allocUnsafeSlow=function(kv){return p0(kv)};function y0(kv,Y1){if((typeof Y1!="string"||Y1==="")&&(Y1="utf8"),!$u.isEncoding(Y1))throw new TypeError("Unknown encoding: "+Y1);const tv=u1(kv,Y1)|0;let Yv=Su(tv);const By=Yv.write(kv,Y1);return By!==tv&&(Yv=Yv.slice(0,By)),Yv}function A0(kv){const Y1=kv.length<0?0:V0(kv.length)|0,tv=Su(Y1);for(let Yv=0;Yv=tt)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+tt.toString(16)+" bytes");return kv|0}function F0(kv){return+kv!=kv&&(kv=0),$u.alloc(+kv)}$u.isBuffer=function(Y1){return Y1!=null&&Y1._isBuffer===!0&&Y1!==$u.prototype},$u.compare=function(Y1,tv){if(Nw(Y1,nt)&&(Y1=$u.from(Y1,Y1.offset,Y1.byteLength)),Nw(tv,nt)&&(tv=$u.from(tv,tv.offset,tv.byteLength)),!$u.isBuffer(Y1)||!$u.isBuffer(tv))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(Y1===tv)return 0;let Yv=Y1.length,By=tv.length;for(let Qy=0,e2=Math.min(Yv,By);QyBy.length?($u.isBuffer(e2)||(e2=$u.from(e2)),e2.copy(By,Qy)):nt.prototype.set.call(By,e2,Qy);else if($u.isBuffer(e2))e2.copy(By,Qy);else throw new TypeError('"list" argument must be an Array of Buffers');Qy+=e2.length}return By};function u1(kv,Y1){if($u.isBuffer(kv))return kv.length;if($a.isView(kv)||Nw(kv,$a))return kv.byteLength;if(typeof kv!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof kv);const tv=kv.length,Yv=arguments.length>2&&arguments[2]===!0;if(!Yv&&tv===0)return 0;let By=!1;for(;;)switch(Y1){case"ascii":case"latin1":case"binary":return tv;case"utf8":case"utf-8":return jw(kv).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return tv*2;case"hex":return tv>>>1;case"base64":return Hw(kv).length;default:if(By)return Yv?-1:jw(kv).length;Y1=(""+Y1).toLowerCase(),By=!0}}$u.byteLength=u1;function g1(kv,Y1,tv){let Yv=!1;if((Y1===void 0||Y1<0)&&(Y1=0),Y1>this.length||((tv===void 0||tv>this.length)&&(tv=this.length),tv<=0)||(tv>>>=0,Y1>>>=0,tv<=Y1))return"";for(kv||(kv="utf8");;)switch(kv){case"hex":return d1(this,Y1,tv);case"utf8":case"utf-8":return w1(this,Y1,tv);case"ascii":return G0(this,Y1,tv);case"latin1":case"binary":return o1(this,Y1,tv);case"base64":return f1(this,Y1,tv);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R1(this,Y1,tv);default:if(Yv)throw new TypeError("Unknown encoding: "+kv);kv=(kv+"").toLowerCase(),Yv=!0}}$u.prototype._isBuffer=!0;function E1(kv,Y1,tv){const Yv=kv[Y1];kv[Y1]=kv[tv],kv[tv]=Yv}$u.prototype.swap16=function(){const Y1=this.length;if(Y1%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let tv=0;tvtv&&(Y1+=" ... "),""},d&&($u.prototype[d]=$u.prototype.inspect),$u.prototype.compare=function(Y1,tv,Yv,By,Qy){if(Nw(Y1,nt)&&(Y1=$u.from(Y1,Y1.offset,Y1.byteLength)),!$u.isBuffer(Y1))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof Y1);if(tv===void 0&&(tv=0),Yv===void 0&&(Yv=Y1?Y1.length:0),By===void 0&&(By=0),Qy===void 0&&(Qy=this.length),tv<0||Yv>Y1.length||By<0||Qy>this.length)throw new RangeError("out of range index");if(By>=Qy&&tv>=Yv)return 0;if(By>=Qy)return-1;if(tv>=Yv)return 1;if(tv>>>=0,Yv>>>=0,By>>>=0,Qy>>>=0,this===Y1)return 0;let e2=Qy-By,Kw=Yv-tv;const r$=Math.min(e2,Kw),v3=this.slice(By,Qy),d$=Y1.slice(tv,Yv);for(let $2=0;$22147483647?tv=2147483647:tv<-2147483648&&(tv=-2147483648),tv=+tv,lw(tv)&&(tv=By?0:kv.length-1),tv<0&&(tv=kv.length+tv),tv>=kv.length){if(By)return-1;tv=kv.length-1}else if(tv<0)if(By)tv=0;else return-1;if(typeof Y1=="string"&&(Y1=$u.from(Y1,Yv)),$u.isBuffer(Y1))return Y1.length===0?-1:lv(kv,Y1,tv,Yv,By);if(typeof Y1=="number")return Y1=Y1&255,typeof nt.prototype.indexOf=="function"?By?nt.prototype.indexOf.call(kv,Y1,tv):nt.prototype.lastIndexOf.call(kv,Y1,tv):lv(kv,[Y1],tv,Yv,By);throw new TypeError("val must be string, number or Buffer")}function lv(kv,Y1,tv,Yv,By){let Qy=1,e2=kv.length,Kw=Y1.length;if(Yv!==void 0&&(Yv=String(Yv).toLowerCase(),Yv==="ucs2"||Yv==="ucs-2"||Yv==="utf16le"||Yv==="utf-16le")){if(kv.length<2||Y1.length<2)return-1;Qy=2,e2/=2,Kw/=2,tv/=2}function r$(d$,$2){return Qy===1?d$[$2]:d$.readUInt16BE($2*Qy)}let v3;if(By){let d$=-1;for(v3=tv;v3e2&&(tv=e2-Kw),v3=tv;v3>=0;v3--){let d$=!0;for(let $2=0;$2By&&(Yv=By)):Yv=By;const Qy=Y1.length;Yv>Qy/2&&(Yv=Qy/2);let e2;for(e2=0;e2>>0,isFinite(Yv)?(Yv=Yv>>>0,By===void 0&&(By="utf8")):(By=Yv,Yv=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const Qy=this.length-tv;if((Yv===void 0||Yv>Qy)&&(Yv=Qy),Y1.length>0&&(Yv<0||tv<0)||tv>this.length)throw new RangeError("Attempt to write outside buffer bounds");By||(By="utf8");let e2=!1;for(;;)switch(By){case"hex":return j1(this,Y1,tv,Yv);case"utf8":case"utf-8":return r1(this,Y1,tv,Yv);case"ascii":case"latin1":case"binary":return t1(this,Y1,tv,Yv);case"base64":return D0(this,Y1,tv,Yv);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Z0(this,Y1,tv,Yv);default:if(e2)throw new TypeError("Unknown encoding: "+By);By=(""+By).toLowerCase(),e2=!0}},$u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function f1(kv,Y1,tv){return Y1===0&&tv===kv.length?a.fromByteArray(kv):a.fromByteArray(kv.slice(Y1,tv))}function w1(kv,Y1,tv){tv=Math.min(kv.length,tv);const Yv=[];let By=Y1;for(;By239?4:Qy>223?3:Qy>191?2:1;if(By+Kw<=tv){let r$,v3,d$,$2;switch(Kw){case 1:Qy<128&&(e2=Qy);break;case 2:r$=kv[By+1],(r$&192)===128&&($2=(Qy&31)<<6|r$&63,$2>127&&(e2=$2));break;case 3:r$=kv[By+1],v3=kv[By+2],(r$&192)===128&&(v3&192)===128&&($2=(Qy&15)<<12|(r$&63)<<6|v3&63,$2>2047&&($2<55296||$2>57343)&&(e2=$2));break;case 4:r$=kv[By+1],v3=kv[By+2],d$=kv[By+3],(r$&192)===128&&(v3&192)===128&&(d$&192)===128&&($2=(Qy&15)<<18|(r$&63)<<12|(v3&63)<<6|d$&63,$2>65535&&$2<1114112&&(e2=$2))}}e2===null?(e2=65533,Kw=1):e2>65535&&(e2-=65536,Yv.push(e2>>>10&1023|55296),e2=56320|e2&1023),Yv.push(e2),By+=Kw}return c1(Yv)}const m1=4096;function c1(kv){const Y1=kv.length;if(Y1<=m1)return String.fromCharCode.apply(String,kv);let tv="",Yv=0;for(;YvYv)&&(tv=Yv);let By="";for(let Qy=Y1;QyYv&&(Y1=Yv),tv<0?(tv+=Yv,tv<0&&(tv=0)):tv>Yv&&(tv=Yv),tvtv)throw new RangeError("Trying to access beyond buffer length")}$u.prototype.readUintLE=$u.prototype.readUIntLE=function(Y1,tv,Yv){Y1=Y1>>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=this[Y1],Qy=1,e2=0;for(;++e2>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=this[Y1+--tv],Qy=1;for(;tv>0&&(Qy*=256);)By+=this[Y1+--tv]*Qy;return By},$u.prototype.readUint8=$u.prototype.readUInt8=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,1,this.length),this[Y1]},$u.prototype.readUint16LE=$u.prototype.readUInt16LE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,2,this.length),this[Y1]|this[Y1+1]<<8},$u.prototype.readUint16BE=$u.prototype.readUInt16BE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,2,this.length),this[Y1]<<8|this[Y1+1]},$u.prototype.readUint32LE=$u.prototype.readUInt32LE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),(this[Y1]|this[Y1+1]<<8|this[Y1+2]<<16)+this[Y1+3]*16777216},$u.prototype.readUint32BE=$u.prototype.readUInt32BE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),this[Y1]*16777216+(this[Y1+1]<<16|this[Y1+2]<<8|this[Y1+3])},$u.prototype.readBigUInt64LE=zw(function(Y1){Y1=Y1>>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=tv+this[++Y1]*2**8+this[++Y1]*2**16+this[++Y1]*2**24,Qy=this[++Y1]+this[++Y1]*2**8+this[++Y1]*2**16+Yv*2**24;return BigInt(By)+(BigInt(Qy)<>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=tv*2**24+this[++Y1]*2**16+this[++Y1]*2**8+this[++Y1],Qy=this[++Y1]*2**24+this[++Y1]*2**16+this[++Y1]*2**8+Yv;return(BigInt(By)<>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=this[Y1],Qy=1,e2=0;for(;++e2=Qy&&(By-=Math.pow(2,8*tv)),By},$u.prototype.readIntBE=function(Y1,tv,Yv){Y1=Y1>>>0,tv=tv>>>0,Yv||O1(Y1,tv,this.length);let By=tv,Qy=1,e2=this[Y1+--By];for(;By>0&&(Qy*=256);)e2+=this[Y1+--By]*Qy;return Qy*=128,e2>=Qy&&(e2-=Math.pow(2,8*tv)),e2},$u.prototype.readInt8=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,1,this.length),this[Y1]&128?(255-this[Y1]+1)*-1:this[Y1]},$u.prototype.readInt16LE=function(Y1,tv){Y1=Y1>>>0,tv||O1(Y1,2,this.length);const Yv=this[Y1]|this[Y1+1]<<8;return Yv&32768?Yv|4294901760:Yv},$u.prototype.readInt16BE=function(Y1,tv){Y1=Y1>>>0,tv||O1(Y1,2,this.length);const Yv=this[Y1+1]|this[Y1]<<8;return Yv&32768?Yv|4294901760:Yv},$u.prototype.readInt32LE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),this[Y1]|this[Y1+1]<<8|this[Y1+2]<<16|this[Y1+3]<<24},$u.prototype.readInt32BE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),this[Y1]<<24|this[Y1+1]<<16|this[Y1+2]<<8|this[Y1+3]},$u.prototype.readBigInt64LE=zw(function(Y1){Y1=Y1>>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=this[Y1+4]+this[Y1+5]*2**8+this[Y1+6]*2**16+(Yv<<24);return(BigInt(By)<>>0,Hy(Y1,"offset");const tv=this[Y1],Yv=this[Y1+7];(tv===void 0||Yv===void 0)&&t2(Y1,this.length-8);const By=(tv<<24)+this[++Y1]*2**16+this[++Y1]*2**8+this[++Y1];return(BigInt(By)<>>0,tv||O1(Y1,4,this.length),c.read(this,Y1,!0,23,4)},$u.prototype.readFloatBE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,4,this.length),c.read(this,Y1,!1,23,4)},$u.prototype.readDoubleLE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,8,this.length),c.read(this,Y1,!0,52,8)},$u.prototype.readDoubleBE=function(Y1,tv){return Y1=Y1>>>0,tv||O1(Y1,8,this.length),c.read(this,Y1,!1,52,8)};function Q1(kv,Y1,tv,Yv,By,Qy){if(!$u.isBuffer(kv))throw new TypeError('"buffer" argument must be a Buffer instance');if(Y1>By||Y1kv.length)throw new RangeError("Index out of range")}$u.prototype.writeUintLE=$u.prototype.writeUIntLE=function(Y1,tv,Yv,By){if(Y1=+Y1,tv=tv>>>0,Yv=Yv>>>0,!By){const Kw=Math.pow(2,8*Yv)-1;Q1(this,Y1,tv,Yv,Kw,0)}let Qy=1,e2=0;for(this[tv]=Y1&255;++e2>>0,Yv=Yv>>>0,!By){const Kw=Math.pow(2,8*Yv)-1;Q1(this,Y1,tv,Yv,Kw,0)}let Qy=Yv-1,e2=1;for(this[tv+Qy]=Y1&255;--Qy>=0&&(e2*=256);)this[tv+Qy]=Y1/e2&255;return tv+Yv},$u.prototype.writeUint8=$u.prototype.writeUInt8=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,1,255,0),this[tv]=Y1&255,tv+1},$u.prototype.writeUint16LE=$u.prototype.writeUInt16LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,65535,0),this[tv]=Y1&255,this[tv+1]=Y1>>>8,tv+2},$u.prototype.writeUint16BE=$u.prototype.writeUInt16BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,65535,0),this[tv]=Y1>>>8,this[tv+1]=Y1&255,tv+2},$u.prototype.writeUint32LE=$u.prototype.writeUInt32LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,4294967295,0),this[tv+3]=Y1>>>24,this[tv+2]=Y1>>>16,this[tv+1]=Y1>>>8,this[tv]=Y1&255,tv+4},$u.prototype.writeUint32BE=$u.prototype.writeUInt32BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,4294967295,0),this[tv]=Y1>>>24,this[tv+1]=Y1>>>16,this[tv+2]=Y1>>>8,this[tv+3]=Y1&255,tv+4};function rv(kv,Y1,tv,Yv,By){Ly(Y1,Yv,By,kv,tv,7);let Qy=Number(Y1&BigInt(4294967295));kv[tv++]=Qy,Qy=Qy>>8,kv[tv++]=Qy,Qy=Qy>>8,kv[tv++]=Qy,Qy=Qy>>8,kv[tv++]=Qy;let e2=Number(Y1>>BigInt(32)&BigInt(4294967295));return kv[tv++]=e2,e2=e2>>8,kv[tv++]=e2,e2=e2>>8,kv[tv++]=e2,e2=e2>>8,kv[tv++]=e2,tv}function D1(kv,Y1,tv,Yv,By){Ly(Y1,Yv,By,kv,tv,7);let Qy=Number(Y1&BigInt(4294967295));kv[tv+7]=Qy,Qy=Qy>>8,kv[tv+6]=Qy,Qy=Qy>>8,kv[tv+5]=Qy,Qy=Qy>>8,kv[tv+4]=Qy;let e2=Number(Y1>>BigInt(32)&BigInt(4294967295));return kv[tv+3]=e2,e2=e2>>8,kv[tv+2]=e2,e2=e2>>8,kv[tv+1]=e2,e2=e2>>8,kv[tv]=e2,tv+8}$u.prototype.writeBigUInt64LE=zw(function(Y1,tv=0){return rv(this,Y1,tv,BigInt(0),BigInt("0xffffffffffffffff"))}),$u.prototype.writeBigUInt64BE=zw(function(Y1,tv=0){return D1(this,Y1,tv,BigInt(0),BigInt("0xffffffffffffffff"))}),$u.prototype.writeIntLE=function(Y1,tv,Yv,By){if(Y1=+Y1,tv=tv>>>0,!By){const r$=Math.pow(2,8*Yv-1);Q1(this,Y1,tv,Yv,r$-1,-r$)}let Qy=0,e2=1,Kw=0;for(this[tv]=Y1&255;++Qy>0)-Kw&255;return tv+Yv},$u.prototype.writeIntBE=function(Y1,tv,Yv,By){if(Y1=+Y1,tv=tv>>>0,!By){const r$=Math.pow(2,8*Yv-1);Q1(this,Y1,tv,Yv,r$-1,-r$)}let Qy=Yv-1,e2=1,Kw=0;for(this[tv+Qy]=Y1&255;--Qy>=0&&(e2*=256);)Y1<0&&Kw===0&&this[tv+Qy+1]!==0&&(Kw=1),this[tv+Qy]=(Y1/e2>>0)-Kw&255;return tv+Yv},$u.prototype.writeInt8=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,1,127,-128),Y1<0&&(Y1=255+Y1+1),this[tv]=Y1&255,tv+1},$u.prototype.writeInt16LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,32767,-32768),this[tv]=Y1&255,this[tv+1]=Y1>>>8,tv+2},$u.prototype.writeInt16BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,2,32767,-32768),this[tv]=Y1>>>8,this[tv+1]=Y1&255,tv+2},$u.prototype.writeInt32LE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,2147483647,-2147483648),this[tv]=Y1&255,this[tv+1]=Y1>>>8,this[tv+2]=Y1>>>16,this[tv+3]=Y1>>>24,tv+4},$u.prototype.writeInt32BE=function(Y1,tv,Yv){return Y1=+Y1,tv=tv>>>0,Yv||Q1(this,Y1,tv,4,2147483647,-2147483648),Y1<0&&(Y1=4294967295+Y1+1),this[tv]=Y1>>>24,this[tv+1]=Y1>>>16,this[tv+2]=Y1>>>8,this[tv+3]=Y1&255,tv+4},$u.prototype.writeBigInt64LE=zw(function(Y1,tv=0){return rv(this,Y1,tv,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),$u.prototype.writeBigInt64BE=zw(function(Y1,tv=0){return D1(this,Y1,tv,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function ev(kv,Y1,tv,Yv,By,Qy){if(tv+Yv>kv.length)throw new RangeError("Index out of range");if(tv<0)throw new RangeError("Index out of range")}function Mv(kv,Y1,tv,Yv,By){return Y1=+Y1,tv=tv>>>0,By||ev(kv,Y1,tv,4),c.write(kv,Y1,tv,Yv,23,4),tv+4}$u.prototype.writeFloatLE=function(Y1,tv,Yv){return Mv(this,Y1,tv,!0,Yv)},$u.prototype.writeFloatBE=function(Y1,tv,Yv){return Mv(this,Y1,tv,!1,Yv)};function Zv(kv,Y1,tv,Yv,By){return Y1=+Y1,tv=tv>>>0,By||ev(kv,Y1,tv,8),c.write(kv,Y1,tv,Yv,52,8),tv+8}$u.prototype.writeDoubleLE=function(Y1,tv,Yv){return Zv(this,Y1,tv,!0,Yv)},$u.prototype.writeDoubleBE=function(Y1,tv,Yv){return Zv(this,Y1,tv,!1,Yv)},$u.prototype.copy=function(Y1,tv,Yv,By){if(!$u.isBuffer(Y1))throw new TypeError("argument should be a Buffer");if(Yv||(Yv=0),!By&&By!==0&&(By=this.length),tv>=Y1.length&&(tv=Y1.length),tv||(tv=0),By>0&&By=this.length)throw new RangeError("Index out of range");if(By<0)throw new RangeError("sourceEnd out of bounds");By>this.length&&(By=this.length),Y1.length-tv>>0,Yv=Yv===void 0?this.length:Yv>>>0,Y1||(Y1=0);let Qy;if(typeof Y1=="number")for(Qy=tv;Qy2**32?By=ly(String(tv)):typeof tv=="bigint"&&(By=String(tv),(tv>BigInt(2)**BigInt(32)||tv<-(BigInt(2)**BigInt(32)))&&(By=ly(By)),By+="n"),Yv+=` It must be ${Y1}. Received ${By}`,Yv},RangeError);function ly(kv){let Y1="",tv=kv.length;const Yv=kv[0]==="-"?1:0;for(;tv>=Yv+4;tv-=3)Y1=`_${kv.slice(tv-3,tv)}${Y1}`;return`${kv.slice(0,tv)}${Y1}`}function Cy(kv,Y1,tv){Hy(Y1,"offset"),(kv[Y1]===void 0||kv[Y1+tv]===void 0)&&t2(Y1,kv.length-(tv+1))}function Ly(kv,Y1,tv,Yv,By,Qy){if(kv>tv||kv= 0${e2} and < 2${e2} ** ${(Qy+1)*8}${e2}`:Kw=`>= -(2${e2} ** ${(Qy+1)*8-1}${e2}) and < 2 ** ${(Qy+1)*8-1}${e2}`,new fv.ERR_OUT_OF_RANGE("value",Kw,kv)}Cy(Yv,By,Qy)}function Hy(kv,Y1){if(typeof kv!="number")throw new fv.ERR_INVALID_ARG_TYPE(Y1,"number",kv)}function t2(kv,Y1,tv){throw Math.floor(kv)!==kv?(Hy(kv,tv),new fv.ERR_OUT_OF_RANGE("offset","an integer",kv)):Y1<0?new fv.ERR_BUFFER_OUT_OF_BOUNDS:new fv.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${Y1}`,kv)}const C2=/[^+/0-9A-Za-z-_]/g;function Dy(kv){if(kv=kv.split("=")[0],kv=kv.trim().replace(C2,""),kv.length<2)return"";for(;kv.length%4!==0;)kv=kv+"=";return kv}function jw(kv,Y1){Y1=Y1||1/0;let tv;const Yv=kv.length;let By=null;const Qy=[];for(let e2=0;e255295&&tv<57344){if(!By){if(tv>56319){(Y1-=3)>-1&&Qy.push(239,191,189);continue}else if(e2+1===Yv){(Y1-=3)>-1&&Qy.push(239,191,189);continue}By=tv;continue}if(tv<56320){(Y1-=3)>-1&&Qy.push(239,191,189),By=tv;continue}tv=(By-55296<<10|tv-56320)+65536}else By&&(Y1-=3)>-1&&Qy.push(239,191,189);if(By=null,tv<128){if((Y1-=1)<0)break;Qy.push(tv)}else if(tv<2048){if((Y1-=2)<0)break;Qy.push(tv>>6|192,tv&63|128)}else if(tv<65536){if((Y1-=3)<0)break;Qy.push(tv>>12|224,tv>>6&63|128,tv&63|128)}else if(tv<1114112){if((Y1-=4)<0)break;Qy.push(tv>>18|240,tv>>12&63|128,tv>>6&63|128,tv&63|128)}else throw new Error("Invalid code point")}return Qy}function pw(kv){const Y1=[];for(let tv=0;tv>8,By=tv%256,Qy.push(By),Qy.push(Yv);return Qy}function Hw(kv){return a.toByteArray(Dy(kv))}function uw(kv,Y1,tv,Yv){let By;for(By=0;By=Y1.length||By>=kv.length);++By)Y1[By+tv]=kv[By];return By}function Nw(kv,Y1){return kv instanceof Y1||kv!=null&&kv.constructor!=null&&kv.constructor.name!=null&&kv.constructor.name===Y1.name}function lw(kv){return kv!==kv}const Lw=function(){const kv="0123456789abcdef",Y1=new Array(256);for(let tv=0;tv<16;++tv){const Yv=tv*16;for(let By=0;By<16;++By)Y1[Yv+By]=kv[tv]+kv[By]}return Y1}();function zw(kv){return typeof BigInt>"u"?A2:kv}function A2(){throw new Error("BigInt not supported")}})(buffer$2);const Buffer$C=buffer$2.Buffer,Blob$2=buffer$2.Blob,BlobOptions=buffer$2.BlobOptions,Buffer$1$1=buffer$2.Buffer,File$1=buffer$2.File,FileOptions=buffer$2.FileOptions,INSPECT_MAX_BYTES=buffer$2.INSPECT_MAX_BYTES,SlowBuffer=buffer$2.SlowBuffer,TranscodeEncoding=buffer$2.TranscodeEncoding,atob$1=buffer$2.atob,btoa$1=buffer$2.btoa,constants$7=buffer$2.constants,isAscii=buffer$2.isAscii,isUtf8=buffer$2.isUtf8,kMaxLength=buffer$2.kMaxLength,kStringMaxLength=buffer$2.kStringMaxLength,resolveObjectURL=buffer$2.resolveObjectURL,transcode=buffer$2.transcode,dist$1=Object.freeze(Object.defineProperty({__proto__:null,Blob:Blob$2,BlobOptions,Buffer:Buffer$1$1,File:File$1,FileOptions,INSPECT_MAX_BYTES,SlowBuffer,TranscodeEncoding,atob:atob$1,btoa:btoa$1,constants:constants$7,default:Buffer$C,isAscii,isUtf8,kMaxLength,kStringMaxLength,resolveObjectURL,transcode},Symbol.toStringTag,{value:"Module"}));function AxiosError$1(o,a,c,d,tt){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=o,this.name="AxiosError",a&&(this.code=a),c&&(this.config=c),d&&(this.request=d),tt&&(this.response=tt)}utils$A.inherits(AxiosError$1,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$A.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError$1.prototype,descriptors$4={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(o=>{descriptors$4[o]={value:o}});Object.defineProperties(AxiosError$1,descriptors$4);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError$1.from=(o,a,c,d,tt,nt)=>{const $a=Object.create(prototype$1);return utils$A.toFlatObject(o,$a,function(gu){return gu!==Error.prototype},Ws=>Ws!=="isAxiosError"),AxiosError$1.call($a,o.message,a,c,d,tt),$a.cause=o,$a.name=o.name,nt&&Object.assign($a,nt),$a};const httpAdapter=null;function isVisitable(o){return utils$A.isPlainObject(o)||utils$A.isArray(o)}function removeBrackets(o){return utils$A.endsWith(o,"[]")?o.slice(0,-2):o}function renderKey(o,a,c){return o?o.concat(a).map(function(tt,nt){return tt=removeBrackets(tt),!c&&nt?"["+tt+"]":tt}).join(c?".":""):a}function isFlatArray(o){return utils$A.isArray(o)&&!o.some(isVisitable)}const predicates=utils$A.toFlatObject(utils$A,{},null,function(a){return/^is[A-Z]/.test(a)});function toFormData$1(o,a,c){if(!utils$A.isObject(o))throw new TypeError("target must be an object");a=a||new FormData,c=utils$A.toFlatObject(c,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y0,A0){return!utils$A.isUndefined(A0[y0])});const d=c.metaTokens,tt=c.visitor||$u,nt=c.dots,$a=c.indexes,gu=(c.Blob||typeof Blob<"u"&&Blob)&&utils$A.isSpecCompliantForm(a);if(!utils$A.isFunction(tt))throw new TypeError("visitor must be a function");function Su(p0){if(p0===null)return"";if(utils$A.isDate(p0))return p0.toISOString();if(!gu&&utils$A.isBlob(p0))throw new AxiosError$1("Blob is not supported. Use a Buffer instead.");return utils$A.isArrayBuffer(p0)||utils$A.isTypedArray(p0)?gu&&typeof Blob=="function"?new Blob([p0]):Buffer$C.from(p0):p0}function $u(p0,y0,A0){let $0=p0;if(p0&&!A0&&typeof p0=="object"){if(utils$A.endsWith(y0,"{}"))y0=d?y0:y0.slice(0,-2),p0=JSON.stringify(p0);else if(utils$A.isArray(p0)&&isFlatArray(p0)||(utils$A.isFileList(p0)||utils$A.endsWith(y0,"[]"))&&($0=utils$A.toArray(p0)))return y0=removeBrackets(y0),$0.forEach(function(L0,V0){!(utils$A.isUndefined(L0)||L0===null)&&a.append($a===!0?renderKey([y0],V0,nt):$a===null?y0:y0+"[]",Su(L0))}),!1}return isVisitable(p0)?!0:(a.append(renderKey(A0,y0,nt),Su(p0)),!1)}const Iu=[],Xu=Object.assign(predicates,{defaultVisitor:$u,convertValue:Su,isVisitable});function r0(p0,y0){if(!utils$A.isUndefined(p0)){if(Iu.indexOf(p0)!==-1)throw Error("Circular reference detected in "+y0.join("."));Iu.push(p0),utils$A.forEach(p0,function($0,O0){(!(utils$A.isUndefined($0)||$0===null)&&tt.call(a,$0,utils$A.isString(O0)?O0.trim():O0,y0,Xu))===!0&&r0($0,y0?y0.concat(O0):[O0])}),Iu.pop()}}if(!utils$A.isObject(o))throw new TypeError("data must be an object");return r0(o),a}function encode$9(o){const a={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(o).replace(/[!'()~]|%20|%00/g,function(d){return a[d]})}function AxiosURLSearchParams(o,a){this._pairs=[],o&&toFormData$1(o,this,a)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function(a,c){this._pairs.push([a,c])};prototype.toString=function(a){const c=a?function(d){return a.call(this,d,encode$9)}:encode$9;return this._pairs.map(function(tt){return c(tt[0])+"="+c(tt[1])},"").join("&")};function encode$8(o){return encodeURIComponent(o).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(o,a,c){if(!a)return o;const d=c&&c.encode||encode$8,tt=c&&c.serialize;let nt;if(tt?nt=tt(a,c):nt=utils$A.isURLSearchParams(a)?a.toString():new AxiosURLSearchParams(a,c).toString(d),nt){const $a=o.indexOf("#");$a!==-1&&(o=o.slice(0,$a)),o+=(o.indexOf("?")===-1?"?":"&")+nt}return o}class InterceptorManager{constructor(){this.handlers=[]}use(a,c,d){return this.handlers.push({fulfilled:a,rejected:c,synchronous:d?d.synchronous:!1,runWhen:d?d.runWhen:null}),this.handlers.length-1}eject(a){this.handlers[a]&&(this.handlers[a]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(a){utils$A.forEach(this.handlers,function(d){d!==null&&a(d)})}}const transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$3=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$2={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$3,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]},hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(o=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(o)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",origin=hasBrowserEnv&&window.location.href||"http://localhost",utils$z=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv,hasStandardBrowserEnv,hasStandardBrowserWebWorkerEnv,origin},Symbol.toStringTag,{value:"Module"})),platform$1={...utils$z,...platform$2};function toURLEncodedForm(o,a){return toFormData$1(o,new platform$1.classes.URLSearchParams,Object.assign({visitor:function(c,d,tt,nt){return platform$1.isNode&&utils$A.isBuffer(c)?(this.append(d,c.toString("base64")),!1):nt.defaultVisitor.apply(this,arguments)}},a))}function parsePropPath(o){return utils$A.matchAll(/\w+|\[(\w*)]/g,o).map(a=>a[0]==="[]"?"":a[1]||a[0])}function arrayToObject(o){const a={},c=Object.keys(o);let d;const tt=c.length;let nt;for(d=0;d=c.length;return $a=!$a&&utils$A.isArray(tt)?tt.length:$a,gu?(utils$A.hasOwnProp(tt,$a)?tt[$a]=[tt[$a],d]:tt[$a]=d,!Ws):((!tt[$a]||!utils$A.isObject(tt[$a]))&&(tt[$a]=[]),a(c,d,tt[$a],nt)&&utils$A.isArray(tt[$a])&&(tt[$a]=arrayToObject(tt[$a])),!Ws)}if(utils$A.isFormData(o)&&utils$A.isFunction(o.entries)){const c={};return utils$A.forEachEntry(o,(d,tt)=>{a(parsePropPath(d),tt,c,0)}),c}return null}function stringifySafely(o,a,c){if(utils$A.isString(o))try{return(a||JSON.parse)(o),utils$A.trim(o)}catch(d){if(d.name!=="SyntaxError")throw d}return(c||JSON.stringify)(o)}const defaults$1={transitional:transitionalDefaults,adapter:["xhr","http","fetch"],transformRequest:[function(a,c){const d=c.getContentType()||"",tt=d.indexOf("application/json")>-1,nt=utils$A.isObject(a);if(nt&&utils$A.isHTMLForm(a)&&(a=new FormData(a)),utils$A.isFormData(a))return tt?JSON.stringify(formDataToJSON(a)):a;if(utils$A.isArrayBuffer(a)||utils$A.isBuffer(a)||utils$A.isStream(a)||utils$A.isFile(a)||utils$A.isBlob(a)||utils$A.isReadableStream(a))return a;if(utils$A.isArrayBufferView(a))return a.buffer;if(utils$A.isURLSearchParams(a))return c.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),a.toString();let Ws;if(nt){if(d.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(a,this.formSerializer).toString();if((Ws=utils$A.isFileList(a))||d.indexOf("multipart/form-data")>-1){const gu=this.env&&this.env.FormData;return toFormData$1(Ws?{"files[]":a}:a,gu&&new gu,this.formSerializer)}}return nt||tt?(c.setContentType("application/json",!1),stringifySafely(a)):a}],transformResponse:[function(a){const c=this.transitional||defaults$1.transitional,d=c&&c.forcedJSONParsing,tt=this.responseType==="json";if(utils$A.isResponse(a)||utils$A.isReadableStream(a))return a;if(a&&utils$A.isString(a)&&(d&&!this.responseType||tt)){const $a=!(c&&c.silentJSONParsing)&&tt;try{return JSON.parse(a)}catch(Ws){if($a)throw Ws.name==="SyntaxError"?AxiosError$1.from(Ws,AxiosError$1.ERR_BAD_RESPONSE,this,null,this.response):Ws}}return a}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform$1.classes.FormData,Blob:platform$1.classes.Blob},validateStatus:function(a){return a>=200&&a<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$A.forEach(["delete","get","head","post","put","patch"],o=>{defaults$1.headers[o]={}});const ignoreDuplicateOf=utils$A.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),parseHeaders$1=o=>{const a={};let c,d,tt;return o&&o.split(` +`).forEach(function($a){tt=$a.indexOf(":"),c=$a.substring(0,tt).trim().toLowerCase(),d=$a.substring(tt+1).trim(),!(!c||a[c]&&ignoreDuplicateOf[c])&&(c==="set-cookie"?a[c]?a[c].push(d):a[c]=[d]:a[c]=a[c]?a[c]+", "+d:d)}),a},$internals=Symbol("internals");function normalizeHeader(o){return o&&String(o).trim().toLowerCase()}function normalizeValue$1(o){return o===!1||o==null?o:utils$A.isArray(o)?o.map(normalizeValue$1):String(o)}function parseTokens(o){const a=Object.create(null),c=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let d;for(;d=c.exec(o);)a[d[1]]=d[2];return a}const isValidHeaderName=o=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(o.trim());function matchHeaderValue(o,a,c,d,tt){if(utils$A.isFunction(d))return d.call(this,a,c);if(tt&&(a=c),!!utils$A.isString(a)){if(utils$A.isString(d))return a.indexOf(d)!==-1;if(utils$A.isRegExp(d))return d.test(a)}}function formatHeader(o){return o.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(a,c,d)=>c.toUpperCase()+d)}function buildAccessors(o,a){const c=utils$A.toCamelCase(" "+a);["get","set","has"].forEach(d=>{Object.defineProperty(o,d+c,{value:function(tt,nt,$a){return this[d].call(this,a,tt,nt,$a)},configurable:!0})})}let AxiosHeaders$1=class{constructor(a){a&&this.set(a)}set(a,c,d){const tt=this;function nt(Ws,gu,Su){const $u=normalizeHeader(gu);if(!$u)throw new Error("header name must be a non-empty string");const Iu=utils$A.findKey(tt,$u);(!Iu||tt[Iu]===void 0||Su===!0||Su===void 0&&tt[Iu]!==!1)&&(tt[Iu||gu]=normalizeValue$1(Ws))}const $a=(Ws,gu)=>utils$A.forEach(Ws,(Su,$u)=>nt(Su,$u,gu));if(utils$A.isPlainObject(a)||a instanceof this.constructor)$a(a,c);else if(utils$A.isString(a)&&(a=a.trim())&&!isValidHeaderName(a))$a(parseHeaders$1(a),c);else if(utils$A.isHeaders(a))for(const[Ws,gu]of a.entries())nt(gu,Ws,d);else a!=null&&nt(c,a,d);return this}get(a,c){if(a=normalizeHeader(a),a){const d=utils$A.findKey(this,a);if(d){const tt=this[d];if(!c)return tt;if(c===!0)return parseTokens(tt);if(utils$A.isFunction(c))return c.call(this,tt,d);if(utils$A.isRegExp(c))return c.exec(tt);throw new TypeError("parser must be boolean|regexp|function")}}}has(a,c){if(a=normalizeHeader(a),a){const d=utils$A.findKey(this,a);return!!(d&&this[d]!==void 0&&(!c||matchHeaderValue(this,this[d],d,c)))}return!1}delete(a,c){const d=this;let tt=!1;function nt($a){if($a=normalizeHeader($a),$a){const Ws=utils$A.findKey(d,$a);Ws&&(!c||matchHeaderValue(d,d[Ws],Ws,c))&&(delete d[Ws],tt=!0)}}return utils$A.isArray(a)?a.forEach(nt):nt(a),tt}clear(a){const c=Object.keys(this);let d=c.length,tt=!1;for(;d--;){const nt=c[d];(!a||matchHeaderValue(this,this[nt],nt,a,!0))&&(delete this[nt],tt=!0)}return tt}normalize(a){const c=this,d={};return utils$A.forEach(this,(tt,nt)=>{const $a=utils$A.findKey(d,nt);if($a){c[$a]=normalizeValue$1(tt),delete c[nt];return}const Ws=a?formatHeader(nt):String(nt).trim();Ws!==nt&&delete c[nt],c[Ws]=normalizeValue$1(tt),d[Ws]=!0}),this}concat(...a){return this.constructor.concat(this,...a)}toJSON(a){const c=Object.create(null);return utils$A.forEach(this,(d,tt)=>{d!=null&&d!==!1&&(c[tt]=a&&utils$A.isArray(d)?d.join(", "):d)}),c}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([a,c])=>a+": "+c).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(a){return a instanceof this?a:new this(a)}static concat(a,...c){const d=new this(a);return c.forEach(tt=>d.set(tt)),d}static accessor(a){const d=(this[$internals]=this[$internals]={accessors:{}}).accessors,tt=this.prototype;function nt($a){const Ws=normalizeHeader($a);d[Ws]||(buildAccessors(tt,$a),d[Ws]=!0)}return utils$A.isArray(a)?a.forEach(nt):nt(a),this}};AxiosHeaders$1.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$A.reduceDescriptors(AxiosHeaders$1.prototype,({value:o},a)=>{let c=a[0].toUpperCase()+a.slice(1);return{get:()=>o,set(d){this[c]=d}}});utils$A.freezeMethods(AxiosHeaders$1);function transformData(o,a){const c=this||defaults$1,d=a||c,tt=AxiosHeaders$1.from(d.headers);let nt=d.data;return utils$A.forEach(o,function(Ws){nt=Ws.call(c,nt,tt.normalize(),a?a.status:void 0)}),tt.normalize(),nt}function isCancel$1(o){return!!(o&&o.__CANCEL__)}function CanceledError$1(o,a,c){AxiosError$1.call(this,o??"canceled",AxiosError$1.ERR_CANCELED,a,c),this.name="CanceledError"}utils$A.inherits(CanceledError$1,AxiosError$1,{__CANCEL__:!0});function settle(o,a,c){const d=c.config.validateStatus;!c.status||!d||d(c.status)?o(c):a(new AxiosError$1("Request failed with status code "+c.status,[AxiosError$1.ERR_BAD_REQUEST,AxiosError$1.ERR_BAD_RESPONSE][Math.floor(c.status/100)-4],c.config,c.request,c))}function parseProtocol(o){const a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(o);return a&&a[1]||""}function speedometer(o,a){o=o||10;const c=new Array(o),d=new Array(o);let tt=0,nt=0,$a;return a=a!==void 0?a:1e3,function(gu){const Su=Date.now(),$u=d[nt];$a||($a=Su),c[tt]=gu,d[tt]=Su;let Iu=nt,Xu=0;for(;Iu!==tt;)Xu+=c[Iu++],Iu=Iu%o;if(tt=(tt+1)%o,tt===nt&&(nt=(nt+1)%o),Su-$a{c=$u,tt=null,nt&&(clearTimeout(nt),nt=null),o.apply(null,Su)};return[(...Su)=>{const $u=Date.now(),Iu=$u-c;Iu>=d?$a(Su,$u):(tt=Su,nt||(nt=setTimeout(()=>{nt=null,$a(tt)},d-Iu)))},()=>tt&&$a(tt)]}const progressEventReducer=(o,a,c=3)=>{let d=0;const tt=speedometer(50,250);return throttle(nt=>{const $a=nt.loaded,Ws=nt.lengthComputable?nt.total:void 0,gu=$a-d,Su=tt(gu),$u=$a<=Ws;d=$a;const Iu={loaded:$a,total:Ws,progress:Ws?$a/Ws:void 0,bytes:gu,rate:Su||void 0,estimated:Su&&Ws&&$u?(Ws-$a)/Su:void 0,event:nt,lengthComputable:Ws!=null,[a?"download":"upload"]:!0};o(Iu)},c)},progressEventDecorator=(o,a)=>{const c=o!=null;return[d=>a[0]({lengthComputable:c,total:o,loaded:d}),a[1]]},asyncDecorator=o=>(...a)=>utils$A.asap(()=>o(...a)),isURLSameOrigin=platform$1.hasStandardBrowserEnv?function(){const a=/(msie|trident)/i.test(navigator.userAgent),c=document.createElement("a");let d;function tt(nt){let $a=nt;return a&&(c.setAttribute("href",$a),$a=c.href),c.setAttribute("href",$a),{href:c.href,protocol:c.protocol?c.protocol.replace(/:$/,""):"",host:c.host,search:c.search?c.search.replace(/^\?/,""):"",hash:c.hash?c.hash.replace(/^#/,""):"",hostname:c.hostname,port:c.port,pathname:c.pathname.charAt(0)==="/"?c.pathname:"/"+c.pathname}}return d=tt(window.location.href),function($a){const Ws=utils$A.isString($a)?tt($a):$a;return Ws.protocol===d.protocol&&Ws.host===d.host}}():function(){return function(){return!0}}(),cookies=platform$1.hasStandardBrowserEnv?{write(o,a,c,d,tt,nt){const $a=[o+"="+encodeURIComponent(a)];utils$A.isNumber(c)&&$a.push("expires="+new Date(c).toGMTString()),utils$A.isString(d)&&$a.push("path="+d),utils$A.isString(tt)&&$a.push("domain="+tt),nt===!0&&$a.push("secure"),document.cookie=$a.join("; ")},read(o){const a=document.cookie.match(new RegExp("(^|;\\s*)("+o+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(o){this.write(o,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(o){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o)}function combineURLs(o,a){return a?o.replace(/\/?\/$/,"")+"/"+a.replace(/^\/+/,""):o}function buildFullPath(o,a){return o&&!isAbsoluteURL(a)?combineURLs(o,a):a}const headersToObject=o=>o instanceof AxiosHeaders$1?{...o}:o;function mergeConfig$1(o,a){a=a||{};const c={};function d(Su,$u,Iu){return utils$A.isPlainObject(Su)&&utils$A.isPlainObject($u)?utils$A.merge.call({caseless:Iu},Su,$u):utils$A.isPlainObject($u)?utils$A.merge({},$u):utils$A.isArray($u)?$u.slice():$u}function tt(Su,$u,Iu){if(utils$A.isUndefined($u)){if(!utils$A.isUndefined(Su))return d(void 0,Su,Iu)}else return d(Su,$u,Iu)}function nt(Su,$u){if(!utils$A.isUndefined($u))return d(void 0,$u)}function $a(Su,$u){if(utils$A.isUndefined($u)){if(!utils$A.isUndefined(Su))return d(void 0,Su)}else return d(void 0,$u)}function Ws(Su,$u,Iu){if(Iu in a)return d(Su,$u);if(Iu in o)return d(void 0,Su)}const gu={url:nt,method:nt,data:nt,baseURL:$a,transformRequest:$a,transformResponse:$a,paramsSerializer:$a,timeout:$a,timeoutMessage:$a,withCredentials:$a,withXSRFToken:$a,adapter:$a,responseType:$a,xsrfCookieName:$a,xsrfHeaderName:$a,onUploadProgress:$a,onDownloadProgress:$a,decompress:$a,maxContentLength:$a,maxBodyLength:$a,beforeRedirect:$a,transport:$a,httpAgent:$a,httpsAgent:$a,cancelToken:$a,socketPath:$a,responseEncoding:$a,validateStatus:Ws,headers:(Su,$u)=>tt(headersToObject(Su),headersToObject($u),!0)};return utils$A.forEach(Object.keys(Object.assign({},o,a)),function($u){const Iu=gu[$u]||tt,Xu=Iu(o[$u],a[$u],$u);utils$A.isUndefined(Xu)&&Iu!==Ws||(c[$u]=Xu)}),c}const resolveConfig=o=>{const a=mergeConfig$1({},o);let{data:c,withXSRFToken:d,xsrfHeaderName:tt,xsrfCookieName:nt,headers:$a,auth:Ws}=a;a.headers=$a=AxiosHeaders$1.from($a),a.url=buildURL(buildFullPath(a.baseURL,a.url),o.params,o.paramsSerializer),Ws&&$a.set("Authorization","Basic "+btoa((Ws.username||"")+":"+(Ws.password?unescape(encodeURIComponent(Ws.password)):"")));let gu;if(utils$A.isFormData(c)){if(platform$1.hasStandardBrowserEnv||platform$1.hasStandardBrowserWebWorkerEnv)$a.setContentType(void 0);else if((gu=$a.getContentType())!==!1){const[Su,...$u]=gu?gu.split(";").map(Iu=>Iu.trim()).filter(Boolean):[];$a.setContentType([Su||"multipart/form-data",...$u].join("; "))}}if(platform$1.hasStandardBrowserEnv&&(d&&utils$A.isFunction(d)&&(d=d(a)),d||d!==!1&&isURLSameOrigin(a.url))){const Su=tt&&nt&&cookies.read(nt);Su&&$a.set(tt,Su)}return a},isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(o){return new Promise(function(c,d){const tt=resolveConfig(o);let nt=tt.data;const $a=AxiosHeaders$1.from(tt.headers).normalize();let{responseType:Ws,onUploadProgress:gu,onDownloadProgress:Su}=tt,$u,Iu,Xu,r0,p0;function y0(){r0&&r0(),p0&&p0(),tt.cancelToken&&tt.cancelToken.unsubscribe($u),tt.signal&&tt.signal.removeEventListener("abort",$u)}let A0=new XMLHttpRequest;A0.open(tt.method.toUpperCase(),tt.url,!0),A0.timeout=tt.timeout;function $0(){if(!A0)return;const L0=AxiosHeaders$1.from("getAllResponseHeaders"in A0&&A0.getAllResponseHeaders()),F0={data:!Ws||Ws==="text"||Ws==="json"?A0.responseText:A0.response,status:A0.status,statusText:A0.statusText,headers:L0,config:o,request:A0};settle(function(g1){c(g1),y0()},function(g1){d(g1),y0()},F0),A0=null}"onloadend"in A0?A0.onloadend=$0:A0.onreadystatechange=function(){!A0||A0.readyState!==4||A0.status===0&&!(A0.responseURL&&A0.responseURL.indexOf("file:")===0)||setTimeout($0)},A0.onabort=function(){A0&&(d(new AxiosError$1("Request aborted",AxiosError$1.ECONNABORTED,o,A0)),A0=null)},A0.onerror=function(){d(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,o,A0)),A0=null},A0.ontimeout=function(){let V0=tt.timeout?"timeout of "+tt.timeout+"ms exceeded":"timeout exceeded";const F0=tt.transitional||transitionalDefaults;tt.timeoutErrorMessage&&(V0=tt.timeoutErrorMessage),d(new AxiosError$1(V0,F0.clarifyTimeoutError?AxiosError$1.ETIMEDOUT:AxiosError$1.ECONNABORTED,o,A0)),A0=null},nt===void 0&&$a.setContentType(null),"setRequestHeader"in A0&&utils$A.forEach($a.toJSON(),function(V0,F0){A0.setRequestHeader(F0,V0)}),utils$A.isUndefined(tt.withCredentials)||(A0.withCredentials=!!tt.withCredentials),Ws&&Ws!=="json"&&(A0.responseType=tt.responseType),Su&&([Xu,p0]=progressEventReducer(Su,!0),A0.addEventListener("progress",Xu)),gu&&A0.upload&&([Iu,r0]=progressEventReducer(gu),A0.upload.addEventListener("progress",Iu),A0.upload.addEventListener("loadend",r0)),(tt.cancelToken||tt.signal)&&($u=L0=>{A0&&(d(!L0||L0.type?new CanceledError$1(null,o,A0):L0),A0.abort(),A0=null)},tt.cancelToken&&tt.cancelToken.subscribe($u),tt.signal&&(tt.signal.aborted?$u():tt.signal.addEventListener("abort",$u)));const O0=parseProtocol(tt.url);if(O0&&platform$1.protocols.indexOf(O0)===-1){d(new AxiosError$1("Unsupported protocol "+O0+":",AxiosError$1.ERR_BAD_REQUEST,o));return}A0.send(nt||null)})},composeSignals=(o,a)=>{let c=new AbortController,d;const tt=function(gu){if(!d){d=!0,$a();const Su=gu instanceof Error?gu:this.reason;c.abort(Su instanceof AxiosError$1?Su:new CanceledError$1(Su instanceof Error?Su.message:Su))}};let nt=a&&setTimeout(()=>{tt(new AxiosError$1(`timeout ${a} of ms exceeded`,AxiosError$1.ETIMEDOUT))},a);const $a=()=>{o&&(nt&&clearTimeout(nt),nt=null,o.forEach(gu=>{gu&&(gu.removeEventListener?gu.removeEventListener("abort",tt):gu.unsubscribe(tt))}),o=null)};o.forEach(gu=>gu&&gu.addEventListener&&gu.addEventListener("abort",tt));const{signal:Ws}=c;return Ws.unsubscribe=$a,[Ws,()=>{nt&&clearTimeout(nt),nt=null}]},streamChunk=function*(o,a){let c=o.byteLength;if(!a||c{const nt=readBytes(o,a,tt);let $a=0,Ws,gu=Su=>{Ws||(Ws=!0,d&&d(Su))};return new ReadableStream({async pull(Su){try{const{done:$u,value:Iu}=await nt.next();if($u){gu(),Su.close();return}let Xu=Iu.byteLength;if(c){let r0=$a+=Xu;c(r0)}Su.enqueue(new Uint8Array(Iu))}catch($u){throw gu($u),$u}},cancel(Su){return gu(Su),nt.return()}},{highWaterMark:2})},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(o=>a=>o.encode(a))(new TextEncoder):async o=>new Uint8Array(await new Response(o).arrayBuffer())),test$6=(o,...a)=>{try{return!!o(...a)}catch{return!1}},supportsRequestStream=isReadableStreamSupported&&test$6(()=>{let o=!1;const a=new Request(platform$1.origin,{body:new ReadableStream,method:"POST",get duplex(){return o=!0,"half"}}).headers.has("Content-Type");return o&&!a}),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&test$6(()=>utils$A.isReadableStream(new Response("").body)),resolvers={stream:supportsResponseStream&&(o=>o.body)};isFetchSupported&&(o=>{["text","arrayBuffer","blob","formData","stream"].forEach(a=>{!resolvers[a]&&(resolvers[a]=utils$A.isFunction(o[a])?c=>c[a]():(c,d)=>{throw new AxiosError$1(`Response type '${a}' is not supported`,AxiosError$1.ERR_NOT_SUPPORT,d)})})})(new Response);const getBodyLength=async o=>{if(o==null)return 0;if(utils$A.isBlob(o))return o.size;if(utils$A.isSpecCompliantForm(o))return(await new Request(o).arrayBuffer()).byteLength;if(utils$A.isArrayBufferView(o)||utils$A.isArrayBuffer(o))return o.byteLength;if(utils$A.isURLSearchParams(o)&&(o=o+""),utils$A.isString(o))return(await encodeText(o)).byteLength},resolveBodyLength=async(o,a)=>{const c=utils$A.toFiniteNumber(o.getContentLength());return c??getBodyLength(a)},fetchAdapter=isFetchSupported&&(async o=>{let{url:a,method:c,data:d,signal:tt,cancelToken:nt,timeout:$a,onDownloadProgress:Ws,onUploadProgress:gu,responseType:Su,headers:$u,withCredentials:Iu="same-origin",fetchOptions:Xu}=resolveConfig(o);Su=Su?(Su+"").toLowerCase():"text";let[r0,p0]=tt||nt||$a?composeSignals([tt,nt],$a):[],y0,A0;const $0=()=>{!y0&&setTimeout(()=>{r0&&r0.unsubscribe()}),y0=!0};let O0;try{if(gu&&supportsRequestStream&&c!=="get"&&c!=="head"&&(O0=await resolveBodyLength($u,d))!==0){let u1=new Request(a,{method:"POST",body:d,duplex:"half"}),g1;if(utils$A.isFormData(d)&&(g1=u1.headers.get("content-type"))&&$u.setContentType(g1),u1.body){const[E1,B1]=progressEventDecorator(O0,progressEventReducer(asyncDecorator(gu)));d=trackStream(u1.body,DEFAULT_CHUNK_SIZE,E1,B1,encodeText)}}utils$A.isString(Iu)||(Iu=Iu?"include":"omit"),A0=new Request(a,{...Xu,signal:r0,method:c.toUpperCase(),headers:$u.normalize().toJSON(),body:d,duplex:"half",credentials:Iu});let L0=await fetch(A0);const V0=supportsResponseStream&&(Su==="stream"||Su==="response");if(supportsResponseStream&&(Ws||V0)){const u1={};["status","statusText","headers"].forEach(lv=>{u1[lv]=L0[lv]});const g1=utils$A.toFiniteNumber(L0.headers.get("content-length")),[E1,B1]=Ws&&progressEventDecorator(g1,progressEventReducer(asyncDecorator(Ws),!0))||[];L0=new Response(trackStream(L0.body,DEFAULT_CHUNK_SIZE,E1,()=>{B1&&B1(),V0&&$0()},encodeText),u1)}Su=Su||"text";let F0=await resolvers[utils$A.findKey(resolvers,Su)||"text"](L0,o);return!V0&&$0(),p0&&p0(),await new Promise((u1,g1)=>{settle(u1,g1,{data:F0,headers:AxiosHeaders$1.from(L0.headers),status:L0.status,statusText:L0.statusText,config:o,request:A0})})}catch(L0){throw $0(),L0&&L0.name==="TypeError"&&/fetch/i.test(L0.message)?Object.assign(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,o,A0),{cause:L0.cause||L0}):AxiosError$1.from(L0,L0&&L0.code,o,A0)}}),knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$A.forEach(knownAdapters,(o,a)=>{if(o){try{Object.defineProperty(o,"name",{value:a})}catch{}Object.defineProperty(o,"adapterName",{value:a})}});const renderReason=o=>`- ${o}`,isResolvedHandle=o=>utils$A.isFunction(o)||o===null||o===!1,adapters={getAdapter:o=>{o=utils$A.isArray(o)?o:[o];const{length:a}=o;let c,d;const tt={};for(let nt=0;nt`adapter ${Ws} `+(gu===!1?"is not supported by the environment":"is not available in the build"));let $a=a?nt.length>1?`since : `+nt.map(renderReason).join(` -`):" "+renderReason(nt[0]):"as no adapter specified";throw new AxiosError$1("There is no suitable adapter to dispatch the request "+$a,"ERR_NOT_SUPPORT")}return d},adapters:knownAdapters};function throwIfCancellationRequested(o){if(o.cancelToken&&o.cancelToken.throwIfRequested(),o.signal&&o.signal.aborted)throw new CanceledError$1(null,o)}function dispatchRequest(o){return throwIfCancellationRequested(o),o.headers=AxiosHeaders$1.from(o.headers),o.data=transformData.call(o,o.transformRequest),["post","put","patch"].indexOf(o.method)!==-1&&o.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(o.adapter||defaults$1.adapter)(o).then(function(d){return throwIfCancellationRequested(o),d.data=transformData.call(o,o.transformResponse,d),d.headers=AxiosHeaders$1.from(d.headers),d},function(d){return isCancel$1(d)||(throwIfCancellationRequested(o),d&&d.response&&(d.response.data=transformData.call(o,o.transformResponse,d.response),d.response.headers=AxiosHeaders$1.from(d.response.headers))),Promise.reject(d)})}const VERSION$2="1.7.4",validators$5={};["object","boolean","number","function","string","symbol"].forEach((o,a)=>{validators$5[o]=function(d){return typeof d===o||"a"+(a<1?"n ":" ")+o}});const deprecatedWarnings={};validators$5.transitional=function(a,c,d){function tt(nt,$a){return"[Axios v"+VERSION$2+"] Transitional option '"+nt+"'"+$a+(d?". "+d:"")}return(nt,$a,Ys)=>{if(a===!1)throw new AxiosError$1(tt($a," has been removed"+(c?" in "+c:"")),AxiosError$1.ERR_DEPRECATED);return c&&!deprecatedWarnings[$a]&&(deprecatedWarnings[$a]=!0,console.warn(tt($a," has been deprecated since v"+c+" and will be removed in the near future"))),a?a(nt,$a,Ys):!0}};function assertOptions(o,a,c){if(typeof o!="object")throw new AxiosError$1("options must be an object",AxiosError$1.ERR_BAD_OPTION_VALUE);const d=Object.keys(o);let tt=d.length;for(;tt-- >0;){const nt=d[tt],$a=a[nt];if($a){const Ys=o[nt],gu=Ys===void 0||$a(Ys,nt,o);if(gu!==!0)throw new AxiosError$1("option "+nt+" must be "+gu,AxiosError$1.ERR_BAD_OPTION_VALUE);continue}if(c!==!0)throw new AxiosError$1("Unknown option "+nt,AxiosError$1.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$5},validators$4=validator.validators;let Axios$1=class{constructor(a){this.defaults=a,this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}async request(a,c){try{return await this._request(a,c)}catch(d){if(d instanceof Error){let tt;Error.captureStackTrace?Error.captureStackTrace(tt={}):tt=new Error;const nt=tt.stack?tt.stack.replace(/^.+\n/,""):"";try{d.stack?nt&&!String(d.stack).endsWith(nt.replace(/^.+\n.+\n/,""))&&(d.stack+=` -`+nt):d.stack=nt}catch{}}throw d}}_request(a,c){typeof a=="string"?(c=c||{},c.url=a):c=a||{},c=mergeConfig$1(this.defaults,c);const{transitional:d,paramsSerializer:tt,headers:nt}=c;d!==void 0&&validator.assertOptions(d,{silentJSONParsing:validators$4.transitional(validators$4.boolean),forcedJSONParsing:validators$4.transitional(validators$4.boolean),clarifyTimeoutError:validators$4.transitional(validators$4.boolean)},!1),tt!=null&&(utils$A.isFunction(tt)?c.paramsSerializer={serialize:tt}:validator.assertOptions(tt,{encode:validators$4.function,serialize:validators$4.function},!0)),c.method=(c.method||this.defaults.method||"get").toLowerCase();let $a=nt&&utils$A.merge(nt.common,nt[c.method]);nt&&utils$A.forEach(["delete","get","head","post","put","patch","common"],p0=>{delete nt[p0]}),c.headers=AxiosHeaders$1.concat($a,nt);const Ys=[];let gu=!0;this.interceptors.request.forEach(function(w0){typeof w0.runWhen=="function"&&w0.runWhen(c)===!1||(gu=gu&&w0.synchronous,Ys.unshift(w0.fulfilled,w0.rejected))});const xu=[];this.interceptors.response.forEach(function(w0){xu.push(w0.fulfilled,w0.rejected)});let $u,Iu=0,Xu;if(!gu){const p0=[dispatchRequest.bind(this),void 0];for(p0.unshift.apply(p0,Ys),p0.push.apply(p0,xu),Xu=p0.length,$u=Promise.resolve(c);Iu{if(!d._listeners)return;let nt=d._listeners.length;for(;nt-- >0;)d._listeners[nt](tt);d._listeners=null}),this.promise.then=tt=>{let nt;const $a=new Promise(Ys=>{d.subscribe(Ys),nt=Ys}).then(tt);return $a.cancel=function(){d.unsubscribe(nt)},$a},a(function(nt,$a,Ys){d.reason||(d.reason=new CanceledError$1(nt,$a,Ys),c(d.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;const c=this._listeners.indexOf(a);c!==-1&&this._listeners.splice(c,1)}static source(){let a;return{token:new Ive(function(tt){a=tt}),cancel:a}}};function spread$1(o){return function(c){return o.apply(null,c)}}function isAxiosError$1(o){return utils$A.isObject(o)&&o.isAxiosError===!0}const HttpStatusCode$1={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode$1).forEach(([o,a])=>{HttpStatusCode$1[a]=o});function createInstance(o){const a=new Axios$1(o),c=bind$f(Axios$1.prototype.request,a);return utils$A.extend(c,Axios$1.prototype,a,{allOwnKeys:!0}),utils$A.extend(c,a,null,{allOwnKeys:!0}),c.create=function(tt){return createInstance(mergeConfig$1(o,tt))},c}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError$1;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel$1;axios.VERSION=VERSION$2;axios.toFormData=toFormData$1;axios.AxiosError=AxiosError$1;axios.Cancel=axios.CanceledError;axios.all=function(a){return Promise.all(a)};axios.spread=spread$1;axios.isAxiosError=isAxiosError$1;axios.mergeConfig=mergeConfig$1;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=o=>formDataToJSON(utils$A.isHTMLForm(o)?new FormData(o):o);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const{Axios,AxiosError,CanceledError,isCancel,CancelToken,VERSION:VERSION$1,all:all$1,Cancel,isAxiosError,spread,toFormData,AxiosHeaders,HttpStatusCode,formToJSON,getAdapter,mergeConfig}=axios;class AxiosHttpClient{constructor(a,c){aw(this,"axios");aw(this,"showServerDownPopup");this.axios=a,this.showServerDownPopup=c,this.axios.interceptors.response.use(d=>d,d=>{var tt;return((tt=d.response)==null?void 0:tt.status)===401&&(window.location.href="/admin-dashboard/"),d.response||this.showServerDownPopup(),Promise.reject(d)})}async get(a,c={}){return this.request(this.axios.get(a,{headers:c}))}async post(a,c,d={}){return this.request(this.axios.post(a,c,{headers:d}))}async put(a,c,d={}){return this.request(this.axios.put(a,c,{headers:d}))}async delete(a,c={}){return this.request(this.axios.delete(a,{headers:c}))}async patch(a,c,d={}){return this.request(this.axios.patch(a,c,{headers:d}))}async head(a,c={}){return this.request(this.axios.head(a,{headers:c}))}async request(a){var c,d,tt;try{const nt=await a;return nt.config.method.toUpperCase()==="HEAD"?{data:void 0}:nt.data}catch(nt){if(nt instanceof AxiosError){if(((d=(c=nt.config)==null?void 0:c.method)==null?void 0:d.toUpperCase())==="HEAD")return{error:{code:nt.request.status,message:nt.message}};const $a=(tt=nt.response)==null?void 0:tt.data,Ys=$a.error;return!$a&&(!Ys||!Ys.message||!Ys.code)?{error:GENERIC_ERROR}:typeof $a=="string"?{error:{code:nt.request.status,message:$a}}:typeof Ys=="string"?{error:{code:nt.request.status,message:Ys}}:{error:{code:(Ys==null?void 0:Ys.code)||nt.request.status,message:Ys==null?void 0:Ys.message}}}return{error:GENERIC_ERROR}}}}const GENERIC_ERROR={code:500,message:"Something went wrong"},useMetamask$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard"},useNear$1={verifyMessageError:"Error while verifying message",missingUrlParamsError:"Missing url parameters",loginError:"Error while login",rootkeyError:"Error while adding root key",messageNotVerifiedError:"Message not verified",signMessageError:"Error while signing message",signOutError:"Failed to signing out"},useStarknet$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard",signMessageError:"Error while signing message",signOutError:"Failed to signing out",errorChangingNetwork:"Error changing network",walletNotFound:"Wallet not found",errorLogin:"Error while login"},useIcp$1={requestNodeDataError:"Error while requesting node data",errorChangingNetwork:"Error changing network",loginError:"Error while login",rootkeyError:"Error while adding root key",signMessageError:"Error while signing message"},loginPage={logoDashboardText:"Admin Dashboard",title:"Calimero Node Admin Dashboard",subtitle:"Start using Calimero by selecting your wallet.",buttonConnectText:"Connect Wallet",loginSelector:{title:"Continue with wallet",metamaskButtonText:"Metamask wallet",nearButtonText:"Near wallet",starknetButtonText:"Starknet wallet",IcpButtonText:"Internet Computer"},nearLogin:{title:"Login with NEAR",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},IcpLogin:{title:"Login with Internet Identity",subtitle:"Choose from which account you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backToLoginPage:"Back to login page"},metamaskLogin:{titleLogin:"Login with Metamask",titleRootKey:"Add Metamask root key",subtitle:"Choose which account from your wallet you want to log in with",authButtonText:"Sign authentication transaction",errorTitleText:"Error signing message",backButtonText:"Back to wallet selector"},starknetLogin:{title:"Login with Starknet",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector",argentXButton:"Login with ArgentX",metamaskButton:"Login with MetaMask",titleRootKey:"Add Starknet root key",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"}},addRootKeyPage={nearRootKey:{title:"Add NEAR root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Add root key",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},starknetRootKey:{title:"Add Starknet root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",argentXButton:"Add root key with ArgentX",metamaskButton:"Add root key with MetaMask",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"},IcpKey:{title:"Add Internet Identity root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",authButtonText:"Add root key",backToLoginPage:"Back to login selector"}},footer={title:"Calimero Network"},navigation={logoDashboardText:"Admin Dashboard",pkTest:"Public Key"},applicationsPage={applicationsTable:{title:"Applications",publishNewAppText:"Publish new application",noAvailableAppsText:"No applications available",noAvailableReleasesText:"No available releases",noInstalledAppsText:"No installed applications",noOwnedAppsText:"No owned applications",installNewAppText:"install new application",actionDialog:{title:"Uninstall Application",subtitle:"Are you sure you want to uninstall this application? This action cannot be undone.",buttonActionText:"Uninstall"}},installApplication:{title:"Install Application",backButtonText:"Back to Applications",selectAppLabel:"Select Application to Install",dropdownPlaceholder:"Applications",packageDetailsLabel:"Package Details",releaseSelectionLabel:"Select Application Release",releaseDetailsLabel:"Release Details",installErrorTitle:"Failed to install application",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",installButtonText:"Install application",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",failInstallTitle:"Error installing application",successInstallTitle:"Application installed successfully"},publishApplication:{title:"Publish new application",addAccountButtonText:"Add wallet account",connectAccountTitle:"Connect owner account",connectAccountSubtitle:"Owner account is holder of application and only that account can publish new releases.",connectAccountButtonText:"Connect account",buttonText:"Publish"},addRelease:{title:"Add new release",buttonText:"Publish",latestReleaseText:"Latest application version is : "}},confirmWallet={logoText:"Admin Dashboard",title:"Confirm Wallet",accountIdText:"Account Id",signatureText:"Signature",publicKeyText:"PublicKey",callbackUrlText:"Callback Url",submitButtonText:"Submit Request",backButtonText:"Back to login"},keysPage={title:"Keys"},keysTable={noKeysText:"No keys found in the node.",headerPkText:"Public Key",headerTypeText:"Type",badgeActiveText:"Active",badgeRevokedText:"Revoked",setActiveText:"Set Active",revokeKeyText:"Revoke Key",addNewText:"Add new Key"},uploadPage={title:"Upload Application",walletButtonText:"Add wallet account",switchPackageText:"Add Package",switchReleaseText:"Add Release"},uploadApplication={title:"Add Release",subtitle:"To install the application first upload the application wasm to the IPFS, select the package you want to add the release for and fill the release details.",uploadIpfsTitle:"IPFS Application upload",inputLabelText:"Select Application .wasm file to upload",buttonUploadLabel:"Upload wasm",buttonUploadText:"Upload",cidLabelText:"File IPFS CID",backButtonText:"Back",releaseTitle:"Add new release",nameLabelText:"Name",pathLabelText:"Path",versionLabelText:"Version",notesLabelText:"Notes",hashLabelText:"Hash",buttonAddReleaseText:"Add Release",versionPlaceholder:"1.0.0",notesPlaceholder:"Initial release",hashPlaceholder:"QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7",addReleaseButtonText:"Add Release",loginLableText:"To Deploy new release, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account",selectPackageLabel:"Select Package",pathPlaceholder:"url to the wasm file"},addPackageForm={title:"Add application details",subtitle:"To successfully install the application, first you need to add the package details and procceed to add relase.",nameLabelText:"Package Name",repositoryLabelText:"Repository URL",descriptionLabelText:"Description",buttonAddPackageText:"Add Package",buttonNextText:"Next",namePlaceholder:"chat-application",repositoryPlaceholder:"https://github.com/",descriptionPlaceholder:"A chat application built for P2P network",loginLableText:"To Deploy new package, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account"},statusModal={buttonContinueText:"Continue",buttonDeleteText:"Delete",buttonCopyText:"Copy",buttonCloseText:"Close",buttonCancelText:"Cancel"},contextPage={contextPageTitle:"Contexts",startNewContextText:"Start new context",joinContextText:"Join existing context",noContextsText:"No contexts found in the node.",contextPageDescription:"Contexts are the core of the Calimero ecosystem. These are application specific networks designed to enable direct communication between users, eliminating the need for intermediaries.",invitedListDescription:"Contexts you have been invited to",noJoinedAppsListText:"You have not joined any contexts.",noInviedAppsListText:"You have not been invited to any contexts.",devApplicationTitle:"Development application",deleteContextText:"Delete Context",contextDetails:{title:"Context Details",clientKeysListDescription:"Client keys are authorization keys used by the application frontend.",noClientKeysText:"No data found.",noUsersText:"No users found in the context.",labelIdText:"Id: ",labelNameText:"Name: ",labelOwnerText:"Owner: ",labelDescriptionText:"Description: ",labelRepositoryText:"Repository URL: ",lableVersionText:"Version: ",labelAppId:"App ID: ",titleApps:"Installed application",localAppTitle:"Metadata not available for locally installed application",titleStorage:"Storage",labelStorageText:"Used: "},actionDialog:{title:"Delete Context",subtitle:"Are you sure you want to delete this context? This action cannot be undone."},contextInvitation:{invitationText:"Invited on ",acceptButtonText:"Accept",declineButtonText:"Decline"}},startContextPage={backButtonText:"back to context select",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",initSectionTitle:"Initialize application state",argsTitleText:"Arguments",methodLabelText:"method name",argsLabelText:"arguments json",buttonFormatText:"format",loginRequestPopupTitle:"Application Sign-in Request - Start Context",detailsText:"Details",applicationList:{listTitle:"Select Available Application",noAvailableAppsText:"No applications available",noOwnedAppsText:"No owned applications installed"},startContextSuccessTitle:"Context started",startedContextMessage:"Application context has been started successfully.",startContextErrorTitle:"Failed to start context",startContextErrorMessage:"Failed to start the application context.",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",successInstallTitle:"Application installed successfully",failInstallTitle:"Error installing application"},joinContextPage={title:"Join existing Context",buttonJoinText:"Join Context",joinErrorTitle:"Failed to join context",joinSuccessTitle:"Context joined",joinSuccessMessage:"Context joined successfully",contextIdLabel:"Context ID"},exportIdentityPage={title:"Export",description:"Export decentralized identifiers (DIDs) associated with the node.",buttonExportText:"Export Identity",exportErrorTitle:"Failed to export node identity",exportSuccessTitle:"Identity exported"},identityPage={title:"Root keys",addRootKeyText:"Add new root key",loggedInLabel:"Logged in with: ",noRootKeysText:"No root keys found in the node."},serverDown={useHookComponentErrorText:"useServerDown must be used within a ServerDownProvider",popupTitle:"503 - Service Unavailable",popupMessage:"The Node Server at {{nodeApiEndpoint}} is unreachable. Please try again later."},nodeDataSource={joinContextErrorTitle:"Error joining context",joinContextErrorMessage:"Failed to join context",unauthorizedErrorMessage:"Unauthorized"},authHeaders={errorText:"Error extracting private key"},walletSelectorContext={alertErrorText:"Failed to initialise wallet selector",componentErrorText:"useWalletSelector must be used within a WalletSelectorContextProvider"},appLoginPopup={createTokenError:"Error creating token, please try again",selectContext:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextsTitle:"Select Context",contextsSubtitle:"To continue select available or start a new context for the application",noContextsText:"No contexts found",selectedContextText:"Selected context Id:",buttonNextText:"Confirm context Id",buttonBackText:"Return to application",buttonCreateText:"Start new"},selectIdentity:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",contextsTitle:"Select context identity",contextsSubtitle:"To continue select available context identity for the application",noContextsText:"No contexts identities found",selectedContextText:"Selected context identity:",backButtonText:"back to context select",buttonNextText:"Confirm context identity",buttonBackText:"Return to application"},createToken:{title:"Application Sign-in Request",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",backButtonText:"back to select context identity",contextIdentityText:"Context Identity: ",detailsText:"Details",buttonNextText:"Create token"}},setupModal$1={inputIdLengthError:"Application ID must be between 32 and 44 characters long.",inputEncodeError:"Application ID must contain only base58 characters.",nodeHealthCheckError:"Connection failed. Please check if node url is correct.",modalTitle:"App setup",urlInputPlacerholder:"node url",buttonSetText:"Set node url"},translations={useMetamask:useMetamask$1,useNear:useNear$1,useStarknet:useStarknet$1,useIcp:useIcp$1,loginPage,addRootKeyPage,footer,navigation,applicationsPage,confirmWallet,keysPage,keysTable,uploadPage,uploadApplication,addPackageForm,statusModal,contextPage,startContextPage,joinContextPage,exportIdentityPage,identityPage,serverDown,nodeDataSource,authHeaders,walletSelectorContext,appLoginPopup,setupModal:setupModal$1};function createAppMetadata(o){var a={contractAppId:o};return Array.from(new TextEncoder().encode(JSON.stringify(a)))}function parseAppMetadata(o){try{if(o.length===0)return null;var a=JSON.parse(new TextDecoder().decode(new Uint8Array(o)));return a}catch{return null}}function getNodeUrl(){let o=getAppEndpointKey();if(!o){let a="http://localhost:2428";return setAppEndpointKey(a),a}return o??""}function getNearEnvironment(){return"testnet"}const Ed25519$1="Ed25519";class CodeError extends Error{constructor(c,d,tt){super(c);aw(this,"code");aw(this,"props");this.code=d,this.name=(tt==null?void 0:tt.name)??"CodeError",this.props=tt??{}}}class AggregateCodeError extends AggregateError{constructor(c,d,tt,nt){super(c,d);aw(this,"code");aw(this,"props");this.code=tt,this.name=(nt==null?void 0:nt.name)??"AggregateCodeError",this.props=nt??{}}}var events={exports:{}},R$3=typeof Reflect=="object"?Reflect:null,ReflectApply=R$3&&typeof R$3.apply=="function"?R$3.apply:function(a,c,d){return Function.prototype.apply.call(a,c,d)},ReflectOwnKeys;R$3&&typeof R$3.ownKeys=="function"?ReflectOwnKeys=R$3.ownKeys:Object.getOwnPropertySymbols?ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a).concat(Object.getOwnPropertySymbols(a))}:ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a)};function ProcessEmitWarning(o){console&&console.warn&&console.warn(o)}var NumberIsNaN=Number.isNaN||function(a){return a!==a};function EventEmitter$1(){EventEmitter$1.init.call(this)}events.exports=EventEmitter$1;events.exports.once=once$2;EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=void 0;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=void 0;var defaultMaxListeners=10;function checkListener(o){if(typeof o!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof o)}Object.defineProperty(EventEmitter$1,"defaultMaxListeners",{enumerable:!0,get:function(){return defaultMaxListeners},set:function(o){if(typeof o!="number"||o<0||NumberIsNaN(o))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+o+".");defaultMaxListeners=o}});EventEmitter$1.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};EventEmitter$1.prototype.setMaxListeners=function(a){if(typeof a!="number"||a<0||NumberIsNaN(a))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+a+".");return this._maxListeners=a,this};function _getMaxListeners(o){return o._maxListeners===void 0?EventEmitter$1.defaultMaxListeners:o._maxListeners}EventEmitter$1.prototype.getMaxListeners=function(){return _getMaxListeners(this)};EventEmitter$1.prototype.emit=function(a){for(var c=[],d=1;d0&&($a=c[0]),$a instanceof Error)throw $a;var Ys=new Error("Unhandled error."+($a?" ("+$a.message+")":""));throw Ys.context=$a,Ys}var gu=nt[a];if(gu===void 0)return!1;if(typeof gu=="function")ReflectApply(gu,this,c);else for(var xu=gu.length,$u=arrayClone(gu,xu),d=0;d0&&$a.length>tt&&!$a.warned){$a.warned=!0;var Ys=new Error("Possible EventEmitter memory leak detected. "+$a.length+" "+String(a)+" listeners added. Use emitter.setMaxListeners() to increase limit");Ys.name="MaxListenersExceededWarning",Ys.emitter=o,Ys.type=a,Ys.count=$a.length,ProcessEmitWarning(Ys)}return o}EventEmitter$1.prototype.addListener=function(a,c){return _addListener(this,a,c,!1)};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function(a,c){return _addListener(this,a,c,!0)};function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(o,a,c){var d={fired:!1,wrapFn:void 0,target:o,type:a,listener:c},tt=onceWrapper.bind(d);return tt.listener=c,d.wrapFn=tt,tt}EventEmitter$1.prototype.once=function(a,c){return checkListener(c),this.on(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.prependOnceListener=function(a,c){return checkListener(c),this.prependListener(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.removeListener=function(a,c){var d,tt,nt,$a,Ys;if(checkListener(c),tt=this._events,tt===void 0)return this;if(d=tt[a],d===void 0)return this;if(d===c||d.listener===c)--this._eventsCount===0?this._events=Object.create(null):(delete tt[a],tt.removeListener&&this.emit("removeListener",a,d.listener||c));else if(typeof d!="function"){for(nt=-1,$a=d.length-1;$a>=0;$a--)if(d[$a]===c||d[$a].listener===c){Ys=d[$a].listener,nt=$a;break}if(nt<0)return this;nt===0?d.shift():spliceOne(d,nt),d.length===1&&(tt[a]=d[0]),tt.removeListener!==void 0&&this.emit("removeListener",a,Ys||c)}return this};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function(a){var c,d,tt;if(d=this._events,d===void 0)return this;if(d.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):d[a]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete d[a]),this;if(arguments.length===0){var nt=Object.keys(d),$a;for(tt=0;tt=0;tt--)this.removeListener(a,c[tt]);return this};function _listeners(o,a,c){var d=o._events;if(d===void 0)return[];var tt=d[a];return tt===void 0?[]:typeof tt=="function"?c?[tt.listener||tt]:[tt]:c?unwrapListeners(tt):arrayClone(tt,tt.length)}EventEmitter$1.prototype.listeners=function(a){return _listeners(this,a,!0)};EventEmitter$1.prototype.rawListeners=function(a){return _listeners(this,a,!1)};EventEmitter$1.listenerCount=function(o,a){return typeof o.listenerCount=="function"?o.listenerCount(a):listenerCount.call(o,a)};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(o){var a=this._events;if(a!==void 0){var c=a[o];if(typeof c=="function")return 1;if(c!==void 0)return c.length}return 0}EventEmitter$1.prototype.eventNames=function(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]};function arrayClone(o,a){for(var c=new Array(a),d=0;d=255)throw new TypeError("Alphabet too long");for(var c=new Uint8Array(256),d=0;d>>0,q0=new Uint8Array(L0);$0!==O0;){for(var F0=p0[$0],u1=0,g1=L0-1;(F0!==0||u1>>0,q0[g1]=F0%Ys>>>0,F0=F0/Ys>>>0;if(F0!==0)throw new Error("Non-zero carry");A0=u1,$0++}for(var E1=L0-A0;E1!==L0&&q0[E1]===0;)E1++;for(var B1=gu.repeat(w0);E1>>0,L0=new Uint8Array(O0);p0[w0];){var q0=c[p0.charCodeAt(w0)];if(q0===255)return;for(var F0=0,u1=O0-1;(q0!==0||F0<$0)&&u1!==-1;u1--,F0++)q0+=Ys*L0[u1]>>>0,L0[u1]=q0%256>>>0,q0=q0/256>>>0;if(q0!==0)throw new Error("Non-zero carry");$0=F0,w0++}if(p0[w0]!==" "){for(var g1=O0-$0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=new Uint8Array(A0+(O0-g1)),B1=A0;g1!==O0;)E1[B1++]=L0[g1++];return E1}}}function i0(p0){var w0=Xu(p0);if(w0)return w0;throw new Error(`Non-${a} character`)}return{encode:Iu,decodeUnsafe:Xu,decode:i0}}var src$2=base$5,_brrp__multiformats_scope_baseX=src$2;class Encoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");this.name=a,this.prefix=c,this.baseEncode=d}encode(a){if(a instanceof Uint8Array)return`${this.prefix}${this.baseEncode(a)}`;throw Error("Unknown type, must be binary type")}}class Decoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseDecode");aw(this,"prefixCodePoint");if(this.name=a,this.prefix=c,c.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=c.codePointAt(0),this.baseDecode=d}decode(a){if(typeof a=="string"){if(a.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(a)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(a.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(a){return or$1(this,a)}}class ComposedDecoder{constructor(a){aw(this,"decoders");this.decoders=a}or(a){return or$1(this,a)}decode(a){const c=a[0],d=this.decoders[c];if(d!=null)return d.decode(a);throw RangeError(`Unable to decode multibase string ${JSON.stringify(a)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}function or$1(o,a){return new ComposedDecoder({...o.decoders??{[o.prefix]:o},...a.decoders??{[a.prefix]:a}})}class Codec{constructor(a,c,d,tt){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");aw(this,"baseDecode");aw(this,"encoder");aw(this,"decoder");this.name=a,this.prefix=c,this.baseEncode=d,this.baseDecode=tt,this.encoder=new Encoder(a,c,d),this.decoder=new Decoder(a,c,tt)}encode(a){return this.encoder.encode(a)}decode(a){return this.decoder.decode(a)}}function from$2({name:o,prefix:a,encode:c,decode:d}){return new Codec(o,a,c,d)}function baseX$1({name:o,prefix:a,alphabet:c}){const{encode:d,decode:tt}=_brrp__multiformats_scope_baseX(c,o);return from$2({prefix:a,name:o,encode:d,decode:nt=>coerce(tt(nt))})}function decode$6(o,a,c,d){const tt={};for(let $u=0;$u=8&&(Ys-=8,$a[xu++]=255&gu>>Ys)}if(Ys>=c||255&gu<<8-Ys)throw new SyntaxError("Unexpected end of data");return $a}function encode$7(o,a,c){const d=a[a.length-1]==="=",tt=(1<c;)$a-=c,nt+=a[tt&Ys>>$a];if($a!==0&&(nt+=a[tt&Ys<=INT;)a[c++]=o&255|MSB$1,o/=128;for(;o&MSBALL;)a[c++]=o&255|MSB$1,o>>>=7;return a[c]=o|0,encode$6.bytes=c-d+1,a}var decode$5=read$2,MSB$1$1=128,REST$1$1=127;function read$2(o,d){var c=0,d=d||0,tt=0,nt=d,$a,Ys=o.length;do{if(nt>=Ys)throw read$2.bytes=0,new RangeError("Could not decode varint");$a=o[nt++],c+=tt<28?($a&REST$1$1)<=MSB$1$1);return read$2.bytes=nt-d,c}var N1$1=Math.pow(2,7),N2$1=Math.pow(2,14),N3$1=Math.pow(2,21),N4$1=Math.pow(2,28),N5$1=Math.pow(2,35),N6$1=Math.pow(2,42),N7$1=Math.pow(2,49),N8=Math.pow(2,56),N9=Math.pow(2,63),length$2=function(o){return ocreate$8(this.code,d))}else throw Error("Unknown type, must be binary type")}}function sha$5(o){return async a=>new Uint8Array(await crypto.subtle.digest(o,a))}const sha256$6=from$1({name:"sha2-256",code:18,encode:sha$5("SHA-256")});function equals(o,a){if(o===a)return!0;if(o.byteLength!==a.byteLength)return!1;for(let c=0;ctt+nt.length,0));const c=allocUnsafe(a);let d=0;for(const tt of o)c.set(tt,d),d+=tt.length;return c}const base10=baseX$1({prefix:"9",name:"base10",alphabet:"0123456789"}),base10$1=Object.freeze(Object.defineProperty({__proto__:null,base10},Symbol.toStringTag,{value:"Module"})),base16=rfc4648({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),base16upper=rfc4648({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),base16$1=Object.freeze(Object.defineProperty({__proto__:null,base16,base16upper},Symbol.toStringTag,{value:"Module"})),base2=rfc4648({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),base2$1=Object.freeze(Object.defineProperty({__proto__:null,base2},Symbol.toStringTag,{value:"Module"})),alphabet$1=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),alphabetBytesToChars=alphabet$1.reduce((o,a,c)=>(o[c]=a,o),[]),alphabetCharsToBytes=alphabet$1.reduce((o,a,c)=>(o[a.codePointAt(0)]=c,o),[]);function encode$4(o){return o.reduce((a,c)=>(a+=alphabetBytesToChars[c],a),"")}function decode$4(o){const a=[];for(const c of o){const d=alphabetCharsToBytes[c.codePointAt(0)];if(d===void 0)throw new Error(`Non-base256emoji character: ${c}`);a.push(d)}return new Uint8Array(a)}const base256emoji=from$2({prefix:"🚀",name:"base256emoji",encode:encode$4,decode:decode$4}),base256emoji$1=Object.freeze(Object.defineProperty({__proto__:null,base256emoji},Symbol.toStringTag,{value:"Module"})),base32=rfc4648({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),base32upper=rfc4648({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),base32pad=rfc4648({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),base32padupper=rfc4648({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),base32hex=rfc4648({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),base32hexupper=rfc4648({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),base32hexpad=rfc4648({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),base32hexpadupper=rfc4648({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),base32z=rfc4648({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5}),base32$1=Object.freeze(Object.defineProperty({__proto__:null,base32,base32hex,base32hexpad,base32hexpadupper,base32hexupper,base32pad,base32padupper,base32upper,base32z},Symbol.toStringTag,{value:"Module"})),base36=baseX$1({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),base36upper=baseX$1({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),base36$1=Object.freeze(Object.defineProperty({__proto__:null,base36,base36upper},Symbol.toStringTag,{value:"Module"})),base64$1=rfc4648({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),base64pad=rfc4648({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),base64url=rfc4648({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),base64urlpad=rfc4648({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6}),base64$2=Object.freeze(Object.defineProperty({__proto__:null,base64:base64$1,base64pad,base64url,base64urlpad},Symbol.toStringTag,{value:"Module"})),base8=rfc4648({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),base8$1=Object.freeze(Object.defineProperty({__proto__:null,base8},Symbol.toStringTag,{value:"Module"})),identity$1=from$2({prefix:"\0",name:"identity",encode:o=>toString$c(o),decode:o=>fromString$1(o)}),identityBase=Object.freeze(Object.defineProperty({__proto__:null,identity:identity$1},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const bases={...identityBase,...base2$1,...base8$1,...base10$1,...base16$1,...base32$1,...base36$1,...base58,...base64$2,...base256emoji$1};function createCodec$1(o,a,c,d){return{name:o,prefix:a,encoder:{name:o,prefix:a,encode:c},decoder:{decode:d}}}const string=createCodec$1("utf8","u",o=>"u"+new TextDecoder("utf8").decode(o),o=>new TextEncoder().encode(o.substring(1))),ascii=createCodec$1("ascii","a",o=>{let a="a";for(let c=0;c{o=o.substring(1);const a=allocUnsafe(o.length);for(let c=0;c0&&!a.includes(o.length))throw new Error(`Uint8Array expected of length ${a}, not of length=${o.length}`)}function hash$a(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$3(o.outputLen),number$3(o.blockLen)}function exists$3(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}function output$3(o,a){bytes$3(o);const c=a.outputLen;if(o.lengthnew Uint32Array(o.buffer,o.byteOffset,Math.floor(o.byteLength/4)),createView$1=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),rotr$1=(o,a)=>o<<32-a|o>>>a,isLE$1=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,byteSwap=o=>o<<24&4278190080|o<<8&16711680|o>>>8&65280|o>>>24&255;function byteSwap32(o){for(let a=0;a{};async function asyncLoop(o,a,c){let d=Date.now();for(let tt=0;tt=0&&nto().update(toBytes$1(d)).digest(),c=o();return a.outputLen=c.outputLen,a.blockLen=c.blockLen,a.create=()=>o(),a}function randomBytes$5(o=32){if(crypto$6&&typeof crypto$6.getRandomValues=="function")return crypto$6.getRandomValues(new Uint8Array(o));throw new Error("crypto.getRandomValues must be defined")}function setBigUint64$3(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ys=Number(c&nt),gu=d?4:0,xu=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+xu,Ys,d)}const Chi$2=(o,a,c)=>o&a^~o&c,Maj$2=(o,a,c)=>o&a^o&c^a&c;class HashMD extends Hash$9{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=createView$1(this.buffer)}update(a){exists$3(this);const{view:c,buffer:d,blockLen:tt}=this;a=toBytes$1(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iu>_32n$2&U32_MASK64$2)}:{h:Number(o>>_32n$2&U32_MASK64$2)|0,l:Number(o&U32_MASK64$2)|0}}function split$8(o,a=!1){let c=new Uint32Array(o.length),d=new Uint32Array(o.length);for(let tt=0;ttBigInt(o>>>0)<<_32n$2|BigInt(a>>>0),shrSH$1=(o,a,c)=>o>>>c,shrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrSH$1=(o,a,c)=>o>>>c|a<<32-c,rotrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrBH$1=(o,a,c)=>o<<64-c|a>>>c-32,rotrBL$1=(o,a,c)=>o>>>c-32|a<<64-c,rotr32H$1=(o,a)=>a,rotr32L$1=(o,a)=>o,rotlSH$2=(o,a,c)=>o<>>32-c,rotlSL$2=(o,a,c)=>a<>>32-c,rotlBH$2=(o,a,c)=>a<>>64-c,rotlBL$2=(o,a,c)=>o<>>64-c;function add$1(o,a,c,d){const tt=(a>>>0)+(d>>>0);return{h:o+c+(tt/2**32|0)|0,l:tt|0}}const add3L$1=(o,a,c)=>(o>>>0)+(a>>>0)+(c>>>0),add3H$1=(o,a,c,d)=>a+c+d+(o/2**32|0)|0,add4L$1=(o,a,c,d)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0),add4H$1=(o,a,c,d,tt)=>a+c+d+tt+(o/2**32|0)|0,add5L$1=(o,a,c,d,tt)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0)+(tt>>>0),add5H$1=(o,a,c,d,tt,nt)=>a+c+d+tt+nt+(o/2**32|0)|0,u64$1={fromBig:fromBig$2,split:split$8,toBig:toBig$1,shrSH:shrSH$1,shrSL:shrSL$1,rotrSH:rotrSH$1,rotrSL:rotrSL$1,rotrBH:rotrBH$1,rotrBL:rotrBL$1,rotr32H:rotr32H$1,rotr32L:rotr32L$1,rotlSH:rotlSH$2,rotlSL:rotlSL$2,rotlBH:rotlBH$2,rotlBL:rotlBL$2,add:add$1,add3L:add3L$1,add3H:add3H$1,add4L:add4L$1,add4H:add4H$1,add5H:add5H$1,add5L:add5L$1},[SHA512_Kh$1,SHA512_Kl$1]=u64$1.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(o=>BigInt(o))),SHA512_W_H$1=new Uint32Array(80),SHA512_W_L$1=new Uint32Array(80);let SHA512$4=class extends HashMD{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:a,Al:c,Bh:d,Bl:tt,Ch:nt,Cl:$a,Dh:Ys,Dl:gu,Eh:xu,El:$u,Fh:Iu,Fl:Xu,Gh:i0,Gl:p0,Hh:w0,Hl:A0}=this;return[a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0]}set(a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0){this.Ah=a|0,this.Al=c|0,this.Bh=d|0,this.Bl=tt|0,this.Ch=nt|0,this.Cl=$a|0,this.Dh=Ys|0,this.Dl=gu|0,this.Eh=xu|0,this.El=$u|0,this.Fh=Iu|0,this.Fl=Xu|0,this.Gh=i0|0,this.Gl=p0|0,this.Hh=w0|0,this.Hl=A0|0}process(a,c){for(let L0=0;L0<16;L0++,c+=4)SHA512_W_H$1[L0]=a.getUint32(c),SHA512_W_L$1[L0]=a.getUint32(c+=4);for(let L0=16;L0<80;L0++){const q0=SHA512_W_H$1[L0-15]|0,F0=SHA512_W_L$1[L0-15]|0,u1=u64$1.rotrSH(q0,F0,1)^u64$1.rotrSH(q0,F0,8)^u64$1.shrSH(q0,F0,7),g1=u64$1.rotrSL(q0,F0,1)^u64$1.rotrSL(q0,F0,8)^u64$1.shrSL(q0,F0,7),E1=SHA512_W_H$1[L0-2]|0,B1=SHA512_W_L$1[L0-2]|0,lv=u64$1.rotrSH(E1,B1,19)^u64$1.rotrBH(E1,B1,61)^u64$1.shrSH(E1,B1,6),j1=u64$1.rotrSL(E1,B1,19)^u64$1.rotrBL(E1,B1,61)^u64$1.shrSL(E1,B1,6),r1=u64$1.add4L(g1,j1,SHA512_W_L$1[L0-7],SHA512_W_L$1[L0-16]),t1=u64$1.add4H(r1,u1,lv,SHA512_W_H$1[L0-7],SHA512_W_H$1[L0-16]);SHA512_W_H$1[L0]=t1|0,SHA512_W_L$1[L0]=r1|0}let{Ah:d,Al:tt,Bh:nt,Bl:$a,Ch:Ys,Cl:gu,Dh:xu,Dl:$u,Eh:Iu,El:Xu,Fh:i0,Fl:p0,Gh:w0,Gl:A0,Hh:$0,Hl:O0}=this;for(let L0=0;L0<80;L0++){const q0=u64$1.rotrSH(Iu,Xu,14)^u64$1.rotrSH(Iu,Xu,18)^u64$1.rotrBH(Iu,Xu,41),F0=u64$1.rotrSL(Iu,Xu,14)^u64$1.rotrSL(Iu,Xu,18)^u64$1.rotrBL(Iu,Xu,41),u1=Iu&i0^~Iu&w0,g1=Xu&p0^~Xu&A0,E1=u64$1.add5L(O0,F0,g1,SHA512_Kl$1[L0],SHA512_W_L$1[L0]),B1=u64$1.add5H(E1,$0,q0,u1,SHA512_Kh$1[L0],SHA512_W_H$1[L0]),lv=E1|0,j1=u64$1.rotrSH(d,tt,28)^u64$1.rotrBH(d,tt,34)^u64$1.rotrBH(d,tt,39),r1=u64$1.rotrSL(d,tt,28)^u64$1.rotrBL(d,tt,34)^u64$1.rotrBL(d,tt,39),t1=d&nt^d&Ys^nt&Ys,D0=tt&$a^tt&gu^$a&gu;$0=w0|0,O0=A0|0,w0=i0|0,A0=p0|0,i0=Iu|0,p0=Xu|0,{h:Iu,l:Xu}=u64$1.add(xu|0,$u|0,B1|0,lv|0),xu=Ys|0,$u=gu|0,Ys=nt|0,gu=$a|0,nt=d|0,$a=tt|0;const Z0=u64$1.add3L(lv,r1,D0);d=u64$1.add3H(Z0,B1,j1,t1),tt=Z0|0}({h:d,l:tt}=u64$1.add(this.Ah|0,this.Al|0,d|0,tt|0)),{h:nt,l:$a}=u64$1.add(this.Bh|0,this.Bl|0,nt|0,$a|0),{h:Ys,l:gu}=u64$1.add(this.Ch|0,this.Cl|0,Ys|0,gu|0),{h:xu,l:$u}=u64$1.add(this.Dh|0,this.Dl|0,xu|0,$u|0),{h:Iu,l:Xu}=u64$1.add(this.Eh|0,this.El|0,Iu|0,Xu|0),{h:i0,l:p0}=u64$1.add(this.Fh|0,this.Fl|0,i0|0,p0|0),{h:w0,l:A0}=u64$1.add(this.Gh|0,this.Gl|0,w0|0,A0|0),{h:$0,l:O0}=u64$1.add(this.Hh|0,this.Hl|0,$0|0,O0|0),this.set(d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0,$0,O0)}roundClean(){SHA512_W_H$1.fill(0),SHA512_W_L$1.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};const sha512$3=wrapConstructor$1(()=>new SHA512$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$f=BigInt(0),_1n$h=BigInt(1),_2n$c=BigInt(2);function isBytes$6(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function abytes(o){if(!isBytes$6(o))throw new Error("Uint8Array expected")}const hexes$2=Array.from({length:256},(o,a)=>a.toString(16).padStart(2,"0"));function bytesToHex$2(o){abytes(o);let a="";for(let c=0;c=asciis$1._0&&o<=asciis$1._9)return o-asciis$1._0;if(o>=asciis$1._A&&o<=asciis$1._F)return o-(asciis$1._A-10);if(o>=asciis$1._a&&o<=asciis$1._f)return o-(asciis$1._a-10)}function hexToBytes$3(o){if(typeof o!="string")throw new Error("hex string expected, got "+typeof o);const a=o.length,c=a/2;if(a%2)throw new Error("padded hex string expected, got unpadded hex of length "+a);const d=new Uint8Array(c);for(let tt=0,nt=0;tt_0n$f;o>>=_1n$h,a+=1);return a}function bitGet$2(o,a){return o>>BigInt(a)&_1n$h}function bitSet$2(o,a,c){return o|(c?_1n$h:_0n$f)<(_2n$c<new Uint8Array(o),u8fr$2=o=>Uint8Array.from(o);function createHmacDrbg$2(o,a,c){if(typeof o!="number"||o<2)throw new Error("hashLen must be a number");if(typeof a!="number"||a<2)throw new Error("qByteLen must be a number");if(typeof c!="function")throw new Error("hmacFn must be a function");let d=u8n$2(o),tt=u8n$2(o),nt=0;const $a=()=>{d.fill(1),tt.fill(0),nt=0},Ys=(...Iu)=>c(tt,d,...Iu),gu=(Iu=u8n$2())=>{tt=Ys(u8fr$2([0]),Iu),d=Ys(),Iu.length!==0&&(tt=Ys(u8fr$2([1]),Iu),d=Ys())},xu=()=>{if(nt++>=1e3)throw new Error("drbg: tried 1000 values");let Iu=0;const Xu=[];for(;Iu{$a(),gu(Iu);let i0;for(;!(i0=Xu(xu()));)gu();return $a(),i0}}const validatorFns$2={bigint:o=>typeof o=="bigint",function:o=>typeof o=="function",boolean:o=>typeof o=="boolean",string:o=>typeof o=="string",stringOrUint8Array:o=>typeof o=="string"||isBytes$6(o),isSafeInteger:o=>Number.isSafeInteger(o),array:o=>Array.isArray(o),field:(o,a)=>a.Fp.isValid(o),hash:o=>typeof o=="function"&&Number.isSafeInteger(o.outputLen)};function validateObject$2(o,a,c={}){const d=(tt,nt,$a)=>{const Ys=validatorFns$2[nt];if(typeof Ys!="function")throw new Error(`Invalid validator "${nt}", expected function`);const gu=o[tt];if(!($a&&gu===void 0)&&!Ys(gu,o))throw new Error(`Invalid param ${String(tt)}=${gu} (${typeof gu}), expected ${nt}`)};for(const[tt,nt]of Object.entries(a))d(tt,nt,!1);for(const[tt,nt]of Object.entries(c))d(tt,nt,!0);return o}const ut$4=Object.freeze(Object.defineProperty({__proto__:null,abytes,bitGet:bitGet$2,bitLen:bitLen$2,bitMask:bitMask$2,bitSet:bitSet$2,bytesToHex:bytesToHex$2,bytesToNumberBE:bytesToNumberBE$2,bytesToNumberLE:bytesToNumberLE$2,concatBytes:concatBytes$3,createHmacDrbg:createHmacDrbg$2,ensureBytes:ensureBytes$3,equalBytes:equalBytes$2,hexToBytes:hexToBytes$3,hexToNumber:hexToNumber$2,isBytes:isBytes$6,numberToBytesBE:numberToBytesBE$2,numberToBytesLE:numberToBytesLE$2,numberToHexUnpadded:numberToHexUnpadded$2,numberToVarBytesBE:numberToVarBytesBE$2,utf8ToBytes:utf8ToBytes$3,validateObject:validateObject$2},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$e=BigInt(0),_1n$g=BigInt(1),_2n$b=BigInt(2),_3n$4=BigInt(3),_4n$3=BigInt(4),_5n$3=BigInt(5),_8n$4=BigInt(8);BigInt(9);BigInt(16);function mod$2(o,a){const c=o%a;return c>=_0n$e?c:a+c}function pow$4(o,a,c){if(c<=_0n$e||a<_0n$e)throw new Error("Expected power/modulo > 0");if(c===_1n$g)return _0n$e;let d=_1n$g;for(;a>_0n$e;)a&_1n$g&&(d=d*o%c),o=o*o%c,a>>=_1n$g;return d}function pow2$1(o,a,c){let d=o;for(;a-- >_0n$e;)d*=d,d%=c;return d}function invert$2(o,a){if(o===_0n$e||a<=_0n$e)throw new Error(`invert: expected positive integers, got n=${o} mod=${a}`);let c=mod$2(o,a),d=a,tt=_0n$e,nt=_1n$g;for(;c!==_0n$e;){const Ys=d/c,gu=d%c,xu=tt-nt*Ys;d=c,c=gu,tt=nt,nt=xu}if(d!==_1n$g)throw new Error("invert: does not exist");return mod$2(tt,a)}function tonelliShanks$2(o){const a=(o-_1n$g)/_2n$b;let c,d,tt;for(c=o-_1n$g,d=0;c%_2n$b===_0n$e;c/=_2n$b,d++);for(tt=_2n$b;tt(mod$2(o,a)&_1n$g)===_1n$g,FIELD_FIELDS$2=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField$2(o){const a={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},c=FIELD_FIELDS$2.reduce((d,tt)=>(d[tt]="function",d),a);return validateObject$2(o,c)}function FpPow$2(o,a,c){if(c<_0n$e)throw new Error("Expected power > 0");if(c===_0n$e)return o.ONE;if(c===_1n$g)return a;let d=o.ONE,tt=a;for(;c>_0n$e;)c&_1n$g&&(d=o.mul(d,tt)),tt=o.sqr(tt),c>>=_1n$g;return d}function FpInvertBatch$2(o,a){const c=new Array(a.length),d=a.reduce((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=nt,o.mul(nt,$a)),o.ONE),tt=o.inv(d);return a.reduceRight((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=o.mul(nt,c[Ys]),o.mul(nt,$a)),tt),c}function nLength$2(o,a){const c=a!==void 0?a:o.toString(2).length,d=Math.ceil(c/8);return{nBitLength:c,nByteLength:d}}function Field$2(o,a,c=!1,d={}){if(o<=_0n$e)throw new Error(`Expected Field ORDER > 0, got ${o}`);const{nBitLength:tt,nByteLength:nt}=nLength$2(o,a);if(nt>2048)throw new Error("Field lengths over 2048 bytes are not supported");const $a=FpSqrt$2(o),Ys=Object.freeze({ORDER:o,BITS:tt,BYTES:nt,MASK:bitMask$2(tt),ZERO:_0n$e,ONE:_1n$g,create:gu=>mod$2(gu,o),isValid:gu=>{if(typeof gu!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof gu}`);return _0n$e<=gu&&gugu===_0n$e,isOdd:gu=>(gu&_1n$g)===_1n$g,neg:gu=>mod$2(-gu,o),eql:(gu,xu)=>gu===xu,sqr:gu=>mod$2(gu*gu,o),add:(gu,xu)=>mod$2(gu+xu,o),sub:(gu,xu)=>mod$2(gu-xu,o),mul:(gu,xu)=>mod$2(gu*xu,o),pow:(gu,xu)=>FpPow$2(Ys,gu,xu),div:(gu,xu)=>mod$2(gu*invert$2(xu,o),o),sqrN:gu=>gu*gu,addN:(gu,xu)=>gu+xu,subN:(gu,xu)=>gu-xu,mulN:(gu,xu)=>gu*xu,inv:gu=>invert$2(gu,o),sqrt:d.sqrt||(gu=>$a(Ys,gu)),invertBatch:gu=>FpInvertBatch$2(Ys,gu),cmov:(gu,xu,$u)=>$u?xu:gu,toBytes:gu=>c?numberToBytesLE$2(gu,nt):numberToBytesBE$2(gu,nt),fromBytes:gu=>{if(gu.length!==nt)throw new Error(`Fp.fromBytes: expected ${nt}, got ${gu.length}`);return c?bytesToNumberLE$2(gu):bytesToNumberBE$2(gu)}});return Object.freeze(Ys)}function FpSqrtEven$1(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?o.neg(c):c}function getFieldBytesLength$2(o){if(typeof o!="bigint")throw new Error("field order must be bigint");const a=o.toString(2).length;return Math.ceil(a/8)}function getMinHashLength$2(o){const a=getFieldBytesLength$2(o);return a+Math.ceil(a/2)}function mapHashToField$2(o,a,c=!1){const d=o.length,tt=getFieldBytesLength$2(a),nt=getMinHashLength$2(a);if(d<16||d1024)throw new Error(`expected ${nt}-1024 bytes of input, got ${d}`);const $a=c?bytesToNumberBE$2(o):bytesToNumberLE$2(o),Ys=mod$2($a,a-_1n$g)+_1n$g;return c?numberToBytesLE$2(Ys,tt):numberToBytesBE$2(Ys,tt)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$d=BigInt(0),_1n$f=BigInt(1);function wNAF$2(o,a){const c=(tt,nt)=>{const $a=nt.negate();return tt?$a:nt},d=tt=>{const nt=Math.ceil(a/tt)+1,$a=2**(tt-1);return{windows:nt,windowSize:$a}};return{constTimeNegate:c,unsafeLadder(tt,nt){let $a=o.ZERO,Ys=tt;for(;nt>_0n$d;)nt&_1n$f&&($a=$a.add(Ys)),Ys=Ys.double(),nt>>=_1n$f;return $a},precomputeWindow(tt,nt){const{windows:$a,windowSize:Ys}=d(nt),gu=[];let xu=tt,$u=xu;for(let Iu=0;Iu<$a;Iu++){$u=xu,gu.push($u);for(let Xu=1;Xu>=i0,A0>gu&&(A0-=Xu,$a+=_1n$f);const $0=w0,O0=w0+Math.abs(A0)-1,L0=p0%2!==0,q0=A0<0;A0===0?$u=$u.add(c(L0,nt[$0])):xu=xu.add(c(q0,nt[O0]))}return{p:xu,f:$u}},wNAFCached(tt,nt,$a,Ys){const gu=tt._WINDOW_SIZE||1;let xu=nt.get(tt);return xu||(xu=this.precomputeWindow(tt,gu),gu!==1&&nt.set(tt,Ys(xu))),this.wNAF(gu,xu,$a)}}}function validateBasic$2(o){return validateField$2(o.Fp),validateObject$2(o,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...nLength$2(o.n,o.nBitLength),...o,p:o.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$c=BigInt(0),_1n$e=BigInt(1),_2n$a=BigInt(2),_8n$3=BigInt(8),VERIFY_DEFAULT$1={zip215:!0};function validateOpts$6(o){const a=validateBasic$2(o);return validateObject$2(o,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...a})}function twistedEdwards$1(o){const a=validateOpts$6(o),{Fp:c,n:d,prehash:tt,hash:nt,randomBytes:$a,nByteLength:Ys,h:gu}=a,xu=_2n$a<{try{return{isValid:!0,value:c.sqrt(m1*c.inv(c1))}}catch{return{isValid:!1,value:_0n$c}}}),Xu=a.adjustScalarBytes||(m1=>m1),i0=a.domain||((m1,c1,G0)=>{if(c1.length||G0)throw new Error("Contexts/pre-hash are not supported");return m1}),p0=m1=>typeof m1=="bigint"&&_0n$cp0(m1)&&p0(c1)&&m1m1===_0n$c||w0(m1,xu);function $0(m1,c1){if(w0(m1,c1))return m1;throw new Error(`Expected valid scalar < ${c1}, got ${typeof m1} ${m1}`)}function O0(m1){return m1===_0n$c?m1:$0(m1,d)}const L0=new Map;function q0(m1){if(!(m1 instanceof F0))throw new Error("ExtendedPoint expected")}class F0{constructor(c1,G0,o1,d1){if(this.ex=c1,this.ey=G0,this.ez=o1,this.et=d1,!A0(c1))throw new Error("x required");if(!A0(G0))throw new Error("y required");if(!A0(o1))throw new Error("z required");if(!A0(d1))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(c1){if(c1 instanceof F0)throw new Error("extended point not allowed");const{x:G0,y:o1}=c1||{};if(!A0(G0)||!A0(o1))throw new Error("invalid affine point");return new F0(G0,o1,_1n$e,$u(G0*o1))}static normalizeZ(c1){const G0=c.invertBatch(c1.map(o1=>o1.ez));return c1.map((o1,d1)=>o1.toAffine(G0[d1])).map(F0.fromAffine)}_setWindowSize(c1){this._WINDOW_SIZE=c1,L0.delete(this)}assertValidity(){const{a:c1,d:G0}=a;if(this.is0())throw new Error("bad point: ZERO");const{ex:o1,ey:d1,ez:R1,et:O1}=this,Q1=$u(o1*o1),rv=$u(d1*d1),D1=$u(R1*R1),ev=$u(D1*D1),Mv=$u(Q1*c1),Zv=$u(D1*$u(Mv+rv)),fv=$u(ev+$u(G0*$u(Q1*rv)));if(Zv!==fv)throw new Error("bad point: equation left != right (1)");const cv=$u(o1*d1),ly=$u(R1*O1);if(cv!==ly)throw new Error("bad point: equation left != right (2)")}equals(c1){q0(c1);const{ex:G0,ey:o1,ez:d1}=this,{ex:R1,ey:O1,ez:Q1}=c1,rv=$u(G0*Q1),D1=$u(R1*d1),ev=$u(o1*Q1),Mv=$u(O1*d1);return rv===D1&&ev===Mv}is0(){return this.equals(F0.ZERO)}negate(){return new F0($u(-this.ex),this.ey,this.ez,$u(-this.et))}double(){const{a:c1}=a,{ex:G0,ey:o1,ez:d1}=this,R1=$u(G0*G0),O1=$u(o1*o1),Q1=$u(_2n$a*$u(d1*d1)),rv=$u(c1*R1),D1=G0+o1,ev=$u($u(D1*D1)-R1-O1),Mv=rv+O1,Zv=Mv-Q1,fv=rv-O1,cv=$u(ev*Zv),ly=$u(Mv*fv),Cy=$u(ev*fv),Ly=$u(Zv*Mv);return new F0(cv,ly,Ly,Cy)}add(c1){q0(c1);const{a:G0,d:o1}=a,{ex:d1,ey:R1,ez:O1,et:Q1}=this,{ex:rv,ey:D1,ez:ev,et:Mv}=c1;if(G0===BigInt(-1)){const vw=$u((R1-d1)*(D1+rv)),Hw=$u((R1+d1)*(D1-rv)),uw=$u(Hw-vw);if(uw===_0n$c)return this.double();const Nw=$u(O1*_2n$a*Mv),lw=$u(Q1*_2n$a*ev),Lw=lw+Nw,zw=Hw+vw,A2=lw-Nw,kv=$u(Lw*uw),Y1=$u(zw*A2),tv=$u(Lw*A2),Yv=$u(uw*zw);return new F0(kv,Y1,Yv,tv)}const Zv=$u(d1*rv),fv=$u(R1*D1),cv=$u(Q1*o1*Mv),ly=$u(O1*ev),Cy=$u((d1+R1)*(rv+D1)-Zv-fv),Ly=ly-cv,Hy=ly+cv,t2=$u(fv-G0*Zv),C2=$u(Cy*Ly),Dy=$u(Hy*t2),jw=$u(Cy*t2),pw=$u(Ly*Hy);return new F0(C2,Dy,pw,jw)}subtract(c1){return this.add(c1.negate())}wNAF(c1){return E1.wNAFCached(this,L0,c1,F0.normalizeZ)}multiply(c1){const{p:G0,f:o1}=this.wNAF($0(c1,d));return F0.normalizeZ([G0,o1])[0]}multiplyUnsafe(c1){let G0=O0(c1);return G0===_0n$c?g1:this.equals(g1)||G0===_1n$e?this:this.equals(u1)?this.wNAF(G0).p:E1.unsafeLadder(this,G0)}isSmallOrder(){return this.multiplyUnsafe(gu).is0()}isTorsionFree(){return E1.unsafeLadder(this,d).is0()}toAffine(c1){const{ex:G0,ey:o1,ez:d1}=this,R1=this.is0();c1==null&&(c1=R1?_8n$3:c.inv(d1));const O1=$u(G0*c1),Q1=$u(o1*c1),rv=$u(d1*c1);if(R1)return{x:_0n$c,y:_1n$e};if(rv!==_1n$e)throw new Error("invZ was invalid");return{x:O1,y:Q1}}clearCofactor(){const{h:c1}=a;return c1===_1n$e?this:this.multiplyUnsafe(c1)}static fromHex(c1,G0=!1){const{d:o1,a:d1}=a,R1=c.BYTES;c1=ensureBytes$3("pointHex",c1,R1);const O1=c1.slice(),Q1=c1[R1-1];O1[R1-1]=Q1&-129;const rv=bytesToNumberLE$2(O1);rv===_0n$c||(G0?$0(rv,xu):$0(rv,c.ORDER));const D1=$u(rv*rv),ev=$u(D1-_1n$e),Mv=$u(o1*D1-d1);let{isValid:Zv,value:fv}=Iu(ev,Mv);if(!Zv)throw new Error("Point.fromHex: invalid y coordinate");const cv=(fv&_1n$e)===_1n$e,ly=(Q1&128)!==0;if(!G0&&fv===_0n$c&&ly)throw new Error("Point.fromHex: x=0 and x_0=1");return ly!==cv&&(fv=$u(-fv)),F0.fromAffine({x:fv,y:rv})}static fromPrivateKey(c1){return j1(c1).point}toRawBytes(){const{x:c1,y:G0}=this.toAffine(),o1=numberToBytesLE$2(G0,c.BYTES);return o1[o1.length-1]|=c1&_1n$e?128:0,o1}toHex(){return bytesToHex$2(this.toRawBytes())}}F0.BASE=new F0(a.Gx,a.Gy,_1n$e,$u(a.Gx*a.Gy)),F0.ZERO=new F0(_0n$c,_1n$e,_1n$e,_0n$c);const{BASE:u1,ZERO:g1}=F0,E1=wNAF$2(F0,Ys*8);function B1(m1){return mod$2(m1,d)}function lv(m1){return B1(bytesToNumberLE$2(m1))}function j1(m1){const c1=Ys;m1=ensureBytes$3("private key",m1,c1);const G0=ensureBytes$3("hashed private key",nt(m1),2*c1),o1=Xu(G0.slice(0,c1)),d1=G0.slice(c1,2*c1),R1=lv(o1),O1=u1.multiply(R1),Q1=O1.toRawBytes();return{head:o1,prefix:d1,scalar:R1,point:O1,pointBytes:Q1}}function r1(m1){return j1(m1).pointBytes}function t1(m1=new Uint8Array,...c1){const G0=concatBytes$3(...c1);return lv(nt(i0(G0,ensureBytes$3("context",m1),!!tt)))}function D0(m1,c1,G0={}){m1=ensureBytes$3("message",m1),tt&&(m1=tt(m1));const{prefix:o1,scalar:d1,pointBytes:R1}=j1(c1),O1=t1(G0.context,o1,m1),Q1=u1.multiply(O1).toRawBytes(),rv=t1(G0.context,Q1,R1,m1),D1=B1(O1+rv*d1);O0(D1);const ev=concatBytes$3(Q1,numberToBytesLE$2(D1,c.BYTES));return ensureBytes$3("result",ev,Ys*2)}const Z0=VERIFY_DEFAULT$1;function f1(m1,c1,G0,o1=Z0){const{context:d1,zip215:R1}=o1,O1=c.BYTES;m1=ensureBytes$3("signature",m1,2*O1),c1=ensureBytes$3("message",c1),tt&&(c1=tt(c1));const Q1=bytesToNumberLE$2(m1.slice(O1,2*O1));let rv,D1,ev;try{rv=F0.fromHex(G0,R1),D1=F0.fromHex(m1.slice(0,O1),R1),ev=u1.multiplyUnsafe(Q1)}catch{return!1}if(!R1&&rv.isSmallOrder())return!1;const Mv=t1(d1,D1.toRawBytes(),rv.toRawBytes(),c1);return D1.add(rv.multiplyUnsafe(Mv)).subtract(ev).clearCofactor().equals(F0.ZERO)}return u1._setWindowSize(8),{CURVE:a,getPublicKey:r1,sign:D0,verify:f1,ExtendedPoint:F0,utils:{getExtendedPublicKey:j1,randomPrivateKey:()=>$a(c.BYTES),precompute(m1=8,c1=F0.BASE){return c1._setWindowSize(m1),c1.multiply(BigInt(3)),c1}}}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ED25519_P=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),ED25519_SQRT_M1=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");BigInt(0);const _1n$d=BigInt(1),_2n$9=BigInt(2),_5n$2=BigInt(5),_10n=BigInt(10),_20n=BigInt(20),_40n=BigInt(40),_80n=BigInt(80);function ed25519_pow_2_252_3(o){const a=ED25519_P,d=o*o%a*o%a,tt=pow2$1(d,_2n$9,a)*d%a,nt=pow2$1(tt,_1n$d,a)*o%a,$a=pow2$1(nt,_5n$2,a)*nt%a,Ys=pow2$1($a,_10n,a)*$a%a,gu=pow2$1(Ys,_20n,a)*Ys%a,xu=pow2$1(gu,_40n,a)*gu%a,$u=pow2$1(xu,_80n,a)*xu%a,Iu=pow2$1($u,_80n,a)*xu%a,Xu=pow2$1(Iu,_10n,a)*$a%a;return{pow_p_5_8:pow2$1(Xu,_2n$9,a)*o%a,b2:d}}function adjustScalarBytes(o){return o[0]&=248,o[31]&=127,o[31]|=64,o}function uvRatio(o,a){const c=ED25519_P,d=mod$2(a*a*a,c),tt=mod$2(d*d*a,c),nt=ed25519_pow_2_252_3(o*tt).pow_p_5_8;let $a=mod$2(o*d*nt,c);const Ys=mod$2(a*$a*$a,c),gu=$a,xu=mod$2($a*ED25519_SQRT_M1,c),$u=Ys===o,Iu=Ys===mod$2(-o,c),Xu=Ys===mod$2(-o*ED25519_SQRT_M1,c);return $u&&($a=gu),(Iu||Xu)&&($a=xu),isNegativeLE$1($a,c)&&($a=mod$2(-$a,c)),{isValid:$u||Iu,value:$a}}const Fp$2=Field$2(ED25519_P,void 0,!0),ed25519Defaults={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Fp$2,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:sha512$3,randomBytes:randomBytes$5,adjustScalarBytes,uvRatio},ed25519$1=twistedEdwards$1(ed25519Defaults);function ed25519_domain(o,a,c){if(a.length>255)throw new Error("Context is too big");return concatBytes$4(utf8ToBytes$4("SigEd25519 no Ed25519 collisions"),new Uint8Array([c?1:0,a.length]),a,o)}({...ed25519Defaults});({...ed25519Defaults});const ELL2_C1=(Fp$2.ORDER+BigInt(3))/BigInt(8);Fp$2.pow(_2n$9,ELL2_C1);Fp$2.sqrt(Fp$2.neg(Fp$2.ONE));(Fp$2.ORDER-BigInt(5))/BigInt(8);BigInt(486662);FpSqrtEven$1(Fp$2,Fp$2.neg(BigInt(486664)));BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const PUBLIC_KEY_BYTE_LENGTH=32,PRIVATE_KEY_BYTE_LENGTH=64,KEYS_BYTE_LENGTH=32;function generateKey$2(){const o=ed25519$1.utils.randomPrivateKey(),a=ed25519$1.getPublicKey(o);return{privateKey:concatKeys(o,a),publicKey:a}}function generateKeyFromSeed(o){if(o.length!==KEYS_BYTE_LENGTH)throw new TypeError('"seed" must be 32 bytes in length.');if(!(o instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');const a=o,c=ed25519$1.getPublicKey(a);return{privateKey:concatKeys(a,c),publicKey:c}}function hashAndSign$2(o,a){const c=o.subarray(0,KEYS_BYTE_LENGTH);return ed25519$1.sign(a instanceof Uint8Array?a:a.subarray(),c)}function hashAndVerify$2(o,a,c){return ed25519$1.verify(a,c instanceof Uint8Array?c:c.subarray(),o)}function concatKeys(o,a){const c=new Uint8Array(PRIVATE_KEY_BYTE_LENGTH);for(let d=0;dNumber.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function encodeUint8Array(o,a,c=0){switch(encodingLength(o)){case 8:a[c++]=o&255|MSB,o/=128;case 7:a[c++]=o&255|MSB,o/=128;case 6:a[c++]=o&255|MSB,o/=128;case 5:a[c++]=o&255|MSB,o/=128;case 4:a[c++]=o&255|MSB,o>>>=7;case 3:a[c++]=o&255|MSB,o>>>=7;case 2:a[c++]=o&255|MSB,o>>>=7;case 1:{a[c++]=o&255,o>>>=7;break}default:throw new Error("unreachable")}return a}function decodeUint8Array(o,a){let c=o[a],d=0;if(d+=c&REST,c>>31>0){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(c+d*4294967296)}return this.lo+this.hi*4294967296}toBigInt(a=!1){if(a)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(BigInt(c)+(BigInt(d)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(a=!1){return this.toBigInt(a).toString()}zzEncode(){const a=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^a)>>>0,this.lo=(this.lo<<1^a)>>>0,this}zzDecode(){const a=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^a)>>>0,this.hi=(this.hi>>>1^a)>>>0,this}length(){const a=this.lo,c=(this.lo>>>28|this.hi<<4)>>>0,d=this.hi>>>24;return d===0?c===0?a<16384?a<128?1:2:a<2097152?3:4:c<16384?c<128?5:6:c<2097152?7:8:d<128?9:10}static fromBigInt(a){if(a===0n)return zero$2;if(aMIN_SAFE_NUMBER_INTEGER)return this.fromNumber(Number(a));const c=a<0n;c&&(a=-a);let d=a>>32n,tt=a-(d<<32n);return c&&(d=~d|0n,tt=~tt|0n,++tt>TWO_32&&(tt=0n,++d>TWO_32&&(d=0n))),new LongBits(Number(tt),Number(d))}static fromNumber(a){if(a===0)return zero$2;const c=a<0;c&&(a=-a);let d=a>>>0,tt=(a-d)/4294967296>>>0;return c&&(tt=~tt>>>0,d=~d>>>0,++d>4294967295&&(d=0,++tt>4294967295&&(tt=0))),new LongBits(d,tt)}static from(a){return typeof a=="number"?LongBits.fromNumber(a):typeof a=="bigint"?LongBits.fromBigInt(a):typeof a=="string"?LongBits.fromBigInt(BigInt(a)):a.low!=null||a.high!=null?new LongBits(a.low>>>0,a.high>>>0):zero$2}}const zero$2=new LongBits(0,0);zero$2.toBigInt=function(){return 0n};zero$2.zzEncode=zero$2.zzDecode=function(){return this};zero$2.length=function(){return 1};const TWO_32=4294967296n;function length$1(o){let a=0,c=0;for(let d=0;d191&&Ys<224?nt[$a++]=(Ys&31)<<6|o[a++]&63:Ys>239&&Ys<365?(Ys=((Ys&7)<<18|(o[a++]&63)<<12|(o[a++]&63)<<6|o[a++]&63)-65536,nt[$a++]=55296+(Ys>>10),nt[$a++]=56320+(Ys&1023)):nt[$a++]=(Ys&15)<<12|(o[a++]&63)<<6|o[a++]&63,$a>8191&&((tt??(tt=[])).push(String.fromCharCode.apply(String,nt)),$a=0);return tt!=null?($a>0&&tt.push(String.fromCharCode.apply(String,nt.slice(0,$a))),tt.join("")):String.fromCharCode.apply(String,nt.slice(0,$a))}function write$1(o,a,c){const d=c;let tt,nt;for(let $a=0;$a>6|192,a[c++]=tt&63|128):(tt&64512)===55296&&((nt=o.charCodeAt($a+1))&64512)===56320?(tt=65536+((tt&1023)<<10)+(nt&1023),++$a,a[c++]=tt>>18|240,a[c++]=tt>>12&63|128,a[c++]=tt>>6&63|128,a[c++]=tt&63|128):(a[c++]=tt>>12|224,a[c++]=tt>>6&63|128,a[c++]=tt&63|128);return c-d}function indexOutOfRange(o,a){return RangeError(`index out of range: ${o.pos} + ${a??1} > ${o.len}`)}function readFixed32End(o,a){return(o[a-4]|o[a-3]<<8|o[a-2]<<16|o[a-1]<<24)>>>0}class Uint8ArrayReader{constructor(a){aw(this,"buf");aw(this,"pos");aw(this,"len");aw(this,"_slice",Uint8Array.prototype.subarray);this.buf=a,this.pos=0,this.len=a.length}uint32(){let a=4294967295;if(a=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(a=(a|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return a;if((this.pos+=5)>this.len)throw this.pos=this.len,indexOutOfRange(this,10);return a}int32(){return this.uint32()|0}sint32(){const a=this.uint32();return a>>>1^-(a&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);const a=readFloatLE(this.buf,this.pos);return this.pos+=4,a}double(){if(this.pos+8>this.len)throw indexOutOfRange(this,4);const a=readDoubleLE(this.buf,this.pos);return this.pos+=8,a}bytes(){const a=this.uint32(),c=this.pos,d=this.pos+a;if(d>this.len)throw indexOutOfRange(this,a);return this.pos+=a,c===d?new Uint8Array(0):this.buf.subarray(c,d)}string(){const a=this.bytes();return read$1(a,0,a.length)}skip(a){if(typeof a=="number"){if(this.pos+a>this.len)throw indexOutOfRange(this,a);this.pos+=a}else do if(this.pos>=this.len)throw indexOutOfRange(this);while(this.buf[this.pos++]&128);return this}skipType(a){switch(a){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(a=this.uint32()&7)!==4;)this.skipType(a);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${a} at offset ${this.pos}`)}return this}readLongVarint(){const a=new LongBits(0,0);let c=0;if(this.len-this.pos>4){for(;c<4;++c)if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a;if(a.lo=(a.lo|(this.buf[this.pos]&127)<<28)>>>0,a.hi=(a.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return a;c=0}else{for(;c<3;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}return a.lo=(a.lo|(this.buf[this.pos++]&127)<>>0,a}if(this.len-this.pos>4){for(;c<5;++c)if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}else for(;c<5;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw indexOutOfRange(this,8);const a=readFixed32End(this.buf,this.pos+=4),c=readFixed32End(this.buf,this.pos+=4);return new LongBits(a,c)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){const a=decodeUint8Array(this.buf,this.pos);return this.pos+=encodingLength(a),a}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}}function createReader(o){return new Uint8ArrayReader(o instanceof Uint8Array?o:o.subarray())}function decodeMessage(o,a,c){const d=createReader(o);return a.decode(d,void 0,c)}function pool(o){let d,tt=8192;return function($a){if($a<1||$a>4096)return allocUnsafe($a);tt+$a>8192&&(d=allocUnsafe(8192),tt=0);const Ys=d.subarray(tt,tt+=$a);return tt&7&&(tt=(tt|7)+1),Ys}}let Op$1=class{constructor(a,c,d){aw(this,"fn");aw(this,"len");aw(this,"next");aw(this,"val");this.fn=a,this.len=c,this.next=void 0,this.val=d}};function noop$b(){}class State{constructor(a){aw(this,"head");aw(this,"tail");aw(this,"len");aw(this,"next");this.head=a.head,this.tail=a.tail,this.len=a.len,this.next=a.states}}const bufferPool=pool();function alloc$1(o){return globalThis.Buffer!=null?allocUnsafe(o):bufferPool(o)}class Uint8ArrayWriter{constructor(){aw(this,"len");aw(this,"head");aw(this,"tail");aw(this,"states");this.len=0,this.head=new Op$1(noop$b,0,0),this.tail=this.head,this.states=null}_push(a,c,d){return this.tail=this.tail.next=new Op$1(a,c,d),this.len+=c,this}uint32(a){return this.len+=(this.tail=this.tail.next=new VarintOp((a=a>>>0)<128?1:a<16384?2:a<2097152?3:a<268435456?4:5,a)).len,this}int32(a){return a<0?this._push(writeVarint64,10,LongBits.fromNumber(a)):this.uint32(a)}sint32(a){return this.uint32((a<<1^a>>31)>>>0)}uint64(a){const c=LongBits.fromBigInt(a);return this._push(writeVarint64,c.length(),c)}uint64Number(a){return this._push(encodeUint8Array,encodingLength(a),a)}uint64String(a){return this.uint64(BigInt(a))}int64(a){return this.uint64(a)}int64Number(a){return this.uint64Number(a)}int64String(a){return this.uint64String(a)}sint64(a){const c=LongBits.fromBigInt(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64Number(a){const c=LongBits.fromNumber(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64String(a){return this.sint64(BigInt(a))}bool(a){return this._push(writeByte,1,a?1:0)}fixed32(a){return this._push(writeFixed32,4,a>>>0)}sfixed32(a){return this.fixed32(a)}fixed64(a){const c=LongBits.fromBigInt(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64Number(a){const c=LongBits.fromNumber(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64String(a){return this.fixed64(BigInt(a))}sfixed64(a){return this.fixed64(a)}sfixed64Number(a){return this.fixed64Number(a)}sfixed64String(a){return this.fixed64String(a)}float(a){return this._push(writeFloatLE,4,a)}double(a){return this._push(writeDoubleLE,8,a)}bytes(a){const c=a.length>>>0;return c===0?this._push(writeByte,1,0):this.uint32(c)._push(writeBytes,c,a)}string(a){const c=length$1(a);return c!==0?this.uint32(c)._push(write$1,c,a):this._push(writeByte,1,0)}fork(){return this.states=new State(this),this.head=this.tail=new Op$1(noop$b,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Op$1(noop$b,0,0),this.len=0),this}ldelim(){const a=this.head,c=this.tail,d=this.len;return this.reset().uint32(d),d!==0&&(this.tail.next=a.next,this.tail=c,this.len+=d),this}finish(){let a=this.head.next;const c=alloc$1(this.len);let d=0;for(;a!=null;)a.fn(a.val,c,d),d+=a.len,a=a.next;return c}}function writeByte(o,a,c){a[c]=o&255}function writeVarint32(o,a,c){for(;o>127;)a[c++]=o&127|128,o>>>=7;a[c]=o}class VarintOp extends Op$1{constructor(c,d){super(writeVarint32,c,d);aw(this,"next");this.next=void 0}}function writeVarint64(o,a,c){for(;o.hi!==0;)a[c++]=o.lo&127|128,o.lo=(o.lo>>>7|o.hi<<25)>>>0,o.hi>>>=7;for(;o.lo>127;)a[c++]=o.lo&127|128,o.lo=o.lo>>>7;a[c++]=o.lo}function writeFixed32(o,a,c){a[c]=o&255,a[c+1]=o>>>8&255,a[c+2]=o>>>16&255,a[c+3]=o>>>24}function writeBytes(o,a,c){a.set(o,c)}globalThis.Buffer!=null&&(Uint8ArrayWriter.prototype.bytes=function(o){const a=o.length>>>0;return this.uint32(a),a>0&&this._push(writeBytesBuffer,a,o),this},Uint8ArrayWriter.prototype.string=function(o){const a=globalThis.Buffer.byteLength(o);return this.uint32(a),a>0&&this._push(writeStringBuffer,a,o),this});function writeBytesBuffer(o,a,c){a.set(o,c)}function writeStringBuffer(o,a,c){o.length<40?write$1(o,a,c):a.utf8Write!=null?a.utf8Write(o,c):a.set(fromString(o),c)}function createWriter(){return new Uint8ArrayWriter}function encodeMessage(o,a){const c=createWriter();return a.encode(o,c,{lengthDelimited:!1}),c.finish()}var CODEC_TYPES;(function(o){o[o.VARINT=0]="VARINT",o[o.BIT64=1]="BIT64",o[o.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",o[o.START_GROUP=3]="START_GROUP",o[o.END_GROUP=4]="END_GROUP",o[o.BIT32=5]="BIT32"})(CODEC_TYPES||(CODEC_TYPES={}));function createCodec(o,a,c,d){return{name:o,type:a,encode:c,decode:d}}function enumeration(o){function a(tt){if(o[tt.toString()]==null)throw new Error("Invalid enum value");return o[tt]}const c=function(nt,$a){const Ys=a(nt);$a.int32(Ys)},d=function(nt){const $a=nt.int32();return a($a)};return createCodec("enum",CODEC_TYPES.VARINT,c,d)}function message(o,a){return createCodec("message",CODEC_TYPES.LENGTH_DELIMITED,o,a)}var KeyType;(function(o){o.RSA="RSA",o.Ed25519="Ed25519",o.Secp256k1="Secp256k1"})(KeyType||(KeyType={}));var __KeyTypeValues;(function(o){o[o.RSA=0]="RSA",o[o.Ed25519=1]="Ed25519",o[o.Secp256k1=2]="Secp256k1"})(__KeyTypeValues||(__KeyTypeValues={}));(function(o){o.codec=()=>enumeration(__KeyTypeValues)})(KeyType||(KeyType={}));var PublicKey$2;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PublicKey$2||(PublicKey$2={}));var PrivateKey;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PrivateKey||(PrivateKey={}));class Ed25519PublicKey{constructor(a){aw(this,"_key");this._key=ensureKey(a,PUBLIC_KEY_BYTE_LENGTH)}verify(a,c){return hashAndVerify$2(this._key,c,a)}marshal(){return this._key}get bytes(){return PublicKey$2.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class Ed25519PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=ensureKey(a,PRIVATE_KEY_BYTE_LENGTH),this._publicKey=ensureKey(c,PUBLIC_KEY_BYTE_LENGTH)}sign(a){return hashAndSign$2(this._key,a)}get public(){return new Ed25519PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}async id(){const a=identity$2.digest(this.public.bytes);return base58btc.encode(a.bytes).substring(1)}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalEd25519PrivateKey(o){if(o.length>PRIVATE_KEY_BYTE_LENGTH){o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH+PUBLIC_KEY_BYTE_LENGTH);const d=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),tt=o.subarray(PRIVATE_KEY_BYTE_LENGTH,o.length);return new Ed25519PrivateKey(d,tt)}o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH);const a=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),c=o.subarray(PUBLIC_KEY_BYTE_LENGTH);return new Ed25519PrivateKey(a,c)}function unmarshalEd25519PublicKey(o){return o=ensureKey(o,PUBLIC_KEY_BYTE_LENGTH),new Ed25519PublicKey(o)}async function generateKeyPair$3(){const{privateKey:o,publicKey:a}=generateKey$2();return new Ed25519PrivateKey(o,a)}async function generateKeyPairFromSeed(o){const{privateKey:a,publicKey:c}=generateKeyFromSeed(o);return new Ed25519PrivateKey(a,c)}function ensureKey(o,a){if(o=Uint8Array.from(o??[]),o.length!==a)throw new CodeError(`Key must be a Uint8Array of length ${a}, got ${o.length}`,"ERR_INVALID_KEY_TYPE");return o}const Ed25519=Object.freeze(Object.defineProperty({__proto__:null,Ed25519PrivateKey,Ed25519PublicKey,generateKeyPair:generateKeyPair$3,generateKeyPairFromSeed,unmarshalEd25519PrivateKey,unmarshalEd25519PublicKey},Symbol.toStringTag,{value:"Module"}));function toString$b(o,a="utf8"){const c=BASES[a];if(c==null)throw new Error(`Unsupported encoding "${a}"`);return c.encoder.encode(o).substring(1)}function randomBytes$4(o){if(isNaN(o)||o<=0)throw new CodeError("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return randomBytes$5(o)}let HMAC$1=class extends Hash$9{constructor(a,c){super(),this.finished=!1,this.destroyed=!1,hash$a(a);const d=toBytes$1(c);if(this.iHash=a.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const tt=this.blockLen,nt=new Uint8Array(tt);nt.set(d.length>tt?a.create().update(d).digest():d);for(let $a=0;$anew HMAC$1(o,a).update(c).digest();hmac$2.create=(o,a)=>new HMAC$1(o,a);function pbkdf2Init(o,a,c,d){hash$a(o);const tt=checkOpts({dkLen:32,asyncTick:10},d),{c:nt,dkLen:$a,asyncTick:Ys}=tt;if(number$3(nt),number$3($a),number$3(Ys),nt<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const gu=toBytes$1(a),xu=toBytes$1(c),$u=new Uint8Array($a),Iu=hmac$2.create(o,gu),Xu=Iu._cloneInto().update(xu);return{c:nt,dkLen:$a,asyncTick:Ys,DK:$u,PRF:Iu,PRFSalt:Xu}}function pbkdf2Output(o,a,c,d,tt){return o.destroy(),a.destroy(),d&&d.destroy(),tt.fill(0),c}async function pbkdf2Async(o,a,c,d){const{c:tt,dkLen:nt,asyncTick:$a,DK:Ys,PRF:gu,PRFSalt:xu}=pbkdf2Init(o,a,c,d);let $u;const Iu=new Uint8Array(4),Xu=createView$1(Iu),i0=new Uint8Array(gu.outputLen);for(let p0=1,w0=0;w0{gu._cloneInto($u).update(i0).digestInto(i0);for(let $0=0;$0{validators$5[o]=function(d){return typeof d===o||"a"+(a<1?"n ":" ")+o}});const deprecatedWarnings={};validators$5.transitional=function(a,c,d){function tt(nt,$a){return"[Axios v"+VERSION$2+"] Transitional option '"+nt+"'"+$a+(d?". "+d:"")}return(nt,$a,Ws)=>{if(a===!1)throw new AxiosError$1(tt($a," has been removed"+(c?" in "+c:"")),AxiosError$1.ERR_DEPRECATED);return c&&!deprecatedWarnings[$a]&&(deprecatedWarnings[$a]=!0,console.warn(tt($a," has been deprecated since v"+c+" and will be removed in the near future"))),a?a(nt,$a,Ws):!0}};function assertOptions(o,a,c){if(typeof o!="object")throw new AxiosError$1("options must be an object",AxiosError$1.ERR_BAD_OPTION_VALUE);const d=Object.keys(o);let tt=d.length;for(;tt-- >0;){const nt=d[tt],$a=a[nt];if($a){const Ws=o[nt],gu=Ws===void 0||$a(Ws,nt,o);if(gu!==!0)throw new AxiosError$1("option "+nt+" must be "+gu,AxiosError$1.ERR_BAD_OPTION_VALUE);continue}if(c!==!0)throw new AxiosError$1("Unknown option "+nt,AxiosError$1.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$5},validators$4=validator.validators;let Axios$1=class{constructor(a){this.defaults=a,this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}async request(a,c){try{return await this._request(a,c)}catch(d){if(d instanceof Error){let tt;Error.captureStackTrace?Error.captureStackTrace(tt={}):tt=new Error;const nt=tt.stack?tt.stack.replace(/^.+\n/,""):"";try{d.stack?nt&&!String(d.stack).endsWith(nt.replace(/^.+\n.+\n/,""))&&(d.stack+=` +`+nt):d.stack=nt}catch{}}throw d}}_request(a,c){typeof a=="string"?(c=c||{},c.url=a):c=a||{},c=mergeConfig$1(this.defaults,c);const{transitional:d,paramsSerializer:tt,headers:nt}=c;d!==void 0&&validator.assertOptions(d,{silentJSONParsing:validators$4.transitional(validators$4.boolean),forcedJSONParsing:validators$4.transitional(validators$4.boolean),clarifyTimeoutError:validators$4.transitional(validators$4.boolean)},!1),tt!=null&&(utils$A.isFunction(tt)?c.paramsSerializer={serialize:tt}:validator.assertOptions(tt,{encode:validators$4.function,serialize:validators$4.function},!0)),c.method=(c.method||this.defaults.method||"get").toLowerCase();let $a=nt&&utils$A.merge(nt.common,nt[c.method]);nt&&utils$A.forEach(["delete","get","head","post","put","patch","common"],p0=>{delete nt[p0]}),c.headers=AxiosHeaders$1.concat($a,nt);const Ws=[];let gu=!0;this.interceptors.request.forEach(function(y0){typeof y0.runWhen=="function"&&y0.runWhen(c)===!1||(gu=gu&&y0.synchronous,Ws.unshift(y0.fulfilled,y0.rejected))});const Su=[];this.interceptors.response.forEach(function(y0){Su.push(y0.fulfilled,y0.rejected)});let $u,Iu=0,Xu;if(!gu){const p0=[dispatchRequest.bind(this),void 0];for(p0.unshift.apply(p0,Ws),p0.push.apply(p0,Su),Xu=p0.length,$u=Promise.resolve(c);Iu{if(!d._listeners)return;let nt=d._listeners.length;for(;nt-- >0;)d._listeners[nt](tt);d._listeners=null}),this.promise.then=tt=>{let nt;const $a=new Promise(Ws=>{d.subscribe(Ws),nt=Ws}).then(tt);return $a.cancel=function(){d.unsubscribe(nt)},$a},a(function(nt,$a,Ws){d.reason||(d.reason=new CanceledError$1(nt,$a,Ws),c(d.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;const c=this._listeners.indexOf(a);c!==-1&&this._listeners.splice(c,1)}static source(){let a;return{token:new Ive(function(tt){a=tt}),cancel:a}}};function spread$1(o){return function(c){return o.apply(null,c)}}function isAxiosError$1(o){return utils$A.isObject(o)&&o.isAxiosError===!0}const HttpStatusCode$1={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode$1).forEach(([o,a])=>{HttpStatusCode$1[a]=o});function createInstance(o){const a=new Axios$1(o),c=bind$f(Axios$1.prototype.request,a);return utils$A.extend(c,Axios$1.prototype,a,{allOwnKeys:!0}),utils$A.extend(c,a,null,{allOwnKeys:!0}),c.create=function(tt){return createInstance(mergeConfig$1(o,tt))},c}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError$1;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel$1;axios.VERSION=VERSION$2;axios.toFormData=toFormData$1;axios.AxiosError=AxiosError$1;axios.Cancel=axios.CanceledError;axios.all=function(a){return Promise.all(a)};axios.spread=spread$1;axios.isAxiosError=isAxiosError$1;axios.mergeConfig=mergeConfig$1;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=o=>formDataToJSON(utils$A.isHTMLForm(o)?new FormData(o):o);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const{Axios,AxiosError,CanceledError,isCancel,CancelToken,VERSION:VERSION$1,all:all$1,Cancel,isAxiosError,spread,toFormData,AxiosHeaders,HttpStatusCode,formToJSON,getAdapter,mergeConfig}=axios;class AxiosHttpClient{constructor(a,c){aw(this,"axios");aw(this,"showServerDownPopup");this.axios=a,this.showServerDownPopup=c,this.axios.interceptors.response.use(d=>d,d=>{var tt;return((tt=d.response)==null?void 0:tt.status)===401&&(window.location.href="/admin-dashboard/"),d.response||this.showServerDownPopup(),Promise.reject(d)})}async get(a,c={}){return this.request(this.axios.get(a,{headers:c}))}async post(a,c,d={}){return this.request(this.axios.post(a,c,{headers:d}))}async put(a,c,d={}){return this.request(this.axios.put(a,c,{headers:d}))}async delete(a,c={}){return this.request(this.axios.delete(a,{headers:c}))}async patch(a,c,d={}){return this.request(this.axios.patch(a,c,{headers:d}))}async head(a,c={}){return this.request(this.axios.head(a,{headers:c}))}async request(a){var c,d,tt;try{const nt=await a;return nt.config.method.toUpperCase()==="HEAD"?{data:void 0}:nt.data}catch(nt){if(nt instanceof AxiosError){if(((d=(c=nt.config)==null?void 0:c.method)==null?void 0:d.toUpperCase())==="HEAD")return{error:{code:nt.request.status,message:nt.message}};const $a=(tt=nt.response)==null?void 0:tt.data,Ws=$a.error;return!$a&&(!Ws||!Ws.message||!Ws.code)?{error:GENERIC_ERROR}:typeof $a=="string"?{error:{code:nt.request.status,message:$a}}:typeof Ws=="string"?{error:{code:nt.request.status,message:Ws}}:{error:{code:(Ws==null?void 0:Ws.code)||nt.request.status,message:Ws==null?void 0:Ws.message}}}return{error:GENERIC_ERROR}}}}const GENERIC_ERROR={code:500,message:"Something went wrong"},useMetamask$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard"},useNear$1={verifyMessageError:"Error while verifying message",missingUrlParamsError:"Missing url parameters",loginError:"Error while login",rootkeyError:"Error while adding root key",messageNotVerifiedError:"Message not verified",signMessageError:"Error while signing message",signOutError:"Failed to signing out"},useStarknet$1={requestNodeDataError:"Error while requesting node data",noSignatureError:"Signature is empty",noAddressError:"Address is empty",loginError:"Error while login",rootkeyError:"Error while adding root key",applicationNameText:"admin-dashboard",signMessageError:"Error while signing message",signOutError:"Failed to signing out",errorChangingNetwork:"Error changing network",walletNotFound:"Wallet not found",errorLogin:"Error while login"},useIcp$1={requestNodeDataError:"Error while requesting node data",errorChangingNetwork:"Error changing network",loginError:"Error while login",rootkeyError:"Error while adding root key",signMessageError:"Error while signing message"},loginPage={logoDashboardText:"Admin Dashboard",title:"Calimero Node Admin Dashboard",subtitle:"Start using Calimero by selecting your wallet.",buttonConnectText:"Connect Wallet",loginSelector:{title:"Continue with wallet",metamaskButtonText:"Metamask wallet",nearButtonText:"Near wallet",starknetButtonText:"Starknet wallet",IcpButtonText:"Internet Computer"},nearLogin:{title:"Login with NEAR",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},IcpLogin:{title:"Login with Internet Identity",subtitle:"Choose from which account you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backToLoginPage:"Back to login page"},metamaskLogin:{titleLogin:"Login with Metamask",titleRootKey:"Add Metamask root key",subtitle:"Choose which account from your wallet you want to log in with",authButtonText:"Sign authentication transaction",errorTitleText:"Error signing message",backButtonText:"Back to wallet selector"},starknetLogin:{title:"Login with Starknet",subtitle:"Choose which account from your wallet you want to log in with",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Authenticate",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector",argentXButton:"Login with ArgentX",metamaskButton:"Login with MetaMask",titleRootKey:"Add Starknet root key",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"}},addRootKeyPage={nearRootKey:{title:"Add NEAR root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",switchWalletButtonText:"Switch Wallet",authButtonText:"Add root key",switchAccountButtonText:"Switch Account",backButtonText:"Back to wallet selector"},starknetRootKey:{title:"Add Starknet root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",argentXButton:"Add root key with ArgentX",metamaskButton:"Add root key with MetaMask",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",backToLoginPage:"Back to login selector"},IcpKey:{title:"Add Internet Identity root key",subtitle:"Choose which account from your wallet you want to add a node root key for. Each key, and therefore each account, can only be added once",accountIdText:"Account Id",logoutButtonText:"Logout",currentNetwork:"Current network",signMessage:"Sign authentication message",backToWalletSelector:"Back to wallet selector",authButtonText:"Add root key",backToLoginPage:"Back to login selector"}},footer={title:"Calimero Network"},navigation={logoDashboardText:"Admin Dashboard",pkTest:"Public Key"},applicationsPage={applicationsTable:{title:"Applications",publishNewAppText:"Publish new application",noAvailableAppsText:"No applications available",noAvailableReleasesText:"No available releases",noInstalledAppsText:"No installed applications",noOwnedAppsText:"No owned applications",installNewAppText:"install new application",actionDialog:{title:"Uninstall Application",subtitle:"Are you sure you want to uninstall this application? This action cannot be undone.",buttonActionText:"Uninstall"}},installApplication:{title:"Install Application",backButtonText:"Back to Applications",selectAppLabel:"Select Application to Install",dropdownPlaceholder:"Applications",packageDetailsLabel:"Package Details",releaseSelectionLabel:"Select Application Release",releaseDetailsLabel:"Release Details",installErrorTitle:"Failed to install application",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",installButtonText:"Install application",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",failInstallTitle:"Error installing application",successInstallTitle:"Application installed successfully"},publishApplication:{title:"Publish new application",addAccountButtonText:"Add wallet account",connectAccountTitle:"Connect owner account",connectAccountSubtitle:"Owner account is holder of application and only that account can publish new releases.",connectAccountButtonText:"Connect account",buttonText:"Publish"},addRelease:{title:"Add new release",buttonText:"Publish",latestReleaseText:"Latest application version is : "}},confirmWallet={logoText:"Admin Dashboard",title:"Confirm Wallet",accountIdText:"Account Id",signatureText:"Signature",publicKeyText:"PublicKey",callbackUrlText:"Callback Url",submitButtonText:"Submit Request",backButtonText:"Back to login"},keysPage={title:"Keys"},keysTable={noKeysText:"No keys found in the node.",headerPkText:"Public Key",headerTypeText:"Type",badgeActiveText:"Active",badgeRevokedText:"Revoked",setActiveText:"Set Active",revokeKeyText:"Revoke Key",addNewText:"Add new Key"},uploadPage={title:"Upload Application",walletButtonText:"Add wallet account",switchPackageText:"Add Package",switchReleaseText:"Add Release"},uploadApplication={title:"Add Release",subtitle:"To install the application first upload the application wasm to the IPFS, select the package you want to add the release for and fill the release details.",uploadIpfsTitle:"IPFS Application upload",inputLabelText:"Select Application .wasm file to upload",buttonUploadLabel:"Upload wasm",buttonUploadText:"Upload",cidLabelText:"File IPFS CID",backButtonText:"Back",releaseTitle:"Add new release",nameLabelText:"Name",pathLabelText:"Path",versionLabelText:"Version",notesLabelText:"Notes",hashLabelText:"Hash",buttonAddReleaseText:"Add Release",versionPlaceholder:"1.0.0",notesPlaceholder:"Initial release",hashPlaceholder:"QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7QmZ3Z8Q7",addReleaseButtonText:"Add Release",loginLableText:"To Deploy new release, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account",selectPackageLabel:"Select Package",pathPlaceholder:"url to the wasm file"},addPackageForm={title:"Add application details",subtitle:"To successfully install the application, first you need to add the package details and procceed to add relase.",nameLabelText:"Package Name",repositoryLabelText:"Repository URL",descriptionLabelText:"Description",buttonAddPackageText:"Add Package",buttonNextText:"Next",namePlaceholder:"chat-application",repositoryPlaceholder:"https://github.com/",descriptionPlaceholder:"A chat application built for P2P network",loginLableText:"To Deploy new package, you need to sign in using wallet account button!",deployerDropdownlabel:"Select deployer account",deployerDropdownText:"Deployer Account"},statusModal={buttonContinueText:"Continue",buttonDeleteText:"Delete",buttonCopyText:"Copy",buttonCloseText:"Close",buttonCancelText:"Cancel"},contextPage={contextPageTitle:"Contexts",startNewContextText:"Start new context",joinContextText:"Join existing context",noContextsText:"No contexts found in the node.",contextPageDescription:"Contexts are the core of the Calimero ecosystem. These are application specific networks designed to enable direct communication between users, eliminating the need for intermediaries.",invitedListDescription:"Contexts you have been invited to",noJoinedAppsListText:"You have not joined any contexts.",noInviedAppsListText:"You have not been invited to any contexts.",devApplicationTitle:"Development application",deleteContextText:"Delete Context",contextDetails:{title:"Context Details",clientKeysListDescription:"Client keys are authorization keys used by the application frontend.",noClientKeysText:"No data found.",noUsersText:"No users found in the context.",labelIdText:"Id: ",labelNameText:"Name: ",labelOwnerText:"Owner: ",labelDescriptionText:"Description: ",labelRepositoryText:"Repository URL: ",lableVersionText:"Version: ",labelAppId:"App ID: ",titleApps:"Installed application",localAppTitle:"Metadata not available for locally installed application",titleStorage:"Storage",labelStorageText:"Used: "},actionDialog:{title:"Delete Context",subtitle:"Are you sure you want to delete this context? This action cannot be undone."},contextInvitation:{invitationText:"Invited on ",acceptButtonText:"Accept",declineButtonText:"Decline"}},startContextPage={backButtonText:"back to context select",selectApplicationTitle:"Select app from the marketplace or publish new application",selectedApplicationTitle:"Selected Application",initSectionTitle:"Initialize application state",argsTitleText:"Arguments",methodLabelText:"method name",argsLabelText:"arguments json",buttonFormatText:"format",loginRequestPopupTitle:"Application Sign-in Request - Start Context",detailsText:"Details",applicationList:{listTitle:"Select Available Application",noAvailableAppsText:"No applications available",noOwnedAppsText:"No owned applications installed"},startContextSuccessTitle:"Context started",startedContextMessage:"Application context has been started successfully.",startContextErrorTitle:"Failed to start context",startContextErrorMessage:"Failed to start the application context.",idLabelText:"Application ID: ",nameLabelText:"Application Name: ",versionLabelText:"Version: ",successInstallTitle:"Application installed successfully",failInstallTitle:"Error installing application"},joinContextPage={title:"Join existing Context",buttonJoinText:"Join Context",joinErrorTitle:"Failed to join context",joinSuccessTitle:"Context joined",joinSuccessMessage:"Context joined successfully",contextIdLabel:"Context ID"},exportIdentityPage={title:"Export",description:"Export decentralized identifiers (DIDs) associated with the node.",buttonExportText:"Export Identity",exportErrorTitle:"Failed to export node identity",exportSuccessTitle:"Identity exported"},identityPage={title:"Root keys",addRootKeyText:"Add new root key",loggedInLabel:"Logged in with: ",noRootKeysText:"No root keys found in the node."},serverDown={useHookComponentErrorText:"useServerDown must be used within a ServerDownProvider",popupTitle:"503 - Service Unavailable",popupMessage:"The Node Server at {{nodeApiEndpoint}} is unreachable. Please try again later."},nodeDataSource={joinContextErrorTitle:"Error joining context",joinContextErrorMessage:"Failed to join context",unauthorizedErrorMessage:"Unauthorized"},authHeaders={errorText:"Error extracting private key"},walletSelectorContext={alertErrorText:"Failed to initialise wallet selector",componentErrorText:"useWalletSelector must be used within a WalletSelectorContextProvider"},appLoginPopup={createTokenError:"Error creating token, please try again",selectContext:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextsTitle:"Select Context",contextsSubtitle:"To continue select available or start a new context for the application",noContextsText:"No contexts found",selectedContextText:"Selected context Id:",buttonNextText:"Confirm context Id",buttonBackText:"Return to application",buttonCreateText:"Start new"},selectIdentity:{title:"Application Sign-in Request",detailsText:"Details",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",contextsTitle:"Select context identity",contextsSubtitle:"To continue select available context identity for the application",noContextsText:"No contexts identities found",selectedContextText:"Selected context identity:",backButtonText:"back to context select",buttonNextText:"Confirm context identity",buttonBackText:"Return to application"},createToken:{title:"Application Sign-in Request",websiteText:"From site: ",appIdText:"Application Id: ",contextIdText:"Context Id: ",backButtonText:"back to select context identity",contextIdentityText:"Context Identity: ",detailsText:"Details",buttonNextText:"Create token"}},setupModal$1={inputIdLengthError:"Application ID must be between 32 and 44 characters long.",inputEncodeError:"Application ID must contain only base58 characters.",nodeHealthCheckError:"Connection failed. Please check if node url is correct.",modalTitle:"App setup",urlInputPlacerholder:"node url",buttonSetText:"Set node url"},translations={useMetamask:useMetamask$1,useNear:useNear$1,useStarknet:useStarknet$1,useIcp:useIcp$1,loginPage,addRootKeyPage,footer,navigation,applicationsPage,confirmWallet,keysPage,keysTable,uploadPage,uploadApplication,addPackageForm,statusModal,contextPage,startContextPage,joinContextPage,exportIdentityPage,identityPage,serverDown,nodeDataSource,authHeaders,walletSelectorContext,appLoginPopup,setupModal:setupModal$1};function createAppMetadata(o){var a={contractAppId:o};return Array.from(new TextEncoder().encode(JSON.stringify(a)))}function parseAppMetadata(o){try{if(o.length===0)return null;var a=JSON.parse(new TextDecoder().decode(new Uint8Array(o)));return a}catch{return null}}function getNodeUrl(){let o=getAppEndpointKey();if(!o){let a="http://localhost:2428";return setAppEndpointKey(a),a}return o??""}function getNearEnvironment(){return"testnet"}const Ed25519$1="Ed25519";class CodeError extends Error{constructor(c,d,tt){super(c);aw(this,"code");aw(this,"props");this.code=d,this.name=(tt==null?void 0:tt.name)??"CodeError",this.props=tt??{}}}class AggregateCodeError extends AggregateError{constructor(c,d,tt,nt){super(c,d);aw(this,"code");aw(this,"props");this.code=tt,this.name=(nt==null?void 0:nt.name)??"AggregateCodeError",this.props=nt??{}}}var events={exports:{}},R$3=typeof Reflect=="object"?Reflect:null,ReflectApply=R$3&&typeof R$3.apply=="function"?R$3.apply:function(a,c,d){return Function.prototype.apply.call(a,c,d)},ReflectOwnKeys;R$3&&typeof R$3.ownKeys=="function"?ReflectOwnKeys=R$3.ownKeys:Object.getOwnPropertySymbols?ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a).concat(Object.getOwnPropertySymbols(a))}:ReflectOwnKeys=function(a){return Object.getOwnPropertyNames(a)};function ProcessEmitWarning(o){console&&console.warn&&console.warn(o)}var NumberIsNaN=Number.isNaN||function(a){return a!==a};function EventEmitter$1(){EventEmitter$1.init.call(this)}events.exports=EventEmitter$1;events.exports.once=once;EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=void 0;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=void 0;var defaultMaxListeners=10;function checkListener(o){if(typeof o!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof o)}Object.defineProperty(EventEmitter$1,"defaultMaxListeners",{enumerable:!0,get:function(){return defaultMaxListeners},set:function(o){if(typeof o!="number"||o<0||NumberIsNaN(o))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+o+".");defaultMaxListeners=o}});EventEmitter$1.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};EventEmitter$1.prototype.setMaxListeners=function(a){if(typeof a!="number"||a<0||NumberIsNaN(a))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+a+".");return this._maxListeners=a,this};function _getMaxListeners(o){return o._maxListeners===void 0?EventEmitter$1.defaultMaxListeners:o._maxListeners}EventEmitter$1.prototype.getMaxListeners=function(){return _getMaxListeners(this)};EventEmitter$1.prototype.emit=function(a){for(var c=[],d=1;d0&&($a=c[0]),$a instanceof Error)throw $a;var Ws=new Error("Unhandled error."+($a?" ("+$a.message+")":""));throw Ws.context=$a,Ws}var gu=nt[a];if(gu===void 0)return!1;if(typeof gu=="function")ReflectApply(gu,this,c);else for(var Su=gu.length,$u=arrayClone(gu,Su),d=0;d0&&$a.length>tt&&!$a.warned){$a.warned=!0;var Ws=new Error("Possible EventEmitter memory leak detected. "+$a.length+" "+String(a)+" listeners added. Use emitter.setMaxListeners() to increase limit");Ws.name="MaxListenersExceededWarning",Ws.emitter=o,Ws.type=a,Ws.count=$a.length,ProcessEmitWarning(Ws)}return o}EventEmitter$1.prototype.addListener=function(a,c){return _addListener(this,a,c,!1)};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function(a,c){return _addListener(this,a,c,!0)};function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(o,a,c){var d={fired:!1,wrapFn:void 0,target:o,type:a,listener:c},tt=onceWrapper.bind(d);return tt.listener=c,d.wrapFn=tt,tt}EventEmitter$1.prototype.once=function(a,c){return checkListener(c),this.on(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.prependOnceListener=function(a,c){return checkListener(c),this.prependListener(a,_onceWrap(this,a,c)),this};EventEmitter$1.prototype.removeListener=function(a,c){var d,tt,nt,$a,Ws;if(checkListener(c),tt=this._events,tt===void 0)return this;if(d=tt[a],d===void 0)return this;if(d===c||d.listener===c)--this._eventsCount===0?this._events=Object.create(null):(delete tt[a],tt.removeListener&&this.emit("removeListener",a,d.listener||c));else if(typeof d!="function"){for(nt=-1,$a=d.length-1;$a>=0;$a--)if(d[$a]===c||d[$a].listener===c){Ws=d[$a].listener,nt=$a;break}if(nt<0)return this;nt===0?d.shift():spliceOne(d,nt),d.length===1&&(tt[a]=d[0]),tt.removeListener!==void 0&&this.emit("removeListener",a,Ws||c)}return this};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function(a){var c,d,tt;if(d=this._events,d===void 0)return this;if(d.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):d[a]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete d[a]),this;if(arguments.length===0){var nt=Object.keys(d),$a;for(tt=0;tt=0;tt--)this.removeListener(a,c[tt]);return this};function _listeners(o,a,c){var d=o._events;if(d===void 0)return[];var tt=d[a];return tt===void 0?[]:typeof tt=="function"?c?[tt.listener||tt]:[tt]:c?unwrapListeners(tt):arrayClone(tt,tt.length)}EventEmitter$1.prototype.listeners=function(a){return _listeners(this,a,!0)};EventEmitter$1.prototype.rawListeners=function(a){return _listeners(this,a,!1)};EventEmitter$1.listenerCount=function(o,a){return typeof o.listenerCount=="function"?o.listenerCount(a):listenerCount.call(o,a)};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(o){var a=this._events;if(a!==void 0){var c=a[o];if(typeof c=="function")return 1;if(c!==void 0)return c.length}return 0}EventEmitter$1.prototype.eventNames=function(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]};function arrayClone(o,a){for(var c=new Array(a),d=0;d=255)throw new TypeError("Alphabet too long");for(var c=new Uint8Array(256),d=0;d>>0,V0=new Uint8Array(L0);$0!==O0;){for(var F0=p0[$0],u1=0,g1=L0-1;(F0!==0||u1>>0,V0[g1]=F0%Ws>>>0,F0=F0/Ws>>>0;if(F0!==0)throw new Error("Non-zero carry");A0=u1,$0++}for(var E1=L0-A0;E1!==L0&&V0[E1]===0;)E1++;for(var B1=gu.repeat(y0);E1>>0,L0=new Uint8Array(O0);p0[y0];){var V0=c[p0.charCodeAt(y0)];if(V0===255)return;for(var F0=0,u1=O0-1;(V0!==0||F0<$0)&&u1!==-1;u1--,F0++)V0+=Ws*L0[u1]>>>0,L0[u1]=V0%256>>>0,V0=V0/256>>>0;if(V0!==0)throw new Error("Non-zero carry");$0=F0,y0++}if(p0[y0]!==" "){for(var g1=O0-$0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=new Uint8Array(A0+(O0-g1)),B1=A0;g1!==O0;)E1[B1++]=L0[g1++];return E1}}}function r0(p0){var y0=Xu(p0);if(y0)return y0;throw new Error(`Non-${a} character`)}return{encode:Iu,decodeUnsafe:Xu,decode:r0}}var src$2=base$5,_brrp__multiformats_scope_baseX=src$2;class Encoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");this.name=a,this.prefix=c,this.baseEncode=d}encode(a){if(a instanceof Uint8Array)return`${this.prefix}${this.baseEncode(a)}`;throw Error("Unknown type, must be binary type")}}class Decoder{constructor(a,c,d){aw(this,"name");aw(this,"prefix");aw(this,"baseDecode");aw(this,"prefixCodePoint");if(this.name=a,this.prefix=c,c.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=c.codePointAt(0),this.baseDecode=d}decode(a){if(typeof a=="string"){if(a.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(a)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(a.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(a){return or$1(this,a)}}class ComposedDecoder{constructor(a){aw(this,"decoders");this.decoders=a}or(a){return or$1(this,a)}decode(a){const c=a[0],d=this.decoders[c];if(d!=null)return d.decode(a);throw RangeError(`Unable to decode multibase string ${JSON.stringify(a)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}function or$1(o,a){return new ComposedDecoder({...o.decoders??{[o.prefix]:o},...a.decoders??{[a.prefix]:a}})}class Codec{constructor(a,c,d,tt){aw(this,"name");aw(this,"prefix");aw(this,"baseEncode");aw(this,"baseDecode");aw(this,"encoder");aw(this,"decoder");this.name=a,this.prefix=c,this.baseEncode=d,this.baseDecode=tt,this.encoder=new Encoder(a,c,d),this.decoder=new Decoder(a,c,tt)}encode(a){return this.encoder.encode(a)}decode(a){return this.decoder.decode(a)}}function from$2({name:o,prefix:a,encode:c,decode:d}){return new Codec(o,a,c,d)}function baseX$1({name:o,prefix:a,alphabet:c}){const{encode:d,decode:tt}=_brrp__multiformats_scope_baseX(c,o);return from$2({prefix:a,name:o,encode:d,decode:nt=>coerce(tt(nt))})}function decode$6(o,a,c,d){const tt={};for(let $u=0;$u=8&&(Ws-=8,$a[Su++]=255&gu>>Ws)}if(Ws>=c||255&gu<<8-Ws)throw new SyntaxError("Unexpected end of data");return $a}function encode$7(o,a,c){const d=a[a.length-1]==="=",tt=(1<c;)$a-=c,nt+=a[tt&Ws>>$a];if($a!==0&&(nt+=a[tt&Ws<=INT;)a[c++]=o&255|MSB$1,o/=128;for(;o&MSBALL;)a[c++]=o&255|MSB$1,o>>>=7;return a[c]=o|0,encode$6.bytes=c-d+1,a}var decode$5=read$2,MSB$1$1=128,REST$1$1=127;function read$2(o,d){var c=0,d=d||0,tt=0,nt=d,$a,Ws=o.length;do{if(nt>=Ws)throw read$2.bytes=0,new RangeError("Could not decode varint");$a=o[nt++],c+=tt<28?($a&REST$1$1)<=MSB$1$1);return read$2.bytes=nt-d,c}var N1$1=Math.pow(2,7),N2$1=Math.pow(2,14),N3$1=Math.pow(2,21),N4$1=Math.pow(2,28),N5$1=Math.pow(2,35),N6$1=Math.pow(2,42),N7$1=Math.pow(2,49),N8=Math.pow(2,56),N9=Math.pow(2,63),length$2=function(o){return ocreate$8(this.code,d))}else throw Error("Unknown type, must be binary type")}}function sha$5(o){return async a=>new Uint8Array(await crypto.subtle.digest(o,a))}const sha256$6=from$1({name:"sha2-256",code:18,encode:sha$5("SHA-256")});function equals(o,a){if(o===a)return!0;if(o.byteLength!==a.byteLength)return!1;for(let c=0;ctt+nt.length,0));const c=allocUnsafe(a);let d=0;for(const tt of o)c.set(tt,d),d+=tt.length;return c}const base10=baseX$1({prefix:"9",name:"base10",alphabet:"0123456789"}),base10$1=Object.freeze(Object.defineProperty({__proto__:null,base10},Symbol.toStringTag,{value:"Module"})),base16=rfc4648({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),base16upper=rfc4648({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),base16$1=Object.freeze(Object.defineProperty({__proto__:null,base16,base16upper},Symbol.toStringTag,{value:"Module"})),base2=rfc4648({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),base2$1=Object.freeze(Object.defineProperty({__proto__:null,base2},Symbol.toStringTag,{value:"Module"})),alphabet$1=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),alphabetBytesToChars=alphabet$1.reduce((o,a,c)=>(o[c]=a,o),[]),alphabetCharsToBytes=alphabet$1.reduce((o,a,c)=>(o[a.codePointAt(0)]=c,o),[]);function encode$4(o){return o.reduce((a,c)=>(a+=alphabetBytesToChars[c],a),"")}function decode$4(o){const a=[];for(const c of o){const d=alphabetCharsToBytes[c.codePointAt(0)];if(d===void 0)throw new Error(`Non-base256emoji character: ${c}`);a.push(d)}return new Uint8Array(a)}const base256emoji=from$2({prefix:"🚀",name:"base256emoji",encode:encode$4,decode:decode$4}),base256emoji$1=Object.freeze(Object.defineProperty({__proto__:null,base256emoji},Symbol.toStringTag,{value:"Module"})),base32=rfc4648({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),base32upper=rfc4648({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),base32pad=rfc4648({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),base32padupper=rfc4648({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),base32hex=rfc4648({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),base32hexupper=rfc4648({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),base32hexpad=rfc4648({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),base32hexpadupper=rfc4648({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),base32z=rfc4648({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5}),base32$1=Object.freeze(Object.defineProperty({__proto__:null,base32,base32hex,base32hexpad,base32hexpadupper,base32hexupper,base32pad,base32padupper,base32upper,base32z},Symbol.toStringTag,{value:"Module"})),base36=baseX$1({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),base36upper=baseX$1({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),base36$1=Object.freeze(Object.defineProperty({__proto__:null,base36,base36upper},Symbol.toStringTag,{value:"Module"})),base64$1=rfc4648({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),base64pad=rfc4648({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),base64url=rfc4648({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),base64urlpad=rfc4648({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6}),base64$2=Object.freeze(Object.defineProperty({__proto__:null,base64:base64$1,base64pad,base64url,base64urlpad},Symbol.toStringTag,{value:"Module"})),base8=rfc4648({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),base8$1=Object.freeze(Object.defineProperty({__proto__:null,base8},Symbol.toStringTag,{value:"Module"})),identity$1=from$2({prefix:"\0",name:"identity",encode:o=>toString$c(o),decode:o=>fromString$1(o)}),identityBase=Object.freeze(Object.defineProperty({__proto__:null,identity:identity$1},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const bases={...identityBase,...base2$1,...base8$1,...base10$1,...base16$1,...base32$1,...base36$1,...base58,...base64$2,...base256emoji$1};function createCodec$1(o,a,c,d){return{name:o,prefix:a,encoder:{name:o,prefix:a,encode:c},decoder:{decode:d}}}const string=createCodec$1("utf8","u",o=>"u"+new TextDecoder("utf8").decode(o),o=>new TextEncoder().encode(o.substring(1))),ascii=createCodec$1("ascii","a",o=>{let a="a";for(let c=0;c{o=o.substring(1);const a=allocUnsafe(o.length);for(let c=0;c0&&!a.includes(o.length))throw new Error(`Uint8Array expected of length ${a}, not of length=${o.length}`)}function hash$a(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$3(o.outputLen),number$3(o.blockLen)}function exists$3(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}function output$3(o,a){bytes$3(o);const c=a.outputLen;if(o.lengthnew Uint32Array(o.buffer,o.byteOffset,Math.floor(o.byteLength/4)),createView$1=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),rotr$1=(o,a)=>o<<32-a|o>>>a,isLE$1=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,byteSwap=o=>o<<24&4278190080|o<<8&16711680|o>>>8&65280|o>>>24&255;function byteSwap32(o){for(let a=0;a{};async function asyncLoop(o,a,c){let d=Date.now();for(let tt=0;tt=0&&nto().update(toBytes$1(d)).digest(),c=o();return a.outputLen=c.outputLen,a.blockLen=c.blockLen,a.create=()=>o(),a}function randomBytes$5(o=32){if(crypto$6&&typeof crypto$6.getRandomValues=="function")return crypto$6.getRandomValues(new Uint8Array(o));throw new Error("crypto.getRandomValues must be defined")}function setBigUint64$3(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ws=Number(c&nt),gu=d?4:0,Su=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+Su,Ws,d)}const Chi$2=(o,a,c)=>o&a^~o&c,Maj$2=(o,a,c)=>o&a^o&c^a&c;class HashMD extends Hash$9{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=createView$1(this.buffer)}update(a){exists$3(this);const{view:c,buffer:d,blockLen:tt}=this;a=toBytes$1(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iu>_32n$2&U32_MASK64$2)}:{h:Number(o>>_32n$2&U32_MASK64$2)|0,l:Number(o&U32_MASK64$2)|0}}function split$8(o,a=!1){let c=new Uint32Array(o.length),d=new Uint32Array(o.length);for(let tt=0;ttBigInt(o>>>0)<<_32n$2|BigInt(a>>>0),shrSH$1=(o,a,c)=>o>>>c,shrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrSH$1=(o,a,c)=>o>>>c|a<<32-c,rotrSL$1=(o,a,c)=>o<<32-c|a>>>c,rotrBH$1=(o,a,c)=>o<<64-c|a>>>c-32,rotrBL$1=(o,a,c)=>o>>>c-32|a<<64-c,rotr32H$1=(o,a)=>a,rotr32L$1=(o,a)=>o,rotlSH$2=(o,a,c)=>o<>>32-c,rotlSL$2=(o,a,c)=>a<>>32-c,rotlBH$2=(o,a,c)=>a<>>64-c,rotlBL$2=(o,a,c)=>o<>>64-c;function add$1(o,a,c,d){const tt=(a>>>0)+(d>>>0);return{h:o+c+(tt/2**32|0)|0,l:tt|0}}const add3L$1=(o,a,c)=>(o>>>0)+(a>>>0)+(c>>>0),add3H$1=(o,a,c,d)=>a+c+d+(o/2**32|0)|0,add4L$1=(o,a,c,d)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0),add4H$1=(o,a,c,d,tt)=>a+c+d+tt+(o/2**32|0)|0,add5L$1=(o,a,c,d,tt)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0)+(tt>>>0),add5H$1=(o,a,c,d,tt,nt)=>a+c+d+tt+nt+(o/2**32|0)|0,u64$1={fromBig:fromBig$2,split:split$8,toBig:toBig$1,shrSH:shrSH$1,shrSL:shrSL$1,rotrSH:rotrSH$1,rotrSL:rotrSL$1,rotrBH:rotrBH$1,rotrBL:rotrBL$1,rotr32H:rotr32H$1,rotr32L:rotr32L$1,rotlSH:rotlSH$2,rotlSL:rotlSL$2,rotlBH:rotlBH$2,rotlBL:rotlBL$2,add:add$1,add3L:add3L$1,add3H:add3H$1,add4L:add4L$1,add4H:add4H$1,add5H:add5H$1,add5L:add5L$1},[SHA512_Kh$1,SHA512_Kl$1]=u64$1.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(o=>BigInt(o))),SHA512_W_H$1=new Uint32Array(80),SHA512_W_L$1=new Uint32Array(80);let SHA512$4=class extends HashMD{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:a,Al:c,Bh:d,Bl:tt,Ch:nt,Cl:$a,Dh:Ws,Dl:gu,Eh:Su,El:$u,Fh:Iu,Fl:Xu,Gh:r0,Gl:p0,Hh:y0,Hl:A0}=this;return[a,c,d,tt,nt,$a,Ws,gu,Su,$u,Iu,Xu,r0,p0,y0,A0]}set(a,c,d,tt,nt,$a,Ws,gu,Su,$u,Iu,Xu,r0,p0,y0,A0){this.Ah=a|0,this.Al=c|0,this.Bh=d|0,this.Bl=tt|0,this.Ch=nt|0,this.Cl=$a|0,this.Dh=Ws|0,this.Dl=gu|0,this.Eh=Su|0,this.El=$u|0,this.Fh=Iu|0,this.Fl=Xu|0,this.Gh=r0|0,this.Gl=p0|0,this.Hh=y0|0,this.Hl=A0|0}process(a,c){for(let L0=0;L0<16;L0++,c+=4)SHA512_W_H$1[L0]=a.getUint32(c),SHA512_W_L$1[L0]=a.getUint32(c+=4);for(let L0=16;L0<80;L0++){const V0=SHA512_W_H$1[L0-15]|0,F0=SHA512_W_L$1[L0-15]|0,u1=u64$1.rotrSH(V0,F0,1)^u64$1.rotrSH(V0,F0,8)^u64$1.shrSH(V0,F0,7),g1=u64$1.rotrSL(V0,F0,1)^u64$1.rotrSL(V0,F0,8)^u64$1.shrSL(V0,F0,7),E1=SHA512_W_H$1[L0-2]|0,B1=SHA512_W_L$1[L0-2]|0,lv=u64$1.rotrSH(E1,B1,19)^u64$1.rotrBH(E1,B1,61)^u64$1.shrSH(E1,B1,6),j1=u64$1.rotrSL(E1,B1,19)^u64$1.rotrBL(E1,B1,61)^u64$1.shrSL(E1,B1,6),r1=u64$1.add4L(g1,j1,SHA512_W_L$1[L0-7],SHA512_W_L$1[L0-16]),t1=u64$1.add4H(r1,u1,lv,SHA512_W_H$1[L0-7],SHA512_W_H$1[L0-16]);SHA512_W_H$1[L0]=t1|0,SHA512_W_L$1[L0]=r1|0}let{Ah:d,Al:tt,Bh:nt,Bl:$a,Ch:Ws,Cl:gu,Dh:Su,Dl:$u,Eh:Iu,El:Xu,Fh:r0,Fl:p0,Gh:y0,Gl:A0,Hh:$0,Hl:O0}=this;for(let L0=0;L0<80;L0++){const V0=u64$1.rotrSH(Iu,Xu,14)^u64$1.rotrSH(Iu,Xu,18)^u64$1.rotrBH(Iu,Xu,41),F0=u64$1.rotrSL(Iu,Xu,14)^u64$1.rotrSL(Iu,Xu,18)^u64$1.rotrBL(Iu,Xu,41),u1=Iu&r0^~Iu&y0,g1=Xu&p0^~Xu&A0,E1=u64$1.add5L(O0,F0,g1,SHA512_Kl$1[L0],SHA512_W_L$1[L0]),B1=u64$1.add5H(E1,$0,V0,u1,SHA512_Kh$1[L0],SHA512_W_H$1[L0]),lv=E1|0,j1=u64$1.rotrSH(d,tt,28)^u64$1.rotrBH(d,tt,34)^u64$1.rotrBH(d,tt,39),r1=u64$1.rotrSL(d,tt,28)^u64$1.rotrBL(d,tt,34)^u64$1.rotrBL(d,tt,39),t1=d&nt^d&Ws^nt&Ws,D0=tt&$a^tt&gu^$a&gu;$0=y0|0,O0=A0|0,y0=r0|0,A0=p0|0,r0=Iu|0,p0=Xu|0,{h:Iu,l:Xu}=u64$1.add(Su|0,$u|0,B1|0,lv|0),Su=Ws|0,$u=gu|0,Ws=nt|0,gu=$a|0,nt=d|0,$a=tt|0;const Z0=u64$1.add3L(lv,r1,D0);d=u64$1.add3H(Z0,B1,j1,t1),tt=Z0|0}({h:d,l:tt}=u64$1.add(this.Ah|0,this.Al|0,d|0,tt|0)),{h:nt,l:$a}=u64$1.add(this.Bh|0,this.Bl|0,nt|0,$a|0),{h:Ws,l:gu}=u64$1.add(this.Ch|0,this.Cl|0,Ws|0,gu|0),{h:Su,l:$u}=u64$1.add(this.Dh|0,this.Dl|0,Su|0,$u|0),{h:Iu,l:Xu}=u64$1.add(this.Eh|0,this.El|0,Iu|0,Xu|0),{h:r0,l:p0}=u64$1.add(this.Fh|0,this.Fl|0,r0|0,p0|0),{h:y0,l:A0}=u64$1.add(this.Gh|0,this.Gl|0,y0|0,A0|0),{h:$0,l:O0}=u64$1.add(this.Hh|0,this.Hl|0,$0|0,O0|0),this.set(d,tt,nt,$a,Ws,gu,Su,$u,Iu,Xu,r0,p0,y0,A0,$0,O0)}roundClean(){SHA512_W_H$1.fill(0),SHA512_W_L$1.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};const sha512$3=wrapConstructor$1(()=>new SHA512$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$f=BigInt(0),_1n$h=BigInt(1),_2n$c=BigInt(2);function isBytes$6(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function abytes(o){if(!isBytes$6(o))throw new Error("Uint8Array expected")}const hexes$2=Array.from({length:256},(o,a)=>a.toString(16).padStart(2,"0"));function bytesToHex$2(o){abytes(o);let a="";for(let c=0;c=asciis$1._0&&o<=asciis$1._9)return o-asciis$1._0;if(o>=asciis$1._A&&o<=asciis$1._F)return o-(asciis$1._A-10);if(o>=asciis$1._a&&o<=asciis$1._f)return o-(asciis$1._a-10)}function hexToBytes$3(o){if(typeof o!="string")throw new Error("hex string expected, got "+typeof o);const a=o.length,c=a/2;if(a%2)throw new Error("padded hex string expected, got unpadded hex of length "+a);const d=new Uint8Array(c);for(let tt=0,nt=0;tt_0n$f;o>>=_1n$h,a+=1);return a}function bitGet$2(o,a){return o>>BigInt(a)&_1n$h}function bitSet$2(o,a,c){return o|(c?_1n$h:_0n$f)<(_2n$c<new Uint8Array(o),u8fr$2=o=>Uint8Array.from(o);function createHmacDrbg$2(o,a,c){if(typeof o!="number"||o<2)throw new Error("hashLen must be a number");if(typeof a!="number"||a<2)throw new Error("qByteLen must be a number");if(typeof c!="function")throw new Error("hmacFn must be a function");let d=u8n$2(o),tt=u8n$2(o),nt=0;const $a=()=>{d.fill(1),tt.fill(0),nt=0},Ws=(...Iu)=>c(tt,d,...Iu),gu=(Iu=u8n$2())=>{tt=Ws(u8fr$2([0]),Iu),d=Ws(),Iu.length!==0&&(tt=Ws(u8fr$2([1]),Iu),d=Ws())},Su=()=>{if(nt++>=1e3)throw new Error("drbg: tried 1000 values");let Iu=0;const Xu=[];for(;Iu{$a(),gu(Iu);let r0;for(;!(r0=Xu(Su()));)gu();return $a(),r0}}const validatorFns$2={bigint:o=>typeof o=="bigint",function:o=>typeof o=="function",boolean:o=>typeof o=="boolean",string:o=>typeof o=="string",stringOrUint8Array:o=>typeof o=="string"||isBytes$6(o),isSafeInteger:o=>Number.isSafeInteger(o),array:o=>Array.isArray(o),field:(o,a)=>a.Fp.isValid(o),hash:o=>typeof o=="function"&&Number.isSafeInteger(o.outputLen)};function validateObject$2(o,a,c={}){const d=(tt,nt,$a)=>{const Ws=validatorFns$2[nt];if(typeof Ws!="function")throw new Error(`Invalid validator "${nt}", expected function`);const gu=o[tt];if(!($a&&gu===void 0)&&!Ws(gu,o))throw new Error(`Invalid param ${String(tt)}=${gu} (${typeof gu}), expected ${nt}`)};for(const[tt,nt]of Object.entries(a))d(tt,nt,!1);for(const[tt,nt]of Object.entries(c))d(tt,nt,!0);return o}const ut$4=Object.freeze(Object.defineProperty({__proto__:null,abytes,bitGet:bitGet$2,bitLen:bitLen$2,bitMask:bitMask$2,bitSet:bitSet$2,bytesToHex:bytesToHex$2,bytesToNumberBE:bytesToNumberBE$2,bytesToNumberLE:bytesToNumberLE$2,concatBytes:concatBytes$3,createHmacDrbg:createHmacDrbg$2,ensureBytes:ensureBytes$3,equalBytes:equalBytes$2,hexToBytes:hexToBytes$3,hexToNumber:hexToNumber$2,isBytes:isBytes$6,numberToBytesBE:numberToBytesBE$2,numberToBytesLE:numberToBytesLE$2,numberToHexUnpadded:numberToHexUnpadded$2,numberToVarBytesBE:numberToVarBytesBE$2,utf8ToBytes:utf8ToBytes$3,validateObject:validateObject$2},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$e=BigInt(0),_1n$g=BigInt(1),_2n$b=BigInt(2),_3n$4=BigInt(3),_4n$3=BigInt(4),_5n$3=BigInt(5),_8n$4=BigInt(8);BigInt(9);BigInt(16);function mod$2(o,a){const c=o%a;return c>=_0n$e?c:a+c}function pow$4(o,a,c){if(c<=_0n$e||a<_0n$e)throw new Error("Expected power/modulo > 0");if(c===_1n$g)return _0n$e;let d=_1n$g;for(;a>_0n$e;)a&_1n$g&&(d=d*o%c),o=o*o%c,a>>=_1n$g;return d}function pow2$1(o,a,c){let d=o;for(;a-- >_0n$e;)d*=d,d%=c;return d}function invert$2(o,a){if(o===_0n$e||a<=_0n$e)throw new Error(`invert: expected positive integers, got n=${o} mod=${a}`);let c=mod$2(o,a),d=a,tt=_0n$e,nt=_1n$g;for(;c!==_0n$e;){const Ws=d/c,gu=d%c,Su=tt-nt*Ws;d=c,c=gu,tt=nt,nt=Su}if(d!==_1n$g)throw new Error("invert: does not exist");return mod$2(tt,a)}function tonelliShanks$2(o){const a=(o-_1n$g)/_2n$b;let c,d,tt;for(c=o-_1n$g,d=0;c%_2n$b===_0n$e;c/=_2n$b,d++);for(tt=_2n$b;tt(mod$2(o,a)&_1n$g)===_1n$g,FIELD_FIELDS$2=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField$2(o){const a={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},c=FIELD_FIELDS$2.reduce((d,tt)=>(d[tt]="function",d),a);return validateObject$2(o,c)}function FpPow$2(o,a,c){if(c<_0n$e)throw new Error("Expected power > 0");if(c===_0n$e)return o.ONE;if(c===_1n$g)return a;let d=o.ONE,tt=a;for(;c>_0n$e;)c&_1n$g&&(d=o.mul(d,tt)),tt=o.sqr(tt),c>>=_1n$g;return d}function FpInvertBatch$2(o,a){const c=new Array(a.length),d=a.reduce((nt,$a,Ws)=>o.is0($a)?nt:(c[Ws]=nt,o.mul(nt,$a)),o.ONE),tt=o.inv(d);return a.reduceRight((nt,$a,Ws)=>o.is0($a)?nt:(c[Ws]=o.mul(nt,c[Ws]),o.mul(nt,$a)),tt),c}function nLength$2(o,a){const c=a!==void 0?a:o.toString(2).length,d=Math.ceil(c/8);return{nBitLength:c,nByteLength:d}}function Field$2(o,a,c=!1,d={}){if(o<=_0n$e)throw new Error(`Expected Field ORDER > 0, got ${o}`);const{nBitLength:tt,nByteLength:nt}=nLength$2(o,a);if(nt>2048)throw new Error("Field lengths over 2048 bytes are not supported");const $a=FpSqrt$2(o),Ws=Object.freeze({ORDER:o,BITS:tt,BYTES:nt,MASK:bitMask$2(tt),ZERO:_0n$e,ONE:_1n$g,create:gu=>mod$2(gu,o),isValid:gu=>{if(typeof gu!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof gu}`);return _0n$e<=gu&&gugu===_0n$e,isOdd:gu=>(gu&_1n$g)===_1n$g,neg:gu=>mod$2(-gu,o),eql:(gu,Su)=>gu===Su,sqr:gu=>mod$2(gu*gu,o),add:(gu,Su)=>mod$2(gu+Su,o),sub:(gu,Su)=>mod$2(gu-Su,o),mul:(gu,Su)=>mod$2(gu*Su,o),pow:(gu,Su)=>FpPow$2(Ws,gu,Su),div:(gu,Su)=>mod$2(gu*invert$2(Su,o),o),sqrN:gu=>gu*gu,addN:(gu,Su)=>gu+Su,subN:(gu,Su)=>gu-Su,mulN:(gu,Su)=>gu*Su,inv:gu=>invert$2(gu,o),sqrt:d.sqrt||(gu=>$a(Ws,gu)),invertBatch:gu=>FpInvertBatch$2(Ws,gu),cmov:(gu,Su,$u)=>$u?Su:gu,toBytes:gu=>c?numberToBytesLE$2(gu,nt):numberToBytesBE$2(gu,nt),fromBytes:gu=>{if(gu.length!==nt)throw new Error(`Fp.fromBytes: expected ${nt}, got ${gu.length}`);return c?bytesToNumberLE$2(gu):bytesToNumberBE$2(gu)}});return Object.freeze(Ws)}function FpSqrtEven$1(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?o.neg(c):c}function getFieldBytesLength$2(o){if(typeof o!="bigint")throw new Error("field order must be bigint");const a=o.toString(2).length;return Math.ceil(a/8)}function getMinHashLength$2(o){const a=getFieldBytesLength$2(o);return a+Math.ceil(a/2)}function mapHashToField$2(o,a,c=!1){const d=o.length,tt=getFieldBytesLength$2(a),nt=getMinHashLength$2(a);if(d<16||d1024)throw new Error(`expected ${nt}-1024 bytes of input, got ${d}`);const $a=c?bytesToNumberBE$2(o):bytesToNumberLE$2(o),Ws=mod$2($a,a-_1n$g)+_1n$g;return c?numberToBytesLE$2(Ws,tt):numberToBytesBE$2(Ws,tt)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$d=BigInt(0),_1n$f=BigInt(1);function wNAF$2(o,a){const c=(tt,nt)=>{const $a=nt.negate();return tt?$a:nt},d=tt=>{const nt=Math.ceil(a/tt)+1,$a=2**(tt-1);return{windows:nt,windowSize:$a}};return{constTimeNegate:c,unsafeLadder(tt,nt){let $a=o.ZERO,Ws=tt;for(;nt>_0n$d;)nt&_1n$f&&($a=$a.add(Ws)),Ws=Ws.double(),nt>>=_1n$f;return $a},precomputeWindow(tt,nt){const{windows:$a,windowSize:Ws}=d(nt),gu=[];let Su=tt,$u=Su;for(let Iu=0;Iu<$a;Iu++){$u=Su,gu.push($u);for(let Xu=1;Xu>=r0,A0>gu&&(A0-=Xu,$a+=_1n$f);const $0=y0,O0=y0+Math.abs(A0)-1,L0=p0%2!==0,V0=A0<0;A0===0?$u=$u.add(c(L0,nt[$0])):Su=Su.add(c(V0,nt[O0]))}return{p:Su,f:$u}},wNAFCached(tt,nt,$a,Ws){const gu=tt._WINDOW_SIZE||1;let Su=nt.get(tt);return Su||(Su=this.precomputeWindow(tt,gu),gu!==1&&nt.set(tt,Ws(Su))),this.wNAF(gu,Su,$a)}}}function validateBasic$2(o){return validateField$2(o.Fp),validateObject$2(o,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...nLength$2(o.n,o.nBitLength),...o,p:o.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$c=BigInt(0),_1n$e=BigInt(1),_2n$a=BigInt(2),_8n$3=BigInt(8),VERIFY_DEFAULT$1={zip215:!0};function validateOpts$6(o){const a=validateBasic$2(o);return validateObject$2(o,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...a})}function twistedEdwards$1(o){const a=validateOpts$6(o),{Fp:c,n:d,prehash:tt,hash:nt,randomBytes:$a,nByteLength:Ws,h:gu}=a,Su=_2n$a<{try{return{isValid:!0,value:c.sqrt(m1*c.inv(c1))}}catch{return{isValid:!1,value:_0n$c}}}),Xu=a.adjustScalarBytes||(m1=>m1),r0=a.domain||((m1,c1,G0)=>{if(c1.length||G0)throw new Error("Contexts/pre-hash are not supported");return m1}),p0=m1=>typeof m1=="bigint"&&_0n$cp0(m1)&&p0(c1)&&m1m1===_0n$c||y0(m1,Su);function $0(m1,c1){if(y0(m1,c1))return m1;throw new Error(`Expected valid scalar < ${c1}, got ${typeof m1} ${m1}`)}function O0(m1){return m1===_0n$c?m1:$0(m1,d)}const L0=new Map;function V0(m1){if(!(m1 instanceof F0))throw new Error("ExtendedPoint expected")}class F0{constructor(c1,G0,o1,d1){if(this.ex=c1,this.ey=G0,this.ez=o1,this.et=d1,!A0(c1))throw new Error("x required");if(!A0(G0))throw new Error("y required");if(!A0(o1))throw new Error("z required");if(!A0(d1))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(c1){if(c1 instanceof F0)throw new Error("extended point not allowed");const{x:G0,y:o1}=c1||{};if(!A0(G0)||!A0(o1))throw new Error("invalid affine point");return new F0(G0,o1,_1n$e,$u(G0*o1))}static normalizeZ(c1){const G0=c.invertBatch(c1.map(o1=>o1.ez));return c1.map((o1,d1)=>o1.toAffine(G0[d1])).map(F0.fromAffine)}_setWindowSize(c1){this._WINDOW_SIZE=c1,L0.delete(this)}assertValidity(){const{a:c1,d:G0}=a;if(this.is0())throw new Error("bad point: ZERO");const{ex:o1,ey:d1,ez:R1,et:O1}=this,Q1=$u(o1*o1),rv=$u(d1*d1),D1=$u(R1*R1),ev=$u(D1*D1),Mv=$u(Q1*c1),Zv=$u(D1*$u(Mv+rv)),fv=$u(ev+$u(G0*$u(Q1*rv)));if(Zv!==fv)throw new Error("bad point: equation left != right (1)");const cv=$u(o1*d1),ly=$u(R1*O1);if(cv!==ly)throw new Error("bad point: equation left != right (2)")}equals(c1){V0(c1);const{ex:G0,ey:o1,ez:d1}=this,{ex:R1,ey:O1,ez:Q1}=c1,rv=$u(G0*Q1),D1=$u(R1*d1),ev=$u(o1*Q1),Mv=$u(O1*d1);return rv===D1&&ev===Mv}is0(){return this.equals(F0.ZERO)}negate(){return new F0($u(-this.ex),this.ey,this.ez,$u(-this.et))}double(){const{a:c1}=a,{ex:G0,ey:o1,ez:d1}=this,R1=$u(G0*G0),O1=$u(o1*o1),Q1=$u(_2n$a*$u(d1*d1)),rv=$u(c1*R1),D1=G0+o1,ev=$u($u(D1*D1)-R1-O1),Mv=rv+O1,Zv=Mv-Q1,fv=rv-O1,cv=$u(ev*Zv),ly=$u(Mv*fv),Cy=$u(ev*fv),Ly=$u(Zv*Mv);return new F0(cv,ly,Ly,Cy)}add(c1){V0(c1);const{a:G0,d:o1}=a,{ex:d1,ey:R1,ez:O1,et:Q1}=this,{ex:rv,ey:D1,ez:ev,et:Mv}=c1;if(G0===BigInt(-1)){const vw=$u((R1-d1)*(D1+rv)),Hw=$u((R1+d1)*(D1-rv)),uw=$u(Hw-vw);if(uw===_0n$c)return this.double();const Nw=$u(O1*_2n$a*Mv),lw=$u(Q1*_2n$a*ev),Lw=lw+Nw,zw=Hw+vw,A2=lw-Nw,kv=$u(Lw*uw),Y1=$u(zw*A2),tv=$u(Lw*A2),Yv=$u(uw*zw);return new F0(kv,Y1,Yv,tv)}const Zv=$u(d1*rv),fv=$u(R1*D1),cv=$u(Q1*o1*Mv),ly=$u(O1*ev),Cy=$u((d1+R1)*(rv+D1)-Zv-fv),Ly=ly-cv,Hy=ly+cv,t2=$u(fv-G0*Zv),C2=$u(Cy*Ly),Dy=$u(Hy*t2),jw=$u(Cy*t2),pw=$u(Ly*Hy);return new F0(C2,Dy,pw,jw)}subtract(c1){return this.add(c1.negate())}wNAF(c1){return E1.wNAFCached(this,L0,c1,F0.normalizeZ)}multiply(c1){const{p:G0,f:o1}=this.wNAF($0(c1,d));return F0.normalizeZ([G0,o1])[0]}multiplyUnsafe(c1){let G0=O0(c1);return G0===_0n$c?g1:this.equals(g1)||G0===_1n$e?this:this.equals(u1)?this.wNAF(G0).p:E1.unsafeLadder(this,G0)}isSmallOrder(){return this.multiplyUnsafe(gu).is0()}isTorsionFree(){return E1.unsafeLadder(this,d).is0()}toAffine(c1){const{ex:G0,ey:o1,ez:d1}=this,R1=this.is0();c1==null&&(c1=R1?_8n$3:c.inv(d1));const O1=$u(G0*c1),Q1=$u(o1*c1),rv=$u(d1*c1);if(R1)return{x:_0n$c,y:_1n$e};if(rv!==_1n$e)throw new Error("invZ was invalid");return{x:O1,y:Q1}}clearCofactor(){const{h:c1}=a;return c1===_1n$e?this:this.multiplyUnsafe(c1)}static fromHex(c1,G0=!1){const{d:o1,a:d1}=a,R1=c.BYTES;c1=ensureBytes$3("pointHex",c1,R1);const O1=c1.slice(),Q1=c1[R1-1];O1[R1-1]=Q1&-129;const rv=bytesToNumberLE$2(O1);rv===_0n$c||(G0?$0(rv,Su):$0(rv,c.ORDER));const D1=$u(rv*rv),ev=$u(D1-_1n$e),Mv=$u(o1*D1-d1);let{isValid:Zv,value:fv}=Iu(ev,Mv);if(!Zv)throw new Error("Point.fromHex: invalid y coordinate");const cv=(fv&_1n$e)===_1n$e,ly=(Q1&128)!==0;if(!G0&&fv===_0n$c&&ly)throw new Error("Point.fromHex: x=0 and x_0=1");return ly!==cv&&(fv=$u(-fv)),F0.fromAffine({x:fv,y:rv})}static fromPrivateKey(c1){return j1(c1).point}toRawBytes(){const{x:c1,y:G0}=this.toAffine(),o1=numberToBytesLE$2(G0,c.BYTES);return o1[o1.length-1]|=c1&_1n$e?128:0,o1}toHex(){return bytesToHex$2(this.toRawBytes())}}F0.BASE=new F0(a.Gx,a.Gy,_1n$e,$u(a.Gx*a.Gy)),F0.ZERO=new F0(_0n$c,_1n$e,_1n$e,_0n$c);const{BASE:u1,ZERO:g1}=F0,E1=wNAF$2(F0,Ws*8);function B1(m1){return mod$2(m1,d)}function lv(m1){return B1(bytesToNumberLE$2(m1))}function j1(m1){const c1=Ws;m1=ensureBytes$3("private key",m1,c1);const G0=ensureBytes$3("hashed private key",nt(m1),2*c1),o1=Xu(G0.slice(0,c1)),d1=G0.slice(c1,2*c1),R1=lv(o1),O1=u1.multiply(R1),Q1=O1.toRawBytes();return{head:o1,prefix:d1,scalar:R1,point:O1,pointBytes:Q1}}function r1(m1){return j1(m1).pointBytes}function t1(m1=new Uint8Array,...c1){const G0=concatBytes$3(...c1);return lv(nt(r0(G0,ensureBytes$3("context",m1),!!tt)))}function D0(m1,c1,G0={}){m1=ensureBytes$3("message",m1),tt&&(m1=tt(m1));const{prefix:o1,scalar:d1,pointBytes:R1}=j1(c1),O1=t1(G0.context,o1,m1),Q1=u1.multiply(O1).toRawBytes(),rv=t1(G0.context,Q1,R1,m1),D1=B1(O1+rv*d1);O0(D1);const ev=concatBytes$3(Q1,numberToBytesLE$2(D1,c.BYTES));return ensureBytes$3("result",ev,Ws*2)}const Z0=VERIFY_DEFAULT$1;function f1(m1,c1,G0,o1=Z0){const{context:d1,zip215:R1}=o1,O1=c.BYTES;m1=ensureBytes$3("signature",m1,2*O1),c1=ensureBytes$3("message",c1),tt&&(c1=tt(c1));const Q1=bytesToNumberLE$2(m1.slice(O1,2*O1));let rv,D1,ev;try{rv=F0.fromHex(G0,R1),D1=F0.fromHex(m1.slice(0,O1),R1),ev=u1.multiplyUnsafe(Q1)}catch{return!1}if(!R1&&rv.isSmallOrder())return!1;const Mv=t1(d1,D1.toRawBytes(),rv.toRawBytes(),c1);return D1.add(rv.multiplyUnsafe(Mv)).subtract(ev).clearCofactor().equals(F0.ZERO)}return u1._setWindowSize(8),{CURVE:a,getPublicKey:r1,sign:D0,verify:f1,ExtendedPoint:F0,utils:{getExtendedPublicKey:j1,randomPrivateKey:()=>$a(c.BYTES),precompute(m1=8,c1=F0.BASE){return c1._setWindowSize(m1),c1.multiply(BigInt(3)),c1}}}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ED25519_P=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),ED25519_SQRT_M1=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");BigInt(0);const _1n$d=BigInt(1),_2n$9=BigInt(2),_5n$2=BigInt(5),_10n=BigInt(10),_20n=BigInt(20),_40n=BigInt(40),_80n=BigInt(80);function ed25519_pow_2_252_3(o){const a=ED25519_P,d=o*o%a*o%a,tt=pow2$1(d,_2n$9,a)*d%a,nt=pow2$1(tt,_1n$d,a)*o%a,$a=pow2$1(nt,_5n$2,a)*nt%a,Ws=pow2$1($a,_10n,a)*$a%a,gu=pow2$1(Ws,_20n,a)*Ws%a,Su=pow2$1(gu,_40n,a)*gu%a,$u=pow2$1(Su,_80n,a)*Su%a,Iu=pow2$1($u,_80n,a)*Su%a,Xu=pow2$1(Iu,_10n,a)*$a%a;return{pow_p_5_8:pow2$1(Xu,_2n$9,a)*o%a,b2:d}}function adjustScalarBytes(o){return o[0]&=248,o[31]&=127,o[31]|=64,o}function uvRatio(o,a){const c=ED25519_P,d=mod$2(a*a*a,c),tt=mod$2(d*d*a,c),nt=ed25519_pow_2_252_3(o*tt).pow_p_5_8;let $a=mod$2(o*d*nt,c);const Ws=mod$2(a*$a*$a,c),gu=$a,Su=mod$2($a*ED25519_SQRT_M1,c),$u=Ws===o,Iu=Ws===mod$2(-o,c),Xu=Ws===mod$2(-o*ED25519_SQRT_M1,c);return $u&&($a=gu),(Iu||Xu)&&($a=Su),isNegativeLE$1($a,c)&&($a=mod$2(-$a,c)),{isValid:$u||Iu,value:$a}}const Fp$2=Field$2(ED25519_P,void 0,!0),ed25519Defaults={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Fp$2,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:sha512$3,randomBytes:randomBytes$5,adjustScalarBytes,uvRatio},ed25519$1=twistedEdwards$1(ed25519Defaults);function ed25519_domain(o,a,c){if(a.length>255)throw new Error("Context is too big");return concatBytes$4(utf8ToBytes$4("SigEd25519 no Ed25519 collisions"),new Uint8Array([c?1:0,a.length]),a,o)}({...ed25519Defaults});({...ed25519Defaults});const ELL2_C1=(Fp$2.ORDER+BigInt(3))/BigInt(8);Fp$2.pow(_2n$9,ELL2_C1);Fp$2.sqrt(Fp$2.neg(Fp$2.ONE));(Fp$2.ORDER-BigInt(5))/BigInt(8);BigInt(486662);FpSqrtEven$1(Fp$2,Fp$2.neg(BigInt(486664)));BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const PUBLIC_KEY_BYTE_LENGTH=32,PRIVATE_KEY_BYTE_LENGTH=64,KEYS_BYTE_LENGTH=32;function generateKey$2(){const o=ed25519$1.utils.randomPrivateKey(),a=ed25519$1.getPublicKey(o);return{privateKey:concatKeys(o,a),publicKey:a}}function generateKeyFromSeed(o){if(o.length!==KEYS_BYTE_LENGTH)throw new TypeError('"seed" must be 32 bytes in length.');if(!(o instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');const a=o,c=ed25519$1.getPublicKey(a);return{privateKey:concatKeys(a,c),publicKey:c}}function hashAndSign$2(o,a){const c=o.subarray(0,KEYS_BYTE_LENGTH);return ed25519$1.sign(a instanceof Uint8Array?a:a.subarray(),c)}function hashAndVerify$2(o,a,c){return ed25519$1.verify(a,c instanceof Uint8Array?c:c.subarray(),o)}function concatKeys(o,a){const c=new Uint8Array(PRIVATE_KEY_BYTE_LENGTH);for(let d=0;dNumber.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function encodeUint8Array(o,a,c=0){switch(encodingLength(o)){case 8:a[c++]=o&255|MSB,o/=128;case 7:a[c++]=o&255|MSB,o/=128;case 6:a[c++]=o&255|MSB,o/=128;case 5:a[c++]=o&255|MSB,o/=128;case 4:a[c++]=o&255|MSB,o>>>=7;case 3:a[c++]=o&255|MSB,o>>>=7;case 2:a[c++]=o&255|MSB,o>>>=7;case 1:{a[c++]=o&255,o>>>=7;break}default:throw new Error("unreachable")}return a}function decodeUint8Array(o,a){let c=o[a],d=0;if(d+=c&REST,c>>31>0){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(c+d*4294967296)}return this.lo+this.hi*4294967296}toBigInt(a=!1){if(a)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){const c=~this.lo+1>>>0;let d=~this.hi>>>0;return c===0&&(d=d+1>>>0),-(BigInt(c)+(BigInt(d)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(a=!1){return this.toBigInt(a).toString()}zzEncode(){const a=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^a)>>>0,this.lo=(this.lo<<1^a)>>>0,this}zzDecode(){const a=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^a)>>>0,this.hi=(this.hi>>>1^a)>>>0,this}length(){const a=this.lo,c=(this.lo>>>28|this.hi<<4)>>>0,d=this.hi>>>24;return d===0?c===0?a<16384?a<128?1:2:a<2097152?3:4:c<16384?c<128?5:6:c<2097152?7:8:d<128?9:10}static fromBigInt(a){if(a===0n)return zero$2;if(aMIN_SAFE_NUMBER_INTEGER)return this.fromNumber(Number(a));const c=a<0n;c&&(a=-a);let d=a>>32n,tt=a-(d<<32n);return c&&(d=~d|0n,tt=~tt|0n,++tt>TWO_32&&(tt=0n,++d>TWO_32&&(d=0n))),new LongBits(Number(tt),Number(d))}static fromNumber(a){if(a===0)return zero$2;const c=a<0;c&&(a=-a);let d=a>>>0,tt=(a-d)/4294967296>>>0;return c&&(tt=~tt>>>0,d=~d>>>0,++d>4294967295&&(d=0,++tt>4294967295&&(tt=0))),new LongBits(d,tt)}static from(a){return typeof a=="number"?LongBits.fromNumber(a):typeof a=="bigint"?LongBits.fromBigInt(a):typeof a=="string"?LongBits.fromBigInt(BigInt(a)):a.low!=null||a.high!=null?new LongBits(a.low>>>0,a.high>>>0):zero$2}}const zero$2=new LongBits(0,0);zero$2.toBigInt=function(){return 0n};zero$2.zzEncode=zero$2.zzDecode=function(){return this};zero$2.length=function(){return 1};const TWO_32=4294967296n;function length$1(o){let a=0,c=0;for(let d=0;d191&&Ws<224?nt[$a++]=(Ws&31)<<6|o[a++]&63:Ws>239&&Ws<365?(Ws=((Ws&7)<<18|(o[a++]&63)<<12|(o[a++]&63)<<6|o[a++]&63)-65536,nt[$a++]=55296+(Ws>>10),nt[$a++]=56320+(Ws&1023)):nt[$a++]=(Ws&15)<<12|(o[a++]&63)<<6|o[a++]&63,$a>8191&&((tt??(tt=[])).push(String.fromCharCode.apply(String,nt)),$a=0);return tt!=null?($a>0&&tt.push(String.fromCharCode.apply(String,nt.slice(0,$a))),tt.join("")):String.fromCharCode.apply(String,nt.slice(0,$a))}function write$1(o,a,c){const d=c;let tt,nt;for(let $a=0;$a>6|192,a[c++]=tt&63|128):(tt&64512)===55296&&((nt=o.charCodeAt($a+1))&64512)===56320?(tt=65536+((tt&1023)<<10)+(nt&1023),++$a,a[c++]=tt>>18|240,a[c++]=tt>>12&63|128,a[c++]=tt>>6&63|128,a[c++]=tt&63|128):(a[c++]=tt>>12|224,a[c++]=tt>>6&63|128,a[c++]=tt&63|128);return c-d}function indexOutOfRange(o,a){return RangeError(`index out of range: ${o.pos} + ${a??1} > ${o.len}`)}function readFixed32End(o,a){return(o[a-4]|o[a-3]<<8|o[a-2]<<16|o[a-1]<<24)>>>0}class Uint8ArrayReader{constructor(a){aw(this,"buf");aw(this,"pos");aw(this,"len");aw(this,"_slice",Uint8Array.prototype.subarray);this.buf=a,this.pos=0,this.len=a.length}uint32(){let a=4294967295;if(a=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(a=(a|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(a=(a|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return a;if((this.pos+=5)>this.len)throw this.pos=this.len,indexOutOfRange(this,10);return a}int32(){return this.uint32()|0}sint32(){const a=this.uint32();return a>>>1^-(a&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);return readFixed32End(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw indexOutOfRange(this,4);const a=readFloatLE(this.buf,this.pos);return this.pos+=4,a}double(){if(this.pos+8>this.len)throw indexOutOfRange(this,4);const a=readDoubleLE(this.buf,this.pos);return this.pos+=8,a}bytes(){const a=this.uint32(),c=this.pos,d=this.pos+a;if(d>this.len)throw indexOutOfRange(this,a);return this.pos+=a,c===d?new Uint8Array(0):this.buf.subarray(c,d)}string(){const a=this.bytes();return read$1(a,0,a.length)}skip(a){if(typeof a=="number"){if(this.pos+a>this.len)throw indexOutOfRange(this,a);this.pos+=a}else do if(this.pos>=this.len)throw indexOutOfRange(this);while(this.buf[this.pos++]&128);return this}skipType(a){switch(a){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(a=this.uint32()&7)!==4;)this.skipType(a);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${a} at offset ${this.pos}`)}return this}readLongVarint(){const a=new LongBits(0,0);let c=0;if(this.len-this.pos>4){for(;c<4;++c)if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a;if(a.lo=(a.lo|(this.buf[this.pos]&127)<<28)>>>0,a.hi=(a.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return a;c=0}else{for(;c<3;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.lo=(a.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}return a.lo=(a.lo|(this.buf[this.pos++]&127)<>>0,a}if(this.len-this.pos>4){for(;c<5;++c)if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}else for(;c<5;++c){if(this.pos>=this.len)throw indexOutOfRange(this);if(a.hi=(a.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return a}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw indexOutOfRange(this,8);const a=readFixed32End(this.buf,this.pos+=4),c=readFixed32End(this.buf,this.pos+=4);return new LongBits(a,c)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){const a=decodeUint8Array(this.buf,this.pos);return this.pos+=encodingLength(a),a}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}}function createReader(o){return new Uint8ArrayReader(o instanceof Uint8Array?o:o.subarray())}function decodeMessage(o,a,c){const d=createReader(o);return a.decode(d,void 0,c)}function pool(o){let d,tt=8192;return function($a){if($a<1||$a>4096)return allocUnsafe($a);tt+$a>8192&&(d=allocUnsafe(8192),tt=0);const Ws=d.subarray(tt,tt+=$a);return tt&7&&(tt=(tt|7)+1),Ws}}let Op$1=class{constructor(a,c,d){aw(this,"fn");aw(this,"len");aw(this,"next");aw(this,"val");this.fn=a,this.len=c,this.next=void 0,this.val=d}};function noop$9(){}class State{constructor(a){aw(this,"head");aw(this,"tail");aw(this,"len");aw(this,"next");this.head=a.head,this.tail=a.tail,this.len=a.len,this.next=a.states}}const bufferPool=pool();function alloc$1(o){return globalThis.Buffer!=null?allocUnsafe(o):bufferPool(o)}class Uint8ArrayWriter{constructor(){aw(this,"len");aw(this,"head");aw(this,"tail");aw(this,"states");this.len=0,this.head=new Op$1(noop$9,0,0),this.tail=this.head,this.states=null}_push(a,c,d){return this.tail=this.tail.next=new Op$1(a,c,d),this.len+=c,this}uint32(a){return this.len+=(this.tail=this.tail.next=new VarintOp((a=a>>>0)<128?1:a<16384?2:a<2097152?3:a<268435456?4:5,a)).len,this}int32(a){return a<0?this._push(writeVarint64,10,LongBits.fromNumber(a)):this.uint32(a)}sint32(a){return this.uint32((a<<1^a>>31)>>>0)}uint64(a){const c=LongBits.fromBigInt(a);return this._push(writeVarint64,c.length(),c)}uint64Number(a){return this._push(encodeUint8Array,encodingLength(a),a)}uint64String(a){return this.uint64(BigInt(a))}int64(a){return this.uint64(a)}int64Number(a){return this.uint64Number(a)}int64String(a){return this.uint64String(a)}sint64(a){const c=LongBits.fromBigInt(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64Number(a){const c=LongBits.fromNumber(a).zzEncode();return this._push(writeVarint64,c.length(),c)}sint64String(a){return this.sint64(BigInt(a))}bool(a){return this._push(writeByte,1,a?1:0)}fixed32(a){return this._push(writeFixed32,4,a>>>0)}sfixed32(a){return this.fixed32(a)}fixed64(a){const c=LongBits.fromBigInt(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64Number(a){const c=LongBits.fromNumber(a);return this._push(writeFixed32,4,c.lo)._push(writeFixed32,4,c.hi)}fixed64String(a){return this.fixed64(BigInt(a))}sfixed64(a){return this.fixed64(a)}sfixed64Number(a){return this.fixed64Number(a)}sfixed64String(a){return this.fixed64String(a)}float(a){return this._push(writeFloatLE,4,a)}double(a){return this._push(writeDoubleLE,8,a)}bytes(a){const c=a.length>>>0;return c===0?this._push(writeByte,1,0):this.uint32(c)._push(writeBytes,c,a)}string(a){const c=length$1(a);return c!==0?this.uint32(c)._push(write$1,c,a):this._push(writeByte,1,0)}fork(){return this.states=new State(this),this.head=this.tail=new Op$1(noop$9,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new Op$1(noop$9,0,0),this.len=0),this}ldelim(){const a=this.head,c=this.tail,d=this.len;return this.reset().uint32(d),d!==0&&(this.tail.next=a.next,this.tail=c,this.len+=d),this}finish(){let a=this.head.next;const c=alloc$1(this.len);let d=0;for(;a!=null;)a.fn(a.val,c,d),d+=a.len,a=a.next;return c}}function writeByte(o,a,c){a[c]=o&255}function writeVarint32(o,a,c){for(;o>127;)a[c++]=o&127|128,o>>>=7;a[c]=o}class VarintOp extends Op$1{constructor(c,d){super(writeVarint32,c,d);aw(this,"next");this.next=void 0}}function writeVarint64(o,a,c){for(;o.hi!==0;)a[c++]=o.lo&127|128,o.lo=(o.lo>>>7|o.hi<<25)>>>0,o.hi>>>=7;for(;o.lo>127;)a[c++]=o.lo&127|128,o.lo=o.lo>>>7;a[c++]=o.lo}function writeFixed32(o,a,c){a[c]=o&255,a[c+1]=o>>>8&255,a[c+2]=o>>>16&255,a[c+3]=o>>>24}function writeBytes(o,a,c){a.set(o,c)}globalThis.Buffer!=null&&(Uint8ArrayWriter.prototype.bytes=function(o){const a=o.length>>>0;return this.uint32(a),a>0&&this._push(writeBytesBuffer,a,o),this},Uint8ArrayWriter.prototype.string=function(o){const a=globalThis.Buffer.byteLength(o);return this.uint32(a),a>0&&this._push(writeStringBuffer,a,o),this});function writeBytesBuffer(o,a,c){a.set(o,c)}function writeStringBuffer(o,a,c){o.length<40?write$1(o,a,c):a.utf8Write!=null?a.utf8Write(o,c):a.set(fromString(o),c)}function createWriter(){return new Uint8ArrayWriter}function encodeMessage(o,a){const c=createWriter();return a.encode(o,c,{lengthDelimited:!1}),c.finish()}var CODEC_TYPES;(function(o){o[o.VARINT=0]="VARINT",o[o.BIT64=1]="BIT64",o[o.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",o[o.START_GROUP=3]="START_GROUP",o[o.END_GROUP=4]="END_GROUP",o[o.BIT32=5]="BIT32"})(CODEC_TYPES||(CODEC_TYPES={}));function createCodec(o,a,c,d){return{name:o,type:a,encode:c,decode:d}}function enumeration(o){function a(tt){if(o[tt.toString()]==null)throw new Error("Invalid enum value");return o[tt]}const c=function(nt,$a){const Ws=a(nt);$a.int32(Ws)},d=function(nt){const $a=nt.int32();return a($a)};return createCodec("enum",CODEC_TYPES.VARINT,c,d)}function message(o,a){return createCodec("message",CODEC_TYPES.LENGTH_DELIMITED,o,a)}var KeyType;(function(o){o.RSA="RSA",o.Ed25519="Ed25519",o.Secp256k1="Secp256k1"})(KeyType||(KeyType={}));var __KeyTypeValues;(function(o){o[o.RSA=0]="RSA",o[o.Ed25519=1]="Ed25519",o[o.Secp256k1=2]="Secp256k1"})(__KeyTypeValues||(__KeyTypeValues={}));(function(o){o.codec=()=>enumeration(__KeyTypeValues)})(KeyType||(KeyType={}));var PublicKey$2;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PublicKey$2||(PublicKey$2={}));var PrivateKey;(function(o){let a;o.codec=()=>(a==null&&(a=message((c,d,tt={})=>{tt.lengthDelimited!==!1&&d.fork(),c.Type!=null&&(d.uint32(8),KeyType.codec().encode(c.Type,d)),c.Data!=null&&(d.uint32(18),d.bytes(c.Data)),tt.lengthDelimited!==!1&&d.ldelim()},(c,d)=>{const tt={},nt=d==null?c.len:c.pos+d;for(;c.pos>>3){case 1:tt.Type=KeyType.codec().decode(c);break;case 2:tt.Data=c.bytes();break;default:c.skipType($a&7);break}}return tt})),a),o.encode=c=>encodeMessage(c,o.codec()),o.decode=c=>decodeMessage(c,o.codec())})(PrivateKey||(PrivateKey={}));class Ed25519PublicKey{constructor(a){aw(this,"_key");this._key=ensureKey(a,PUBLIC_KEY_BYTE_LENGTH)}verify(a,c){return hashAndVerify$2(this._key,c,a)}marshal(){return this._key}get bytes(){return PublicKey$2.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class Ed25519PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=ensureKey(a,PRIVATE_KEY_BYTE_LENGTH),this._publicKey=ensureKey(c,PUBLIC_KEY_BYTE_LENGTH)}sign(a){return hashAndSign$2(this._key,a)}get public(){return new Ed25519PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Ed25519,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}async id(){const a=identity$2.digest(this.public.bytes);return base58btc.encode(a.bytes).substring(1)}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalEd25519PrivateKey(o){if(o.length>PRIVATE_KEY_BYTE_LENGTH){o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH+PUBLIC_KEY_BYTE_LENGTH);const d=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),tt=o.subarray(PRIVATE_KEY_BYTE_LENGTH,o.length);return new Ed25519PrivateKey(d,tt)}o=ensureKey(o,PRIVATE_KEY_BYTE_LENGTH);const a=o.subarray(0,PRIVATE_KEY_BYTE_LENGTH),c=o.subarray(PUBLIC_KEY_BYTE_LENGTH);return new Ed25519PrivateKey(a,c)}function unmarshalEd25519PublicKey(o){return o=ensureKey(o,PUBLIC_KEY_BYTE_LENGTH),new Ed25519PublicKey(o)}async function generateKeyPair$3(){const{privateKey:o,publicKey:a}=generateKey$2();return new Ed25519PrivateKey(o,a)}async function generateKeyPairFromSeed(o){const{privateKey:a,publicKey:c}=generateKeyFromSeed(o);return new Ed25519PrivateKey(a,c)}function ensureKey(o,a){if(o=Uint8Array.from(o??[]),o.length!==a)throw new CodeError(`Key must be a Uint8Array of length ${a}, got ${o.length}`,"ERR_INVALID_KEY_TYPE");return o}const Ed25519=Object.freeze(Object.defineProperty({__proto__:null,Ed25519PrivateKey,Ed25519PublicKey,generateKeyPair:generateKeyPair$3,generateKeyPairFromSeed,unmarshalEd25519PrivateKey,unmarshalEd25519PublicKey},Symbol.toStringTag,{value:"Module"}));function toString$b(o,a="utf8"){const c=BASES[a];if(c==null)throw new Error(`Unsupported encoding "${a}"`);return c.encoder.encode(o).substring(1)}function randomBytes$4(o){if(isNaN(o)||o<=0)throw new CodeError("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return randomBytes$5(o)}let HMAC$1=class extends Hash$9{constructor(a,c){super(),this.finished=!1,this.destroyed=!1,hash$a(a);const d=toBytes$1(c);if(this.iHash=a.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const tt=this.blockLen,nt=new Uint8Array(tt);nt.set(d.length>tt?a.create().update(d).digest():d);for(let $a=0;$anew HMAC$1(o,a).update(c).digest();hmac$2.create=(o,a)=>new HMAC$1(o,a);function pbkdf2Init(o,a,c,d){hash$a(o);const tt=checkOpts({dkLen:32,asyncTick:10},d),{c:nt,dkLen:$a,asyncTick:Ws}=tt;if(number$3(nt),number$3($a),number$3(Ws),nt<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const gu=toBytes$1(a),Su=toBytes$1(c),$u=new Uint8Array($a),Iu=hmac$2.create(o,gu),Xu=Iu._cloneInto().update(Su);return{c:nt,dkLen:$a,asyncTick:Ws,DK:$u,PRF:Iu,PRFSalt:Xu}}function pbkdf2Output(o,a,c,d,tt){return o.destroy(),a.destroy(),d&&d.destroy(),tt.fill(0),c}async function pbkdf2Async(o,a,c,d){const{c:tt,dkLen:nt,asyncTick:$a,DK:Ws,PRF:gu,PRFSalt:Su}=pbkdf2Init(o,a,c,d);let $u;const Iu=new Uint8Array(4),Xu=createView$1(Iu),r0=new Uint8Array(gu.outputLen);for(let p0=1,y0=0;y0{gu._cloneInto($u).update(r0).digestInto(r0);for(let $0=0;$0=0;d--)c+=o[o.length-1-d]*Math.pow(2,a*d);return c}function utilToBase(o,a,c=-1){const d=c;let tt=o,nt=0,$a=Math.pow(2,a);for(let Ys=1;Ys<8;Ys++){if(o<$a){let gu;if(d<0)gu=new ArrayBuffer(Ys),nt=Ys;else{if(d=0;$u--){const Iu=Math.pow(2,$u*a);xu[nt-$u-1]=Math.floor(tt/Iu),tt-=xu[nt-$u-1]*Iu}return gu}$a*=Math.pow(2,a)}return new ArrayBuffer(0)}function utilConcatView(...o){let a=0,c=0;for(const nt of o)a+=nt.length;const d=new ArrayBuffer(a),tt=new Uint8Array(d);for(const nt of o)tt.set(nt,c),c+=nt.length;return tt}function utilDecodeTC(){const o=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){const Ys=o[0]===255&&o[1]&128,gu=o[0]===0&&(o[1]&128)===0;(Ys||gu)&&this.warnings.push("Needlessly long format")}const a=new ArrayBuffer(this.valueHex.byteLength),c=new Uint8Array(a);for(let Ys=0;Ys=0;d--)c+=o[o.length-1-d]*Math.pow(2,a*d);return c}function utilToBase(o,a,c=-1){const d=c;let tt=o,nt=0,$a=Math.pow(2,a);for(let Ws=1;Ws<8;Ws++){if(o<$a){let gu;if(d<0)gu=new ArrayBuffer(Ws),nt=Ws;else{if(d=0;$u--){const Iu=Math.pow(2,$u*a);Su[nt-$u-1]=Math.floor(tt/Iu),tt-=Su[nt-$u-1]*Iu}return gu}$a*=Math.pow(2,a)}return new ArrayBuffer(0)}function utilConcatView(...o){let a=0,c=0;for(const nt of o)a+=nt.length;const d=new ArrayBuffer(a),tt=new Uint8Array(d);for(const nt of o)tt.set(nt,c),c+=nt.length;return tt}function utilDecodeTC(){const o=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){const Ws=o[0]===255&&o[1]&128,gu=o[0]===0&&(o[1]&128)===0;(Ws||gu)&&this.warnings.push("Needlessly long format")}const a=new ArrayBuffer(this.valueHex.byteLength),c=new Uint8Array(a);for(let Ws=0;Ws"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function concat$6(o){let a=0,c=0;for(let tt=0;tt=nt.length)return this.error="End of input reached before message was fully decoded",-1;if(gu===$u){$u+=255;const Xu=new Uint8Array($u);for(let i0=0;i08)return this.error="Too big integer",-1;if($a+1>nt.length)return this.error="End of input reached before message was fully decoded",-1;const Ys=c+1,gu=tt.subarray(Ys,Ys+$a);return gu[$a-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=utilFromBase(gu,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=$a+1,c+this.blockLength}toBER(a=!1){let c,d;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return c=new ArrayBuffer(1),a===!1&&(d=new Uint8Array(c),d[0]=128),c;if(this.longFormUsed){const tt=utilToBase(this.length,8);if(tt.byteLength>127)return this.error="Too big length",EMPTY_BUFFER;if(c=new ArrayBuffer(tt.byteLength+1),a)return c;const nt=new Uint8Array(tt);d=new Uint8Array(c),d[0]=tt.byteLength|128;for(let $a=0;$a=37&&tt.idBlock.isHexOnly===!1)return tt.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:tt};switch(tt.idBlock.tagNumber){case 0:if(tt.idBlock.isConstructed&&tt.lenBlock.length>0)return tt.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:tt};gu=typeStore.EndOfContent;break;case 1:gu=typeStore.Boolean;break;case 2:gu=typeStore.Integer;break;case 3:gu=typeStore.BitString;break;case 4:gu=typeStore.OctetString;break;case 5:gu=typeStore.Null;break;case 6:gu=typeStore.ObjectIdentifier;break;case 10:gu=typeStore.Enumerated;break;case 12:gu=typeStore.Utf8String;break;case 13:gu=typeStore.RelativeObjectIdentifier;break;case 14:gu=typeStore.TIME;break;case 15:return tt.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:tt};case 16:gu=typeStore.Sequence;break;case 17:gu=typeStore.Set;break;case 18:gu=typeStore.NumericString;break;case 19:gu=typeStore.PrintableString;break;case 20:gu=typeStore.TeletexString;break;case 21:gu=typeStore.VideotexString;break;case 22:gu=typeStore.IA5String;break;case 23:gu=typeStore.UTCTime;break;case 24:gu=typeStore.GeneralizedTime;break;case 25:gu=typeStore.GraphicString;break;case 26:gu=typeStore.VisibleString;break;case 27:gu=typeStore.GeneralString;break;case 28:gu=typeStore.UniversalString;break;case 29:gu=typeStore.CharacterString;break;case 30:gu=typeStore.BmpString;break;case 31:gu=typeStore.DATE;break;case 32:gu=typeStore.TimeOfDay;break;case 33:gu=typeStore.DateTime;break;case 34:gu=typeStore.Duration;break;default:{const xu=tt.idBlock.isConstructed?new typeStore.Constructed:new typeStore.Primitive;xu.idBlock=tt.idBlock,xu.lenBlock=tt.lenBlock,xu.warnings=tt.warnings,tt=xu}}break;case 2:case 3:case 4:default:gu=tt.idBlock.isConstructed?typeStore.Constructed:typeStore.Primitive}return tt=localChangeType(tt,gu),Ys=tt.fromBER(o,a,tt.lenBlock.isIndefiniteForm?c:tt.lenBlock.length),tt.valueBeforeDecodeView=o.subarray(d,d+tt.blockLength),{offset:Ys,result:tt}}function fromBER(o){if(!o.byteLength){const a=new BaseBlock({},ValueBlock);return a.error="Input buffer has zero length",{offset:-1,result:a}}return localFromBER(BufferSourceConverter.toUint8Array(o).slice(),0,o.byteLength)}function checkLen(o,a){return o?1:a}class LocalConstructedValueBlock extends ValueBlock{constructor({value:a=[],isIndefiniteForm:c=!1,...d}={}){super(d),this.value=a,this.isIndefiniteForm=c}fromBER(a,c,d){const tt=BufferSourceConverter.toUint8Array(a);if(!checkBufferParams(this,tt,c,d))return-1;if(this.valueBeforeDecodeView=tt.subarray(c,c+d),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),c;let nt=c;for(;checkLen(this.isIndefiniteForm,d)>0;){const $a=localFromBER(tt,nt,d);if($a.offset===-1)return this.error=$a.result.error,this.warnings.concat($a.result.warnings),-1;if(nt=$a.offset,this.blockLength+=$a.result.blockLength,d-=$a.result.blockLength,this.value.push($a.result),this.isIndefiniteForm&&$a.result.constructor.NAME===END_OF_CONTENT_NAME)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===END_OF_CONTENT_NAME?this.value.pop():this.warnings.push("No EndOfContent block encoded")),nt}toBER(a,c){const d=c||new ViewWriter;for(let tt=0;tt"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function concat$6(o){let a=0,c=0;for(let tt=0;tt=nt.length)return this.error="End of input reached before message was fully decoded",-1;if(gu===$u){$u+=255;const Xu=new Uint8Array($u);for(let r0=0;r08)return this.error="Too big integer",-1;if($a+1>nt.length)return this.error="End of input reached before message was fully decoded",-1;const Ws=c+1,gu=tt.subarray(Ws,Ws+$a);return gu[$a-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=utilFromBase(gu,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=$a+1,c+this.blockLength}toBER(a=!1){let c,d;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return c=new ArrayBuffer(1),a===!1&&(d=new Uint8Array(c),d[0]=128),c;if(this.longFormUsed){const tt=utilToBase(this.length,8);if(tt.byteLength>127)return this.error="Too big length",EMPTY_BUFFER;if(c=new ArrayBuffer(tt.byteLength+1),a)return c;const nt=new Uint8Array(tt);d=new Uint8Array(c),d[0]=tt.byteLength|128;for(let $a=0;$a=37&&tt.idBlock.isHexOnly===!1)return tt.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:tt};switch(tt.idBlock.tagNumber){case 0:if(tt.idBlock.isConstructed&&tt.lenBlock.length>0)return tt.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:tt};gu=typeStore.EndOfContent;break;case 1:gu=typeStore.Boolean;break;case 2:gu=typeStore.Integer;break;case 3:gu=typeStore.BitString;break;case 4:gu=typeStore.OctetString;break;case 5:gu=typeStore.Null;break;case 6:gu=typeStore.ObjectIdentifier;break;case 10:gu=typeStore.Enumerated;break;case 12:gu=typeStore.Utf8String;break;case 13:gu=typeStore.RelativeObjectIdentifier;break;case 14:gu=typeStore.TIME;break;case 15:return tt.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:tt};case 16:gu=typeStore.Sequence;break;case 17:gu=typeStore.Set;break;case 18:gu=typeStore.NumericString;break;case 19:gu=typeStore.PrintableString;break;case 20:gu=typeStore.TeletexString;break;case 21:gu=typeStore.VideotexString;break;case 22:gu=typeStore.IA5String;break;case 23:gu=typeStore.UTCTime;break;case 24:gu=typeStore.GeneralizedTime;break;case 25:gu=typeStore.GraphicString;break;case 26:gu=typeStore.VisibleString;break;case 27:gu=typeStore.GeneralString;break;case 28:gu=typeStore.UniversalString;break;case 29:gu=typeStore.CharacterString;break;case 30:gu=typeStore.BmpString;break;case 31:gu=typeStore.DATE;break;case 32:gu=typeStore.TimeOfDay;break;case 33:gu=typeStore.DateTime;break;case 34:gu=typeStore.Duration;break;default:{const Su=tt.idBlock.isConstructed?new typeStore.Constructed:new typeStore.Primitive;Su.idBlock=tt.idBlock,Su.lenBlock=tt.lenBlock,Su.warnings=tt.warnings,tt=Su}}break;case 2:case 3:case 4:default:gu=tt.idBlock.isConstructed?typeStore.Constructed:typeStore.Primitive}return tt=localChangeType(tt,gu),Ws=tt.fromBER(o,a,tt.lenBlock.isIndefiniteForm?c:tt.lenBlock.length),tt.valueBeforeDecodeView=o.subarray(d,d+tt.blockLength),{offset:Ws,result:tt}}function fromBER(o){if(!o.byteLength){const a=new BaseBlock({},ValueBlock);return a.error="Input buffer has zero length",{offset:-1,result:a}}return localFromBER(BufferSourceConverter.toUint8Array(o).slice(),0,o.byteLength)}function checkLen(o,a){return o?1:a}class LocalConstructedValueBlock extends ValueBlock{constructor({value:a=[],isIndefiniteForm:c=!1,...d}={}){super(d),this.value=a,this.isIndefiniteForm=c}fromBER(a,c,d){const tt=BufferSourceConverter.toUint8Array(a);if(!checkBufferParams(this,tt,c,d))return-1;if(this.valueBeforeDecodeView=tt.subarray(c,c+d),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),c;let nt=c;for(;checkLen(this.isIndefiniteForm,d)>0;){const $a=localFromBER(tt,nt,d);if($a.offset===-1)return this.error=$a.result.error,this.warnings.concat($a.result.warnings),-1;if(nt=$a.offset,this.blockLength+=$a.result.blockLength,d-=$a.result.blockLength,this.value.push($a.result),this.isIndefiniteForm&&$a.result.constructor.NAME===END_OF_CONTENT_NAME)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===END_OF_CONTENT_NAME?this.value.pop():this.warnings.push("No EndOfContent block encoded")),nt}toBER(a,c){const d=c||new ViewWriter;for(let tt=0;tt` ${tt}`).join(` `));const c=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return a.length?`${c} : ${a.join(` -`)}`:`${c} :`}}_a$v=Constructed;typeStore.Constructed=_a$v;Constructed.NAME="CONSTRUCTED";class LocalEndOfContentValueBlock extends ValueBlock{fromBER(a,c,d){return c}toBER(a){return EMPTY_BUFFER}}LocalEndOfContentValueBlock.override="EndOfContentValueBlock";var _a$u;class EndOfContent extends BaseBlock{constructor(a={}){super(a,LocalEndOfContentValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}}_a$u=EndOfContent;typeStore.EndOfContent=_a$u;EndOfContent.NAME=END_OF_CONTENT_NAME;var _a$t;class Null extends BaseBlock{constructor(a={}){super(a,ValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(a,c,d){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=d,c+d>a.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):c+d}toBER(a,c){const d=new ArrayBuffer(2);if(!a){const tt=new Uint8Array(d);tt[0]=5,tt[1]=0}return c&&c.write(d),d}onAsciiEncoding(){return`${this.constructor.NAME}`}}_a$t=Null;typeStore.Null=_a$t;Null.NAME="NULL";class LocalBooleanValueBlock extends HexBlock(ValueBlock){constructor({value:a,...c}={}){super(c),c.valueHex?this.valueHexView=BufferSourceConverter.toUint8Array(c.valueHex):this.valueHexView=new Uint8Array(1),a&&(this.value=a)}get value(){for(const a of this.valueHexView)if(a>0)return!0;return!1}set value(a){this.valueHexView[0]=a?255:0}fromBER(a,c,d){const tt=BufferSourceConverter.toUint8Array(a);return checkBufferParams(this,tt,c,d)?(this.valueHexView=tt.subarray(c,c+d),d>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,utilDecodeTC.call(this),this.blockLength=d,c+d):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}}LocalBooleanValueBlock.NAME="BooleanValueBlock";var _a$s;let Boolean$1=class extends BaseBlock{constructor(a={}){super(a,LocalBooleanValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(a){this.valueBlock.value=a}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};_a$s=Boolean$1;typeStore.Boolean=_a$s;Boolean$1.NAME="BOOLEAN";class LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock){constructor({isConstructed:a=!1,...c}={}){super(c),this.isConstructed=a}fromBER(a,c,d){let tt=0;if(this.isConstructed){if(this.isHexOnly=!1,tt=LocalConstructedValueBlock.prototype.fromBER.call(this,a,c,d),tt===-1)return tt;for(let nt=0;nt0&&xu.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=xu.unusedBits}return tt}const nt=BufferSourceConverter.toUint8Array(a);if(!checkBufferParams(this,nt,c,d))return-1;const $a=nt.subarray(c,c+d);if(this.unusedBits=$a[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){const Ys=$a.subarray(1);try{if(Ys.byteLength){const gu=localFromBER(Ys,0,Ys.byteLength);gu.offset!==-1&&gu.offset===d-1&&(this.value=[gu.result])}}catch{}}return this.valueHexView=$a.subarray(1),this.blockLength=$a.length,c+d}toBER(a,c){if(this.isConstructed)return LocalConstructedValueBlock.prototype.toBER.call(this,a,c);if(a)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return EMPTY_BUFFER;const d=new Uint8Array(this.valueHexView.length+1);return d[0]=this.unusedBits,d.set(this.valueHexView,1),d.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}}LocalBitStringValueBlock.NAME="BitStringValueBlock";var _a$q;class BitString extends BaseBlock{constructor({idBlock:a={},lenBlock:c={},...d}={}){var tt,nt;(tt=d.isConstructed)!==null&&tt!==void 0||(d.isConstructed=!!(!((nt=d.value)===null||nt===void 0)&&nt.length)),super({idBlock:{isConstructed:d.isConstructed,...a},lenBlock:{...c,isIndefiniteForm:!!d.isIndefiniteForm},...d},LocalBitStringValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(a,c,d){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(a,c,d)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Constructed.prototype.onAsciiEncoding.call(this);{const a=[],c=this.valueBlock.valueHexView;for(const tt of c)a.push(tt.toString(2).padStart(8,"0"));const d=a.join("");return`${this.constructor.NAME} : ${d.substring(0,d.length-this.valueBlock.unusedBits)}`}}}_a$q=BitString;typeStore.BitString=_a$q;BitString.NAME=BIT_STRING_NAME;var _a$p;function viewAdd(o,a){const c=new Uint8Array([0]),d=new Uint8Array(o),tt=new Uint8Array(a);let nt=d.slice(0);const $a=nt.length-1,Ys=tt.slice(0),gu=Ys.length-1;let xu=0;const $u=gu<$a?$a:gu;let Iu=0;for(let Xu=$u;Xu>=0;Xu--,Iu++){switch(!0){case Iu=nt.length:nt=utilConcatView(new Uint8Array([xu%10]),nt);break;default:nt[$a-Iu]=xu%10}}return c[0]>0&&(nt=utilConcatView(c,nt)),nt}function power2(o){if(o>=powers2.length)for(let a=powers2.length;a<=o;a++){const c=new Uint8Array([0]);let d=powers2[a-1].slice(0);for(let tt=d.length-1;tt>=0;tt--){const nt=new Uint8Array([(d[tt]<<1)+c[0]]);c[0]=nt[0]/10,d[tt]=nt[0]%10}c[0]>0&&(d=utilConcatView(c,d)),powers2.push(d)}return powers2[o]}function viewSub(o,a){let c=0;const d=new Uint8Array(o),tt=new Uint8Array(a),nt=d.slice(0),$a=nt.length-1,Ys=tt.slice(0),gu=Ys.length-1;let xu,$u=0;for(let Iu=gu;Iu>=0;Iu--,$u++)switch(xu=nt[$a-$u]-Ys[gu-$u]-c,!0){case xu<0:c=1,nt[$a-$u]=xu+10;break;default:c=0,nt[$a-$u]=xu}if(c>0)for(let Iu=$a-gu+1;Iu>=0;Iu--,$u++)if(xu=nt[$a-$u]-c,xu<0)c=1,nt[$a-$u]=xu+10;else{c=0,nt[$a-$u]=xu;break}return nt.slice()}class LocalIntegerValueBlock extends HexBlock(ValueBlock){constructor({value:a,...c}={}){super(c),this._valueDec=0,c.valueHex&&this.setValueHex(),a!==void 0&&(this.valueDec=a)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=utilDecodeTC.call(this)))}set valueDec(a){this._valueDec=a,this.isHexOnly=!1,this.valueHexView=new Uint8Array(utilEncodeTC(a))}get valueDec(){return this._valueDec}fromDER(a,c,d,tt=0){const nt=this.fromBER(a,c,d);if(nt===-1)return nt;const $a=this.valueHexView;return $a[0]===0&&$a[1]&128?this.valueHexView=$a.subarray(1):tt!==0&&$a.length1&&(tt=$a.length+1),this.valueHexView=$a.subarray(tt-$a.length)),nt}toDER(a=!1){const c=this.valueHexView;switch(!0){case(c[0]&128)!==0:{const d=new Uint8Array(this.valueHexView.length+1);d[0]=0,d.set(c,1),this.valueHexView=d}break;case(c[0]===0&&(c[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(a)}fromBER(a,c,d){const tt=super.fromBER(a,c,d);return tt===-1||this.setValueHex(),tt}toBER(a){return a?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){const a=this.valueHexView.length*8-1;let c=new Uint8Array(this.valueHexView.length*8/3),d=0,tt;const nt=this.valueHexView;let $a="",Ys=!1;for(let gu=nt.byteLength-1;gu>=0;gu--){tt=nt[gu];for(let xu=0;xu<8;xu++){if((tt&1)===1)switch(d){case a:c=viewSub(power2(d),c),$a="-";break;default:c=viewAdd(c,power2(d))}d++,tt>>=1}}for(let gu=0;gu0;){const nt=new LocalSidValueBlock;if(tt=nt.fromBER(a,tt,d),tt===-1)return this.blockLength=0,this.error=nt.error,tt;this.value.length===0&&(nt.isFirstSid=!0),this.blockLength+=nt.blockLength,d-=nt.blockLength,this.value.push(nt)}return tt}toBER(a){const c=[];for(let d=0;dNumber.MAX_SAFE_INTEGER){assertBigInt();const Ys=BigInt(tt);$a.valueBigInt=Ys}else if($a.valueDec=parseInt(tt,10),isNaN($a.valueDec))return;this.value.length||($a.isFirstSid=!0,nt=!0),this.value.push($a)}while(d!==-1)}toString(){let a="",c=!1;for(let d=0;d0;){const nt=new LocalRelativeSidValueBlock;if(tt=nt.fromBER(a,tt,d),tt===-1)return this.blockLength=0,this.error=nt.error,tt;this.blockLength+=nt.blockLength,d-=nt.blockLength,this.value.push(nt)}return tt}toBER(a,c){const d=[];for(let tt=0;tt4)continue;const Ys=4-$a.length;for(let gu=$a.length-1;gu>=0;gu--)d[tt*4+gu+Ys]=$a[gu]}this.valueBlock.value=a}}LocalUniversalStringValueBlock.NAME="UniversalStringValueBlock";var _a$g;class UniversalString extends LocalUniversalStringValueBlock{constructor({...a}={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}}_a$g=UniversalString;typeStore.UniversalString=_a$g;UniversalString.NAME="UniversalString";var _a$f;class NumericString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}}_a$f=NumericString;typeStore.NumericString=_a$f;NumericString.NAME="NumericString";var _a$e;class PrintableString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}}_a$e=PrintableString;typeStore.PrintableString=_a$e;PrintableString.NAME="PrintableString";var _a$d;class TeletexString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}}_a$d=TeletexString;typeStore.TeletexString=_a$d;TeletexString.NAME="TeletexString";var _a$c;class VideotexString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}}_a$c=VideotexString;typeStore.VideotexString=_a$c;VideotexString.NAME="VideotexString";var _a$b;class IA5String extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}}_a$b=IA5String;typeStore.IA5String=_a$b;IA5String.NAME="IA5String";var _a$a;class GraphicString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}}_a$a=GraphicString;typeStore.GraphicString=_a$a;GraphicString.NAME="GraphicString";var _a$9;class VisibleString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}}_a$9=VisibleString;typeStore.VisibleString=_a$9;VisibleString.NAME="VisibleString";var _a$8;class GeneralString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}}_a$8=GeneralString;typeStore.GeneralString=_a$8;GeneralString.NAME="GeneralString";var _a$7;class CharacterString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}}_a$7=CharacterString;typeStore.CharacterString=_a$7;CharacterString.NAME="CharacterString";var _a$6;class UTCTime extends VisibleString{constructor({value:a,valueDate:c,...d}={}){if(super(d),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,a){this.fromString(a),this.valueBlock.valueHexView=new Uint8Array(a.length);for(let tt=0;tt=50?this.year=1900+tt:this.year=2e3+tt,this.month=parseInt(d[2],10),this.day=parseInt(d[3],10),this.hour=parseInt(d[4],10),this.minute=parseInt(d[5],10),this.second=parseInt(d[6],10)}toString(a="iso"){if(a==="iso"){const c=new Array(7);return c[0]=padNumber(this.year<2e3?this.year-1900:this.year-2e3,2),c[1]=padNumber(this.month,2),c[2]=padNumber(this.day,2),c[3]=padNumber(this.hour,2),c[4]=padNumber(this.minute,2),c[5]=padNumber(this.second,2),c[6]="Z",c.join("")}return super.toString(a)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}}_a$6=UTCTime;typeStore.UTCTime=_a$6;UTCTime.NAME="UTCTime";var _a$5;class GeneralizedTime extends UTCTime{constructor(a={}){var c;super(a),(c=this.millisecond)!==null&&c!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(a){super.fromDate(a),this.millisecond=a.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(a){let c=!1,d="",tt="",nt=0,$a,Ys=0,gu=0;if(a[a.length-1]==="Z")d=a.substring(0,a.length-1),c=!0;else{const Iu=new Number(a[a.length-1]);if(isNaN(Iu.valueOf()))throw new Error("Wrong input string for conversion");d=a}if(c){if(d.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(d.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let Iu=1,Xu=d.indexOf("+"),i0="";if(Xu===-1&&(Xu=d.indexOf("-"),Iu=-1),Xu!==-1){if(i0=d.substring(Xu+1),d=d.substring(0,Xu),i0.length!==2&&i0.length!==4)throw new Error("Wrong input string for conversion");let p0=parseInt(i0.substring(0,2),10);if(isNaN(p0.valueOf()))throw new Error("Wrong input string for conversion");if(Ys=Iu*p0,i0.length===4){if(p0=parseInt(i0.substring(2,4),10),isNaN(p0.valueOf()))throw new Error("Wrong input string for conversion");gu=Iu*p0}}}let xu=d.indexOf(".");if(xu===-1&&(xu=d.indexOf(",")),xu!==-1){const Iu=new Number(`0${d.substring(xu)}`);if(isNaN(Iu.valueOf()))throw new Error("Wrong input string for conversion");nt=Iu.valueOf(),tt=d.substring(0,xu)}else tt=d;switch(!0){case tt.length===8:if($a=/(\d{4})(\d{2})(\d{2})/ig,xu!==-1)throw new Error("Wrong input string for conversion");break;case tt.length===10:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,xu!==-1){let Iu=60*nt;this.minute=Math.floor(Iu),Iu=60*(Iu-this.minute),this.second=Math.floor(Iu),Iu=1e3*(Iu-this.second),this.millisecond=Math.floor(Iu)}break;case tt.length===12:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,xu!==-1){let Iu=60*nt;this.second=Math.floor(Iu),Iu=1e3*(Iu-this.second),this.millisecond=Math.floor(Iu)}break;case tt.length===14:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,xu!==-1){const Iu=1e3*nt;this.millisecond=Math.floor(Iu)}break;default:throw new Error("Wrong input string for conversion")}const $u=$a.exec(tt);if($u===null)throw new Error("Wrong input string for conversion");for(let Iu=1;Iu<$u.length;Iu++)switch(Iu){case 1:this.year=parseInt($u[Iu],10);break;case 2:this.month=parseInt($u[Iu],10);break;case 3:this.day=parseInt($u[Iu],10);break;case 4:this.hour=parseInt($u[Iu],10)+Ys;break;case 5:this.minute=parseInt($u[Iu],10)+gu;break;case 6:this.second=parseInt($u[Iu],10);break;default:throw new Error("Wrong input string for conversion")}if(c===!1){const Iu=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=Iu.getUTCFullYear(),this.month=Iu.getUTCMonth(),this.day=Iu.getUTCDay(),this.hour=Iu.getUTCHours(),this.minute=Iu.getUTCMinutes(),this.second=Iu.getUTCSeconds(),this.millisecond=Iu.getUTCMilliseconds()}}toString(a="iso"){if(a==="iso"){const c=[];return c.push(padNumber(this.year,4)),c.push(padNumber(this.month,2)),c.push(padNumber(this.day,2)),c.push(padNumber(this.hour,2)),c.push(padNumber(this.minute,2)),c.push(padNumber(this.second,2)),this.millisecond!==0&&(c.push("."),c.push(padNumber(this.millisecond,3))),c.push("Z"),c.join("")}return super.toString(a)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}}_a$5=GeneralizedTime;typeStore.GeneralizedTime=_a$5;GeneralizedTime.NAME="GeneralizedTime";var _a$4;class DATE extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}}_a$4=DATE;typeStore.DATE=_a$4;DATE.NAME="DATE";var _a$3;class TimeOfDay extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}}_a$3=TimeOfDay;typeStore.TimeOfDay=_a$3;TimeOfDay.NAME="TimeOfDay";var _a$2;class DateTime extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}}_a$2=DateTime;typeStore.DateTime=_a$2;DateTime.NAME="DateTime";var _a$1$1;class Duration extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}}_a$1$1=Duration;typeStore.Duration=_a$1$1;Duration.NAME="Duration";var _a$x;let TIME$1=class extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};_a$x=TIME$1;typeStore.TIME=_a$x;TIME$1.NAME="TIME";function pkcs1ToJwk(o){const{result:a}=fromBER(o),c=a.valueBlock.value;return{n:toString$b(bnToBuf(c[1].toBigInt()),"base64url"),e:toString$b(bnToBuf(c[2].toBigInt()),"base64url"),d:toString$b(bnToBuf(c[3].toBigInt()),"base64url"),p:toString$b(bnToBuf(c[4].toBigInt()),"base64url"),q:toString$b(bnToBuf(c[5].toBigInt()),"base64url"),dp:toString$b(bnToBuf(c[6].toBigInt()),"base64url"),dq:toString$b(bnToBuf(c[7].toBigInt()),"base64url"),qi:toString$b(bnToBuf(c[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function jwkToPkcs1(o){if(o.n==null||o.e==null||o.d==null||o.p==null||o.q==null||o.dp==null||o.dq==null||o.qi==null)throw new CodeError("JWK was missing components","ERR_INVALID_PARAMETERS");const c=new Sequence({value:[new Integer({value:0}),Integer.fromBigInt(bufToBn(fromString(o.n,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.e,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.d,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.p,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.q,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.dp,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.dq,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.qi,"base64url")))]}).toBER();return new Uint8Array(c,0,c.byteLength)}function pkixToJwk(o){const{result:a}=fromBER(o),c=a.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:toString$b(bnToBuf(c[0].toBigInt()),"base64url"),e:toString$b(bnToBuf(c[1].toBigInt()),"base64url")}}function jwkToPkix(o){if(o.n==null||o.e==null)throw new CodeError("JWK was missing components","ERR_INVALID_PARAMETERS");const c=new Sequence({value:[new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.1.1"}),new Null]}),new BitString({valueHex:new Sequence({value:[Integer.fromBigInt(bufToBn(fromString(o.n,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(c,0,c.byteLength)}function bnToBuf(o){let a=o.toString(16);a.length%2>0&&(a=`0${a}`);const c=a.length/2,d=new Uint8Array(c);let tt=0,nt=0;for(;tt0&&(d=`0${d}`),a.push(d)}),BigInt("0x"+a.join(""))}const SALT_LENGTH=16,KEY_SIZE=32,ITERATIONS=1e4;async function exportToPem(o,a){const c=webcrypto.get(),tt=new Sequence({value:[new Integer({value:0}),new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.1.1"}),new Null]}),new OctetString({valueHex:o.marshal()})]}).toBER(),nt=new Uint8Array(tt,0,tt.byteLength),$a=randomBytes$4(SALT_LENGTH),Ys=await pbkdf2Async(sha512$3,a,$a,{c:ITERATIONS,dkLen:KEY_SIZE}),gu=randomBytes$4(16),xu=await c.subtle.importKey("raw",Ys,"AES-CBC",!1,["encrypt"]),$u=await c.subtle.encrypt({name:"AES-CBC",iv:gu},xu,nt),Iu=new Sequence({value:[new OctetString({valueHex:$a}),new Integer({value:ITERATIONS}),new Integer({value:KEY_SIZE}),new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.2.11"}),new Null]})]}),Xu=new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.5.13"}),new Sequence({value:[new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.5.12"}),Iu]}),new Sequence({value:[new ObjectIdentifier({value:"2.16.840.1.101.3.4.1.42"}),new OctetString({valueHex:gu})]})]})]}),p0=new Sequence({value:[Xu,new OctetString({valueHex:$u})]}).toBER(),w0=new Uint8Array(p0,0,p0.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...toString$b(w0,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(` -`)}async function generateKey$1(o){const a=await webcrypto.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:o,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),c=await exportKey(a);return{privateKey:c[0],publicKey:c[1]}}async function unmarshalPrivateKey$1(o){const c=[await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await derivePublicFromPrivate(o)],d=await exportKey({privateKey:c[0],publicKey:c[1]});return{privateKey:d[0],publicKey:d[1]}}async function hashAndSign$1(o,a){const c=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),d=await webcrypto.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},c,a instanceof Uint8Array?a:a.subarray());return new Uint8Array(d,0,d.byteLength)}async function hashAndVerify$1(o,a,c){const d=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return webcrypto.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},d,a,c instanceof Uint8Array?c:c.subarray())}async function exportKey(o){if(o.privateKey==null||o.publicKey==null)throw new CodeError("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([webcrypto.get().subtle.exportKey("jwk",o.privateKey),webcrypto.get().subtle.exportKey("jwk",o.publicKey)])}async function derivePublicFromPrivate(o){return webcrypto.get().subtle.importKey("jwk",{kty:o.kty,n:o.n,e:o.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function keySize(o){if(o.kty!=="RSA")throw new CodeError("invalid key type","ERR_INVALID_KEY_TYPE");if(o.n==null)throw new CodeError("invalid key modulus","ERR_INVALID_KEY_MODULUS");return fromString(o.n,"base64url").length*8}const MAX_RSA_KEY_SIZE=8192;class RsaPublicKey{constructor(a){aw(this,"_key");this._key=a}verify(a,c){return hashAndVerify$1(this._key,c,a)}marshal(){return jwkToPkix(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class RsaPrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c}genSecret(){return randomBytes$4(16)}sign(a){return hashAndSign$1(this._key,a)}get public(){if(this._publicKey==null)throw new CodeError("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new RsaPublicKey(this._publicKey)}marshal(){return jwkToPkcs1(this._key)}get bytes(){return PrivateKey.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="pkcs-8"){if(c==="pkcs-8")return exportToPem(this,a);if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}async function unmarshalRsaPrivateKey(o){const a=pkcs1ToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const c=await unmarshalPrivateKey$1(a);return new RsaPrivateKey(c.privateKey,c.publicKey)}function unmarshalRsaPublicKey(o){const a=pkixToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new RsaPublicKey(a)}async function fromJwk(o){if(keySize(o)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await unmarshalPrivateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}async function generateKeyPair$2(o){if(o>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await generateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}const RSA=Object.freeze(Object.defineProperty({__proto__:null,MAX_RSA_KEY_SIZE,RsaPrivateKey,RsaPublicKey,fromJwk,generateKeyPair:generateKeyPair$2,unmarshalRsaPrivateKey,unmarshalRsaPublicKey},Symbol.toStringTag,{value:"Module"})),SHA256_K$2=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),SHA256_IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),SHA256_W$2=new Uint32Array(64);let SHA256$4=class extends HashMD{constructor(){super(64,32,8,!1),this.A=SHA256_IV[0]|0,this.B=SHA256_IV[1]|0,this.C=SHA256_IV[2]|0,this.D=SHA256_IV[3]|0,this.E=SHA256_IV[4]|0,this.F=SHA256_IV[5]|0,this.G=SHA256_IV[6]|0,this.H=SHA256_IV[7]|0}get(){const{A:a,B:c,C:d,D:tt,E:nt,F:$a,G:Ys,H:gu}=this;return[a,c,d,tt,nt,$a,Ys,gu]}set(a,c,d,tt,nt,$a,Ys,gu){this.A=a|0,this.B=c|0,this.C=d|0,this.D=tt|0,this.E=nt|0,this.F=$a|0,this.G=Ys|0,this.H=gu|0}process(a,c){for(let Iu=0;Iu<16;Iu++,c+=4)SHA256_W$2[Iu]=a.getUint32(c,!1);for(let Iu=16;Iu<64;Iu++){const Xu=SHA256_W$2[Iu-15],i0=SHA256_W$2[Iu-2],p0=rotr$1(Xu,7)^rotr$1(Xu,18)^Xu>>>3,w0=rotr$1(i0,17)^rotr$1(i0,19)^i0>>>10;SHA256_W$2[Iu]=w0+SHA256_W$2[Iu-7]+p0+SHA256_W$2[Iu-16]|0}let{A:d,B:tt,C:nt,D:$a,E:Ys,F:gu,G:xu,H:$u}=this;for(let Iu=0;Iu<64;Iu++){const Xu=rotr$1(Ys,6)^rotr$1(Ys,11)^rotr$1(Ys,25),i0=$u+Xu+Chi$2(Ys,gu,xu)+SHA256_K$2[Iu]+SHA256_W$2[Iu]|0,w0=(rotr$1(d,2)^rotr$1(d,13)^rotr$1(d,22))+Maj$2(d,tt,nt)|0;$u=xu,xu=gu,gu=Ys,Ys=$a+i0|0,$a=nt,nt=tt,tt=d,d=i0+w0|0}d=d+this.A|0,tt=tt+this.B|0,nt=nt+this.C|0,$a=$a+this.D|0,Ys=Ys+this.E|0,gu=gu+this.F|0,xu=xu+this.G|0,$u=$u+this.H|0,this.set(d,tt,nt,$a,Ys,gu,xu,$u)}roundClean(){SHA256_W$2.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const sha256$5=wrapConstructor$1(()=>new SHA256$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function validatePointOpts$1(o){const a=validateBasic$2(o);validateObject$2(a,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:c,Fp:d,a:tt}=a;if(c){if(!d.eql(tt,d.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof c!="object"||typeof c.beta!="bigint"||typeof c.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...a})}const{bytesToNumberBE:b2n$1,hexToBytes:h2b$1}=ut$4,DER$1={Err:class extends Error{constructor(a=""){super(a)}},_parseInt(o){const{Err:a}=DER$1;if(o.length<2||o[0]!==2)throw new a("Invalid signature integer tag");const c=o[1],d=o.subarray(2,c+2);if(!c||d.length!==c)throw new a("Invalid signature integer: wrong length");if(d[0]&128)throw new a("Invalid signature integer: negative");if(d[0]===0&&!(d[1]&128))throw new a("Invalid signature integer: unnecessary leading zero");return{d:b2n$1(d),l:o.subarray(c+2)}},toSig(o){const{Err:a}=DER$1,c=typeof o=="string"?h2b$1(o):o;abytes(c);let d=c.length;if(d<2||c[0]!=48)throw new a("Invalid signature tag");if(c[1]!==d-2)throw new a("Invalid signature: incorrect length");const{d:tt,l:nt}=DER$1._parseInt(c.subarray(2)),{d:$a,l:Ys}=DER$1._parseInt(nt);if(Ys.length)throw new a("Invalid signature: left bytes after parsing");return{r:tt,s:$a}},hexFromSig(o){const a=xu=>Number.parseInt(xu[0],16)&8?"00"+xu:xu,c=xu=>{const $u=xu.toString(16);return $u.length&1?`0${$u}`:$u},d=a(c(o.s)),tt=a(c(o.r)),nt=d.length/2,$a=tt.length/2,Ys=c(nt),gu=c($a);return`30${c($a+nt+4)}02${gu}${tt}02${Ys}${d}`}},_0n$b=BigInt(0),_1n$c=BigInt(1),_2n$8=BigInt(2),_3n$3=BigInt(3),_4n$2=BigInt(4);function weierstrassPoints$1(o){const a=validatePointOpts$1(o),{Fp:c}=a,d=a.toBytes||((p0,w0,A0)=>{const $0=w0.toAffine();return concatBytes$3(Uint8Array.from([4]),c.toBytes($0.x),c.toBytes($0.y))}),tt=a.fromBytes||(p0=>{const w0=p0.subarray(1),A0=c.fromBytes(w0.subarray(0,c.BYTES)),$0=c.fromBytes(w0.subarray(c.BYTES,2*c.BYTES));return{x:A0,y:$0}});function nt(p0){const{a:w0,b:A0}=a,$0=c.sqr(p0),O0=c.mul($0,p0);return c.add(c.add(O0,c.mul(p0,w0)),A0)}if(!c.eql(c.sqr(a.Gy),nt(a.Gx)))throw new Error("bad generator point: equation left != right");function $a(p0){return typeof p0=="bigint"&&_0n$bc.eql(L0,c.ZERO);return O0(A0)&&O0($0)?Iu.ZERO:new Iu(A0,$0,c.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(w0){const A0=c.invertBatch(w0.map($0=>$0.pz));return w0.map(($0,O0)=>$0.toAffine(A0[O0])).map(Iu.fromAffine)}static fromHex(w0){const A0=Iu.fromAffine(tt(ensureBytes$3("pointHex",w0)));return A0.assertValidity(),A0}static fromPrivateKey(w0){return Iu.BASE.multiply(gu(w0))}_setWindowSize(w0){this._WINDOW_SIZE=w0,xu.delete(this)}assertValidity(){if(this.is0()){if(a.allowInfinityPoint&&!c.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:w0,y:A0}=this.toAffine();if(!c.isValid(w0)||!c.isValid(A0))throw new Error("bad point: x or y not FE");const $0=c.sqr(A0),O0=nt(w0);if(!c.eql($0,O0))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:w0}=this.toAffine();if(c.isOdd)return!c.isOdd(w0);throw new Error("Field doesn't support isOdd")}equals(w0){$u(w0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:q0,pz:F0}=w0,u1=c.eql(c.mul(A0,F0),c.mul(L0,O0)),g1=c.eql(c.mul($0,F0),c.mul(q0,O0));return u1&&g1}negate(){return new Iu(this.px,c.neg(this.py),this.pz)}double(){const{a:w0,b:A0}=a,$0=c.mul(A0,_3n$3),{px:O0,py:L0,pz:q0}=this;let F0=c.ZERO,u1=c.ZERO,g1=c.ZERO,E1=c.mul(O0,O0),B1=c.mul(L0,L0),lv=c.mul(q0,q0),j1=c.mul(O0,L0);return j1=c.add(j1,j1),g1=c.mul(O0,q0),g1=c.add(g1,g1),F0=c.mul(w0,g1),u1=c.mul($0,lv),u1=c.add(F0,u1),F0=c.sub(B1,u1),u1=c.add(B1,u1),u1=c.mul(F0,u1),F0=c.mul(j1,F0),g1=c.mul($0,g1),lv=c.mul(w0,lv),j1=c.sub(E1,lv),j1=c.mul(w0,j1),j1=c.add(j1,g1),g1=c.add(E1,E1),E1=c.add(g1,E1),E1=c.add(E1,lv),E1=c.mul(E1,j1),u1=c.add(u1,E1),lv=c.mul(L0,q0),lv=c.add(lv,lv),E1=c.mul(lv,j1),F0=c.sub(F0,E1),g1=c.mul(lv,B1),g1=c.add(g1,g1),g1=c.add(g1,g1),new Iu(F0,u1,g1)}add(w0){$u(w0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:q0,pz:F0}=w0;let u1=c.ZERO,g1=c.ZERO,E1=c.ZERO;const B1=a.a,lv=c.mul(a.b,_3n$3);let j1=c.mul(A0,L0),r1=c.mul($0,q0),t1=c.mul(O0,F0),D0=c.add(A0,$0),Z0=c.add(L0,q0);D0=c.mul(D0,Z0),Z0=c.add(j1,r1),D0=c.sub(D0,Z0),Z0=c.add(A0,O0);let f1=c.add(L0,F0);return Z0=c.mul(Z0,f1),f1=c.add(j1,t1),Z0=c.sub(Z0,f1),f1=c.add($0,O0),u1=c.add(q0,F0),f1=c.mul(f1,u1),u1=c.add(r1,t1),f1=c.sub(f1,u1),E1=c.mul(B1,Z0),u1=c.mul(lv,t1),E1=c.add(u1,E1),u1=c.sub(r1,E1),E1=c.add(r1,E1),g1=c.mul(u1,E1),r1=c.add(j1,j1),r1=c.add(r1,j1),t1=c.mul(B1,t1),Z0=c.mul(lv,Z0),r1=c.add(r1,t1),t1=c.sub(j1,t1),t1=c.mul(B1,t1),Z0=c.add(Z0,t1),j1=c.mul(r1,Z0),g1=c.add(g1,j1),j1=c.mul(f1,Z0),u1=c.mul(D0,u1),u1=c.sub(u1,j1),j1=c.mul(D0,r1),E1=c.mul(f1,E1),E1=c.add(E1,j1),new Iu(u1,g1,E1)}subtract(w0){return this.add(w0.negate())}is0(){return this.equals(Iu.ZERO)}wNAF(w0){return i0.wNAFCached(this,xu,w0,A0=>{const $0=c.invertBatch(A0.map(O0=>O0.pz));return A0.map((O0,L0)=>O0.toAffine($0[L0])).map(Iu.fromAffine)})}multiplyUnsafe(w0){const A0=Iu.ZERO;if(w0===_0n$b)return A0;if(Ys(w0),w0===_1n$c)return this;const{endo:$0}=a;if(!$0)return i0.unsafeLadder(this,w0);let{k1neg:O0,k1:L0,k2neg:q0,k2:F0}=$0.splitScalar(w0),u1=A0,g1=A0,E1=this;for(;L0>_0n$b||F0>_0n$b;)L0&_1n$c&&(u1=u1.add(E1)),F0&_1n$c&&(g1=g1.add(E1)),E1=E1.double(),L0>>=_1n$c,F0>>=_1n$c;return O0&&(u1=u1.negate()),q0&&(g1=g1.negate()),g1=new Iu(c.mul(g1.px,$0.beta),g1.py,g1.pz),u1.add(g1)}multiply(w0){Ys(w0);let A0=w0,$0,O0;const{endo:L0}=a;if(L0){const{k1neg:q0,k1:F0,k2neg:u1,k2:g1}=L0.splitScalar(A0);let{p:E1,f:B1}=this.wNAF(F0),{p:lv,f:j1}=this.wNAF(g1);E1=i0.constTimeNegate(q0,E1),lv=i0.constTimeNegate(u1,lv),lv=new Iu(c.mul(lv.px,L0.beta),lv.py,lv.pz),$0=E1.add(lv),O0=B1.add(j1)}else{const{p:q0,f:F0}=this.wNAF(A0);$0=q0,O0=F0}return Iu.normalizeZ([$0,O0])[0]}multiplyAndAddUnsafe(w0,A0,$0){const O0=Iu.BASE,L0=(F0,u1)=>u1===_0n$b||u1===_1n$c||!F0.equals(O0)?F0.multiplyUnsafe(u1):F0.multiply(u1),q0=L0(this,A0).add(L0(w0,$0));return q0.is0()?void 0:q0}toAffine(w0){const{px:A0,py:$0,pz:O0}=this,L0=this.is0();w0==null&&(w0=L0?c.ONE:c.inv(O0));const q0=c.mul(A0,w0),F0=c.mul($0,w0),u1=c.mul(O0,w0);if(L0)return{x:c.ZERO,y:c.ZERO};if(!c.eql(u1,c.ONE))throw new Error("invZ was invalid");return{x:q0,y:F0}}isTorsionFree(){const{h:w0,isTorsionFree:A0}=a;if(w0===_1n$c)return!0;if(A0)return A0(Iu,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:w0,clearCofactor:A0}=a;return w0===_1n$c?this:A0?A0(Iu,this):this.multiplyUnsafe(a.h)}toRawBytes(w0=!0){return this.assertValidity(),d(Iu,this,w0)}toHex(w0=!0){return bytesToHex$2(this.toRawBytes(w0))}}Iu.BASE=new Iu(a.Gx,a.Gy,c.ONE),Iu.ZERO=new Iu(c.ZERO,c.ONE,c.ZERO);const Xu=a.nBitLength,i0=wNAF$2(Iu,a.endo?Math.ceil(Xu/2):Xu);return{CURVE:a,ProjectivePoint:Iu,normPrivateKeyToScalar:gu,weierstrassEquation:nt,isWithinCurveOrder:$a}}function validateOpts$5(o){const a=validateBasic$2(o);return validateObject$2(a,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...a})}function weierstrass$1(o){const a=validateOpts$5(o),{Fp:c,n:d}=a,tt=c.BYTES+1,nt=2*c.BYTES+1;function $a(Z0){return _0n$bbytesToHex$2(numberToBytesBE$2(Z0,a.nByteLength));function p0(Z0){const f1=d>>_1n$c;return Z0>f1}function w0(Z0){return p0(Z0)?Ys(-Z0):Z0}const A0=(Z0,f1,w1)=>bytesToNumberBE$2(Z0.slice(f1,w1));class $0{constructor(f1,w1,m1){this.r=f1,this.s=w1,this.recovery=m1,this.assertValidity()}static fromCompact(f1){const w1=a.nByteLength;return f1=ensureBytes$3("compactSignature",f1,w1*2),new $0(A0(f1,0,w1),A0(f1,w1,2*w1))}static fromDER(f1){const{r:w1,s:m1}=DER$1.toSig(ensureBytes$3("DER",f1));return new $0(w1,m1)}assertValidity(){if(!Xu(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!Xu(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(f1){return new $0(this.r,this.s,f1)}recoverPublicKey(f1){const{r:w1,s:m1,recovery:c1}=this,G0=g1(ensureBytes$3("msgHash",f1));if(c1==null||![0,1,2,3].includes(c1))throw new Error("recovery id invalid");const o1=c1===2||c1===3?w1+a.n:w1;if(o1>=c.ORDER)throw new Error("recovery id 2 or 3 invalid");const d1=c1&1?"03":"02",R1=xu.fromHex(d1+i0(o1)),O1=gu(o1),Q1=Ys(-G0*O1),rv=Ys(m1*O1),D1=xu.BASE.multiplyAndAddUnsafe(R1,Q1,rv);if(!D1)throw new Error("point at infinify");return D1.assertValidity(),D1}hasHighS(){return p0(this.s)}normalizeS(){return this.hasHighS()?new $0(this.r,Ys(-this.s),this.recovery):this}toDERRawBytes(){return hexToBytes$3(this.toDERHex())}toDERHex(){return DER$1.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return hexToBytes$3(this.toCompactHex())}toCompactHex(){return i0(this.r)+i0(this.s)}}const O0={isValidPrivateKey(Z0){try{return $u(Z0),!0}catch{return!1}},normPrivateKeyToScalar:$u,randomPrivateKey:()=>{const Z0=getMinHashLength$2(a.n);return mapHashToField$2(a.randomBytes(Z0),a.n)},precompute(Z0=8,f1=xu.BASE){return f1._setWindowSize(Z0),f1.multiply(BigInt(3)),f1}};function L0(Z0,f1=!0){return xu.fromPrivateKey(Z0).toRawBytes(f1)}function q0(Z0){const f1=isBytes$6(Z0),w1=typeof Z0=="string",m1=(f1||w1)&&Z0.length;return f1?m1===tt||m1===nt:w1?m1===2*tt||m1===2*nt:Z0 instanceof xu}function F0(Z0,f1,w1=!0){if(q0(Z0))throw new Error("first arg must be private key");if(!q0(f1))throw new Error("second arg must be public key");return xu.fromHex(f1).multiply($u(Z0)).toRawBytes(w1)}const u1=a.bits2int||function(Z0){const f1=bytesToNumberBE$2(Z0),w1=Z0.length*8-a.nBitLength;return w1>0?f1>>BigInt(w1):f1},g1=a.bits2int_modN||function(Z0){return Ys(u1(Z0))},E1=bitMask$2(a.nBitLength);function B1(Z0){if(typeof Z0!="bigint")throw new Error("bigint expected");if(!(_0n$b<=Z0&&Z0Mv in w1))throw new Error("sign() legacy options not supported");const{hash:m1,randomBytes:c1}=a;let{lowS:G0,prehash:o1,extraEntropy:d1}=w1;G0==null&&(G0=!0),Z0=ensureBytes$3("msgHash",Z0),o1&&(Z0=ensureBytes$3("prehashed msgHash",m1(Z0)));const R1=g1(Z0),O1=$u(f1),Q1=[B1(O1),B1(R1)];if(d1!=null&&d1!==!1){const Mv=d1===!0?c1(c.BYTES):d1;Q1.push(ensureBytes$3("extraEntropy",Mv))}const rv=concatBytes$3(...Q1),D1=R1;function ev(Mv){const Zv=u1(Mv);if(!Xu(Zv))return;const fv=gu(Zv),cv=xu.BASE.multiply(Zv).toAffine(),ly=Ys(cv.x);if(ly===_0n$b)return;const Cy=Ys(fv*Ys(D1+ly*O1));if(Cy===_0n$b)return;let Ly=(cv.x===ly?0:2)|Number(cv.y&_1n$c),Hy=Cy;return G0&&p0(Cy)&&(Hy=w0(Cy),Ly^=1),new $0(ly,Hy,Ly)}return{seed:rv,k2sig:ev}}const j1={lowS:a.lowS,prehash:!1},r1={lowS:a.lowS,prehash:!1};function t1(Z0,f1,w1=j1){const{seed:m1,k2sig:c1}=lv(Z0,f1,w1),G0=a;return createHmacDrbg$2(G0.hash.outputLen,G0.nByteLength,G0.hmac)(m1,c1)}xu.BASE._setWindowSize(8);function D0(Z0,f1,w1,m1=r1){var cv;const c1=Z0;if(f1=ensureBytes$3("msgHash",f1),w1=ensureBytes$3("publicKey",w1),"strict"in m1)throw new Error("options.strict was renamed to lowS");const{lowS:G0,prehash:o1}=m1;let d1,R1;try{if(typeof c1=="string"||isBytes$6(c1))try{d1=$0.fromDER(c1)}catch(ly){if(!(ly instanceof DER$1.Err))throw ly;d1=$0.fromCompact(c1)}else if(typeof c1=="object"&&typeof c1.r=="bigint"&&typeof c1.s=="bigint"){const{r:ly,s:Cy}=c1;d1=new $0(ly,Cy)}else throw new Error("PARSE");R1=xu.fromHex(w1)}catch(ly){if(ly.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(G0&&d1.hasHighS())return!1;o1&&(f1=a.hash(f1));const{r:O1,s:Q1}=d1,rv=g1(f1),D1=gu(Q1),ev=Ys(rv*D1),Mv=Ys(O1*D1),Zv=(cv=xu.BASE.multiplyAndAddUnsafe(R1,ev,Mv))==null?void 0:cv.toAffine();return Zv?Ys(Zv.x)===O1:!1}return{CURVE:a,getPublicKey:L0,getSharedSecret:F0,sign:t1,verify:D0,ProjectivePoint:xu,Signature:$0,utils:O0}}function SWUFpSqrtRatio(o,a){const c=o.ORDER;let d=_0n$b;for(let p0=c-_1n$c;p0%_2n$8===_0n$b;p0/=_2n$8)d+=_1n$c;const tt=d,nt=_2n$8<{let A0=Iu,$0=o.pow(w0,xu),O0=o.sqr($0);O0=o.mul(O0,w0);let L0=o.mul(p0,O0);L0=o.pow(L0,gu),L0=o.mul(L0,$0),$0=o.mul(L0,w0),O0=o.mul(L0,p0);let q0=o.mul(O0,$0);L0=o.pow(q0,$u);let F0=o.eql(L0,o.ONE);$0=o.mul(O0,Xu),L0=o.mul(q0,A0),O0=o.cmov($0,O0,F0),q0=o.cmov(L0,q0,F0);for(let u1=tt;u1>_1n$c;u1--){let g1=u1-_2n$8;g1=_2n$8<{let O0=o.sqr($0);const L0=o.mul(A0,$0);O0=o.mul(O0,L0);let q0=o.pow(O0,p0);q0=o.mul(q0,L0);const F0=o.mul(q0,w0),u1=o.mul(o.sqr(q0),$0),g1=o.eql(u1,A0);let E1=o.cmov(F0,q0,g1);return{isValid:g1,value:E1}}}return i0}function mapToCurveSimpleSWU(o,a){if(validateField$2(o),!o.isValid(a.A)||!o.isValid(a.B)||!o.isValid(a.Z))throw new Error("mapToCurveSimpleSWU: invalid opts");const c=SWUFpSqrtRatio(o,a.Z);if(!o.isOdd)throw new Error("Fp.isOdd is not implemented!");return d=>{let tt,nt,$a,Ys,gu,xu,$u,Iu;tt=o.sqr(d),tt=o.mul(tt,a.Z),nt=o.sqr(tt),nt=o.add(nt,tt),$a=o.add(nt,o.ONE),$a=o.mul($a,a.B),Ys=o.cmov(a.Z,o.neg(nt),!o.eql(nt,o.ZERO)),Ys=o.mul(Ys,a.A),nt=o.sqr($a),xu=o.sqr(Ys),gu=o.mul(xu,a.A),nt=o.add(nt,gu),nt=o.mul(nt,$a),xu=o.mul(xu,Ys),gu=o.mul(xu,a.B),nt=o.add(nt,gu),$u=o.mul(tt,$a);const{isValid:Xu,value:i0}=c(nt,xu);Iu=o.mul(tt,d),Iu=o.mul(Iu,i0),$u=o.cmov($u,$a,Xu),Iu=o.cmov(Iu,i0,Xu);const p0=o.isOdd(d)===o.isOdd(Iu);return Iu=o.cmov(o.neg(Iu),Iu,p0),$u=o.div($u,Ys),{x:$u,y:Iu}}}const weierstrass$2=Object.freeze(Object.defineProperty({__proto__:null,DER:DER$1,SWUFpSqrtRatio,mapToCurveSimpleSWU,weierstrass:weierstrass$1,weierstrassPoints:weierstrassPoints$1},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function getHash$1(o){return{hash:o,hmac:(a,...c)=>hmac$2(o,a,concatBytes$4(...c)),randomBytes:randomBytes$5}}function createCurve(o,a){const c=d=>weierstrass$1({...o,...getHash$1(d)});return Object.freeze({...c(a),create:c})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1P=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),secp256k1N=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),_1n$b=BigInt(1),_2n$7=BigInt(2),divNearest=(o,a)=>(o+a/_2n$7)/a;function sqrtMod(o){const a=secp256k1P,c=BigInt(3),d=BigInt(6),tt=BigInt(11),nt=BigInt(22),$a=BigInt(23),Ys=BigInt(44),gu=BigInt(88),xu=o*o*o%a,$u=xu*xu*o%a,Iu=pow2$1($u,c,a)*$u%a,Xu=pow2$1(Iu,c,a)*$u%a,i0=pow2$1(Xu,_2n$7,a)*xu%a,p0=pow2$1(i0,tt,a)*i0%a,w0=pow2$1(p0,nt,a)*p0%a,A0=pow2$1(w0,Ys,a)*w0%a,$0=pow2$1(A0,gu,a)*A0%a,O0=pow2$1($0,Ys,a)*w0%a,L0=pow2$1(O0,c,a)*$u%a,q0=pow2$1(L0,$a,a)*p0%a,F0=pow2$1(q0,d,a)*xu%a,u1=pow2$1(F0,_2n$7,a);if(!Fp$1.eql(Fp$1.sqr(u1),o))throw new Error("Cannot find square root");return u1}const Fp$1=Field$2(secp256k1P,void 0,void 0,{sqrt:sqrtMod}),secp256k1$1=createCurve({a:BigInt(0),b:BigInt(7),Fp:Fp$1,n:secp256k1N,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:o=>{const a=secp256k1N,c=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),d=-_1n$b*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),tt=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),nt=c,$a=BigInt("0x100000000000000000000000000000000"),Ys=divNearest(nt*o,a),gu=divNearest(-d*o,a);let xu=mod$2(o-Ys*c-gu*tt,a),$u=mod$2(-Ys*d-gu*nt,a);const Iu=xu>$a,Xu=$u>$a;if(Iu&&(xu=a-xu),Xu&&($u=a-$u),xu>$a||$u>$a)throw new Error("splitScalar: Endomorphism failed, k="+o);return{k1neg:Iu,k1:xu,k2neg:Xu,k2:$u}}}},sha256$5);BigInt(0);secp256k1$1.ProjectivePoint;function generateKey(){return secp256k1$1.utils.randomPrivateKey()}function hashAndSign(o,a){const c=sha256$6.digest(a instanceof Uint8Array?a:a.subarray());if(isPromise(c))return c.then(({digest:d})=>secp256k1$1.sign(d,o).toDERRawBytes()).catch(d=>{throw new CodeError(String(d),"ERR_INVALID_INPUT")});try{return secp256k1$1.sign(c.digest,o).toDERRawBytes()}catch(d){throw new CodeError(String(d),"ERR_INVALID_INPUT")}}function hashAndVerify(o,a,c){const d=sha256$6.digest(c instanceof Uint8Array?c:c.subarray());if(isPromise(d))return d.then(({digest:tt})=>secp256k1$1.verify(a,tt,o)).catch(tt=>{throw new CodeError(String(tt),"ERR_INVALID_INPUT")});try{return secp256k1$1.verify(a,d.digest,o)}catch(tt){throw new CodeError(String(tt),"ERR_INVALID_INPUT")}}function compressPublicKey(o){return secp256k1$1.ProjectivePoint.fromHex(o).toRawBytes(!0)}function validatePrivateKey(o){try{secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}function validatePublicKey(o){try{secp256k1$1.ProjectivePoint.fromHex(o)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PUBLIC_KEY")}}function computePublicKey(o){try{return secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}class Secp256k1PublicKey{constructor(a){aw(this,"_key");validatePublicKey(a),this._key=a}verify(a,c){return hashAndVerify(this._key,c,a)}marshal(){return compressPublicKey(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}}class Secp256k1PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c??computePublicKey(a),validatePrivateKey(this._key),validatePublicKey(this._publicKey)}sign(a){return hashAndSign(this._key,a)}get public(){return new Secp256k1PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalSecp256k1PrivateKey(o){return new Secp256k1PrivateKey(o)}function unmarshalSecp256k1PublicKey(o){return new Secp256k1PublicKey(o)}async function generateKeyPair$1(){const o=generateKey();return new Secp256k1PrivateKey(o)}const Secp256k1=Object.freeze(Object.defineProperty({__proto__:null,Secp256k1PrivateKey,Secp256k1PublicKey,generateKeyPair:generateKeyPair$1,unmarshalSecp256k1PrivateKey,unmarshalSecp256k1PublicKey},Symbol.toStringTag,{value:"Module"})),supportedKeys={rsa:RSA,ed25519:Ed25519,secp256k1:Secp256k1};function unsupportedKey(o){const a=Object.keys(supportedKeys).join(" / ");return new CodeError(`invalid or unsupported key type ${o}. Must be ${a}`,"ERR_UNSUPPORTED_KEY_TYPE")}function typeToKey(o){if(o=o.toLowerCase(),o==="rsa"||o==="ed25519"||o==="secp256k1")return supportedKeys[o];throw unsupportedKey(o)}async function generateKeyPair(o,a){return typeToKey(o).generateKeyPair(2048)}async function unmarshalPrivateKey(o){const a=PrivateKey.decode(o),c=a.Data??new Uint8Array;switch(a.Type){case KeyType.RSA:return supportedKeys.rsa.unmarshalRsaPrivateKey(c);case KeyType.Ed25519:return supportedKeys.ed25519.unmarshalEd25519PrivateKey(c);case KeyType.Secp256k1:return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(c);default:throw unsupportedKey(a.Type??"RSA")}}function base$4(o){if(o.length>=255)throw new TypeError("Alphabet too long");for(var a=new Uint8Array(256),c=0;c>>0,L0=new Uint8Array(O0);A0!==$0;){for(var q0=i0[A0],F0=0,u1=O0-1;(q0!==0||F0>>0,L0[u1]=q0%$a>>>0,q0=q0/$a>>>0;if(q0!==0)throw new Error("Non-zero carry");w0=F0,A0++}for(var g1=O0-w0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=Ys.repeat(p0);g1>>0,O0=new Uint8Array($0);i0[p0];){var L0=a[i0.charCodeAt(p0)];if(L0===255)return;for(var q0=0,F0=$0-1;(L0!==0||q0>>0,O0[F0]=L0%256>>>0,L0=L0/256>>>0;if(L0!==0)throw new Error("Non-zero carry");A0=q0,p0++}for(var u1=$0-A0;u1!==$0&&O0[u1]===0;)u1++;for(var g1=new Uint8Array(w0+($0-u1)),E1=w0;u1!==$0;)g1[E1++]=O0[u1++];return g1}function Xu(i0){var p0=Iu(i0);if(p0)return p0;throw new Error("Non-base"+$a+" character")}return{encode:$u,decodeUnsafe:Iu,decode:Xu}}var src$1=base$4;const basex$2=src$1,ALPHABET$2="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";var bs58$2=basex$2(ALPHABET$2);const bs58$3=getDefaultExportFromCjs$1(bs58$2),CLIENT_KEY$1="client-key",AUTHORIZED$1="node-authorized",CALLBACK_URL="callback-url",APPLICATION_ID="application-id",setStorageCallbackUrl=o=>{localStorage.setItem(CALLBACK_URL,JSON.stringify(o))},getStorageCallbackUrl=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CALLBACK_URL);return o?JSON.parse(o):null}return null},setStorageApplicationId=o=>{localStorage.setItem(APPLICATION_ID,JSON.stringify(o))},getStorageApplicationId=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(APPLICATION_ID);return o?JSON.parse(o):null}return null},setStorageClientKey=o=>{localStorage.setItem(CLIENT_KEY$1,JSON.stringify(o))},getStorageClientKey=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CLIENT_KEY$1);if(!o)return null;let a=JSON.parse(o);if(a)return a}return null},setStorageNodeAuthorized=()=>{localStorage.setItem(AUTHORIZED$1,JSON.stringify(!0))},getStorageNodeAuthorized=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(AUTHORIZED$1);if(o!==null){let a=JSON.parse(o);if(a)return a}else return null}return null};async function createAuthHeader(o,a){const c=await getPrivateKey();if(!c)return null;const tt=new TextEncoder().encode(o),nt=bs58$3.encode(c.public.bytes),$a=await crypto.subtle.digest("SHA-256",tt),Ys=new Uint8Array($a),gu=await c.sign(Ys),xu=bs58$3.encode(gu),$u=bs58$3.encode(Ys);return{wallet_type:JSON.stringify(WalletType.NEAR({networkId:a})),signing_key:nt,signature:xu,challenge:$u}}async function getPrivateKey(){try{const o=getStorageClientKey();return o?await unmarshalPrivateKey(bs58$3.decode(o.privateKey)):null}catch(o){return console.error("Error extracting private key:",o),null}}const t$6=translations.nodeDataSource;var Network=(o=>(o.NEAR="NEAR",o.ETH="ETH",o.BNB="BNB",o.ARB="ARB",o.ZK="ZK",o.STARKNET="STARKNET",o.ICP="ICP",o))(Network||{}),WalletType;(o=>{function a({networkId:$a="mainnet"}){return{type:"NEAR",networkId:$a}}o.NEAR=a;function c({chainId:$a=1}){return{type:"ETH",chainId:$a}}o.ETH=c;function d({walletName:$a="MS"}){return{type:"STARKNET",walletName:$a}}o.STARKNET=d;const tt="rdmx6-jaaaa-aaaaa-aaadq-cai";function nt({canisterId:$a=tt,walletName:Ys="II"}){return{type:"ICP",canisterId:$a,walletName:Ys}}o.ICP=nt})(WalletType||(WalletType={}));class NodeDataSource{constructor(a){aw(this,"client");this.client=a}async getInstalledApplications(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications`,a??{})}catch(a){return console.error("Error fetching installed applications:",a),{error:{code:500,message:"Failed to fetch installed applications."}}}}async getInstalledApplicationDetails(a){try{const c=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications/${a}`,c??{})}catch(c){return console.error("Error fetching installed application:",c),{error:{code:500,message:"Failed to fetch installed application."}}}}async getContexts(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts`,a??{})}catch(a){return console.error("Error fetching contexts:",a),{error:{code:500,message:"Failed to fetch context data."}}}}async getContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context data."}}}}async getContextClientKeys(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/client-keys`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context client keys."}}}}async getContextUsers(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/users`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context users."}}}}async getContextStorageUsage(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/storage`,c??{})}catch(c){return console.error("Error fetching context storage usage:",c),{error:{code:500,message:"Failed to fetch context storage usage."}}}}async deleteContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.delete(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error deleting context:",c),{error:{code:500,message:"Failed to delete context."}}}}async startContexts(a,c){try{const d=await createAuthHeader(JSON.stringify({applicationId:a,initArguments:c}),getNearEnvironment()),nt=new TextEncoder().encode(JSON.stringify(c)),$a=Array.from(nt);return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts`,{applicationId:a,initializationParams:$a},d??{})}catch(d){return console.error("Error starting contexts:",d),{error:{code:500,message:"Failed to start context."}}}}async getDidList(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/did`,a??{})}catch(a){return console.error("Error fetching root keys:",a),{error:{code:500,message:"Failed to fetch root keys."}}}}async health(a){return await this.client.get(`${a.url}/admin-api/health`)}async installApplication(a,c,d,tt){try{const nt=await createAuthHeader(JSON.stringify({selectedPackageId:a,selectedVersion:c,hash:tt}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/install-application`,{url:d,version:c,metadata:createAppMetadata(a)},nt??{})}catch(nt){return console.error("Error installing application:",nt),{error:{code:500,message:"Failed to install application."}}}}async uninstallApplication(a){try{const c=await createAuthHeader(JSON.stringify({applicationId:a}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/uninstall-application`,{applicationId:a},c??{})}catch(c){return console.error("Error uninstalling application:",c),{error:{code:500,message:"Failed to uninstall application."}}}}async joinContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts/${a}/join`,{},c??{})}catch(c){return console.error(`${t$6.joinContextErrorTitle}: ${c}`),{error:{code:500,message:t$6.joinContextErrorMessage}}}}async login(a){return await this.client.post(`${getAppEndpointKey()}/admin-api/add-client-key`,{...a})}async requestChallenge(){return await this.client.post(`${getAppEndpointKey()}/admin-api/request-challenge`,{})}async addRootKey(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.post(`${getAppEndpointKey()}/admin-api/root-key`,{...a},c):{error:{code:401,message:"Unauthorized"}}}async getContextIdentity(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/identities`,c):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}async createAccessToken(a,c){const d=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return d?await this.client.post(`${getAppEndpointKey()}/admin-api/generate-jwt-token`,{contextId:a,executorPublicKey:c},d):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}}class ApiClient{constructor(a){aw(this,"nodeApi");this.nodeApi=new NodeDataSource(a)}node(){return this.nodeApi}}const apiClient=o=>{const a=new AxiosHttpClient(axios,o);return new ApiClient(a)},APP_URL="app-url",AUTHORIZED="node-authorized",CLIENT_KEY="client-key",NODE_URL="node-url",clearStorage=()=>{localStorage.removeItem(APP_URL),localStorage.removeItem(AUTHORIZED),localStorage.removeItem(CLIENT_KEY)},getAppEndpointKey=()=>{try{if(typeof window<"u"&&window.localStorage){let o=localStorage.getItem(APP_URL);if(o){let a=JSON.parse(o);if(a&&a.length>0)return a}}return null}catch{return null}},setAppEndpointKey=o=>{localStorage.setItem(APP_URL,JSON.stringify(o))},getClientKey=()=>localStorage.getItem(CLIENT_KEY)??"",isNodeAuthorized=()=>{const o=localStorage.getItem(AUTHORIZED);return o?JSON.parse(o):!1},setNodeUrlFromQuery=async o=>{const c=new URLSearchParams(window.location.search).get(NODE_URL);if(c&&await verifyNodeUrl(c,o)){setAppEndpointKey(c);const d=`${window.location.pathname}auth`;window.location.href=d}else if(c)window.alert("Node URL is not valid or not reachable. Please try again.");else return},verifyNodeUrl=async(o,a)=>{try{return new URL(o),!!(await apiClient(a).node().health({url:o})).data}catch{return!1}};var classnames={exports:{}};/*! +`)}`:`${c} :`}}_a$v=Constructed;typeStore.Constructed=_a$v;Constructed.NAME="CONSTRUCTED";class LocalEndOfContentValueBlock extends ValueBlock{fromBER(a,c,d){return c}toBER(a){return EMPTY_BUFFER}}LocalEndOfContentValueBlock.override="EndOfContentValueBlock";var _a$u;class EndOfContent extends BaseBlock{constructor(a={}){super(a,LocalEndOfContentValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}}_a$u=EndOfContent;typeStore.EndOfContent=_a$u;EndOfContent.NAME=END_OF_CONTENT_NAME;var _a$t;class Null extends BaseBlock{constructor(a={}){super(a,ValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(a,c,d){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=d,c+d>a.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):c+d}toBER(a,c){const d=new ArrayBuffer(2);if(!a){const tt=new Uint8Array(d);tt[0]=5,tt[1]=0}return c&&c.write(d),d}onAsciiEncoding(){return`${this.constructor.NAME}`}}_a$t=Null;typeStore.Null=_a$t;Null.NAME="NULL";class LocalBooleanValueBlock extends HexBlock(ValueBlock){constructor({value:a,...c}={}){super(c),c.valueHex?this.valueHexView=BufferSourceConverter.toUint8Array(c.valueHex):this.valueHexView=new Uint8Array(1),a&&(this.value=a)}get value(){for(const a of this.valueHexView)if(a>0)return!0;return!1}set value(a){this.valueHexView[0]=a?255:0}fromBER(a,c,d){const tt=BufferSourceConverter.toUint8Array(a);return checkBufferParams(this,tt,c,d)?(this.valueHexView=tt.subarray(c,c+d),d>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,utilDecodeTC.call(this),this.blockLength=d,c+d):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}}LocalBooleanValueBlock.NAME="BooleanValueBlock";var _a$s;let Boolean$1=class extends BaseBlock{constructor(a={}){super(a,LocalBooleanValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(a){this.valueBlock.value=a}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};_a$s=Boolean$1;typeStore.Boolean=_a$s;Boolean$1.NAME="BOOLEAN";class LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock){constructor({isConstructed:a=!1,...c}={}){super(c),this.isConstructed=a}fromBER(a,c,d){let tt=0;if(this.isConstructed){if(this.isHexOnly=!1,tt=LocalConstructedValueBlock.prototype.fromBER.call(this,a,c,d),tt===-1)return tt;for(let nt=0;nt0&&Su.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=Su.unusedBits}return tt}const nt=BufferSourceConverter.toUint8Array(a);if(!checkBufferParams(this,nt,c,d))return-1;const $a=nt.subarray(c,c+d);if(this.unusedBits=$a[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){const Ws=$a.subarray(1);try{if(Ws.byteLength){const gu=localFromBER(Ws,0,Ws.byteLength);gu.offset!==-1&&gu.offset===d-1&&(this.value=[gu.result])}}catch{}}return this.valueHexView=$a.subarray(1),this.blockLength=$a.length,c+d}toBER(a,c){if(this.isConstructed)return LocalConstructedValueBlock.prototype.toBER.call(this,a,c);if(a)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return EMPTY_BUFFER;const d=new Uint8Array(this.valueHexView.length+1);return d[0]=this.unusedBits,d.set(this.valueHexView,1),d.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}}LocalBitStringValueBlock.NAME="BitStringValueBlock";var _a$q;class BitString extends BaseBlock{constructor({idBlock:a={},lenBlock:c={},...d}={}){var tt,nt;(tt=d.isConstructed)!==null&&tt!==void 0||(d.isConstructed=!!(!((nt=d.value)===null||nt===void 0)&&nt.length)),super({idBlock:{isConstructed:d.isConstructed,...a},lenBlock:{...c,isIndefiniteForm:!!d.isIndefiniteForm},...d},LocalBitStringValueBlock),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(a,c,d){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(a,c,d)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Constructed.prototype.onAsciiEncoding.call(this);{const a=[],c=this.valueBlock.valueHexView;for(const tt of c)a.push(tt.toString(2).padStart(8,"0"));const d=a.join("");return`${this.constructor.NAME} : ${d.substring(0,d.length-this.valueBlock.unusedBits)}`}}}_a$q=BitString;typeStore.BitString=_a$q;BitString.NAME=BIT_STRING_NAME;var _a$p;function viewAdd(o,a){const c=new Uint8Array([0]),d=new Uint8Array(o),tt=new Uint8Array(a);let nt=d.slice(0);const $a=nt.length-1,Ws=tt.slice(0),gu=Ws.length-1;let Su=0;const $u=gu<$a?$a:gu;let Iu=0;for(let Xu=$u;Xu>=0;Xu--,Iu++){switch(!0){case Iu=nt.length:nt=utilConcatView(new Uint8Array([Su%10]),nt);break;default:nt[$a-Iu]=Su%10}}return c[0]>0&&(nt=utilConcatView(c,nt)),nt}function power2(o){if(o>=powers2.length)for(let a=powers2.length;a<=o;a++){const c=new Uint8Array([0]);let d=powers2[a-1].slice(0);for(let tt=d.length-1;tt>=0;tt--){const nt=new Uint8Array([(d[tt]<<1)+c[0]]);c[0]=nt[0]/10,d[tt]=nt[0]%10}c[0]>0&&(d=utilConcatView(c,d)),powers2.push(d)}return powers2[o]}function viewSub(o,a){let c=0;const d=new Uint8Array(o),tt=new Uint8Array(a),nt=d.slice(0),$a=nt.length-1,Ws=tt.slice(0),gu=Ws.length-1;let Su,$u=0;for(let Iu=gu;Iu>=0;Iu--,$u++)switch(Su=nt[$a-$u]-Ws[gu-$u]-c,!0){case Su<0:c=1,nt[$a-$u]=Su+10;break;default:c=0,nt[$a-$u]=Su}if(c>0)for(let Iu=$a-gu+1;Iu>=0;Iu--,$u++)if(Su=nt[$a-$u]-c,Su<0)c=1,nt[$a-$u]=Su+10;else{c=0,nt[$a-$u]=Su;break}return nt.slice()}class LocalIntegerValueBlock extends HexBlock(ValueBlock){constructor({value:a,...c}={}){super(c),this._valueDec=0,c.valueHex&&this.setValueHex(),a!==void 0&&(this.valueDec=a)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=utilDecodeTC.call(this)))}set valueDec(a){this._valueDec=a,this.isHexOnly=!1,this.valueHexView=new Uint8Array(utilEncodeTC(a))}get valueDec(){return this._valueDec}fromDER(a,c,d,tt=0){const nt=this.fromBER(a,c,d);if(nt===-1)return nt;const $a=this.valueHexView;return $a[0]===0&&$a[1]&128?this.valueHexView=$a.subarray(1):tt!==0&&$a.length1&&(tt=$a.length+1),this.valueHexView=$a.subarray(tt-$a.length)),nt}toDER(a=!1){const c=this.valueHexView;switch(!0){case(c[0]&128)!==0:{const d=new Uint8Array(this.valueHexView.length+1);d[0]=0,d.set(c,1),this.valueHexView=d}break;case(c[0]===0&&(c[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(a)}fromBER(a,c,d){const tt=super.fromBER(a,c,d);return tt===-1||this.setValueHex(),tt}toBER(a){return a?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){const a=this.valueHexView.length*8-1;let c=new Uint8Array(this.valueHexView.length*8/3),d=0,tt;const nt=this.valueHexView;let $a="",Ws=!1;for(let gu=nt.byteLength-1;gu>=0;gu--){tt=nt[gu];for(let Su=0;Su<8;Su++){if((tt&1)===1)switch(d){case a:c=viewSub(power2(d),c),$a="-";break;default:c=viewAdd(c,power2(d))}d++,tt>>=1}}for(let gu=0;gu0;){const nt=new LocalSidValueBlock;if(tt=nt.fromBER(a,tt,d),tt===-1)return this.blockLength=0,this.error=nt.error,tt;this.value.length===0&&(nt.isFirstSid=!0),this.blockLength+=nt.blockLength,d-=nt.blockLength,this.value.push(nt)}return tt}toBER(a){const c=[];for(let d=0;dNumber.MAX_SAFE_INTEGER){assertBigInt();const Ws=BigInt(tt);$a.valueBigInt=Ws}else if($a.valueDec=parseInt(tt,10),isNaN($a.valueDec))return;this.value.length||($a.isFirstSid=!0,nt=!0),this.value.push($a)}while(d!==-1)}toString(){let a="",c=!1;for(let d=0;d0;){const nt=new LocalRelativeSidValueBlock;if(tt=nt.fromBER(a,tt,d),tt===-1)return this.blockLength=0,this.error=nt.error,tt;this.blockLength+=nt.blockLength,d-=nt.blockLength,this.value.push(nt)}return tt}toBER(a,c){const d=[];for(let tt=0;tt4)continue;const Ws=4-$a.length;for(let gu=$a.length-1;gu>=0;gu--)d[tt*4+gu+Ws]=$a[gu]}this.valueBlock.value=a}}LocalUniversalStringValueBlock.NAME="UniversalStringValueBlock";var _a$g;class UniversalString extends LocalUniversalStringValueBlock{constructor({...a}={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}}_a$g=UniversalString;typeStore.UniversalString=_a$g;UniversalString.NAME="UniversalString";var _a$f;class NumericString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}}_a$f=NumericString;typeStore.NumericString=_a$f;NumericString.NAME="NumericString";var _a$e;class PrintableString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}}_a$e=PrintableString;typeStore.PrintableString=_a$e;PrintableString.NAME="PrintableString";var _a$d;class TeletexString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}}_a$d=TeletexString;typeStore.TeletexString=_a$d;TeletexString.NAME="TeletexString";var _a$c;class VideotexString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}}_a$c=VideotexString;typeStore.VideotexString=_a$c;VideotexString.NAME="VideotexString";var _a$b;class IA5String extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}}_a$b=IA5String;typeStore.IA5String=_a$b;IA5String.NAME="IA5String";var _a$a;class GraphicString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}}_a$a=GraphicString;typeStore.GraphicString=_a$a;GraphicString.NAME="GraphicString";var _a$9;class VisibleString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}}_a$9=VisibleString;typeStore.VisibleString=_a$9;VisibleString.NAME="VisibleString";var _a$8;class GeneralString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}}_a$8=GeneralString;typeStore.GeneralString=_a$8;GeneralString.NAME="GeneralString";var _a$7;class CharacterString extends LocalSimpleStringBlock{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}}_a$7=CharacterString;typeStore.CharacterString=_a$7;CharacterString.NAME="CharacterString";var _a$6;class UTCTime extends VisibleString{constructor({value:a,valueDate:c,...d}={}){if(super(d),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,a){this.fromString(a),this.valueBlock.valueHexView=new Uint8Array(a.length);for(let tt=0;tt=50?this.year=1900+tt:this.year=2e3+tt,this.month=parseInt(d[2],10),this.day=parseInt(d[3],10),this.hour=parseInt(d[4],10),this.minute=parseInt(d[5],10),this.second=parseInt(d[6],10)}toString(a="iso"){if(a==="iso"){const c=new Array(7);return c[0]=padNumber(this.year<2e3?this.year-1900:this.year-2e3,2),c[1]=padNumber(this.month,2),c[2]=padNumber(this.day,2),c[3]=padNumber(this.hour,2),c[4]=padNumber(this.minute,2),c[5]=padNumber(this.second,2),c[6]="Z",c.join("")}return super.toString(a)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}}_a$6=UTCTime;typeStore.UTCTime=_a$6;UTCTime.NAME="UTCTime";var _a$5;class GeneralizedTime extends UTCTime{constructor(a={}){var c;super(a),(c=this.millisecond)!==null&&c!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(a){super.fromDate(a),this.millisecond=a.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(a){let c=!1,d="",tt="",nt=0,$a,Ws=0,gu=0;if(a[a.length-1]==="Z")d=a.substring(0,a.length-1),c=!0;else{const Iu=new Number(a[a.length-1]);if(isNaN(Iu.valueOf()))throw new Error("Wrong input string for conversion");d=a}if(c){if(d.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(d.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let Iu=1,Xu=d.indexOf("+"),r0="";if(Xu===-1&&(Xu=d.indexOf("-"),Iu=-1),Xu!==-1){if(r0=d.substring(Xu+1),d=d.substring(0,Xu),r0.length!==2&&r0.length!==4)throw new Error("Wrong input string for conversion");let p0=parseInt(r0.substring(0,2),10);if(isNaN(p0.valueOf()))throw new Error("Wrong input string for conversion");if(Ws=Iu*p0,r0.length===4){if(p0=parseInt(r0.substring(2,4),10),isNaN(p0.valueOf()))throw new Error("Wrong input string for conversion");gu=Iu*p0}}}let Su=d.indexOf(".");if(Su===-1&&(Su=d.indexOf(",")),Su!==-1){const Iu=new Number(`0${d.substring(Su)}`);if(isNaN(Iu.valueOf()))throw new Error("Wrong input string for conversion");nt=Iu.valueOf(),tt=d.substring(0,Su)}else tt=d;switch(!0){case tt.length===8:if($a=/(\d{4})(\d{2})(\d{2})/ig,Su!==-1)throw new Error("Wrong input string for conversion");break;case tt.length===10:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,Su!==-1){let Iu=60*nt;this.minute=Math.floor(Iu),Iu=60*(Iu-this.minute),this.second=Math.floor(Iu),Iu=1e3*(Iu-this.second),this.millisecond=Math.floor(Iu)}break;case tt.length===12:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,Su!==-1){let Iu=60*nt;this.second=Math.floor(Iu),Iu=1e3*(Iu-this.second),this.millisecond=Math.floor(Iu)}break;case tt.length===14:if($a=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,Su!==-1){const Iu=1e3*nt;this.millisecond=Math.floor(Iu)}break;default:throw new Error("Wrong input string for conversion")}const $u=$a.exec(tt);if($u===null)throw new Error("Wrong input string for conversion");for(let Iu=1;Iu<$u.length;Iu++)switch(Iu){case 1:this.year=parseInt($u[Iu],10);break;case 2:this.month=parseInt($u[Iu],10);break;case 3:this.day=parseInt($u[Iu],10);break;case 4:this.hour=parseInt($u[Iu],10)+Ws;break;case 5:this.minute=parseInt($u[Iu],10)+gu;break;case 6:this.second=parseInt($u[Iu],10);break;default:throw new Error("Wrong input string for conversion")}if(c===!1){const Iu=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=Iu.getUTCFullYear(),this.month=Iu.getUTCMonth(),this.day=Iu.getUTCDay(),this.hour=Iu.getUTCHours(),this.minute=Iu.getUTCMinutes(),this.second=Iu.getUTCSeconds(),this.millisecond=Iu.getUTCMilliseconds()}}toString(a="iso"){if(a==="iso"){const c=[];return c.push(padNumber(this.year,4)),c.push(padNumber(this.month,2)),c.push(padNumber(this.day,2)),c.push(padNumber(this.hour,2)),c.push(padNumber(this.minute,2)),c.push(padNumber(this.second,2)),this.millisecond!==0&&(c.push("."),c.push(padNumber(this.millisecond,3))),c.push("Z"),c.join("")}return super.toString(a)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}}_a$5=GeneralizedTime;typeStore.GeneralizedTime=_a$5;GeneralizedTime.NAME="GeneralizedTime";var _a$4;class DATE extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}}_a$4=DATE;typeStore.DATE=_a$4;DATE.NAME="DATE";var _a$3;class TimeOfDay extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}}_a$3=TimeOfDay;typeStore.TimeOfDay=_a$3;TimeOfDay.NAME="TimeOfDay";var _a$2;class DateTime extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}}_a$2=DateTime;typeStore.DateTime=_a$2;DateTime.NAME="DateTime";var _a$1$1;class Duration extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}}_a$1$1=Duration;typeStore.Duration=_a$1$1;Duration.NAME="Duration";var _a$x;let TIME$1=class extends Utf8String{constructor(a={}){super(a),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};_a$x=TIME$1;typeStore.TIME=_a$x;TIME$1.NAME="TIME";function pkcs1ToJwk(o){const{result:a}=fromBER(o),c=a.valueBlock.value;return{n:toString$b(bnToBuf(c[1].toBigInt()),"base64url"),e:toString$b(bnToBuf(c[2].toBigInt()),"base64url"),d:toString$b(bnToBuf(c[3].toBigInt()),"base64url"),p:toString$b(bnToBuf(c[4].toBigInt()),"base64url"),q:toString$b(bnToBuf(c[5].toBigInt()),"base64url"),dp:toString$b(bnToBuf(c[6].toBigInt()),"base64url"),dq:toString$b(bnToBuf(c[7].toBigInt()),"base64url"),qi:toString$b(bnToBuf(c[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function jwkToPkcs1(o){if(o.n==null||o.e==null||o.d==null||o.p==null||o.q==null||o.dp==null||o.dq==null||o.qi==null)throw new CodeError("JWK was missing components","ERR_INVALID_PARAMETERS");const c=new Sequence({value:[new Integer({value:0}),Integer.fromBigInt(bufToBn(fromString(o.n,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.e,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.d,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.p,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.q,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.dp,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.dq,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.qi,"base64url")))]}).toBER();return new Uint8Array(c,0,c.byteLength)}function pkixToJwk(o){const{result:a}=fromBER(o),c=a.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:toString$b(bnToBuf(c[0].toBigInt()),"base64url"),e:toString$b(bnToBuf(c[1].toBigInt()),"base64url")}}function jwkToPkix(o){if(o.n==null||o.e==null)throw new CodeError("JWK was missing components","ERR_INVALID_PARAMETERS");const c=new Sequence({value:[new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.1.1"}),new Null]}),new BitString({valueHex:new Sequence({value:[Integer.fromBigInt(bufToBn(fromString(o.n,"base64url"))),Integer.fromBigInt(bufToBn(fromString(o.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(c,0,c.byteLength)}function bnToBuf(o){let a=o.toString(16);a.length%2>0&&(a=`0${a}`);const c=a.length/2,d=new Uint8Array(c);let tt=0,nt=0;for(;tt0&&(d=`0${d}`),a.push(d)}),BigInt("0x"+a.join(""))}const SALT_LENGTH=16,KEY_SIZE=32,ITERATIONS=1e4;async function exportToPem(o,a){const c=webcrypto.get(),tt=new Sequence({value:[new Integer({value:0}),new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.1.1"}),new Null]}),new OctetString({valueHex:o.marshal()})]}).toBER(),nt=new Uint8Array(tt,0,tt.byteLength),$a=randomBytes$4(SALT_LENGTH),Ws=await pbkdf2Async(sha512$3,a,$a,{c:ITERATIONS,dkLen:KEY_SIZE}),gu=randomBytes$4(16),Su=await c.subtle.importKey("raw",Ws,"AES-CBC",!1,["encrypt"]),$u=await c.subtle.encrypt({name:"AES-CBC",iv:gu},Su,nt),Iu=new Sequence({value:[new OctetString({valueHex:$a}),new Integer({value:ITERATIONS}),new Integer({value:KEY_SIZE}),new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.2.11"}),new Null]})]}),Xu=new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.5.13"}),new Sequence({value:[new Sequence({value:[new ObjectIdentifier({value:"1.2.840.113549.1.5.12"}),Iu]}),new Sequence({value:[new ObjectIdentifier({value:"2.16.840.1.101.3.4.1.42"}),new OctetString({valueHex:gu})]})]})]}),p0=new Sequence({value:[Xu,new OctetString({valueHex:$u})]}).toBER(),y0=new Uint8Array(p0,0,p0.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...toString$b(y0,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(` +`)}async function generateKey$1(o){const a=await webcrypto.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:o,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),c=await exportKey(a);return{privateKey:c[0],publicKey:c[1]}}async function unmarshalPrivateKey$1(o){const c=[await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await derivePublicFromPrivate(o)],d=await exportKey({privateKey:c[0],publicKey:c[1]});return{privateKey:d[0],publicKey:d[1]}}async function hashAndSign$1(o,a){const c=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),d=await webcrypto.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},c,a instanceof Uint8Array?a:a.subarray());return new Uint8Array(d,0,d.byteLength)}async function hashAndVerify$1(o,a,c){const d=await webcrypto.get().subtle.importKey("jwk",o,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return webcrypto.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},d,a,c instanceof Uint8Array?c:c.subarray())}async function exportKey(o){if(o.privateKey==null||o.publicKey==null)throw new CodeError("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([webcrypto.get().subtle.exportKey("jwk",o.privateKey),webcrypto.get().subtle.exportKey("jwk",o.publicKey)])}async function derivePublicFromPrivate(o){return webcrypto.get().subtle.importKey("jwk",{kty:o.kty,n:o.n,e:o.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function keySize(o){if(o.kty!=="RSA")throw new CodeError("invalid key type","ERR_INVALID_KEY_TYPE");if(o.n==null)throw new CodeError("invalid key modulus","ERR_INVALID_KEY_MODULUS");return fromString(o.n,"base64url").length*8}const MAX_RSA_KEY_SIZE=8192;class RsaPublicKey{constructor(a){aw(this,"_key");this._key=a}verify(a,c){return hashAndVerify$1(this._key,c,a)}marshal(){return jwkToPkix(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}}class RsaPrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c}genSecret(){return randomBytes$4(16)}sign(a){return hashAndSign$1(this._key,a)}get public(){if(this._publicKey==null)throw new CodeError("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new RsaPublicKey(this._publicKey)}marshal(){return jwkToPkcs1(this._key)}get bytes(){return PrivateKey.encode({Type:KeyType.RSA,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="pkcs-8"){if(c==="pkcs-8")return exportToPem(this,a);if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}async function unmarshalRsaPrivateKey(o){const a=pkcs1ToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const c=await unmarshalPrivateKey$1(a);return new RsaPrivateKey(c.privateKey,c.publicKey)}function unmarshalRsaPublicKey(o){const a=pkixToJwk(o);if(keySize(a)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new RsaPublicKey(a)}async function fromJwk(o){if(keySize(o)>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await unmarshalPrivateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}async function generateKeyPair$2(o){if(o>MAX_RSA_KEY_SIZE)throw new CodeError("key size is too large","ERR_KEY_SIZE_TOO_LARGE");const a=await generateKey$1(o);return new RsaPrivateKey(a.privateKey,a.publicKey)}const RSA=Object.freeze(Object.defineProperty({__proto__:null,MAX_RSA_KEY_SIZE,RsaPrivateKey,RsaPublicKey,fromJwk,generateKeyPair:generateKeyPair$2,unmarshalRsaPrivateKey,unmarshalRsaPublicKey},Symbol.toStringTag,{value:"Module"})),SHA256_K$2=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),SHA256_IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),SHA256_W$2=new Uint32Array(64);let SHA256$4=class extends HashMD{constructor(){super(64,32,8,!1),this.A=SHA256_IV[0]|0,this.B=SHA256_IV[1]|0,this.C=SHA256_IV[2]|0,this.D=SHA256_IV[3]|0,this.E=SHA256_IV[4]|0,this.F=SHA256_IV[5]|0,this.G=SHA256_IV[6]|0,this.H=SHA256_IV[7]|0}get(){const{A:a,B:c,C:d,D:tt,E:nt,F:$a,G:Ws,H:gu}=this;return[a,c,d,tt,nt,$a,Ws,gu]}set(a,c,d,tt,nt,$a,Ws,gu){this.A=a|0,this.B=c|0,this.C=d|0,this.D=tt|0,this.E=nt|0,this.F=$a|0,this.G=Ws|0,this.H=gu|0}process(a,c){for(let Iu=0;Iu<16;Iu++,c+=4)SHA256_W$2[Iu]=a.getUint32(c,!1);for(let Iu=16;Iu<64;Iu++){const Xu=SHA256_W$2[Iu-15],r0=SHA256_W$2[Iu-2],p0=rotr$1(Xu,7)^rotr$1(Xu,18)^Xu>>>3,y0=rotr$1(r0,17)^rotr$1(r0,19)^r0>>>10;SHA256_W$2[Iu]=y0+SHA256_W$2[Iu-7]+p0+SHA256_W$2[Iu-16]|0}let{A:d,B:tt,C:nt,D:$a,E:Ws,F:gu,G:Su,H:$u}=this;for(let Iu=0;Iu<64;Iu++){const Xu=rotr$1(Ws,6)^rotr$1(Ws,11)^rotr$1(Ws,25),r0=$u+Xu+Chi$2(Ws,gu,Su)+SHA256_K$2[Iu]+SHA256_W$2[Iu]|0,y0=(rotr$1(d,2)^rotr$1(d,13)^rotr$1(d,22))+Maj$2(d,tt,nt)|0;$u=Su,Su=gu,gu=Ws,Ws=$a+r0|0,$a=nt,nt=tt,tt=d,d=r0+y0|0}d=d+this.A|0,tt=tt+this.B|0,nt=nt+this.C|0,$a=$a+this.D|0,Ws=Ws+this.E|0,gu=gu+this.F|0,Su=Su+this.G|0,$u=$u+this.H|0,this.set(d,tt,nt,$a,Ws,gu,Su,$u)}roundClean(){SHA256_W$2.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const sha256$5=wrapConstructor$1(()=>new SHA256$4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function validatePointOpts$1(o){const a=validateBasic$2(o);validateObject$2(a,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:c,Fp:d,a:tt}=a;if(c){if(!d.eql(tt,d.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof c!="object"||typeof c.beta!="bigint"||typeof c.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...a})}const{bytesToNumberBE:b2n$1,hexToBytes:h2b$1}=ut$4,DER$1={Err:class extends Error{constructor(a=""){super(a)}},_parseInt(o){const{Err:a}=DER$1;if(o.length<2||o[0]!==2)throw new a("Invalid signature integer tag");const c=o[1],d=o.subarray(2,c+2);if(!c||d.length!==c)throw new a("Invalid signature integer: wrong length");if(d[0]&128)throw new a("Invalid signature integer: negative");if(d[0]===0&&!(d[1]&128))throw new a("Invalid signature integer: unnecessary leading zero");return{d:b2n$1(d),l:o.subarray(c+2)}},toSig(o){const{Err:a}=DER$1,c=typeof o=="string"?h2b$1(o):o;abytes(c);let d=c.length;if(d<2||c[0]!=48)throw new a("Invalid signature tag");if(c[1]!==d-2)throw new a("Invalid signature: incorrect length");const{d:tt,l:nt}=DER$1._parseInt(c.subarray(2)),{d:$a,l:Ws}=DER$1._parseInt(nt);if(Ws.length)throw new a("Invalid signature: left bytes after parsing");return{r:tt,s:$a}},hexFromSig(o){const a=Su=>Number.parseInt(Su[0],16)&8?"00"+Su:Su,c=Su=>{const $u=Su.toString(16);return $u.length&1?`0${$u}`:$u},d=a(c(o.s)),tt=a(c(o.r)),nt=d.length/2,$a=tt.length/2,Ws=c(nt),gu=c($a);return`30${c($a+nt+4)}02${gu}${tt}02${Ws}${d}`}},_0n$b=BigInt(0),_1n$c=BigInt(1),_2n$8=BigInt(2),_3n$3=BigInt(3),_4n$2=BigInt(4);function weierstrassPoints$1(o){const a=validatePointOpts$1(o),{Fp:c}=a,d=a.toBytes||((p0,y0,A0)=>{const $0=y0.toAffine();return concatBytes$3(Uint8Array.from([4]),c.toBytes($0.x),c.toBytes($0.y))}),tt=a.fromBytes||(p0=>{const y0=p0.subarray(1),A0=c.fromBytes(y0.subarray(0,c.BYTES)),$0=c.fromBytes(y0.subarray(c.BYTES,2*c.BYTES));return{x:A0,y:$0}});function nt(p0){const{a:y0,b:A0}=a,$0=c.sqr(p0),O0=c.mul($0,p0);return c.add(c.add(O0,c.mul(p0,y0)),A0)}if(!c.eql(c.sqr(a.Gy),nt(a.Gx)))throw new Error("bad generator point: equation left != right");function $a(p0){return typeof p0=="bigint"&&_0n$bc.eql(L0,c.ZERO);return O0(A0)&&O0($0)?Iu.ZERO:new Iu(A0,$0,c.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(y0){const A0=c.invertBatch(y0.map($0=>$0.pz));return y0.map(($0,O0)=>$0.toAffine(A0[O0])).map(Iu.fromAffine)}static fromHex(y0){const A0=Iu.fromAffine(tt(ensureBytes$3("pointHex",y0)));return A0.assertValidity(),A0}static fromPrivateKey(y0){return Iu.BASE.multiply(gu(y0))}_setWindowSize(y0){this._WINDOW_SIZE=y0,Su.delete(this)}assertValidity(){if(this.is0()){if(a.allowInfinityPoint&&!c.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:y0,y:A0}=this.toAffine();if(!c.isValid(y0)||!c.isValid(A0))throw new Error("bad point: x or y not FE");const $0=c.sqr(A0),O0=nt(y0);if(!c.eql($0,O0))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:y0}=this.toAffine();if(c.isOdd)return!c.isOdd(y0);throw new Error("Field doesn't support isOdd")}equals(y0){$u(y0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:V0,pz:F0}=y0,u1=c.eql(c.mul(A0,F0),c.mul(L0,O0)),g1=c.eql(c.mul($0,F0),c.mul(V0,O0));return u1&&g1}negate(){return new Iu(this.px,c.neg(this.py),this.pz)}double(){const{a:y0,b:A0}=a,$0=c.mul(A0,_3n$3),{px:O0,py:L0,pz:V0}=this;let F0=c.ZERO,u1=c.ZERO,g1=c.ZERO,E1=c.mul(O0,O0),B1=c.mul(L0,L0),lv=c.mul(V0,V0),j1=c.mul(O0,L0);return j1=c.add(j1,j1),g1=c.mul(O0,V0),g1=c.add(g1,g1),F0=c.mul(y0,g1),u1=c.mul($0,lv),u1=c.add(F0,u1),F0=c.sub(B1,u1),u1=c.add(B1,u1),u1=c.mul(F0,u1),F0=c.mul(j1,F0),g1=c.mul($0,g1),lv=c.mul(y0,lv),j1=c.sub(E1,lv),j1=c.mul(y0,j1),j1=c.add(j1,g1),g1=c.add(E1,E1),E1=c.add(g1,E1),E1=c.add(E1,lv),E1=c.mul(E1,j1),u1=c.add(u1,E1),lv=c.mul(L0,V0),lv=c.add(lv,lv),E1=c.mul(lv,j1),F0=c.sub(F0,E1),g1=c.mul(lv,B1),g1=c.add(g1,g1),g1=c.add(g1,g1),new Iu(F0,u1,g1)}add(y0){$u(y0);const{px:A0,py:$0,pz:O0}=this,{px:L0,py:V0,pz:F0}=y0;let u1=c.ZERO,g1=c.ZERO,E1=c.ZERO;const B1=a.a,lv=c.mul(a.b,_3n$3);let j1=c.mul(A0,L0),r1=c.mul($0,V0),t1=c.mul(O0,F0),D0=c.add(A0,$0),Z0=c.add(L0,V0);D0=c.mul(D0,Z0),Z0=c.add(j1,r1),D0=c.sub(D0,Z0),Z0=c.add(A0,O0);let f1=c.add(L0,F0);return Z0=c.mul(Z0,f1),f1=c.add(j1,t1),Z0=c.sub(Z0,f1),f1=c.add($0,O0),u1=c.add(V0,F0),f1=c.mul(f1,u1),u1=c.add(r1,t1),f1=c.sub(f1,u1),E1=c.mul(B1,Z0),u1=c.mul(lv,t1),E1=c.add(u1,E1),u1=c.sub(r1,E1),E1=c.add(r1,E1),g1=c.mul(u1,E1),r1=c.add(j1,j1),r1=c.add(r1,j1),t1=c.mul(B1,t1),Z0=c.mul(lv,Z0),r1=c.add(r1,t1),t1=c.sub(j1,t1),t1=c.mul(B1,t1),Z0=c.add(Z0,t1),j1=c.mul(r1,Z0),g1=c.add(g1,j1),j1=c.mul(f1,Z0),u1=c.mul(D0,u1),u1=c.sub(u1,j1),j1=c.mul(D0,r1),E1=c.mul(f1,E1),E1=c.add(E1,j1),new Iu(u1,g1,E1)}subtract(y0){return this.add(y0.negate())}is0(){return this.equals(Iu.ZERO)}wNAF(y0){return r0.wNAFCached(this,Su,y0,A0=>{const $0=c.invertBatch(A0.map(O0=>O0.pz));return A0.map((O0,L0)=>O0.toAffine($0[L0])).map(Iu.fromAffine)})}multiplyUnsafe(y0){const A0=Iu.ZERO;if(y0===_0n$b)return A0;if(Ws(y0),y0===_1n$c)return this;const{endo:$0}=a;if(!$0)return r0.unsafeLadder(this,y0);let{k1neg:O0,k1:L0,k2neg:V0,k2:F0}=$0.splitScalar(y0),u1=A0,g1=A0,E1=this;for(;L0>_0n$b||F0>_0n$b;)L0&_1n$c&&(u1=u1.add(E1)),F0&_1n$c&&(g1=g1.add(E1)),E1=E1.double(),L0>>=_1n$c,F0>>=_1n$c;return O0&&(u1=u1.negate()),V0&&(g1=g1.negate()),g1=new Iu(c.mul(g1.px,$0.beta),g1.py,g1.pz),u1.add(g1)}multiply(y0){Ws(y0);let A0=y0,$0,O0;const{endo:L0}=a;if(L0){const{k1neg:V0,k1:F0,k2neg:u1,k2:g1}=L0.splitScalar(A0);let{p:E1,f:B1}=this.wNAF(F0),{p:lv,f:j1}=this.wNAF(g1);E1=r0.constTimeNegate(V0,E1),lv=r0.constTimeNegate(u1,lv),lv=new Iu(c.mul(lv.px,L0.beta),lv.py,lv.pz),$0=E1.add(lv),O0=B1.add(j1)}else{const{p:V0,f:F0}=this.wNAF(A0);$0=V0,O0=F0}return Iu.normalizeZ([$0,O0])[0]}multiplyAndAddUnsafe(y0,A0,$0){const O0=Iu.BASE,L0=(F0,u1)=>u1===_0n$b||u1===_1n$c||!F0.equals(O0)?F0.multiplyUnsafe(u1):F0.multiply(u1),V0=L0(this,A0).add(L0(y0,$0));return V0.is0()?void 0:V0}toAffine(y0){const{px:A0,py:$0,pz:O0}=this,L0=this.is0();y0==null&&(y0=L0?c.ONE:c.inv(O0));const V0=c.mul(A0,y0),F0=c.mul($0,y0),u1=c.mul(O0,y0);if(L0)return{x:c.ZERO,y:c.ZERO};if(!c.eql(u1,c.ONE))throw new Error("invZ was invalid");return{x:V0,y:F0}}isTorsionFree(){const{h:y0,isTorsionFree:A0}=a;if(y0===_1n$c)return!0;if(A0)return A0(Iu,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:y0,clearCofactor:A0}=a;return y0===_1n$c?this:A0?A0(Iu,this):this.multiplyUnsafe(a.h)}toRawBytes(y0=!0){return this.assertValidity(),d(Iu,this,y0)}toHex(y0=!0){return bytesToHex$2(this.toRawBytes(y0))}}Iu.BASE=new Iu(a.Gx,a.Gy,c.ONE),Iu.ZERO=new Iu(c.ZERO,c.ONE,c.ZERO);const Xu=a.nBitLength,r0=wNAF$2(Iu,a.endo?Math.ceil(Xu/2):Xu);return{CURVE:a,ProjectivePoint:Iu,normPrivateKeyToScalar:gu,weierstrassEquation:nt,isWithinCurveOrder:$a}}function validateOpts$5(o){const a=validateBasic$2(o);return validateObject$2(a,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...a})}function weierstrass$1(o){const a=validateOpts$5(o),{Fp:c,n:d}=a,tt=c.BYTES+1,nt=2*c.BYTES+1;function $a(Z0){return _0n$bbytesToHex$2(numberToBytesBE$2(Z0,a.nByteLength));function p0(Z0){const f1=d>>_1n$c;return Z0>f1}function y0(Z0){return p0(Z0)?Ws(-Z0):Z0}const A0=(Z0,f1,w1)=>bytesToNumberBE$2(Z0.slice(f1,w1));class $0{constructor(f1,w1,m1){this.r=f1,this.s=w1,this.recovery=m1,this.assertValidity()}static fromCompact(f1){const w1=a.nByteLength;return f1=ensureBytes$3("compactSignature",f1,w1*2),new $0(A0(f1,0,w1),A0(f1,w1,2*w1))}static fromDER(f1){const{r:w1,s:m1}=DER$1.toSig(ensureBytes$3("DER",f1));return new $0(w1,m1)}assertValidity(){if(!Xu(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!Xu(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(f1){return new $0(this.r,this.s,f1)}recoverPublicKey(f1){const{r:w1,s:m1,recovery:c1}=this,G0=g1(ensureBytes$3("msgHash",f1));if(c1==null||![0,1,2,3].includes(c1))throw new Error("recovery id invalid");const o1=c1===2||c1===3?w1+a.n:w1;if(o1>=c.ORDER)throw new Error("recovery id 2 or 3 invalid");const d1=c1&1?"03":"02",R1=Su.fromHex(d1+r0(o1)),O1=gu(o1),Q1=Ws(-G0*O1),rv=Ws(m1*O1),D1=Su.BASE.multiplyAndAddUnsafe(R1,Q1,rv);if(!D1)throw new Error("point at infinify");return D1.assertValidity(),D1}hasHighS(){return p0(this.s)}normalizeS(){return this.hasHighS()?new $0(this.r,Ws(-this.s),this.recovery):this}toDERRawBytes(){return hexToBytes$3(this.toDERHex())}toDERHex(){return DER$1.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return hexToBytes$3(this.toCompactHex())}toCompactHex(){return r0(this.r)+r0(this.s)}}const O0={isValidPrivateKey(Z0){try{return $u(Z0),!0}catch{return!1}},normPrivateKeyToScalar:$u,randomPrivateKey:()=>{const Z0=getMinHashLength$2(a.n);return mapHashToField$2(a.randomBytes(Z0),a.n)},precompute(Z0=8,f1=Su.BASE){return f1._setWindowSize(Z0),f1.multiply(BigInt(3)),f1}};function L0(Z0,f1=!0){return Su.fromPrivateKey(Z0).toRawBytes(f1)}function V0(Z0){const f1=isBytes$6(Z0),w1=typeof Z0=="string",m1=(f1||w1)&&Z0.length;return f1?m1===tt||m1===nt:w1?m1===2*tt||m1===2*nt:Z0 instanceof Su}function F0(Z0,f1,w1=!0){if(V0(Z0))throw new Error("first arg must be private key");if(!V0(f1))throw new Error("second arg must be public key");return Su.fromHex(f1).multiply($u(Z0)).toRawBytes(w1)}const u1=a.bits2int||function(Z0){const f1=bytesToNumberBE$2(Z0),w1=Z0.length*8-a.nBitLength;return w1>0?f1>>BigInt(w1):f1},g1=a.bits2int_modN||function(Z0){return Ws(u1(Z0))},E1=bitMask$2(a.nBitLength);function B1(Z0){if(typeof Z0!="bigint")throw new Error("bigint expected");if(!(_0n$b<=Z0&&Z0Mv in w1))throw new Error("sign() legacy options not supported");const{hash:m1,randomBytes:c1}=a;let{lowS:G0,prehash:o1,extraEntropy:d1}=w1;G0==null&&(G0=!0),Z0=ensureBytes$3("msgHash",Z0),o1&&(Z0=ensureBytes$3("prehashed msgHash",m1(Z0)));const R1=g1(Z0),O1=$u(f1),Q1=[B1(O1),B1(R1)];if(d1!=null&&d1!==!1){const Mv=d1===!0?c1(c.BYTES):d1;Q1.push(ensureBytes$3("extraEntropy",Mv))}const rv=concatBytes$3(...Q1),D1=R1;function ev(Mv){const Zv=u1(Mv);if(!Xu(Zv))return;const fv=gu(Zv),cv=Su.BASE.multiply(Zv).toAffine(),ly=Ws(cv.x);if(ly===_0n$b)return;const Cy=Ws(fv*Ws(D1+ly*O1));if(Cy===_0n$b)return;let Ly=(cv.x===ly?0:2)|Number(cv.y&_1n$c),Hy=Cy;return G0&&p0(Cy)&&(Hy=y0(Cy),Ly^=1),new $0(ly,Hy,Ly)}return{seed:rv,k2sig:ev}}const j1={lowS:a.lowS,prehash:!1},r1={lowS:a.lowS,prehash:!1};function t1(Z0,f1,w1=j1){const{seed:m1,k2sig:c1}=lv(Z0,f1,w1),G0=a;return createHmacDrbg$2(G0.hash.outputLen,G0.nByteLength,G0.hmac)(m1,c1)}Su.BASE._setWindowSize(8);function D0(Z0,f1,w1,m1=r1){var cv;const c1=Z0;if(f1=ensureBytes$3("msgHash",f1),w1=ensureBytes$3("publicKey",w1),"strict"in m1)throw new Error("options.strict was renamed to lowS");const{lowS:G0,prehash:o1}=m1;let d1,R1;try{if(typeof c1=="string"||isBytes$6(c1))try{d1=$0.fromDER(c1)}catch(ly){if(!(ly instanceof DER$1.Err))throw ly;d1=$0.fromCompact(c1)}else if(typeof c1=="object"&&typeof c1.r=="bigint"&&typeof c1.s=="bigint"){const{r:ly,s:Cy}=c1;d1=new $0(ly,Cy)}else throw new Error("PARSE");R1=Su.fromHex(w1)}catch(ly){if(ly.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(G0&&d1.hasHighS())return!1;o1&&(f1=a.hash(f1));const{r:O1,s:Q1}=d1,rv=g1(f1),D1=gu(Q1),ev=Ws(rv*D1),Mv=Ws(O1*D1),Zv=(cv=Su.BASE.multiplyAndAddUnsafe(R1,ev,Mv))==null?void 0:cv.toAffine();return Zv?Ws(Zv.x)===O1:!1}return{CURVE:a,getPublicKey:L0,getSharedSecret:F0,sign:t1,verify:D0,ProjectivePoint:Su,Signature:$0,utils:O0}}function SWUFpSqrtRatio(o,a){const c=o.ORDER;let d=_0n$b;for(let p0=c-_1n$c;p0%_2n$8===_0n$b;p0/=_2n$8)d+=_1n$c;const tt=d,nt=_2n$8<{let A0=Iu,$0=o.pow(y0,Su),O0=o.sqr($0);O0=o.mul(O0,y0);let L0=o.mul(p0,O0);L0=o.pow(L0,gu),L0=o.mul(L0,$0),$0=o.mul(L0,y0),O0=o.mul(L0,p0);let V0=o.mul(O0,$0);L0=o.pow(V0,$u);let F0=o.eql(L0,o.ONE);$0=o.mul(O0,Xu),L0=o.mul(V0,A0),O0=o.cmov($0,O0,F0),V0=o.cmov(L0,V0,F0);for(let u1=tt;u1>_1n$c;u1--){let g1=u1-_2n$8;g1=_2n$8<{let O0=o.sqr($0);const L0=o.mul(A0,$0);O0=o.mul(O0,L0);let V0=o.pow(O0,p0);V0=o.mul(V0,L0);const F0=o.mul(V0,y0),u1=o.mul(o.sqr(V0),$0),g1=o.eql(u1,A0);let E1=o.cmov(F0,V0,g1);return{isValid:g1,value:E1}}}return r0}function mapToCurveSimpleSWU(o,a){if(validateField$2(o),!o.isValid(a.A)||!o.isValid(a.B)||!o.isValid(a.Z))throw new Error("mapToCurveSimpleSWU: invalid opts");const c=SWUFpSqrtRatio(o,a.Z);if(!o.isOdd)throw new Error("Fp.isOdd is not implemented!");return d=>{let tt,nt,$a,Ws,gu,Su,$u,Iu;tt=o.sqr(d),tt=o.mul(tt,a.Z),nt=o.sqr(tt),nt=o.add(nt,tt),$a=o.add(nt,o.ONE),$a=o.mul($a,a.B),Ws=o.cmov(a.Z,o.neg(nt),!o.eql(nt,o.ZERO)),Ws=o.mul(Ws,a.A),nt=o.sqr($a),Su=o.sqr(Ws),gu=o.mul(Su,a.A),nt=o.add(nt,gu),nt=o.mul(nt,$a),Su=o.mul(Su,Ws),gu=o.mul(Su,a.B),nt=o.add(nt,gu),$u=o.mul(tt,$a);const{isValid:Xu,value:r0}=c(nt,Su);Iu=o.mul(tt,d),Iu=o.mul(Iu,r0),$u=o.cmov($u,$a,Xu),Iu=o.cmov(Iu,r0,Xu);const p0=o.isOdd(d)===o.isOdd(Iu);return Iu=o.cmov(o.neg(Iu),Iu,p0),$u=o.div($u,Ws),{x:$u,y:Iu}}}const weierstrass$2=Object.freeze(Object.defineProperty({__proto__:null,DER:DER$1,SWUFpSqrtRatio,mapToCurveSimpleSWU,weierstrass:weierstrass$1,weierstrassPoints:weierstrassPoints$1},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function getHash$1(o){return{hash:o,hmac:(a,...c)=>hmac$2(o,a,concatBytes$4(...c)),randomBytes:randomBytes$5}}function createCurve(o,a){const c=d=>weierstrass$1({...o,...getHash$1(d)});return Object.freeze({...c(a),create:c})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1P=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),secp256k1N=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),_1n$b=BigInt(1),_2n$7=BigInt(2),divNearest=(o,a)=>(o+a/_2n$7)/a;function sqrtMod(o){const a=secp256k1P,c=BigInt(3),d=BigInt(6),tt=BigInt(11),nt=BigInt(22),$a=BigInt(23),Ws=BigInt(44),gu=BigInt(88),Su=o*o*o%a,$u=Su*Su*o%a,Iu=pow2$1($u,c,a)*$u%a,Xu=pow2$1(Iu,c,a)*$u%a,r0=pow2$1(Xu,_2n$7,a)*Su%a,p0=pow2$1(r0,tt,a)*r0%a,y0=pow2$1(p0,nt,a)*p0%a,A0=pow2$1(y0,Ws,a)*y0%a,$0=pow2$1(A0,gu,a)*A0%a,O0=pow2$1($0,Ws,a)*y0%a,L0=pow2$1(O0,c,a)*$u%a,V0=pow2$1(L0,$a,a)*p0%a,F0=pow2$1(V0,d,a)*Su%a,u1=pow2$1(F0,_2n$7,a);if(!Fp$1.eql(Fp$1.sqr(u1),o))throw new Error("Cannot find square root");return u1}const Fp$1=Field$2(secp256k1P,void 0,void 0,{sqrt:sqrtMod}),secp256k1$1=createCurve({a:BigInt(0),b:BigInt(7),Fp:Fp$1,n:secp256k1N,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:o=>{const a=secp256k1N,c=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),d=-_1n$b*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),tt=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),nt=c,$a=BigInt("0x100000000000000000000000000000000"),Ws=divNearest(nt*o,a),gu=divNearest(-d*o,a);let Su=mod$2(o-Ws*c-gu*tt,a),$u=mod$2(-Ws*d-gu*nt,a);const Iu=Su>$a,Xu=$u>$a;if(Iu&&(Su=a-Su),Xu&&($u=a-$u),Su>$a||$u>$a)throw new Error("splitScalar: Endomorphism failed, k="+o);return{k1neg:Iu,k1:Su,k2neg:Xu,k2:$u}}}},sha256$5);BigInt(0);secp256k1$1.ProjectivePoint;function generateKey(){return secp256k1$1.utils.randomPrivateKey()}function hashAndSign(o,a){const c=sha256$6.digest(a instanceof Uint8Array?a:a.subarray());if(isPromise(c))return c.then(({digest:d})=>secp256k1$1.sign(d,o).toDERRawBytes()).catch(d=>{throw new CodeError(String(d),"ERR_INVALID_INPUT")});try{return secp256k1$1.sign(c.digest,o).toDERRawBytes()}catch(d){throw new CodeError(String(d),"ERR_INVALID_INPUT")}}function hashAndVerify(o,a,c){const d=sha256$6.digest(c instanceof Uint8Array?c:c.subarray());if(isPromise(d))return d.then(({digest:tt})=>secp256k1$1.verify(a,tt,o)).catch(tt=>{throw new CodeError(String(tt),"ERR_INVALID_INPUT")});try{return secp256k1$1.verify(a,d.digest,o)}catch(tt){throw new CodeError(String(tt),"ERR_INVALID_INPUT")}}function compressPublicKey(o){return secp256k1$1.ProjectivePoint.fromHex(o).toRawBytes(!0)}function validatePrivateKey(o){try{secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}function validatePublicKey(o){try{secp256k1$1.ProjectivePoint.fromHex(o)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PUBLIC_KEY")}}function computePublicKey(o){try{return secp256k1$1.getPublicKey(o,!0)}catch(a){throw new CodeError(String(a),"ERR_INVALID_PRIVATE_KEY")}}class Secp256k1PublicKey{constructor(a){aw(this,"_key");validatePublicKey(a),this._key=a}verify(a,c){return hashAndVerify(this._key,c,a)}marshal(){return compressPublicKey(this._key)}get bytes(){return PublicKey$2.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}async hash(){const a=sha256$6.digest(this.bytes);let c;return isPromise(a)?{bytes:c}=await a:c=a.bytes,c}}class Secp256k1PrivateKey{constructor(a,c){aw(this,"_key");aw(this,"_publicKey");this._key=a,this._publicKey=c??computePublicKey(a),validatePrivateKey(this._key),validatePublicKey(this._publicKey)}sign(a){return hashAndSign(this._key,a)}get public(){return new Secp256k1PublicKey(this._publicKey)}marshal(){return this._key}get bytes(){return PrivateKey.encode({Type:KeyType.Secp256k1,Data:this.marshal()}).subarray()}equals(a){return equals(this.bytes,a.bytes)}hash(){const a=sha256$6.digest(this.bytes);return isPromise(a)?a.then(({bytes:c})=>c):a.bytes}async id(){const a=await this.public.hash();return toString$b(a,"base58btc")}async export(a,c="libp2p-key"){if(c==="libp2p-key")return exporter(this.bytes,a);throw new CodeError(`export format '${c}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}function unmarshalSecp256k1PrivateKey(o){return new Secp256k1PrivateKey(o)}function unmarshalSecp256k1PublicKey(o){return new Secp256k1PublicKey(o)}async function generateKeyPair$1(){const o=generateKey();return new Secp256k1PrivateKey(o)}const Secp256k1=Object.freeze(Object.defineProperty({__proto__:null,Secp256k1PrivateKey,Secp256k1PublicKey,generateKeyPair:generateKeyPair$1,unmarshalSecp256k1PrivateKey,unmarshalSecp256k1PublicKey},Symbol.toStringTag,{value:"Module"})),supportedKeys={rsa:RSA,ed25519:Ed25519,secp256k1:Secp256k1};function unsupportedKey(o){const a=Object.keys(supportedKeys).join(" / ");return new CodeError(`invalid or unsupported key type ${o}. Must be ${a}`,"ERR_UNSUPPORTED_KEY_TYPE")}function typeToKey(o){if(o=o.toLowerCase(),o==="rsa"||o==="ed25519"||o==="secp256k1")return supportedKeys[o];throw unsupportedKey(o)}async function generateKeyPair(o,a){return typeToKey(o).generateKeyPair(2048)}async function unmarshalPrivateKey(o){const a=PrivateKey.decode(o),c=a.Data??new Uint8Array;switch(a.Type){case KeyType.RSA:return supportedKeys.rsa.unmarshalRsaPrivateKey(c);case KeyType.Ed25519:return supportedKeys.ed25519.unmarshalEd25519PrivateKey(c);case KeyType.Secp256k1:return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(c);default:throw unsupportedKey(a.Type??"RSA")}}function base$4(o){if(o.length>=255)throw new TypeError("Alphabet too long");for(var a=new Uint8Array(256),c=0;c>>0,L0=new Uint8Array(O0);A0!==$0;){for(var V0=r0[A0],F0=0,u1=O0-1;(V0!==0||F0>>0,L0[u1]=V0%$a>>>0,V0=V0/$a>>>0;if(V0!==0)throw new Error("Non-zero carry");y0=F0,A0++}for(var g1=O0-y0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=Ws.repeat(p0);g1>>0,O0=new Uint8Array($0);r0[p0];){var L0=a[r0.charCodeAt(p0)];if(L0===255)return;for(var V0=0,F0=$0-1;(L0!==0||V0>>0,O0[F0]=L0%256>>>0,L0=L0/256>>>0;if(L0!==0)throw new Error("Non-zero carry");A0=V0,p0++}for(var u1=$0-A0;u1!==$0&&O0[u1]===0;)u1++;for(var g1=new Uint8Array(y0+($0-u1)),E1=y0;u1!==$0;)g1[E1++]=O0[u1++];return g1}function Xu(r0){var p0=Iu(r0);if(p0)return p0;throw new Error("Non-base"+$a+" character")}return{encode:$u,decodeUnsafe:Iu,decode:Xu}}var src$1=base$4;const basex$2=src$1,ALPHABET$2="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";var bs58$2=basex$2(ALPHABET$2);const bs58$3=getDefaultExportFromCjs$1(bs58$2),CLIENT_KEY$1="client-key",AUTHORIZED$1="node-authorized",CALLBACK_URL="callback-url",APPLICATION_ID="application-id",setStorageCallbackUrl=o=>{localStorage.setItem(CALLBACK_URL,JSON.stringify(o))},getStorageCallbackUrl=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CALLBACK_URL);return o?JSON.parse(o):null}return null},setStorageApplicationId=o=>{localStorage.setItem(APPLICATION_ID,JSON.stringify(o))},getStorageApplicationId=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(APPLICATION_ID);return o?JSON.parse(o):null}return null},setStorageClientKey=o=>{localStorage.setItem(CLIENT_KEY$1,JSON.stringify(o))},getStorageClientKey=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(CLIENT_KEY$1);if(!o)return null;let a=JSON.parse(o);if(a)return a}return null},setStorageNodeAuthorized=()=>{localStorage.setItem(AUTHORIZED$1,JSON.stringify(!0))},getStorageNodeAuthorized=()=>{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(AUTHORIZED$1);if(o!==null){let a=JSON.parse(o);if(a)return a}else return null}return null};async function createAuthHeader(o,a){const c=await getPrivateKey();if(!c)return null;const tt=new TextEncoder().encode(o),nt=bs58$3.encode(c.public.bytes),$a=await crypto.subtle.digest("SHA-256",tt),Ws=new Uint8Array($a),gu=await c.sign(Ws),Su=bs58$3.encode(gu),$u=bs58$3.encode(Ws);return{wallet_type:JSON.stringify(WalletType.NEAR({networkId:a})),signing_key:nt,signature:Su,challenge:$u}}async function getPrivateKey(){try{const o=getStorageClientKey();return o?await unmarshalPrivateKey(bs58$3.decode(o.privateKey)):null}catch(o){return console.error("Error extracting private key:",o),null}}const t$6=translations.nodeDataSource;var Network=(o=>(o.NEAR="NEAR",o.ETH="ETH",o.BNB="BNB",o.ARB="ARB",o.ZK="ZK",o.STARKNET="STARKNET",o.ICP="ICP",o))(Network||{}),WalletType;(o=>{function a({networkId:$a="mainnet"}){return{type:"NEAR",networkId:$a}}o.NEAR=a;function c({chainId:$a=1}){return{type:"ETH",chainId:$a}}o.ETH=c;function d({walletName:$a="MS"}){return{type:"STARKNET",walletName:$a}}o.STARKNET=d;const tt="rdmx6-jaaaa-aaaaa-aaadq-cai";function nt({canisterId:$a=tt,walletName:Ws="II"}){return{type:"ICP",canisterId:$a,walletName:Ws}}o.ICP=nt})(WalletType||(WalletType={}));class NodeDataSource{constructor(a){aw(this,"client");this.client=a}async getInstalledApplications(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications`,a??{})}catch(a){return console.error("Error fetching installed applications:",a),{error:{code:500,message:"Failed to fetch installed applications."}}}}async getInstalledApplicationDetails(a){try{const c=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/applications/${a}`,c??{})}catch(c){return console.error("Error fetching installed application:",c),{error:{code:500,message:"Failed to fetch installed application."}}}}async getContexts(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts`,a??{})}catch(a){return console.error("Error fetching contexts:",a),{error:{code:500,message:"Failed to fetch context data."}}}}async getContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context data."}}}}async getContextClientKeys(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/client-keys`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context client keys."}}}}async getContextUsers(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/users`,c??{})}catch(c){return console.error("Error fetching context:",c),{error:{code:500,message:"Failed to fetch context users."}}}}async getContextStorageUsage(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/storage`,c??{})}catch(c){return console.error("Error fetching context storage usage:",c),{error:{code:500,message:"Failed to fetch context storage usage."}}}}async deleteContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.delete(`${getAppEndpointKey()}/admin-api/contexts/${a}`,c??{})}catch(c){return console.error("Error deleting context:",c),{error:{code:500,message:"Failed to delete context."}}}}async createContexts(a,c){try{const d=await createAuthHeader(JSON.stringify({applicationId:a,initArguments:c}),getNearEnvironment()),nt=new TextEncoder().encode(JSON.stringify(c)),$a=Array.from(nt);return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts`,{applicationId:a,initializationParams:$a},d??{})}catch(d){return console.error("Error starting contexts:",d),{error:{code:500,message:"Failed to start context."}}}}async getDidList(){try{const a=await createAuthHeader(getAppEndpointKey(),getNearEnvironment());return await this.client.get(`${getAppEndpointKey()}/admin-api/did`,a??{})}catch(a){return console.error("Error fetching root keys:",a),{error:{code:500,message:"Failed to fetch root keys."}}}}async health(a){return await this.client.get(`${a.url}/admin-api/health`)}async installApplication(a,c,d,tt){try{const nt=await createAuthHeader(JSON.stringify({selectedPackageId:a,selectedVersion:c,hash:tt}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/install-application`,{url:d,version:c,metadata:createAppMetadata(a)},nt??{})}catch(nt){return console.error("Error installing application:",nt),{error:{code:500,message:"Failed to install application."}}}}async uninstallApplication(a){try{const c=await createAuthHeader(JSON.stringify({applicationId:a}),getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/uninstall-application`,{applicationId:a},c??{})}catch(c){return console.error("Error uninstalling application:",c),{error:{code:500,message:"Failed to uninstall application."}}}}async joinContext(a){try{const c=await createAuthHeader(a,getNearEnvironment());return await this.client.post(`${getAppEndpointKey()}/admin-api/contexts/${a}/join`,{},c??{})}catch(c){return console.error(`${t$6.joinContextErrorTitle}: ${c}`),{error:{code:500,message:t$6.joinContextErrorMessage}}}}async login(a){return await this.client.post(`${getAppEndpointKey()}/admin-api/add-client-key`,{...a})}async requestChallenge(){return await this.client.post(`${getAppEndpointKey()}/admin-api/request-challenge`,{})}async addRootKey(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.post(`${getAppEndpointKey()}/admin-api/root-key`,{...a},c):{error:{code:401,message:"Unauthorized"}}}async getContextIdentity(a){const c=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return c?await this.client.get(`${getAppEndpointKey()}/admin-api/contexts/${a}/identities`,c):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}async createAccessToken(a,c){const d=await createAuthHeader(JSON.stringify(a),getNearEnvironment());return d?await this.client.post(`${getAppEndpointKey()}/admin-api/generate-jwt-token`,{contextId:a,executorPublicKey:c},d):{error:{code:401,message:t$6.unauthorizedErrorMessage}}}}class ApiClient{constructor(a){aw(this,"nodeApi");this.nodeApi=new NodeDataSource(a)}node(){return this.nodeApi}}const apiClient=o=>{const a=new AxiosHttpClient(axios,o);return new ApiClient(a)},APP_URL="app-url",AUTHORIZED="node-authorized",CLIENT_KEY="client-key",NODE_URL="node-url",clearStorage=()=>{localStorage.removeItem(APP_URL),localStorage.removeItem(AUTHORIZED),localStorage.removeItem(CLIENT_KEY)},getAppEndpointKey=()=>{try{if(typeof window<"u"&&window.localStorage){let o=localStorage.getItem(APP_URL);if(o){let a=JSON.parse(o);if(a&&a.length>0)return a}}return null}catch{return null}},setAppEndpointKey=o=>{localStorage.setItem(APP_URL,JSON.stringify(o))},getClientKey=()=>localStorage.getItem(CLIENT_KEY)??"",isNodeAuthorized=()=>{const o=localStorage.getItem(AUTHORIZED);return o?JSON.parse(o):!1},setNodeUrlFromQuery=async o=>{const c=new URLSearchParams(window.location.search).get(NODE_URL);if(c&&await verifyNodeUrl(c,o)){setAppEndpointKey(c);const d=`${window.location.pathname}auth`;window.location.href=d}else if(c)window.alert("Node URL is not valid or not reachable. Please try again.");else return},verifyNodeUrl=async(o,a)=>{try{return new URL(o),!!(await apiClient(a).node().health({url:o})).data}catch{return!1}};var classnames={exports:{}};/*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(o){(function(){var a={}.hasOwnProperty;function c(){for(var nt="",$a=0;$a{a.current=o},[o]),a}function useEventCallback(o){const a=useCommittedRef(o);return reactExports.useCallback(function(...c){return a.current&&a.current(...c)},[a])}const toFnRef=o=>!o||typeof o=="function"?o:a=>{o.current=a};function mergeRefs(o,a){const c=toFnRef(o),d=toFnRef(a);return tt=>{c&&c(tt),d&&d(tt)}}function useMergedRefs(o,a){return reactExports.useMemo(()=>mergeRefs(o,a),[o,a])}function useUpdatedRef(o){const a=reactExports.useRef(o);return a.current=o,a}function useWillUnmount(o){const a=useUpdatedRef(o);reactExports.useEffect(()=>()=>a.current(),[])}function ownerWindow(o){var a=ownerDocument(o);return a&&a.defaultView||window}function getComputedStyle$3(o,a){return ownerWindow(o).getComputedStyle(o,a)}var rUpper=/([A-Z])/g;function hyphenate(o){return o.replace(rUpper,"-$1").toLowerCase()}var msPattern=/^ms-/;function hyphenateStyleName(o){return hyphenate(o).replace(msPattern,"-ms-")}var supportedTransforms=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;function isTransform(o){return!!(o&&supportedTransforms.test(o))}function style(o,a){var c="",d="";if(typeof a=="string")return o.style.getPropertyValue(hyphenateStyleName(a))||getComputedStyle$3(o).getPropertyValue(hyphenateStyleName(a));Object.keys(a).forEach(function(tt){var nt=a[tt];!nt&&nt!==0?o.style.removeProperty(hyphenateStyleName(tt)):isTransform(tt)?d+=tt+"("+nt+") ":c+=hyphenateStyleName(tt)+": "+nt+";"}),d&&(c+="transform: "+d+";"),o.style.cssText+=";"+c}function listen(o,a,c,d){return addEventListener$1(o,a,c,d),function(){removeEventListener$1(o,a,c,d)}}function triggerEvent(o,a,c,d){if(d===void 0&&(d=!0),o){var tt=document.createEvent("HTMLEvents");tt.initEvent(a,c,d),o.dispatchEvent(tt)}}function parseDuration$1(o){var a=style(o,"transitionDuration")||"",c=a.indexOf("ms")===-1?1e3:1;return parseFloat(a)*c}function emulateTransitionEnd(o,a,c){c===void 0&&(c=5);var d=!1,tt=setTimeout(function(){d||triggerEvent(o,"transitionend",!0)},a+c),nt=listen(o,"transitionend",function(){d=!0},{once:!0});return function(){clearTimeout(tt),nt()}}function transitionEnd(o,a,c,d){c==null&&(c=parseDuration$1(o)||0);var tt=emulateTransitionEnd(o,c,d),nt=listen(o,"transitionend",a);return function(){tt(),nt()}}function activeElement(o){o===void 0&&(o=ownerDocument());try{var a=o.activeElement;return!a||!a.nodeName?null:a}catch{return o.body}}function contains$2(o,a){if(o.contains)return o.contains(a);if(o.compareDocumentPosition)return o===a||!!(o.compareDocumentPosition(a)&16)}function useMounted(){const o=reactExports.useRef(!0),a=reactExports.useRef(()=>o.current);return reactExports.useEffect(()=>(o.current=!0,()=>{o.current=!1}),[]),a.current}function usePrevious(o){const a=reactExports.useRef(null);return reactExports.useEffect(()=>{a.current=o}),a.current}const ATTRIBUTE_PREFIX="data-rr-ui-";function dataAttr(o){return`${ATTRIBUTE_PREFIX}${o}`}function getBodyScrollbarWidth(o=document){const a=o.defaultView;return Math.abs(a.innerWidth-o.documentElement.clientWidth)}const OPEN_DATA_ATTRIBUTE=dataAttr("modal-open");class ModalManager{constructor({ownerDocument:a,handleContainerOverflow:c=!0,isRTL:d=!1}={}){this.handleContainerOverflow=c,this.isRTL=d,this.modals=[],this.ownerDocument=a}getScrollbarWidth(){return getBodyScrollbarWidth(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(a){}removeModalAttributes(a){}setContainerStyle(a){const c={overflow:"hidden"},d=this.isRTL?"paddingLeft":"paddingRight",tt=this.getElement();a.style={overflow:tt.style.overflow,[d]:tt.style[d]},a.scrollBarWidth&&(c[d]=`${parseInt(style(tt,d)||"0",10)+a.scrollBarWidth}px`),tt.setAttribute(OPEN_DATA_ATTRIBUTE,""),style(tt,c)}reset(){[...this.modals].forEach(a=>this.remove(a))}removeContainerStyle(a){const c=this.getElement();c.removeAttribute(OPEN_DATA_ATTRIBUTE),Object.assign(c.style,a.style)}add(a){let c=this.modals.indexOf(a);return c!==-1||(c=this.modals.length,this.modals.push(a),this.setModalAttributes(a),c!==0)||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),c}remove(a){const c=this.modals.indexOf(a);c!==-1&&(this.modals.splice(c,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(a))}isTopModal(a){return!!this.modals.length&&this.modals[this.modals.length-1]===a}}const Context=reactExports.createContext(canUseDOM?window:void 0);Context.Provider;function useWindow(){return reactExports.useContext(Context)}const resolveContainerRef=(o,a)=>canUseDOM?o==null?(a||ownerDocument()).body:(typeof o=="function"&&(o=o()),o&&"current"in o&&(o=o.current),o&&("nodeType"in o||o.getBoundingClientRect)?o:null):null;function useWaitForDOMRef(o,a){const c=useWindow(),[d,tt]=reactExports.useState(()=>resolveContainerRef(o,c==null?void 0:c.document));if(!d){const nt=resolveContainerRef(o);nt&&tt(nt)}return reactExports.useEffect(()=>{},[a,d]),reactExports.useEffect(()=>{const nt=resolveContainerRef(o);nt!==d&&tt(nt)},[o,d]),d}const isReactNative=typeof global$u<"u"&&global$u.navigator&&global$u.navigator.product==="ReactNative",isDOM=typeof document<"u",useIsomorphicEffect=isDOM||isReactNative?reactExports.useLayoutEffect:reactExports.useEffect;function NoopTransition({children:o,in:a,onExited:c,mountOnEnter:d,unmountOnExit:tt}){const nt=reactExports.useRef(null),$a=reactExports.useRef(a),Ys=useEventCallback(c);reactExports.useEffect(()=>{a?$a.current=!0:Ys(nt.current)},[a,Ys]);const gu=useMergedRefs(nt,o.ref),xu=reactExports.cloneElement(o,{ref:gu});return a?xu:tt||!$a.current&&d?null:xu}function isEscKey(o){return o.code==="Escape"||o.keyCode===27}function getReactVersion(){const o=reactExports.version.split(".");return{major:+o[0],minor:+o[1],patch:+o[2]}}const _excluded$7=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];function _objectWithoutPropertiesLoose$8(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function useRTGTransitionProps(o){let{onEnter:a,onEntering:c,onEntered:d,onExit:tt,onExiting:nt,onExited:$a,addEndListener:Ys,children:gu}=o,xu=_objectWithoutPropertiesLoose$8(o,_excluded$7);const{major:$u}=getReactVersion(),Iu=$u>=19?gu.props.ref:gu.ref,Xu=reactExports.useRef(null),i0=useMergedRefs(Xu,typeof gu=="function"?null:Iu),p0=u1=>g1=>{u1&&Xu.current&&u1(Xu.current,g1)},w0=reactExports.useCallback(p0(a),[a]),A0=reactExports.useCallback(p0(c),[c]),$0=reactExports.useCallback(p0(d),[d]),O0=reactExports.useCallback(p0(tt),[tt]),L0=reactExports.useCallback(p0(nt),[nt]),q0=reactExports.useCallback(p0($a),[$a]),F0=reactExports.useCallback(p0(Ys),[Ys]);return Object.assign({},xu,{nodeRef:Xu},a&&{onEnter:w0},c&&{onEntering:A0},d&&{onEntered:$0},tt&&{onExit:O0},nt&&{onExiting:L0},$a&&{onExited:q0},Ys&&{addEndListener:F0},{children:typeof gu=="function"?(u1,g1)=>gu(u1,Object.assign({},g1,{ref:i0})):reactExports.cloneElement(gu,{ref:i0})})}const _excluded$6=["component"];function _objectWithoutPropertiesLoose$7(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}const RTGTransition=reactExports.forwardRef((o,a)=>{let{component:c}=o,d=_objectWithoutPropertiesLoose$7(o,_excluded$6);const tt=useRTGTransitionProps(d);return jsxRuntimeExports.jsx(c,Object.assign({ref:a},tt))});function useTransition({in:o,onTransition:a}){const c=reactExports.useRef(null),d=reactExports.useRef(!0),tt=useEventCallback(a);return useIsomorphicEffect(()=>{if(!c.current)return;let nt=!1;return tt({in:o,element:c.current,initial:d.current,isStale:()=>nt}),()=>{nt=!0}},[o,tt]),useIsomorphicEffect(()=>(d.current=!1,()=>{d.current=!0}),[]),c}function ImperativeTransition({children:o,in:a,onExited:c,onEntered:d,transition:tt}){const[nt,$a]=reactExports.useState(!a);a&&nt&&$a(!1);const Ys=useTransition({in:!!a,onTransition:xu=>{const $u=()=>{xu.isStale()||(xu.in?d==null||d(xu.element,xu.initial):($a(!0),c==null||c(xu.element)))};Promise.resolve(tt(xu)).then($u,Iu=>{throw xu.in||$a(!0),Iu})}}),gu=useMergedRefs(Ys,o.ref);return nt&&!a?null:reactExports.cloneElement(o,{ref:gu})}function renderTransition(o,a,c){return o?jsxRuntimeExports.jsx(RTGTransition,Object.assign({},c,{component:o})):a?jsxRuntimeExports.jsx(ImperativeTransition,Object.assign({},c,{transition:a})):jsxRuntimeExports.jsx(NoopTransition,Object.assign({},c))}const _excluded$5=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];function _objectWithoutPropertiesLoose$6(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}let manager;function getManager(o){return manager||(manager=new ModalManager({ownerDocument:o==null?void 0:o.document})),manager}function useModalManager(o){const a=useWindow(),c=o||getManager(a),d=reactExports.useRef({dialog:null,backdrop:null});return Object.assign(d.current,{add:()=>c.add(d.current),remove:()=>c.remove(d.current),isTopModal:()=>c.isTopModal(d.current),setDialogRef:reactExports.useCallback(tt=>{d.current.dialog=tt},[]),setBackdropRef:reactExports.useCallback(tt=>{d.current.backdrop=tt},[])})}const Modal$3=reactExports.forwardRef((o,a)=>{let{show:c=!1,role:d="dialog",className:tt,style:nt,children:$a,backdrop:Ys=!0,keyboard:gu=!0,onBackdropClick:xu,onEscapeKeyDown:$u,transition:Iu,runTransition:Xu,backdropTransition:i0,runBackdropTransition:p0,autoFocus:w0=!0,enforceFocus:A0=!0,restoreFocus:$0=!0,restoreFocusOptions:O0,renderDialog:L0,renderBackdrop:q0=Ly=>jsxRuntimeExports.jsx("div",Object.assign({},Ly)),manager:F0,container:u1,onShow:g1,onHide:E1=()=>{},onExit:B1,onExited:lv,onExiting:j1,onEnter:r1,onEntering:t1,onEntered:D0}=o,Z0=_objectWithoutPropertiesLoose$6(o,_excluded$5);const f1=useWindow(),w1=useWaitForDOMRef(u1),m1=useModalManager(F0),c1=useMounted(),G0=usePrevious(c),[o1,d1]=reactExports.useState(!c),R1=reactExports.useRef(null);reactExports.useImperativeHandle(a,()=>m1,[m1]),canUseDOM&&!G0&&c&&(R1.current=activeElement(f1==null?void 0:f1.document)),c&&o1&&d1(!1);const O1=useEventCallback(()=>{if(m1.add(),Zv.current=listen(document,"keydown",ev),Mv.current=listen(document,"focus",()=>setTimeout(rv),!0),g1&&g1(),w0){var Ly,Hy;const t2=activeElement((Ly=(Hy=m1.dialog)==null?void 0:Hy.ownerDocument)!=null?Ly:f1==null?void 0:f1.document);m1.dialog&&t2&&!contains$2(m1.dialog,t2)&&(R1.current=t2,m1.dialog.focus())}}),Q1=useEventCallback(()=>{if(m1.remove(),Zv.current==null||Zv.current(),Mv.current==null||Mv.current(),$0){var Ly;(Ly=R1.current)==null||Ly.focus==null||Ly.focus(O0),R1.current=null}});reactExports.useEffect(()=>{!c||!w1||O1()},[c,w1,O1]),reactExports.useEffect(()=>{o1&&Q1()},[o1,Q1]),useWillUnmount(()=>{Q1()});const rv=useEventCallback(()=>{if(!A0||!c1()||!m1.isTopModal())return;const Ly=activeElement(f1==null?void 0:f1.document);m1.dialog&&Ly&&!contains$2(m1.dialog,Ly)&&m1.dialog.focus()}),D1=useEventCallback(Ly=>{Ly.target===Ly.currentTarget&&(xu==null||xu(Ly),Ys===!0&&E1())}),ev=useEventCallback(Ly=>{gu&&isEscKey(Ly)&&m1.isTopModal()&&($u==null||$u(Ly),Ly.defaultPrevented||E1())}),Mv=reactExports.useRef(),Zv=reactExports.useRef(),fv=(...Ly)=>{d1(!0),lv==null||lv(...Ly)};if(!w1)return null;const cv=Object.assign({role:d,ref:m1.setDialogRef,"aria-modal":d==="dialog"?!0:void 0},Z0,{style:nt,className:tt,tabIndex:-1});let ly=L0?L0(cv):jsxRuntimeExports.jsx("div",Object.assign({},cv,{children:reactExports.cloneElement($a,{role:"document"})}));ly=renderTransition(Iu,Xu,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!c,onExit:B1,onExiting:j1,onExited:fv,onEnter:r1,onEntering:t1,onEntered:D0,children:ly});let Cy=null;return Ys&&(Cy=q0({ref:m1.setBackdropRef,onClick:D1}),Cy=renderTransition(i0,p0,{in:!!c,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:Cy})),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:ReactDOM.createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[Cy,ly]}),w1)})});Modal$3.displayName="Modal";const BaseModal=Object.assign(Modal$3,{Manager:ModalManager});function hasClass(o,a){return o.classList?o.classList.contains(a):(" "+(o.className.baseVal||o.className)+" ").indexOf(" "+a+" ")!==-1}function addClass(o,a){o.classList?o.classList.add(a):hasClass(o,a)||(typeof o.className=="string"?o.className=o.className+" "+a:o.setAttribute("class",(o.className&&o.className.baseVal||"")+" "+a))}var toArray$2=Function.prototype.bind.call(Function.prototype.call,[].slice);function qsa(o,a){return toArray$2(o.querySelectorAll(a))}function replaceClassName(o,a){return o.replace(new RegExp("(^|\\s)"+a+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}function removeClass(o,a){o.classList?o.classList.remove(a):typeof o.className=="string"?o.className=replaceClassName(o.className,a):o.setAttribute("class",replaceClassName(o.className&&o.className.baseVal||"",a))}const Selector={FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"};class BootstrapModalManager extends ModalManager{adjustAndStore(a,c,d){const tt=c.style[a];c.dataset[a]=tt,style(c,{[a]:`${parseFloat(style(c,a))+d}px`})}restore(a,c){const d=c.dataset[a];d!==void 0&&(delete c.dataset[a],style(c,{[a]:d}))}setContainerStyle(a){super.setContainerStyle(a);const c=this.getElement();if(addClass(c,"modal-open"),!a.scrollBarWidth)return;const d=this.isRTL?"paddingLeft":"paddingRight",tt=this.isRTL?"marginLeft":"marginRight";qsa(c,Selector.FIXED_CONTENT).forEach(nt=>this.adjustAndStore(d,nt,a.scrollBarWidth)),qsa(c,Selector.STICKY_CONTENT).forEach(nt=>this.adjustAndStore(tt,nt,-a.scrollBarWidth)),qsa(c,Selector.NAVBAR_TOGGLER).forEach(nt=>this.adjustAndStore(tt,nt,a.scrollBarWidth))}removeContainerStyle(a){super.removeContainerStyle(a);const c=this.getElement();removeClass(c,"modal-open");const d=this.isRTL?"paddingLeft":"paddingRight",tt=this.isRTL?"marginLeft":"marginRight";qsa(c,Selector.FIXED_CONTENT).forEach(nt=>this.restore(d,nt)),qsa(c,Selector.STICKY_CONTENT).forEach(nt=>this.restore(tt,nt)),qsa(c,Selector.NAVBAR_TOGGLER).forEach(nt=>this.restore(tt,nt))}}let sharedManager;function getSharedManager(o){return sharedManager||(sharedManager=new BootstrapModalManager(o)),sharedManager}function _objectWithoutPropertiesLoose$5(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.includes(d))continue;c[d]=o[d]}return c}function _setPrototypeOf(o,a){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,d){return c.__proto__=d,c},_setPrototypeOf(o,a)}function _inheritsLoose$1(o,a){o.prototype=Object.create(a.prototype),o.prototype.constructor=o,_setPrototypeOf(o,a)}var propTypes$1={exports:{}},ReactPropTypesSecret$1="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",ReactPropTypesSecret_1=ReactPropTypesSecret$1,ReactPropTypesSecret=ReactPropTypesSecret_1;function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction;var factoryWithThrowingShims=function(){function o(d,tt,nt,$a,Ys,gu){if(gu!==ReactPropTypesSecret){var xu=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw xu.name="Invariant Violation",xu}}o.isRequired=o;function a(){return o}var c={array:o,bigint:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,any:o,arrayOf:a,element:o,elementType:o,instanceOf:a,node:o,objectOf:a,oneOf:a,oneOfType:a,shape:a,exact:a,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return c.PropTypes=c,c};propTypes$1.exports=factoryWithThrowingShims();var propTypesExports=propTypes$1.exports;const PropTypes=getDefaultExportFromCjs$1(propTypesExports),config$2={disabled:!1},TransitionGroupContext=React.createContext(null);var forceReflow=function(a){return a.scrollTop},UNMOUNTED="unmounted",EXITED="exited",ENTERING="entering",ENTERED="entered",EXITING="exiting",Transition=function(o){_inheritsLoose$1(a,o);function a(d,tt){var nt;nt=o.call(this,d,tt)||this;var $a=tt,Ys=$a&&!$a.isMounting?d.enter:d.appear,gu;return nt.appearStatus=null,d.in?Ys?(gu=EXITED,nt.appearStatus=ENTERING):gu=ENTERED:d.unmountOnExit||d.mountOnEnter?gu=UNMOUNTED:gu=EXITED,nt.state={status:gu},nt.nextCallback=null,nt}a.getDerivedStateFromProps=function(tt,nt){var $a=tt.in;return $a&&nt.status===UNMOUNTED?{status:EXITED}:null};var c=a.prototype;return c.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},c.componentDidUpdate=function(tt){var nt=null;if(tt!==this.props){var $a=this.state.status;this.props.in?$a!==ENTERING&&$a!==ENTERED&&(nt=ENTERING):($a===ENTERING||$a===ENTERED)&&(nt=EXITING)}this.updateStatus(!1,nt)},c.componentWillUnmount=function(){this.cancelNextCallback()},c.getTimeouts=function(){var tt=this.props.timeout,nt,$a,Ys;return nt=$a=Ys=tt,tt!=null&&typeof tt!="number"&&(nt=tt.exit,$a=tt.enter,Ys=tt.appear!==void 0?tt.appear:$a),{exit:nt,enter:$a,appear:Ys}},c.updateStatus=function(tt,nt){if(tt===void 0&&(tt=!1),nt!==null)if(this.cancelNextCallback(),nt===ENTERING){if(this.props.unmountOnExit||this.props.mountOnEnter){var $a=this.props.nodeRef?this.props.nodeRef.current:ReactDOM.findDOMNode(this);$a&&forceReflow($a)}this.performEnter(tt)}else this.performExit();else this.props.unmountOnExit&&this.state.status===EXITED&&this.setState({status:UNMOUNTED})},c.performEnter=function(tt){var nt=this,$a=this.props.enter,Ys=this.context?this.context.isMounting:tt,gu=this.props.nodeRef?[Ys]:[ReactDOM.findDOMNode(this),Ys],xu=gu[0],$u=gu[1],Iu=this.getTimeouts(),Xu=Ys?Iu.appear:Iu.enter;if(!tt&&!$a||config$2.disabled){this.safeSetState({status:ENTERED},function(){nt.props.onEntered(xu)});return}this.props.onEnter(xu,$u),this.safeSetState({status:ENTERING},function(){nt.props.onEntering(xu,$u),nt.onTransitionEnd(Xu,function(){nt.safeSetState({status:ENTERED},function(){nt.props.onEntered(xu,$u)})})})},c.performExit=function(){var tt=this,nt=this.props.exit,$a=this.getTimeouts(),Ys=this.props.nodeRef?void 0:ReactDOM.findDOMNode(this);if(!nt||config$2.disabled){this.safeSetState({status:EXITED},function(){tt.props.onExited(Ys)});return}this.props.onExit(Ys),this.safeSetState({status:EXITING},function(){tt.props.onExiting(Ys),tt.onTransitionEnd($a.exit,function(){tt.safeSetState({status:EXITED},function(){tt.props.onExited(Ys)})})})},c.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},c.safeSetState=function(tt,nt){nt=this.setNextCallback(nt),this.setState(tt,nt)},c.setNextCallback=function(tt){var nt=this,$a=!0;return this.nextCallback=function(Ys){$a&&($a=!1,nt.nextCallback=null,tt(Ys))},this.nextCallback.cancel=function(){$a=!1},this.nextCallback},c.onTransitionEnd=function(tt,nt){this.setNextCallback(nt);var $a=this.props.nodeRef?this.props.nodeRef.current:ReactDOM.findDOMNode(this),Ys=tt==null&&!this.props.addEndListener;if(!$a||Ys){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var gu=this.props.nodeRef?[this.nextCallback]:[$a,this.nextCallback],xu=gu[0],$u=gu[1];this.props.addEndListener(xu,$u)}tt!=null&&setTimeout(this.nextCallback,tt)},c.render=function(){var tt=this.state.status;if(tt===UNMOUNTED)return null;var nt=this.props,$a=nt.children;nt.in,nt.mountOnEnter,nt.unmountOnExit,nt.appear,nt.enter,nt.exit,nt.timeout,nt.addEndListener,nt.onEnter,nt.onEntering,nt.onEntered,nt.onExit,nt.onExiting,nt.onExited,nt.nodeRef;var Ys=_objectWithoutPropertiesLoose$5(nt,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return React.createElement(TransitionGroupContext.Provider,{value:null},typeof $a=="function"?$a(tt,Ys):React.cloneElement(React.Children.only($a),Ys))},a}(React.Component);Transition.contextType=TransitionGroupContext;Transition.propTypes={};function noop$a(){}Transition.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:noop$a,onEntering:noop$a,onEntered:noop$a,onExit:noop$a,onExiting:noop$a,onExited:noop$a};Transition.UNMOUNTED=UNMOUNTED;Transition.EXITED=EXITED;Transition.ENTERING=ENTERING;Transition.ENTERED=ENTERED;Transition.EXITING=EXITING;function parseDuration(o,a){const c=style(o,a)||"",d=c.indexOf("ms")===-1?1e3:1;return parseFloat(c)*d}function transitionEndListener(o,a){const c=parseDuration(o,"transitionDuration"),d=parseDuration(o,"transitionDelay"),tt=transitionEnd(o,nt=>{nt.target===o&&(tt(),a(nt))},c+d)}function triggerBrowserReflow(o){o.offsetHeight}function safeFindDOMNode(o){return o&&"setState"in o?ReactDOM.findDOMNode(o):o??null}const TransitionWrapper=React.forwardRef(({onEnter:o,onEntering:a,onEntered:c,onExit:d,onExiting:tt,onExited:nt,addEndListener:$a,children:Ys,childRef:gu,...xu},$u)=>{const Iu=reactExports.useRef(null),Xu=useMergedRefs(Iu,gu),i0=u1=>{Xu(safeFindDOMNode(u1))},p0=u1=>g1=>{u1&&Iu.current&&u1(Iu.current,g1)},w0=reactExports.useCallback(p0(o),[o]),A0=reactExports.useCallback(p0(a),[a]),$0=reactExports.useCallback(p0(c),[c]),O0=reactExports.useCallback(p0(d),[d]),L0=reactExports.useCallback(p0(tt),[tt]),q0=reactExports.useCallback(p0(nt),[nt]),F0=reactExports.useCallback(p0($a),[$a]);return jsxRuntimeExports.jsx(Transition,{ref:$u,...xu,onEnter:w0,onEntered:$0,onEntering:A0,onExit:O0,onExited:q0,onExiting:L0,addEndListener:F0,nodeRef:Iu,children:typeof Ys=="function"?(u1,g1)=>Ys(u1,{...g1,ref:i0}):React.cloneElement(Ys,{ref:i0})})}),fadeStyles={[ENTERING]:"show",[ENTERED]:"show"},Fade=reactExports.forwardRef(({className:o,children:a,transitionClasses:c={},onEnter:d,...tt},nt)=>{const $a={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...tt},Ys=reactExports.useCallback((gu,xu)=>{triggerBrowserReflow(gu),d==null||d(gu,xu)},[d]);return jsxRuntimeExports.jsx(TransitionWrapper,{ref:nt,addEndListener:transitionEndListener,...$a,onEnter:Ys,childRef:a.ref,children:(gu,xu)=>reactExports.cloneElement(a,{...xu,className:y$2("fade",o,a.props.className,fadeStyles[gu],c[gu])})})});Fade.displayName="Fade";const DEFAULT_BREAKPOINTS=["xxl","xl","lg","md","sm","xs"],DEFAULT_MIN_BREAKPOINT="xs",ThemeContext=reactExports.createContext({prefixes:{},breakpoints:DEFAULT_BREAKPOINTS,minBreakpoint:DEFAULT_MIN_BREAKPOINT});function useBootstrapPrefix(o,a){const{prefixes:c}=reactExports.useContext(ThemeContext);return o||c[a]||a}function useIsRTL(){const{dir:o}=reactExports.useContext(ThemeContext);return o==="rtl"}const ModalBody=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="div",...d},tt)=>(a=useBootstrapPrefix(a,"modal-body"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));ModalBody.displayName="ModalBody";const ModalContext=reactExports.createContext({onHide(){}}),ModalDialog=reactExports.forwardRef(({bsPrefix:o,className:a,contentClassName:c,centered:d,size:tt,fullscreen:nt,children:$a,scrollable:Ys,...gu},xu)=>{o=useBootstrapPrefix(o,"modal");const $u=`${o}-dialog`,Iu=typeof nt=="string"?`${o}-fullscreen-${nt}`:`${o}-fullscreen`;return jsxRuntimeExports.jsx("div",{...gu,ref:xu,className:y$2($u,a,tt&&`${o}-${tt}`,d&&`${$u}-centered`,Ys&&`${$u}-scrollable`,nt&&Iu),children:jsxRuntimeExports.jsx("div",{className:y$2(`${o}-content`,c),children:$a})})});ModalDialog.displayName="ModalDialog";const ModalFooter=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="div",...d},tt)=>(a=useBootstrapPrefix(a,"modal-footer"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));ModalFooter.displayName="ModalFooter";const propTypes={"aria-label":PropTypes.string,onClick:PropTypes.func,variant:PropTypes.oneOf(["white"])},CloseButton$1=reactExports.forwardRef(({className:o,variant:a,"aria-label":c="Close",...d},tt)=>jsxRuntimeExports.jsx("button",{ref:tt,type:"button",className:y$2("btn-close",a&&`btn-close-${a}`,o),"aria-label":c,...d}));CloseButton$1.displayName="CloseButton";CloseButton$1.propTypes=propTypes;const AbstractModalHeader=reactExports.forwardRef(({closeLabel:o="Close",closeVariant:a,closeButton:c=!1,onHide:d,children:tt,...nt},$a)=>{const Ys=reactExports.useContext(ModalContext),gu=useEventCallback(()=>{Ys==null||Ys.onHide(),d==null||d()});return jsxRuntimeExports.jsxs("div",{ref:$a,...nt,children:[tt,c&&jsxRuntimeExports.jsx(CloseButton$1,{"aria-label":o,variant:a,onClick:gu})]})}),ModalHeader$1=reactExports.forwardRef(({bsPrefix:o,className:a,closeLabel:c="Close",closeButton:d=!1,...tt},nt)=>(o=useBootstrapPrefix(o,"modal-header"),jsxRuntimeExports.jsx(AbstractModalHeader,{ref:nt,...tt,className:y$2(a,o),closeLabel:c,closeButton:d})));ModalHeader$1.displayName="ModalHeader";const divWithClassName=o=>reactExports.forwardRef((a,c)=>jsxRuntimeExports.jsx("div",{...a,ref:c,className:y$2(a.className,o)})),DivStyledAsH4=divWithClassName("h4"),ModalTitle=reactExports.forwardRef(({className:o,bsPrefix:a,as:c=DivStyledAsH4,...d},tt)=>(a=useBootstrapPrefix(a,"modal-title"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));ModalTitle.displayName="ModalTitle";function DialogTransition(o){return jsxRuntimeExports.jsx(Fade,{...o,timeout:null})}function BackdropTransition(o){return jsxRuntimeExports.jsx(Fade,{...o,timeout:null})}const Modal$1=reactExports.forwardRef(({bsPrefix:o,className:a,style:c,dialogClassName:d,contentClassName:tt,children:nt,dialogAs:$a=ModalDialog,"data-bs-theme":Ys,"aria-labelledby":gu,"aria-describedby":xu,"aria-label":$u,show:Iu=!1,animation:Xu=!0,backdrop:i0=!0,keyboard:p0=!0,onEscapeKeyDown:w0,onShow:A0,onHide:$0,container:O0,autoFocus:L0=!0,enforceFocus:q0=!0,restoreFocus:F0=!0,restoreFocusOptions:u1,onEntered:g1,onExit:E1,onExiting:B1,onEnter:lv,onEntering:j1,onExited:r1,backdropClassName:t1,manager:D0,...Z0},f1)=>{const[w1,m1]=reactExports.useState({}),[c1,G0]=reactExports.useState(!1),o1=reactExports.useRef(!1),d1=reactExports.useRef(!1),R1=reactExports.useRef(null),[O1,Q1]=useCallbackRef(),rv=useMergedRefs(f1,Q1),D1=useEventCallback($0),ev=useIsRTL();o=useBootstrapPrefix(o,"modal");const Mv=reactExports.useMemo(()=>({onHide:D1}),[D1]);function Zv(){return D0||getSharedManager({isRTL:ev})}function fv(lw){if(!canUseDOM)return;const Lw=Zv().getScrollbarWidth()>0,zw=lw.scrollHeight>ownerDocument(lw).documentElement.clientHeight;m1({paddingRight:Lw&&!zw?scrollbarSize():void 0,paddingLeft:!Lw&&zw?scrollbarSize():void 0})}const cv=useEventCallback(()=>{O1&&fv(O1.dialog)});useWillUnmount(()=>{removeEventListener$1(window,"resize",cv),R1.current==null||R1.current()});const ly=()=>{o1.current=!0},Cy=lw=>{o1.current&&O1&&lw.target===O1.dialog&&(d1.current=!0),o1.current=!1},Ly=()=>{G0(!0),R1.current=transitionEnd(O1.dialog,()=>{G0(!1)})},Hy=lw=>{lw.target===lw.currentTarget&&Ly()},t2=lw=>{if(i0==="static"){Hy(lw);return}if(d1.current||lw.target!==lw.currentTarget){d1.current=!1;return}$0==null||$0()},C2=lw=>{p0?w0==null||w0(lw):(lw.preventDefault(),i0==="static"&&Ly())},Dy=(lw,Lw)=>{lw&&fv(lw),lv==null||lv(lw,Lw)},jw=lw=>{R1.current==null||R1.current(),E1==null||E1(lw)},pw=(lw,Lw)=>{j1==null||j1(lw,Lw),addEventListener$1(window,"resize",cv)},vw=lw=>{lw&&(lw.style.display=""),r1==null||r1(lw),removeEventListener$1(window,"resize",cv)},Hw=reactExports.useCallback(lw=>jsxRuntimeExports.jsx("div",{...lw,className:y$2(`${o}-backdrop`,t1,!Xu&&"show")}),[Xu,t1,o]),uw={...c,...w1};uw.display="block";const Nw=lw=>jsxRuntimeExports.jsx("div",{role:"dialog",...lw,style:uw,className:y$2(a,o,c1&&`${o}-static`,!Xu&&"show"),onClick:i0?t2:void 0,onMouseUp:Cy,"data-bs-theme":Ys,"aria-label":$u,"aria-labelledby":gu,"aria-describedby":xu,children:jsxRuntimeExports.jsx($a,{...Z0,onMouseDown:ly,className:d,contentClassName:tt,children:nt})});return jsxRuntimeExports.jsx(ModalContext.Provider,{value:Mv,children:jsxRuntimeExports.jsx(BaseModal,{show:Iu,ref:rv,backdrop:i0,container:O0,keyboard:!0,autoFocus:L0,enforceFocus:q0,restoreFocus:F0,restoreFocusOptions:u1,onEscapeKeyDown:C2,onShow:A0,onHide:$0,onEnter:Dy,onEntering:pw,onEntered:g1,onExit:jw,onExiting:B1,onExited:vw,manager:Zv(),transition:Xu?DialogTransition:void 0,backdropTransition:Xu?BackdropTransition:void 0,renderBackdrop:Hw,renderDialog:Nw})})});Modal$1.displayName="Modal";const Modal$2=Object.assign(Modal$1,{Body:ModalBody,Header:ModalHeader$1,Title:ModalTitle,Footer:ModalFooter,Dialog:ModalDialog,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150});var extendStatics=function(o,a){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,d){c.__proto__=d}||function(c,d){for(var tt in d)Object.prototype.hasOwnProperty.call(d,tt)&&(c[tt]=d[tt])},extendStatics(o,a)};function __extends$1(o,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");extendStatics(o,a);function c(){this.constructor=o}o.prototype=a===null?Object.create(a):(c.prototype=a.prototype,new c)}var __assign=function(){return __assign=Object.assign||function(a){for(var c,d=1,tt=arguments.length;d=o.length&&(o=void 0),{value:o&&o[d++],done:!o}}};throw new TypeError(a?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,a){var c=typeof Symbol=="function"&&o[Symbol.iterator];if(!c)return o;var d=c.call(o),tt,nt=[],$a;try{for(;(a===void 0||a-- >0)&&!(tt=d.next()).done;)nt.push(tt.value)}catch(Ys){$a={error:Ys}}finally{try{tt&&!tt.done&&(c=d.return)&&c.call(d)}finally{if($a)throw $a.error}}return nt}function __spreadArray(o,a,c){if(c||arguments.length===2)for(var d=0,tt=a.length,nt;d0?charat(characters,--position):0,column--,character===10&&(column=1,line--),character}function next(){return character=position2||token(character)>3?"":" "}function escaping(o,a){for(;--a&&next()&&!(character<48||character>102||character>57&&character<65||character>70&&character<97););return slice$1(o,caret$1()+(a<6&&peek()==32&&next()==32))}function delimiter$1(o){for(;next();)switch(character){case o:return position;case 34:case 39:o!==34&&o!==39&&delimiter$1(character);break;case 40:o===41&&delimiter$1(o);break;case 92:next();break}return position}function commenter(o,a){for(;next()&&o+character!==57;)if(o+character===84&&peek()===47)break;return"/*"+slice$1(a,position-1)+"*"+from(o===47?o:next())}function identifier(o){for(;!token(peek());)next();return slice$1(o,position)}function compile$1(o){return dealloc(parse$5("",null,null,null,[""],o=alloc(o),0,[0],o))}function parse$5(o,a,c,d,tt,nt,$a,Ys,gu){for(var xu=0,$u=0,Iu=$a,Xu=0,i0=0,p0=0,w0=1,A0=1,$0=1,O0=0,L0="",q0=tt,F0=nt,u1=d,g1=L0;A0;)switch(p0=O0,O0=next()){case 40:if(p0!=108&&charat(g1,Iu-1)==58){indexof(g1+=replace$7(delimit(O0),"&","&\f"),"&\f",abs$1(xu?Ys[xu-1]:0))!=-1&&($0=-1);break}case 34:case 39:case 91:g1+=delimit(O0);break;case 9:case 10:case 13:case 32:g1+=whitespace$1(p0);break;case 92:g1+=escaping(caret$1()-1,7);continue;case 47:switch(peek()){case 42:case 47:append(comment(commenter(next(),caret$1()),a,c,gu),gu);break;default:g1+="/"}break;case 123*w0:Ys[xu++]=strlen(g1)*$0;case 125*w0:case 59:case 0:switch(O0){case 0:case 125:A0=0;case 59+$u:$0==-1&&(g1=replace$7(g1,/\f/g,"")),i0>0&&strlen(g1)-Iu&&append(i0>32?declaration(g1+";",d,c,Iu-1,gu):declaration(replace$7(g1," ","")+";",d,c,Iu-2,gu),gu);break;case 59:g1+=";";default:if(append(u1=ruleset(g1,a,c,xu,$u,tt,Ys,L0,q0=[],F0=[],Iu,nt),nt),O0===123)if($u===0)parse$5(g1,a,u1,u1,q0,nt,Iu,Ys,F0);else switch(Xu===99&&charat(g1,3)===110?100:Xu){case 100:case 108:case 109:case 115:parse$5(o,u1,u1,d&&append(ruleset(o,u1,u1,0,0,tt,Ys,L0,tt,q0=[],Iu,F0),F0),tt,F0,Iu,Ys,d?q0:F0);break;default:parse$5(g1,u1,u1,u1,[""],F0,0,Ys,F0)}}xu=$u=i0=0,w0=$0=1,L0=g1="",Iu=$a;break;case 58:Iu=1+strlen(g1),i0=p0;default:if(w0<1){if(O0==123)--w0;else if(O0==125&&w0++==0&&prev()==125)continue}switch(g1+=from(O0),O0*w0){case 38:$0=$u>0?1:(g1+="\f",-1);break;case 44:Ys[xu++]=(strlen(g1)-1)*$0,$0=1;break;case 64:peek()===45&&(g1+=delimit(next())),Xu=peek(),$u=Iu=strlen(L0=g1+=identifier(caret$1())),O0++;break;case 45:p0===45&&strlen(g1)==2&&(w0=0)}}return nt}function ruleset(o,a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu){for(var Xu=tt-1,i0=tt===0?nt:[""],p0=sizeof(i0),w0=0,A0=0,$0=0;w00?i0[O0]+" "+L0:replace$7(L0,/&\f/g,i0[O0])))&&(gu[$0++]=q0);return node$5(o,a,c,tt===0?RULESET:Ys,gu,xu,$u,Iu)}function comment(o,a,c,d){return node$5(o,a,c,COMMENT$1,from(char()),substr(o,2,-2),0,d)}function declaration(o,a,c,d,tt){return node$5(o,a,c,DECLARATION,substr(o,0,d),substr(o,d+1,-1),d,tt)}function prefix$1(o,a,c){switch(hash$9(o,a)){case 5103:return WEBKIT$2+"print-"+o+o;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return WEBKIT$2+o+o;case 4789:return MOZ+o+o;case 5349:case 4246:case 4810:case 6968:case 2756:return WEBKIT$2+o+MOZ+o+MS+o+o;case 5936:switch(charat(o,a+11)){case 114:return WEBKIT$2+o+MS+replace$7(o,/[svh]\w+-[tblr]{2}/,"tb")+o;case 108:return WEBKIT$2+o+MS+replace$7(o,/[svh]\w+-[tblr]{2}/,"tb-rl")+o;case 45:return WEBKIT$2+o+MS+replace$7(o,/[svh]\w+-[tblr]{2}/,"lr")+o}case 6828:case 4268:case 2903:return WEBKIT$2+o+MS+o+o;case 6165:return WEBKIT$2+o+MS+"flex-"+o+o;case 5187:return WEBKIT$2+o+replace$7(o,/(\w+).+(:[^]+)/,WEBKIT$2+"box-$1$2"+MS+"flex-$1$2")+o;case 5443:return WEBKIT$2+o+MS+"flex-item-"+replace$7(o,/flex-|-self/g,"")+(match$4(o,/flex-|baseline/)?"":MS+"grid-row-"+replace$7(o,/flex-|-self/g,""))+o;case 4675:return WEBKIT$2+o+MS+"flex-line-pack"+replace$7(o,/align-content|flex-|-self/g,"")+o;case 5548:return WEBKIT$2+o+MS+replace$7(o,"shrink","negative")+o;case 5292:return WEBKIT$2+o+MS+replace$7(o,"basis","preferred-size")+o;case 6060:return WEBKIT$2+"box-"+replace$7(o,"-grow","")+WEBKIT$2+o+MS+replace$7(o,"grow","positive")+o;case 4554:return WEBKIT$2+replace$7(o,/([^-])(transform)/g,"$1"+WEBKIT$2+"$2")+o;case 6187:return replace$7(replace$7(replace$7(o,/(zoom-|grab)/,WEBKIT$2+"$1"),/(image-set)/,WEBKIT$2+"$1"),o,"")+o;case 5495:case 3959:return replace$7(o,/(image-set\([^]*)/,WEBKIT$2+"$1$`$1");case 4968:return replace$7(replace$7(o,/(.+:)(flex-)?(.*)/,WEBKIT$2+"box-pack:$3"+MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+WEBKIT$2+o+o;case 4200:if(!match$4(o,/flex-|baseline/))return MS+"grid-column-align"+substr(o,a)+o;break;case 2592:case 3360:return MS+replace$7(o,"template-","")+o;case 4384:case 3616:return c&&c.some(function(d,tt){return a=tt,match$4(d.props,/grid-\w+-end/)})?~indexof(o+(c=c[a].value),"span",0)?o:MS+replace$7(o,"-start","")+o+MS+"grid-row-span:"+(~indexof(c,"span",0)?match$4(c,/\d+/):+match$4(c,/\d+/)-+match$4(o,/\d+/))+";":MS+replace$7(o,"-start","")+o;case 4896:case 4128:return c&&c.some(function(d){return match$4(d.props,/grid-\w+-start/)})?o:MS+replace$7(replace$7(o,"-end","-span"),"span ","")+o;case 4095:case 3583:case 4068:case 2532:return replace$7(o,/(.+)-inline(.+)/,WEBKIT$2+"$1$2")+o;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(strlen(o)-1-a>6)switch(charat(o,a+1)){case 109:if(charat(o,a+4)!==45)break;case 102:return replace$7(o,/(.+:)(.+)-([^]+)/,"$1"+WEBKIT$2+"$2-$3$1"+MOZ+(charat(o,a+3)==108?"$3":"$2-$3"))+o;case 115:return~indexof(o,"stretch",0)?prefix$1(replace$7(o,"stretch","fill-available"),a,c)+o:o}break;case 5152:case 5920:return replace$7(o,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(d,tt,nt,$a,Ys,gu,xu){return MS+tt+":"+nt+xu+($a?MS+tt+"-span:"+(Ys?gu:+gu-+nt)+xu:"")+o});case 4949:if(charat(o,a+6)===121)return replace$7(o,":",":"+WEBKIT$2)+o;break;case 6444:switch(charat(o,charat(o,14)===45?18:11)){case 120:return replace$7(o,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+WEBKIT$2+(charat(o,14)===45?"inline-":"")+"box$3$1"+WEBKIT$2+"$2$3$1"+MS+"$2box$3")+o;case 100:return replace$7(o,":",":"+MS)+o}break;case 5719:case 2647:case 2135:case 3927:case 2391:return replace$7(o,"scroll-","scroll-snap-")+o}return o}function serialize$5(o,a){for(var c="",d=0;d-1&&!o.return)switch(o.type){case DECLARATION:o.return=prefix$1(o.value,o.length,c);return;case KEYFRAMES:return serialize$5([copy$2(o,{value:replace$7(o.value,"@","@"+WEBKIT$2)})],d);case RULESET:if(o.length)return combine(c=o.props,function(tt){switch(match$4(tt,d=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":lift(copy$2(o,{props:[replace$7(tt,/:(read-\w+)/,":"+MOZ+"$1")]})),lift(copy$2(o,{props:[tt]})),assign$4(o,{props:filter$1(c,d)});break;case"::placeholder":lift(copy$2(o,{props:[replace$7(tt,/:(plac\w+)/,":"+WEBKIT$2+"input-$1")]})),lift(copy$2(o,{props:[replace$7(tt,/:(plac\w+)/,":"+MOZ+"$1")]})),lift(copy$2(o,{props:[replace$7(tt,/:(plac\w+)/,MS+"input-$1")]})),lift(copy$2(o,{props:[tt]})),assign$4(o,{props:filter$1(c,d)});break}return""})}}var unitlessKeys={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},define_process_env_default$4={},f$1=typeof process$1$4<"u"&&define_process_env_default$4!==void 0&&(define_process_env_default$4.REACT_APP_SC_ATTR||define_process_env_default$4.SC_ATTR)||"data-styled",m="active",y$1="data-styled-version",v="6.1.11",g$3=`/*!sc*/ -`,S$2=typeof window<"u"&&"HTMLElement"in window,w$2=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process$1$4<"u"&&define_process_env_default$4!==void 0&&define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY!==""?define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY:typeof process$1$4<"u"&&define_process_env_default$4!==void 0&&define_process_env_default$4.SC_DISABLE_SPEEDY!==void 0&&define_process_env_default$4.SC_DISABLE_SPEEDY!==""&&define_process_env_default$4.SC_DISABLE_SPEEDY!=="false"&&define_process_env_default$4.SC_DISABLE_SPEEDY),_$2=Object.freeze([]),C$3=Object.freeze({});function I$1(o,a,c){return c===void 0&&(c=C$3),o.theme!==c.theme&&o.theme||a||c.theme}var A$2=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),O$1=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,D$2=/(^-|-$)/g;function R$2(o){return o.replace(O$1,"-").replace(D$2,"")}var T$2=/(a)(d)/gi,k$2=52,j$4=function(o){return String.fromCharCode(o+(o>25?39:97))};function x$3(o){var a,c="";for(a=Math.abs(o);a>k$2;a=a/k$2|0)c=j$4(a%k$2)+c;return(j$4(a%k$2)+c).replace(T$2,"$1-$2")}var V$2,F$2=5381,M$2=function(o,a){for(var c=a.length;c;)o=33*o^a.charCodeAt(--c);return o},$$i=function(o){return M$2(F$2,o)};function z$2(o){return x$3($$i(o)>>>0)}function B$2(o){return o.displayName||o.name||"Component"}function L$3(o){return typeof o=="string"&&!0}var G$3=typeof Symbol=="function"&&Symbol.for,Y$2=G$3?Symbol.for("react.memo"):60115,W$7=G$3?Symbol.for("react.forward_ref"):60112,q$2={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H$3={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U$1={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J$1=((V$2={})[W$7]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V$2[Y$2]=U$1,V$2);function X$1(o){return("type"in(a=o)&&a.type.$$typeof)===Y$2?U$1:"$$typeof"in o?J$1[o.$$typeof]:q$2;var a}var Z$1=Object.defineProperty,K$6=Object.getOwnPropertyNames,Q$2=Object.getOwnPropertySymbols,ee$1=Object.getOwnPropertyDescriptor,te$1=Object.getPrototypeOf,ne$1=Object.prototype;function oe$1(o,a,c){if(typeof a!="string"){if(ne$1){var d=te$1(a);d&&d!==ne$1&&oe$1(o,d,c)}var tt=K$6(a);Q$2&&(tt=tt.concat(Q$2(a)));for(var nt=X$1(o),$a=X$1(a),Ys=0;Ys0?" Args: ".concat(a.join(", ")):""))}var fe$1=function(){function o(a){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=a}return o.prototype.indexOfGroup=function(a){for(var c=0,d=0;d=this.groupSizes.length){for(var d=this.groupSizes,tt=d.length,nt=tt;a>=nt;)if((nt<<=1)<0)throw he$1(16,"".concat(a));this.groupSizes=new Uint32Array(nt),this.groupSizes.set(d),this.length=nt;for(var $a=tt;$a=this.length||this.groupSizes[a]===0)return c;for(var d=this.groupSizes[a],tt=this.indexOfGroup(a),nt=tt+d,$a=tt;$a=0){var d=document.createTextNode(c);return this.element.insertBefore(d,this.nodes[a]||null),this.length++,!0}return!1},o.prototype.deleteRule=function(a){this.element.removeChild(this.nodes[a]),this.length--},o.prototype.getRule=function(a){return a0&&(A0+="".concat($0,","))}),gu+="".concat(p0).concat(w0,'{content:"').concat(A0,'"}').concat(g$3)},$u=0;$u0?".".concat(a):Xu},$u=gu.slice();$u.push(function(Xu){Xu.type===RULESET&&Xu.value.includes("&")&&(Xu.props[0]=Xu.props[0].replace(ke$1,c).replace(d,xu))}),$a.prefix&&$u.push(prefixer),$u.push(stringify$2);var Iu=function(Xu,i0,p0,w0){i0===void 0&&(i0=""),p0===void 0&&(p0=""),w0===void 0&&(w0="&"),a=w0,c=i0,d=new RegExp("\\".concat(c,"\\b"),"g");var A0=Xu.replace(je$1,""),$0=compile$1(p0||i0?"".concat(p0," ").concat(i0," { ").concat(A0," }"):A0);$a.namespace&&($0=xe$1($0,$a.namespace));var O0=[];return serialize$5($0,middleware($u.concat(rulesheet(function(L0){return O0.push(L0)})))),O0};return Iu.hash=gu.length?gu.reduce(function(Xu,i0){return i0.name||he$1(15),M$2(Xu,i0.name)},F$2).toString():"",Iu}var Fe$1=new Te$1,Me$1=Ve$1(),$e$1=React.createContext({shouldForwardProp:void 0,styleSheet:Fe$1,stylis:Me$1});$e$1.Consumer;React.createContext(void 0);function Le$1(){return reactExports.useContext($e$1)}var Ye$1=function(){function o(a,c){var d=this;this.inject=function(tt,nt){nt===void 0&&(nt=Me$1);var $a=d.name+nt.hash;tt.hasNameForId(d.id,$a)||tt.insertRules(d.id,$a,nt(d.rules,$a,"@keyframes"))},this.name=a,this.id="sc-keyframes-".concat(a),this.rules=c,ue$1(this,function(){throw he$1(12,String(d.name))})}return o.prototype.getName=function(a){return a===void 0&&(a=Me$1),this.name+a.hash},o}(),We$1=function(o){return o>="A"&&o<="Z"};function qe$1(o){for(var a="",c=0;c>>0);if(!c.hasNameForId(this.componentId,$a)){var Ys=d(nt,".".concat($a),void 0,this.componentId);c.insertRules(this.componentId,$a,Ys)}tt=ie$1(tt,$a),this.staticRulesId=$a}else{for(var gu=M$2(this.baseHash,d.hash),xu="",$u=0;$u>>0);c.hasNameForId(this.componentId,i0)||c.insertRules(this.componentId,i0,d(xu,".".concat(i0),void 0,this.componentId)),tt=ie$1(tt,i0)}}return tt},o}(),Qe$1=React.createContext(void 0);Qe$1.Consumer;var ot$1={};function st$1(o,a,c){var d=se$1(o),tt=o,nt=!L$3(o),$a=a.attrs,Ys=$a===void 0?_$2:$a,gu=a.componentId,xu=gu===void 0?function(q0,F0){var u1=typeof q0!="string"?"sc":R$2(q0);ot$1[u1]=(ot$1[u1]||0)+1;var g1="".concat(u1,"-").concat(z$2(v+u1+ot$1[u1]));return F0?"".concat(F0,"-").concat(g1):g1}(a.displayName,a.parentComponentId):gu,$u=a.displayName,Iu=$u===void 0?function(q0){return L$3(q0)?"styled.".concat(q0):"Styled(".concat(B$2(q0),")")}(o):$u,Xu=a.displayName&&a.componentId?"".concat(R$2(a.displayName),"-").concat(a.componentId):a.componentId||xu,i0=d&&tt.attrs?tt.attrs.concat(Ys).filter(Boolean):Ys,p0=a.shouldForwardProp;if(d&&tt.shouldForwardProp){var w0=tt.shouldForwardProp;if(a.shouldForwardProp){var A0=a.shouldForwardProp;p0=function(q0,F0){return w0(q0,F0)&&A0(q0,F0)}}else p0=w0}var $0=new Ke$1(c,Xu,d?tt.componentStyle:void 0);function O0(q0,F0){return function(u1,g1,E1){var B1=u1.attrs,lv=u1.componentStyle,j1=u1.defaultProps,r1=u1.foldedComponentIds,t1=u1.styledComponentId,D0=u1.target,Z0=React.useContext(Qe$1),f1=Le$1(),w1=u1.shouldForwardProp||f1.shouldForwardProp,m1=I$1(g1,Z0,j1)||C$3,c1=function(Q1,rv,D1){for(var ev,Mv=__assign(__assign({},rv),{className:void 0,theme:D1}),Zv=0;Zv{a.current=o},[o]),a}function useEventCallback(o){const a=useCommittedRef(o);return reactExports.useCallback(function(...c){return a.current&&a.current(...c)},[a])}const toFnRef=o=>!o||typeof o=="function"?o:a=>{o.current=a};function mergeRefs(o,a){const c=toFnRef(o),d=toFnRef(a);return tt=>{c&&c(tt),d&&d(tt)}}function useMergedRefs(o,a){return reactExports.useMemo(()=>mergeRefs(o,a),[o,a])}function useUpdatedRef(o){const a=reactExports.useRef(o);return a.current=o,a}function useWillUnmount(o){const a=useUpdatedRef(o);reactExports.useEffect(()=>()=>a.current(),[])}function ownerWindow(o){var a=ownerDocument(o);return a&&a.defaultView||window}function getComputedStyle$3(o,a){return ownerWindow(o).getComputedStyle(o,a)}var rUpper=/([A-Z])/g;function hyphenate(o){return o.replace(rUpper,"-$1").toLowerCase()}var msPattern=/^ms-/;function hyphenateStyleName(o){return hyphenate(o).replace(msPattern,"-ms-")}var supportedTransforms=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;function isTransform(o){return!!(o&&supportedTransforms.test(o))}function style(o,a){var c="",d="";if(typeof a=="string")return o.style.getPropertyValue(hyphenateStyleName(a))||getComputedStyle$3(o).getPropertyValue(hyphenateStyleName(a));Object.keys(a).forEach(function(tt){var nt=a[tt];!nt&&nt!==0?o.style.removeProperty(hyphenateStyleName(tt)):isTransform(tt)?d+=tt+"("+nt+") ":c+=hyphenateStyleName(tt)+": "+nt+";"}),d&&(c+="transform: "+d+";"),o.style.cssText+=";"+c}function listen(o,a,c,d){return addEventListener$1(o,a,c,d),function(){removeEventListener$1(o,a,c,d)}}function triggerEvent(o,a,c,d){if(d===void 0&&(d=!0),o){var tt=document.createEvent("HTMLEvents");tt.initEvent(a,c,d),o.dispatchEvent(tt)}}function parseDuration$1(o){var a=style(o,"transitionDuration")||"",c=a.indexOf("ms")===-1?1e3:1;return parseFloat(a)*c}function emulateTransitionEnd(o,a,c){c===void 0&&(c=5);var d=!1,tt=setTimeout(function(){d||triggerEvent(o,"transitionend",!0)},a+c),nt=listen(o,"transitionend",function(){d=!0},{once:!0});return function(){clearTimeout(tt),nt()}}function transitionEnd(o,a,c,d){c==null&&(c=parseDuration$1(o)||0);var tt=emulateTransitionEnd(o,c,d),nt=listen(o,"transitionend",a);return function(){tt(),nt()}}function activeElement(o){o===void 0&&(o=ownerDocument());try{var a=o.activeElement;return!a||!a.nodeName?null:a}catch{return o.body}}function contains$2(o,a){if(o.contains)return o.contains(a);if(o.compareDocumentPosition)return o===a||!!(o.compareDocumentPosition(a)&16)}function useMounted(){const o=reactExports.useRef(!0),a=reactExports.useRef(()=>o.current);return reactExports.useEffect(()=>(o.current=!0,()=>{o.current=!1}),[]),a.current}function usePrevious(o){const a=reactExports.useRef(null);return reactExports.useEffect(()=>{a.current=o}),a.current}const ATTRIBUTE_PREFIX="data-rr-ui-";function dataAttr(o){return`${ATTRIBUTE_PREFIX}${o}`}function getBodyScrollbarWidth(o=document){const a=o.defaultView;return Math.abs(a.innerWidth-o.documentElement.clientWidth)}const OPEN_DATA_ATTRIBUTE=dataAttr("modal-open");class ModalManager{constructor({ownerDocument:a,handleContainerOverflow:c=!0,isRTL:d=!1}={}){this.handleContainerOverflow=c,this.isRTL=d,this.modals=[],this.ownerDocument=a}getScrollbarWidth(){return getBodyScrollbarWidth(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(a){}removeModalAttributes(a){}setContainerStyle(a){const c={overflow:"hidden"},d=this.isRTL?"paddingLeft":"paddingRight",tt=this.getElement();a.style={overflow:tt.style.overflow,[d]:tt.style[d]},a.scrollBarWidth&&(c[d]=`${parseInt(style(tt,d)||"0",10)+a.scrollBarWidth}px`),tt.setAttribute(OPEN_DATA_ATTRIBUTE,""),style(tt,c)}reset(){[...this.modals].forEach(a=>this.remove(a))}removeContainerStyle(a){const c=this.getElement();c.removeAttribute(OPEN_DATA_ATTRIBUTE),Object.assign(c.style,a.style)}add(a){let c=this.modals.indexOf(a);return c!==-1||(c=this.modals.length,this.modals.push(a),this.setModalAttributes(a),c!==0)||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),c}remove(a){const c=this.modals.indexOf(a);c!==-1&&(this.modals.splice(c,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(a))}isTopModal(a){return!!this.modals.length&&this.modals[this.modals.length-1]===a}}const Context=reactExports.createContext(canUseDOM?window:void 0);Context.Provider;function useWindow(){return reactExports.useContext(Context)}const resolveContainerRef=(o,a)=>canUseDOM?o==null?(a||ownerDocument()).body:(typeof o=="function"&&(o=o()),o&&"current"in o&&(o=o.current),o&&("nodeType"in o||o.getBoundingClientRect)?o:null):null;function useWaitForDOMRef(o,a){const c=useWindow(),[d,tt]=reactExports.useState(()=>resolveContainerRef(o,c==null?void 0:c.document));if(!d){const nt=resolveContainerRef(o);nt&&tt(nt)}return reactExports.useEffect(()=>{},[a,d]),reactExports.useEffect(()=>{const nt=resolveContainerRef(o);nt!==d&&tt(nt)},[o,d]),d}const isReactNative=typeof global$u<"u"&&global$u.navigator&&global$u.navigator.product==="ReactNative",isDOM=typeof document<"u",useIsomorphicEffect=isDOM||isReactNative?reactExports.useLayoutEffect:reactExports.useEffect;function NoopTransition({children:o,in:a,onExited:c,mountOnEnter:d,unmountOnExit:tt}){const nt=reactExports.useRef(null),$a=reactExports.useRef(a),Ws=useEventCallback(c);reactExports.useEffect(()=>{a?$a.current=!0:Ws(nt.current)},[a,Ws]);const gu=useMergedRefs(nt,o.ref),Su=reactExports.cloneElement(o,{ref:gu});return a?Su:tt||!$a.current&&d?null:Su}function isEscKey(o){return o.code==="Escape"||o.keyCode===27}function getReactVersion(){const o=reactExports.version.split(".");return{major:+o[0],minor:+o[1],patch:+o[2]}}const _excluded$7=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];function _objectWithoutPropertiesLoose$8(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function useRTGTransitionProps(o){let{onEnter:a,onEntering:c,onEntered:d,onExit:tt,onExiting:nt,onExited:$a,addEndListener:Ws,children:gu}=o,Su=_objectWithoutPropertiesLoose$8(o,_excluded$7);const{major:$u}=getReactVersion(),Iu=$u>=19?gu.props.ref:gu.ref,Xu=reactExports.useRef(null),r0=useMergedRefs(Xu,typeof gu=="function"?null:Iu),p0=u1=>g1=>{u1&&Xu.current&&u1(Xu.current,g1)},y0=reactExports.useCallback(p0(a),[a]),A0=reactExports.useCallback(p0(c),[c]),$0=reactExports.useCallback(p0(d),[d]),O0=reactExports.useCallback(p0(tt),[tt]),L0=reactExports.useCallback(p0(nt),[nt]),V0=reactExports.useCallback(p0($a),[$a]),F0=reactExports.useCallback(p0(Ws),[Ws]);return Object.assign({},Su,{nodeRef:Xu},a&&{onEnter:y0},c&&{onEntering:A0},d&&{onEntered:$0},tt&&{onExit:O0},nt&&{onExiting:L0},$a&&{onExited:V0},Ws&&{addEndListener:F0},{children:typeof gu=="function"?(u1,g1)=>gu(u1,Object.assign({},g1,{ref:r0})):reactExports.cloneElement(gu,{ref:r0})})}const _excluded$6=["component"];function _objectWithoutPropertiesLoose$7(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}const RTGTransition=reactExports.forwardRef((o,a)=>{let{component:c}=o,d=_objectWithoutPropertiesLoose$7(o,_excluded$6);const tt=useRTGTransitionProps(d);return jsxRuntimeExports.jsx(c,Object.assign({ref:a},tt))});function useTransition({in:o,onTransition:a}){const c=reactExports.useRef(null),d=reactExports.useRef(!0),tt=useEventCallback(a);return useIsomorphicEffect(()=>{if(!c.current)return;let nt=!1;return tt({in:o,element:c.current,initial:d.current,isStale:()=>nt}),()=>{nt=!0}},[o,tt]),useIsomorphicEffect(()=>(d.current=!1,()=>{d.current=!0}),[]),c}function ImperativeTransition({children:o,in:a,onExited:c,onEntered:d,transition:tt}){const[nt,$a]=reactExports.useState(!a);a&&nt&&$a(!1);const Ws=useTransition({in:!!a,onTransition:Su=>{const $u=()=>{Su.isStale()||(Su.in?d==null||d(Su.element,Su.initial):($a(!0),c==null||c(Su.element)))};Promise.resolve(tt(Su)).then($u,Iu=>{throw Su.in||$a(!0),Iu})}}),gu=useMergedRefs(Ws,o.ref);return nt&&!a?null:reactExports.cloneElement(o,{ref:gu})}function renderTransition(o,a,c){return o?jsxRuntimeExports.jsx(RTGTransition,Object.assign({},c,{component:o})):a?jsxRuntimeExports.jsx(ImperativeTransition,Object.assign({},c,{transition:a})):jsxRuntimeExports.jsx(NoopTransition,Object.assign({},c))}const _excluded$5=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];function _objectWithoutPropertiesLoose$6(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}let manager;function getManager(o){return manager||(manager=new ModalManager({ownerDocument:o==null?void 0:o.document})),manager}function useModalManager(o){const a=useWindow(),c=o||getManager(a),d=reactExports.useRef({dialog:null,backdrop:null});return Object.assign(d.current,{add:()=>c.add(d.current),remove:()=>c.remove(d.current),isTopModal:()=>c.isTopModal(d.current),setDialogRef:reactExports.useCallback(tt=>{d.current.dialog=tt},[]),setBackdropRef:reactExports.useCallback(tt=>{d.current.backdrop=tt},[])})}const Modal$3=reactExports.forwardRef((o,a)=>{let{show:c=!1,role:d="dialog",className:tt,style:nt,children:$a,backdrop:Ws=!0,keyboard:gu=!0,onBackdropClick:Su,onEscapeKeyDown:$u,transition:Iu,runTransition:Xu,backdropTransition:r0,runBackdropTransition:p0,autoFocus:y0=!0,enforceFocus:A0=!0,restoreFocus:$0=!0,restoreFocusOptions:O0,renderDialog:L0,renderBackdrop:V0=Ly=>jsxRuntimeExports.jsx("div",Object.assign({},Ly)),manager:F0,container:u1,onShow:g1,onHide:E1=()=>{},onExit:B1,onExited:lv,onExiting:j1,onEnter:r1,onEntering:t1,onEntered:D0}=o,Z0=_objectWithoutPropertiesLoose$6(o,_excluded$5);const f1=useWindow(),w1=useWaitForDOMRef(u1),m1=useModalManager(F0),c1=useMounted(),G0=usePrevious(c),[o1,d1]=reactExports.useState(!c),R1=reactExports.useRef(null);reactExports.useImperativeHandle(a,()=>m1,[m1]),canUseDOM&&!G0&&c&&(R1.current=activeElement(f1==null?void 0:f1.document)),c&&o1&&d1(!1);const O1=useEventCallback(()=>{if(m1.add(),Zv.current=listen(document,"keydown",ev),Mv.current=listen(document,"focus",()=>setTimeout(rv),!0),g1&&g1(),y0){var Ly,Hy;const t2=activeElement((Ly=(Hy=m1.dialog)==null?void 0:Hy.ownerDocument)!=null?Ly:f1==null?void 0:f1.document);m1.dialog&&t2&&!contains$2(m1.dialog,t2)&&(R1.current=t2,m1.dialog.focus())}}),Q1=useEventCallback(()=>{if(m1.remove(),Zv.current==null||Zv.current(),Mv.current==null||Mv.current(),$0){var Ly;(Ly=R1.current)==null||Ly.focus==null||Ly.focus(O0),R1.current=null}});reactExports.useEffect(()=>{!c||!w1||O1()},[c,w1,O1]),reactExports.useEffect(()=>{o1&&Q1()},[o1,Q1]),useWillUnmount(()=>{Q1()});const rv=useEventCallback(()=>{if(!A0||!c1()||!m1.isTopModal())return;const Ly=activeElement(f1==null?void 0:f1.document);m1.dialog&&Ly&&!contains$2(m1.dialog,Ly)&&m1.dialog.focus()}),D1=useEventCallback(Ly=>{Ly.target===Ly.currentTarget&&(Su==null||Su(Ly),Ws===!0&&E1())}),ev=useEventCallback(Ly=>{gu&&isEscKey(Ly)&&m1.isTopModal()&&($u==null||$u(Ly),Ly.defaultPrevented||E1())}),Mv=reactExports.useRef(),Zv=reactExports.useRef(),fv=(...Ly)=>{d1(!0),lv==null||lv(...Ly)};if(!w1)return null;const cv=Object.assign({role:d,ref:m1.setDialogRef,"aria-modal":d==="dialog"?!0:void 0},Z0,{style:nt,className:tt,tabIndex:-1});let ly=L0?L0(cv):jsxRuntimeExports.jsx("div",Object.assign({},cv,{children:reactExports.cloneElement($a,{role:"document"})}));ly=renderTransition(Iu,Xu,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!c,onExit:B1,onExiting:j1,onExited:fv,onEnter:r1,onEntering:t1,onEntered:D0,children:ly});let Cy=null;return Ws&&(Cy=V0({ref:m1.setBackdropRef,onClick:D1}),Cy=renderTransition(r0,p0,{in:!!c,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:Cy})),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:ReactDOM.createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[Cy,ly]}),w1)})});Modal$3.displayName="Modal";const BaseModal=Object.assign(Modal$3,{Manager:ModalManager});function hasClass(o,a){return o.classList?o.classList.contains(a):(" "+(o.className.baseVal||o.className)+" ").indexOf(" "+a+" ")!==-1}function addClass(o,a){o.classList?o.classList.add(a):hasClass(o,a)||(typeof o.className=="string"?o.className=o.className+" "+a:o.setAttribute("class",(o.className&&o.className.baseVal||"")+" "+a))}var toArray$2=Function.prototype.bind.call(Function.prototype.call,[].slice);function qsa(o,a){return toArray$2(o.querySelectorAll(a))}function replaceClassName(o,a){return o.replace(new RegExp("(^|\\s)"+a+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}function removeClass(o,a){o.classList?o.classList.remove(a):typeof o.className=="string"?o.className=replaceClassName(o.className,a):o.setAttribute("class",replaceClassName(o.className&&o.className.baseVal||"",a))}const Selector={FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"};class BootstrapModalManager extends ModalManager{adjustAndStore(a,c,d){const tt=c.style[a];c.dataset[a]=tt,style(c,{[a]:`${parseFloat(style(c,a))+d}px`})}restore(a,c){const d=c.dataset[a];d!==void 0&&(delete c.dataset[a],style(c,{[a]:d}))}setContainerStyle(a){super.setContainerStyle(a);const c=this.getElement();if(addClass(c,"modal-open"),!a.scrollBarWidth)return;const d=this.isRTL?"paddingLeft":"paddingRight",tt=this.isRTL?"marginLeft":"marginRight";qsa(c,Selector.FIXED_CONTENT).forEach(nt=>this.adjustAndStore(d,nt,a.scrollBarWidth)),qsa(c,Selector.STICKY_CONTENT).forEach(nt=>this.adjustAndStore(tt,nt,-a.scrollBarWidth)),qsa(c,Selector.NAVBAR_TOGGLER).forEach(nt=>this.adjustAndStore(tt,nt,a.scrollBarWidth))}removeContainerStyle(a){super.removeContainerStyle(a);const c=this.getElement();removeClass(c,"modal-open");const d=this.isRTL?"paddingLeft":"paddingRight",tt=this.isRTL?"marginLeft":"marginRight";qsa(c,Selector.FIXED_CONTENT).forEach(nt=>this.restore(d,nt)),qsa(c,Selector.STICKY_CONTENT).forEach(nt=>this.restore(tt,nt)),qsa(c,Selector.NAVBAR_TOGGLER).forEach(nt=>this.restore(tt,nt))}}let sharedManager;function getSharedManager(o){return sharedManager||(sharedManager=new BootstrapModalManager(o)),sharedManager}function _objectWithoutPropertiesLoose$5(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.includes(d))continue;c[d]=o[d]}return c}function _setPrototypeOf(o,a){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,d){return c.__proto__=d,c},_setPrototypeOf(o,a)}function _inheritsLoose(o,a){o.prototype=Object.create(a.prototype),o.prototype.constructor=o,_setPrototypeOf(o,a)}var propTypes$1={exports:{}},ReactPropTypesSecret$1="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",ReactPropTypesSecret_1=ReactPropTypesSecret$1,ReactPropTypesSecret=ReactPropTypesSecret_1;function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction;var factoryWithThrowingShims=function(){function o(d,tt,nt,$a,Ws,gu){if(gu!==ReactPropTypesSecret){var Su=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw Su.name="Invariant Violation",Su}}o.isRequired=o;function a(){return o}var c={array:o,bigint:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,any:o,arrayOf:a,element:o,elementType:o,instanceOf:a,node:o,objectOf:a,oneOf:a,oneOfType:a,shape:a,exact:a,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return c.PropTypes=c,c};propTypes$1.exports=factoryWithThrowingShims();var propTypesExports=propTypes$1.exports;const PropTypes=getDefaultExportFromCjs$1(propTypesExports),config$2={disabled:!1},TransitionGroupContext=React.createContext(null);var forceReflow=function(a){return a.scrollTop},UNMOUNTED="unmounted",EXITED="exited",ENTERING="entering",ENTERED="entered",EXITING="exiting",Transition=function(o){_inheritsLoose(a,o);function a(d,tt){var nt;nt=o.call(this,d,tt)||this;var $a=tt,Ws=$a&&!$a.isMounting?d.enter:d.appear,gu;return nt.appearStatus=null,d.in?Ws?(gu=EXITED,nt.appearStatus=ENTERING):gu=ENTERED:d.unmountOnExit||d.mountOnEnter?gu=UNMOUNTED:gu=EXITED,nt.state={status:gu},nt.nextCallback=null,nt}a.getDerivedStateFromProps=function(tt,nt){var $a=tt.in;return $a&&nt.status===UNMOUNTED?{status:EXITED}:null};var c=a.prototype;return c.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},c.componentDidUpdate=function(tt){var nt=null;if(tt!==this.props){var $a=this.state.status;this.props.in?$a!==ENTERING&&$a!==ENTERED&&(nt=ENTERING):($a===ENTERING||$a===ENTERED)&&(nt=EXITING)}this.updateStatus(!1,nt)},c.componentWillUnmount=function(){this.cancelNextCallback()},c.getTimeouts=function(){var tt=this.props.timeout,nt,$a,Ws;return nt=$a=Ws=tt,tt!=null&&typeof tt!="number"&&(nt=tt.exit,$a=tt.enter,Ws=tt.appear!==void 0?tt.appear:$a),{exit:nt,enter:$a,appear:Ws}},c.updateStatus=function(tt,nt){if(tt===void 0&&(tt=!1),nt!==null)if(this.cancelNextCallback(),nt===ENTERING){if(this.props.unmountOnExit||this.props.mountOnEnter){var $a=this.props.nodeRef?this.props.nodeRef.current:ReactDOM.findDOMNode(this);$a&&forceReflow($a)}this.performEnter(tt)}else this.performExit();else this.props.unmountOnExit&&this.state.status===EXITED&&this.setState({status:UNMOUNTED})},c.performEnter=function(tt){var nt=this,$a=this.props.enter,Ws=this.context?this.context.isMounting:tt,gu=this.props.nodeRef?[Ws]:[ReactDOM.findDOMNode(this),Ws],Su=gu[0],$u=gu[1],Iu=this.getTimeouts(),Xu=Ws?Iu.appear:Iu.enter;if(!tt&&!$a||config$2.disabled){this.safeSetState({status:ENTERED},function(){nt.props.onEntered(Su)});return}this.props.onEnter(Su,$u),this.safeSetState({status:ENTERING},function(){nt.props.onEntering(Su,$u),nt.onTransitionEnd(Xu,function(){nt.safeSetState({status:ENTERED},function(){nt.props.onEntered(Su,$u)})})})},c.performExit=function(){var tt=this,nt=this.props.exit,$a=this.getTimeouts(),Ws=this.props.nodeRef?void 0:ReactDOM.findDOMNode(this);if(!nt||config$2.disabled){this.safeSetState({status:EXITED},function(){tt.props.onExited(Ws)});return}this.props.onExit(Ws),this.safeSetState({status:EXITING},function(){tt.props.onExiting(Ws),tt.onTransitionEnd($a.exit,function(){tt.safeSetState({status:EXITED},function(){tt.props.onExited(Ws)})})})},c.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},c.safeSetState=function(tt,nt){nt=this.setNextCallback(nt),this.setState(tt,nt)},c.setNextCallback=function(tt){var nt=this,$a=!0;return this.nextCallback=function(Ws){$a&&($a=!1,nt.nextCallback=null,tt(Ws))},this.nextCallback.cancel=function(){$a=!1},this.nextCallback},c.onTransitionEnd=function(tt,nt){this.setNextCallback(nt);var $a=this.props.nodeRef?this.props.nodeRef.current:ReactDOM.findDOMNode(this),Ws=tt==null&&!this.props.addEndListener;if(!$a||Ws){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var gu=this.props.nodeRef?[this.nextCallback]:[$a,this.nextCallback],Su=gu[0],$u=gu[1];this.props.addEndListener(Su,$u)}tt!=null&&setTimeout(this.nextCallback,tt)},c.render=function(){var tt=this.state.status;if(tt===UNMOUNTED)return null;var nt=this.props,$a=nt.children;nt.in,nt.mountOnEnter,nt.unmountOnExit,nt.appear,nt.enter,nt.exit,nt.timeout,nt.addEndListener,nt.onEnter,nt.onEntering,nt.onEntered,nt.onExit,nt.onExiting,nt.onExited,nt.nodeRef;var Ws=_objectWithoutPropertiesLoose$5(nt,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return React.createElement(TransitionGroupContext.Provider,{value:null},typeof $a=="function"?$a(tt,Ws):React.cloneElement(React.Children.only($a),Ws))},a}(React.Component);Transition.contextType=TransitionGroupContext;Transition.propTypes={};function noop$8(){}Transition.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:noop$8,onEntering:noop$8,onEntered:noop$8,onExit:noop$8,onExiting:noop$8,onExited:noop$8};Transition.UNMOUNTED=UNMOUNTED;Transition.EXITED=EXITED;Transition.ENTERING=ENTERING;Transition.ENTERED=ENTERED;Transition.EXITING=EXITING;function parseDuration(o,a){const c=style(o,a)||"",d=c.indexOf("ms")===-1?1e3:1;return parseFloat(c)*d}function transitionEndListener(o,a){const c=parseDuration(o,"transitionDuration"),d=parseDuration(o,"transitionDelay"),tt=transitionEnd(o,nt=>{nt.target===o&&(tt(),a(nt))},c+d)}function triggerBrowserReflow(o){o.offsetHeight}function safeFindDOMNode(o){return o&&"setState"in o?ReactDOM.findDOMNode(o):o??null}const TransitionWrapper=React.forwardRef(({onEnter:o,onEntering:a,onEntered:c,onExit:d,onExiting:tt,onExited:nt,addEndListener:$a,children:Ws,childRef:gu,...Su},$u)=>{const Iu=reactExports.useRef(null),Xu=useMergedRefs(Iu,gu),r0=u1=>{Xu(safeFindDOMNode(u1))},p0=u1=>g1=>{u1&&Iu.current&&u1(Iu.current,g1)},y0=reactExports.useCallback(p0(o),[o]),A0=reactExports.useCallback(p0(a),[a]),$0=reactExports.useCallback(p0(c),[c]),O0=reactExports.useCallback(p0(d),[d]),L0=reactExports.useCallback(p0(tt),[tt]),V0=reactExports.useCallback(p0(nt),[nt]),F0=reactExports.useCallback(p0($a),[$a]);return jsxRuntimeExports.jsx(Transition,{ref:$u,...Su,onEnter:y0,onEntered:$0,onEntering:A0,onExit:O0,onExited:V0,onExiting:L0,addEndListener:F0,nodeRef:Iu,children:typeof Ws=="function"?(u1,g1)=>Ws(u1,{...g1,ref:r0}):React.cloneElement(Ws,{ref:r0})})}),fadeStyles={[ENTERING]:"show",[ENTERED]:"show"},Fade=reactExports.forwardRef(({className:o,children:a,transitionClasses:c={},onEnter:d,...tt},nt)=>{const $a={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...tt},Ws=reactExports.useCallback((gu,Su)=>{triggerBrowserReflow(gu),d==null||d(gu,Su)},[d]);return jsxRuntimeExports.jsx(TransitionWrapper,{ref:nt,addEndListener:transitionEndListener,...$a,onEnter:Ws,childRef:a.ref,children:(gu,Su)=>reactExports.cloneElement(a,{...Su,className:y$2("fade",o,a.props.className,fadeStyles[gu],c[gu])})})});Fade.displayName="Fade";const DEFAULT_BREAKPOINTS=["xxl","xl","lg","md","sm","xs"],DEFAULT_MIN_BREAKPOINT="xs",ThemeContext=reactExports.createContext({prefixes:{},breakpoints:DEFAULT_BREAKPOINTS,minBreakpoint:DEFAULT_MIN_BREAKPOINT});function useBootstrapPrefix(o,a){const{prefixes:c}=reactExports.useContext(ThemeContext);return o||c[a]||a}function useIsRTL(){const{dir:o}=reactExports.useContext(ThemeContext);return o==="rtl"}const ModalBody=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="div",...d},tt)=>(a=useBootstrapPrefix(a,"modal-body"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));ModalBody.displayName="ModalBody";const ModalContext=reactExports.createContext({onHide(){}}),ModalDialog=reactExports.forwardRef(({bsPrefix:o,className:a,contentClassName:c,centered:d,size:tt,fullscreen:nt,children:$a,scrollable:Ws,...gu},Su)=>{o=useBootstrapPrefix(o,"modal");const $u=`${o}-dialog`,Iu=typeof nt=="string"?`${o}-fullscreen-${nt}`:`${o}-fullscreen`;return jsxRuntimeExports.jsx("div",{...gu,ref:Su,className:y$2($u,a,tt&&`${o}-${tt}`,d&&`${$u}-centered`,Ws&&`${$u}-scrollable`,nt&&Iu),children:jsxRuntimeExports.jsx("div",{className:y$2(`${o}-content`,c),children:$a})})});ModalDialog.displayName="ModalDialog";const ModalFooter=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="div",...d},tt)=>(a=useBootstrapPrefix(a,"modal-footer"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));ModalFooter.displayName="ModalFooter";const propTypes={"aria-label":PropTypes.string,onClick:PropTypes.func,variant:PropTypes.oneOf(["white"])},CloseButton$1=reactExports.forwardRef(({className:o,variant:a,"aria-label":c="Close",...d},tt)=>jsxRuntimeExports.jsx("button",{ref:tt,type:"button",className:y$2("btn-close",a&&`btn-close-${a}`,o),"aria-label":c,...d}));CloseButton$1.displayName="CloseButton";CloseButton$1.propTypes=propTypes;const AbstractModalHeader=reactExports.forwardRef(({closeLabel:o="Close",closeVariant:a,closeButton:c=!1,onHide:d,children:tt,...nt},$a)=>{const Ws=reactExports.useContext(ModalContext),gu=useEventCallback(()=>{Ws==null||Ws.onHide(),d==null||d()});return jsxRuntimeExports.jsxs("div",{ref:$a,...nt,children:[tt,c&&jsxRuntimeExports.jsx(CloseButton$1,{"aria-label":o,variant:a,onClick:gu})]})}),ModalHeader$1=reactExports.forwardRef(({bsPrefix:o,className:a,closeLabel:c="Close",closeButton:d=!1,...tt},nt)=>(o=useBootstrapPrefix(o,"modal-header"),jsxRuntimeExports.jsx(AbstractModalHeader,{ref:nt,...tt,className:y$2(a,o),closeLabel:c,closeButton:d})));ModalHeader$1.displayName="ModalHeader";const divWithClassName=o=>reactExports.forwardRef((a,c)=>jsxRuntimeExports.jsx("div",{...a,ref:c,className:y$2(a.className,o)})),DivStyledAsH4=divWithClassName("h4"),ModalTitle=reactExports.forwardRef(({className:o,bsPrefix:a,as:c=DivStyledAsH4,...d},tt)=>(a=useBootstrapPrefix(a,"modal-title"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));ModalTitle.displayName="ModalTitle";function DialogTransition(o){return jsxRuntimeExports.jsx(Fade,{...o,timeout:null})}function BackdropTransition(o){return jsxRuntimeExports.jsx(Fade,{...o,timeout:null})}const Modal$1=reactExports.forwardRef(({bsPrefix:o,className:a,style:c,dialogClassName:d,contentClassName:tt,children:nt,dialogAs:$a=ModalDialog,"data-bs-theme":Ws,"aria-labelledby":gu,"aria-describedby":Su,"aria-label":$u,show:Iu=!1,animation:Xu=!0,backdrop:r0=!0,keyboard:p0=!0,onEscapeKeyDown:y0,onShow:A0,onHide:$0,container:O0,autoFocus:L0=!0,enforceFocus:V0=!0,restoreFocus:F0=!0,restoreFocusOptions:u1,onEntered:g1,onExit:E1,onExiting:B1,onEnter:lv,onEntering:j1,onExited:r1,backdropClassName:t1,manager:D0,...Z0},f1)=>{const[w1,m1]=reactExports.useState({}),[c1,G0]=reactExports.useState(!1),o1=reactExports.useRef(!1),d1=reactExports.useRef(!1),R1=reactExports.useRef(null),[O1,Q1]=useCallbackRef(),rv=useMergedRefs(f1,Q1),D1=useEventCallback($0),ev=useIsRTL();o=useBootstrapPrefix(o,"modal");const Mv=reactExports.useMemo(()=>({onHide:D1}),[D1]);function Zv(){return D0||getSharedManager({isRTL:ev})}function fv(lw){if(!canUseDOM)return;const Lw=Zv().getScrollbarWidth()>0,zw=lw.scrollHeight>ownerDocument(lw).documentElement.clientHeight;m1({paddingRight:Lw&&!zw?scrollbarSize():void 0,paddingLeft:!Lw&&zw?scrollbarSize():void 0})}const cv=useEventCallback(()=>{O1&&fv(O1.dialog)});useWillUnmount(()=>{removeEventListener$1(window,"resize",cv),R1.current==null||R1.current()});const ly=()=>{o1.current=!0},Cy=lw=>{o1.current&&O1&&lw.target===O1.dialog&&(d1.current=!0),o1.current=!1},Ly=()=>{G0(!0),R1.current=transitionEnd(O1.dialog,()=>{G0(!1)})},Hy=lw=>{lw.target===lw.currentTarget&&Ly()},t2=lw=>{if(r0==="static"){Hy(lw);return}if(d1.current||lw.target!==lw.currentTarget){d1.current=!1;return}$0==null||$0()},C2=lw=>{p0?y0==null||y0(lw):(lw.preventDefault(),r0==="static"&&Ly())},Dy=(lw,Lw)=>{lw&&fv(lw),lv==null||lv(lw,Lw)},jw=lw=>{R1.current==null||R1.current(),E1==null||E1(lw)},pw=(lw,Lw)=>{j1==null||j1(lw,Lw),addEventListener$1(window,"resize",cv)},vw=lw=>{lw&&(lw.style.display=""),r1==null||r1(lw),removeEventListener$1(window,"resize",cv)},Hw=reactExports.useCallback(lw=>jsxRuntimeExports.jsx("div",{...lw,className:y$2(`${o}-backdrop`,t1,!Xu&&"show")}),[Xu,t1,o]),uw={...c,...w1};uw.display="block";const Nw=lw=>jsxRuntimeExports.jsx("div",{role:"dialog",...lw,style:uw,className:y$2(a,o,c1&&`${o}-static`,!Xu&&"show"),onClick:r0?t2:void 0,onMouseUp:Cy,"data-bs-theme":Ws,"aria-label":$u,"aria-labelledby":gu,"aria-describedby":Su,children:jsxRuntimeExports.jsx($a,{...Z0,onMouseDown:ly,className:d,contentClassName:tt,children:nt})});return jsxRuntimeExports.jsx(ModalContext.Provider,{value:Mv,children:jsxRuntimeExports.jsx(BaseModal,{show:Iu,ref:rv,backdrop:r0,container:O0,keyboard:!0,autoFocus:L0,enforceFocus:V0,restoreFocus:F0,restoreFocusOptions:u1,onEscapeKeyDown:C2,onShow:A0,onHide:$0,onEnter:Dy,onEntering:pw,onEntered:g1,onExit:jw,onExiting:B1,onExited:vw,manager:Zv(),transition:Xu?DialogTransition:void 0,backdropTransition:Xu?BackdropTransition:void 0,renderBackdrop:Hw,renderDialog:Nw})})});Modal$1.displayName="Modal";const Modal$2=Object.assign(Modal$1,{Body:ModalBody,Header:ModalHeader$1,Title:ModalTitle,Footer:ModalFooter,Dialog:ModalDialog,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150});var extendStatics=function(o,a){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,d){c.__proto__=d}||function(c,d){for(var tt in d)Object.prototype.hasOwnProperty.call(d,tt)&&(c[tt]=d[tt])},extendStatics(o,a)};function __extends$1(o,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");extendStatics(o,a);function c(){this.constructor=o}o.prototype=a===null?Object.create(a):(c.prototype=a.prototype,new c)}var __assign=function(){return __assign=Object.assign||function(a){for(var c,d=1,tt=arguments.length;d=o.length&&(o=void 0),{value:o&&o[d++],done:!o}}};throw new TypeError(a?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,a){var c=typeof Symbol=="function"&&o[Symbol.iterator];if(!c)return o;var d=c.call(o),tt,nt=[],$a;try{for(;(a===void 0||a-- >0)&&!(tt=d.next()).done;)nt.push(tt.value)}catch(Ws){$a={error:Ws}}finally{try{tt&&!tt.done&&(c=d.return)&&c.call(d)}finally{if($a)throw $a.error}}return nt}function __spreadArray(o,a,c){if(c||arguments.length===2)for(var d=0,tt=a.length,nt;d0?charat(characters,--position):0,column--,character===10&&(column=1,line--),character}function next(){return character=position2||token(character)>3?"":" "}function escaping(o,a){for(;--a&&next()&&!(character<48||character>102||character>57&&character<65||character>70&&character<97););return slice$1(o,caret$1()+(a<6&&peek()==32&&next()==32))}function delimiter$1(o){for(;next();)switch(character){case o:return position;case 34:case 39:o!==34&&o!==39&&delimiter$1(character);break;case 40:o===41&&delimiter$1(o);break;case 92:next();break}return position}function commenter(o,a){for(;next()&&o+character!==57;)if(o+character===84&&peek()===47)break;return"/*"+slice$1(a,position-1)+"*"+from(o===47?o:next())}function identifier(o){for(;!token(peek());)next();return slice$1(o,position)}function compile$1(o){return dealloc(parse$5("",null,null,null,[""],o=alloc(o),0,[0],o))}function parse$5(o,a,c,d,tt,nt,$a,Ws,gu){for(var Su=0,$u=0,Iu=$a,Xu=0,r0=0,p0=0,y0=1,A0=1,$0=1,O0=0,L0="",V0=tt,F0=nt,u1=d,g1=L0;A0;)switch(p0=O0,O0=next()){case 40:if(p0!=108&&charat(g1,Iu-1)==58){indexof(g1+=replace$7(delimit(O0),"&","&\f"),"&\f",abs$1(Su?Ws[Su-1]:0))!=-1&&($0=-1);break}case 34:case 39:case 91:g1+=delimit(O0);break;case 9:case 10:case 13:case 32:g1+=whitespace$1(p0);break;case 92:g1+=escaping(caret$1()-1,7);continue;case 47:switch(peek()){case 42:case 47:append(comment(commenter(next(),caret$1()),a,c,gu),gu);break;default:g1+="/"}break;case 123*y0:Ws[Su++]=strlen(g1)*$0;case 125*y0:case 59:case 0:switch(O0){case 0:case 125:A0=0;case 59+$u:$0==-1&&(g1=replace$7(g1,/\f/g,"")),r0>0&&strlen(g1)-Iu&&append(r0>32?declaration(g1+";",d,c,Iu-1,gu):declaration(replace$7(g1," ","")+";",d,c,Iu-2,gu),gu);break;case 59:g1+=";";default:if(append(u1=ruleset(g1,a,c,Su,$u,tt,Ws,L0,V0=[],F0=[],Iu,nt),nt),O0===123)if($u===0)parse$5(g1,a,u1,u1,V0,nt,Iu,Ws,F0);else switch(Xu===99&&charat(g1,3)===110?100:Xu){case 100:case 108:case 109:case 115:parse$5(o,u1,u1,d&&append(ruleset(o,u1,u1,0,0,tt,Ws,L0,tt,V0=[],Iu,F0),F0),tt,F0,Iu,Ws,d?V0:F0);break;default:parse$5(g1,u1,u1,u1,[""],F0,0,Ws,F0)}}Su=$u=r0=0,y0=$0=1,L0=g1="",Iu=$a;break;case 58:Iu=1+strlen(g1),r0=p0;default:if(y0<1){if(O0==123)--y0;else if(O0==125&&y0++==0&&prev()==125)continue}switch(g1+=from(O0),O0*y0){case 38:$0=$u>0?1:(g1+="\f",-1);break;case 44:Ws[Su++]=(strlen(g1)-1)*$0,$0=1;break;case 64:peek()===45&&(g1+=delimit(next())),Xu=peek(),$u=Iu=strlen(L0=g1+=identifier(caret$1())),O0++;break;case 45:p0===45&&strlen(g1)==2&&(y0=0)}}return nt}function ruleset(o,a,c,d,tt,nt,$a,Ws,gu,Su,$u,Iu){for(var Xu=tt-1,r0=tt===0?nt:[""],p0=sizeof(r0),y0=0,A0=0,$0=0;y00?r0[O0]+" "+L0:replace$7(L0,/&\f/g,r0[O0])))&&(gu[$0++]=V0);return node$5(o,a,c,tt===0?RULESET:Ws,gu,Su,$u,Iu)}function comment(o,a,c,d){return node$5(o,a,c,COMMENT$1,from(char()),substr(o,2,-2),0,d)}function declaration(o,a,c,d,tt){return node$5(o,a,c,DECLARATION,substr(o,0,d),substr(o,d+1,-1),d,tt)}function prefix$1(o,a,c){switch(hash$9(o,a)){case 5103:return WEBKIT$2+"print-"+o+o;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return WEBKIT$2+o+o;case 4789:return MOZ+o+o;case 5349:case 4246:case 4810:case 6968:case 2756:return WEBKIT$2+o+MOZ+o+MS+o+o;case 5936:switch(charat(o,a+11)){case 114:return WEBKIT$2+o+MS+replace$7(o,/[svh]\w+-[tblr]{2}/,"tb")+o;case 108:return WEBKIT$2+o+MS+replace$7(o,/[svh]\w+-[tblr]{2}/,"tb-rl")+o;case 45:return WEBKIT$2+o+MS+replace$7(o,/[svh]\w+-[tblr]{2}/,"lr")+o}case 6828:case 4268:case 2903:return WEBKIT$2+o+MS+o+o;case 6165:return WEBKIT$2+o+MS+"flex-"+o+o;case 5187:return WEBKIT$2+o+replace$7(o,/(\w+).+(:[^]+)/,WEBKIT$2+"box-$1$2"+MS+"flex-$1$2")+o;case 5443:return WEBKIT$2+o+MS+"flex-item-"+replace$7(o,/flex-|-self/g,"")+(match$4(o,/flex-|baseline/)?"":MS+"grid-row-"+replace$7(o,/flex-|-self/g,""))+o;case 4675:return WEBKIT$2+o+MS+"flex-line-pack"+replace$7(o,/align-content|flex-|-self/g,"")+o;case 5548:return WEBKIT$2+o+MS+replace$7(o,"shrink","negative")+o;case 5292:return WEBKIT$2+o+MS+replace$7(o,"basis","preferred-size")+o;case 6060:return WEBKIT$2+"box-"+replace$7(o,"-grow","")+WEBKIT$2+o+MS+replace$7(o,"grow","positive")+o;case 4554:return WEBKIT$2+replace$7(o,/([^-])(transform)/g,"$1"+WEBKIT$2+"$2")+o;case 6187:return replace$7(replace$7(replace$7(o,/(zoom-|grab)/,WEBKIT$2+"$1"),/(image-set)/,WEBKIT$2+"$1"),o,"")+o;case 5495:case 3959:return replace$7(o,/(image-set\([^]*)/,WEBKIT$2+"$1$`$1");case 4968:return replace$7(replace$7(o,/(.+:)(flex-)?(.*)/,WEBKIT$2+"box-pack:$3"+MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+WEBKIT$2+o+o;case 4200:if(!match$4(o,/flex-|baseline/))return MS+"grid-column-align"+substr(o,a)+o;break;case 2592:case 3360:return MS+replace$7(o,"template-","")+o;case 4384:case 3616:return c&&c.some(function(d,tt){return a=tt,match$4(d.props,/grid-\w+-end/)})?~indexof(o+(c=c[a].value),"span",0)?o:MS+replace$7(o,"-start","")+o+MS+"grid-row-span:"+(~indexof(c,"span",0)?match$4(c,/\d+/):+match$4(c,/\d+/)-+match$4(o,/\d+/))+";":MS+replace$7(o,"-start","")+o;case 4896:case 4128:return c&&c.some(function(d){return match$4(d.props,/grid-\w+-start/)})?o:MS+replace$7(replace$7(o,"-end","-span"),"span ","")+o;case 4095:case 3583:case 4068:case 2532:return replace$7(o,/(.+)-inline(.+)/,WEBKIT$2+"$1$2")+o;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(strlen(o)-1-a>6)switch(charat(o,a+1)){case 109:if(charat(o,a+4)!==45)break;case 102:return replace$7(o,/(.+:)(.+)-([^]+)/,"$1"+WEBKIT$2+"$2-$3$1"+MOZ+(charat(o,a+3)==108?"$3":"$2-$3"))+o;case 115:return~indexof(o,"stretch",0)?prefix$1(replace$7(o,"stretch","fill-available"),a,c)+o:o}break;case 5152:case 5920:return replace$7(o,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(d,tt,nt,$a,Ws,gu,Su){return MS+tt+":"+nt+Su+($a?MS+tt+"-span:"+(Ws?gu:+gu-+nt)+Su:"")+o});case 4949:if(charat(o,a+6)===121)return replace$7(o,":",":"+WEBKIT$2)+o;break;case 6444:switch(charat(o,charat(o,14)===45?18:11)){case 120:return replace$7(o,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+WEBKIT$2+(charat(o,14)===45?"inline-":"")+"box$3$1"+WEBKIT$2+"$2$3$1"+MS+"$2box$3")+o;case 100:return replace$7(o,":",":"+MS)+o}break;case 5719:case 2647:case 2135:case 3927:case 2391:return replace$7(o,"scroll-","scroll-snap-")+o}return o}function serialize$5(o,a){for(var c="",d=0;d-1&&!o.return)switch(o.type){case DECLARATION:o.return=prefix$1(o.value,o.length,c);return;case KEYFRAMES:return serialize$5([copy$2(o,{value:replace$7(o.value,"@","@"+WEBKIT$2)})],d);case RULESET:if(o.length)return combine(c=o.props,function(tt){switch(match$4(tt,d=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":lift(copy$2(o,{props:[replace$7(tt,/:(read-\w+)/,":"+MOZ+"$1")]})),lift(copy$2(o,{props:[tt]})),assign$4(o,{props:filter$1(c,d)});break;case"::placeholder":lift(copy$2(o,{props:[replace$7(tt,/:(plac\w+)/,":"+WEBKIT$2+"input-$1")]})),lift(copy$2(o,{props:[replace$7(tt,/:(plac\w+)/,":"+MOZ+"$1")]})),lift(copy$2(o,{props:[replace$7(tt,/:(plac\w+)/,MS+"input-$1")]})),lift(copy$2(o,{props:[tt]})),assign$4(o,{props:filter$1(c,d)});break}return""})}}var unitlessKeys={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},define_process_env_default$4={},f$1=typeof process$1$4<"u"&&define_process_env_default$4!==void 0&&(define_process_env_default$4.REACT_APP_SC_ATTR||define_process_env_default$4.SC_ATTR)||"data-styled",m="active",y$1="data-styled-version",v="6.1.11",g$3=`/*!sc*/ +`,S$2=typeof window<"u"&&"HTMLElement"in window,w$2=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process$1$4<"u"&&define_process_env_default$4!==void 0&&define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY!==""?define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&define_process_env_default$4.REACT_APP_SC_DISABLE_SPEEDY:typeof process$1$4<"u"&&define_process_env_default$4!==void 0&&define_process_env_default$4.SC_DISABLE_SPEEDY!==void 0&&define_process_env_default$4.SC_DISABLE_SPEEDY!==""&&define_process_env_default$4.SC_DISABLE_SPEEDY!=="false"&&define_process_env_default$4.SC_DISABLE_SPEEDY),_$2=Object.freeze([]),C$3=Object.freeze({});function I$1(o,a,c){return c===void 0&&(c=C$3),o.theme!==c.theme&&o.theme||a||c.theme}var A$2=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),O$1=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,D$2=/(^-|-$)/g;function R$2(o){return o.replace(O$1,"-").replace(D$2,"")}var T$2=/(a)(d)/gi,k$2=52,j$4=function(o){return String.fromCharCode(o+(o>25?39:97))};function x$3(o){var a,c="";for(a=Math.abs(o);a>k$2;a=a/k$2|0)c=j$4(a%k$2)+c;return(j$4(a%k$2)+c).replace(T$2,"$1-$2")}var V$2,F$2=5381,M$2=function(o,a){for(var c=a.length;c;)o=33*o^a.charCodeAt(--c);return o},$$i=function(o){return M$2(F$2,o)};function z$2(o){return x$3($$i(o)>>>0)}function B$2(o){return o.displayName||o.name||"Component"}function L$3(o){return typeof o=="string"&&!0}var G$3=typeof Symbol=="function"&&Symbol.for,Y$2=G$3?Symbol.for("react.memo"):60115,W$7=G$3?Symbol.for("react.forward_ref"):60112,q$2={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H$3={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U$1={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J$1=((V$2={})[W$7]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V$2[Y$2]=U$1,V$2);function X$1(o){return("type"in(a=o)&&a.type.$$typeof)===Y$2?U$1:"$$typeof"in o?J$1[o.$$typeof]:q$2;var a}var Z$1=Object.defineProperty,K$6=Object.getOwnPropertyNames,Q$2=Object.getOwnPropertySymbols,ee$1=Object.getOwnPropertyDescriptor,te$1=Object.getPrototypeOf,ne$1=Object.prototype;function oe$1(o,a,c){if(typeof a!="string"){if(ne$1){var d=te$1(a);d&&d!==ne$1&&oe$1(o,d,c)}var tt=K$6(a);Q$2&&(tt=tt.concat(Q$2(a)));for(var nt=X$1(o),$a=X$1(a),Ws=0;Ws0?" Args: ".concat(a.join(", ")):""))}var fe$1=function(){function o(a){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=a}return o.prototype.indexOfGroup=function(a){for(var c=0,d=0;d=this.groupSizes.length){for(var d=this.groupSizes,tt=d.length,nt=tt;a>=nt;)if((nt<<=1)<0)throw he$1(16,"".concat(a));this.groupSizes=new Uint32Array(nt),this.groupSizes.set(d),this.length=nt;for(var $a=tt;$a=this.length||this.groupSizes[a]===0)return c;for(var d=this.groupSizes[a],tt=this.indexOfGroup(a),nt=tt+d,$a=tt;$a=0){var d=document.createTextNode(c);return this.element.insertBefore(d,this.nodes[a]||null),this.length++,!0}return!1},o.prototype.deleteRule=function(a){this.element.removeChild(this.nodes[a]),this.length--},o.prototype.getRule=function(a){return a0&&(A0+="".concat($0,","))}),gu+="".concat(p0).concat(y0,'{content:"').concat(A0,'"}').concat(g$3)},$u=0;$u0?".".concat(a):Xu},$u=gu.slice();$u.push(function(Xu){Xu.type===RULESET&&Xu.value.includes("&")&&(Xu.props[0]=Xu.props[0].replace(ke$1,c).replace(d,Su))}),$a.prefix&&$u.push(prefixer),$u.push(stringify$2);var Iu=function(Xu,r0,p0,y0){r0===void 0&&(r0=""),p0===void 0&&(p0=""),y0===void 0&&(y0="&"),a=y0,c=r0,d=new RegExp("\\".concat(c,"\\b"),"g");var A0=Xu.replace(je$1,""),$0=compile$1(p0||r0?"".concat(p0," ").concat(r0," { ").concat(A0," }"):A0);$a.namespace&&($0=xe$1($0,$a.namespace));var O0=[];return serialize$5($0,middleware($u.concat(rulesheet(function(L0){return O0.push(L0)})))),O0};return Iu.hash=gu.length?gu.reduce(function(Xu,r0){return r0.name||he$1(15),M$2(Xu,r0.name)},F$2).toString():"",Iu}var Fe$1=new Te$1,Me$1=Ve$1(),$e$1=React.createContext({shouldForwardProp:void 0,styleSheet:Fe$1,stylis:Me$1});$e$1.Consumer;React.createContext(void 0);function Le$1(){return reactExports.useContext($e$1)}var Ye$1=function(){function o(a,c){var d=this;this.inject=function(tt,nt){nt===void 0&&(nt=Me$1);var $a=d.name+nt.hash;tt.hasNameForId(d.id,$a)||tt.insertRules(d.id,$a,nt(d.rules,$a,"@keyframes"))},this.name=a,this.id="sc-keyframes-".concat(a),this.rules=c,ue$1(this,function(){throw he$1(12,String(d.name))})}return o.prototype.getName=function(a){return a===void 0&&(a=Me$1),this.name+a.hash},o}(),We$1=function(o){return o>="A"&&o<="Z"};function qe$1(o){for(var a="",c=0;c>>0);if(!c.hasNameForId(this.componentId,$a)){var Ws=d(nt,".".concat($a),void 0,this.componentId);c.insertRules(this.componentId,$a,Ws)}tt=ie$1(tt,$a),this.staticRulesId=$a}else{for(var gu=M$2(this.baseHash,d.hash),Su="",$u=0;$u>>0);c.hasNameForId(this.componentId,r0)||c.insertRules(this.componentId,r0,d(Su,".".concat(r0),void 0,this.componentId)),tt=ie$1(tt,r0)}}return tt},o}(),Qe$1=React.createContext(void 0);Qe$1.Consumer;var ot$1={};function st$1(o,a,c){var d=se$1(o),tt=o,nt=!L$3(o),$a=a.attrs,Ws=$a===void 0?_$2:$a,gu=a.componentId,Su=gu===void 0?function(V0,F0){var u1=typeof V0!="string"?"sc":R$2(V0);ot$1[u1]=(ot$1[u1]||0)+1;var g1="".concat(u1,"-").concat(z$2(v+u1+ot$1[u1]));return F0?"".concat(F0,"-").concat(g1):g1}(a.displayName,a.parentComponentId):gu,$u=a.displayName,Iu=$u===void 0?function(V0){return L$3(V0)?"styled.".concat(V0):"Styled(".concat(B$2(V0),")")}(o):$u,Xu=a.displayName&&a.componentId?"".concat(R$2(a.displayName),"-").concat(a.componentId):a.componentId||Su,r0=d&&tt.attrs?tt.attrs.concat(Ws).filter(Boolean):Ws,p0=a.shouldForwardProp;if(d&&tt.shouldForwardProp){var y0=tt.shouldForwardProp;if(a.shouldForwardProp){var A0=a.shouldForwardProp;p0=function(V0,F0){return y0(V0,F0)&&A0(V0,F0)}}else p0=y0}var $0=new Ke$1(c,Xu,d?tt.componentStyle:void 0);function O0(V0,F0){return function(u1,g1,E1){var B1=u1.attrs,lv=u1.componentStyle,j1=u1.defaultProps,r1=u1.foldedComponentIds,t1=u1.styledComponentId,D0=u1.target,Z0=React.useContext(Qe$1),f1=Le$1(),w1=u1.shouldForwardProp||f1.shouldForwardProp,m1=I$1(g1,Z0,j1)||C$3,c1=function(Q1,rv,D1){for(var ev,Mv=__assign(__assign({},rv),{className:void 0,theme:D1}),Zv=0;Zvo.$loaderSize}; height: ${o=>o.$loaderSize}; border: ${o=>o.$borderSize} solid #FFF; @@ -177,7 +177,7 @@ ${a.join(` &:hover { background-color: ${o=>o.$highlightColor}; } -`;function Button$2({onClick:o,text:a,width:c,isLoading:d,isDisabled:tt=!1,color:nt="#434546",disabledColor:$a="#4cfafc",highlightColor:Ys="#76f5f9",textColor:gu="#000000",fontSize:xu="0.875rem",lineHeight:$u="1.25rem",height:Iu="2.375rem",padding:Xu="0.625rem 0.75rem",borderRadius:i0="0.5rem"}){return jsxRuntimeExports.jsx(ButtonStyled,{onClick:o,$btnWidth:c??"",disabled:tt,$color:nt,$disabledColor:$a,$highlightColor:Ys,$textColor:gu,$fontSize:xu,$lineHeight:$u,$height:Iu,$padding:Xu,$borderRadius:i0,children:d?jsxRuntimeExports.jsx(Loading,{}):a})}const ModalWrapper$6=pt$1.div` +`;function Button$2({onClick:o,text:a,width:c,isLoading:d,isDisabled:tt=!1,color:nt="#434546",disabledColor:$a="#4cfafc",highlightColor:Ws="#76f5f9",textColor:gu="#000000",fontSize:Su="0.875rem",lineHeight:$u="1.25rem",height:Iu="2.375rem",padding:Xu="0.625rem 0.75rem",borderRadius:r0="0.5rem"}){return jsxRuntimeExports.jsx(ButtonStyled,{onClick:o,$btnWidth:c??"",disabled:tt,$color:nt,$disabledColor:$a,$highlightColor:Ws,$textColor:gu,$fontSize:Su,$lineHeight:$u,$height:Iu,$padding:Xu,$borderRadius:r0,children:d?jsxRuntimeExports.jsx(Loading,{}):a})}const ModalWrapper$6=pt$1.div` display: flex; flex-direction: column; justify-content: center; @@ -224,7 +224,7 @@ ${a.join(` margin-top: 0.75rem; } } -`;function StatusModal({show:o,closeModal:a,modalContent:c}){const d=translations.statusModal;return jsxRuntimeExports.jsx(Modal$2,{show:o,backdrop:"static",keyboard:!1,"aria-labelledby":"contained-modal-title-vcenter",centered:!0,children:jsxRuntimeExports.jsxs(ModalWrapper$6,{children:[jsxRuntimeExports.jsx("div",{children:c.error?jsxRuntimeExports.jsx(ForwardRef$2,{className:"error-icon"}):jsxRuntimeExports.jsx(ForwardRef$1,{className:"success-icon"})}),jsxRuntimeExports.jsx("div",{className:"modal-title",children:c.title}),jsxRuntimeExports.jsxs("div",{className:"container",children:[jsxRuntimeExports.jsx("div",{className:"modal-subtitle",children:c.message}),jsxRuntimeExports.jsx("div",{className:"button-wrapper",children:jsxRuntimeExports.jsx(Button$2,{width:"100%",text:d.buttonContinueText,onClick:a})})]})]})})}function interpolate(o,a){return o.replace(/{{(.*?)}}/g,(c,d)=>a[d.trim()]||"")}const t$5=translations.serverDown,ServerDownContext=reactExports.createContext(void 0),ServerDownProvider=({children:o})=>{const[a,c]=reactExports.useState(!1),d=getAppEndpointKey(),tt=()=>c(!0),nt=()=>c(!1),$a=async()=>{const Ys=new URL(d).href.replace(/\/$/,"");(await apiClient(tt).node().health({url:Ys})).data&&tt(),nt()};return jsxRuntimeExports.jsxs(ServerDownContext.Provider,{value:{showServerDownPopup:tt,hideServerDownPopup:nt},children:[o,jsxRuntimeExports.jsx(StatusModal,{closeModal:$a,modalContent:{title:t$5.popupTitle,message:interpolate(t$5.popupMessage,{nodeApiEndpoint:d??""}),error:!0},show:a})]})},useServerDown=()=>{const o=reactExports.useContext(ServerDownContext);if(!o)throw new Error(t$5.useHookComponentErrorText);return o},CalimeroLogo="/admin-dashboard/assets/calimero-logo-BYRMmiO8.svg",NavigationWrapper=pt$1.div` +`;function StatusModal({show:o,closeModal:a,modalContent:c}){const d=translations.statusModal;return jsxRuntimeExports.jsx(Modal$2,{show:o,backdrop:"static",keyboard:!1,"aria-labelledby":"contained-modal-title-vcenter",centered:!0,children:jsxRuntimeExports.jsxs(ModalWrapper$6,{children:[jsxRuntimeExports.jsx("div",{children:c.error?jsxRuntimeExports.jsx(ForwardRef$2,{className:"error-icon"}):jsxRuntimeExports.jsx(ForwardRef$1,{className:"success-icon"})}),jsxRuntimeExports.jsx("div",{className:"modal-title",children:c.title}),jsxRuntimeExports.jsxs("div",{className:"container",children:[jsxRuntimeExports.jsx("div",{className:"modal-subtitle",children:c.message}),jsxRuntimeExports.jsx("div",{className:"button-wrapper",children:jsxRuntimeExports.jsx(Button$2,{width:"100%",text:d.buttonContinueText,onClick:a})})]})]})})}function interpolate(o,a){return o.replace(/{{(.*?)}}/g,(c,d)=>a[d.trim()]||"")}const t$5=translations.serverDown,ServerDownContext=reactExports.createContext(void 0),ServerDownProvider=({children:o})=>{const[a,c]=reactExports.useState(!1),d=getAppEndpointKey(),tt=()=>c(!0),nt=()=>c(!1),$a=async()=>{const Ws=new URL(d).href.replace(/\/$/,"");(await apiClient(tt).node().health({url:Ws})).data&&tt(),nt()};return jsxRuntimeExports.jsxs(ServerDownContext.Provider,{value:{showServerDownPopup:tt,hideServerDownPopup:nt},children:[o,jsxRuntimeExports.jsx(StatusModal,{closeModal:$a,modalContent:{title:t$5.popupTitle,message:interpolate(t$5.popupMessage,{nodeApiEndpoint:d??""}),error:!0},show:a})]})},useServerDown=()=>{const o=reactExports.useContext(ServerDownContext);if(!o)throw new Error(t$5.useHookComponentErrorText);return o},CalimeroLogo="/admin-dashboard/assets/calimero-logo-BYRMmiO8.svg",NavigationWrapper=pt$1.div` background-color: #111111; width: fit-content; padding-left: 2rem; @@ -383,7 +383,7 @@ ${a.join(` .description-component { display: flex; } -`;function ContentCard({headerTitle:o,headerOptionText:a,headerOnOptionClick:c,headerSecondOptionText:d,headerOnSecondOptionClick:tt,headerDescription:nt,headerBackText:$a,headerOnBackClick:Ys,children:gu,descriptionComponent:xu,isOverflow:$u=!1}){return jsxRuntimeExports.jsxs(Container,{$isOverflow:$u,children:[(o||$a)&&jsxRuntimeExports.jsxs("div",{className:"header-option",children:[jsxRuntimeExports.jsxs("div",{className:"flex-wrapper",children:[o?jsxRuntimeExports.jsx("div",{className:"title",children:o}):jsxRuntimeExports.jsxs("div",{className:"header-back",children:[$a&&Ys&&jsxRuntimeExports.jsx(ForwardRef$5,{className:"arrow-icon-left",onClick:Ys}),$a]}),jsxRuntimeExports.jsxs("div",{className:"options-container",children:[tt&&jsxRuntimeExports.jsx(Button$2,{onClick:tt,text:d}),c&&jsxRuntimeExports.jsx(Button$2,{onClick:c,text:a})]})]}),nt&&jsxRuntimeExports.jsx("div",{className:"description",children:nt})]}),xu&&jsxRuntimeExports.jsx("div",{className:"description-component",children:xu}),jsxRuntimeExports.jsx("div",{className:"main-wrapper",children:gu})]})}const ListWrapper=pt$1.div` +`;function ContentCard({headerTitle:o,headerOptionText:a,headerOnOptionClick:c,headerSecondOptionText:d,headerOnSecondOptionClick:tt,headerDescription:nt,headerBackText:$a,headerOnBackClick:Ws,children:gu,descriptionComponent:Su,isOverflow:$u=!1}){return jsxRuntimeExports.jsxs(Container,{$isOverflow:$u,children:[(o||$a)&&jsxRuntimeExports.jsxs("div",{className:"header-option",children:[jsxRuntimeExports.jsxs("div",{className:"flex-wrapper",children:[o?jsxRuntimeExports.jsx("div",{className:"title",children:o}):jsxRuntimeExports.jsxs("div",{className:"header-back",children:[$a&&Ws&&jsxRuntimeExports.jsx(ForwardRef$5,{className:"arrow-icon-left",onClick:Ws}),$a]}),jsxRuntimeExports.jsxs("div",{className:"options-container",children:[tt&&jsxRuntimeExports.jsx(Button$2,{onClick:tt,text:d}),c&&jsxRuntimeExports.jsx(Button$2,{onClick:c,text:a})]})]}),nt&&jsxRuntimeExports.jsx("div",{className:"description",children:nt})]}),Su&&jsxRuntimeExports.jsx("div",{className:"description-component",children:Su}),jsxRuntimeExports.jsx("div",{className:"main-wrapper",children:gu})]})}const ListWrapper=pt$1.div` display: flex; flex-direction: column; flex: 1; @@ -451,7 +451,7 @@ ${a.join(` padding-bottom: 4px; } } -`,TableHeader=({tableHeaderItems:o})=>jsxRuntimeExports.jsx("div",{className:"header-items-grid",children:o.map((a,c)=>jsxRuntimeExports.jsx("div",{className:"header-item",children:a},c))});function ListTable(o){var a,c,d;return jsxRuntimeExports.jsxs(ListWrapper,{$numOfColumns:o.numOfColumns??0,$roundTopItem:o.roundTopItem,children:[o.listDescription&&jsxRuntimeExports.jsx("div",{className:"table-description",children:o.listDescription}),o.listHeaderItems&&((a=o.listHeaderItems)==null?void 0:a.length)>0&&jsxRuntimeExports.jsx(TableHeader,{tableHeaderItems:o.listHeaderItems}),o.error?jsxRuntimeExports.jsx("div",{className:"container",children:jsxRuntimeExports.jsx("div",{className:"error-text",children:o.error})}):jsxRuntimeExports.jsxs("div",{className:"list-items",children:[(c=o.listItems)==null?void 0:c.map((tt,nt)=>o.rowItem(tt,nt,o.listItems.length-1,o==null?void 0:o.onRowItemClick)),((d=o.listItems)==null?void 0:d.length)===0&&jsxRuntimeExports.jsx("div",{className:"no-items-text",children:o.noItemsText})]})]})}function useUncontrolledProp$1(o,a,c){const d=reactExports.useRef(o!==void 0),[tt,nt]=reactExports.useState(a),$a=o!==void 0,Ys=d.current;return d.current=$a,!$a&&Ys&&tt!==a&&nt(a),[$a?o:tt,reactExports.useCallback((...gu)=>{const[xu,...$u]=gu;let Iu=c==null?void 0:c(xu,...$u);return nt(xu),Iu},[c])]}function useForceUpdate(){const[,o]=reactExports.useReducer(a=>!a,!1);return o}function useEventListener(o,a,c,d=!1){const tt=useEventCallback(c);reactExports.useEffect(()=>{const nt=typeof o=="function"?o():o;return nt.addEventListener(a,tt,d),()=>nt.removeEventListener(a,tt,d)},[o])}const DropdownContext$1=reactExports.createContext(null);var has$5=Object.prototype.hasOwnProperty;function find$1(o,a,c){for(c of o.keys())if(dequal(c,a))return c}function dequal(o,a){var c,d,tt;if(o===a)return!0;if(o&&a&&(c=o.constructor)===a.constructor){if(c===Date)return o.getTime()===a.getTime();if(c===RegExp)return o.toString()===a.toString();if(c===Array){if((d=o.length)===a.length)for(;d--&&dequal(o[d],a[d]););return d===-1}if(c===Set){if(o.size!==a.size)return!1;for(d of o)if(tt=d,tt&&typeof tt=="object"&&(tt=find$1(a,tt),!tt)||!a.has(tt))return!1;return!0}if(c===Map){if(o.size!==a.size)return!1;for(d of o)if(tt=d[0],tt&&typeof tt=="object"&&(tt=find$1(a,tt),!tt)||!dequal(d[1],a.get(tt)))return!1;return!0}if(c===ArrayBuffer)o=new Uint8Array(o),a=new Uint8Array(a);else if(c===DataView){if((d=o.byteLength)===a.byteLength)for(;d--&&o.getInt8(d)===a.getInt8(d););return d===-1}if(ArrayBuffer.isView(o)){if((d=o.byteLength)===a.byteLength)for(;d--&&o[d]===a[d];);return d===-1}if(!c||typeof o=="object"){d=0;for(c in o)if(has$5.call(o,c)&&++d&&!has$5.call(a,c)||!(c in a)||!dequal(o[c],a[c]))return!1;return Object.keys(a).length===d}}return o!==o&&a!==a}function useSafeState(o){const a=useMounted();return[o[0],reactExports.useCallback(c=>{if(a())return o[1](c)},[a,o[1]])]}var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce(function(o,a){return o.concat([a+"-"+start,a+"-"+end])},[]),placements=[].concat(basePlacements,[auto]).reduce(function(o,a){return o.concat([a,a+"-"+start,a+"-"+end])},[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main$1="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main$1,afterMain,beforeWrite,write,afterWrite];function getBasePlacement(o){return o.split("-")[0]}function getWindow$1(o){if(o==null)return window;if(o.toString()!=="[object Window]"){var a=o.ownerDocument;return a&&a.defaultView||window}return o}function isElement$1(o){var a=getWindow$1(o).Element;return o instanceof a||o instanceof Element}function isHTMLElement$1(o){var a=getWindow$1(o).HTMLElement;return o instanceof a||o instanceof HTMLElement}function isShadowRoot$1(o){if(typeof ShadowRoot>"u")return!1;var a=getWindow$1(o).ShadowRoot;return o instanceof a||o instanceof ShadowRoot}var max$7=Math.max,min$6=Math.min,round$2=Math.round;function getUAString(){var o=navigator.userAgentData;return o!=null&&o.brands&&Array.isArray(o.brands)?o.brands.map(function(a){return a.brand+"/"+a.version}).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect$1(o,a,c){a===void 0&&(a=!1),c===void 0&&(c=!1);var d=o.getBoundingClientRect(),tt=1,nt=1;a&&isHTMLElement$1(o)&&(tt=o.offsetWidth>0&&round$2(d.width)/o.offsetWidth||1,nt=o.offsetHeight>0&&round$2(d.height)/o.offsetHeight||1);var $a=isElement$1(o)?getWindow$1(o):window,Ys=$a.visualViewport,gu=!isLayoutViewport()&&c,xu=(d.left+(gu&&Ys?Ys.offsetLeft:0))/tt,$u=(d.top+(gu&&Ys?Ys.offsetTop:0))/nt,Iu=d.width/tt,Xu=d.height/nt;return{width:Iu,height:Xu,top:$u,right:xu+Iu,bottom:$u+Xu,left:xu,x:xu,y:$u}}function getLayoutRect(o){var a=getBoundingClientRect$1(o),c=o.offsetWidth,d=o.offsetHeight;return Math.abs(a.width-c)<=1&&(c=a.width),Math.abs(a.height-d)<=1&&(d=a.height),{x:o.offsetLeft,y:o.offsetTop,width:c,height:d}}function contains$1(o,a){var c=a.getRootNode&&a.getRootNode();if(o.contains(a))return!0;if(c&&isShadowRoot$1(c)){var d=a;do{if(d&&o.isSameNode(d))return!0;d=d.parentNode||d.host}while(d)}return!1}function getNodeName$1(o){return o?(o.nodeName||"").toLowerCase():null}function getComputedStyle$2(o){return getWindow$1(o).getComputedStyle(o)}function isTableElement$1(o){return["table","td","th"].indexOf(getNodeName$1(o))>=0}function getDocumentElement$1(o){return((isElement$1(o)?o.ownerDocument:o.document)||window.document).documentElement}function getParentNode$1(o){return getNodeName$1(o)==="html"?o:o.assignedSlot||o.parentNode||(isShadowRoot$1(o)?o.host:null)||getDocumentElement$1(o)}function getTrueOffsetParent$1(o){return!isHTMLElement$1(o)||getComputedStyle$2(o).position==="fixed"?null:o.offsetParent}function getContainingBlock$1(o){var a=/firefox/i.test(getUAString()),c=/Trident/i.test(getUAString());if(c&&isHTMLElement$1(o)){var d=getComputedStyle$2(o);if(d.position==="fixed")return null}var tt=getParentNode$1(o);for(isShadowRoot$1(tt)&&(tt=tt.host);isHTMLElement$1(tt)&&["html","body"].indexOf(getNodeName$1(tt))<0;){var nt=getComputedStyle$2(tt);if(nt.transform!=="none"||nt.perspective!=="none"||nt.contain==="paint"||["transform","perspective"].indexOf(nt.willChange)!==-1||a&&nt.willChange==="filter"||a&&nt.filter&&nt.filter!=="none")return tt;tt=tt.parentNode}return null}function getOffsetParent$1(o){for(var a=getWindow$1(o),c=getTrueOffsetParent$1(o);c&&isTableElement$1(c)&&getComputedStyle$2(c).position==="static";)c=getTrueOffsetParent$1(c);return c&&(getNodeName$1(c)==="html"||getNodeName$1(c)==="body"&&getComputedStyle$2(c).position==="static")?a:c||getContainingBlock$1(o)||a}function getMainAxisFromPlacement(o){return["top","bottom"].indexOf(o)>=0?"x":"y"}function within(o,a,c){return max$7(o,min$6(a,c))}function withinMaxClamp(o,a,c){var d=within(o,a,c);return d>c?c:d}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(o){return Object.assign({},getFreshSideObject(),o)}function expandToHashMap(o,a){return a.reduce(function(c,d){return c[d]=o,c},{})}var toPaddingObject=function(a,c){return a=typeof a=="function"?a(Object.assign({},c.rects,{placement:c.placement})):a,mergePaddingObject(typeof a!="number"?a:expandToHashMap(a,basePlacements))};function arrow$2(o){var a,c=o.state,d=o.name,tt=o.options,nt=c.elements.arrow,$a=c.modifiersData.popperOffsets,Ys=getBasePlacement(c.placement),gu=getMainAxisFromPlacement(Ys),xu=[left,right].indexOf(Ys)>=0,$u=xu?"height":"width";if(!(!nt||!$a)){var Iu=toPaddingObject(tt.padding,c),Xu=getLayoutRect(nt),i0=gu==="y"?top:left,p0=gu==="y"?bottom:right,w0=c.rects.reference[$u]+c.rects.reference[gu]-$a[gu]-c.rects.popper[$u],A0=$a[gu]-c.rects.reference[gu],$0=getOffsetParent$1(nt),O0=$0?gu==="y"?$0.clientHeight||0:$0.clientWidth||0:0,L0=w0/2-A0/2,q0=Iu[i0],F0=O0-Xu[$u]-Iu[p0],u1=O0/2-Xu[$u]/2+L0,g1=within(q0,u1,F0),E1=gu;c.modifiersData[d]=(a={},a[E1]=g1,a.centerOffset=g1-u1,a)}}function effect$1(o){var a=o.state,c=o.options,d=c.element,tt=d===void 0?"[data-popper-arrow]":d;tt!=null&&(typeof tt=="string"&&(tt=a.elements.popper.querySelector(tt),!tt)||contains$1(a.elements.popper,tt)&&(a.elements.arrow=tt))}const arrow$3={name:"arrow",enabled:!0,phase:"main",fn:arrow$2,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(o){return o.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(o,a){var c=o.x,d=o.y,tt=a.devicePixelRatio||1;return{x:round$2(c*tt)/tt||0,y:round$2(d*tt)/tt||0}}function mapToStyles(o){var a,c=o.popper,d=o.popperRect,tt=o.placement,nt=o.variation,$a=o.offsets,Ys=o.position,gu=o.gpuAcceleration,xu=o.adaptive,$u=o.roundOffsets,Iu=o.isFixed,Xu=$a.x,i0=Xu===void 0?0:Xu,p0=$a.y,w0=p0===void 0?0:p0,A0=typeof $u=="function"?$u({x:i0,y:w0}):{x:i0,y:w0};i0=A0.x,w0=A0.y;var $0=$a.hasOwnProperty("x"),O0=$a.hasOwnProperty("y"),L0=left,q0=top,F0=window;if(xu){var u1=getOffsetParent$1(c),g1="clientHeight",E1="clientWidth";if(u1===getWindow$1(c)&&(u1=getDocumentElement$1(c),getComputedStyle$2(u1).position!=="static"&&Ys==="absolute"&&(g1="scrollHeight",E1="scrollWidth")),u1=u1,tt===top||(tt===left||tt===right)&&nt===end){q0=bottom;var B1=Iu&&u1===F0&&F0.visualViewport?F0.visualViewport.height:u1[g1];w0-=B1-d.height,w0*=gu?1:-1}if(tt===left||(tt===top||tt===bottom)&&nt===end){L0=right;var lv=Iu&&u1===F0&&F0.visualViewport?F0.visualViewport.width:u1[E1];i0-=lv-d.width,i0*=gu?1:-1}}var j1=Object.assign({position:Ys},xu&&unsetSides),r1=$u===!0?roundOffsetsByDPR({x:i0,y:w0},getWindow$1(c)):{x:i0,y:w0};if(i0=r1.x,w0=r1.y,gu){var t1;return Object.assign({},j1,(t1={},t1[q0]=O0?"0":"",t1[L0]=$0?"0":"",t1.transform=(F0.devicePixelRatio||1)<=1?"translate("+i0+"px, "+w0+"px)":"translate3d("+i0+"px, "+w0+"px, 0)",t1))}return Object.assign({},j1,(a={},a[q0]=O0?w0+"px":"",a[L0]=$0?i0+"px":"",a.transform="",a))}function computeStyles(o){var a=o.state,c=o.options,d=c.gpuAcceleration,tt=d===void 0?!0:d,nt=c.adaptive,$a=nt===void 0?!0:nt,Ys=c.roundOffsets,gu=Ys===void 0?!0:Ys,xu={placement:getBasePlacement(a.placement),variation:getVariation(a.placement),popper:a.elements.popper,popperRect:a.rects.popper,gpuAcceleration:tt,isFixed:a.options.strategy==="fixed"};a.modifiersData.popperOffsets!=null&&(a.styles.popper=Object.assign({},a.styles.popper,mapToStyles(Object.assign({},xu,{offsets:a.modifiersData.popperOffsets,position:a.options.strategy,adaptive:$a,roundOffsets:gu})))),a.modifiersData.arrow!=null&&(a.styles.arrow=Object.assign({},a.styles.arrow,mapToStyles(Object.assign({},xu,{offsets:a.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:gu})))),a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-placement":a.placement})}const computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}};var passive={passive:!0};function effect(o){var a=o.state,c=o.instance,d=o.options,tt=d.scroll,nt=tt===void 0?!0:tt,$a=d.resize,Ys=$a===void 0?!0:$a,gu=getWindow$1(a.elements.popper),xu=[].concat(a.scrollParents.reference,a.scrollParents.popper);return nt&&xu.forEach(function($u){$u.addEventListener("scroll",c.update,passive)}),Ys&&gu.addEventListener("resize",c.update,passive),function(){nt&&xu.forEach(function($u){$u.removeEventListener("scroll",c.update,passive)}),Ys&&gu.removeEventListener("resize",c.update,passive)}}const eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect,data:{}};var hash$8={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement$1(o){return o.replace(/left|right|bottom|top/g,function(a){return hash$8[a]})}var hash$7={start:"end",end:"start"};function getOppositeVariationPlacement(o){return o.replace(/start|end/g,function(a){return hash$7[a]})}function getWindowScroll(o){var a=getWindow$1(o),c=a.pageXOffset,d=a.pageYOffset;return{scrollLeft:c,scrollTop:d}}function getWindowScrollBarX$1(o){return getBoundingClientRect$1(getDocumentElement$1(o)).left+getWindowScroll(o).scrollLeft}function getViewportRect$1(o,a){var c=getWindow$1(o),d=getDocumentElement$1(o),tt=c.visualViewport,nt=d.clientWidth,$a=d.clientHeight,Ys=0,gu=0;if(tt){nt=tt.width,$a=tt.height;var xu=isLayoutViewport();(xu||!xu&&a==="fixed")&&(Ys=tt.offsetLeft,gu=tt.offsetTop)}return{width:nt,height:$a,x:Ys+getWindowScrollBarX$1(o),y:gu}}function getDocumentRect$1(o){var a,c=getDocumentElement$1(o),d=getWindowScroll(o),tt=(a=o.ownerDocument)==null?void 0:a.body,nt=max$7(c.scrollWidth,c.clientWidth,tt?tt.scrollWidth:0,tt?tt.clientWidth:0),$a=max$7(c.scrollHeight,c.clientHeight,tt?tt.scrollHeight:0,tt?tt.clientHeight:0),Ys=-d.scrollLeft+getWindowScrollBarX$1(o),gu=-d.scrollTop;return getComputedStyle$2(tt||c).direction==="rtl"&&(Ys+=max$7(c.clientWidth,tt?tt.clientWidth:0)-nt),{width:nt,height:$a,x:Ys,y:gu}}function isScrollParent(o){var a=getComputedStyle$2(o),c=a.overflow,d=a.overflowX,tt=a.overflowY;return/auto|scroll|overlay|hidden/.test(c+tt+d)}function getScrollParent(o){return["html","body","#document"].indexOf(getNodeName$1(o))>=0?o.ownerDocument.body:isHTMLElement$1(o)&&isScrollParent(o)?o:getScrollParent(getParentNode$1(o))}function listScrollParents(o,a){var c;a===void 0&&(a=[]);var d=getScrollParent(o),tt=d===((c=o.ownerDocument)==null?void 0:c.body),nt=getWindow$1(d),$a=tt?[nt].concat(nt.visualViewport||[],isScrollParent(d)?d:[]):d,Ys=a.concat($a);return tt?Ys:Ys.concat(listScrollParents(getParentNode$1($a)))}function rectToClientRect$1(o){return Object.assign({},o,{left:o.x,top:o.y,right:o.x+o.width,bottom:o.y+o.height})}function getInnerBoundingClientRect$1(o,a){var c=getBoundingClientRect$1(o,!1,a==="fixed");return c.top=c.top+o.clientTop,c.left=c.left+o.clientLeft,c.bottom=c.top+o.clientHeight,c.right=c.left+o.clientWidth,c.width=o.clientWidth,c.height=o.clientHeight,c.x=c.left,c.y=c.top,c}function getClientRectFromMixedType(o,a,c){return a===viewport?rectToClientRect$1(getViewportRect$1(o,c)):isElement$1(a)?getInnerBoundingClientRect$1(a,c):rectToClientRect$1(getDocumentRect$1(getDocumentElement$1(o)))}function getClippingParents(o){var a=listScrollParents(getParentNode$1(o)),c=["absolute","fixed"].indexOf(getComputedStyle$2(o).position)>=0,d=c&&isHTMLElement$1(o)?getOffsetParent$1(o):o;return isElement$1(d)?a.filter(function(tt){return isElement$1(tt)&&contains$1(tt,d)&&getNodeName$1(tt)!=="body"}):[]}function getClippingRect$1(o,a,c,d){var tt=a==="clippingParents"?getClippingParents(o):[].concat(a),nt=[].concat(tt,[c]),$a=nt[0],Ys=nt.reduce(function(gu,xu){var $u=getClientRectFromMixedType(o,xu,d);return gu.top=max$7($u.top,gu.top),gu.right=min$6($u.right,gu.right),gu.bottom=min$6($u.bottom,gu.bottom),gu.left=max$7($u.left,gu.left),gu},getClientRectFromMixedType(o,$a,d));return Ys.width=Ys.right-Ys.left,Ys.height=Ys.bottom-Ys.top,Ys.x=Ys.left,Ys.y=Ys.top,Ys}function computeOffsets(o){var a=o.reference,c=o.element,d=o.placement,tt=d?getBasePlacement(d):null,nt=d?getVariation(d):null,$a=a.x+a.width/2-c.width/2,Ys=a.y+a.height/2-c.height/2,gu;switch(tt){case top:gu={x:$a,y:a.y-c.height};break;case bottom:gu={x:$a,y:a.y+a.height};break;case right:gu={x:a.x+a.width,y:Ys};break;case left:gu={x:a.x-c.width,y:Ys};break;default:gu={x:a.x,y:a.y}}var xu=tt?getMainAxisFromPlacement(tt):null;if(xu!=null){var $u=xu==="y"?"height":"width";switch(nt){case start:gu[xu]=gu[xu]-(a[$u]/2-c[$u]/2);break;case end:gu[xu]=gu[xu]+(a[$u]/2-c[$u]/2);break}}return gu}function detectOverflow$1(o,a){a===void 0&&(a={});var c=a,d=c.placement,tt=d===void 0?o.placement:d,nt=c.strategy,$a=nt===void 0?o.strategy:nt,Ys=c.boundary,gu=Ys===void 0?clippingParents:Ys,xu=c.rootBoundary,$u=xu===void 0?viewport:xu,Iu=c.elementContext,Xu=Iu===void 0?popper:Iu,i0=c.altBoundary,p0=i0===void 0?!1:i0,w0=c.padding,A0=w0===void 0?0:w0,$0=mergePaddingObject(typeof A0!="number"?A0:expandToHashMap(A0,basePlacements)),O0=Xu===popper?reference:popper,L0=o.rects.popper,q0=o.elements[p0?O0:Xu],F0=getClippingRect$1(isElement$1(q0)?q0:q0.contextElement||getDocumentElement$1(o.elements.popper),gu,$u,$a),u1=getBoundingClientRect$1(o.elements.reference),g1=computeOffsets({reference:u1,element:L0,strategy:"absolute",placement:tt}),E1=rectToClientRect$1(Object.assign({},L0,g1)),B1=Xu===popper?E1:u1,lv={top:F0.top-B1.top+$0.top,bottom:B1.bottom-F0.bottom+$0.bottom,left:F0.left-B1.left+$0.left,right:B1.right-F0.right+$0.right},j1=o.modifiersData.offset;if(Xu===popper&&j1){var r1=j1[tt];Object.keys(lv).forEach(function(t1){var D0=[right,bottom].indexOf(t1)>=0?1:-1,Z0=[top,bottom].indexOf(t1)>=0?"y":"x";lv[t1]+=r1[Z0]*D0})}return lv}function computeAutoPlacement(o,a){a===void 0&&(a={});var c=a,d=c.placement,tt=c.boundary,nt=c.rootBoundary,$a=c.padding,Ys=c.flipVariations,gu=c.allowedAutoPlacements,xu=gu===void 0?placements:gu,$u=getVariation(d),Iu=$u?Ys?variationPlacements:variationPlacements.filter(function(p0){return getVariation(p0)===$u}):basePlacements,Xu=Iu.filter(function(p0){return xu.indexOf(p0)>=0});Xu.length===0&&(Xu=Iu);var i0=Xu.reduce(function(p0,w0){return p0[w0]=detectOverflow$1(o,{placement:w0,boundary:tt,rootBoundary:nt,padding:$a})[getBasePlacement(w0)],p0},{});return Object.keys(i0).sort(function(p0,w0){return i0[p0]-i0[w0]})}function getExpandedFallbackPlacements(o){if(getBasePlacement(o)===auto)return[];var a=getOppositePlacement$1(o);return[getOppositeVariationPlacement(o),a,getOppositeVariationPlacement(a)]}function flip$2(o){var a=o.state,c=o.options,d=o.name;if(!a.modifiersData[d]._skip){for(var tt=c.mainAxis,nt=tt===void 0?!0:tt,$a=c.altAxis,Ys=$a===void 0?!0:$a,gu=c.fallbackPlacements,xu=c.padding,$u=c.boundary,Iu=c.rootBoundary,Xu=c.altBoundary,i0=c.flipVariations,p0=i0===void 0?!0:i0,w0=c.allowedAutoPlacements,A0=a.options.placement,$0=getBasePlacement(A0),O0=$0===A0,L0=gu||(O0||!p0?[getOppositePlacement$1(A0)]:getExpandedFallbackPlacements(A0)),q0=[A0].concat(L0).reduce(function(O1,Q1){return O1.concat(getBasePlacement(Q1)===auto?computeAutoPlacement(a,{placement:Q1,boundary:$u,rootBoundary:Iu,padding:xu,flipVariations:p0,allowedAutoPlacements:w0}):Q1)},[]),F0=a.rects.reference,u1=a.rects.popper,g1=new Map,E1=!0,B1=q0[0],lv=0;lv=0,Z0=D0?"width":"height",f1=detectOverflow$1(a,{placement:j1,boundary:$u,rootBoundary:Iu,altBoundary:Xu,padding:xu}),w1=D0?t1?right:left:t1?bottom:top;F0[Z0]>u1[Z0]&&(w1=getOppositePlacement$1(w1));var m1=getOppositePlacement$1(w1),c1=[];if(nt&&c1.push(f1[r1]<=0),Ys&&c1.push(f1[w1]<=0,f1[m1]<=0),c1.every(function(O1){return O1})){B1=j1,E1=!1;break}g1.set(j1,c1)}if(E1)for(var G0=p0?3:1,o1=function(Q1){var rv=q0.find(function(D1){var ev=g1.get(D1);if(ev)return ev.slice(0,Q1).every(function(Mv){return Mv})});if(rv)return B1=rv,"break"},d1=G0;d1>0;d1--){var R1=o1(d1);if(R1==="break")break}a.placement!==B1&&(a.modifiersData[d]._skip=!0,a.placement=B1,a.reset=!0)}}const flip$3={name:"flip",enabled:!0,phase:"main",fn:flip$2,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(o,a,c){return c===void 0&&(c={x:0,y:0}),{top:o.top-a.height-c.y,right:o.right-a.width+c.x,bottom:o.bottom-a.height+c.y,left:o.left-a.width-c.x}}function isAnySideFullyClipped(o){return[top,right,bottom,left].some(function(a){return o[a]>=0})}function hide(o){var a=o.state,c=o.name,d=a.rects.reference,tt=a.rects.popper,nt=a.modifiersData.preventOverflow,$a=detectOverflow$1(a,{elementContext:"reference"}),Ys=detectOverflow$1(a,{altBoundary:!0}),gu=getSideOffsets($a,d),xu=getSideOffsets(Ys,tt,nt),$u=isAnySideFullyClipped(gu),Iu=isAnySideFullyClipped(xu);a.modifiersData[c]={referenceClippingOffsets:gu,popperEscapeOffsets:xu,isReferenceHidden:$u,hasPopperEscaped:Iu},a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-reference-hidden":$u,"data-popper-escaped":Iu})}const hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(o,a,c){var d=getBasePlacement(o),tt=[left,top].indexOf(d)>=0?-1:1,nt=typeof c=="function"?c(Object.assign({},a,{placement:o})):c,$a=nt[0],Ys=nt[1];return $a=$a||0,Ys=(Ys||0)*tt,[left,right].indexOf(d)>=0?{x:Ys,y:$a}:{x:$a,y:Ys}}function offset$2(o){var a=o.state,c=o.options,d=o.name,tt=c.offset,nt=tt===void 0?[0,0]:tt,$a=placements.reduce(function($u,Iu){return $u[Iu]=distanceAndSkiddingToXY(Iu,a.rects,nt),$u},{}),Ys=$a[a.placement],gu=Ys.x,xu=Ys.y;a.modifiersData.popperOffsets!=null&&(a.modifiersData.popperOffsets.x+=gu,a.modifiersData.popperOffsets.y+=xu),a.modifiersData[d]=$a}const offset$3={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset$2};function popperOffsets(o){var a=o.state,c=o.name;a.modifiersData[c]=computeOffsets({reference:a.rects.reference,element:a.rects.popper,strategy:"absolute",placement:a.placement})}const popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(o){return o==="x"?"y":"x"}function preventOverflow(o){var a=o.state,c=o.options,d=o.name,tt=c.mainAxis,nt=tt===void 0?!0:tt,$a=c.altAxis,Ys=$a===void 0?!1:$a,gu=c.boundary,xu=c.rootBoundary,$u=c.altBoundary,Iu=c.padding,Xu=c.tether,i0=Xu===void 0?!0:Xu,p0=c.tetherOffset,w0=p0===void 0?0:p0,A0=detectOverflow$1(a,{boundary:gu,rootBoundary:xu,padding:Iu,altBoundary:$u}),$0=getBasePlacement(a.placement),O0=getVariation(a.placement),L0=!O0,q0=getMainAxisFromPlacement($0),F0=getAltAxis(q0),u1=a.modifiersData.popperOffsets,g1=a.rects.reference,E1=a.rects.popper,B1=typeof w0=="function"?w0(Object.assign({},a.rects,{placement:a.placement})):w0,lv=typeof B1=="number"?{mainAxis:B1,altAxis:B1}:Object.assign({mainAxis:0,altAxis:0},B1),j1=a.modifiersData.offset?a.modifiersData.offset[a.placement]:null,r1={x:0,y:0};if(u1){if(nt){var t1,D0=q0==="y"?top:left,Z0=q0==="y"?bottom:right,f1=q0==="y"?"height":"width",w1=u1[q0],m1=w1+A0[D0],c1=w1-A0[Z0],G0=i0?-E1[f1]/2:0,o1=O0===start?g1[f1]:E1[f1],d1=O0===start?-E1[f1]:-g1[f1],R1=a.elements.arrow,O1=i0&&R1?getLayoutRect(R1):{width:0,height:0},Q1=a.modifiersData["arrow#persistent"]?a.modifiersData["arrow#persistent"].padding:getFreshSideObject(),rv=Q1[D0],D1=Q1[Z0],ev=within(0,g1[f1],O1[f1]),Mv=L0?g1[f1]/2-G0-ev-rv-lv.mainAxis:o1-ev-rv-lv.mainAxis,Zv=L0?-g1[f1]/2+G0+ev+D1+lv.mainAxis:d1+ev+D1+lv.mainAxis,fv=a.elements.arrow&&getOffsetParent$1(a.elements.arrow),cv=fv?q0==="y"?fv.clientTop||0:fv.clientLeft||0:0,ly=(t1=j1==null?void 0:j1[q0])!=null?t1:0,Cy=w1+Mv-ly-cv,Ly=w1+Zv-ly,Hy=within(i0?min$6(m1,Cy):m1,w1,i0?max$7(c1,Ly):c1);u1[q0]=Hy,r1[q0]=Hy-w1}if(Ys){var t2,C2=q0==="x"?top:left,Dy=q0==="x"?bottom:right,jw=u1[F0],pw=F0==="y"?"height":"width",vw=jw+A0[C2],Hw=jw-A0[Dy],uw=[top,left].indexOf($0)!==-1,Nw=(t2=j1==null?void 0:j1[F0])!=null?t2:0,lw=uw?vw:jw-g1[pw]-E1[pw]-Nw+lv.altAxis,Lw=uw?jw+g1[pw]+E1[pw]-Nw-lv.altAxis:Hw,zw=i0&&uw?withinMaxClamp(lw,jw,Lw):within(i0?lw:vw,jw,i0?Lw:Hw);u1[F0]=zw,r1[F0]=zw-jw}a.modifiersData[d]=r1}}const preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(o){return{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}}function getNodeScroll$1(o){return o===getWindow$1(o)||!isHTMLElement$1(o)?getWindowScroll(o):getHTMLElementScroll(o)}function isElementScaled(o){var a=o.getBoundingClientRect(),c=round$2(a.width)/o.offsetWidth||1,d=round$2(a.height)/o.offsetHeight||1;return c!==1||d!==1}function getCompositeRect(o,a,c){c===void 0&&(c=!1);var d=isHTMLElement$1(a),tt=isHTMLElement$1(a)&&isElementScaled(a),nt=getDocumentElement$1(a),$a=getBoundingClientRect$1(o,tt,c),Ys={scrollLeft:0,scrollTop:0},gu={x:0,y:0};return(d||!d&&!c)&&((getNodeName$1(a)!=="body"||isScrollParent(nt))&&(Ys=getNodeScroll$1(a)),isHTMLElement$1(a)?(gu=getBoundingClientRect$1(a,!0),gu.x+=a.clientLeft,gu.y+=a.clientTop):nt&&(gu.x=getWindowScrollBarX$1(nt))),{x:$a.left+Ys.scrollLeft-gu.x,y:$a.top+Ys.scrollTop-gu.y,width:$a.width,height:$a.height}}function order(o){var a=new Map,c=new Set,d=[];o.forEach(function(nt){a.set(nt.name,nt)});function tt(nt){c.add(nt.name);var $a=[].concat(nt.requires||[],nt.requiresIfExists||[]);$a.forEach(function(Ys){if(!c.has(Ys)){var gu=a.get(Ys);gu&&tt(gu)}}),d.push(nt)}return o.forEach(function(nt){c.has(nt.name)||tt(nt)}),d}function orderModifiers(o){var a=order(o);return modifierPhases.reduce(function(c,d){return c.concat(a.filter(function(tt){return tt.phase===d}))},[])}function debounce(o){var a;return function(){return a||(a=new Promise(function(c){Promise.resolve().then(function(){a=void 0,c(o())})})),a}}function mergeByName(o){var a=o.reduce(function(c,d){var tt=c[d.name];return c[d.name]=tt?Object.assign({},tt,d,{options:Object.assign({},tt.options,d.options),data:Object.assign({},tt.data,d.data)}):d,c},{});return Object.keys(a).map(function(c){return a[c]})}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var o=arguments.length,a=new Array(o),c=0;c=0)continue;c[d]=o[d]}return c}const disabledApplyStylesModifier={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},ariaDescribedByModifier={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:({state:o})=>()=>{const{reference:a,popper:c}=o.elements;if("removeAttribute"in a){const d=(a.getAttribute("aria-describedby")||"").split(",").filter(tt=>tt.trim()!==c.id);d.length?a.setAttribute("aria-describedby",d.join(",")):a.removeAttribute("aria-describedby")}},fn:({state:o})=>{var a;const{popper:c,reference:d}=o.elements,tt=(a=c.getAttribute("role"))==null?void 0:a.toLowerCase();if(c.id&&tt==="tooltip"&&"setAttribute"in d){const nt=d.getAttribute("aria-describedby");if(nt&&nt.split(",").indexOf(c.id)!==-1)return;d.setAttribute("aria-describedby",nt?`${nt},${c.id}`:c.id)}}},EMPTY_MODIFIERS=[];function usePopper(o,a,c={}){let{enabled:d=!0,placement:tt="bottom",strategy:nt="absolute",modifiers:$a=EMPTY_MODIFIERS}=c,Ys=_objectWithoutPropertiesLoose$4(c,_excluded$4);const gu=reactExports.useRef($a),xu=reactExports.useRef(),$u=reactExports.useCallback(()=>{var A0;(A0=xu.current)==null||A0.update()},[]),Iu=reactExports.useCallback(()=>{var A0;(A0=xu.current)==null||A0.forceUpdate()},[]),[Xu,i0]=useSafeState(reactExports.useState({placement:tt,update:$u,forceUpdate:Iu,attributes:{},styles:{popper:{},arrow:{}}})),p0=reactExports.useMemo(()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:({state:A0})=>{const $0={},O0={};Object.keys(A0.elements).forEach(L0=>{$0[L0]=A0.styles[L0],O0[L0]=A0.attributes[L0]}),i0({state:A0,styles:$0,attributes:O0,update:$u,forceUpdate:Iu,placement:A0.placement})}}),[$u,Iu,i0]),w0=reactExports.useMemo(()=>(dequal(gu.current,$a)||(gu.current=$a),gu.current),[$a]);return reactExports.useEffect(()=>{!xu.current||!d||xu.current.setOptions({placement:tt,strategy:nt,modifiers:[...w0,p0,disabledApplyStylesModifier]})},[nt,tt,p0,d,w0]),reactExports.useEffect(()=>{if(!(!d||o==null||a==null))return xu.current=createPopper(o,a,Object.assign({},Ys,{placement:tt,strategy:nt,modifiers:[...w0,ariaDescribedByModifier,p0]})),()=>{xu.current!=null&&(xu.current.destroy(),xu.current=void 0,i0(A0=>Object.assign({},A0,{attributes:{},styles:{popper:{}}})))}},[d,o,a]),Xu}var warning=function(){},warning_1=warning;const warning$1=getDefaultExportFromCjs$1(warning_1),noop$9=()=>{};function isLeftClickEvent(o){return o.button===0}function isModifiedEvent(o){return!!(o.metaKey||o.altKey||o.ctrlKey||o.shiftKey)}const getRefTarget=o=>o&&("current"in o?o.current:o),InitialTriggerEvents={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};function useClickOutside(o,a=noop$9,{disabled:c,clickTrigger:d="click"}={}){const tt=reactExports.useRef(!1),nt=reactExports.useRef(!1),$a=reactExports.useCallback(xu=>{const $u=getRefTarget(o);warning$1(!!$u,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),tt.current=!$u||isModifiedEvent(xu)||!isLeftClickEvent(xu)||!!contains$2($u,xu.target)||nt.current,nt.current=!1},[o]),Ys=useEventCallback(xu=>{const $u=getRefTarget(o);$u&&contains$2($u,xu.target)&&(nt.current=!0)}),gu=useEventCallback(xu=>{tt.current||a(xu)});reactExports.useEffect(()=>{var xu,$u;if(c||o==null)return;const Iu=ownerDocument(getRefTarget(o)),Xu=Iu.defaultView||window;let i0=(xu=Xu.event)!=null?xu:($u=Xu.parent)==null?void 0:$u.event,p0=null;InitialTriggerEvents[d]&&(p0=listen(Iu,InitialTriggerEvents[d],Ys,!0));const w0=listen(Iu,d,$a,!0),A0=listen(Iu,d,O0=>{if(O0===i0){i0=void 0;return}gu(O0)});let $0=[];return"ontouchstart"in Iu.documentElement&&($0=[].slice.call(Iu.body.children).map(O0=>listen(O0,"mousemove",noop$9))),()=>{p0==null||p0(),w0(),A0(),$0.forEach(O0=>O0())}},[o,c,d,$a,Ys,gu])}function toModifierMap(o){const a={};return Array.isArray(o)?(o==null||o.forEach(c=>{a[c.name]=c}),a):o||a}function toModifierArray(o={}){return Array.isArray(o)?o:Object.keys(o).map(a=>(o[a].name=a,o[a]))}function mergeOptionsWithPopperConfig({enabled:o,enableEvents:a,placement:c,flip:d,offset:tt,fixed:nt,containerPadding:$a,arrowElement:Ys,popperConfig:gu={}}){var xu,$u,Iu,Xu,i0;const p0=toModifierMap(gu.modifiers);return Object.assign({},gu,{placement:c,enabled:o,strategy:nt?"fixed":gu.strategy,modifiers:toModifierArray(Object.assign({},p0,{eventListeners:{enabled:a,options:(xu=p0.eventListeners)==null?void 0:xu.options},preventOverflow:Object.assign({},p0.preventOverflow,{options:$a?Object.assign({padding:$a},($u=p0.preventOverflow)==null?void 0:$u.options):(Iu=p0.preventOverflow)==null?void 0:Iu.options}),offset:{options:Object.assign({offset:tt},(Xu=p0.offset)==null?void 0:Xu.options)},arrow:Object.assign({},p0.arrow,{enabled:!!Ys,options:Object.assign({},(i0=p0.arrow)==null?void 0:i0.options,{element:Ys})}),flip:Object.assign({enabled:!!d},p0.flip)}))})}const _excluded$3=["children","usePopper"];function _objectWithoutPropertiesLoose$3(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}const noop$8=()=>{};function useDropdownMenu(o={}){const a=reactExports.useContext(DropdownContext$1),[c,d]=useCallbackRef(),tt=reactExports.useRef(!1),{flip:nt,offset:$a,rootCloseEvent:Ys,fixed:gu=!1,placement:xu,popperConfig:$u={},enableEventListeners:Iu=!0,usePopper:Xu=!!a}=o,i0=(a==null?void 0:a.show)==null?!!o.show:a.show;i0&&!tt.current&&(tt.current=!0);const p0=u1=>{a==null||a.toggle(!1,u1)},{placement:w0,setMenu:A0,menuElement:$0,toggleElement:O0}=a||{},L0=usePopper(O0,$0,mergeOptionsWithPopperConfig({placement:xu||w0||"bottom-start",enabled:Xu,enableEvents:Iu??i0,offset:$a,flip:nt,fixed:gu,arrowElement:c,popperConfig:$u})),q0=Object.assign({ref:A0||noop$8,"aria-labelledby":O0==null?void 0:O0.id},L0.attributes.popper,{style:L0.styles.popper}),F0={show:i0,placement:w0,hasShown:tt.current,toggle:a==null?void 0:a.toggle,popper:Xu?L0:null,arrowProps:Xu?Object.assign({ref:d},L0.attributes.arrow,{style:L0.styles.arrow}):{}};return useClickOutside($0,p0,{clickTrigger:Ys,disabled:!i0}),[q0,F0]}function DropdownMenu$1(o){let{children:a,usePopper:c=!0}=o,d=_objectWithoutPropertiesLoose$3(o,_excluded$3);const[tt,nt]=useDropdownMenu(Object.assign({},d,{usePopper:c}));return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:a(tt,nt)})}DropdownMenu$1.displayName="DropdownMenu";const $b5e257d569688ac6$var$defaultContext={prefix:String(Math.round(Math.random()*1e10)),current:0},$b5e257d569688ac6$var$SSRContext=React.createContext($b5e257d569688ac6$var$defaultContext),$b5e257d569688ac6$var$IsSSRContext=React.createContext(!1);let $b5e257d569688ac6$var$canUseDOM=!!(typeof window<"u"&&window.document&&window.document.createElement),$b5e257d569688ac6$var$componentIds=new WeakMap;function $b5e257d569688ac6$var$useCounter(o=!1){let a=reactExports.useContext($b5e257d569688ac6$var$SSRContext),c=reactExports.useRef(null);if(c.current===null&&!o){var d,tt;let nt=(tt=React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||tt===void 0||(d=tt.ReactCurrentOwner)===null||d===void 0?void 0:d.current;if(nt){let $a=$b5e257d569688ac6$var$componentIds.get(nt);$a==null?$b5e257d569688ac6$var$componentIds.set(nt,{id:a.current,state:nt.memoizedState}):nt.memoizedState!==$a.state&&(a.current=$a.id,$b5e257d569688ac6$var$componentIds.delete(nt))}c.current=++a.current}return c.current}function $b5e257d569688ac6$var$useLegacySSRSafeId(o){let a=reactExports.useContext($b5e257d569688ac6$var$SSRContext);a===$b5e257d569688ac6$var$defaultContext&&!$b5e257d569688ac6$var$canUseDOM&&console.warn("When server rendering, you must wrap your application in an to ensure consistent ids are generated between the client and server.");let c=$b5e257d569688ac6$var$useCounter(!!o),d=`react-aria${a.prefix}`;return o||`${d}-${c}`}function $b5e257d569688ac6$var$useModernSSRSafeId(o){let a=React.useId(),[c]=reactExports.useState($b5e257d569688ac6$export$535bd6ca7f90a273()),d=c?"react-aria":`react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;return o||`${d}-${a}`}const $b5e257d569688ac6$export$619500959fc48b26=typeof React.useId=="function"?$b5e257d569688ac6$var$useModernSSRSafeId:$b5e257d569688ac6$var$useLegacySSRSafeId;function $b5e257d569688ac6$var$getSnapshot(){return!1}function $b5e257d569688ac6$var$getServerSnapshot(){return!0}function $b5e257d569688ac6$var$subscribe(o){return()=>{}}function $b5e257d569688ac6$export$535bd6ca7f90a273(){return typeof React.useSyncExternalStore=="function"?React.useSyncExternalStore($b5e257d569688ac6$var$subscribe,$b5e257d569688ac6$var$getSnapshot,$b5e257d569688ac6$var$getServerSnapshot):reactExports.useContext($b5e257d569688ac6$var$IsSSRContext)}const isRoleMenu=o=>{var a;return((a=o.getAttribute("role"))==null?void 0:a.toLowerCase())==="menu"},noop$7=()=>{};function useDropdownToggle(){const o=$b5e257d569688ac6$export$619500959fc48b26(),{show:a=!1,toggle:c=noop$7,setToggle:d,menuElement:tt}=reactExports.useContext(DropdownContext$1)||{},nt=reactExports.useCallback(Ys=>{c(!a,Ys)},[a,c]),$a={id:o,ref:d||noop$7,onClick:nt,"aria-expanded":!!a};return tt&&isRoleMenu(tt)&&($a["aria-haspopup"]=!0),[$a,{show:a,toggle:c}]}function DropdownToggle$1({children:o}){const[a,c]=useDropdownToggle();return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o(a,c)})}DropdownToggle$1.displayName="DropdownToggle";const SelectableContext=reactExports.createContext(null),makeEventKey=(o,a=null)=>o!=null?String(o):a||null,NavContext=reactExports.createContext(null);NavContext.displayName="NavContext";const _excluded$2=["as","disabled"];function _objectWithoutPropertiesLoose$2(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function isTrivialHref$1(o){return!o||o.trim()==="#"}function useButtonProps({tagName:o,disabled:a,href:c,target:d,rel:tt,role:nt,onClick:$a,tabIndex:Ys=0,type:gu}){o||(c!=null||d!=null||tt!=null?o="a":o="button");const xu={tagName:o};if(o==="button")return[{type:gu||"button",disabled:a},xu];const $u=Xu=>{if((a||o==="a"&&isTrivialHref$1(c))&&Xu.preventDefault(),a){Xu.stopPropagation();return}$a==null||$a(Xu)},Iu=Xu=>{Xu.key===" "&&(Xu.preventDefault(),$u(Xu))};return o==="a"&&(c||(c="#"),a&&(c=void 0)),[{role:nt??"button",disabled:void 0,tabIndex:a?void 0:Ys,href:c,target:o==="a"?d:void 0,"aria-disabled":a||void 0,rel:o==="a"?tt:void 0,onClick:$u,onKeyDown:Iu},xu]}const Button$1=reactExports.forwardRef((o,a)=>{let{as:c,disabled:d}=o,tt=_objectWithoutPropertiesLoose$2(o,_excluded$2);const[nt,{tagName:$a}]=useButtonProps(Object.assign({tagName:c,disabled:d},tt));return jsxRuntimeExports.jsx($a,Object.assign({},tt,nt,{ref:a}))});Button$1.displayName="Button";const _excluded$1=["eventKey","disabled","onClick","active","as"];function _objectWithoutPropertiesLoose$1(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function useDropdownItem({key:o,href:a,active:c,disabled:d,onClick:tt}){const nt=reactExports.useContext(SelectableContext),$a=reactExports.useContext(NavContext),{activeKey:Ys}=$a||{},gu=makeEventKey(o,a),xu=c==null&&o!=null?makeEventKey(Ys)===gu:c;return[{onClick:useEventCallback(Iu=>{d||(tt==null||tt(Iu),nt&&!Iu.isPropagationStopped()&&nt(gu,Iu))}),"aria-disabled":d||void 0,"aria-selected":xu,[dataAttr("dropdown-item")]:""},{isActive:xu}]}const DropdownItem$1=reactExports.forwardRef((o,a)=>{let{eventKey:c,disabled:d,onClick:tt,active:nt,as:$a=Button$1}=o,Ys=_objectWithoutPropertiesLoose$1(o,_excluded$1);const[gu]=useDropdownItem({key:c,href:Ys.href,disabled:d,onClick:tt,active:nt});return jsxRuntimeExports.jsx($a,Object.assign({},Ys,{ref:a},gu))});DropdownItem$1.displayName="DropdownItem";function useRefWithUpdate(){const o=useForceUpdate(),a=reactExports.useRef(null),c=reactExports.useCallback(d=>{a.current=d,o()},[o]);return[a,c]}function Dropdown$2({defaultShow:o,show:a,onSelect:c,onToggle:d,itemSelector:tt=`* [${dataAttr("dropdown-item")}]`,focusFirstItemOnShow:nt,placement:$a="bottom-start",children:Ys}){const gu=useWindow(),[xu,$u]=useUncontrolledProp$1(a,o,d),[Iu,Xu]=useRefWithUpdate(),i0=Iu.current,[p0,w0]=useRefWithUpdate(),A0=p0.current,$0=usePrevious(xu),O0=reactExports.useRef(null),L0=reactExports.useRef(!1),q0=reactExports.useContext(SelectableContext),F0=reactExports.useCallback((j1,r1,t1=r1==null?void 0:r1.type)=>{$u(j1,{originalEvent:r1,source:t1})},[$u]),u1=useEventCallback((j1,r1)=>{c==null||c(j1,r1),F0(!1,r1,"select"),r1.isPropagationStopped()||q0==null||q0(j1,r1)}),g1=reactExports.useMemo(()=>({toggle:F0,placement:$a,show:xu,menuElement:i0,toggleElement:A0,setMenu:Xu,setToggle:w0}),[F0,$a,xu,i0,A0,Xu,w0]);i0&&$0&&!xu&&(L0.current=i0.contains(i0.ownerDocument.activeElement));const E1=useEventCallback(()=>{A0&&A0.focus&&A0.focus()}),B1=useEventCallback(()=>{const j1=O0.current;let r1=nt;if(r1==null&&(r1=Iu.current&&isRoleMenu(Iu.current)?"keyboard":!1),r1===!1||r1==="keyboard"&&!/^key.+$/.test(j1))return;const t1=qsa(Iu.current,tt)[0];t1&&t1.focus&&t1.focus()});reactExports.useEffect(()=>{xu?B1():L0.current&&(L0.current=!1,E1())},[xu,L0,E1,B1]),reactExports.useEffect(()=>{O0.current=null});const lv=(j1,r1)=>{if(!Iu.current)return null;const t1=qsa(Iu.current,tt);let D0=t1.indexOf(j1)+r1;return D0=Math.max(0,Math.min(D0,t1.length)),t1[D0]};return useEventListener(reactExports.useCallback(()=>gu.document,[gu]),"keydown",j1=>{var r1,t1;const{key:D0}=j1,Z0=j1.target,f1=(r1=Iu.current)==null?void 0:r1.contains(Z0),w1=(t1=p0.current)==null?void 0:t1.contains(Z0);if(/input|textarea/i.test(Z0.tagName)&&(D0===" "||D0!=="Escape"&&f1||D0==="Escape"&&Z0.type==="search")||!f1&&!w1||D0==="Tab"&&(!Iu.current||!xu))return;O0.current=j1.type;const c1={originalEvent:j1,source:j1.type};switch(D0){case"ArrowUp":{const G0=lv(Z0,-1);G0&&G0.focus&&G0.focus(),j1.preventDefault();return}case"ArrowDown":if(j1.preventDefault(),!xu)$u(!0,c1);else{const G0=lv(Z0,1);G0&&G0.focus&&G0.focus()}return;case"Tab":addEventListener$1(Z0.ownerDocument,"keyup",G0=>{var o1;(G0.key==="Tab"&&!G0.target||!((o1=Iu.current)!=null&&o1.contains(G0.target)))&&$u(!1,c1)},{once:!0});break;case"Escape":D0==="Escape"&&(j1.preventDefault(),j1.stopPropagation()),$u(!1,c1);break}}),jsxRuntimeExports.jsx(SelectableContext.Provider,{value:u1,children:jsxRuntimeExports.jsx(DropdownContext$1.Provider,{value:g1,children:Ys})})}Dropdown$2.displayName="Dropdown";Dropdown$2.Menu=DropdownMenu$1;Dropdown$2.Toggle=DropdownToggle$1;Dropdown$2.Item=DropdownItem$1;function _extends$7(){return _extends$7=Object.assign?Object.assign.bind():function(o){for(var a=1;a1?$u-1:0),Xu=1;Xu<$u;Xu++)Iu[Xu-1]=arguments[Xu];c&&c.apply(void 0,[xu].concat(Iu)),$a(xu)},[c])]}function useUncontrolled(o,a){return Object.keys(a).reduce(function(c,d){var tt,nt=c,$a=nt[defaultKey(d)],Ys=nt[d],gu=_objectWithoutPropertiesLoose$5(nt,[defaultKey(d),d].map(_toPropertyKey)),xu=a[d],$u=useUncontrolledProp(Ys,$a,o[xu]),Iu=$u[0],Xu=$u[1];return _extends$7({},gu,(tt={},tt[d]=Iu,tt[xu]=Xu,tt))},o)}const DropdownContext=reactExports.createContext({});DropdownContext.displayName="DropdownContext";const DropdownDivider=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="hr",role:d="separator",...tt},nt)=>(a=useBootstrapPrefix(a,"dropdown-divider"),jsxRuntimeExports.jsx(c,{ref:nt,className:y$2(o,a),role:d,...tt})));DropdownDivider.displayName="DropdownDivider";const DropdownHeader=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="div",role:d="heading",...tt},nt)=>(a=useBootstrapPrefix(a,"dropdown-header"),jsxRuntimeExports.jsx(c,{ref:nt,className:y$2(o,a),role:d,...tt})));DropdownHeader.displayName="DropdownHeader";const _excluded=["onKeyDown"];function _objectWithoutPropertiesLoose(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function isTrivialHref(o){return!o||o.trim()==="#"}const Anchor=reactExports.forwardRef((o,a)=>{let{onKeyDown:c}=o,d=_objectWithoutPropertiesLoose(o,_excluded);const[tt]=useButtonProps(Object.assign({tagName:"a"},d)),nt=useEventCallback($a=>{tt.onKeyDown($a),c==null||c($a)});return isTrivialHref(d.href)||d.role==="button"?jsxRuntimeExports.jsx("a",Object.assign({ref:a},d,tt,{onKeyDown:nt})):jsxRuntimeExports.jsx("a",Object.assign({ref:a},d,{onKeyDown:c}))});Anchor.displayName="Anchor";const DropdownItem=reactExports.forwardRef(({bsPrefix:o,className:a,eventKey:c,disabled:d=!1,onClick:tt,active:nt,as:$a=Anchor,...Ys},gu)=>{const xu=useBootstrapPrefix(o,"dropdown-item"),[$u,Iu]=useDropdownItem({key:c,href:Ys.href,disabled:d,onClick:tt,active:nt});return jsxRuntimeExports.jsx($a,{...Ys,...$u,ref:gu,className:y$2(a,xu,Iu.isActive&&"active",d&&"disabled")})});DropdownItem.displayName="DropdownItem";const DropdownItemText=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="span",...d},tt)=>(a=useBootstrapPrefix(a,"dropdown-item-text"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));DropdownItemText.displayName="DropdownItemText";const context$1=reactExports.createContext(null);context$1.displayName="InputGroupContext";const context=reactExports.createContext(null);context.displayName="NavbarContext";function useWrappedRefWithWarning(o,a){return o}function getDropdownMenuPlacement(o,a,c){const d=c?"top-end":"top-start",tt=c?"top-start":"top-end",nt=c?"bottom-end":"bottom-start",$a=c?"bottom-start":"bottom-end",Ys=c?"right-start":"left-start",gu=c?"right-end":"left-end",xu=c?"left-start":"right-start",$u=c?"left-end":"right-end";let Iu=o?$a:nt;return a==="up"?Iu=o?tt:d:a==="end"?Iu=o?$u:xu:a==="start"?Iu=o?gu:Ys:a==="down-centered"?Iu="bottom":a==="up-centered"&&(Iu="top"),Iu}const DropdownMenu=reactExports.forwardRef(({bsPrefix:o,className:a,align:c,rootCloseEvent:d,flip:tt=!0,show:nt,renderOnMount:$a,as:Ys="div",popperConfig:gu,variant:xu,...$u},Iu)=>{let Xu=!1;const i0=reactExports.useContext(context),p0=useBootstrapPrefix(o,"dropdown-menu"),{align:w0,drop:A0,isRTL:$0}=reactExports.useContext(DropdownContext);c=c||w0;const O0=reactExports.useContext(context$1),L0=[];if(c)if(typeof c=="object"){const j1=Object.keys(c);if(j1.length){const r1=j1[0],t1=c[r1];Xu=t1==="start",L0.push(`${p0}-${r1}-${t1}`)}}else c==="end"&&(Xu=!0);const q0=getDropdownMenuPlacement(Xu,A0,$0),[F0,{hasShown:u1,popper:g1,show:E1,toggle:B1}]=useDropdownMenu({flip:tt,rootCloseEvent:d,show:nt,usePopper:!i0&&L0.length===0,offset:[0,2],popperConfig:gu,placement:q0});if(F0.ref=useMergedRefs(useWrappedRefWithWarning(Iu),F0.ref),useIsomorphicEffect(()=>{E1&&(g1==null||g1.update())},[E1]),!u1&&!$a&&!O0)return null;typeof Ys!="string"&&(F0.show=E1,F0.close=()=>B1==null?void 0:B1(!1),F0.align=c);let lv=$u.style;return g1!=null&&g1.placement&&(lv={...$u.style,...F0.style},$u["x-placement"]=g1.placement),jsxRuntimeExports.jsx(Ys,{...$u,...F0,style:lv,...(L0.length||i0)&&{"data-bs-popper":"static"},className:y$2(a,p0,E1&&"show",Xu&&`${p0}-end`,xu&&`${p0}-${xu}`,...L0)})});DropdownMenu.displayName="DropdownMenu";const Button=reactExports.forwardRef(({as:o,bsPrefix:a,variant:c="primary",size:d,active:tt=!1,disabled:nt=!1,className:$a,...Ys},gu)=>{const xu=useBootstrapPrefix(a,"btn"),[$u,{tagName:Iu}]=useButtonProps({tagName:o,disabled:nt,...Ys}),Xu=Iu;return jsxRuntimeExports.jsx(Xu,{...$u,...Ys,ref:gu,disabled:nt,className:y$2($a,xu,tt&&"active",c&&`${xu}-${c}`,d&&`${xu}-${d}`,Ys.href&&nt&&"disabled")})});Button.displayName="Button";const DropdownToggle=reactExports.forwardRef(({bsPrefix:o,split:a,className:c,childBsPrefix:d,as:tt=Button,...nt},$a)=>{const Ys=useBootstrapPrefix(o,"dropdown-toggle"),gu=reactExports.useContext(DropdownContext$1);d!==void 0&&(nt.bsPrefix=d);const[xu]=useDropdownToggle();return xu.ref=useMergedRefs(xu.ref,useWrappedRefWithWarning($a)),jsxRuntimeExports.jsx(tt,{className:y$2(c,Ys,a&&`${Ys}-split`,(gu==null?void 0:gu.show)&&"show"),...xu,...nt})});DropdownToggle.displayName="DropdownToggle";const Dropdown=reactExports.forwardRef((o,a)=>{const{bsPrefix:c,drop:d="down",show:tt,className:nt,align:$a="start",onSelect:Ys,onToggle:gu,focusFirstItemOnShow:xu,as:$u="div",navbar:Iu,autoClose:Xu=!0,...i0}=useUncontrolled(o,{show:"onToggle"}),p0=reactExports.useContext(context$1),w0=useBootstrapPrefix(c,"dropdown"),A0=useIsRTL(),$0=g1=>Xu===!1?g1==="click":Xu==="inside"?g1!=="rootClose":Xu==="outside"?g1!=="select":!0,O0=useEventCallback((g1,E1)=>{var B1;!((B1=E1.originalEvent)==null||(B1=B1.target)==null)&&B1.classList.contains("dropdown-toggle")&&E1.source==="mousedown"||(E1.originalEvent.currentTarget===document&&(E1.source!=="keydown"||E1.originalEvent.key==="Escape")&&(E1.source="rootClose"),$0(E1.source)&&(gu==null||gu(g1,E1)))}),q0=getDropdownMenuPlacement($a==="end",d,A0),F0=reactExports.useMemo(()=>({align:$a,drop:d,isRTL:A0}),[$a,d,A0]),u1={down:w0,"down-centered":`${w0}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return jsxRuntimeExports.jsx(DropdownContext.Provider,{value:F0,children:jsxRuntimeExports.jsx(Dropdown$2,{placement:q0,show:tt,onSelect:Ys,onToggle:O0,focusFirstItemOnShow:xu,itemSelector:`.${w0}-item:not(.disabled):not(:disabled)`,children:p0?i0.children:jsxRuntimeExports.jsx($u,{...i0,ref:a,className:y$2(nt,tt&&"show",u1[d])})})})});Dropdown.displayName="Dropdown";const Dropdown$1=Object.assign(Dropdown,{Toggle:DropdownToggle,Menu:DropdownMenu,Item:DropdownItem,ItemText:DropdownItemText,Divider:DropdownDivider,Header:DropdownHeader}),DropdownWrapper=pt$1.div` +`,TableHeader=({tableHeaderItems:o})=>jsxRuntimeExports.jsx("div",{className:"header-items-grid",children:o.map((a,c)=>jsxRuntimeExports.jsx("div",{className:"header-item",children:a},c))});function ListTable(o){var a,c,d;return jsxRuntimeExports.jsxs(ListWrapper,{$numOfColumns:o.numOfColumns??0,$roundTopItem:o.roundTopItem,children:[o.listDescription&&jsxRuntimeExports.jsx("div",{className:"table-description",children:o.listDescription}),o.listHeaderItems&&((a=o.listHeaderItems)==null?void 0:a.length)>0&&jsxRuntimeExports.jsx(TableHeader,{tableHeaderItems:o.listHeaderItems}),o.error?jsxRuntimeExports.jsx("div",{className:"container",children:jsxRuntimeExports.jsx("div",{className:"error-text",children:o.error})}):jsxRuntimeExports.jsxs("div",{className:"list-items",children:[(c=o.listItems)==null?void 0:c.map((tt,nt)=>o.rowItem(tt,nt,o.listItems.length-1,o==null?void 0:o.onRowItemClick)),((d=o.listItems)==null?void 0:d.length)===0&&jsxRuntimeExports.jsx("div",{className:"no-items-text",children:o.noItemsText})]})]})}function useUncontrolledProp$1(o,a,c){const d=reactExports.useRef(o!==void 0),[tt,nt]=reactExports.useState(a),$a=o!==void 0,Ws=d.current;return d.current=$a,!$a&&Ws&&tt!==a&&nt(a),[$a?o:tt,reactExports.useCallback((...gu)=>{const[Su,...$u]=gu;let Iu=c==null?void 0:c(Su,...$u);return nt(Su),Iu},[c])]}function useForceUpdate(){const[,o]=reactExports.useReducer(a=>!a,!1);return o}function useEventListener(o,a,c,d=!1){const tt=useEventCallback(c);reactExports.useEffect(()=>{const nt=typeof o=="function"?o():o;return nt.addEventListener(a,tt,d),()=>nt.removeEventListener(a,tt,d)},[o])}const DropdownContext$1=reactExports.createContext(null);var has$5=Object.prototype.hasOwnProperty;function find$1(o,a,c){for(c of o.keys())if(dequal(c,a))return c}function dequal(o,a){var c,d,tt;if(o===a)return!0;if(o&&a&&(c=o.constructor)===a.constructor){if(c===Date)return o.getTime()===a.getTime();if(c===RegExp)return o.toString()===a.toString();if(c===Array){if((d=o.length)===a.length)for(;d--&&dequal(o[d],a[d]););return d===-1}if(c===Set){if(o.size!==a.size)return!1;for(d of o)if(tt=d,tt&&typeof tt=="object"&&(tt=find$1(a,tt),!tt)||!a.has(tt))return!1;return!0}if(c===Map){if(o.size!==a.size)return!1;for(d of o)if(tt=d[0],tt&&typeof tt=="object"&&(tt=find$1(a,tt),!tt)||!dequal(d[1],a.get(tt)))return!1;return!0}if(c===ArrayBuffer)o=new Uint8Array(o),a=new Uint8Array(a);else if(c===DataView){if((d=o.byteLength)===a.byteLength)for(;d--&&o.getInt8(d)===a.getInt8(d););return d===-1}if(ArrayBuffer.isView(o)){if((d=o.byteLength)===a.byteLength)for(;d--&&o[d]===a[d];);return d===-1}if(!c||typeof o=="object"){d=0;for(c in o)if(has$5.call(o,c)&&++d&&!has$5.call(a,c)||!(c in a)||!dequal(o[c],a[c]))return!1;return Object.keys(a).length===d}}return o!==o&&a!==a}function useSafeState(o){const a=useMounted();return[o[0],reactExports.useCallback(c=>{if(a())return o[1](c)},[a,o[1]])]}var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce(function(o,a){return o.concat([a+"-"+start,a+"-"+end])},[]),placements=[].concat(basePlacements,[auto]).reduce(function(o,a){return o.concat([a,a+"-"+start,a+"-"+end])},[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main$1="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main$1,afterMain,beforeWrite,write,afterWrite];function getBasePlacement(o){return o.split("-")[0]}function getWindow$1(o){if(o==null)return window;if(o.toString()!=="[object Window]"){var a=o.ownerDocument;return a&&a.defaultView||window}return o}function isElement$1(o){var a=getWindow$1(o).Element;return o instanceof a||o instanceof Element}function isHTMLElement$1(o){var a=getWindow$1(o).HTMLElement;return o instanceof a||o instanceof HTMLElement}function isShadowRoot$1(o){if(typeof ShadowRoot>"u")return!1;var a=getWindow$1(o).ShadowRoot;return o instanceof a||o instanceof ShadowRoot}var max$7=Math.max,min$6=Math.min,round$2=Math.round;function getUAString(){var o=navigator.userAgentData;return o!=null&&o.brands&&Array.isArray(o.brands)?o.brands.map(function(a){return a.brand+"/"+a.version}).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect$1(o,a,c){a===void 0&&(a=!1),c===void 0&&(c=!1);var d=o.getBoundingClientRect(),tt=1,nt=1;a&&isHTMLElement$1(o)&&(tt=o.offsetWidth>0&&round$2(d.width)/o.offsetWidth||1,nt=o.offsetHeight>0&&round$2(d.height)/o.offsetHeight||1);var $a=isElement$1(o)?getWindow$1(o):window,Ws=$a.visualViewport,gu=!isLayoutViewport()&&c,Su=(d.left+(gu&&Ws?Ws.offsetLeft:0))/tt,$u=(d.top+(gu&&Ws?Ws.offsetTop:0))/nt,Iu=d.width/tt,Xu=d.height/nt;return{width:Iu,height:Xu,top:$u,right:Su+Iu,bottom:$u+Xu,left:Su,x:Su,y:$u}}function getLayoutRect(o){var a=getBoundingClientRect$1(o),c=o.offsetWidth,d=o.offsetHeight;return Math.abs(a.width-c)<=1&&(c=a.width),Math.abs(a.height-d)<=1&&(d=a.height),{x:o.offsetLeft,y:o.offsetTop,width:c,height:d}}function contains$1(o,a){var c=a.getRootNode&&a.getRootNode();if(o.contains(a))return!0;if(c&&isShadowRoot$1(c)){var d=a;do{if(d&&o.isSameNode(d))return!0;d=d.parentNode||d.host}while(d)}return!1}function getNodeName$1(o){return o?(o.nodeName||"").toLowerCase():null}function getComputedStyle$2(o){return getWindow$1(o).getComputedStyle(o)}function isTableElement$1(o){return["table","td","th"].indexOf(getNodeName$1(o))>=0}function getDocumentElement$1(o){return((isElement$1(o)?o.ownerDocument:o.document)||window.document).documentElement}function getParentNode$1(o){return getNodeName$1(o)==="html"?o:o.assignedSlot||o.parentNode||(isShadowRoot$1(o)?o.host:null)||getDocumentElement$1(o)}function getTrueOffsetParent$1(o){return!isHTMLElement$1(o)||getComputedStyle$2(o).position==="fixed"?null:o.offsetParent}function getContainingBlock$1(o){var a=/firefox/i.test(getUAString()),c=/Trident/i.test(getUAString());if(c&&isHTMLElement$1(o)){var d=getComputedStyle$2(o);if(d.position==="fixed")return null}var tt=getParentNode$1(o);for(isShadowRoot$1(tt)&&(tt=tt.host);isHTMLElement$1(tt)&&["html","body"].indexOf(getNodeName$1(tt))<0;){var nt=getComputedStyle$2(tt);if(nt.transform!=="none"||nt.perspective!=="none"||nt.contain==="paint"||["transform","perspective"].indexOf(nt.willChange)!==-1||a&&nt.willChange==="filter"||a&&nt.filter&&nt.filter!=="none")return tt;tt=tt.parentNode}return null}function getOffsetParent$1(o){for(var a=getWindow$1(o),c=getTrueOffsetParent$1(o);c&&isTableElement$1(c)&&getComputedStyle$2(c).position==="static";)c=getTrueOffsetParent$1(c);return c&&(getNodeName$1(c)==="html"||getNodeName$1(c)==="body"&&getComputedStyle$2(c).position==="static")?a:c||getContainingBlock$1(o)||a}function getMainAxisFromPlacement(o){return["top","bottom"].indexOf(o)>=0?"x":"y"}function within(o,a,c){return max$7(o,min$6(a,c))}function withinMaxClamp(o,a,c){var d=within(o,a,c);return d>c?c:d}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(o){return Object.assign({},getFreshSideObject(),o)}function expandToHashMap(o,a){return a.reduce(function(c,d){return c[d]=o,c},{})}var toPaddingObject=function(a,c){return a=typeof a=="function"?a(Object.assign({},c.rects,{placement:c.placement})):a,mergePaddingObject(typeof a!="number"?a:expandToHashMap(a,basePlacements))};function arrow$2(o){var a,c=o.state,d=o.name,tt=o.options,nt=c.elements.arrow,$a=c.modifiersData.popperOffsets,Ws=getBasePlacement(c.placement),gu=getMainAxisFromPlacement(Ws),Su=[left,right].indexOf(Ws)>=0,$u=Su?"height":"width";if(!(!nt||!$a)){var Iu=toPaddingObject(tt.padding,c),Xu=getLayoutRect(nt),r0=gu==="y"?top:left,p0=gu==="y"?bottom:right,y0=c.rects.reference[$u]+c.rects.reference[gu]-$a[gu]-c.rects.popper[$u],A0=$a[gu]-c.rects.reference[gu],$0=getOffsetParent$1(nt),O0=$0?gu==="y"?$0.clientHeight||0:$0.clientWidth||0:0,L0=y0/2-A0/2,V0=Iu[r0],F0=O0-Xu[$u]-Iu[p0],u1=O0/2-Xu[$u]/2+L0,g1=within(V0,u1,F0),E1=gu;c.modifiersData[d]=(a={},a[E1]=g1,a.centerOffset=g1-u1,a)}}function effect$1(o){var a=o.state,c=o.options,d=c.element,tt=d===void 0?"[data-popper-arrow]":d;tt!=null&&(typeof tt=="string"&&(tt=a.elements.popper.querySelector(tt),!tt)||contains$1(a.elements.popper,tt)&&(a.elements.arrow=tt))}const arrow$3={name:"arrow",enabled:!0,phase:"main",fn:arrow$2,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(o){return o.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(o,a){var c=o.x,d=o.y,tt=a.devicePixelRatio||1;return{x:round$2(c*tt)/tt||0,y:round$2(d*tt)/tt||0}}function mapToStyles(o){var a,c=o.popper,d=o.popperRect,tt=o.placement,nt=o.variation,$a=o.offsets,Ws=o.position,gu=o.gpuAcceleration,Su=o.adaptive,$u=o.roundOffsets,Iu=o.isFixed,Xu=$a.x,r0=Xu===void 0?0:Xu,p0=$a.y,y0=p0===void 0?0:p0,A0=typeof $u=="function"?$u({x:r0,y:y0}):{x:r0,y:y0};r0=A0.x,y0=A0.y;var $0=$a.hasOwnProperty("x"),O0=$a.hasOwnProperty("y"),L0=left,V0=top,F0=window;if(Su){var u1=getOffsetParent$1(c),g1="clientHeight",E1="clientWidth";if(u1===getWindow$1(c)&&(u1=getDocumentElement$1(c),getComputedStyle$2(u1).position!=="static"&&Ws==="absolute"&&(g1="scrollHeight",E1="scrollWidth")),u1=u1,tt===top||(tt===left||tt===right)&&nt===end){V0=bottom;var B1=Iu&&u1===F0&&F0.visualViewport?F0.visualViewport.height:u1[g1];y0-=B1-d.height,y0*=gu?1:-1}if(tt===left||(tt===top||tt===bottom)&&nt===end){L0=right;var lv=Iu&&u1===F0&&F0.visualViewport?F0.visualViewport.width:u1[E1];r0-=lv-d.width,r0*=gu?1:-1}}var j1=Object.assign({position:Ws},Su&&unsetSides),r1=$u===!0?roundOffsetsByDPR({x:r0,y:y0},getWindow$1(c)):{x:r0,y:y0};if(r0=r1.x,y0=r1.y,gu){var t1;return Object.assign({},j1,(t1={},t1[V0]=O0?"0":"",t1[L0]=$0?"0":"",t1.transform=(F0.devicePixelRatio||1)<=1?"translate("+r0+"px, "+y0+"px)":"translate3d("+r0+"px, "+y0+"px, 0)",t1))}return Object.assign({},j1,(a={},a[V0]=O0?y0+"px":"",a[L0]=$0?r0+"px":"",a.transform="",a))}function computeStyles(o){var a=o.state,c=o.options,d=c.gpuAcceleration,tt=d===void 0?!0:d,nt=c.adaptive,$a=nt===void 0?!0:nt,Ws=c.roundOffsets,gu=Ws===void 0?!0:Ws,Su={placement:getBasePlacement(a.placement),variation:getVariation(a.placement),popper:a.elements.popper,popperRect:a.rects.popper,gpuAcceleration:tt,isFixed:a.options.strategy==="fixed"};a.modifiersData.popperOffsets!=null&&(a.styles.popper=Object.assign({},a.styles.popper,mapToStyles(Object.assign({},Su,{offsets:a.modifiersData.popperOffsets,position:a.options.strategy,adaptive:$a,roundOffsets:gu})))),a.modifiersData.arrow!=null&&(a.styles.arrow=Object.assign({},a.styles.arrow,mapToStyles(Object.assign({},Su,{offsets:a.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:gu})))),a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-placement":a.placement})}const computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}};var passive={passive:!0};function effect(o){var a=o.state,c=o.instance,d=o.options,tt=d.scroll,nt=tt===void 0?!0:tt,$a=d.resize,Ws=$a===void 0?!0:$a,gu=getWindow$1(a.elements.popper),Su=[].concat(a.scrollParents.reference,a.scrollParents.popper);return nt&&Su.forEach(function($u){$u.addEventListener("scroll",c.update,passive)}),Ws&&gu.addEventListener("resize",c.update,passive),function(){nt&&Su.forEach(function($u){$u.removeEventListener("scroll",c.update,passive)}),Ws&&gu.removeEventListener("resize",c.update,passive)}}const eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect,data:{}};var hash$8={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement$1(o){return o.replace(/left|right|bottom|top/g,function(a){return hash$8[a]})}var hash$7={start:"end",end:"start"};function getOppositeVariationPlacement(o){return o.replace(/start|end/g,function(a){return hash$7[a]})}function getWindowScroll(o){var a=getWindow$1(o),c=a.pageXOffset,d=a.pageYOffset;return{scrollLeft:c,scrollTop:d}}function getWindowScrollBarX$1(o){return getBoundingClientRect$1(getDocumentElement$1(o)).left+getWindowScroll(o).scrollLeft}function getViewportRect$1(o,a){var c=getWindow$1(o),d=getDocumentElement$1(o),tt=c.visualViewport,nt=d.clientWidth,$a=d.clientHeight,Ws=0,gu=0;if(tt){nt=tt.width,$a=tt.height;var Su=isLayoutViewport();(Su||!Su&&a==="fixed")&&(Ws=tt.offsetLeft,gu=tt.offsetTop)}return{width:nt,height:$a,x:Ws+getWindowScrollBarX$1(o),y:gu}}function getDocumentRect$1(o){var a,c=getDocumentElement$1(o),d=getWindowScroll(o),tt=(a=o.ownerDocument)==null?void 0:a.body,nt=max$7(c.scrollWidth,c.clientWidth,tt?tt.scrollWidth:0,tt?tt.clientWidth:0),$a=max$7(c.scrollHeight,c.clientHeight,tt?tt.scrollHeight:0,tt?tt.clientHeight:0),Ws=-d.scrollLeft+getWindowScrollBarX$1(o),gu=-d.scrollTop;return getComputedStyle$2(tt||c).direction==="rtl"&&(Ws+=max$7(c.clientWidth,tt?tt.clientWidth:0)-nt),{width:nt,height:$a,x:Ws,y:gu}}function isScrollParent(o){var a=getComputedStyle$2(o),c=a.overflow,d=a.overflowX,tt=a.overflowY;return/auto|scroll|overlay|hidden/.test(c+tt+d)}function getScrollParent(o){return["html","body","#document"].indexOf(getNodeName$1(o))>=0?o.ownerDocument.body:isHTMLElement$1(o)&&isScrollParent(o)?o:getScrollParent(getParentNode$1(o))}function listScrollParents(o,a){var c;a===void 0&&(a=[]);var d=getScrollParent(o),tt=d===((c=o.ownerDocument)==null?void 0:c.body),nt=getWindow$1(d),$a=tt?[nt].concat(nt.visualViewport||[],isScrollParent(d)?d:[]):d,Ws=a.concat($a);return tt?Ws:Ws.concat(listScrollParents(getParentNode$1($a)))}function rectToClientRect$1(o){return Object.assign({},o,{left:o.x,top:o.y,right:o.x+o.width,bottom:o.y+o.height})}function getInnerBoundingClientRect$1(o,a){var c=getBoundingClientRect$1(o,!1,a==="fixed");return c.top=c.top+o.clientTop,c.left=c.left+o.clientLeft,c.bottom=c.top+o.clientHeight,c.right=c.left+o.clientWidth,c.width=o.clientWidth,c.height=o.clientHeight,c.x=c.left,c.y=c.top,c}function getClientRectFromMixedType(o,a,c){return a===viewport?rectToClientRect$1(getViewportRect$1(o,c)):isElement$1(a)?getInnerBoundingClientRect$1(a,c):rectToClientRect$1(getDocumentRect$1(getDocumentElement$1(o)))}function getClippingParents(o){var a=listScrollParents(getParentNode$1(o)),c=["absolute","fixed"].indexOf(getComputedStyle$2(o).position)>=0,d=c&&isHTMLElement$1(o)?getOffsetParent$1(o):o;return isElement$1(d)?a.filter(function(tt){return isElement$1(tt)&&contains$1(tt,d)&&getNodeName$1(tt)!=="body"}):[]}function getClippingRect$1(o,a,c,d){var tt=a==="clippingParents"?getClippingParents(o):[].concat(a),nt=[].concat(tt,[c]),$a=nt[0],Ws=nt.reduce(function(gu,Su){var $u=getClientRectFromMixedType(o,Su,d);return gu.top=max$7($u.top,gu.top),gu.right=min$6($u.right,gu.right),gu.bottom=min$6($u.bottom,gu.bottom),gu.left=max$7($u.left,gu.left),gu},getClientRectFromMixedType(o,$a,d));return Ws.width=Ws.right-Ws.left,Ws.height=Ws.bottom-Ws.top,Ws.x=Ws.left,Ws.y=Ws.top,Ws}function computeOffsets(o){var a=o.reference,c=o.element,d=o.placement,tt=d?getBasePlacement(d):null,nt=d?getVariation(d):null,$a=a.x+a.width/2-c.width/2,Ws=a.y+a.height/2-c.height/2,gu;switch(tt){case top:gu={x:$a,y:a.y-c.height};break;case bottom:gu={x:$a,y:a.y+a.height};break;case right:gu={x:a.x+a.width,y:Ws};break;case left:gu={x:a.x-c.width,y:Ws};break;default:gu={x:a.x,y:a.y}}var Su=tt?getMainAxisFromPlacement(tt):null;if(Su!=null){var $u=Su==="y"?"height":"width";switch(nt){case start:gu[Su]=gu[Su]-(a[$u]/2-c[$u]/2);break;case end:gu[Su]=gu[Su]+(a[$u]/2-c[$u]/2);break}}return gu}function detectOverflow$1(o,a){a===void 0&&(a={});var c=a,d=c.placement,tt=d===void 0?o.placement:d,nt=c.strategy,$a=nt===void 0?o.strategy:nt,Ws=c.boundary,gu=Ws===void 0?clippingParents:Ws,Su=c.rootBoundary,$u=Su===void 0?viewport:Su,Iu=c.elementContext,Xu=Iu===void 0?popper:Iu,r0=c.altBoundary,p0=r0===void 0?!1:r0,y0=c.padding,A0=y0===void 0?0:y0,$0=mergePaddingObject(typeof A0!="number"?A0:expandToHashMap(A0,basePlacements)),O0=Xu===popper?reference:popper,L0=o.rects.popper,V0=o.elements[p0?O0:Xu],F0=getClippingRect$1(isElement$1(V0)?V0:V0.contextElement||getDocumentElement$1(o.elements.popper),gu,$u,$a),u1=getBoundingClientRect$1(o.elements.reference),g1=computeOffsets({reference:u1,element:L0,strategy:"absolute",placement:tt}),E1=rectToClientRect$1(Object.assign({},L0,g1)),B1=Xu===popper?E1:u1,lv={top:F0.top-B1.top+$0.top,bottom:B1.bottom-F0.bottom+$0.bottom,left:F0.left-B1.left+$0.left,right:B1.right-F0.right+$0.right},j1=o.modifiersData.offset;if(Xu===popper&&j1){var r1=j1[tt];Object.keys(lv).forEach(function(t1){var D0=[right,bottom].indexOf(t1)>=0?1:-1,Z0=[top,bottom].indexOf(t1)>=0?"y":"x";lv[t1]+=r1[Z0]*D0})}return lv}function computeAutoPlacement(o,a){a===void 0&&(a={});var c=a,d=c.placement,tt=c.boundary,nt=c.rootBoundary,$a=c.padding,Ws=c.flipVariations,gu=c.allowedAutoPlacements,Su=gu===void 0?placements:gu,$u=getVariation(d),Iu=$u?Ws?variationPlacements:variationPlacements.filter(function(p0){return getVariation(p0)===$u}):basePlacements,Xu=Iu.filter(function(p0){return Su.indexOf(p0)>=0});Xu.length===0&&(Xu=Iu);var r0=Xu.reduce(function(p0,y0){return p0[y0]=detectOverflow$1(o,{placement:y0,boundary:tt,rootBoundary:nt,padding:$a})[getBasePlacement(y0)],p0},{});return Object.keys(r0).sort(function(p0,y0){return r0[p0]-r0[y0]})}function getExpandedFallbackPlacements(o){if(getBasePlacement(o)===auto)return[];var a=getOppositePlacement$1(o);return[getOppositeVariationPlacement(o),a,getOppositeVariationPlacement(a)]}function flip$2(o){var a=o.state,c=o.options,d=o.name;if(!a.modifiersData[d]._skip){for(var tt=c.mainAxis,nt=tt===void 0?!0:tt,$a=c.altAxis,Ws=$a===void 0?!0:$a,gu=c.fallbackPlacements,Su=c.padding,$u=c.boundary,Iu=c.rootBoundary,Xu=c.altBoundary,r0=c.flipVariations,p0=r0===void 0?!0:r0,y0=c.allowedAutoPlacements,A0=a.options.placement,$0=getBasePlacement(A0),O0=$0===A0,L0=gu||(O0||!p0?[getOppositePlacement$1(A0)]:getExpandedFallbackPlacements(A0)),V0=[A0].concat(L0).reduce(function(O1,Q1){return O1.concat(getBasePlacement(Q1)===auto?computeAutoPlacement(a,{placement:Q1,boundary:$u,rootBoundary:Iu,padding:Su,flipVariations:p0,allowedAutoPlacements:y0}):Q1)},[]),F0=a.rects.reference,u1=a.rects.popper,g1=new Map,E1=!0,B1=V0[0],lv=0;lv=0,Z0=D0?"width":"height",f1=detectOverflow$1(a,{placement:j1,boundary:$u,rootBoundary:Iu,altBoundary:Xu,padding:Su}),w1=D0?t1?right:left:t1?bottom:top;F0[Z0]>u1[Z0]&&(w1=getOppositePlacement$1(w1));var m1=getOppositePlacement$1(w1),c1=[];if(nt&&c1.push(f1[r1]<=0),Ws&&c1.push(f1[w1]<=0,f1[m1]<=0),c1.every(function(O1){return O1})){B1=j1,E1=!1;break}g1.set(j1,c1)}if(E1)for(var G0=p0?3:1,o1=function(Q1){var rv=V0.find(function(D1){var ev=g1.get(D1);if(ev)return ev.slice(0,Q1).every(function(Mv){return Mv})});if(rv)return B1=rv,"break"},d1=G0;d1>0;d1--){var R1=o1(d1);if(R1==="break")break}a.placement!==B1&&(a.modifiersData[d]._skip=!0,a.placement=B1,a.reset=!0)}}const flip$3={name:"flip",enabled:!0,phase:"main",fn:flip$2,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(o,a,c){return c===void 0&&(c={x:0,y:0}),{top:o.top-a.height-c.y,right:o.right-a.width+c.x,bottom:o.bottom-a.height+c.y,left:o.left-a.width-c.x}}function isAnySideFullyClipped(o){return[top,right,bottom,left].some(function(a){return o[a]>=0})}function hide(o){var a=o.state,c=o.name,d=a.rects.reference,tt=a.rects.popper,nt=a.modifiersData.preventOverflow,$a=detectOverflow$1(a,{elementContext:"reference"}),Ws=detectOverflow$1(a,{altBoundary:!0}),gu=getSideOffsets($a,d),Su=getSideOffsets(Ws,tt,nt),$u=isAnySideFullyClipped(gu),Iu=isAnySideFullyClipped(Su);a.modifiersData[c]={referenceClippingOffsets:gu,popperEscapeOffsets:Su,isReferenceHidden:$u,hasPopperEscaped:Iu},a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-reference-hidden":$u,"data-popper-escaped":Iu})}const hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(o,a,c){var d=getBasePlacement(o),tt=[left,top].indexOf(d)>=0?-1:1,nt=typeof c=="function"?c(Object.assign({},a,{placement:o})):c,$a=nt[0],Ws=nt[1];return $a=$a||0,Ws=(Ws||0)*tt,[left,right].indexOf(d)>=0?{x:Ws,y:$a}:{x:$a,y:Ws}}function offset$2(o){var a=o.state,c=o.options,d=o.name,tt=c.offset,nt=tt===void 0?[0,0]:tt,$a=placements.reduce(function($u,Iu){return $u[Iu]=distanceAndSkiddingToXY(Iu,a.rects,nt),$u},{}),Ws=$a[a.placement],gu=Ws.x,Su=Ws.y;a.modifiersData.popperOffsets!=null&&(a.modifiersData.popperOffsets.x+=gu,a.modifiersData.popperOffsets.y+=Su),a.modifiersData[d]=$a}const offset$3={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset$2};function popperOffsets(o){var a=o.state,c=o.name;a.modifiersData[c]=computeOffsets({reference:a.rects.reference,element:a.rects.popper,strategy:"absolute",placement:a.placement})}const popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(o){return o==="x"?"y":"x"}function preventOverflow(o){var a=o.state,c=o.options,d=o.name,tt=c.mainAxis,nt=tt===void 0?!0:tt,$a=c.altAxis,Ws=$a===void 0?!1:$a,gu=c.boundary,Su=c.rootBoundary,$u=c.altBoundary,Iu=c.padding,Xu=c.tether,r0=Xu===void 0?!0:Xu,p0=c.tetherOffset,y0=p0===void 0?0:p0,A0=detectOverflow$1(a,{boundary:gu,rootBoundary:Su,padding:Iu,altBoundary:$u}),$0=getBasePlacement(a.placement),O0=getVariation(a.placement),L0=!O0,V0=getMainAxisFromPlacement($0),F0=getAltAxis(V0),u1=a.modifiersData.popperOffsets,g1=a.rects.reference,E1=a.rects.popper,B1=typeof y0=="function"?y0(Object.assign({},a.rects,{placement:a.placement})):y0,lv=typeof B1=="number"?{mainAxis:B1,altAxis:B1}:Object.assign({mainAxis:0,altAxis:0},B1),j1=a.modifiersData.offset?a.modifiersData.offset[a.placement]:null,r1={x:0,y:0};if(u1){if(nt){var t1,D0=V0==="y"?top:left,Z0=V0==="y"?bottom:right,f1=V0==="y"?"height":"width",w1=u1[V0],m1=w1+A0[D0],c1=w1-A0[Z0],G0=r0?-E1[f1]/2:0,o1=O0===start?g1[f1]:E1[f1],d1=O0===start?-E1[f1]:-g1[f1],R1=a.elements.arrow,O1=r0&&R1?getLayoutRect(R1):{width:0,height:0},Q1=a.modifiersData["arrow#persistent"]?a.modifiersData["arrow#persistent"].padding:getFreshSideObject(),rv=Q1[D0],D1=Q1[Z0],ev=within(0,g1[f1],O1[f1]),Mv=L0?g1[f1]/2-G0-ev-rv-lv.mainAxis:o1-ev-rv-lv.mainAxis,Zv=L0?-g1[f1]/2+G0+ev+D1+lv.mainAxis:d1+ev+D1+lv.mainAxis,fv=a.elements.arrow&&getOffsetParent$1(a.elements.arrow),cv=fv?V0==="y"?fv.clientTop||0:fv.clientLeft||0:0,ly=(t1=j1==null?void 0:j1[V0])!=null?t1:0,Cy=w1+Mv-ly-cv,Ly=w1+Zv-ly,Hy=within(r0?min$6(m1,Cy):m1,w1,r0?max$7(c1,Ly):c1);u1[V0]=Hy,r1[V0]=Hy-w1}if(Ws){var t2,C2=V0==="x"?top:left,Dy=V0==="x"?bottom:right,jw=u1[F0],pw=F0==="y"?"height":"width",vw=jw+A0[C2],Hw=jw-A0[Dy],uw=[top,left].indexOf($0)!==-1,Nw=(t2=j1==null?void 0:j1[F0])!=null?t2:0,lw=uw?vw:jw-g1[pw]-E1[pw]-Nw+lv.altAxis,Lw=uw?jw+g1[pw]+E1[pw]-Nw-lv.altAxis:Hw,zw=r0&&uw?withinMaxClamp(lw,jw,Lw):within(r0?lw:vw,jw,r0?Lw:Hw);u1[F0]=zw,r1[F0]=zw-jw}a.modifiersData[d]=r1}}const preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(o){return{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}}function getNodeScroll$1(o){return o===getWindow$1(o)||!isHTMLElement$1(o)?getWindowScroll(o):getHTMLElementScroll(o)}function isElementScaled(o){var a=o.getBoundingClientRect(),c=round$2(a.width)/o.offsetWidth||1,d=round$2(a.height)/o.offsetHeight||1;return c!==1||d!==1}function getCompositeRect(o,a,c){c===void 0&&(c=!1);var d=isHTMLElement$1(a),tt=isHTMLElement$1(a)&&isElementScaled(a),nt=getDocumentElement$1(a),$a=getBoundingClientRect$1(o,tt,c),Ws={scrollLeft:0,scrollTop:0},gu={x:0,y:0};return(d||!d&&!c)&&((getNodeName$1(a)!=="body"||isScrollParent(nt))&&(Ws=getNodeScroll$1(a)),isHTMLElement$1(a)?(gu=getBoundingClientRect$1(a,!0),gu.x+=a.clientLeft,gu.y+=a.clientTop):nt&&(gu.x=getWindowScrollBarX$1(nt))),{x:$a.left+Ws.scrollLeft-gu.x,y:$a.top+Ws.scrollTop-gu.y,width:$a.width,height:$a.height}}function order(o){var a=new Map,c=new Set,d=[];o.forEach(function(nt){a.set(nt.name,nt)});function tt(nt){c.add(nt.name);var $a=[].concat(nt.requires||[],nt.requiresIfExists||[]);$a.forEach(function(Ws){if(!c.has(Ws)){var gu=a.get(Ws);gu&&tt(gu)}}),d.push(nt)}return o.forEach(function(nt){c.has(nt.name)||tt(nt)}),d}function orderModifiers(o){var a=order(o);return modifierPhases.reduce(function(c,d){return c.concat(a.filter(function(tt){return tt.phase===d}))},[])}function debounce(o){var a;return function(){return a||(a=new Promise(function(c){Promise.resolve().then(function(){a=void 0,c(o())})})),a}}function mergeByName(o){var a=o.reduce(function(c,d){var tt=c[d.name];return c[d.name]=tt?Object.assign({},tt,d,{options:Object.assign({},tt.options,d.options),data:Object.assign({},tt.data,d.data)}):d,c},{});return Object.keys(a).map(function(c){return a[c]})}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var o=arguments.length,a=new Array(o),c=0;c=0)continue;c[d]=o[d]}return c}const disabledApplyStylesModifier={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},ariaDescribedByModifier={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:({state:o})=>()=>{const{reference:a,popper:c}=o.elements;if("removeAttribute"in a){const d=(a.getAttribute("aria-describedby")||"").split(",").filter(tt=>tt.trim()!==c.id);d.length?a.setAttribute("aria-describedby",d.join(",")):a.removeAttribute("aria-describedby")}},fn:({state:o})=>{var a;const{popper:c,reference:d}=o.elements,tt=(a=c.getAttribute("role"))==null?void 0:a.toLowerCase();if(c.id&&tt==="tooltip"&&"setAttribute"in d){const nt=d.getAttribute("aria-describedby");if(nt&&nt.split(",").indexOf(c.id)!==-1)return;d.setAttribute("aria-describedby",nt?`${nt},${c.id}`:c.id)}}},EMPTY_MODIFIERS=[];function usePopper(o,a,c={}){let{enabled:d=!0,placement:tt="bottom",strategy:nt="absolute",modifiers:$a=EMPTY_MODIFIERS}=c,Ws=_objectWithoutPropertiesLoose$4(c,_excluded$4);const gu=reactExports.useRef($a),Su=reactExports.useRef(),$u=reactExports.useCallback(()=>{var A0;(A0=Su.current)==null||A0.update()},[]),Iu=reactExports.useCallback(()=>{var A0;(A0=Su.current)==null||A0.forceUpdate()},[]),[Xu,r0]=useSafeState(reactExports.useState({placement:tt,update:$u,forceUpdate:Iu,attributes:{},styles:{popper:{},arrow:{}}})),p0=reactExports.useMemo(()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:({state:A0})=>{const $0={},O0={};Object.keys(A0.elements).forEach(L0=>{$0[L0]=A0.styles[L0],O0[L0]=A0.attributes[L0]}),r0({state:A0,styles:$0,attributes:O0,update:$u,forceUpdate:Iu,placement:A0.placement})}}),[$u,Iu,r0]),y0=reactExports.useMemo(()=>(dequal(gu.current,$a)||(gu.current=$a),gu.current),[$a]);return reactExports.useEffect(()=>{!Su.current||!d||Su.current.setOptions({placement:tt,strategy:nt,modifiers:[...y0,p0,disabledApplyStylesModifier]})},[nt,tt,p0,d,y0]),reactExports.useEffect(()=>{if(!(!d||o==null||a==null))return Su.current=createPopper(o,a,Object.assign({},Ws,{placement:tt,strategy:nt,modifiers:[...y0,ariaDescribedByModifier,p0]})),()=>{Su.current!=null&&(Su.current.destroy(),Su.current=void 0,r0(A0=>Object.assign({},A0,{attributes:{},styles:{popper:{}}})))}},[d,o,a]),Xu}var warning=function(){},warning_1=warning;const warning$1=getDefaultExportFromCjs$1(warning_1),noop$7=()=>{};function isLeftClickEvent(o){return o.button===0}function isModifiedEvent(o){return!!(o.metaKey||o.altKey||o.ctrlKey||o.shiftKey)}const getRefTarget=o=>o&&("current"in o?o.current:o),InitialTriggerEvents={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};function useClickOutside(o,a=noop$7,{disabled:c,clickTrigger:d="click"}={}){const tt=reactExports.useRef(!1),nt=reactExports.useRef(!1),$a=reactExports.useCallback(Su=>{const $u=getRefTarget(o);warning$1(!!$u,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),tt.current=!$u||isModifiedEvent(Su)||!isLeftClickEvent(Su)||!!contains$2($u,Su.target)||nt.current,nt.current=!1},[o]),Ws=useEventCallback(Su=>{const $u=getRefTarget(o);$u&&contains$2($u,Su.target)&&(nt.current=!0)}),gu=useEventCallback(Su=>{tt.current||a(Su)});reactExports.useEffect(()=>{var Su,$u;if(c||o==null)return;const Iu=ownerDocument(getRefTarget(o)),Xu=Iu.defaultView||window;let r0=(Su=Xu.event)!=null?Su:($u=Xu.parent)==null?void 0:$u.event,p0=null;InitialTriggerEvents[d]&&(p0=listen(Iu,InitialTriggerEvents[d],Ws,!0));const y0=listen(Iu,d,$a,!0),A0=listen(Iu,d,O0=>{if(O0===r0){r0=void 0;return}gu(O0)});let $0=[];return"ontouchstart"in Iu.documentElement&&($0=[].slice.call(Iu.body.children).map(O0=>listen(O0,"mousemove",noop$7))),()=>{p0==null||p0(),y0(),A0(),$0.forEach(O0=>O0())}},[o,c,d,$a,Ws,gu])}function toModifierMap(o){const a={};return Array.isArray(o)?(o==null||o.forEach(c=>{a[c.name]=c}),a):o||a}function toModifierArray(o={}){return Array.isArray(o)?o:Object.keys(o).map(a=>(o[a].name=a,o[a]))}function mergeOptionsWithPopperConfig({enabled:o,enableEvents:a,placement:c,flip:d,offset:tt,fixed:nt,containerPadding:$a,arrowElement:Ws,popperConfig:gu={}}){var Su,$u,Iu,Xu,r0;const p0=toModifierMap(gu.modifiers);return Object.assign({},gu,{placement:c,enabled:o,strategy:nt?"fixed":gu.strategy,modifiers:toModifierArray(Object.assign({},p0,{eventListeners:{enabled:a,options:(Su=p0.eventListeners)==null?void 0:Su.options},preventOverflow:Object.assign({},p0.preventOverflow,{options:$a?Object.assign({padding:$a},($u=p0.preventOverflow)==null?void 0:$u.options):(Iu=p0.preventOverflow)==null?void 0:Iu.options}),offset:{options:Object.assign({offset:tt},(Xu=p0.offset)==null?void 0:Xu.options)},arrow:Object.assign({},p0.arrow,{enabled:!!Ws,options:Object.assign({},(r0=p0.arrow)==null?void 0:r0.options,{element:Ws})}),flip:Object.assign({enabled:!!d},p0.flip)}))})}const _excluded$3=["children","usePopper"];function _objectWithoutPropertiesLoose$3(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}const noop$6=()=>{};function useDropdownMenu(o={}){const a=reactExports.useContext(DropdownContext$1),[c,d]=useCallbackRef(),tt=reactExports.useRef(!1),{flip:nt,offset:$a,rootCloseEvent:Ws,fixed:gu=!1,placement:Su,popperConfig:$u={},enableEventListeners:Iu=!0,usePopper:Xu=!!a}=o,r0=(a==null?void 0:a.show)==null?!!o.show:a.show;r0&&!tt.current&&(tt.current=!0);const p0=u1=>{a==null||a.toggle(!1,u1)},{placement:y0,setMenu:A0,menuElement:$0,toggleElement:O0}=a||{},L0=usePopper(O0,$0,mergeOptionsWithPopperConfig({placement:Su||y0||"bottom-start",enabled:Xu,enableEvents:Iu??r0,offset:$a,flip:nt,fixed:gu,arrowElement:c,popperConfig:$u})),V0=Object.assign({ref:A0||noop$6,"aria-labelledby":O0==null?void 0:O0.id},L0.attributes.popper,{style:L0.styles.popper}),F0={show:r0,placement:y0,hasShown:tt.current,toggle:a==null?void 0:a.toggle,popper:Xu?L0:null,arrowProps:Xu?Object.assign({ref:d},L0.attributes.arrow,{style:L0.styles.arrow}):{}};return useClickOutside($0,p0,{clickTrigger:Ws,disabled:!r0}),[V0,F0]}function DropdownMenu$1(o){let{children:a,usePopper:c=!0}=o,d=_objectWithoutPropertiesLoose$3(o,_excluded$3);const[tt,nt]=useDropdownMenu(Object.assign({},d,{usePopper:c}));return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:a(tt,nt)})}DropdownMenu$1.displayName="DropdownMenu";const $b5e257d569688ac6$var$defaultContext={prefix:String(Math.round(Math.random()*1e10)),current:0},$b5e257d569688ac6$var$SSRContext=React.createContext($b5e257d569688ac6$var$defaultContext),$b5e257d569688ac6$var$IsSSRContext=React.createContext(!1);let $b5e257d569688ac6$var$canUseDOM=!!(typeof window<"u"&&window.document&&window.document.createElement),$b5e257d569688ac6$var$componentIds=new WeakMap;function $b5e257d569688ac6$var$useCounter(o=!1){let a=reactExports.useContext($b5e257d569688ac6$var$SSRContext),c=reactExports.useRef(null);if(c.current===null&&!o){var d,tt;let nt=(tt=React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||tt===void 0||(d=tt.ReactCurrentOwner)===null||d===void 0?void 0:d.current;if(nt){let $a=$b5e257d569688ac6$var$componentIds.get(nt);$a==null?$b5e257d569688ac6$var$componentIds.set(nt,{id:a.current,state:nt.memoizedState}):nt.memoizedState!==$a.state&&(a.current=$a.id,$b5e257d569688ac6$var$componentIds.delete(nt))}c.current=++a.current}return c.current}function $b5e257d569688ac6$var$useLegacySSRSafeId(o){let a=reactExports.useContext($b5e257d569688ac6$var$SSRContext);a===$b5e257d569688ac6$var$defaultContext&&!$b5e257d569688ac6$var$canUseDOM&&console.warn("When server rendering, you must wrap your application in an to ensure consistent ids are generated between the client and server.");let c=$b5e257d569688ac6$var$useCounter(!!o),d=`react-aria${a.prefix}`;return o||`${d}-${c}`}function $b5e257d569688ac6$var$useModernSSRSafeId(o){let a=React.useId(),[c]=reactExports.useState($b5e257d569688ac6$export$535bd6ca7f90a273()),d=c?"react-aria":`react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;return o||`${d}-${a}`}const $b5e257d569688ac6$export$619500959fc48b26=typeof React.useId=="function"?$b5e257d569688ac6$var$useModernSSRSafeId:$b5e257d569688ac6$var$useLegacySSRSafeId;function $b5e257d569688ac6$var$getSnapshot(){return!1}function $b5e257d569688ac6$var$getServerSnapshot(){return!0}function $b5e257d569688ac6$var$subscribe(o){return()=>{}}function $b5e257d569688ac6$export$535bd6ca7f90a273(){return typeof React.useSyncExternalStore=="function"?React.useSyncExternalStore($b5e257d569688ac6$var$subscribe,$b5e257d569688ac6$var$getSnapshot,$b5e257d569688ac6$var$getServerSnapshot):reactExports.useContext($b5e257d569688ac6$var$IsSSRContext)}const isRoleMenu=o=>{var a;return((a=o.getAttribute("role"))==null?void 0:a.toLowerCase())==="menu"},noop$5=()=>{};function useDropdownToggle(){const o=$b5e257d569688ac6$export$619500959fc48b26(),{show:a=!1,toggle:c=noop$5,setToggle:d,menuElement:tt}=reactExports.useContext(DropdownContext$1)||{},nt=reactExports.useCallback(Ws=>{c(!a,Ws)},[a,c]),$a={id:o,ref:d||noop$5,onClick:nt,"aria-expanded":!!a};return tt&&isRoleMenu(tt)&&($a["aria-haspopup"]=!0),[$a,{show:a,toggle:c}]}function DropdownToggle$1({children:o}){const[a,c]=useDropdownToggle();return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o(a,c)})}DropdownToggle$1.displayName="DropdownToggle";const SelectableContext=reactExports.createContext(null),makeEventKey=(o,a=null)=>o!=null?String(o):a||null,NavContext=reactExports.createContext(null);NavContext.displayName="NavContext";const _excluded$2=["as","disabled"];function _objectWithoutPropertiesLoose$2(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function isTrivialHref$1(o){return!o||o.trim()==="#"}function useButtonProps({tagName:o,disabled:a,href:c,target:d,rel:tt,role:nt,onClick:$a,tabIndex:Ws=0,type:gu}){o||(c!=null||d!=null||tt!=null?o="a":o="button");const Su={tagName:o};if(o==="button")return[{type:gu||"button",disabled:a},Su];const $u=Xu=>{if((a||o==="a"&&isTrivialHref$1(c))&&Xu.preventDefault(),a){Xu.stopPropagation();return}$a==null||$a(Xu)},Iu=Xu=>{Xu.key===" "&&(Xu.preventDefault(),$u(Xu))};return o==="a"&&(c||(c="#"),a&&(c=void 0)),[{role:nt??"button",disabled:void 0,tabIndex:a?void 0:Ws,href:c,target:o==="a"?d:void 0,"aria-disabled":a||void 0,rel:o==="a"?tt:void 0,onClick:$u,onKeyDown:Iu},Su]}const Button$1=reactExports.forwardRef((o,a)=>{let{as:c,disabled:d}=o,tt=_objectWithoutPropertiesLoose$2(o,_excluded$2);const[nt,{tagName:$a}]=useButtonProps(Object.assign({tagName:c,disabled:d},tt));return jsxRuntimeExports.jsx($a,Object.assign({},tt,nt,{ref:a}))});Button$1.displayName="Button";const _excluded$1=["eventKey","disabled","onClick","active","as"];function _objectWithoutPropertiesLoose$1(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function useDropdownItem({key:o,href:a,active:c,disabled:d,onClick:tt}){const nt=reactExports.useContext(SelectableContext),$a=reactExports.useContext(NavContext),{activeKey:Ws}=$a||{},gu=makeEventKey(o,a),Su=c==null&&o!=null?makeEventKey(Ws)===gu:c;return[{onClick:useEventCallback(Iu=>{d||(tt==null||tt(Iu),nt&&!Iu.isPropagationStopped()&&nt(gu,Iu))}),"aria-disabled":d||void 0,"aria-selected":Su,[dataAttr("dropdown-item")]:""},{isActive:Su}]}const DropdownItem$1=reactExports.forwardRef((o,a)=>{let{eventKey:c,disabled:d,onClick:tt,active:nt,as:$a=Button$1}=o,Ws=_objectWithoutPropertiesLoose$1(o,_excluded$1);const[gu]=useDropdownItem({key:c,href:Ws.href,disabled:d,onClick:tt,active:nt});return jsxRuntimeExports.jsx($a,Object.assign({},Ws,{ref:a},gu))});DropdownItem$1.displayName="DropdownItem";function useRefWithUpdate(){const o=useForceUpdate(),a=reactExports.useRef(null),c=reactExports.useCallback(d=>{a.current=d,o()},[o]);return[a,c]}function Dropdown$2({defaultShow:o,show:a,onSelect:c,onToggle:d,itemSelector:tt=`* [${dataAttr("dropdown-item")}]`,focusFirstItemOnShow:nt,placement:$a="bottom-start",children:Ws}){const gu=useWindow(),[Su,$u]=useUncontrolledProp$1(a,o,d),[Iu,Xu]=useRefWithUpdate(),r0=Iu.current,[p0,y0]=useRefWithUpdate(),A0=p0.current,$0=usePrevious(Su),O0=reactExports.useRef(null),L0=reactExports.useRef(!1),V0=reactExports.useContext(SelectableContext),F0=reactExports.useCallback((j1,r1,t1=r1==null?void 0:r1.type)=>{$u(j1,{originalEvent:r1,source:t1})},[$u]),u1=useEventCallback((j1,r1)=>{c==null||c(j1,r1),F0(!1,r1,"select"),r1.isPropagationStopped()||V0==null||V0(j1,r1)}),g1=reactExports.useMemo(()=>({toggle:F0,placement:$a,show:Su,menuElement:r0,toggleElement:A0,setMenu:Xu,setToggle:y0}),[F0,$a,Su,r0,A0,Xu,y0]);r0&&$0&&!Su&&(L0.current=r0.contains(r0.ownerDocument.activeElement));const E1=useEventCallback(()=>{A0&&A0.focus&&A0.focus()}),B1=useEventCallback(()=>{const j1=O0.current;let r1=nt;if(r1==null&&(r1=Iu.current&&isRoleMenu(Iu.current)?"keyboard":!1),r1===!1||r1==="keyboard"&&!/^key.+$/.test(j1))return;const t1=qsa(Iu.current,tt)[0];t1&&t1.focus&&t1.focus()});reactExports.useEffect(()=>{Su?B1():L0.current&&(L0.current=!1,E1())},[Su,L0,E1,B1]),reactExports.useEffect(()=>{O0.current=null});const lv=(j1,r1)=>{if(!Iu.current)return null;const t1=qsa(Iu.current,tt);let D0=t1.indexOf(j1)+r1;return D0=Math.max(0,Math.min(D0,t1.length)),t1[D0]};return useEventListener(reactExports.useCallback(()=>gu.document,[gu]),"keydown",j1=>{var r1,t1;const{key:D0}=j1,Z0=j1.target,f1=(r1=Iu.current)==null?void 0:r1.contains(Z0),w1=(t1=p0.current)==null?void 0:t1.contains(Z0);if(/input|textarea/i.test(Z0.tagName)&&(D0===" "||D0!=="Escape"&&f1||D0==="Escape"&&Z0.type==="search")||!f1&&!w1||D0==="Tab"&&(!Iu.current||!Su))return;O0.current=j1.type;const c1={originalEvent:j1,source:j1.type};switch(D0){case"ArrowUp":{const G0=lv(Z0,-1);G0&&G0.focus&&G0.focus(),j1.preventDefault();return}case"ArrowDown":if(j1.preventDefault(),!Su)$u(!0,c1);else{const G0=lv(Z0,1);G0&&G0.focus&&G0.focus()}return;case"Tab":addEventListener$1(Z0.ownerDocument,"keyup",G0=>{var o1;(G0.key==="Tab"&&!G0.target||!((o1=Iu.current)!=null&&o1.contains(G0.target)))&&$u(!1,c1)},{once:!0});break;case"Escape":D0==="Escape"&&(j1.preventDefault(),j1.stopPropagation()),$u(!1,c1);break}}),jsxRuntimeExports.jsx(SelectableContext.Provider,{value:u1,children:jsxRuntimeExports.jsx(DropdownContext$1.Provider,{value:g1,children:Ws})})}Dropdown$2.displayName="Dropdown";Dropdown$2.Menu=DropdownMenu$1;Dropdown$2.Toggle=DropdownToggle$1;Dropdown$2.Item=DropdownItem$1;function _extends$7(){return _extends$7=Object.assign?Object.assign.bind():function(o){for(var a=1;a1?$u-1:0),Xu=1;Xu<$u;Xu++)Iu[Xu-1]=arguments[Xu];c&&c.apply(void 0,[Su].concat(Iu)),$a(Su)},[c])]}function useUncontrolled(o,a){return Object.keys(a).reduce(function(c,d){var tt,nt=c,$a=nt[defaultKey(d)],Ws=nt[d],gu=_objectWithoutPropertiesLoose$5(nt,[defaultKey(d),d].map(_toPropertyKey)),Su=a[d],$u=useUncontrolledProp(Ws,$a,o[Su]),Iu=$u[0],Xu=$u[1];return _extends$7({},gu,(tt={},tt[d]=Iu,tt[Su]=Xu,tt))},o)}const DropdownContext=reactExports.createContext({});DropdownContext.displayName="DropdownContext";const DropdownDivider=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="hr",role:d="separator",...tt},nt)=>(a=useBootstrapPrefix(a,"dropdown-divider"),jsxRuntimeExports.jsx(c,{ref:nt,className:y$2(o,a),role:d,...tt})));DropdownDivider.displayName="DropdownDivider";const DropdownHeader=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="div",role:d="heading",...tt},nt)=>(a=useBootstrapPrefix(a,"dropdown-header"),jsxRuntimeExports.jsx(c,{ref:nt,className:y$2(o,a),role:d,...tt})));DropdownHeader.displayName="DropdownHeader";const _excluded=["onKeyDown"];function _objectWithoutPropertiesLoose(o,a){if(o==null)return{};var c={};for(var d in o)if({}.hasOwnProperty.call(o,d)){if(a.indexOf(d)>=0)continue;c[d]=o[d]}return c}function isTrivialHref(o){return!o||o.trim()==="#"}const Anchor=reactExports.forwardRef((o,a)=>{let{onKeyDown:c}=o,d=_objectWithoutPropertiesLoose(o,_excluded);const[tt]=useButtonProps(Object.assign({tagName:"a"},d)),nt=useEventCallback($a=>{tt.onKeyDown($a),c==null||c($a)});return isTrivialHref(d.href)||d.role==="button"?jsxRuntimeExports.jsx("a",Object.assign({ref:a},d,tt,{onKeyDown:nt})):jsxRuntimeExports.jsx("a",Object.assign({ref:a},d,{onKeyDown:c}))});Anchor.displayName="Anchor";const DropdownItem=reactExports.forwardRef(({bsPrefix:o,className:a,eventKey:c,disabled:d=!1,onClick:tt,active:nt,as:$a=Anchor,...Ws},gu)=>{const Su=useBootstrapPrefix(o,"dropdown-item"),[$u,Iu]=useDropdownItem({key:c,href:Ws.href,disabled:d,onClick:tt,active:nt});return jsxRuntimeExports.jsx($a,{...Ws,...$u,ref:gu,className:y$2(a,Su,Iu.isActive&&"active",d&&"disabled")})});DropdownItem.displayName="DropdownItem";const DropdownItemText=reactExports.forwardRef(({className:o,bsPrefix:a,as:c="span",...d},tt)=>(a=useBootstrapPrefix(a,"dropdown-item-text"),jsxRuntimeExports.jsx(c,{ref:tt,className:y$2(o,a),...d})));DropdownItemText.displayName="DropdownItemText";const context$1=reactExports.createContext(null);context$1.displayName="InputGroupContext";const context=reactExports.createContext(null);context.displayName="NavbarContext";function useWrappedRefWithWarning(o,a){return o}function getDropdownMenuPlacement(o,a,c){const d=c?"top-end":"top-start",tt=c?"top-start":"top-end",nt=c?"bottom-end":"bottom-start",$a=c?"bottom-start":"bottom-end",Ws=c?"right-start":"left-start",gu=c?"right-end":"left-end",Su=c?"left-start":"right-start",$u=c?"left-end":"right-end";let Iu=o?$a:nt;return a==="up"?Iu=o?tt:d:a==="end"?Iu=o?$u:Su:a==="start"?Iu=o?gu:Ws:a==="down-centered"?Iu="bottom":a==="up-centered"&&(Iu="top"),Iu}const DropdownMenu=reactExports.forwardRef(({bsPrefix:o,className:a,align:c,rootCloseEvent:d,flip:tt=!0,show:nt,renderOnMount:$a,as:Ws="div",popperConfig:gu,variant:Su,...$u},Iu)=>{let Xu=!1;const r0=reactExports.useContext(context),p0=useBootstrapPrefix(o,"dropdown-menu"),{align:y0,drop:A0,isRTL:$0}=reactExports.useContext(DropdownContext);c=c||y0;const O0=reactExports.useContext(context$1),L0=[];if(c)if(typeof c=="object"){const j1=Object.keys(c);if(j1.length){const r1=j1[0],t1=c[r1];Xu=t1==="start",L0.push(`${p0}-${r1}-${t1}`)}}else c==="end"&&(Xu=!0);const V0=getDropdownMenuPlacement(Xu,A0,$0),[F0,{hasShown:u1,popper:g1,show:E1,toggle:B1}]=useDropdownMenu({flip:tt,rootCloseEvent:d,show:nt,usePopper:!r0&&L0.length===0,offset:[0,2],popperConfig:gu,placement:V0});if(F0.ref=useMergedRefs(useWrappedRefWithWarning(Iu),F0.ref),useIsomorphicEffect(()=>{E1&&(g1==null||g1.update())},[E1]),!u1&&!$a&&!O0)return null;typeof Ws!="string"&&(F0.show=E1,F0.close=()=>B1==null?void 0:B1(!1),F0.align=c);let lv=$u.style;return g1!=null&&g1.placement&&(lv={...$u.style,...F0.style},$u["x-placement"]=g1.placement),jsxRuntimeExports.jsx(Ws,{...$u,...F0,style:lv,...(L0.length||r0)&&{"data-bs-popper":"static"},className:y$2(a,p0,E1&&"show",Xu&&`${p0}-end`,Su&&`${p0}-${Su}`,...L0)})});DropdownMenu.displayName="DropdownMenu";const Button=reactExports.forwardRef(({as:o,bsPrefix:a,variant:c="primary",size:d,active:tt=!1,disabled:nt=!1,className:$a,...Ws},gu)=>{const Su=useBootstrapPrefix(a,"btn"),[$u,{tagName:Iu}]=useButtonProps({tagName:o,disabled:nt,...Ws}),Xu=Iu;return jsxRuntimeExports.jsx(Xu,{...$u,...Ws,ref:gu,disabled:nt,className:y$2($a,Su,tt&&"active",c&&`${Su}-${c}`,d&&`${Su}-${d}`,Ws.href&&nt&&"disabled")})});Button.displayName="Button";const DropdownToggle=reactExports.forwardRef(({bsPrefix:o,split:a,className:c,childBsPrefix:d,as:tt=Button,...nt},$a)=>{const Ws=useBootstrapPrefix(o,"dropdown-toggle"),gu=reactExports.useContext(DropdownContext$1);d!==void 0&&(nt.bsPrefix=d);const[Su]=useDropdownToggle();return Su.ref=useMergedRefs(Su.ref,useWrappedRefWithWarning($a)),jsxRuntimeExports.jsx(tt,{className:y$2(c,Ws,a&&`${Ws}-split`,(gu==null?void 0:gu.show)&&"show"),...Su,...nt})});DropdownToggle.displayName="DropdownToggle";const Dropdown=reactExports.forwardRef((o,a)=>{const{bsPrefix:c,drop:d="down",show:tt,className:nt,align:$a="start",onSelect:Ws,onToggle:gu,focusFirstItemOnShow:Su,as:$u="div",navbar:Iu,autoClose:Xu=!0,...r0}=useUncontrolled(o,{show:"onToggle"}),p0=reactExports.useContext(context$1),y0=useBootstrapPrefix(c,"dropdown"),A0=useIsRTL(),$0=g1=>Xu===!1?g1==="click":Xu==="inside"?g1!=="rootClose":Xu==="outside"?g1!=="select":!0,O0=useEventCallback((g1,E1)=>{var B1;!((B1=E1.originalEvent)==null||(B1=B1.target)==null)&&B1.classList.contains("dropdown-toggle")&&E1.source==="mousedown"||(E1.originalEvent.currentTarget===document&&(E1.source!=="keydown"||E1.originalEvent.key==="Escape")&&(E1.source="rootClose"),$0(E1.source)&&(gu==null||gu(g1,E1)))}),V0=getDropdownMenuPlacement($a==="end",d,A0),F0=reactExports.useMemo(()=>({align:$a,drop:d,isRTL:A0}),[$a,d,A0]),u1={down:y0,"down-centered":`${y0}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return jsxRuntimeExports.jsx(DropdownContext.Provider,{value:F0,children:jsxRuntimeExports.jsx(Dropdown$2,{placement:V0,show:tt,onSelect:Ws,onToggle:O0,focusFirstItemOnShow:Su,itemSelector:`.${y0}-item:not(.disabled):not(:disabled)`,children:p0?r0.children:jsxRuntimeExports.jsx($u,{...r0,ref:a,className:y$2(nt,tt&&"show",u1[d])})})})});Dropdown.displayName="Dropdown";const Dropdown$1=Object.assign(Dropdown,{Toggle:DropdownToggle,Menu:DropdownMenu,Item:DropdownItem,ItemText:DropdownItemText,Divider:DropdownDivider,Header:DropdownHeader}),DropdownWrapper=pt$1.div` position: relative; .app-dropdown { @@ -563,18 +563,18 @@ ${a.join(` } `;function identityRowItem(o,a,c,d){return jsxRuntimeExports.jsxs(RowItem$8,{$hasBorders:a===c,children:[jsxRuntimeExports.jsx("div",{className:"row-item type",children:o.type}),jsxRuntimeExports.jsx("div",{className:"row-item date",children:formatTimestampToDate(o.createdAt)}),jsxRuntimeExports.jsx("div",{className:"row-item public-key",children:o.publicKey}),jsxRuntimeExports.jsx("div",{className:"menu-dropdown",children:jsxRuntimeExports.jsx(MenuIconDropdown,{options:[{title:"Copy key",onClick:()=>d&&d(o.publicKey)}]})})]},a)}const FlexWrapper$7=pt$1.div` flex: 1; -`;function IdentitiesTable({rootKeysList:o,onAddRootKey:a,onCopyKeyClick:c,errorMessage:d}){const tt=translations.identityPage;return jsxRuntimeExports.jsx(ContentCard,{headerTitle:tt.title,headerOptionText:tt.addRootKeyText,headerOnOptionClick:a,headerDescription:o.length>0?`${tt.loggedInLabel}${o[0].publicKey}`:"",children:jsxRuntimeExports.jsx(FlexWrapper$7,{children:jsxRuntimeExports.jsx(ListTable,{listHeaderItems:["TYPE","ADDED","PUBLIC KEY"],numOfColumns:6,listItems:o,rowItem:identityRowItem,roundTopItem:!0,noItemsText:tt.noRootKeysText,onRowItemClick:c,error:d})})})}function isFinalExecution(o){return(o==null?void 0:o.status).SuccessValue!==void 0||(o==null?void 0:o.status).Failure!==void 0}const getMetamaskType=o=>{switch(o){case 1:return Network.ETH;case 56:return Network.BNB;case 42161:return Network.ARB;case 324:return Network.ZK;default:return Network.ETH}};function mapApiResponseToObjects(o){var a,c,d;return(a=o==null?void 0:o.did)!=null&&a.root_keys?((d=(c=o==null?void 0:o.did)==null?void 0:c.root_keys)==null?void 0:d.map(nt=>{switch(nt.wallet.type){case Network.NEAR:return{signingKey:nt.signing_key,createdAt:nt.created_at,type:Network.NEAR};case Network.ETH:return{signingKey:nt.signing_key,type:Network.ETH,createdAt:nt.created_at,chainId:nt.wallet.chainId??1};case Network.ICP:return{signingKey:nt.signing_key,type:Network.ICP,createdAt:nt.created_at};case Network.STARKNET:default:return{signingKey:nt.signing_key,type:Network.STARKNET+" "+nt.wallet.walletName,createdAt:nt.created_at}}})).map(nt=>({type:nt.type===Network.ETH?getMetamaskType(nt.chainId??1):nt.type,createdAt:nt.createdAt,publicKey:nt.type==="NEAR"?nt.signingKey.split(":")[1].trim():nt.signingKey})):[]}function IdentityPage(){const o=useNavigate(),{showServerDownPopup:a}=useServerDown(),[c,d]=reactExports.useState(""),[tt,nt]=reactExports.useState([]);return reactExports.useEffect(()=>{(async()=>{d("");const Ys=await apiClient(a).node().getDidList();if(Ys.error){d(Ys.error.message);return}else{const gu=mapApiResponseToObjects(Ys.data);nt(gu)}})()},[]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(IdentitiesTable,{onAddRootKey:()=>o("/identity/root-key"),rootKeysList:tt,onCopyKeyClick:$a=>navigator.clipboard.writeText($a),errorMessage:c})})]})}var browserIndex$2={},browserIndex$1={},keystore$1={},lib$b={},in_memory_key_store$1={},lib$a={},constants$6={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.KeySize=o.KeyType=void 0,function(a){a[a.ED25519=0]="ED25519"}(o.KeyType||(o.KeyType={})),function(a){a[a.SECRET_KEY=32]="SECRET_KEY"}(o.KeySize||(o.KeySize={}))})(constants$6);var key_pair$1={},key_pair_base={};Object.defineProperty(key_pair_base,"__esModule",{value:!0});key_pair_base.KeyPairBase=void 0;class KeyPairBase{}key_pair_base.KeyPairBase=KeyPairBase;var key_pair_ed25519={},lib$9={},constants$5={},bn$2={exports:{}};const require$$1$4=getAugmentedNamespace(dist$1);bn$2.exports;(function(o){(function(a,c){function d(t1,D0){if(!t1)throw new Error(D0||"Assertion failed")}function tt(t1,D0){t1.super_=D0;var Z0=function(){};Z0.prototype=D0.prototype,t1.prototype=new Z0,t1.prototype.constructor=t1}function nt(t1,D0,Z0){if(nt.isBN(t1))return t1;this.negative=0,this.words=null,this.length=0,this.red=null,t1!==null&&((D0==="le"||D0==="be")&&(Z0=D0,D0=10),this._init(t1||0,D0||10,Z0||"be"))}typeof a=="object"?a.exports=nt:c.BN=nt,nt.BN=nt,nt.wordSize=26;var $a;try{typeof window<"u"&&typeof window.Buffer<"u"?$a=window.Buffer:$a=require$$1$4.Buffer}catch{}nt.isBN=function(D0){return D0 instanceof nt?!0:D0!==null&&typeof D0=="object"&&D0.constructor.wordSize===nt.wordSize&&Array.isArray(D0.words)},nt.max=function(D0,Z0){return D0.cmp(Z0)>0?D0:Z0},nt.min=function(D0,Z0){return D0.cmp(Z0)<0?D0:Z0},nt.prototype._init=function(D0,Z0,f1){if(typeof D0=="number")return this._initNumber(D0,Z0,f1);if(typeof D0=="object")return this._initArray(D0,Z0,f1);Z0==="hex"&&(Z0=16),d(Z0===(Z0|0)&&Z0>=2&&Z0<=36),D0=D0.toString().replace(/\s+/g,"");var w1=0;D0[0]==="-"&&(w1++,this.negative=1),w1=0;w1-=3)c1=D0[w1]|D0[w1-1]<<8|D0[w1-2]<<16,this.words[m1]|=c1<>>26-G0&67108863,G0+=24,G0>=26&&(G0-=26,m1++);else if(f1==="le")for(w1=0,m1=0;w1>>26-G0&67108863,G0+=24,G0>=26&&(G0-=26,m1++);return this._strip()};function Ys(t1,D0){var Z0=t1.charCodeAt(D0);if(Z0>=48&&Z0<=57)return Z0-48;if(Z0>=65&&Z0<=70)return Z0-55;if(Z0>=97&&Z0<=102)return Z0-87;d(!1,"Invalid character in "+t1)}function gu(t1,D0,Z0){var f1=Ys(t1,Z0);return Z0-1>=D0&&(f1|=Ys(t1,Z0-1)<<4),f1}nt.prototype._parseHex=function(D0,Z0,f1){this.length=Math.ceil((D0.length-Z0)/6),this.words=new Array(this.length);for(var w1=0;w1=Z0;w1-=2)G0=gu(D0,Z0,w1)<=18?(m1-=18,c1+=1,this.words[c1]|=G0>>>26):m1+=8;else{var o1=D0.length-Z0;for(w1=o1%2===0?Z0+1:Z0;w1=18?(m1-=18,c1+=1,this.words[c1]|=G0>>>26):m1+=8}this._strip()};function xu(t1,D0,Z0,f1){for(var w1=0,m1=0,c1=Math.min(t1.length,Z0),G0=D0;G0=49?m1=o1-49+10:o1>=17?m1=o1-17+10:m1=o1,d(o1>=0&&m11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},nt.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{nt.prototype[Symbol.for("nodejs.util.inspect.custom")]=Iu}catch{nt.prototype.inspect=Iu}else nt.prototype.inspect=Iu;function Iu(){return(this.red?""}var Xu=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],i0=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],p0=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];nt.prototype.toString=function(D0,Z0){D0=D0||10,Z0=Z0|0||1;var f1;if(D0===16||D0==="hex"){f1="";for(var w1=0,m1=0,c1=0;c1>>24-w1&16777215,w1+=2,w1>=26&&(w1-=26,c1--),m1!==0||c1!==this.length-1?f1=Xu[6-o1.length]+o1+f1:f1=o1+f1}for(m1!==0&&(f1=m1.toString(16)+f1);f1.length%Z0!==0;)f1="0"+f1;return this.negative!==0&&(f1="-"+f1),f1}if(D0===(D0|0)&&D0>=2&&D0<=36){var d1=i0[D0],R1=p0[D0];f1="";var O1=this.clone();for(O1.negative=0;!O1.isZero();){var Q1=O1.modrn(R1).toString(D0);O1=O1.idivn(R1),O1.isZero()?f1=Q1+f1:f1=Xu[d1-Q1.length]+Q1+f1}for(this.isZero()&&(f1="0"+f1);f1.length%Z0!==0;)f1="0"+f1;return this.negative!==0&&(f1="-"+f1),f1}d(!1,"Base should be between 2 and 36")},nt.prototype.toNumber=function(){var D0=this.words[0];return this.length===2?D0+=this.words[1]*67108864:this.length===3&&this.words[2]===1?D0+=4503599627370496+this.words[1]*67108864:this.length>2&&d(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-D0:D0},nt.prototype.toJSON=function(){return this.toString(16,2)},$a&&(nt.prototype.toBuffer=function(D0,Z0){return this.toArrayLike($a,D0,Z0)}),nt.prototype.toArray=function(D0,Z0){return this.toArrayLike(Array,D0,Z0)};var w0=function(D0,Z0){return D0.allocUnsafe?D0.allocUnsafe(Z0):new D0(Z0)};nt.prototype.toArrayLike=function(D0,Z0,f1){this._strip();var w1=this.byteLength(),m1=f1||Math.max(1,w1);d(w1<=m1,"byte array longer than desired length"),d(m1>0,"Requested array length <= 0");var c1=w0(D0,m1),G0=Z0==="le"?"LE":"BE";return this["_toArrayLike"+G0](c1,w1),c1},nt.prototype._toArrayLikeLE=function(D0,Z0){for(var f1=0,w1=0,m1=0,c1=0;m1>8&255),f1>16&255),c1===6?(f1>24&255),w1=0,c1=0):(w1=G0>>>24,c1+=2)}if(f1=0&&(D0[f1--]=G0>>8&255),f1>=0&&(D0[f1--]=G0>>16&255),c1===6?(f1>=0&&(D0[f1--]=G0>>24&255),w1=0,c1=0):(w1=G0>>>24,c1+=2)}if(f1>=0)for(D0[f1--]=w1;f1>=0;)D0[f1--]=0},Math.clz32?nt.prototype._countBits=function(D0){return 32-Math.clz32(D0)}:nt.prototype._countBits=function(D0){var Z0=D0,f1=0;return Z0>=4096&&(f1+=13,Z0>>>=13),Z0>=64&&(f1+=7,Z0>>>=7),Z0>=8&&(f1+=4,Z0>>>=4),Z0>=2&&(f1+=2,Z0>>>=2),f1+Z0},nt.prototype._zeroBits=function(D0){if(D0===0)return 26;var Z0=D0,f1=0;return Z0&8191||(f1+=13,Z0>>>=13),Z0&127||(f1+=7,Z0>>>=7),Z0&15||(f1+=4,Z0>>>=4),Z0&3||(f1+=2,Z0>>>=2),Z0&1||f1++,f1},nt.prototype.bitLength=function(){var D0=this.words[this.length-1],Z0=this._countBits(D0);return(this.length-1)*26+Z0};function A0(t1){for(var D0=new Array(t1.bitLength()),Z0=0;Z0>>w1&1}return D0}nt.prototype.zeroBits=function(){if(this.isZero())return 0;for(var D0=0,Z0=0;Z0D0.length?this.clone().ior(D0):D0.clone().ior(this)},nt.prototype.uor=function(D0){return this.length>D0.length?this.clone().iuor(D0):D0.clone().iuor(this)},nt.prototype.iuand=function(D0){var Z0;this.length>D0.length?Z0=D0:Z0=this;for(var f1=0;f1D0.length?this.clone().iand(D0):D0.clone().iand(this)},nt.prototype.uand=function(D0){return this.length>D0.length?this.clone().iuand(D0):D0.clone().iuand(this)},nt.prototype.iuxor=function(D0){var Z0,f1;this.length>D0.length?(Z0=this,f1=D0):(Z0=D0,f1=this);for(var w1=0;w1D0.length?this.clone().ixor(D0):D0.clone().ixor(this)},nt.prototype.uxor=function(D0){return this.length>D0.length?this.clone().iuxor(D0):D0.clone().iuxor(this)},nt.prototype.inotn=function(D0){d(typeof D0=="number"&&D0>=0);var Z0=Math.ceil(D0/26)|0,f1=D0%26;this._expand(Z0),f1>0&&Z0--;for(var w1=0;w10&&(this.words[w1]=~this.words[w1]&67108863>>26-f1),this._strip()},nt.prototype.notn=function(D0){return this.clone().inotn(D0)},nt.prototype.setn=function(D0,Z0){d(typeof D0=="number"&&D0>=0);var f1=D0/26|0,w1=D0%26;return this._expand(f1+1),Z0?this.words[f1]=this.words[f1]|1<D0.length?(f1=this,w1=D0):(f1=D0,w1=this);for(var m1=0,c1=0;c1>>26;for(;m1!==0&&c1>>26;if(this.length=f1.length,m1!==0)this.words[this.length]=m1,this.length++;else if(f1!==this)for(;c1D0.length?this.clone().iadd(D0):D0.clone().iadd(this)},nt.prototype.isub=function(D0){if(D0.negative!==0){D0.negative=0;var Z0=this.iadd(D0);return D0.negative=1,Z0._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(D0),this.negative=1,this._normSign();var f1=this.cmp(D0);if(f1===0)return this.negative=0,this.length=1,this.words[0]=0,this;var w1,m1;f1>0?(w1=this,m1=D0):(w1=D0,m1=this);for(var c1=0,G0=0;G0>26,this.words[G0]=Z0&67108863;for(;c1!==0&&G0>26,this.words[G0]=Z0&67108863;if(c1===0&&G0>>26,O1=o1&67108863,Q1=Math.min(d1,D0.length-1),rv=Math.max(0,d1-t1.length+1);rv<=Q1;rv++){var D1=d1-rv|0;w1=t1.words[D1]|0,m1=D0.words[rv]|0,c1=w1*m1+O1,R1+=c1/67108864|0,O1=c1&67108863}Z0.words[d1]=O1|0,o1=R1|0}return o1!==0?Z0.words[d1]=o1|0:Z0.length--,Z0._strip()}var O0=function(D0,Z0,f1){var w1=D0.words,m1=Z0.words,c1=f1.words,G0=0,o1,d1,R1,O1=w1[0]|0,Q1=O1&8191,rv=O1>>>13,D1=w1[1]|0,ev=D1&8191,Mv=D1>>>13,Zv=w1[2]|0,fv=Zv&8191,cv=Zv>>>13,ly=w1[3]|0,Cy=ly&8191,Ly=ly>>>13,Hy=w1[4]|0,t2=Hy&8191,C2=Hy>>>13,Dy=w1[5]|0,jw=Dy&8191,pw=Dy>>>13,vw=w1[6]|0,Hw=vw&8191,uw=vw>>>13,Nw=w1[7]|0,lw=Nw&8191,Lw=Nw>>>13,zw=w1[8]|0,A2=zw&8191,kv=zw>>>13,Y1=w1[9]|0,tv=Y1&8191,Yv=Y1>>>13,By=m1[0]|0,Qy=By&8191,e2=By>>>13,Kw=m1[1]|0,r$=Kw&8191,v3=Kw>>>13,d$=m1[2]|0,$2=d$&8191,_$=d$>>>13,Q$=m1[3]|0,S$=Q$&8191,m$=Q$>>>13,m3=m1[4]|0,n$=m3&8191,a$=m3>>>13,OE=m1[5]|0,Mw=OE&8191,Bw=OE>>>13,o3=m1[6]|0,B$=o3&8191,$y=o3>>>13,Kv=m1[7]|0,Ny=Kv&8191,Vy=Kv>>>13,Sy=m1[8]|0,fw=Sy&8191,xw=Sy>>>13,V3=m1[9]|0,i$=V3&8191,y$=V3>>>13;f1.negative=D0.negative^Z0.negative,f1.length=19,o1=Math.imul(Q1,Qy),d1=Math.imul(Q1,e2),d1=d1+Math.imul(rv,Qy)|0,R1=Math.imul(rv,e2);var Gw=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(Gw>>>26)|0,Gw&=67108863,o1=Math.imul(ev,Qy),d1=Math.imul(ev,e2),d1=d1+Math.imul(Mv,Qy)|0,R1=Math.imul(Mv,e2),o1=o1+Math.imul(Q1,r$)|0,d1=d1+Math.imul(Q1,v3)|0,d1=d1+Math.imul(rv,r$)|0,R1=R1+Math.imul(rv,v3)|0;var g3=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(g3>>>26)|0,g3&=67108863,o1=Math.imul(fv,Qy),d1=Math.imul(fv,e2),d1=d1+Math.imul(cv,Qy)|0,R1=Math.imul(cv,e2),o1=o1+Math.imul(ev,r$)|0,d1=d1+Math.imul(ev,v3)|0,d1=d1+Math.imul(Mv,r$)|0,R1=R1+Math.imul(Mv,v3)|0,o1=o1+Math.imul(Q1,$2)|0,d1=d1+Math.imul(Q1,_$)|0,d1=d1+Math.imul(rv,$2)|0,R1=R1+Math.imul(rv,_$)|0;var j3=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(j3>>>26)|0,j3&=67108863,o1=Math.imul(Cy,Qy),d1=Math.imul(Cy,e2),d1=d1+Math.imul(Ly,Qy)|0,R1=Math.imul(Ly,e2),o1=o1+Math.imul(fv,r$)|0,d1=d1+Math.imul(fv,v3)|0,d1=d1+Math.imul(cv,r$)|0,R1=R1+Math.imul(cv,v3)|0,o1=o1+Math.imul(ev,$2)|0,d1=d1+Math.imul(ev,_$)|0,d1=d1+Math.imul(Mv,$2)|0,R1=R1+Math.imul(Mv,_$)|0,o1=o1+Math.imul(Q1,S$)|0,d1=d1+Math.imul(Q1,m$)|0,d1=d1+Math.imul(rv,S$)|0,R1=R1+Math.imul(rv,m$)|0;var $w=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+($w>>>26)|0,$w&=67108863,o1=Math.imul(t2,Qy),d1=Math.imul(t2,e2),d1=d1+Math.imul(C2,Qy)|0,R1=Math.imul(C2,e2),o1=o1+Math.imul(Cy,r$)|0,d1=d1+Math.imul(Cy,v3)|0,d1=d1+Math.imul(Ly,r$)|0,R1=R1+Math.imul(Ly,v3)|0,o1=o1+Math.imul(fv,$2)|0,d1=d1+Math.imul(fv,_$)|0,d1=d1+Math.imul(cv,$2)|0,R1=R1+Math.imul(cv,_$)|0,o1=o1+Math.imul(ev,S$)|0,d1=d1+Math.imul(ev,m$)|0,d1=d1+Math.imul(Mv,S$)|0,R1=R1+Math.imul(Mv,m$)|0,o1=o1+Math.imul(Q1,n$)|0,d1=d1+Math.imul(Q1,a$)|0,d1=d1+Math.imul(rv,n$)|0,R1=R1+Math.imul(rv,a$)|0;var w3=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(w3>>>26)|0,w3&=67108863,o1=Math.imul(jw,Qy),d1=Math.imul(jw,e2),d1=d1+Math.imul(pw,Qy)|0,R1=Math.imul(pw,e2),o1=o1+Math.imul(t2,r$)|0,d1=d1+Math.imul(t2,v3)|0,d1=d1+Math.imul(C2,r$)|0,R1=R1+Math.imul(C2,v3)|0,o1=o1+Math.imul(Cy,$2)|0,d1=d1+Math.imul(Cy,_$)|0,d1=d1+Math.imul(Ly,$2)|0,R1=R1+Math.imul(Ly,_$)|0,o1=o1+Math.imul(fv,S$)|0,d1=d1+Math.imul(fv,m$)|0,d1=d1+Math.imul(cv,S$)|0,R1=R1+Math.imul(cv,m$)|0,o1=o1+Math.imul(ev,n$)|0,d1=d1+Math.imul(ev,a$)|0,d1=d1+Math.imul(Mv,n$)|0,R1=R1+Math.imul(Mv,a$)|0,o1=o1+Math.imul(Q1,Mw)|0,d1=d1+Math.imul(Q1,Bw)|0,d1=d1+Math.imul(rv,Mw)|0,R1=R1+Math.imul(rv,Bw)|0;var yE=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(yE>>>26)|0,yE&=67108863,o1=Math.imul(Hw,Qy),d1=Math.imul(Hw,e2),d1=d1+Math.imul(uw,Qy)|0,R1=Math.imul(uw,e2),o1=o1+Math.imul(jw,r$)|0,d1=d1+Math.imul(jw,v3)|0,d1=d1+Math.imul(pw,r$)|0,R1=R1+Math.imul(pw,v3)|0,o1=o1+Math.imul(t2,$2)|0,d1=d1+Math.imul(t2,_$)|0,d1=d1+Math.imul(C2,$2)|0,R1=R1+Math.imul(C2,_$)|0,o1=o1+Math.imul(Cy,S$)|0,d1=d1+Math.imul(Cy,m$)|0,d1=d1+Math.imul(Ly,S$)|0,R1=R1+Math.imul(Ly,m$)|0,o1=o1+Math.imul(fv,n$)|0,d1=d1+Math.imul(fv,a$)|0,d1=d1+Math.imul(cv,n$)|0,R1=R1+Math.imul(cv,a$)|0,o1=o1+Math.imul(ev,Mw)|0,d1=d1+Math.imul(ev,Bw)|0,d1=d1+Math.imul(Mv,Mw)|0,R1=R1+Math.imul(Mv,Bw)|0,o1=o1+Math.imul(Q1,B$)|0,d1=d1+Math.imul(Q1,$y)|0,d1=d1+Math.imul(rv,B$)|0,R1=R1+Math.imul(rv,$y)|0;var bE=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(bE>>>26)|0,bE&=67108863,o1=Math.imul(lw,Qy),d1=Math.imul(lw,e2),d1=d1+Math.imul(Lw,Qy)|0,R1=Math.imul(Lw,e2),o1=o1+Math.imul(Hw,r$)|0,d1=d1+Math.imul(Hw,v3)|0,d1=d1+Math.imul(uw,r$)|0,R1=R1+Math.imul(uw,v3)|0,o1=o1+Math.imul(jw,$2)|0,d1=d1+Math.imul(jw,_$)|0,d1=d1+Math.imul(pw,$2)|0,R1=R1+Math.imul(pw,_$)|0,o1=o1+Math.imul(t2,S$)|0,d1=d1+Math.imul(t2,m$)|0,d1=d1+Math.imul(C2,S$)|0,R1=R1+Math.imul(C2,m$)|0,o1=o1+Math.imul(Cy,n$)|0,d1=d1+Math.imul(Cy,a$)|0,d1=d1+Math.imul(Ly,n$)|0,R1=R1+Math.imul(Ly,a$)|0,o1=o1+Math.imul(fv,Mw)|0,d1=d1+Math.imul(fv,Bw)|0,d1=d1+Math.imul(cv,Mw)|0,R1=R1+Math.imul(cv,Bw)|0,o1=o1+Math.imul(ev,B$)|0,d1=d1+Math.imul(ev,$y)|0,d1=d1+Math.imul(Mv,B$)|0,R1=R1+Math.imul(Mv,$y)|0,o1=o1+Math.imul(Q1,Ny)|0,d1=d1+Math.imul(Q1,Vy)|0,d1=d1+Math.imul(rv,Ny)|0,R1=R1+Math.imul(rv,Vy)|0;var J_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(J_>>>26)|0,J_&=67108863,o1=Math.imul(A2,Qy),d1=Math.imul(A2,e2),d1=d1+Math.imul(kv,Qy)|0,R1=Math.imul(kv,e2),o1=o1+Math.imul(lw,r$)|0,d1=d1+Math.imul(lw,v3)|0,d1=d1+Math.imul(Lw,r$)|0,R1=R1+Math.imul(Lw,v3)|0,o1=o1+Math.imul(Hw,$2)|0,d1=d1+Math.imul(Hw,_$)|0,d1=d1+Math.imul(uw,$2)|0,R1=R1+Math.imul(uw,_$)|0,o1=o1+Math.imul(jw,S$)|0,d1=d1+Math.imul(jw,m$)|0,d1=d1+Math.imul(pw,S$)|0,R1=R1+Math.imul(pw,m$)|0,o1=o1+Math.imul(t2,n$)|0,d1=d1+Math.imul(t2,a$)|0,d1=d1+Math.imul(C2,n$)|0,R1=R1+Math.imul(C2,a$)|0,o1=o1+Math.imul(Cy,Mw)|0,d1=d1+Math.imul(Cy,Bw)|0,d1=d1+Math.imul(Ly,Mw)|0,R1=R1+Math.imul(Ly,Bw)|0,o1=o1+Math.imul(fv,B$)|0,d1=d1+Math.imul(fv,$y)|0,d1=d1+Math.imul(cv,B$)|0,R1=R1+Math.imul(cv,$y)|0,o1=o1+Math.imul(ev,Ny)|0,d1=d1+Math.imul(ev,Vy)|0,d1=d1+Math.imul(Mv,Ny)|0,R1=R1+Math.imul(Mv,Vy)|0,o1=o1+Math.imul(Q1,fw)|0,d1=d1+Math.imul(Q1,xw)|0,d1=d1+Math.imul(rv,fw)|0,R1=R1+Math.imul(rv,xw)|0;var B_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(B_>>>26)|0,B_&=67108863,o1=Math.imul(tv,Qy),d1=Math.imul(tv,e2),d1=d1+Math.imul(Yv,Qy)|0,R1=Math.imul(Yv,e2),o1=o1+Math.imul(A2,r$)|0,d1=d1+Math.imul(A2,v3)|0,d1=d1+Math.imul(kv,r$)|0,R1=R1+Math.imul(kv,v3)|0,o1=o1+Math.imul(lw,$2)|0,d1=d1+Math.imul(lw,_$)|0,d1=d1+Math.imul(Lw,$2)|0,R1=R1+Math.imul(Lw,_$)|0,o1=o1+Math.imul(Hw,S$)|0,d1=d1+Math.imul(Hw,m$)|0,d1=d1+Math.imul(uw,S$)|0,R1=R1+Math.imul(uw,m$)|0,o1=o1+Math.imul(jw,n$)|0,d1=d1+Math.imul(jw,a$)|0,d1=d1+Math.imul(pw,n$)|0,R1=R1+Math.imul(pw,a$)|0,o1=o1+Math.imul(t2,Mw)|0,d1=d1+Math.imul(t2,Bw)|0,d1=d1+Math.imul(C2,Mw)|0,R1=R1+Math.imul(C2,Bw)|0,o1=o1+Math.imul(Cy,B$)|0,d1=d1+Math.imul(Cy,$y)|0,d1=d1+Math.imul(Ly,B$)|0,R1=R1+Math.imul(Ly,$y)|0,o1=o1+Math.imul(fv,Ny)|0,d1=d1+Math.imul(fv,Vy)|0,d1=d1+Math.imul(cv,Ny)|0,R1=R1+Math.imul(cv,Vy)|0,o1=o1+Math.imul(ev,fw)|0,d1=d1+Math.imul(ev,xw)|0,d1=d1+Math.imul(Mv,fw)|0,R1=R1+Math.imul(Mv,xw)|0,o1=o1+Math.imul(Q1,i$)|0,d1=d1+Math.imul(Q1,y$)|0,d1=d1+Math.imul(rv,i$)|0,R1=R1+Math.imul(rv,y$)|0;var $_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+($_>>>26)|0,$_&=67108863,o1=Math.imul(tv,r$),d1=Math.imul(tv,v3),d1=d1+Math.imul(Yv,r$)|0,R1=Math.imul(Yv,v3),o1=o1+Math.imul(A2,$2)|0,d1=d1+Math.imul(A2,_$)|0,d1=d1+Math.imul(kv,$2)|0,R1=R1+Math.imul(kv,_$)|0,o1=o1+Math.imul(lw,S$)|0,d1=d1+Math.imul(lw,m$)|0,d1=d1+Math.imul(Lw,S$)|0,R1=R1+Math.imul(Lw,m$)|0,o1=o1+Math.imul(Hw,n$)|0,d1=d1+Math.imul(Hw,a$)|0,d1=d1+Math.imul(uw,n$)|0,R1=R1+Math.imul(uw,a$)|0,o1=o1+Math.imul(jw,Mw)|0,d1=d1+Math.imul(jw,Bw)|0,d1=d1+Math.imul(pw,Mw)|0,R1=R1+Math.imul(pw,Bw)|0,o1=o1+Math.imul(t2,B$)|0,d1=d1+Math.imul(t2,$y)|0,d1=d1+Math.imul(C2,B$)|0,R1=R1+Math.imul(C2,$y)|0,o1=o1+Math.imul(Cy,Ny)|0,d1=d1+Math.imul(Cy,Vy)|0,d1=d1+Math.imul(Ly,Ny)|0,R1=R1+Math.imul(Ly,Vy)|0,o1=o1+Math.imul(fv,fw)|0,d1=d1+Math.imul(fv,xw)|0,d1=d1+Math.imul(cv,fw)|0,R1=R1+Math.imul(cv,xw)|0,o1=o1+Math.imul(ev,i$)|0,d1=d1+Math.imul(ev,y$)|0,d1=d1+Math.imul(Mv,i$)|0,R1=R1+Math.imul(Mv,y$)|0;var M6=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(M6>>>26)|0,M6&=67108863,o1=Math.imul(tv,$2),d1=Math.imul(tv,_$),d1=d1+Math.imul(Yv,$2)|0,R1=Math.imul(Yv,_$),o1=o1+Math.imul(A2,S$)|0,d1=d1+Math.imul(A2,m$)|0,d1=d1+Math.imul(kv,S$)|0,R1=R1+Math.imul(kv,m$)|0,o1=o1+Math.imul(lw,n$)|0,d1=d1+Math.imul(lw,a$)|0,d1=d1+Math.imul(Lw,n$)|0,R1=R1+Math.imul(Lw,a$)|0,o1=o1+Math.imul(Hw,Mw)|0,d1=d1+Math.imul(Hw,Bw)|0,d1=d1+Math.imul(uw,Mw)|0,R1=R1+Math.imul(uw,Bw)|0,o1=o1+Math.imul(jw,B$)|0,d1=d1+Math.imul(jw,$y)|0,d1=d1+Math.imul(pw,B$)|0,R1=R1+Math.imul(pw,$y)|0,o1=o1+Math.imul(t2,Ny)|0,d1=d1+Math.imul(t2,Vy)|0,d1=d1+Math.imul(C2,Ny)|0,R1=R1+Math.imul(C2,Vy)|0,o1=o1+Math.imul(Cy,fw)|0,d1=d1+Math.imul(Cy,xw)|0,d1=d1+Math.imul(Ly,fw)|0,R1=R1+Math.imul(Ly,xw)|0,o1=o1+Math.imul(fv,i$)|0,d1=d1+Math.imul(fv,y$)|0,d1=d1+Math.imul(cv,i$)|0,R1=R1+Math.imul(cv,y$)|0;var D_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(D_>>>26)|0,D_&=67108863,o1=Math.imul(tv,S$),d1=Math.imul(tv,m$),d1=d1+Math.imul(Yv,S$)|0,R1=Math.imul(Yv,m$),o1=o1+Math.imul(A2,n$)|0,d1=d1+Math.imul(A2,a$)|0,d1=d1+Math.imul(kv,n$)|0,R1=R1+Math.imul(kv,a$)|0,o1=o1+Math.imul(lw,Mw)|0,d1=d1+Math.imul(lw,Bw)|0,d1=d1+Math.imul(Lw,Mw)|0,R1=R1+Math.imul(Lw,Bw)|0,o1=o1+Math.imul(Hw,B$)|0,d1=d1+Math.imul(Hw,$y)|0,d1=d1+Math.imul(uw,B$)|0,R1=R1+Math.imul(uw,$y)|0,o1=o1+Math.imul(jw,Ny)|0,d1=d1+Math.imul(jw,Vy)|0,d1=d1+Math.imul(pw,Ny)|0,R1=R1+Math.imul(pw,Vy)|0,o1=o1+Math.imul(t2,fw)|0,d1=d1+Math.imul(t2,xw)|0,d1=d1+Math.imul(C2,fw)|0,R1=R1+Math.imul(C2,xw)|0,o1=o1+Math.imul(Cy,i$)|0,d1=d1+Math.imul(Cy,y$)|0,d1=d1+Math.imul(Ly,i$)|0,R1=R1+Math.imul(Ly,y$)|0;var FA=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(FA>>>26)|0,FA&=67108863,o1=Math.imul(tv,n$),d1=Math.imul(tv,a$),d1=d1+Math.imul(Yv,n$)|0,R1=Math.imul(Yv,a$),o1=o1+Math.imul(A2,Mw)|0,d1=d1+Math.imul(A2,Bw)|0,d1=d1+Math.imul(kv,Mw)|0,R1=R1+Math.imul(kv,Bw)|0,o1=o1+Math.imul(lw,B$)|0,d1=d1+Math.imul(lw,$y)|0,d1=d1+Math.imul(Lw,B$)|0,R1=R1+Math.imul(Lw,$y)|0,o1=o1+Math.imul(Hw,Ny)|0,d1=d1+Math.imul(Hw,Vy)|0,d1=d1+Math.imul(uw,Ny)|0,R1=R1+Math.imul(uw,Vy)|0,o1=o1+Math.imul(jw,fw)|0,d1=d1+Math.imul(jw,xw)|0,d1=d1+Math.imul(pw,fw)|0,R1=R1+Math.imul(pw,xw)|0,o1=o1+Math.imul(t2,i$)|0,d1=d1+Math.imul(t2,y$)|0,d1=d1+Math.imul(C2,i$)|0,R1=R1+Math.imul(C2,y$)|0;var g8=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(g8>>>26)|0,g8&=67108863,o1=Math.imul(tv,Mw),d1=Math.imul(tv,Bw),d1=d1+Math.imul(Yv,Mw)|0,R1=Math.imul(Yv,Bw),o1=o1+Math.imul(A2,B$)|0,d1=d1+Math.imul(A2,$y)|0,d1=d1+Math.imul(kv,B$)|0,R1=R1+Math.imul(kv,$y)|0,o1=o1+Math.imul(lw,Ny)|0,d1=d1+Math.imul(lw,Vy)|0,d1=d1+Math.imul(Lw,Ny)|0,R1=R1+Math.imul(Lw,Vy)|0,o1=o1+Math.imul(Hw,fw)|0,d1=d1+Math.imul(Hw,xw)|0,d1=d1+Math.imul(uw,fw)|0,R1=R1+Math.imul(uw,xw)|0,o1=o1+Math.imul(jw,i$)|0,d1=d1+Math.imul(jw,y$)|0,d1=d1+Math.imul(pw,i$)|0,R1=R1+Math.imul(pw,y$)|0;var y8=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(y8>>>26)|0,y8&=67108863,o1=Math.imul(tv,B$),d1=Math.imul(tv,$y),d1=d1+Math.imul(Yv,B$)|0,R1=Math.imul(Yv,$y),o1=o1+Math.imul(A2,Ny)|0,d1=d1+Math.imul(A2,Vy)|0,d1=d1+Math.imul(kv,Ny)|0,R1=R1+Math.imul(kv,Vy)|0,o1=o1+Math.imul(lw,fw)|0,d1=d1+Math.imul(lw,xw)|0,d1=d1+Math.imul(Lw,fw)|0,R1=R1+Math.imul(Lw,xw)|0,o1=o1+Math.imul(Hw,i$)|0,d1=d1+Math.imul(Hw,y$)|0,d1=d1+Math.imul(uw,i$)|0,R1=R1+Math.imul(uw,y$)|0;var X_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(X_>>>26)|0,X_&=67108863,o1=Math.imul(tv,Ny),d1=Math.imul(tv,Vy),d1=d1+Math.imul(Yv,Ny)|0,R1=Math.imul(Yv,Vy),o1=o1+Math.imul(A2,fw)|0,d1=d1+Math.imul(A2,xw)|0,d1=d1+Math.imul(kv,fw)|0,R1=R1+Math.imul(kv,xw)|0,o1=o1+Math.imul(lw,i$)|0,d1=d1+Math.imul(lw,y$)|0,d1=d1+Math.imul(Lw,i$)|0,R1=R1+Math.imul(Lw,y$)|0;var FS=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(FS>>>26)|0,FS&=67108863,o1=Math.imul(tv,fw),d1=Math.imul(tv,xw),d1=d1+Math.imul(Yv,fw)|0,R1=Math.imul(Yv,xw),o1=o1+Math.imul(A2,i$)|0,d1=d1+Math.imul(A2,y$)|0,d1=d1+Math.imul(kv,i$)|0,R1=R1+Math.imul(kv,y$)|0;var sR=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(sR>>>26)|0,sR&=67108863,o1=Math.imul(tv,i$),d1=Math.imul(tv,y$),d1=d1+Math.imul(Yv,i$)|0,R1=Math.imul(Yv,y$);var I6=(G0+o1|0)+((d1&8191)<<13)|0;return G0=(R1+(d1>>>13)|0)+(I6>>>26)|0,I6&=67108863,c1[0]=Gw,c1[1]=g3,c1[2]=j3,c1[3]=$w,c1[4]=w3,c1[5]=yE,c1[6]=bE,c1[7]=J_,c1[8]=B_,c1[9]=$_,c1[10]=M6,c1[11]=D_,c1[12]=FA,c1[13]=g8,c1[14]=y8,c1[15]=X_,c1[16]=FS,c1[17]=sR,c1[18]=I6,G0!==0&&(c1[19]=G0,f1.length++),f1};Math.imul||(O0=$0);function L0(t1,D0,Z0){Z0.negative=D0.negative^t1.negative,Z0.length=t1.length+D0.length;for(var f1=0,w1=0,m1=0;m1>>26)|0,w1+=c1>>>26,c1&=67108863}Z0.words[m1]=G0,f1=c1,c1=w1}return f1!==0?Z0.words[m1]=f1:Z0.length--,Z0._strip()}function q0(t1,D0,Z0){return L0(t1,D0,Z0)}nt.prototype.mulTo=function(D0,Z0){var f1,w1=this.length+D0.length;return this.length===10&&D0.length===10?f1=O0(this,D0,Z0):w1<63?f1=$0(this,D0,Z0):w1<1024?f1=L0(this,D0,Z0):f1=q0(this,D0,Z0),f1},nt.prototype.mul=function(D0){var Z0=new nt(null);return Z0.words=new Array(this.length+D0.length),this.mulTo(D0,Z0)},nt.prototype.mulf=function(D0){var Z0=new nt(null);return Z0.words=new Array(this.length+D0.length),q0(this,D0,Z0)},nt.prototype.imul=function(D0){return this.clone().mulTo(D0,this)},nt.prototype.imuln=function(D0){var Z0=D0<0;Z0&&(D0=-D0),d(typeof D0=="number"),d(D0<67108864);for(var f1=0,w1=0;w1>=26,f1+=m1/67108864|0,f1+=c1>>>26,this.words[w1]=c1&67108863}return f1!==0&&(this.words[w1]=f1,this.length++),Z0?this.ineg():this},nt.prototype.muln=function(D0){return this.clone().imuln(D0)},nt.prototype.sqr=function(){return this.mul(this)},nt.prototype.isqr=function(){return this.imul(this.clone())},nt.prototype.pow=function(D0){var Z0=A0(D0);if(Z0.length===0)return new nt(1);for(var f1=this,w1=0;w1=0);var Z0=D0%26,f1=(D0-Z0)/26,w1=67108863>>>26-Z0<<26-Z0,m1;if(Z0!==0){var c1=0;for(m1=0;m1>>26-Z0}c1&&(this.words[m1]=c1,this.length++)}if(f1!==0){for(m1=this.length-1;m1>=0;m1--)this.words[m1+f1]=this.words[m1];for(m1=0;m1=0);var w1;Z0?w1=(Z0-Z0%26)/26:w1=0;var m1=D0%26,c1=Math.min((D0-m1)/26,this.length),G0=67108863^67108863>>>m1<c1)for(this.length-=c1,d1=0;d1=0&&(R1!==0||d1>=w1);d1--){var O1=this.words[d1]|0;this.words[d1]=R1<<26-m1|O1>>>m1,R1=O1&G0}return o1&&R1!==0&&(o1.words[o1.length++]=R1),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},nt.prototype.ishrn=function(D0,Z0,f1){return d(this.negative===0),this.iushrn(D0,Z0,f1)},nt.prototype.shln=function(D0){return this.clone().ishln(D0)},nt.prototype.ushln=function(D0){return this.clone().iushln(D0)},nt.prototype.shrn=function(D0){return this.clone().ishrn(D0)},nt.prototype.ushrn=function(D0){return this.clone().iushrn(D0)},nt.prototype.testn=function(D0){d(typeof D0=="number"&&D0>=0);var Z0=D0%26,f1=(D0-Z0)/26,w1=1<=0);var Z0=D0%26,f1=(D0-Z0)/26;if(d(this.negative===0,"imaskn works only with positive numbers"),this.length<=f1)return this;if(Z0!==0&&f1++,this.length=Math.min(f1,this.length),Z0!==0){var w1=67108863^67108863>>>Z0<=67108864;Z0++)this.words[Z0]-=67108864,Z0===this.length-1?this.words[Z0+1]=1:this.words[Z0+1]++;return this.length=Math.max(this.length,Z0+1),this},nt.prototype.isubn=function(D0){if(d(typeof D0=="number"),d(D0<67108864),D0<0)return this.iaddn(-D0);if(this.negative!==0)return this.negative=0,this.iaddn(D0),this.negative=1,this;if(this.words[0]-=D0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var Z0=0;Z0>26)-(o1/67108864|0),this.words[m1+f1]=c1&67108863}for(;m1>26,this.words[m1+f1]=c1&67108863;if(G0===0)return this._strip();for(d(G0===-1),G0=0,m1=0;m1>26,this.words[m1]=c1&67108863;return this.negative=1,this._strip()},nt.prototype._wordDiv=function(D0,Z0){var f1=this.length-D0.length,w1=this.clone(),m1=D0,c1=m1.words[m1.length-1]|0,G0=this._countBits(c1);f1=26-G0,f1!==0&&(m1=m1.ushln(f1),w1.iushln(f1),c1=m1.words[m1.length-1]|0);var o1=w1.length-m1.length,d1;if(Z0!=="mod"){d1=new nt(null),d1.length=o1+1,d1.words=new Array(d1.length);for(var R1=0;R1=0;Q1--){var rv=(w1.words[m1.length+Q1]|0)*67108864+(w1.words[m1.length+Q1-1]|0);for(rv=Math.min(rv/c1|0,67108863),w1._ishlnsubmul(m1,rv,Q1);w1.negative!==0;)rv--,w1.negative=0,w1._ishlnsubmul(m1,1,Q1),w1.isZero()||(w1.negative^=1);d1&&(d1.words[Q1]=rv)}return d1&&d1._strip(),w1._strip(),Z0!=="div"&&f1!==0&&w1.iushrn(f1),{div:d1||null,mod:w1}},nt.prototype.divmod=function(D0,Z0,f1){if(d(!D0.isZero()),this.isZero())return{div:new nt(0),mod:new nt(0)};var w1,m1,c1;return this.negative!==0&&D0.negative===0?(c1=this.neg().divmod(D0,Z0),Z0!=="mod"&&(w1=c1.div.neg()),Z0!=="div"&&(m1=c1.mod.neg(),f1&&m1.negative!==0&&m1.iadd(D0)),{div:w1,mod:m1}):this.negative===0&&D0.negative!==0?(c1=this.divmod(D0.neg(),Z0),Z0!=="mod"&&(w1=c1.div.neg()),{div:w1,mod:c1.mod}):this.negative&D0.negative?(c1=this.neg().divmod(D0.neg(),Z0),Z0!=="div"&&(m1=c1.mod.neg(),f1&&m1.negative!==0&&m1.isub(D0)),{div:c1.div,mod:m1}):D0.length>this.length||this.cmp(D0)<0?{div:new nt(0),mod:this}:D0.length===1?Z0==="div"?{div:this.divn(D0.words[0]),mod:null}:Z0==="mod"?{div:null,mod:new nt(this.modrn(D0.words[0]))}:{div:this.divn(D0.words[0]),mod:new nt(this.modrn(D0.words[0]))}:this._wordDiv(D0,Z0)},nt.prototype.div=function(D0){return this.divmod(D0,"div",!1).div},nt.prototype.mod=function(D0){return this.divmod(D0,"mod",!1).mod},nt.prototype.umod=function(D0){return this.divmod(D0,"mod",!0).mod},nt.prototype.divRound=function(D0){var Z0=this.divmod(D0);if(Z0.mod.isZero())return Z0.div;var f1=Z0.div.negative!==0?Z0.mod.isub(D0):Z0.mod,w1=D0.ushrn(1),m1=D0.andln(1),c1=f1.cmp(w1);return c1<0||m1===1&&c1===0?Z0.div:Z0.div.negative!==0?Z0.div.isubn(1):Z0.div.iaddn(1)},nt.prototype.modrn=function(D0){var Z0=D0<0;Z0&&(D0=-D0),d(D0<=67108863);for(var f1=(1<<26)%D0,w1=0,m1=this.length-1;m1>=0;m1--)w1=(f1*w1+(this.words[m1]|0))%D0;return Z0?-w1:w1},nt.prototype.modn=function(D0){return this.modrn(D0)},nt.prototype.idivn=function(D0){var Z0=D0<0;Z0&&(D0=-D0),d(D0<=67108863);for(var f1=0,w1=this.length-1;w1>=0;w1--){var m1=(this.words[w1]|0)+f1*67108864;this.words[w1]=m1/D0|0,f1=m1%D0}return this._strip(),Z0?this.ineg():this},nt.prototype.divn=function(D0){return this.clone().idivn(D0)},nt.prototype.egcd=function(D0){d(D0.negative===0),d(!D0.isZero());var Z0=this,f1=D0.clone();Z0.negative!==0?Z0=Z0.umod(D0):Z0=Z0.clone();for(var w1=new nt(1),m1=new nt(0),c1=new nt(0),G0=new nt(1),o1=0;Z0.isEven()&&f1.isEven();)Z0.iushrn(1),f1.iushrn(1),++o1;for(var d1=f1.clone(),R1=Z0.clone();!Z0.isZero();){for(var O1=0,Q1=1;!(Z0.words[0]&Q1)&&O1<26;++O1,Q1<<=1);if(O1>0)for(Z0.iushrn(O1);O1-- >0;)(w1.isOdd()||m1.isOdd())&&(w1.iadd(d1),m1.isub(R1)),w1.iushrn(1),m1.iushrn(1);for(var rv=0,D1=1;!(f1.words[0]&D1)&&rv<26;++rv,D1<<=1);if(rv>0)for(f1.iushrn(rv);rv-- >0;)(c1.isOdd()||G0.isOdd())&&(c1.iadd(d1),G0.isub(R1)),c1.iushrn(1),G0.iushrn(1);Z0.cmp(f1)>=0?(Z0.isub(f1),w1.isub(c1),m1.isub(G0)):(f1.isub(Z0),c1.isub(w1),G0.isub(m1))}return{a:c1,b:G0,gcd:f1.iushln(o1)}},nt.prototype._invmp=function(D0){d(D0.negative===0),d(!D0.isZero());var Z0=this,f1=D0.clone();Z0.negative!==0?Z0=Z0.umod(D0):Z0=Z0.clone();for(var w1=new nt(1),m1=new nt(0),c1=f1.clone();Z0.cmpn(1)>0&&f1.cmpn(1)>0;){for(var G0=0,o1=1;!(Z0.words[0]&o1)&&G0<26;++G0,o1<<=1);if(G0>0)for(Z0.iushrn(G0);G0-- >0;)w1.isOdd()&&w1.iadd(c1),w1.iushrn(1);for(var d1=0,R1=1;!(f1.words[0]&R1)&&d1<26;++d1,R1<<=1);if(d1>0)for(f1.iushrn(d1);d1-- >0;)m1.isOdd()&&m1.iadd(c1),m1.iushrn(1);Z0.cmp(f1)>=0?(Z0.isub(f1),w1.isub(m1)):(f1.isub(Z0),m1.isub(w1))}var O1;return Z0.cmpn(1)===0?O1=w1:O1=m1,O1.cmpn(0)<0&&O1.iadd(D0),O1},nt.prototype.gcd=function(D0){if(this.isZero())return D0.abs();if(D0.isZero())return this.abs();var Z0=this.clone(),f1=D0.clone();Z0.negative=0,f1.negative=0;for(var w1=0;Z0.isEven()&&f1.isEven();w1++)Z0.iushrn(1),f1.iushrn(1);do{for(;Z0.isEven();)Z0.iushrn(1);for(;f1.isEven();)f1.iushrn(1);var m1=Z0.cmp(f1);if(m1<0){var c1=Z0;Z0=f1,f1=c1}else if(m1===0||f1.cmpn(1)===0)break;Z0.isub(f1)}while(!0);return f1.iushln(w1)},nt.prototype.invm=function(D0){return this.egcd(D0).a.umod(D0)},nt.prototype.isEven=function(){return(this.words[0]&1)===0},nt.prototype.isOdd=function(){return(this.words[0]&1)===1},nt.prototype.andln=function(D0){return this.words[0]&D0},nt.prototype.bincn=function(D0){d(typeof D0=="number");var Z0=D0%26,f1=(D0-Z0)/26,w1=1<>>26,G0&=67108863,this.words[c1]=G0}return m1!==0&&(this.words[c1]=m1,this.length++),this},nt.prototype.isZero=function(){return this.length===1&&this.words[0]===0},nt.prototype.cmpn=function(D0){var Z0=D0<0;if(this.negative!==0&&!Z0)return-1;if(this.negative===0&&Z0)return 1;this._strip();var f1;if(this.length>1)f1=1;else{Z0&&(D0=-D0),d(D0<=67108863,"Number is too big");var w1=this.words[0]|0;f1=w1===D0?0:w1D0.length)return 1;if(this.length=0;f1--){var w1=this.words[f1]|0,m1=D0.words[f1]|0;if(w1!==m1){w1m1&&(Z0=1);break}}return Z0},nt.prototype.gtn=function(D0){return this.cmpn(D0)===1},nt.prototype.gt=function(D0){return this.cmp(D0)===1},nt.prototype.gten=function(D0){return this.cmpn(D0)>=0},nt.prototype.gte=function(D0){return this.cmp(D0)>=0},nt.prototype.ltn=function(D0){return this.cmpn(D0)===-1},nt.prototype.lt=function(D0){return this.cmp(D0)===-1},nt.prototype.lten=function(D0){return this.cmpn(D0)<=0},nt.prototype.lte=function(D0){return this.cmp(D0)<=0},nt.prototype.eqn=function(D0){return this.cmpn(D0)===0},nt.prototype.eq=function(D0){return this.cmp(D0)===0},nt.red=function(D0){return new j1(D0)},nt.prototype.toRed=function(D0){return d(!this.red,"Already a number in reduction context"),d(this.negative===0,"red works only with positives"),D0.convertTo(this)._forceRed(D0)},nt.prototype.fromRed=function(){return d(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},nt.prototype._forceRed=function(D0){return this.red=D0,this},nt.prototype.forceRed=function(D0){return d(!this.red,"Already a number in reduction context"),this._forceRed(D0)},nt.prototype.redAdd=function(D0){return d(this.red,"redAdd works only with red numbers"),this.red.add(this,D0)},nt.prototype.redIAdd=function(D0){return d(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,D0)},nt.prototype.redSub=function(D0){return d(this.red,"redSub works only with red numbers"),this.red.sub(this,D0)},nt.prototype.redISub=function(D0){return d(this.red,"redISub works only with red numbers"),this.red.isub(this,D0)},nt.prototype.redShl=function(D0){return d(this.red,"redShl works only with red numbers"),this.red.shl(this,D0)},nt.prototype.redMul=function(D0){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,D0),this.red.mul(this,D0)},nt.prototype.redIMul=function(D0){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,D0),this.red.imul(this,D0)},nt.prototype.redSqr=function(){return d(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},nt.prototype.redISqr=function(){return d(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},nt.prototype.redSqrt=function(){return d(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},nt.prototype.redInvm=function(){return d(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},nt.prototype.redNeg=function(){return d(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},nt.prototype.redPow=function(D0){return d(this.red&&!D0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,D0)};var F0={k256:null,p224:null,p192:null,p25519:null};function u1(t1,D0){this.name=t1,this.p=new nt(D0,16),this.n=this.p.bitLength(),this.k=new nt(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}u1.prototype._tmp=function(){var D0=new nt(null);return D0.words=new Array(Math.ceil(this.n/13)),D0},u1.prototype.ireduce=function(D0){var Z0=D0,f1;do this.split(Z0,this.tmp),Z0=this.imulK(Z0),Z0=Z0.iadd(this.tmp),f1=Z0.bitLength();while(f1>this.n);var w1=f10?Z0.isub(this.p):Z0.strip!==void 0?Z0.strip():Z0._strip(),Z0},u1.prototype.split=function(D0,Z0){D0.iushrn(this.n,0,Z0)},u1.prototype.imulK=function(D0){return D0.imul(this.k)};function g1(){u1.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}tt(g1,u1),g1.prototype.split=function(D0,Z0){for(var f1=4194303,w1=Math.min(D0.length,9),m1=0;m1>>22,c1=G0}c1>>>=22,D0.words[m1-10]=c1,c1===0&&D0.length>10?D0.length-=10:D0.length-=9},g1.prototype.imulK=function(D0){D0.words[D0.length]=0,D0.words[D0.length+1]=0,D0.length+=2;for(var Z0=0,f1=0;f1>>=26,D0.words[f1]=m1,Z0=w1}return Z0!==0&&(D0.words[D0.length++]=Z0),D0},nt._prime=function(D0){if(F0[D0])return F0[D0];var Z0;if(D0==="k256")Z0=new g1;else if(D0==="p224")Z0=new E1;else if(D0==="p192")Z0=new B1;else if(D0==="p25519")Z0=new lv;else throw new Error("Unknown prime "+D0);return F0[D0]=Z0,Z0};function j1(t1){if(typeof t1=="string"){var D0=nt._prime(t1);this.m=D0.p,this.prime=D0}else d(t1.gtn(1),"modulus must be greater than 1"),this.m=t1,this.prime=null}j1.prototype._verify1=function(D0){d(D0.negative===0,"red works only with positives"),d(D0.red,"red works only with red numbers")},j1.prototype._verify2=function(D0,Z0){d((D0.negative|Z0.negative)===0,"red works only with positives"),d(D0.red&&D0.red===Z0.red,"red works only with red numbers")},j1.prototype.imod=function(D0){return this.prime?this.prime.ireduce(D0)._forceRed(this):($u(D0,D0.umod(this.m)._forceRed(this)),D0)},j1.prototype.neg=function(D0){return D0.isZero()?D0.clone():this.m.sub(D0)._forceRed(this)},j1.prototype.add=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.add(Z0);return f1.cmp(this.m)>=0&&f1.isub(this.m),f1._forceRed(this)},j1.prototype.iadd=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.iadd(Z0);return f1.cmp(this.m)>=0&&f1.isub(this.m),f1},j1.prototype.sub=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.sub(Z0);return f1.cmpn(0)<0&&f1.iadd(this.m),f1._forceRed(this)},j1.prototype.isub=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.isub(Z0);return f1.cmpn(0)<0&&f1.iadd(this.m),f1},j1.prototype.shl=function(D0,Z0){return this._verify1(D0),this.imod(D0.ushln(Z0))},j1.prototype.imul=function(D0,Z0){return this._verify2(D0,Z0),this.imod(D0.imul(Z0))},j1.prototype.mul=function(D0,Z0){return this._verify2(D0,Z0),this.imod(D0.mul(Z0))},j1.prototype.isqr=function(D0){return this.imul(D0,D0.clone())},j1.prototype.sqr=function(D0){return this.mul(D0,D0)},j1.prototype.sqrt=function(D0){if(D0.isZero())return D0.clone();var Z0=this.m.andln(3);if(d(Z0%2===1),Z0===3){var f1=this.m.add(new nt(1)).iushrn(2);return this.pow(D0,f1)}for(var w1=this.m.subn(1),m1=0;!w1.isZero()&&w1.andln(1)===0;)m1++,w1.iushrn(1);d(!w1.isZero());var c1=new nt(1).toRed(this),G0=c1.redNeg(),o1=this.m.subn(1).iushrn(1),d1=this.m.bitLength();for(d1=new nt(2*d1*d1).toRed(this);this.pow(d1,o1).cmp(G0)!==0;)d1.redIAdd(G0);for(var R1=this.pow(d1,w1),O1=this.pow(D0,w1.addn(1).iushrn(1)),Q1=this.pow(D0,w1),rv=m1;Q1.cmp(c1)!==0;){for(var D1=Q1,ev=0;D1.cmp(c1)!==0;ev++)D1=D1.redSqr();d(ev=0;m1--){for(var R1=Z0.words[m1],O1=d1-1;O1>=0;O1--){var Q1=R1>>O1&1;if(c1!==w1[0]&&(c1=this.sqr(c1)),Q1===0&&G0===0){o1=0;continue}G0<<=1,G0|=Q1,o1++,!(o1!==f1&&(m1!==0||O1!==0))&&(c1=this.mul(c1,w1[G0]),o1=0,G0=0)}d1=26}return c1},j1.prototype.convertTo=function(D0){var Z0=D0.umod(this.m);return Z0===D0?Z0.clone():Z0},j1.prototype.convertFrom=function(D0){var Z0=D0.clone();return Z0.red=null,Z0},nt.mont=function(D0){return new r1(D0)};function r1(t1){j1.call(this,t1),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new nt(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}tt(r1,j1),r1.prototype.convertTo=function(D0){return this.imod(D0.ushln(this.shift))},r1.prototype.convertFrom=function(D0){var Z0=this.imod(D0.mul(this.rinv));return Z0.red=null,Z0},r1.prototype.imul=function(D0,Z0){if(D0.isZero()||Z0.isZero())return D0.words[0]=0,D0.length=1,D0;var f1=D0.imul(Z0),w1=f1.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),m1=f1.isub(w1).iushrn(this.shift),c1=m1;return m1.cmp(this.m)>=0?c1=m1.isub(this.m):m1.cmpn(0)<0&&(c1=m1.iadd(this.m)),c1._forceRed(this)},r1.prototype.mul=function(D0,Z0){if(D0.isZero()||Z0.isZero())return new nt(0)._forceRed(this);var f1=D0.mul(Z0),w1=f1.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),m1=f1.isub(w1).iushrn(this.shift),c1=m1;return m1.cmp(this.m)>=0?c1=m1.isub(this.m):m1.cmpn(0)<0&&(c1=m1.iadd(this.m)),c1._forceRed(this)},r1.prototype.invm=function(D0){var Z0=this.imod(D0._invmp(this.m).mul(this.r2));return Z0._forceRed(this)}})(o,commonjsGlobal$4)})(bn$2);var bnExports$1=bn$2.exports,__importDefault$d=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(constants$5,"__esModule",{value:!0});constants$5.DEFAULT_FUNCTION_CALL_GAS=void 0;const bn_js_1$a=__importDefault$d(bnExports$1);constants$5.DEFAULT_FUNCTION_CALL_GAS=new bn_js_1$a.default("30000000000000");var errors$6={},errors$5={},logger$3={},logger$2={},console_logger={};Object.defineProperty(console_logger,"__esModule",{value:!0});console_logger.ConsoleLogger=void 0;class ConsoleLogger{constructor(a){this.logLevels=a,this.isLevelEnabled=c=>this.logLevels.includes(c)}print(a,c,...d){switch(a){case"error":case"fatal":return console.error(c,...d);case"warn":return console.warn(c,...d);case"log":return console.log(c,...d);case"debug":case"verbose":return console.debug(c,...d)}}verbose(a,...c){this.isLevelEnabled("verbose")&&this.print("verbose",a,...c)}debug(a,...c){this.isLevelEnabled("debug")&&this.print("debug",a,...c)}log(a,...c){this.isLevelEnabled("log")&&this.print("log",a,...c)}warn(a,...c){this.isLevelEnabled("warn")&&this.print("warn",a,...c)}error(a,...c){this.isLevelEnabled("error")&&this.print("error",a,...c)}fatal(a,...c){this.isLevelEnabled("fatal")&&this.print("fatal",a,...c)}}console_logger.ConsoleLogger=ConsoleLogger;var define_process_env_default$3={},_a$1;Object.defineProperty(logger$2,"__esModule",{value:!0});logger$2.Logger=void 0;const console_logger_1=console_logger,DEFAULT_LOG_LEVELS=["verbose","debug","log","warn","error","fatal"],DEFAULT_LOGGER=typeof process$1$4=="object"&&define_process_env_default$3.NEAR_NO_LOGS?void 0:new console_logger_1.ConsoleLogger(DEFAULT_LOG_LEVELS);let Logger$2=class{static error(a,...c){var d;(d=this.instanceRef)===null||d===void 0||d.error(a,...c)}static log(a,...c){var d;(d=this.instanceRef)===null||d===void 0||d.log(a,...c)}static warn(a,...c){var d;(d=this.instanceRef)===null||d===void 0||d.warn(a,...c)}static debug(a,...c){var d,tt;(tt=(d=this.instanceRef)===null||d===void 0?void 0:d.debug)===null||tt===void 0||tt.call(d,a,...c)}static verbose(a,...c){var d,tt;(tt=(d=this.instanceRef)===null||d===void 0?void 0:d.verbose)===null||tt===void 0||tt.call(d,a,...c)}static fatal(a,...c){var d,tt;(tt=(d=this.instanceRef)===null||d===void 0?void 0:d.fatal)===null||tt===void 0||tt.call(d,a,...c)}};logger$2.Logger=Logger$2;_a$1=Logger$2;Logger$2.instanceRef=DEFAULT_LOGGER;Logger$2.overrideLogger=o=>{_a$1.instanceRef=o};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Logger=void 0;var a=logger$2;Object.defineProperty(o,"Logger",{enumerable:!0,get:function(){return a.Logger}})})(logger$3);Object.defineProperty(errors$5,"__esModule",{value:!0});errors$5.logWarning=void 0;const logger_1$1=logger$3;function logWarning(...o){const[a,...c]=o;logger_1$1.Logger.warn(a,...c)}errors$5.logWarning=logWarning;var rpc_errors$1={},lib$8={},assignable={};Object.defineProperty(assignable,"__esModule",{value:!0});assignable.Assignable=void 0;class Assignable{constructor(a){Object.keys(a).map(c=>{this[c]=a[c]})}}assignable.Assignable=Assignable;var errors$4={};Object.defineProperty(errors$4,"__esModule",{value:!0});errors$4.ErrorContext=errors$4.TypedError=errors$4.ArgumentTypeError=errors$4.PositionalArgsError=void 0;class PositionalArgsError extends Error{constructor(){super("Contract method calls expect named arguments wrapped in object, e.g. { argName1: argValue1, argName2: argValue2 }")}}errors$4.PositionalArgsError=PositionalArgsError;class ArgumentTypeError extends Error{constructor(a,c,d){super(`Expected ${c} for '${a}' argument, but got '${JSON.stringify(d)}'`)}}errors$4.ArgumentTypeError=ArgumentTypeError;class TypedError extends Error{constructor(a,c,d){super(a),this.type=c||"UntypedError",this.context=d}}errors$4.TypedError=TypedError;class ErrorContext{constructor(a){this.transactionHash=a}}errors$4.ErrorContext=ErrorContext;var provider$3={},light_client={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.IdType=void 0,function(a){a.Transaction="transaction",a.Receipt="receipt"}(o.IdType||(o.IdType={}))})(light_client);var response$1={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.FinalExecutionStatusBasic=o.ExecutionStatusBasic=void 0,function(a){a.Unknown="Unknown",a.Pending="Pending",a.Failure="Failure"}(o.ExecutionStatusBasic||(o.ExecutionStatusBasic={})),function(a){a.NotStarted="NotStarted",a.Started="Started",a.Failure="Failure"}(o.FinalExecutionStatusBasic||(o.FinalExecutionStatusBasic={}))})(response$1);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.FinalExecutionStatusBasic=o.ExecutionStatusBasic=o.IdType=void 0;var a=light_client;Object.defineProperty(o,"IdType",{enumerable:!0,get:function(){return a.IdType}});var c=response$1;Object.defineProperty(o,"ExecutionStatusBasic",{enumerable:!0,get:function(){return c.ExecutionStatusBasic}}),Object.defineProperty(o,"FinalExecutionStatusBasic",{enumerable:!0,get:function(){return c.FinalExecutionStatusBasic}})})(provider$3);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(d,tt,nt,$a){$a===void 0&&($a=nt);var Ys=Object.getOwnPropertyDescriptor(tt,nt);(!Ys||("get"in Ys?!tt.__esModule:Ys.writable||Ys.configurable))&&(Ys={enumerable:!0,get:function(){return tt[nt]}}),Object.defineProperty(d,$a,Ys)}:function(d,tt,nt,$a){$a===void 0&&($a=nt),d[$a]=tt[nt]}),c=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(d,tt){for(var nt in d)nt!=="default"&&!Object.prototype.hasOwnProperty.call(tt,nt)&&a(tt,d,nt)};Object.defineProperty(o,"__esModule",{value:!0}),c(assignable,o),c(errors$4,o),c(provider$3,o)})(lib$8);var mustache={exports:{}};(function(o,a){(function(c,d){o.exports=d()})(commonjsGlobal$4,function(){/*! +`;function IdentitiesTable({rootKeysList:o,onAddRootKey:a,onCopyKeyClick:c,errorMessage:d}){const tt=translations.identityPage;return jsxRuntimeExports.jsx(ContentCard,{headerTitle:tt.title,headerOptionText:tt.addRootKeyText,headerOnOptionClick:a,headerDescription:o.length>0?`${tt.loggedInLabel}${o[0].publicKey}`:"",children:jsxRuntimeExports.jsx(FlexWrapper$7,{children:jsxRuntimeExports.jsx(ListTable,{listHeaderItems:["TYPE","ADDED","PUBLIC KEY"],numOfColumns:6,listItems:o,rowItem:identityRowItem,roundTopItem:!0,noItemsText:tt.noRootKeysText,onRowItemClick:c,error:d})})})}function isFinalExecution(o){return(o==null?void 0:o.status).SuccessValue!==void 0||(o==null?void 0:o.status).Failure!==void 0}const getMetamaskType=o=>{switch(o){case 1:return Network.ETH;case 56:return Network.BNB;case 42161:return Network.ARB;case 324:return Network.ZK;default:return Network.ETH}};function mapApiResponseToObjects(o){var a,c,d;return(a=o==null?void 0:o.did)!=null&&a.root_keys?((d=(c=o==null?void 0:o.did)==null?void 0:c.root_keys)==null?void 0:d.map(nt=>{switch(nt.wallet.type){case Network.NEAR:return{signingKey:nt.signing_key,createdAt:nt.created_at,type:Network.NEAR};case Network.ETH:return{signingKey:nt.signing_key,type:Network.ETH,createdAt:nt.created_at,chainId:nt.wallet.chainId??1};case Network.ICP:return{signingKey:nt.signing_key,type:Network.ICP,createdAt:nt.created_at};case Network.STARKNET:default:return{signingKey:nt.signing_key,type:Network.STARKNET+" "+nt.wallet.walletName,createdAt:nt.created_at}}})).map(nt=>({type:nt.type===Network.ETH?getMetamaskType(nt.chainId??1):nt.type,createdAt:nt.createdAt,publicKey:nt.type==="NEAR"?nt.signingKey.split(":")[1].trim():nt.signingKey})):[]}function IdentityPage(){const o=useNavigate(),{showServerDownPopup:a}=useServerDown(),[c,d]=reactExports.useState(""),[tt,nt]=reactExports.useState([]);return reactExports.useEffect(()=>{(async()=>{d("");const Ws=await apiClient(a).node().getDidList();if(Ws.error){d(Ws.error.message);return}else{const gu=mapApiResponseToObjects(Ws.data);nt(gu)}})()},[]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(IdentitiesTable,{onAddRootKey:()=>o("/identity/root-key"),rootKeysList:tt,onCopyKeyClick:$a=>navigator.clipboard.writeText($a),errorMessage:c})})]})}var browserIndex$2={},browserIndex$1={},keystore$1={},lib$b={},in_memory_key_store$1={},lib$a={},constants$6={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.KeySize=o.KeyType=void 0,function(a){a[a.ED25519=0]="ED25519"}(o.KeyType||(o.KeyType={})),function(a){a[a.SECRET_KEY=32]="SECRET_KEY"}(o.KeySize||(o.KeySize={}))})(constants$6);var key_pair$1={},key_pair_base={};Object.defineProperty(key_pair_base,"__esModule",{value:!0});key_pair_base.KeyPairBase=void 0;class KeyPairBase{}key_pair_base.KeyPairBase=KeyPairBase;var key_pair_ed25519={},lib$9={},constants$5={},bn$2={exports:{}};const require$$1$4=getAugmentedNamespace(dist$1);bn$2.exports;(function(o){(function(a,c){function d(t1,D0){if(!t1)throw new Error(D0||"Assertion failed")}function tt(t1,D0){t1.super_=D0;var Z0=function(){};Z0.prototype=D0.prototype,t1.prototype=new Z0,t1.prototype.constructor=t1}function nt(t1,D0,Z0){if(nt.isBN(t1))return t1;this.negative=0,this.words=null,this.length=0,this.red=null,t1!==null&&((D0==="le"||D0==="be")&&(Z0=D0,D0=10),this._init(t1||0,D0||10,Z0||"be"))}typeof a=="object"?a.exports=nt:c.BN=nt,nt.BN=nt,nt.wordSize=26;var $a;try{typeof window<"u"&&typeof window.Buffer<"u"?$a=window.Buffer:$a=require$$1$4.Buffer}catch{}nt.isBN=function(D0){return D0 instanceof nt?!0:D0!==null&&typeof D0=="object"&&D0.constructor.wordSize===nt.wordSize&&Array.isArray(D0.words)},nt.max=function(D0,Z0){return D0.cmp(Z0)>0?D0:Z0},nt.min=function(D0,Z0){return D0.cmp(Z0)<0?D0:Z0},nt.prototype._init=function(D0,Z0,f1){if(typeof D0=="number")return this._initNumber(D0,Z0,f1);if(typeof D0=="object")return this._initArray(D0,Z0,f1);Z0==="hex"&&(Z0=16),d(Z0===(Z0|0)&&Z0>=2&&Z0<=36),D0=D0.toString().replace(/\s+/g,"");var w1=0;D0[0]==="-"&&(w1++,this.negative=1),w1=0;w1-=3)c1=D0[w1]|D0[w1-1]<<8|D0[w1-2]<<16,this.words[m1]|=c1<>>26-G0&67108863,G0+=24,G0>=26&&(G0-=26,m1++);else if(f1==="le")for(w1=0,m1=0;w1>>26-G0&67108863,G0+=24,G0>=26&&(G0-=26,m1++);return this._strip()};function Ws(t1,D0){var Z0=t1.charCodeAt(D0);if(Z0>=48&&Z0<=57)return Z0-48;if(Z0>=65&&Z0<=70)return Z0-55;if(Z0>=97&&Z0<=102)return Z0-87;d(!1,"Invalid character in "+t1)}function gu(t1,D0,Z0){var f1=Ws(t1,Z0);return Z0-1>=D0&&(f1|=Ws(t1,Z0-1)<<4),f1}nt.prototype._parseHex=function(D0,Z0,f1){this.length=Math.ceil((D0.length-Z0)/6),this.words=new Array(this.length);for(var w1=0;w1=Z0;w1-=2)G0=gu(D0,Z0,w1)<=18?(m1-=18,c1+=1,this.words[c1]|=G0>>>26):m1+=8;else{var o1=D0.length-Z0;for(w1=o1%2===0?Z0+1:Z0;w1=18?(m1-=18,c1+=1,this.words[c1]|=G0>>>26):m1+=8}this._strip()};function Su(t1,D0,Z0,f1){for(var w1=0,m1=0,c1=Math.min(t1.length,Z0),G0=D0;G0=49?m1=o1-49+10:o1>=17?m1=o1-17+10:m1=o1,d(o1>=0&&m11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},nt.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{nt.prototype[Symbol.for("nodejs.util.inspect.custom")]=Iu}catch{nt.prototype.inspect=Iu}else nt.prototype.inspect=Iu;function Iu(){return(this.red?""}var Xu=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],r0=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],p0=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];nt.prototype.toString=function(D0,Z0){D0=D0||10,Z0=Z0|0||1;var f1;if(D0===16||D0==="hex"){f1="";for(var w1=0,m1=0,c1=0;c1>>24-w1&16777215,w1+=2,w1>=26&&(w1-=26,c1--),m1!==0||c1!==this.length-1?f1=Xu[6-o1.length]+o1+f1:f1=o1+f1}for(m1!==0&&(f1=m1.toString(16)+f1);f1.length%Z0!==0;)f1="0"+f1;return this.negative!==0&&(f1="-"+f1),f1}if(D0===(D0|0)&&D0>=2&&D0<=36){var d1=r0[D0],R1=p0[D0];f1="";var O1=this.clone();for(O1.negative=0;!O1.isZero();){var Q1=O1.modrn(R1).toString(D0);O1=O1.idivn(R1),O1.isZero()?f1=Q1+f1:f1=Xu[d1-Q1.length]+Q1+f1}for(this.isZero()&&(f1="0"+f1);f1.length%Z0!==0;)f1="0"+f1;return this.negative!==0&&(f1="-"+f1),f1}d(!1,"Base should be between 2 and 36")},nt.prototype.toNumber=function(){var D0=this.words[0];return this.length===2?D0+=this.words[1]*67108864:this.length===3&&this.words[2]===1?D0+=4503599627370496+this.words[1]*67108864:this.length>2&&d(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-D0:D0},nt.prototype.toJSON=function(){return this.toString(16,2)},$a&&(nt.prototype.toBuffer=function(D0,Z0){return this.toArrayLike($a,D0,Z0)}),nt.prototype.toArray=function(D0,Z0){return this.toArrayLike(Array,D0,Z0)};var y0=function(D0,Z0){return D0.allocUnsafe?D0.allocUnsafe(Z0):new D0(Z0)};nt.prototype.toArrayLike=function(D0,Z0,f1){this._strip();var w1=this.byteLength(),m1=f1||Math.max(1,w1);d(w1<=m1,"byte array longer than desired length"),d(m1>0,"Requested array length <= 0");var c1=y0(D0,m1),G0=Z0==="le"?"LE":"BE";return this["_toArrayLike"+G0](c1,w1),c1},nt.prototype._toArrayLikeLE=function(D0,Z0){for(var f1=0,w1=0,m1=0,c1=0;m1>8&255),f1>16&255),c1===6?(f1>24&255),w1=0,c1=0):(w1=G0>>>24,c1+=2)}if(f1=0&&(D0[f1--]=G0>>8&255),f1>=0&&(D0[f1--]=G0>>16&255),c1===6?(f1>=0&&(D0[f1--]=G0>>24&255),w1=0,c1=0):(w1=G0>>>24,c1+=2)}if(f1>=0)for(D0[f1--]=w1;f1>=0;)D0[f1--]=0},Math.clz32?nt.prototype._countBits=function(D0){return 32-Math.clz32(D0)}:nt.prototype._countBits=function(D0){var Z0=D0,f1=0;return Z0>=4096&&(f1+=13,Z0>>>=13),Z0>=64&&(f1+=7,Z0>>>=7),Z0>=8&&(f1+=4,Z0>>>=4),Z0>=2&&(f1+=2,Z0>>>=2),f1+Z0},nt.prototype._zeroBits=function(D0){if(D0===0)return 26;var Z0=D0,f1=0;return Z0&8191||(f1+=13,Z0>>>=13),Z0&127||(f1+=7,Z0>>>=7),Z0&15||(f1+=4,Z0>>>=4),Z0&3||(f1+=2,Z0>>>=2),Z0&1||f1++,f1},nt.prototype.bitLength=function(){var D0=this.words[this.length-1],Z0=this._countBits(D0);return(this.length-1)*26+Z0};function A0(t1){for(var D0=new Array(t1.bitLength()),Z0=0;Z0>>w1&1}return D0}nt.prototype.zeroBits=function(){if(this.isZero())return 0;for(var D0=0,Z0=0;Z0D0.length?this.clone().ior(D0):D0.clone().ior(this)},nt.prototype.uor=function(D0){return this.length>D0.length?this.clone().iuor(D0):D0.clone().iuor(this)},nt.prototype.iuand=function(D0){var Z0;this.length>D0.length?Z0=D0:Z0=this;for(var f1=0;f1D0.length?this.clone().iand(D0):D0.clone().iand(this)},nt.prototype.uand=function(D0){return this.length>D0.length?this.clone().iuand(D0):D0.clone().iuand(this)},nt.prototype.iuxor=function(D0){var Z0,f1;this.length>D0.length?(Z0=this,f1=D0):(Z0=D0,f1=this);for(var w1=0;w1D0.length?this.clone().ixor(D0):D0.clone().ixor(this)},nt.prototype.uxor=function(D0){return this.length>D0.length?this.clone().iuxor(D0):D0.clone().iuxor(this)},nt.prototype.inotn=function(D0){d(typeof D0=="number"&&D0>=0);var Z0=Math.ceil(D0/26)|0,f1=D0%26;this._expand(Z0),f1>0&&Z0--;for(var w1=0;w10&&(this.words[w1]=~this.words[w1]&67108863>>26-f1),this._strip()},nt.prototype.notn=function(D0){return this.clone().inotn(D0)},nt.prototype.setn=function(D0,Z0){d(typeof D0=="number"&&D0>=0);var f1=D0/26|0,w1=D0%26;return this._expand(f1+1),Z0?this.words[f1]=this.words[f1]|1<D0.length?(f1=this,w1=D0):(f1=D0,w1=this);for(var m1=0,c1=0;c1>>26;for(;m1!==0&&c1>>26;if(this.length=f1.length,m1!==0)this.words[this.length]=m1,this.length++;else if(f1!==this)for(;c1D0.length?this.clone().iadd(D0):D0.clone().iadd(this)},nt.prototype.isub=function(D0){if(D0.negative!==0){D0.negative=0;var Z0=this.iadd(D0);return D0.negative=1,Z0._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(D0),this.negative=1,this._normSign();var f1=this.cmp(D0);if(f1===0)return this.negative=0,this.length=1,this.words[0]=0,this;var w1,m1;f1>0?(w1=this,m1=D0):(w1=D0,m1=this);for(var c1=0,G0=0;G0>26,this.words[G0]=Z0&67108863;for(;c1!==0&&G0>26,this.words[G0]=Z0&67108863;if(c1===0&&G0>>26,O1=o1&67108863,Q1=Math.min(d1,D0.length-1),rv=Math.max(0,d1-t1.length+1);rv<=Q1;rv++){var D1=d1-rv|0;w1=t1.words[D1]|0,m1=D0.words[rv]|0,c1=w1*m1+O1,R1+=c1/67108864|0,O1=c1&67108863}Z0.words[d1]=O1|0,o1=R1|0}return o1!==0?Z0.words[d1]=o1|0:Z0.length--,Z0._strip()}var O0=function(D0,Z0,f1){var w1=D0.words,m1=Z0.words,c1=f1.words,G0=0,o1,d1,R1,O1=w1[0]|0,Q1=O1&8191,rv=O1>>>13,D1=w1[1]|0,ev=D1&8191,Mv=D1>>>13,Zv=w1[2]|0,fv=Zv&8191,cv=Zv>>>13,ly=w1[3]|0,Cy=ly&8191,Ly=ly>>>13,Hy=w1[4]|0,t2=Hy&8191,C2=Hy>>>13,Dy=w1[5]|0,jw=Dy&8191,pw=Dy>>>13,vw=w1[6]|0,Hw=vw&8191,uw=vw>>>13,Nw=w1[7]|0,lw=Nw&8191,Lw=Nw>>>13,zw=w1[8]|0,A2=zw&8191,kv=zw>>>13,Y1=w1[9]|0,tv=Y1&8191,Yv=Y1>>>13,By=m1[0]|0,Qy=By&8191,e2=By>>>13,Kw=m1[1]|0,r$=Kw&8191,v3=Kw>>>13,d$=m1[2]|0,$2=d$&8191,_$=d$>>>13,Q$=m1[3]|0,S$=Q$&8191,m$=Q$>>>13,m3=m1[4]|0,n$=m3&8191,a$=m3>>>13,OE=m1[5]|0,Mw=OE&8191,Bw=OE>>>13,o3=m1[6]|0,B$=o3&8191,$y=o3>>>13,Kv=m1[7]|0,Ny=Kv&8191,Vy=Kv>>>13,Sy=m1[8]|0,fw=Sy&8191,xw=Sy>>>13,V3=m1[9]|0,i$=V3&8191,y$=V3>>>13;f1.negative=D0.negative^Z0.negative,f1.length=19,o1=Math.imul(Q1,Qy),d1=Math.imul(Q1,e2),d1=d1+Math.imul(rv,Qy)|0,R1=Math.imul(rv,e2);var Gw=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(Gw>>>26)|0,Gw&=67108863,o1=Math.imul(ev,Qy),d1=Math.imul(ev,e2),d1=d1+Math.imul(Mv,Qy)|0,R1=Math.imul(Mv,e2),o1=o1+Math.imul(Q1,r$)|0,d1=d1+Math.imul(Q1,v3)|0,d1=d1+Math.imul(rv,r$)|0,R1=R1+Math.imul(rv,v3)|0;var g3=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(g3>>>26)|0,g3&=67108863,o1=Math.imul(fv,Qy),d1=Math.imul(fv,e2),d1=d1+Math.imul(cv,Qy)|0,R1=Math.imul(cv,e2),o1=o1+Math.imul(ev,r$)|0,d1=d1+Math.imul(ev,v3)|0,d1=d1+Math.imul(Mv,r$)|0,R1=R1+Math.imul(Mv,v3)|0,o1=o1+Math.imul(Q1,$2)|0,d1=d1+Math.imul(Q1,_$)|0,d1=d1+Math.imul(rv,$2)|0,R1=R1+Math.imul(rv,_$)|0;var j3=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(j3>>>26)|0,j3&=67108863,o1=Math.imul(Cy,Qy),d1=Math.imul(Cy,e2),d1=d1+Math.imul(Ly,Qy)|0,R1=Math.imul(Ly,e2),o1=o1+Math.imul(fv,r$)|0,d1=d1+Math.imul(fv,v3)|0,d1=d1+Math.imul(cv,r$)|0,R1=R1+Math.imul(cv,v3)|0,o1=o1+Math.imul(ev,$2)|0,d1=d1+Math.imul(ev,_$)|0,d1=d1+Math.imul(Mv,$2)|0,R1=R1+Math.imul(Mv,_$)|0,o1=o1+Math.imul(Q1,S$)|0,d1=d1+Math.imul(Q1,m$)|0,d1=d1+Math.imul(rv,S$)|0,R1=R1+Math.imul(rv,m$)|0;var $w=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+($w>>>26)|0,$w&=67108863,o1=Math.imul(t2,Qy),d1=Math.imul(t2,e2),d1=d1+Math.imul(C2,Qy)|0,R1=Math.imul(C2,e2),o1=o1+Math.imul(Cy,r$)|0,d1=d1+Math.imul(Cy,v3)|0,d1=d1+Math.imul(Ly,r$)|0,R1=R1+Math.imul(Ly,v3)|0,o1=o1+Math.imul(fv,$2)|0,d1=d1+Math.imul(fv,_$)|0,d1=d1+Math.imul(cv,$2)|0,R1=R1+Math.imul(cv,_$)|0,o1=o1+Math.imul(ev,S$)|0,d1=d1+Math.imul(ev,m$)|0,d1=d1+Math.imul(Mv,S$)|0,R1=R1+Math.imul(Mv,m$)|0,o1=o1+Math.imul(Q1,n$)|0,d1=d1+Math.imul(Q1,a$)|0,d1=d1+Math.imul(rv,n$)|0,R1=R1+Math.imul(rv,a$)|0;var w3=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(w3>>>26)|0,w3&=67108863,o1=Math.imul(jw,Qy),d1=Math.imul(jw,e2),d1=d1+Math.imul(pw,Qy)|0,R1=Math.imul(pw,e2),o1=o1+Math.imul(t2,r$)|0,d1=d1+Math.imul(t2,v3)|0,d1=d1+Math.imul(C2,r$)|0,R1=R1+Math.imul(C2,v3)|0,o1=o1+Math.imul(Cy,$2)|0,d1=d1+Math.imul(Cy,_$)|0,d1=d1+Math.imul(Ly,$2)|0,R1=R1+Math.imul(Ly,_$)|0,o1=o1+Math.imul(fv,S$)|0,d1=d1+Math.imul(fv,m$)|0,d1=d1+Math.imul(cv,S$)|0,R1=R1+Math.imul(cv,m$)|0,o1=o1+Math.imul(ev,n$)|0,d1=d1+Math.imul(ev,a$)|0,d1=d1+Math.imul(Mv,n$)|0,R1=R1+Math.imul(Mv,a$)|0,o1=o1+Math.imul(Q1,Mw)|0,d1=d1+Math.imul(Q1,Bw)|0,d1=d1+Math.imul(rv,Mw)|0,R1=R1+Math.imul(rv,Bw)|0;var yE=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(yE>>>26)|0,yE&=67108863,o1=Math.imul(Hw,Qy),d1=Math.imul(Hw,e2),d1=d1+Math.imul(uw,Qy)|0,R1=Math.imul(uw,e2),o1=o1+Math.imul(jw,r$)|0,d1=d1+Math.imul(jw,v3)|0,d1=d1+Math.imul(pw,r$)|0,R1=R1+Math.imul(pw,v3)|0,o1=o1+Math.imul(t2,$2)|0,d1=d1+Math.imul(t2,_$)|0,d1=d1+Math.imul(C2,$2)|0,R1=R1+Math.imul(C2,_$)|0,o1=o1+Math.imul(Cy,S$)|0,d1=d1+Math.imul(Cy,m$)|0,d1=d1+Math.imul(Ly,S$)|0,R1=R1+Math.imul(Ly,m$)|0,o1=o1+Math.imul(fv,n$)|0,d1=d1+Math.imul(fv,a$)|0,d1=d1+Math.imul(cv,n$)|0,R1=R1+Math.imul(cv,a$)|0,o1=o1+Math.imul(ev,Mw)|0,d1=d1+Math.imul(ev,Bw)|0,d1=d1+Math.imul(Mv,Mw)|0,R1=R1+Math.imul(Mv,Bw)|0,o1=o1+Math.imul(Q1,B$)|0,d1=d1+Math.imul(Q1,$y)|0,d1=d1+Math.imul(rv,B$)|0,R1=R1+Math.imul(rv,$y)|0;var bE=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(bE>>>26)|0,bE&=67108863,o1=Math.imul(lw,Qy),d1=Math.imul(lw,e2),d1=d1+Math.imul(Lw,Qy)|0,R1=Math.imul(Lw,e2),o1=o1+Math.imul(Hw,r$)|0,d1=d1+Math.imul(Hw,v3)|0,d1=d1+Math.imul(uw,r$)|0,R1=R1+Math.imul(uw,v3)|0,o1=o1+Math.imul(jw,$2)|0,d1=d1+Math.imul(jw,_$)|0,d1=d1+Math.imul(pw,$2)|0,R1=R1+Math.imul(pw,_$)|0,o1=o1+Math.imul(t2,S$)|0,d1=d1+Math.imul(t2,m$)|0,d1=d1+Math.imul(C2,S$)|0,R1=R1+Math.imul(C2,m$)|0,o1=o1+Math.imul(Cy,n$)|0,d1=d1+Math.imul(Cy,a$)|0,d1=d1+Math.imul(Ly,n$)|0,R1=R1+Math.imul(Ly,a$)|0,o1=o1+Math.imul(fv,Mw)|0,d1=d1+Math.imul(fv,Bw)|0,d1=d1+Math.imul(cv,Mw)|0,R1=R1+Math.imul(cv,Bw)|0,o1=o1+Math.imul(ev,B$)|0,d1=d1+Math.imul(ev,$y)|0,d1=d1+Math.imul(Mv,B$)|0,R1=R1+Math.imul(Mv,$y)|0,o1=o1+Math.imul(Q1,Ny)|0,d1=d1+Math.imul(Q1,Vy)|0,d1=d1+Math.imul(rv,Ny)|0,R1=R1+Math.imul(rv,Vy)|0;var J_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(J_>>>26)|0,J_&=67108863,o1=Math.imul(A2,Qy),d1=Math.imul(A2,e2),d1=d1+Math.imul(kv,Qy)|0,R1=Math.imul(kv,e2),o1=o1+Math.imul(lw,r$)|0,d1=d1+Math.imul(lw,v3)|0,d1=d1+Math.imul(Lw,r$)|0,R1=R1+Math.imul(Lw,v3)|0,o1=o1+Math.imul(Hw,$2)|0,d1=d1+Math.imul(Hw,_$)|0,d1=d1+Math.imul(uw,$2)|0,R1=R1+Math.imul(uw,_$)|0,o1=o1+Math.imul(jw,S$)|0,d1=d1+Math.imul(jw,m$)|0,d1=d1+Math.imul(pw,S$)|0,R1=R1+Math.imul(pw,m$)|0,o1=o1+Math.imul(t2,n$)|0,d1=d1+Math.imul(t2,a$)|0,d1=d1+Math.imul(C2,n$)|0,R1=R1+Math.imul(C2,a$)|0,o1=o1+Math.imul(Cy,Mw)|0,d1=d1+Math.imul(Cy,Bw)|0,d1=d1+Math.imul(Ly,Mw)|0,R1=R1+Math.imul(Ly,Bw)|0,o1=o1+Math.imul(fv,B$)|0,d1=d1+Math.imul(fv,$y)|0,d1=d1+Math.imul(cv,B$)|0,R1=R1+Math.imul(cv,$y)|0,o1=o1+Math.imul(ev,Ny)|0,d1=d1+Math.imul(ev,Vy)|0,d1=d1+Math.imul(Mv,Ny)|0,R1=R1+Math.imul(Mv,Vy)|0,o1=o1+Math.imul(Q1,fw)|0,d1=d1+Math.imul(Q1,xw)|0,d1=d1+Math.imul(rv,fw)|0,R1=R1+Math.imul(rv,xw)|0;var B_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(B_>>>26)|0,B_&=67108863,o1=Math.imul(tv,Qy),d1=Math.imul(tv,e2),d1=d1+Math.imul(Yv,Qy)|0,R1=Math.imul(Yv,e2),o1=o1+Math.imul(A2,r$)|0,d1=d1+Math.imul(A2,v3)|0,d1=d1+Math.imul(kv,r$)|0,R1=R1+Math.imul(kv,v3)|0,o1=o1+Math.imul(lw,$2)|0,d1=d1+Math.imul(lw,_$)|0,d1=d1+Math.imul(Lw,$2)|0,R1=R1+Math.imul(Lw,_$)|0,o1=o1+Math.imul(Hw,S$)|0,d1=d1+Math.imul(Hw,m$)|0,d1=d1+Math.imul(uw,S$)|0,R1=R1+Math.imul(uw,m$)|0,o1=o1+Math.imul(jw,n$)|0,d1=d1+Math.imul(jw,a$)|0,d1=d1+Math.imul(pw,n$)|0,R1=R1+Math.imul(pw,a$)|0,o1=o1+Math.imul(t2,Mw)|0,d1=d1+Math.imul(t2,Bw)|0,d1=d1+Math.imul(C2,Mw)|0,R1=R1+Math.imul(C2,Bw)|0,o1=o1+Math.imul(Cy,B$)|0,d1=d1+Math.imul(Cy,$y)|0,d1=d1+Math.imul(Ly,B$)|0,R1=R1+Math.imul(Ly,$y)|0,o1=o1+Math.imul(fv,Ny)|0,d1=d1+Math.imul(fv,Vy)|0,d1=d1+Math.imul(cv,Ny)|0,R1=R1+Math.imul(cv,Vy)|0,o1=o1+Math.imul(ev,fw)|0,d1=d1+Math.imul(ev,xw)|0,d1=d1+Math.imul(Mv,fw)|0,R1=R1+Math.imul(Mv,xw)|0,o1=o1+Math.imul(Q1,i$)|0,d1=d1+Math.imul(Q1,y$)|0,d1=d1+Math.imul(rv,i$)|0,R1=R1+Math.imul(rv,y$)|0;var $_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+($_>>>26)|0,$_&=67108863,o1=Math.imul(tv,r$),d1=Math.imul(tv,v3),d1=d1+Math.imul(Yv,r$)|0,R1=Math.imul(Yv,v3),o1=o1+Math.imul(A2,$2)|0,d1=d1+Math.imul(A2,_$)|0,d1=d1+Math.imul(kv,$2)|0,R1=R1+Math.imul(kv,_$)|0,o1=o1+Math.imul(lw,S$)|0,d1=d1+Math.imul(lw,m$)|0,d1=d1+Math.imul(Lw,S$)|0,R1=R1+Math.imul(Lw,m$)|0,o1=o1+Math.imul(Hw,n$)|0,d1=d1+Math.imul(Hw,a$)|0,d1=d1+Math.imul(uw,n$)|0,R1=R1+Math.imul(uw,a$)|0,o1=o1+Math.imul(jw,Mw)|0,d1=d1+Math.imul(jw,Bw)|0,d1=d1+Math.imul(pw,Mw)|0,R1=R1+Math.imul(pw,Bw)|0,o1=o1+Math.imul(t2,B$)|0,d1=d1+Math.imul(t2,$y)|0,d1=d1+Math.imul(C2,B$)|0,R1=R1+Math.imul(C2,$y)|0,o1=o1+Math.imul(Cy,Ny)|0,d1=d1+Math.imul(Cy,Vy)|0,d1=d1+Math.imul(Ly,Ny)|0,R1=R1+Math.imul(Ly,Vy)|0,o1=o1+Math.imul(fv,fw)|0,d1=d1+Math.imul(fv,xw)|0,d1=d1+Math.imul(cv,fw)|0,R1=R1+Math.imul(cv,xw)|0,o1=o1+Math.imul(ev,i$)|0,d1=d1+Math.imul(ev,y$)|0,d1=d1+Math.imul(Mv,i$)|0,R1=R1+Math.imul(Mv,y$)|0;var M6=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(M6>>>26)|0,M6&=67108863,o1=Math.imul(tv,$2),d1=Math.imul(tv,_$),d1=d1+Math.imul(Yv,$2)|0,R1=Math.imul(Yv,_$),o1=o1+Math.imul(A2,S$)|0,d1=d1+Math.imul(A2,m$)|0,d1=d1+Math.imul(kv,S$)|0,R1=R1+Math.imul(kv,m$)|0,o1=o1+Math.imul(lw,n$)|0,d1=d1+Math.imul(lw,a$)|0,d1=d1+Math.imul(Lw,n$)|0,R1=R1+Math.imul(Lw,a$)|0,o1=o1+Math.imul(Hw,Mw)|0,d1=d1+Math.imul(Hw,Bw)|0,d1=d1+Math.imul(uw,Mw)|0,R1=R1+Math.imul(uw,Bw)|0,o1=o1+Math.imul(jw,B$)|0,d1=d1+Math.imul(jw,$y)|0,d1=d1+Math.imul(pw,B$)|0,R1=R1+Math.imul(pw,$y)|0,o1=o1+Math.imul(t2,Ny)|0,d1=d1+Math.imul(t2,Vy)|0,d1=d1+Math.imul(C2,Ny)|0,R1=R1+Math.imul(C2,Vy)|0,o1=o1+Math.imul(Cy,fw)|0,d1=d1+Math.imul(Cy,xw)|0,d1=d1+Math.imul(Ly,fw)|0,R1=R1+Math.imul(Ly,xw)|0,o1=o1+Math.imul(fv,i$)|0,d1=d1+Math.imul(fv,y$)|0,d1=d1+Math.imul(cv,i$)|0,R1=R1+Math.imul(cv,y$)|0;var D_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(D_>>>26)|0,D_&=67108863,o1=Math.imul(tv,S$),d1=Math.imul(tv,m$),d1=d1+Math.imul(Yv,S$)|0,R1=Math.imul(Yv,m$),o1=o1+Math.imul(A2,n$)|0,d1=d1+Math.imul(A2,a$)|0,d1=d1+Math.imul(kv,n$)|0,R1=R1+Math.imul(kv,a$)|0,o1=o1+Math.imul(lw,Mw)|0,d1=d1+Math.imul(lw,Bw)|0,d1=d1+Math.imul(Lw,Mw)|0,R1=R1+Math.imul(Lw,Bw)|0,o1=o1+Math.imul(Hw,B$)|0,d1=d1+Math.imul(Hw,$y)|0,d1=d1+Math.imul(uw,B$)|0,R1=R1+Math.imul(uw,$y)|0,o1=o1+Math.imul(jw,Ny)|0,d1=d1+Math.imul(jw,Vy)|0,d1=d1+Math.imul(pw,Ny)|0,R1=R1+Math.imul(pw,Vy)|0,o1=o1+Math.imul(t2,fw)|0,d1=d1+Math.imul(t2,xw)|0,d1=d1+Math.imul(C2,fw)|0,R1=R1+Math.imul(C2,xw)|0,o1=o1+Math.imul(Cy,i$)|0,d1=d1+Math.imul(Cy,y$)|0,d1=d1+Math.imul(Ly,i$)|0,R1=R1+Math.imul(Ly,y$)|0;var FA=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(FA>>>26)|0,FA&=67108863,o1=Math.imul(tv,n$),d1=Math.imul(tv,a$),d1=d1+Math.imul(Yv,n$)|0,R1=Math.imul(Yv,a$),o1=o1+Math.imul(A2,Mw)|0,d1=d1+Math.imul(A2,Bw)|0,d1=d1+Math.imul(kv,Mw)|0,R1=R1+Math.imul(kv,Bw)|0,o1=o1+Math.imul(lw,B$)|0,d1=d1+Math.imul(lw,$y)|0,d1=d1+Math.imul(Lw,B$)|0,R1=R1+Math.imul(Lw,$y)|0,o1=o1+Math.imul(Hw,Ny)|0,d1=d1+Math.imul(Hw,Vy)|0,d1=d1+Math.imul(uw,Ny)|0,R1=R1+Math.imul(uw,Vy)|0,o1=o1+Math.imul(jw,fw)|0,d1=d1+Math.imul(jw,xw)|0,d1=d1+Math.imul(pw,fw)|0,R1=R1+Math.imul(pw,xw)|0,o1=o1+Math.imul(t2,i$)|0,d1=d1+Math.imul(t2,y$)|0,d1=d1+Math.imul(C2,i$)|0,R1=R1+Math.imul(C2,y$)|0;var g8=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(g8>>>26)|0,g8&=67108863,o1=Math.imul(tv,Mw),d1=Math.imul(tv,Bw),d1=d1+Math.imul(Yv,Mw)|0,R1=Math.imul(Yv,Bw),o1=o1+Math.imul(A2,B$)|0,d1=d1+Math.imul(A2,$y)|0,d1=d1+Math.imul(kv,B$)|0,R1=R1+Math.imul(kv,$y)|0,o1=o1+Math.imul(lw,Ny)|0,d1=d1+Math.imul(lw,Vy)|0,d1=d1+Math.imul(Lw,Ny)|0,R1=R1+Math.imul(Lw,Vy)|0,o1=o1+Math.imul(Hw,fw)|0,d1=d1+Math.imul(Hw,xw)|0,d1=d1+Math.imul(uw,fw)|0,R1=R1+Math.imul(uw,xw)|0,o1=o1+Math.imul(jw,i$)|0,d1=d1+Math.imul(jw,y$)|0,d1=d1+Math.imul(pw,i$)|0,R1=R1+Math.imul(pw,y$)|0;var y8=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(y8>>>26)|0,y8&=67108863,o1=Math.imul(tv,B$),d1=Math.imul(tv,$y),d1=d1+Math.imul(Yv,B$)|0,R1=Math.imul(Yv,$y),o1=o1+Math.imul(A2,Ny)|0,d1=d1+Math.imul(A2,Vy)|0,d1=d1+Math.imul(kv,Ny)|0,R1=R1+Math.imul(kv,Vy)|0,o1=o1+Math.imul(lw,fw)|0,d1=d1+Math.imul(lw,xw)|0,d1=d1+Math.imul(Lw,fw)|0,R1=R1+Math.imul(Lw,xw)|0,o1=o1+Math.imul(Hw,i$)|0,d1=d1+Math.imul(Hw,y$)|0,d1=d1+Math.imul(uw,i$)|0,R1=R1+Math.imul(uw,y$)|0;var X_=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(X_>>>26)|0,X_&=67108863,o1=Math.imul(tv,Ny),d1=Math.imul(tv,Vy),d1=d1+Math.imul(Yv,Ny)|0,R1=Math.imul(Yv,Vy),o1=o1+Math.imul(A2,fw)|0,d1=d1+Math.imul(A2,xw)|0,d1=d1+Math.imul(kv,fw)|0,R1=R1+Math.imul(kv,xw)|0,o1=o1+Math.imul(lw,i$)|0,d1=d1+Math.imul(lw,y$)|0,d1=d1+Math.imul(Lw,i$)|0,R1=R1+Math.imul(Lw,y$)|0;var FS=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(FS>>>26)|0,FS&=67108863,o1=Math.imul(tv,fw),d1=Math.imul(tv,xw),d1=d1+Math.imul(Yv,fw)|0,R1=Math.imul(Yv,xw),o1=o1+Math.imul(A2,i$)|0,d1=d1+Math.imul(A2,y$)|0,d1=d1+Math.imul(kv,i$)|0,R1=R1+Math.imul(kv,y$)|0;var sR=(G0+o1|0)+((d1&8191)<<13)|0;G0=(R1+(d1>>>13)|0)+(sR>>>26)|0,sR&=67108863,o1=Math.imul(tv,i$),d1=Math.imul(tv,y$),d1=d1+Math.imul(Yv,i$)|0,R1=Math.imul(Yv,y$);var I6=(G0+o1|0)+((d1&8191)<<13)|0;return G0=(R1+(d1>>>13)|0)+(I6>>>26)|0,I6&=67108863,c1[0]=Gw,c1[1]=g3,c1[2]=j3,c1[3]=$w,c1[4]=w3,c1[5]=yE,c1[6]=bE,c1[7]=J_,c1[8]=B_,c1[9]=$_,c1[10]=M6,c1[11]=D_,c1[12]=FA,c1[13]=g8,c1[14]=y8,c1[15]=X_,c1[16]=FS,c1[17]=sR,c1[18]=I6,G0!==0&&(c1[19]=G0,f1.length++),f1};Math.imul||(O0=$0);function L0(t1,D0,Z0){Z0.negative=D0.negative^t1.negative,Z0.length=t1.length+D0.length;for(var f1=0,w1=0,m1=0;m1>>26)|0,w1+=c1>>>26,c1&=67108863}Z0.words[m1]=G0,f1=c1,c1=w1}return f1!==0?Z0.words[m1]=f1:Z0.length--,Z0._strip()}function V0(t1,D0,Z0){return L0(t1,D0,Z0)}nt.prototype.mulTo=function(D0,Z0){var f1,w1=this.length+D0.length;return this.length===10&&D0.length===10?f1=O0(this,D0,Z0):w1<63?f1=$0(this,D0,Z0):w1<1024?f1=L0(this,D0,Z0):f1=V0(this,D0,Z0),f1},nt.prototype.mul=function(D0){var Z0=new nt(null);return Z0.words=new Array(this.length+D0.length),this.mulTo(D0,Z0)},nt.prototype.mulf=function(D0){var Z0=new nt(null);return Z0.words=new Array(this.length+D0.length),V0(this,D0,Z0)},nt.prototype.imul=function(D0){return this.clone().mulTo(D0,this)},nt.prototype.imuln=function(D0){var Z0=D0<0;Z0&&(D0=-D0),d(typeof D0=="number"),d(D0<67108864);for(var f1=0,w1=0;w1>=26,f1+=m1/67108864|0,f1+=c1>>>26,this.words[w1]=c1&67108863}return f1!==0&&(this.words[w1]=f1,this.length++),Z0?this.ineg():this},nt.prototype.muln=function(D0){return this.clone().imuln(D0)},nt.prototype.sqr=function(){return this.mul(this)},nt.prototype.isqr=function(){return this.imul(this.clone())},nt.prototype.pow=function(D0){var Z0=A0(D0);if(Z0.length===0)return new nt(1);for(var f1=this,w1=0;w1=0);var Z0=D0%26,f1=(D0-Z0)/26,w1=67108863>>>26-Z0<<26-Z0,m1;if(Z0!==0){var c1=0;for(m1=0;m1>>26-Z0}c1&&(this.words[m1]=c1,this.length++)}if(f1!==0){for(m1=this.length-1;m1>=0;m1--)this.words[m1+f1]=this.words[m1];for(m1=0;m1=0);var w1;Z0?w1=(Z0-Z0%26)/26:w1=0;var m1=D0%26,c1=Math.min((D0-m1)/26,this.length),G0=67108863^67108863>>>m1<c1)for(this.length-=c1,d1=0;d1=0&&(R1!==0||d1>=w1);d1--){var O1=this.words[d1]|0;this.words[d1]=R1<<26-m1|O1>>>m1,R1=O1&G0}return o1&&R1!==0&&(o1.words[o1.length++]=R1),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},nt.prototype.ishrn=function(D0,Z0,f1){return d(this.negative===0),this.iushrn(D0,Z0,f1)},nt.prototype.shln=function(D0){return this.clone().ishln(D0)},nt.prototype.ushln=function(D0){return this.clone().iushln(D0)},nt.prototype.shrn=function(D0){return this.clone().ishrn(D0)},nt.prototype.ushrn=function(D0){return this.clone().iushrn(D0)},nt.prototype.testn=function(D0){d(typeof D0=="number"&&D0>=0);var Z0=D0%26,f1=(D0-Z0)/26,w1=1<=0);var Z0=D0%26,f1=(D0-Z0)/26;if(d(this.negative===0,"imaskn works only with positive numbers"),this.length<=f1)return this;if(Z0!==0&&f1++,this.length=Math.min(f1,this.length),Z0!==0){var w1=67108863^67108863>>>Z0<=67108864;Z0++)this.words[Z0]-=67108864,Z0===this.length-1?this.words[Z0+1]=1:this.words[Z0+1]++;return this.length=Math.max(this.length,Z0+1),this},nt.prototype.isubn=function(D0){if(d(typeof D0=="number"),d(D0<67108864),D0<0)return this.iaddn(-D0);if(this.negative!==0)return this.negative=0,this.iaddn(D0),this.negative=1,this;if(this.words[0]-=D0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var Z0=0;Z0>26)-(o1/67108864|0),this.words[m1+f1]=c1&67108863}for(;m1>26,this.words[m1+f1]=c1&67108863;if(G0===0)return this._strip();for(d(G0===-1),G0=0,m1=0;m1>26,this.words[m1]=c1&67108863;return this.negative=1,this._strip()},nt.prototype._wordDiv=function(D0,Z0){var f1=this.length-D0.length,w1=this.clone(),m1=D0,c1=m1.words[m1.length-1]|0,G0=this._countBits(c1);f1=26-G0,f1!==0&&(m1=m1.ushln(f1),w1.iushln(f1),c1=m1.words[m1.length-1]|0);var o1=w1.length-m1.length,d1;if(Z0!=="mod"){d1=new nt(null),d1.length=o1+1,d1.words=new Array(d1.length);for(var R1=0;R1=0;Q1--){var rv=(w1.words[m1.length+Q1]|0)*67108864+(w1.words[m1.length+Q1-1]|0);for(rv=Math.min(rv/c1|0,67108863),w1._ishlnsubmul(m1,rv,Q1);w1.negative!==0;)rv--,w1.negative=0,w1._ishlnsubmul(m1,1,Q1),w1.isZero()||(w1.negative^=1);d1&&(d1.words[Q1]=rv)}return d1&&d1._strip(),w1._strip(),Z0!=="div"&&f1!==0&&w1.iushrn(f1),{div:d1||null,mod:w1}},nt.prototype.divmod=function(D0,Z0,f1){if(d(!D0.isZero()),this.isZero())return{div:new nt(0),mod:new nt(0)};var w1,m1,c1;return this.negative!==0&&D0.negative===0?(c1=this.neg().divmod(D0,Z0),Z0!=="mod"&&(w1=c1.div.neg()),Z0!=="div"&&(m1=c1.mod.neg(),f1&&m1.negative!==0&&m1.iadd(D0)),{div:w1,mod:m1}):this.negative===0&&D0.negative!==0?(c1=this.divmod(D0.neg(),Z0),Z0!=="mod"&&(w1=c1.div.neg()),{div:w1,mod:c1.mod}):this.negative&D0.negative?(c1=this.neg().divmod(D0.neg(),Z0),Z0!=="div"&&(m1=c1.mod.neg(),f1&&m1.negative!==0&&m1.isub(D0)),{div:c1.div,mod:m1}):D0.length>this.length||this.cmp(D0)<0?{div:new nt(0),mod:this}:D0.length===1?Z0==="div"?{div:this.divn(D0.words[0]),mod:null}:Z0==="mod"?{div:null,mod:new nt(this.modrn(D0.words[0]))}:{div:this.divn(D0.words[0]),mod:new nt(this.modrn(D0.words[0]))}:this._wordDiv(D0,Z0)},nt.prototype.div=function(D0){return this.divmod(D0,"div",!1).div},nt.prototype.mod=function(D0){return this.divmod(D0,"mod",!1).mod},nt.prototype.umod=function(D0){return this.divmod(D0,"mod",!0).mod},nt.prototype.divRound=function(D0){var Z0=this.divmod(D0);if(Z0.mod.isZero())return Z0.div;var f1=Z0.div.negative!==0?Z0.mod.isub(D0):Z0.mod,w1=D0.ushrn(1),m1=D0.andln(1),c1=f1.cmp(w1);return c1<0||m1===1&&c1===0?Z0.div:Z0.div.negative!==0?Z0.div.isubn(1):Z0.div.iaddn(1)},nt.prototype.modrn=function(D0){var Z0=D0<0;Z0&&(D0=-D0),d(D0<=67108863);for(var f1=(1<<26)%D0,w1=0,m1=this.length-1;m1>=0;m1--)w1=(f1*w1+(this.words[m1]|0))%D0;return Z0?-w1:w1},nt.prototype.modn=function(D0){return this.modrn(D0)},nt.prototype.idivn=function(D0){var Z0=D0<0;Z0&&(D0=-D0),d(D0<=67108863);for(var f1=0,w1=this.length-1;w1>=0;w1--){var m1=(this.words[w1]|0)+f1*67108864;this.words[w1]=m1/D0|0,f1=m1%D0}return this._strip(),Z0?this.ineg():this},nt.prototype.divn=function(D0){return this.clone().idivn(D0)},nt.prototype.egcd=function(D0){d(D0.negative===0),d(!D0.isZero());var Z0=this,f1=D0.clone();Z0.negative!==0?Z0=Z0.umod(D0):Z0=Z0.clone();for(var w1=new nt(1),m1=new nt(0),c1=new nt(0),G0=new nt(1),o1=0;Z0.isEven()&&f1.isEven();)Z0.iushrn(1),f1.iushrn(1),++o1;for(var d1=f1.clone(),R1=Z0.clone();!Z0.isZero();){for(var O1=0,Q1=1;!(Z0.words[0]&Q1)&&O1<26;++O1,Q1<<=1);if(O1>0)for(Z0.iushrn(O1);O1-- >0;)(w1.isOdd()||m1.isOdd())&&(w1.iadd(d1),m1.isub(R1)),w1.iushrn(1),m1.iushrn(1);for(var rv=0,D1=1;!(f1.words[0]&D1)&&rv<26;++rv,D1<<=1);if(rv>0)for(f1.iushrn(rv);rv-- >0;)(c1.isOdd()||G0.isOdd())&&(c1.iadd(d1),G0.isub(R1)),c1.iushrn(1),G0.iushrn(1);Z0.cmp(f1)>=0?(Z0.isub(f1),w1.isub(c1),m1.isub(G0)):(f1.isub(Z0),c1.isub(w1),G0.isub(m1))}return{a:c1,b:G0,gcd:f1.iushln(o1)}},nt.prototype._invmp=function(D0){d(D0.negative===0),d(!D0.isZero());var Z0=this,f1=D0.clone();Z0.negative!==0?Z0=Z0.umod(D0):Z0=Z0.clone();for(var w1=new nt(1),m1=new nt(0),c1=f1.clone();Z0.cmpn(1)>0&&f1.cmpn(1)>0;){for(var G0=0,o1=1;!(Z0.words[0]&o1)&&G0<26;++G0,o1<<=1);if(G0>0)for(Z0.iushrn(G0);G0-- >0;)w1.isOdd()&&w1.iadd(c1),w1.iushrn(1);for(var d1=0,R1=1;!(f1.words[0]&R1)&&d1<26;++d1,R1<<=1);if(d1>0)for(f1.iushrn(d1);d1-- >0;)m1.isOdd()&&m1.iadd(c1),m1.iushrn(1);Z0.cmp(f1)>=0?(Z0.isub(f1),w1.isub(m1)):(f1.isub(Z0),m1.isub(w1))}var O1;return Z0.cmpn(1)===0?O1=w1:O1=m1,O1.cmpn(0)<0&&O1.iadd(D0),O1},nt.prototype.gcd=function(D0){if(this.isZero())return D0.abs();if(D0.isZero())return this.abs();var Z0=this.clone(),f1=D0.clone();Z0.negative=0,f1.negative=0;for(var w1=0;Z0.isEven()&&f1.isEven();w1++)Z0.iushrn(1),f1.iushrn(1);do{for(;Z0.isEven();)Z0.iushrn(1);for(;f1.isEven();)f1.iushrn(1);var m1=Z0.cmp(f1);if(m1<0){var c1=Z0;Z0=f1,f1=c1}else if(m1===0||f1.cmpn(1)===0)break;Z0.isub(f1)}while(!0);return f1.iushln(w1)},nt.prototype.invm=function(D0){return this.egcd(D0).a.umod(D0)},nt.prototype.isEven=function(){return(this.words[0]&1)===0},nt.prototype.isOdd=function(){return(this.words[0]&1)===1},nt.prototype.andln=function(D0){return this.words[0]&D0},nt.prototype.bincn=function(D0){d(typeof D0=="number");var Z0=D0%26,f1=(D0-Z0)/26,w1=1<>>26,G0&=67108863,this.words[c1]=G0}return m1!==0&&(this.words[c1]=m1,this.length++),this},nt.prototype.isZero=function(){return this.length===1&&this.words[0]===0},nt.prototype.cmpn=function(D0){var Z0=D0<0;if(this.negative!==0&&!Z0)return-1;if(this.negative===0&&Z0)return 1;this._strip();var f1;if(this.length>1)f1=1;else{Z0&&(D0=-D0),d(D0<=67108863,"Number is too big");var w1=this.words[0]|0;f1=w1===D0?0:w1D0.length)return 1;if(this.length=0;f1--){var w1=this.words[f1]|0,m1=D0.words[f1]|0;if(w1!==m1){w1m1&&(Z0=1);break}}return Z0},nt.prototype.gtn=function(D0){return this.cmpn(D0)===1},nt.prototype.gt=function(D0){return this.cmp(D0)===1},nt.prototype.gten=function(D0){return this.cmpn(D0)>=0},nt.prototype.gte=function(D0){return this.cmp(D0)>=0},nt.prototype.ltn=function(D0){return this.cmpn(D0)===-1},nt.prototype.lt=function(D0){return this.cmp(D0)===-1},nt.prototype.lten=function(D0){return this.cmpn(D0)<=0},nt.prototype.lte=function(D0){return this.cmp(D0)<=0},nt.prototype.eqn=function(D0){return this.cmpn(D0)===0},nt.prototype.eq=function(D0){return this.cmp(D0)===0},nt.red=function(D0){return new j1(D0)},nt.prototype.toRed=function(D0){return d(!this.red,"Already a number in reduction context"),d(this.negative===0,"red works only with positives"),D0.convertTo(this)._forceRed(D0)},nt.prototype.fromRed=function(){return d(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},nt.prototype._forceRed=function(D0){return this.red=D0,this},nt.prototype.forceRed=function(D0){return d(!this.red,"Already a number in reduction context"),this._forceRed(D0)},nt.prototype.redAdd=function(D0){return d(this.red,"redAdd works only with red numbers"),this.red.add(this,D0)},nt.prototype.redIAdd=function(D0){return d(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,D0)},nt.prototype.redSub=function(D0){return d(this.red,"redSub works only with red numbers"),this.red.sub(this,D0)},nt.prototype.redISub=function(D0){return d(this.red,"redISub works only with red numbers"),this.red.isub(this,D0)},nt.prototype.redShl=function(D0){return d(this.red,"redShl works only with red numbers"),this.red.shl(this,D0)},nt.prototype.redMul=function(D0){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,D0),this.red.mul(this,D0)},nt.prototype.redIMul=function(D0){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,D0),this.red.imul(this,D0)},nt.prototype.redSqr=function(){return d(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},nt.prototype.redISqr=function(){return d(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},nt.prototype.redSqrt=function(){return d(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},nt.prototype.redInvm=function(){return d(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},nt.prototype.redNeg=function(){return d(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},nt.prototype.redPow=function(D0){return d(this.red&&!D0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,D0)};var F0={k256:null,p224:null,p192:null,p25519:null};function u1(t1,D0){this.name=t1,this.p=new nt(D0,16),this.n=this.p.bitLength(),this.k=new nt(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}u1.prototype._tmp=function(){var D0=new nt(null);return D0.words=new Array(Math.ceil(this.n/13)),D0},u1.prototype.ireduce=function(D0){var Z0=D0,f1;do this.split(Z0,this.tmp),Z0=this.imulK(Z0),Z0=Z0.iadd(this.tmp),f1=Z0.bitLength();while(f1>this.n);var w1=f10?Z0.isub(this.p):Z0.strip!==void 0?Z0.strip():Z0._strip(),Z0},u1.prototype.split=function(D0,Z0){D0.iushrn(this.n,0,Z0)},u1.prototype.imulK=function(D0){return D0.imul(this.k)};function g1(){u1.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}tt(g1,u1),g1.prototype.split=function(D0,Z0){for(var f1=4194303,w1=Math.min(D0.length,9),m1=0;m1>>22,c1=G0}c1>>>=22,D0.words[m1-10]=c1,c1===0&&D0.length>10?D0.length-=10:D0.length-=9},g1.prototype.imulK=function(D0){D0.words[D0.length]=0,D0.words[D0.length+1]=0,D0.length+=2;for(var Z0=0,f1=0;f1>>=26,D0.words[f1]=m1,Z0=w1}return Z0!==0&&(D0.words[D0.length++]=Z0),D0},nt._prime=function(D0){if(F0[D0])return F0[D0];var Z0;if(D0==="k256")Z0=new g1;else if(D0==="p224")Z0=new E1;else if(D0==="p192")Z0=new B1;else if(D0==="p25519")Z0=new lv;else throw new Error("Unknown prime "+D0);return F0[D0]=Z0,Z0};function j1(t1){if(typeof t1=="string"){var D0=nt._prime(t1);this.m=D0.p,this.prime=D0}else d(t1.gtn(1),"modulus must be greater than 1"),this.m=t1,this.prime=null}j1.prototype._verify1=function(D0){d(D0.negative===0,"red works only with positives"),d(D0.red,"red works only with red numbers")},j1.prototype._verify2=function(D0,Z0){d((D0.negative|Z0.negative)===0,"red works only with positives"),d(D0.red&&D0.red===Z0.red,"red works only with red numbers")},j1.prototype.imod=function(D0){return this.prime?this.prime.ireduce(D0)._forceRed(this):($u(D0,D0.umod(this.m)._forceRed(this)),D0)},j1.prototype.neg=function(D0){return D0.isZero()?D0.clone():this.m.sub(D0)._forceRed(this)},j1.prototype.add=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.add(Z0);return f1.cmp(this.m)>=0&&f1.isub(this.m),f1._forceRed(this)},j1.prototype.iadd=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.iadd(Z0);return f1.cmp(this.m)>=0&&f1.isub(this.m),f1},j1.prototype.sub=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.sub(Z0);return f1.cmpn(0)<0&&f1.iadd(this.m),f1._forceRed(this)},j1.prototype.isub=function(D0,Z0){this._verify2(D0,Z0);var f1=D0.isub(Z0);return f1.cmpn(0)<0&&f1.iadd(this.m),f1},j1.prototype.shl=function(D0,Z0){return this._verify1(D0),this.imod(D0.ushln(Z0))},j1.prototype.imul=function(D0,Z0){return this._verify2(D0,Z0),this.imod(D0.imul(Z0))},j1.prototype.mul=function(D0,Z0){return this._verify2(D0,Z0),this.imod(D0.mul(Z0))},j1.prototype.isqr=function(D0){return this.imul(D0,D0.clone())},j1.prototype.sqr=function(D0){return this.mul(D0,D0)},j1.prototype.sqrt=function(D0){if(D0.isZero())return D0.clone();var Z0=this.m.andln(3);if(d(Z0%2===1),Z0===3){var f1=this.m.add(new nt(1)).iushrn(2);return this.pow(D0,f1)}for(var w1=this.m.subn(1),m1=0;!w1.isZero()&&w1.andln(1)===0;)m1++,w1.iushrn(1);d(!w1.isZero());var c1=new nt(1).toRed(this),G0=c1.redNeg(),o1=this.m.subn(1).iushrn(1),d1=this.m.bitLength();for(d1=new nt(2*d1*d1).toRed(this);this.pow(d1,o1).cmp(G0)!==0;)d1.redIAdd(G0);for(var R1=this.pow(d1,w1),O1=this.pow(D0,w1.addn(1).iushrn(1)),Q1=this.pow(D0,w1),rv=m1;Q1.cmp(c1)!==0;){for(var D1=Q1,ev=0;D1.cmp(c1)!==0;ev++)D1=D1.redSqr();d(ev=0;m1--){for(var R1=Z0.words[m1],O1=d1-1;O1>=0;O1--){var Q1=R1>>O1&1;if(c1!==w1[0]&&(c1=this.sqr(c1)),Q1===0&&G0===0){o1=0;continue}G0<<=1,G0|=Q1,o1++,!(o1!==f1&&(m1!==0||O1!==0))&&(c1=this.mul(c1,w1[G0]),o1=0,G0=0)}d1=26}return c1},j1.prototype.convertTo=function(D0){var Z0=D0.umod(this.m);return Z0===D0?Z0.clone():Z0},j1.prototype.convertFrom=function(D0){var Z0=D0.clone();return Z0.red=null,Z0},nt.mont=function(D0){return new r1(D0)};function r1(t1){j1.call(this,t1),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new nt(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}tt(r1,j1),r1.prototype.convertTo=function(D0){return this.imod(D0.ushln(this.shift))},r1.prototype.convertFrom=function(D0){var Z0=this.imod(D0.mul(this.rinv));return Z0.red=null,Z0},r1.prototype.imul=function(D0,Z0){if(D0.isZero()||Z0.isZero())return D0.words[0]=0,D0.length=1,D0;var f1=D0.imul(Z0),w1=f1.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),m1=f1.isub(w1).iushrn(this.shift),c1=m1;return m1.cmp(this.m)>=0?c1=m1.isub(this.m):m1.cmpn(0)<0&&(c1=m1.iadd(this.m)),c1._forceRed(this)},r1.prototype.mul=function(D0,Z0){if(D0.isZero()||Z0.isZero())return new nt(0)._forceRed(this);var f1=D0.mul(Z0),w1=f1.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),m1=f1.isub(w1).iushrn(this.shift),c1=m1;return m1.cmp(this.m)>=0?c1=m1.isub(this.m):m1.cmpn(0)<0&&(c1=m1.iadd(this.m)),c1._forceRed(this)},r1.prototype.invm=function(D0){var Z0=this.imod(D0._invmp(this.m).mul(this.r2));return Z0._forceRed(this)}})(o,commonjsGlobal$4)})(bn$2);var bnExports$1=bn$2.exports,__importDefault$d=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(constants$5,"__esModule",{value:!0});constants$5.DEFAULT_FUNCTION_CALL_GAS=void 0;const bn_js_1$a=__importDefault$d(bnExports$1);constants$5.DEFAULT_FUNCTION_CALL_GAS=new bn_js_1$a.default("30000000000000");var errors$6={},errors$5={},logger$3={},logger$2={},console_logger={};Object.defineProperty(console_logger,"__esModule",{value:!0});console_logger.ConsoleLogger=void 0;class ConsoleLogger{constructor(a){this.logLevels=a,this.isLevelEnabled=c=>this.logLevels.includes(c)}print(a,c,...d){switch(a){case"error":case"fatal":return console.error(c,...d);case"warn":return console.warn(c,...d);case"log":return console.log(c,...d);case"debug":case"verbose":return console.debug(c,...d)}}verbose(a,...c){this.isLevelEnabled("verbose")&&this.print("verbose",a,...c)}debug(a,...c){this.isLevelEnabled("debug")&&this.print("debug",a,...c)}log(a,...c){this.isLevelEnabled("log")&&this.print("log",a,...c)}warn(a,...c){this.isLevelEnabled("warn")&&this.print("warn",a,...c)}error(a,...c){this.isLevelEnabled("error")&&this.print("error",a,...c)}fatal(a,...c){this.isLevelEnabled("fatal")&&this.print("fatal",a,...c)}}console_logger.ConsoleLogger=ConsoleLogger;var define_process_env_default$3={},_a$1;Object.defineProperty(logger$2,"__esModule",{value:!0});logger$2.Logger=void 0;const console_logger_1=console_logger,DEFAULT_LOG_LEVELS=["verbose","debug","log","warn","error","fatal"],DEFAULT_LOGGER=typeof process$1$4=="object"&&define_process_env_default$3.NEAR_NO_LOGS?void 0:new console_logger_1.ConsoleLogger(DEFAULT_LOG_LEVELS);let Logger$2=class{static error(a,...c){var d;(d=this.instanceRef)===null||d===void 0||d.error(a,...c)}static log(a,...c){var d;(d=this.instanceRef)===null||d===void 0||d.log(a,...c)}static warn(a,...c){var d;(d=this.instanceRef)===null||d===void 0||d.warn(a,...c)}static debug(a,...c){var d,tt;(tt=(d=this.instanceRef)===null||d===void 0?void 0:d.debug)===null||tt===void 0||tt.call(d,a,...c)}static verbose(a,...c){var d,tt;(tt=(d=this.instanceRef)===null||d===void 0?void 0:d.verbose)===null||tt===void 0||tt.call(d,a,...c)}static fatal(a,...c){var d,tt;(tt=(d=this.instanceRef)===null||d===void 0?void 0:d.fatal)===null||tt===void 0||tt.call(d,a,...c)}};logger$2.Logger=Logger$2;_a$1=Logger$2;Logger$2.instanceRef=DEFAULT_LOGGER;Logger$2.overrideLogger=o=>{_a$1.instanceRef=o};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Logger=void 0;var a=logger$2;Object.defineProperty(o,"Logger",{enumerable:!0,get:function(){return a.Logger}})})(logger$3);Object.defineProperty(errors$5,"__esModule",{value:!0});errors$5.logWarning=void 0;const logger_1$1=logger$3;function logWarning(...o){const[a,...c]=o;logger_1$1.Logger.warn(a,...c)}errors$5.logWarning=logWarning;var rpc_errors$1={},lib$8={},assignable={};Object.defineProperty(assignable,"__esModule",{value:!0});assignable.Assignable=void 0;class Assignable{constructor(a){Object.keys(a).map(c=>{this[c]=a[c]})}}assignable.Assignable=Assignable;var errors$4={};Object.defineProperty(errors$4,"__esModule",{value:!0});errors$4.ErrorContext=errors$4.TypedError=errors$4.ArgumentTypeError=errors$4.PositionalArgsError=void 0;class PositionalArgsError extends Error{constructor(){super("Contract method calls expect named arguments wrapped in object, e.g. { argName1: argValue1, argName2: argValue2 }")}}errors$4.PositionalArgsError=PositionalArgsError;class ArgumentTypeError extends Error{constructor(a,c,d){super(`Expected ${c} for '${a}' argument, but got '${JSON.stringify(d)}'`)}}errors$4.ArgumentTypeError=ArgumentTypeError;class TypedError extends Error{constructor(a,c,d){super(a),this.type=c||"UntypedError",this.context=d}}errors$4.TypedError=TypedError;class ErrorContext{constructor(a){this.transactionHash=a}}errors$4.ErrorContext=ErrorContext;var provider$3={},light_client={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.IdType=void 0,function(a){a.Transaction="transaction",a.Receipt="receipt"}(o.IdType||(o.IdType={}))})(light_client);var response$1={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.FinalExecutionStatusBasic=o.ExecutionStatusBasic=void 0,function(a){a.Unknown="Unknown",a.Pending="Pending",a.Failure="Failure"}(o.ExecutionStatusBasic||(o.ExecutionStatusBasic={})),function(a){a.NotStarted="NotStarted",a.Started="Started",a.Failure="Failure"}(o.FinalExecutionStatusBasic||(o.FinalExecutionStatusBasic={}))})(response$1);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.FinalExecutionStatusBasic=o.ExecutionStatusBasic=o.IdType=void 0;var a=light_client;Object.defineProperty(o,"IdType",{enumerable:!0,get:function(){return a.IdType}});var c=response$1;Object.defineProperty(o,"ExecutionStatusBasic",{enumerable:!0,get:function(){return c.ExecutionStatusBasic}}),Object.defineProperty(o,"FinalExecutionStatusBasic",{enumerable:!0,get:function(){return c.FinalExecutionStatusBasic}})})(provider$3);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(d,tt,nt,$a){$a===void 0&&($a=nt);var Ws=Object.getOwnPropertyDescriptor(tt,nt);(!Ws||("get"in Ws?!tt.__esModule:Ws.writable||Ws.configurable))&&(Ws={enumerable:!0,get:function(){return tt[nt]}}),Object.defineProperty(d,$a,Ws)}:function(d,tt,nt,$a){$a===void 0&&($a=nt),d[$a]=tt[nt]}),c=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(d,tt){for(var nt in d)nt!=="default"&&!Object.prototype.hasOwnProperty.call(tt,nt)&&a(tt,d,nt)};Object.defineProperty(o,"__esModule",{value:!0}),c(assignable,o),c(errors$4,o),c(provider$3,o)})(lib$8);var mustache={exports:{}};(function(o,a){(function(c,d){o.exports=d()})(commonjsGlobal$4,function(){/*! * mustache.js - Logic-less {{mustache}} templates with JavaScript * http://github.com/janl/mustache.js - */var c=Object.prototype.toString,d=Array.isArray||function(t1){return c.call(t1)==="[object Array]"};function tt(r1){return typeof r1=="function"}function nt(r1){return d(r1)?"array":typeof r1}function $a(r1){return r1.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Ys(r1,t1){return r1!=null&&typeof r1=="object"&&t1 in r1}function gu(r1,t1){return r1!=null&&typeof r1!="object"&&r1.hasOwnProperty&&r1.hasOwnProperty(t1)}var xu=RegExp.prototype.test;function $u(r1,t1){return xu.call(r1,t1)}var Iu=/\S/;function Xu(r1){return!$u(Iu,r1)}var i0={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};function p0(r1){return String(r1).replace(/[&<>"'`=\/]/g,function(D0){return i0[D0]})}var w0=/\s*/,A0=/\s+/,$0=/\s*=/,O0=/\s*\}/,L0=/#|\^|\/|>|\{|&|=|!/;function q0(r1,t1){if(!r1)return[];var D0=!1,Z0=[],f1=[],w1=[],m1=!1,c1=!1,G0="",o1=0;function d1(){if(m1&&!c1)for(;w1.length;)delete f1[w1.pop()];else w1=[];m1=!1,c1=!1}var R1,O1,Q1;function rv(Hy){if(typeof Hy=="string"&&(Hy=Hy.split(A0,2)),!d(Hy)||Hy.length!==2)throw new Error("Invalid tags: "+Hy);R1=new RegExp($a(Hy[0])+"\\s*"),O1=new RegExp("\\s*"+$a(Hy[1])),Q1=new RegExp("\\s*"+$a("}"+Hy[1]))}rv(t1||lv.tags);for(var D1=new g1(r1),ev,Mv,Zv,fv,cv,ly;!D1.eos();){if(ev=D1.pos,Zv=D1.scanUntil(R1),Zv)for(var Cy=0,Ly=Zv.length;Cy"?cv=[Mv,Zv,ev,D1.pos,G0,o1,D0]:cv=[Mv,Zv,ev,D1.pos],o1++,f1.push(cv),Mv==="#"||Mv==="^")Z0.push(cv);else if(Mv==="/"){if(ly=Z0.pop(),!ly)throw new Error('Unopened section "'+Zv+'" at '+ev);if(ly[1]!==Zv)throw new Error('Unclosed section "'+ly[1]+'" at '+ev)}else Mv==="name"||Mv==="{"||Mv==="&"?c1=!0:Mv==="="&&rv(Zv)}if(d1(),ly=Z0.pop(),ly)throw new Error('Unclosed section "'+ly[1]+'" at '+D1.pos);return u1(F0(f1))}function F0(r1){for(var t1=[],D0,Z0,f1=0,w1=r1.length;f10?Z0[Z0.length-1][4]:t1;break;default:D0.push(f1)}return t1}function g1(r1){this.string=r1,this.tail=r1,this.pos=0}g1.prototype.eos=function(){return this.tail===""},g1.prototype.scan=function(t1){var D0=this.tail.match(t1);if(!D0||D0.index!==0)return"";var Z0=D0[0];return this.tail=this.tail.substring(Z0.length),this.pos+=Z0.length,Z0},g1.prototype.scanUntil=function(t1){var D0=this.tail.search(t1),Z0;switch(D0){case-1:Z0=this.tail,this.tail="";break;case 0:Z0="";break;default:Z0=this.tail.substring(0,D0),this.tail=this.tail.substring(D0)}return this.pos+=Z0.length,Z0};function E1(r1,t1){this.view=r1,this.cache={".":this.view},this.parent=t1}E1.prototype.push=function(t1){return new E1(t1,this)},E1.prototype.lookup=function(t1){var D0=this.cache,Z0;if(D0.hasOwnProperty(t1))Z0=D0[t1];else{for(var f1=this,w1,m1,c1,G0=!1;f1;){if(t1.indexOf(".")>0)for(w1=f1.view,m1=t1.split("."),c1=0;w1!=null&&c1"?o1=this.renderPartial(c1,D0,Z0,w1):G0==="&"?o1=this.unescapedValue(c1,D0):G0==="name"?o1=this.escapedValue(c1,D0):G0==="text"&&(o1=this.rawValue(c1)),o1!==void 0&&(m1+=o1);return m1},B1.prototype.renderSection=function(t1,D0,Z0,f1){var w1=this,m1="",c1=D0.lookup(t1[1]);function G0(R1){return w1.render(R1,D0,Z0)}if(c1){if(d(c1))for(var o1=0,d1=c1.length;o1":">",'"':""","'":"'","/":"/","`":"`","=":"="};function p0(r1){return String(r1).replace(/[&<>"'`=\/]/g,function(D0){return r0[D0]})}var y0=/\s*/,A0=/\s+/,$0=/\s*=/,O0=/\s*\}/,L0=/#|\^|\/|>|\{|&|=|!/;function V0(r1,t1){if(!r1)return[];var D0=!1,Z0=[],f1=[],w1=[],m1=!1,c1=!1,G0="",o1=0;function d1(){if(m1&&!c1)for(;w1.length;)delete f1[w1.pop()];else w1=[];m1=!1,c1=!1}var R1,O1,Q1;function rv(Hy){if(typeof Hy=="string"&&(Hy=Hy.split(A0,2)),!d(Hy)||Hy.length!==2)throw new Error("Invalid tags: "+Hy);R1=new RegExp($a(Hy[0])+"\\s*"),O1=new RegExp("\\s*"+$a(Hy[1])),Q1=new RegExp("\\s*"+$a("}"+Hy[1]))}rv(t1||lv.tags);for(var D1=new g1(r1),ev,Mv,Zv,fv,cv,ly;!D1.eos();){if(ev=D1.pos,Zv=D1.scanUntil(R1),Zv)for(var Cy=0,Ly=Zv.length;Cy"?cv=[Mv,Zv,ev,D1.pos,G0,o1,D0]:cv=[Mv,Zv,ev,D1.pos],o1++,f1.push(cv),Mv==="#"||Mv==="^")Z0.push(cv);else if(Mv==="/"){if(ly=Z0.pop(),!ly)throw new Error('Unopened section "'+Zv+'" at '+ev);if(ly[1]!==Zv)throw new Error('Unclosed section "'+ly[1]+'" at '+ev)}else Mv==="name"||Mv==="{"||Mv==="&"?c1=!0:Mv==="="&&rv(Zv)}if(d1(),ly=Z0.pop(),ly)throw new Error('Unclosed section "'+ly[1]+'" at '+D1.pos);return u1(F0(f1))}function F0(r1){for(var t1=[],D0,Z0,f1=0,w1=r1.length;f10?Z0[Z0.length-1][4]:t1;break;default:D0.push(f1)}return t1}function g1(r1){this.string=r1,this.tail=r1,this.pos=0}g1.prototype.eos=function(){return this.tail===""},g1.prototype.scan=function(t1){var D0=this.tail.match(t1);if(!D0||D0.index!==0)return"";var Z0=D0[0];return this.tail=this.tail.substring(Z0.length),this.pos+=Z0.length,Z0},g1.prototype.scanUntil=function(t1){var D0=this.tail.search(t1),Z0;switch(D0){case-1:Z0=this.tail,this.tail="";break;case 0:Z0="";break;default:Z0=this.tail.substring(0,D0),this.tail=this.tail.substring(D0)}return this.pos+=Z0.length,Z0};function E1(r1,t1){this.view=r1,this.cache={".":this.view},this.parent=t1}E1.prototype.push=function(t1){return new E1(t1,this)},E1.prototype.lookup=function(t1){var D0=this.cache,Z0;if(D0.hasOwnProperty(t1))Z0=D0[t1];else{for(var f1=this,w1,m1,c1,G0=!1;f1;){if(t1.indexOf(".")>0)for(w1=f1.view,m1=t1.split("."),c1=0;w1!=null&&c1"?o1=this.renderPartial(c1,D0,Z0,w1):G0==="&"?o1=this.unescapedValue(c1,D0):G0==="name"?o1=this.escapedValue(c1,D0):G0==="text"&&(o1=this.rawValue(c1)),o1!==void 0&&(m1+=o1);return m1},B1.prototype.renderSection=function(t1,D0,Z0,f1){var w1=this,m1="",c1=D0.lookup(t1[1]);function G0(R1){return w1.render(R1,D0,Z0)}if(c1){if(d(c1))for(var o1=0,d1=c1.length;o10||!Z0)&&(w1[m1]=f1+w1[m1]);return w1.join(` -`)},B1.prototype.renderPartial=function(t1,D0,Z0,f1){if(Z0){var w1=tt(Z0)?Z0(t1[1]):Z0[t1[1]];if(w1!=null){var m1=t1[6],c1=t1[5],G0=t1[4],o1=w1;return c1==0&&G0&&(o1=this.indentPartial(w1,G0,m1)),this.renderTokens(this.parse(o1,f1),D0,Z0,o1)}}},B1.prototype.unescapedValue=function(t1,D0){var Z0=D0.lookup(t1[1]);if(Z0!=null)return Z0},B1.prototype.escapedValue=function(t1,D0){var Z0=D0.lookup(t1[1]);if(Z0!=null)return lv.escape(Z0)},B1.prototype.rawValue=function(t1){return t1[1]};var lv={name:"mustache.js",version:"4.0.0",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,Scanner:void 0,Context:void 0,Writer:void 0,set templateCache(r1){j1.templateCache=r1},get templateCache(){return j1.templateCache}},j1=new B1;return lv.clearCache=function(){return j1.clearCache()},lv.parse=function(t1,D0){return j1.parse(t1,D0)},lv.render=function(t1,D0,Z0,f1){if(typeof t1!="string")throw new TypeError('Invalid template! Template should be a "string" but "'+nt(t1)+'" was given as the first argument for mustache#render(template, view, partials)');return j1.render(t1,D0,Z0,f1)},lv.escape=p0,lv.Scanner=g1,lv.Context=E1,lv.Writer=B1,lv})})(mustache);var mustacheExports=mustache.exports,format$6={},safeBuffer$2={exports:{}};/*! safe-buffer. MIT License. Feross Aboukhadijeh */(function(o,a){var c=require$$1$4,d=c.Buffer;function tt($a,Ys){for(var gu in $a)Ys[gu]=$a[gu]}d.from&&d.alloc&&d.allocUnsafe&&d.allocUnsafeSlow?o.exports=c:(tt(c,a),a.Buffer=nt);function nt($a,Ys,gu){return d($a,Ys,gu)}nt.prototype=Object.create(d.prototype),tt(d,nt),nt.from=function($a,Ys,gu){if(typeof $a=="number")throw new TypeError("Argument must not be a number");return d($a,Ys,gu)},nt.alloc=function($a,Ys,gu){if(typeof $a!="number")throw new TypeError("Argument must be a number");var xu=d($a);return Ys!==void 0?typeof gu=="string"?xu.fill(Ys,gu):xu.fill(Ys):xu.fill(0),xu},nt.allocUnsafe=function($a){if(typeof $a!="number")throw new TypeError("Argument must be a number");return d($a)},nt.allocUnsafeSlow=function($a){if(typeof $a!="number")throw new TypeError("Argument must be a number");return c.SlowBuffer($a)}})(safeBuffer$2,safeBuffer$2.exports);var safeBufferExports$1=safeBuffer$2.exports,Buffer$B=safeBufferExports$1.Buffer,baseX=function(a){for(var c={},d=a.length,tt=a.charAt(0),nt=0;nt0;)Iu.push(p0%d),p0=p0/d|0}for(var w0="",A0=0;$u[A0]===0&&A0<$u.length-1;++A0)w0+=a[0];for(var $0=Iu.length-1;$0>=0;--$0)w0+=a[Iu[$0]];return w0}function gu($u){if($u.length===0)return Buffer$B.allocUnsafe(0);for(var Iu=[0],Xu=0;Xu<$u.length;Xu++){var i0=c[$u[Xu]];if(i0===void 0)return;for(var p0=0,w0=i0;p0>=8;for(;w0>0;)Iu.push(w0&255),w0>>=8}for(var A0=0;$u[A0]===tt&&A0<$u.length-1;++A0)Iu.push(0);return Buffer$B.from(Iu.reverse())}function xu($u){var Iu=gu($u);if(Iu)return Iu;throw new Error("Non-base"+d+" character")}return{encode:Ys,decodeUnsafe:gu,decode:xu}},basex$1=baseX,ALPHABET$1="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",bs58$1=basex$1(ALPHABET$1);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(p0){return p0&&p0.__esModule?p0:{default:p0}};Object.defineProperty(o,"__esModule",{value:!0}),o.baseDecode=o.baseEncode=o.parseNearAmount=o.formatNearAmount=o.NEAR_NOMINATION=o.NEAR_NOMINATION_EXP=void 0;const c=a(bnExports$1),d=a(bs58$1);o.NEAR_NOMINATION_EXP=24,o.NEAR_NOMINATION=new c.default("10",10).pow(new c.default(o.NEAR_NOMINATION_EXP,10));const tt=[],nt=new c.default(10);for(let p0=0,w0=new c.default(5);p00&&A0.iadd(tt[L0])}p0=A0.toString();const $0=p0.substring(0,p0.length-o.NEAR_NOMINATION_EXP)||"0",O0=p0.substring(p0.length-o.NEAR_NOMINATION_EXP).padStart(o.NEAR_NOMINATION_EXP,"0").substring(0,w0);return xu(`${Iu($0)}.${O0}`)}o.formatNearAmount=$a;function Ys(p0){if(!p0)return null;p0=gu(p0);const w0=p0.split("."),A0=w0[0],$0=w0[1]||"";if(w0.length>2||$0.length>o.NEAR_NOMINATION_EXP)throw new Error(`Cannot parse '${p0}' as NEAR amount`);return $u(A0+$0.padEnd(o.NEAR_NOMINATION_EXP,"0"))}o.parseNearAmount=Ys;function gu(p0){return p0.replace(/,/g,"").trim()}function xu(p0){return p0.replace(/\.?0*$/,"")}function $u(p0){return p0=p0.replace(/^0+/,""),p0===""?"0":p0}function Iu(p0){const w0=/(-?\d+)(\d{3})/;for(;w0.test(p0);)p0=p0.replace(w0,"$1,$2");return p0}function Xu(p0){if(typeof p0=="string"){const w0=[];for(let A0=0;A0(o,a)=>(0,format_1$2.formatNearAmount)(a(o))};class ServerError extends types_1$c.TypedError{}rpc_errors$1.ServerError=ServerError;class ServerTransactionError extends ServerError{}function parseRpcError(o){const a={},c=walkSubtype(o,rpc_error_schema_json_1.default.schema,a,""),d=new ServerError(formatError(c,a),c);return Object.assign(d,a),d}rpc_errors$1.parseRpcError=parseRpcError;function parseResultError(o){const a=parseRpcError(o.status.Failure),c=new ServerTransactionError;return Object.assign(c,a),c.type=a.type,c.message=a.message,c.transaction_outcome=o.transaction_outcome,c}rpc_errors$1.parseResultError=parseResultError;function formatError(o,a){return typeof error_messages_json_1.default[o]=="string"?mustache_1.default.render(error_messages_json_1.default[o],Object.assign(Object.assign({},a),mustacheHelpers)):JSON.stringify(a)}rpc_errors$1.formatError=formatError;function walkSubtype(o,a,c,d){let tt,nt,$a;for(const Ys in a){if(isString$3(o[Ys]))return o[Ys];if(isObject$h(o[Ys]))tt=o[Ys],nt=a[Ys],$a=Ys;else if(isObject$h(o.kind)&&isObject$h(o.kind[Ys]))tt=o.kind[Ys],nt=a[Ys],$a=Ys;else continue}if(tt&&nt){for(const Ys of Object.keys(nt.props))c[Ys]=tt[Ys];return walkSubtype(tt,a,c,$a)}else return c.kind=o,d}function getErrorTypeFromErrorMessage(o,a){switch(!0){case/^account .*? does not exist while viewing$/.test(o):return"AccountDoesNotExist";case/^Account .*? doesn't exist$/.test(o):return"AccountDoesNotExist";case/^access key .*? does not exist while viewing$/.test(o):return"AccessKeyDoesNotExist";case/wasm execution failed with error: FunctionCallError\(CompilationError\(CodeDoesNotExist/.test(o):return"CodeDoesNotExist";case/wasm execution failed with error: CompilationError\(CodeDoesNotExist/.test(o):return"CodeDoesNotExist";case/wasm execution failed with error: FunctionCallError\(MethodResolveError\(MethodNotFound/.test(o):return"MethodNotFound";case/wasm execution failed with error: MethodResolveError\(MethodNotFound/.test(o):return"MethodNotFound";case/Transaction nonce \d+ must be larger than nonce of the used access key \d+/.test(o):return"InvalidNonce";default:return a}}rpc_errors$1.getErrorTypeFromErrorMessage=getErrorTypeFromErrorMessage;function isObject$h(o){return Object.prototype.toString.call(o)==="[object Object]"}function isString$3(o){return Object.prototype.toString.call(o)==="[object String]"}(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.parseRpcError=o.parseResultError=o.getErrorTypeFromErrorMessage=o.formatError=o.ServerError=o.logWarning=void 0;var a=errors$5;Object.defineProperty(o,"logWarning",{enumerable:!0,get:function(){return a.logWarning}});var c=rpc_errors$1;Object.defineProperty(o,"ServerError",{enumerable:!0,get:function(){return c.ServerError}}),Object.defineProperty(o,"formatError",{enumerable:!0,get:function(){return c.formatError}}),Object.defineProperty(o,"getErrorTypeFromErrorMessage",{enumerable:!0,get:function(){return c.getErrorTypeFromErrorMessage}}),Object.defineProperty(o,"parseResultError",{enumerable:!0,get:function(){return c.parseResultError}}),Object.defineProperty(o,"parseRpcError",{enumerable:!0,get:function(){return c.parseRpcError}})})(errors$6);var logging={};Object.defineProperty(logging,"__esModule",{value:!0});logging.printTxOutcomeLogs=logging.printTxOutcomeLogsAndFailures=void 0;const errors_1$4=errors$6,logger_1=logger$3;function printTxOutcomeLogsAndFailures({contractId:o,outcome:a}){const c=[a.transaction_outcome,...a.receipts_outcome].reduce((d,tt)=>{const nt=typeof tt.outcome.status=="object"&&typeof tt.outcome.status.Failure=="object";return tt.outcome.logs.length||nt?d.concat({receiptIds:tt.outcome.receipt_ids,logs:tt.outcome.logs,failure:typeof tt.outcome.status=="object"&&tt.outcome.status.Failure!==void 0?(0,errors_1$4.parseRpcError)(tt.outcome.status.Failure):null}):d},[]);for(const d of c)logger_1.Logger.log(`Receipt${d.receiptIds.length>1?"s":""}: ${d.receiptIds.join(", ")}`),printTxOutcomeLogs({contractId:o,logs:d.logs,prefix:" "}),d.failure&&logger_1.Logger.warn(` Failure [${o}]: ${d.failure}`)}logging.printTxOutcomeLogsAndFailures=printTxOutcomeLogsAndFailures;function printTxOutcomeLogs({contractId:o,logs:a,prefix:c=""}){for(const d of a)logger_1.Logger.log(`${c}Log [${o}]: ${d}`)}logging.printTxOutcomeLogs=printTxOutcomeLogs;var provider$2={};Object.defineProperty(provider$2,"__esModule",{value:!0});provider$2.getTransactionLastResult=void 0;function getTransactionLastResult(o){if(typeof o.status=="object"&&typeof o.status.SuccessValue=="string"){const a=Buffer$C.from(o.status.SuccessValue,"base64").toString();try{return JSON.parse(a)}catch{return a}}return null}provider$2.getTransactionLastResult=getTransactionLastResult;var validators$3={};/*! +`)},B1.prototype.renderPartial=function(t1,D0,Z0,f1){if(Z0){var w1=tt(Z0)?Z0(t1[1]):Z0[t1[1]];if(w1!=null){var m1=t1[6],c1=t1[5],G0=t1[4],o1=w1;return c1==0&&G0&&(o1=this.indentPartial(w1,G0,m1)),this.renderTokens(this.parse(o1,f1),D0,Z0,o1)}}},B1.prototype.unescapedValue=function(t1,D0){var Z0=D0.lookup(t1[1]);if(Z0!=null)return Z0},B1.prototype.escapedValue=function(t1,D0){var Z0=D0.lookup(t1[1]);if(Z0!=null)return lv.escape(Z0)},B1.prototype.rawValue=function(t1){return t1[1]};var lv={name:"mustache.js",version:"4.0.0",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,Scanner:void 0,Context:void 0,Writer:void 0,set templateCache(r1){j1.templateCache=r1},get templateCache(){return j1.templateCache}},j1=new B1;return lv.clearCache=function(){return j1.clearCache()},lv.parse=function(t1,D0){return j1.parse(t1,D0)},lv.render=function(t1,D0,Z0,f1){if(typeof t1!="string")throw new TypeError('Invalid template! Template should be a "string" but "'+nt(t1)+'" was given as the first argument for mustache#render(template, view, partials)');return j1.render(t1,D0,Z0,f1)},lv.escape=p0,lv.Scanner=g1,lv.Context=E1,lv.Writer=B1,lv})})(mustache);var mustacheExports=mustache.exports,format$6={},safeBuffer$2={exports:{}};/*! safe-buffer. MIT License. Feross Aboukhadijeh */(function(o,a){var c=require$$1$4,d=c.Buffer;function tt($a,Ws){for(var gu in $a)Ws[gu]=$a[gu]}d.from&&d.alloc&&d.allocUnsafe&&d.allocUnsafeSlow?o.exports=c:(tt(c,a),a.Buffer=nt);function nt($a,Ws,gu){return d($a,Ws,gu)}nt.prototype=Object.create(d.prototype),tt(d,nt),nt.from=function($a,Ws,gu){if(typeof $a=="number")throw new TypeError("Argument must not be a number");return d($a,Ws,gu)},nt.alloc=function($a,Ws,gu){if(typeof $a!="number")throw new TypeError("Argument must be a number");var Su=d($a);return Ws!==void 0?typeof gu=="string"?Su.fill(Ws,gu):Su.fill(Ws):Su.fill(0),Su},nt.allocUnsafe=function($a){if(typeof $a!="number")throw new TypeError("Argument must be a number");return d($a)},nt.allocUnsafeSlow=function($a){if(typeof $a!="number")throw new TypeError("Argument must be a number");return c.SlowBuffer($a)}})(safeBuffer$2,safeBuffer$2.exports);var safeBufferExports$1=safeBuffer$2.exports,Buffer$B=safeBufferExports$1.Buffer,baseX=function(a){for(var c={},d=a.length,tt=a.charAt(0),nt=0;nt0;)Iu.push(p0%d),p0=p0/d|0}for(var y0="",A0=0;$u[A0]===0&&A0<$u.length-1;++A0)y0+=a[0];for(var $0=Iu.length-1;$0>=0;--$0)y0+=a[Iu[$0]];return y0}function gu($u){if($u.length===0)return Buffer$B.allocUnsafe(0);for(var Iu=[0],Xu=0;Xu<$u.length;Xu++){var r0=c[$u[Xu]];if(r0===void 0)return;for(var p0=0,y0=r0;p0>=8;for(;y0>0;)Iu.push(y0&255),y0>>=8}for(var A0=0;$u[A0]===tt&&A0<$u.length-1;++A0)Iu.push(0);return Buffer$B.from(Iu.reverse())}function Su($u){var Iu=gu($u);if(Iu)return Iu;throw new Error("Non-base"+d+" character")}return{encode:Ws,decodeUnsafe:gu,decode:Su}},basex$1=baseX,ALPHABET$1="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",bs58$1=basex$1(ALPHABET$1);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(p0){return p0&&p0.__esModule?p0:{default:p0}};Object.defineProperty(o,"__esModule",{value:!0}),o.baseDecode=o.baseEncode=o.parseNearAmount=o.formatNearAmount=o.NEAR_NOMINATION=o.NEAR_NOMINATION_EXP=void 0;const c=a(bnExports$1),d=a(bs58$1);o.NEAR_NOMINATION_EXP=24,o.NEAR_NOMINATION=new c.default("10",10).pow(new c.default(o.NEAR_NOMINATION_EXP,10));const tt=[],nt=new c.default(10);for(let p0=0,y0=new c.default(5);p00&&A0.iadd(tt[L0])}p0=A0.toString();const $0=p0.substring(0,p0.length-o.NEAR_NOMINATION_EXP)||"0",O0=p0.substring(p0.length-o.NEAR_NOMINATION_EXP).padStart(o.NEAR_NOMINATION_EXP,"0").substring(0,y0);return Su(`${Iu($0)}.${O0}`)}o.formatNearAmount=$a;function Ws(p0){if(!p0)return null;p0=gu(p0);const y0=p0.split("."),A0=y0[0],$0=y0[1]||"";if(y0.length>2||$0.length>o.NEAR_NOMINATION_EXP)throw new Error(`Cannot parse '${p0}' as NEAR amount`);return $u(A0+$0.padEnd(o.NEAR_NOMINATION_EXP,"0"))}o.parseNearAmount=Ws;function gu(p0){return p0.replace(/,/g,"").trim()}function Su(p0){return p0.replace(/\.?0*$/,"")}function $u(p0){return p0=p0.replace(/^0+/,""),p0===""?"0":p0}function Iu(p0){const y0=/(-?\d+)(\d{3})/;for(;y0.test(p0);)p0=p0.replace(y0,"$1,$2");return p0}function Xu(p0){if(typeof p0=="string"){const y0=[];for(let A0=0;A0(o,a)=>(0,format_1$2.formatNearAmount)(a(o))};class ServerError extends types_1$c.TypedError{}rpc_errors$1.ServerError=ServerError;class ServerTransactionError extends ServerError{}function parseRpcError(o){const a={},c=walkSubtype(o,rpc_error_schema_json_1.default.schema,a,""),d=new ServerError(formatError(c,a),c);return Object.assign(d,a),d}rpc_errors$1.parseRpcError=parseRpcError;function parseResultError(o){const a=parseRpcError(o.status.Failure),c=new ServerTransactionError;return Object.assign(c,a),c.type=a.type,c.message=a.message,c.transaction_outcome=o.transaction_outcome,c}rpc_errors$1.parseResultError=parseResultError;function formatError(o,a){return typeof error_messages_json_1.default[o]=="string"?mustache_1.default.render(error_messages_json_1.default[o],Object.assign(Object.assign({},a),mustacheHelpers)):JSON.stringify(a)}rpc_errors$1.formatError=formatError;function walkSubtype(o,a,c,d){let tt,nt,$a;for(const Ws in a){if(isString$3(o[Ws]))return o[Ws];if(isObject$h(o[Ws]))tt=o[Ws],nt=a[Ws],$a=Ws;else if(isObject$h(o.kind)&&isObject$h(o.kind[Ws]))tt=o.kind[Ws],nt=a[Ws],$a=Ws;else continue}if(tt&&nt){for(const Ws of Object.keys(nt.props))c[Ws]=tt[Ws];return walkSubtype(tt,a,c,$a)}else return c.kind=o,d}function getErrorTypeFromErrorMessage(o,a){switch(!0){case/^account .*? does not exist while viewing$/.test(o):return"AccountDoesNotExist";case/^Account .*? doesn't exist$/.test(o):return"AccountDoesNotExist";case/^access key .*? does not exist while viewing$/.test(o):return"AccessKeyDoesNotExist";case/wasm execution failed with error: FunctionCallError\(CompilationError\(CodeDoesNotExist/.test(o):return"CodeDoesNotExist";case/wasm execution failed with error: CompilationError\(CodeDoesNotExist/.test(o):return"CodeDoesNotExist";case/wasm execution failed with error: FunctionCallError\(MethodResolveError\(MethodNotFound/.test(o):return"MethodNotFound";case/wasm execution failed with error: MethodResolveError\(MethodNotFound/.test(o):return"MethodNotFound";case/Transaction nonce \d+ must be larger than nonce of the used access key \d+/.test(o):return"InvalidNonce";default:return a}}rpc_errors$1.getErrorTypeFromErrorMessage=getErrorTypeFromErrorMessage;function isObject$h(o){return Object.prototype.toString.call(o)==="[object Object]"}function isString$3(o){return Object.prototype.toString.call(o)==="[object String]"}(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.parseRpcError=o.parseResultError=o.getErrorTypeFromErrorMessage=o.formatError=o.ServerError=o.logWarning=void 0;var a=errors$5;Object.defineProperty(o,"logWarning",{enumerable:!0,get:function(){return a.logWarning}});var c=rpc_errors$1;Object.defineProperty(o,"ServerError",{enumerable:!0,get:function(){return c.ServerError}}),Object.defineProperty(o,"formatError",{enumerable:!0,get:function(){return c.formatError}}),Object.defineProperty(o,"getErrorTypeFromErrorMessage",{enumerable:!0,get:function(){return c.getErrorTypeFromErrorMessage}}),Object.defineProperty(o,"parseResultError",{enumerable:!0,get:function(){return c.parseResultError}}),Object.defineProperty(o,"parseRpcError",{enumerable:!0,get:function(){return c.parseRpcError}})})(errors$6);var logging={};Object.defineProperty(logging,"__esModule",{value:!0});logging.printTxOutcomeLogs=logging.printTxOutcomeLogsAndFailures=void 0;const errors_1$4=errors$6,logger_1=logger$3;function printTxOutcomeLogsAndFailures({contractId:o,outcome:a}){const c=[a.transaction_outcome,...a.receipts_outcome].reduce((d,tt)=>{const nt=typeof tt.outcome.status=="object"&&typeof tt.outcome.status.Failure=="object";return tt.outcome.logs.length||nt?d.concat({receiptIds:tt.outcome.receipt_ids,logs:tt.outcome.logs,failure:typeof tt.outcome.status=="object"&&tt.outcome.status.Failure!==void 0?(0,errors_1$4.parseRpcError)(tt.outcome.status.Failure):null}):d},[]);for(const d of c)logger_1.Logger.log(`Receipt${d.receiptIds.length>1?"s":""}: ${d.receiptIds.join(", ")}`),printTxOutcomeLogs({contractId:o,logs:d.logs,prefix:" "}),d.failure&&logger_1.Logger.warn(` Failure [${o}]: ${d.failure}`)}logging.printTxOutcomeLogsAndFailures=printTxOutcomeLogsAndFailures;function printTxOutcomeLogs({contractId:o,logs:a,prefix:c=""}){for(const d of a)logger_1.Logger.log(`${c}Log [${o}]: ${d}`)}logging.printTxOutcomeLogs=printTxOutcomeLogs;var provider$2={};Object.defineProperty(provider$2,"__esModule",{value:!0});provider$2.getTransactionLastResult=void 0;function getTransactionLastResult(o){if(typeof o.status=="object"&&typeof o.status.SuccessValue=="string"){const a=Buffer$C.from(o.status.SuccessValue,"base64").toString();try{return JSON.parse(a)}catch{return a}}return null}provider$2.getTransactionLastResult=getTransactionLastResult;var validators$3={};/*! * depd * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed - */var browser$g=depd$1;function depd$1(o){if(!o)throw new TypeError("argument namespace is required");function a(c){}return a._file=void 0,a._ignored=!0,a._namespace=o,a._traced=!1,a._warned=Object.create(null),a.function=wrapfunction$1,a.property=wrapproperty$1,a}function wrapfunction$1(o,a){if(typeof o!="function")throw new TypeError("argument fn must be a function");return o}function wrapproperty$1(o,a,c){if(!o||typeof o!="object"&&typeof o!="function")throw new TypeError("argument obj must be object");var d=Object.getOwnPropertyDescriptor(o,a);if(!d)throw new TypeError("must call property on owner object");if(!d.configurable)throw new TypeError("property must be configurable")}var __importDefault$b=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(validators$3,"__esModule",{value:!0});validators$3.diffEpochValidators=validators$3.findSeatPrice=void 0;const bn_js_1$9=__importDefault$b(bnExports$1),depd_1$1=__importDefault$b(browser$g);function findSeatPrice(o,a,c,d){return d&&d<49?findSeatPriceForProtocolBefore49(o,a):(c||((0,depd_1$1.default)("findSeatPrice(validators, maxNumberOfSeats)")("`use `findSeatPrice(validators, maxNumberOfSeats, minimumStakeRatio)` instead"),c=[1,6250]),findSeatPriceForProtocolAfter49(o,a,c))}validators$3.findSeatPrice=findSeatPrice;function findSeatPriceForProtocolBefore49(o,a){const c=o.map(Ys=>new bn_js_1$9.default(Ys.stake,10)).sort((Ys,gu)=>Ys.cmp(gu)),d=new bn_js_1$9.default(a),tt=c.reduce((Ys,gu)=>Ys.add(gu));if(tt.lt(d))throw new Error("Stakes are below seats");let nt=new bn_js_1$9.default(1),$a=tt.add(new bn_js_1$9.default(1));for(;!nt.eq($a.sub(new bn_js_1$9.default(1)));){const Ys=nt.add($a).div(new bn_js_1$9.default(2));let gu=!1,xu=new bn_js_1$9.default(0);for(let $u=0;$unew bn_js_1$9.default(nt.stake,10)).sort((nt,$a)=>nt.cmp($a)),tt=d.reduce((nt,$a)=>nt.add($a));return o.lengthc.set(tt.account_id,tt));const d=new Set(a.map(tt=>tt.account_id));return{newValidators:a.filter(tt=>!c.has(tt.account_id)),removedValidators:o.filter(tt=>!d.has(tt.account_id)),changedValidators:a.filter(tt=>c.has(tt.account_id)&&c.get(tt.account_id).stake!=tt.stake).map(tt=>({current:c.get(tt.account_id),next:tt}))}}validators$3.diffEpochValidators=diffEpochValidators;(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(d,tt,nt,$a){$a===void 0&&($a=nt);var Ys=Object.getOwnPropertyDescriptor(tt,nt);(!Ys||("get"in Ys?!tt.__esModule:Ys.writable||Ys.configurable))&&(Ys={enumerable:!0,get:function(){return tt[nt]}}),Object.defineProperty(d,$a,Ys)}:function(d,tt,nt,$a){$a===void 0&&($a=nt),d[$a]=tt[nt]}),c=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(d,tt){for(var nt in d)nt!=="default"&&!Object.prototype.hasOwnProperty.call(tt,nt)&&a(tt,d,nt)};Object.defineProperty(o,"__esModule",{value:!0}),c(constants$5,o),c(errors$6,o),c(format$6,o),c(logging,o),c(provider$2,o),c(validators$3,o),c(logger$3,o)})(lib$9);var ed25519={},sha512$2={},_sha2$1={},_assert$1={};Object.defineProperty(_assert$1,"__esModule",{value:!0});_assert$1.output=_assert$1.exists=_assert$1.hash=_assert$1.bytes=_assert$1.bool=_assert$1.number=void 0;function number$2(o){if(!Number.isSafeInteger(o)||o<0)throw new Error(`Wrong positive integer: ${o}`)}_assert$1.number=number$2;function bool$1(o){if(typeof o!="boolean")throw new Error(`Expected boolean, not ${o}`)}_assert$1.bool=bool$1;function bytes$2(o,...a){if(!(o instanceof Uint8Array))throw new Error("Expected Uint8Array");if(a.length>0&&!a.includes(o.length))throw new Error(`Expected Uint8Array of length ${a}, not of length=${o.length}`)}_assert$1.bytes=bytes$2;function hash$6(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$2(o.outputLen),number$2(o.blockLen)}_assert$1.hash=hash$6;function exists$2(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}_assert$1.exists=exists$2;function output$2(o,a){bytes$2(o);const c=a.outputLen;if(o.lengthu1 instanceof Uint8Array,d=u1=>new Uint8Array(u1.buffer,u1.byteOffset,u1.byteLength);o.u8=d;const tt=u1=>new Uint32Array(u1.buffer,u1.byteOffset,Math.floor(u1.byteLength/4));o.u32=tt;const nt=u1=>new DataView(u1.buffer,u1.byteOffset,u1.byteLength);o.createView=nt;const $a=(u1,g1)=>u1<<32-g1|u1>>>g1;if(o.rotr=$a,o.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,!o.isLE)throw new Error("Non little-endian hardware is not supported");const Ys=Array.from({length:256},(u1,g1)=>g1.toString(16).padStart(2,"0"));function gu(u1){if(!c(u1))throw new Error("Uint8Array expected");let g1="";for(let E1=0;E1{};o.nextTick=$u;async function Iu(u1,g1,E1){let B1=Date.now();for(let lv=0;lv=0&&j1B1+lv.length,0));let E1=0;return u1.forEach(B1=>{if(!c(B1))throw new Error("Uint8Array expected");g1.set(B1,E1),E1+=B1.length}),g1}o.concatBytes=p0;class w0{clone(){return this._cloneInto()}}o.Hash=w0;const A0={}.toString;function $0(u1,g1){if(g1!==void 0&&A0.call(g1)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(u1,g1)}o.checkOpts=$0;function O0(u1){const g1=B1=>u1().update(i0(B1)).digest(),E1=u1();return g1.outputLen=E1.outputLen,g1.blockLen=E1.blockLen,g1.create=()=>u1(),g1}o.wrapConstructor=O0;function L0(u1){const g1=(B1,lv)=>u1(lv).update(i0(B1)).digest(),E1=u1({});return g1.outputLen=E1.outputLen,g1.blockLen=E1.blockLen,g1.create=B1=>u1(B1),g1}o.wrapConstructorWithOpts=L0;function q0(u1){const g1=(B1,lv)=>u1(lv).update(i0(B1)).digest(),E1=u1({});return g1.outputLen=E1.outputLen,g1.blockLen=E1.blockLen,g1.create=B1=>u1(B1),g1}o.wrapXOFConstructorWithOpts=q0;function F0(u1=32){if(a.crypto&&typeof a.crypto.getRandomValues=="function")return a.crypto.getRandomValues(new Uint8Array(u1));throw new Error("crypto.getRandomValues must be defined")}o.randomBytes=F0})(utils$y);Object.defineProperty(_sha2$1,"__esModule",{value:!0});_sha2$1.SHA2=void 0;const _assert_js_1$1=_assert$1,utils_js_1$8=utils$y;function setBigUint64$2(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ys=Number(c&nt),gu=d?4:0,xu=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+xu,Ys,d)}let SHA2$2=class extends utils_js_1$8.Hash{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=(0,utils_js_1$8.createView)(this.buffer)}update(a){(0,_assert_js_1$1.exists)(this);const{view:c,buffer:d,blockLen:tt}=this;a=(0,utils_js_1$8.toBytes)(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iu>_32n$1&U32_MASK64$1)}:{h:Number(o>>_32n$1&U32_MASK64$1)|0,l:Number(o&U32_MASK64$1)|0}}_u64.fromBig=fromBig$1;function split$7(o,a=!1){let c=new Uint32Array(o.length),d=new Uint32Array(o.length);for(let tt=0;ttBigInt(o>>>0)<<_32n$1|BigInt(a>>>0);_u64.toBig=toBig;const shrSH=(o,a,c)=>o>>>c;_u64.shrSH=shrSH;const shrSL=(o,a,c)=>o<<32-c|a>>>c;_u64.shrSL=shrSL;const rotrSH=(o,a,c)=>o>>>c|a<<32-c;_u64.rotrSH=rotrSH;const rotrSL=(o,a,c)=>o<<32-c|a>>>c;_u64.rotrSL=rotrSL;const rotrBH=(o,a,c)=>o<<64-c|a>>>c-32;_u64.rotrBH=rotrBH;const rotrBL=(o,a,c)=>o>>>c-32|a<<64-c;_u64.rotrBL=rotrBL;const rotr32H=(o,a)=>a;_u64.rotr32H=rotr32H;const rotr32L=(o,a)=>o;_u64.rotr32L=rotr32L;const rotlSH$1=(o,a,c)=>o<>>32-c;_u64.rotlSH=rotlSH$1;const rotlSL$1=(o,a,c)=>a<>>32-c;_u64.rotlSL=rotlSL$1;const rotlBH$1=(o,a,c)=>a<>>64-c;_u64.rotlBH=rotlBH$1;const rotlBL$1=(o,a,c)=>o<>>64-c;_u64.rotlBL=rotlBL$1;function add(o,a,c,d){const tt=(a>>>0)+(d>>>0);return{h:o+c+(tt/2**32|0)|0,l:tt|0}}_u64.add=add;const add3L=(o,a,c)=>(o>>>0)+(a>>>0)+(c>>>0);_u64.add3L=add3L;const add3H=(o,a,c,d)=>a+c+d+(o/2**32|0)|0;_u64.add3H=add3H;const add4L=(o,a,c,d)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0);_u64.add4L=add4L;const add4H=(o,a,c,d,tt)=>a+c+d+tt+(o/2**32|0)|0;_u64.add4H=add4H;const add5L=(o,a,c,d,tt)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0)+(tt>>>0);_u64.add5L=add5L;const add5H=(o,a,c,d,tt,nt)=>a+c+d+tt+nt+(o/2**32|0)|0;_u64.add5H=add5H;const u64={fromBig:fromBig$1,split:split$7,toBig,shrSH,shrSL,rotrSH,rotrSL,rotrBH,rotrBL,rotr32H,rotr32L,rotlSH:rotlSH$1,rotlSL:rotlSL$1,rotlBH:rotlBH$1,rotlBL:rotlBL$1,add,add3L,add3H,add4L,add4H,add5H,add5L};_u64.default=u64;Object.defineProperty(sha512$2,"__esModule",{value:!0});sha512$2.sha384=sha512$2.sha512_256=sha512$2.sha512_224=sha512$2.sha512=sha512$2.SHA512=void 0;const _sha2_js_1$1=_sha2$1,_u64_js_1=_u64,utils_js_1$7=utils$y,[SHA512_Kh,SHA512_Kl]=_u64_js_1.default.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(o=>BigInt(o))),SHA512_W_H=new Uint32Array(80),SHA512_W_L=new Uint32Array(80);let SHA512$3=class extends _sha2_js_1$1.SHA2{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:a,Al:c,Bh:d,Bl:tt,Ch:nt,Cl:$a,Dh:Ys,Dl:gu,Eh:xu,El:$u,Fh:Iu,Fl:Xu,Gh:i0,Gl:p0,Hh:w0,Hl:A0}=this;return[a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0]}set(a,c,d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0){this.Ah=a|0,this.Al=c|0,this.Bh=d|0,this.Bl=tt|0,this.Ch=nt|0,this.Cl=$a|0,this.Dh=Ys|0,this.Dl=gu|0,this.Eh=xu|0,this.El=$u|0,this.Fh=Iu|0,this.Fl=Xu|0,this.Gh=i0|0,this.Gl=p0|0,this.Hh=w0|0,this.Hl=A0|0}process(a,c){for(let L0=0;L0<16;L0++,c+=4)SHA512_W_H[L0]=a.getUint32(c),SHA512_W_L[L0]=a.getUint32(c+=4);for(let L0=16;L0<80;L0++){const q0=SHA512_W_H[L0-15]|0,F0=SHA512_W_L[L0-15]|0,u1=_u64_js_1.default.rotrSH(q0,F0,1)^_u64_js_1.default.rotrSH(q0,F0,8)^_u64_js_1.default.shrSH(q0,F0,7),g1=_u64_js_1.default.rotrSL(q0,F0,1)^_u64_js_1.default.rotrSL(q0,F0,8)^_u64_js_1.default.shrSL(q0,F0,7),E1=SHA512_W_H[L0-2]|0,B1=SHA512_W_L[L0-2]|0,lv=_u64_js_1.default.rotrSH(E1,B1,19)^_u64_js_1.default.rotrBH(E1,B1,61)^_u64_js_1.default.shrSH(E1,B1,6),j1=_u64_js_1.default.rotrSL(E1,B1,19)^_u64_js_1.default.rotrBL(E1,B1,61)^_u64_js_1.default.shrSL(E1,B1,6),r1=_u64_js_1.default.add4L(g1,j1,SHA512_W_L[L0-7],SHA512_W_L[L0-16]),t1=_u64_js_1.default.add4H(r1,u1,lv,SHA512_W_H[L0-7],SHA512_W_H[L0-16]);SHA512_W_H[L0]=t1|0,SHA512_W_L[L0]=r1|0}let{Ah:d,Al:tt,Bh:nt,Bl:$a,Ch:Ys,Cl:gu,Dh:xu,Dl:$u,Eh:Iu,El:Xu,Fh:i0,Fl:p0,Gh:w0,Gl:A0,Hh:$0,Hl:O0}=this;for(let L0=0;L0<80;L0++){const q0=_u64_js_1.default.rotrSH(Iu,Xu,14)^_u64_js_1.default.rotrSH(Iu,Xu,18)^_u64_js_1.default.rotrBH(Iu,Xu,41),F0=_u64_js_1.default.rotrSL(Iu,Xu,14)^_u64_js_1.default.rotrSL(Iu,Xu,18)^_u64_js_1.default.rotrBL(Iu,Xu,41),u1=Iu&i0^~Iu&w0,g1=Xu&p0^~Xu&A0,E1=_u64_js_1.default.add5L(O0,F0,g1,SHA512_Kl[L0],SHA512_W_L[L0]),B1=_u64_js_1.default.add5H(E1,$0,q0,u1,SHA512_Kh[L0],SHA512_W_H[L0]),lv=E1|0,j1=_u64_js_1.default.rotrSH(d,tt,28)^_u64_js_1.default.rotrBH(d,tt,34)^_u64_js_1.default.rotrBH(d,tt,39),r1=_u64_js_1.default.rotrSL(d,tt,28)^_u64_js_1.default.rotrBL(d,tt,34)^_u64_js_1.default.rotrBL(d,tt,39),t1=d&nt^d&Ys^nt&Ys,D0=tt&$a^tt&gu^$a&gu;$0=w0|0,O0=A0|0,w0=i0|0,A0=p0|0,i0=Iu|0,p0=Xu|0,{h:Iu,l:Xu}=_u64_js_1.default.add(xu|0,$u|0,B1|0,lv|0),xu=Ys|0,$u=gu|0,Ys=nt|0,gu=$a|0,nt=d|0,$a=tt|0;const Z0=_u64_js_1.default.add3L(lv,r1,D0);d=_u64_js_1.default.add3H(Z0,B1,j1,t1),tt=Z0|0}({h:d,l:tt}=_u64_js_1.default.add(this.Ah|0,this.Al|0,d|0,tt|0)),{h:nt,l:$a}=_u64_js_1.default.add(this.Bh|0,this.Bl|0,nt|0,$a|0),{h:Ys,l:gu}=_u64_js_1.default.add(this.Ch|0,this.Cl|0,Ys|0,gu|0),{h:xu,l:$u}=_u64_js_1.default.add(this.Dh|0,this.Dl|0,xu|0,$u|0),{h:Iu,l:Xu}=_u64_js_1.default.add(this.Eh|0,this.El|0,Iu|0,Xu|0),{h:i0,l:p0}=_u64_js_1.default.add(this.Fh|0,this.Fl|0,i0|0,p0|0),{h:w0,l:A0}=_u64_js_1.default.add(this.Gh|0,this.Gl|0,w0|0,A0|0),{h:$0,l:O0}=_u64_js_1.default.add(this.Hh|0,this.Hl|0,$0|0,O0|0),this.set(d,tt,nt,$a,Ys,gu,xu,$u,Iu,Xu,i0,p0,w0,A0,$0,O0)}roundClean(){SHA512_W_H.fill(0),SHA512_W_L.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};sha512$2.SHA512=SHA512$3;class SHA512_224 extends SHA512$3{constructor(){super(),this.Ah=-1942145080,this.Al=424955298,this.Bh=1944164710,this.Bl=-1982016298,this.Ch=502970286,this.Cl=855612546,this.Dh=1738396948,this.Dl=1479516111,this.Eh=258812777,this.El=2077511080,this.Fh=2011393907,this.Fl=79989058,this.Gh=1067287976,this.Gl=1780299464,this.Hh=286451373,this.Hl=-1848208735,this.outputLen=28}}class SHA512_256 extends SHA512$3{constructor(){super(),this.Ah=573645204,this.Al=-64227540,this.Bh=-1621794909,this.Bl=-934517566,this.Ch=596883563,this.Cl=1867755857,this.Dh=-1774684391,this.Dl=1497426621,this.Eh=-1775747358,this.El=-1467023389,this.Fh=-1101128155,this.Fl=1401305490,this.Gh=721525244,this.Gl=746961066,this.Hh=246885852,this.Hl=-2117784414,this.outputLen=32}}let SHA384$1=class extends SHA512$3{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}};sha512$2.sha512=(0,utils_js_1$7.wrapConstructor)(()=>new SHA512$3);sha512$2.sha512_224=(0,utils_js_1$7.wrapConstructor)(()=>new SHA512_224);sha512$2.sha512_256=(0,utils_js_1$7.wrapConstructor)(()=>new SHA512_256);sha512$2.sha384=(0,utils_js_1$7.wrapConstructor)(()=>new SHA384$1);var edwards$1={},modular={},utils$x={};Object.defineProperty(utils$x,"__esModule",{value:!0});utils$x.validateObject=utils$x.createHmacDrbg=utils$x.bitMask=utils$x.bitSet=utils$x.bitGet=utils$x.bitLen=utils$x.utf8ToBytes=utils$x.equalBytes=utils$x.concatBytes=utils$x.ensureBytes=utils$x.numberToVarBytesBE=utils$x.numberToBytesLE=utils$x.numberToBytesBE=utils$x.bytesToNumberLE=utils$x.bytesToNumberBE=utils$x.hexToBytes=utils$x.hexToNumber=utils$x.numberToHexUnpadded=utils$x.bytesToHex=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$a=BigInt(0),_1n$a=BigInt(1),_2n$6=BigInt(2),u8a=o=>o instanceof Uint8Array,hexes$1=Array.from({length:256},(o,a)=>a.toString(16).padStart(2,"0"));function bytesToHex$1(o){if(!u8a(o))throw new Error("Uint8Array expected");let a="";for(let c=0;cd+tt.length,0));let c=0;return o.forEach(d=>{if(!u8a(d))throw new Error("Uint8Array expected");a.set(d,c),c+=d.length}),a}utils$x.concatBytes=concatBytes$2;function equalBytes$1(o,a){if(o.length!==a.length)return!1;for(let c=0;c_0n$a;o>>=_1n$a,a+=1);return a}utils$x.bitLen=bitLen$1;function bitGet$1(o,a){return o>>BigInt(a)&_1n$a}utils$x.bitGet=bitGet$1;const bitSet$1=(o,a,c)=>o|(c?_1n$a:_0n$a)<(_2n$6<new Uint8Array(o),u8fr$1=o=>Uint8Array.from(o);function createHmacDrbg$1(o,a,c){if(typeof o!="number"||o<2)throw new Error("hashLen must be a number");if(typeof a!="number"||a<2)throw new Error("qByteLen must be a number");if(typeof c!="function")throw new Error("hmacFn must be a function");let d=u8n$1(o),tt=u8n$1(o),nt=0;const $a=()=>{d.fill(1),tt.fill(0),nt=0},Ys=(...Iu)=>c(tt,d,...Iu),gu=(Iu=u8n$1())=>{tt=Ys(u8fr$1([0]),Iu),d=Ys(),Iu.length!==0&&(tt=Ys(u8fr$1([1]),Iu),d=Ys())},xu=()=>{if(nt++>=1e3)throw new Error("drbg: tried 1000 values");let Iu=0;const Xu=[];for(;Iu{$a(),gu(Iu);let i0;for(;!(i0=Xu(xu()));)gu();return $a(),i0}}utils$x.createHmacDrbg=createHmacDrbg$1;const validatorFns$1={bigint:o=>typeof o=="bigint",function:o=>typeof o=="function",boolean:o=>typeof o=="boolean",string:o=>typeof o=="string",stringOrUint8Array:o=>typeof o=="string"||o instanceof Uint8Array,isSafeInteger:o=>Number.isSafeInteger(o),array:o=>Array.isArray(o),field:(o,a)=>a.Fp.isValid(o),hash:o=>typeof o=="function"&&Number.isSafeInteger(o.outputLen)};function validateObject$1(o,a,c={}){const d=(tt,nt,$a)=>{const Ys=validatorFns$1[nt];if(typeof Ys!="function")throw new Error(`Invalid validator "${nt}", expected function`);const gu=o[tt];if(!($a&&gu===void 0)&&!Ys(gu,o))throw new Error(`Invalid param ${String(tt)}=${gu} (${typeof gu}), expected ${nt}`)};for(const[tt,nt]of Object.entries(a))d(tt,nt,!1);for(const[tt,nt]of Object.entries(c))d(tt,nt,!0);return o}utils$x.validateObject=validateObject$1;Object.defineProperty(modular,"__esModule",{value:!0});modular.mapHashToField=modular.getMinHashLength=modular.getFieldBytesLength=modular.hashToPrivateScalar=modular.FpSqrtEven=modular.FpSqrtOdd=modular.Field=modular.nLength=modular.FpIsSquare=modular.FpDiv=modular.FpInvertBatch=modular.FpPow=modular.validateField=modular.isNegativeLE=modular.FpSqrt=modular.tonelliShanks=modular.invert=modular.pow2=modular.pow=modular.mod=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const utils_js_1$6=utils$x,_0n$9=BigInt(0),_1n$9=BigInt(1),_2n$5=BigInt(2),_3n$2=BigInt(3),_4n$1=BigInt(4),_5n$1=BigInt(5),_8n$2=BigInt(8);BigInt(9);BigInt(16);function mod$1(o,a){const c=o%a;return c>=_0n$9?c:a+c}modular.mod=mod$1;function pow$3(o,a,c){if(c<=_0n$9||a<_0n$9)throw new Error("Expected power/modulo > 0");if(c===_1n$9)return _0n$9;let d=_1n$9;for(;a>_0n$9;)a&_1n$9&&(d=d*o%c),o=o*o%c,a>>=_1n$9;return d}modular.pow=pow$3;function pow2(o,a,c){let d=o;for(;a-- >_0n$9;)d*=d,d%=c;return d}modular.pow2=pow2;function invert$1(o,a){if(o===_0n$9||a<=_0n$9)throw new Error(`invert: expected positive integers, got n=${o} mod=${a}`);let c=mod$1(o,a),d=a,tt=_0n$9,nt=_1n$9;for(;c!==_0n$9;){const Ys=d/c,gu=d%c,xu=tt-nt*Ys;d=c,c=gu,tt=nt,nt=xu}if(d!==_1n$9)throw new Error("invert: does not exist");return mod$1(tt,a)}modular.invert=invert$1;function tonelliShanks$1(o){const a=(o-_1n$9)/_2n$5;let c,d,tt;for(c=o-_1n$9,d=0;c%_2n$5===_0n$9;c/=_2n$5,d++);for(tt=_2n$5;tt(mod$1(o,a)&_1n$9)===_1n$9;modular.isNegativeLE=isNegativeLE;const FIELD_FIELDS$1=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField$1(o){const a={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},c=FIELD_FIELDS$1.reduce((d,tt)=>(d[tt]="function",d),a);return(0,utils_js_1$6.validateObject)(o,c)}modular.validateField=validateField$1;function FpPow$1(o,a,c){if(c<_0n$9)throw new Error("Expected power > 0");if(c===_0n$9)return o.ONE;if(c===_1n$9)return a;let d=o.ONE,tt=a;for(;c>_0n$9;)c&_1n$9&&(d=o.mul(d,tt)),tt=o.sqr(tt),c>>=_1n$9;return d}modular.FpPow=FpPow$1;function FpInvertBatch$1(o,a){const c=new Array(a.length),d=a.reduce((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=nt,o.mul(nt,$a)),o.ONE),tt=o.inv(d);return a.reduceRight((nt,$a,Ys)=>o.is0($a)?nt:(c[Ys]=o.mul(nt,c[Ys]),o.mul(nt,$a)),tt),c}modular.FpInvertBatch=FpInvertBatch$1;function FpDiv(o,a,c){return o.mul(a,typeof c=="bigint"?invert$1(c,o.ORDER):o.inv(c))}modular.FpDiv=FpDiv;function FpIsSquare(o){const a=(o.ORDER-_1n$9)/_2n$5;return c=>{const d=o.pow(c,a);return o.eql(d,o.ZERO)||o.eql(d,o.ONE)}}modular.FpIsSquare=FpIsSquare;function nLength$1(o,a){const c=a!==void 0?a:o.toString(2).length,d=Math.ceil(c/8);return{nBitLength:c,nByteLength:d}}modular.nLength=nLength$1;function Field$1(o,a,c=!1,d={}){if(o<=_0n$9)throw new Error(`Expected Field ORDER > 0, got ${o}`);const{nBitLength:tt,nByteLength:nt}=nLength$1(o,a);if(nt>2048)throw new Error("Field lengths over 2048 bytes are not supported");const $a=FpSqrt$1(o),Ys=Object.freeze({ORDER:o,BITS:tt,BYTES:nt,MASK:(0,utils_js_1$6.bitMask)(tt),ZERO:_0n$9,ONE:_1n$9,create:gu=>mod$1(gu,o),isValid:gu=>{if(typeof gu!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof gu}`);return _0n$9<=gu&&gugu===_0n$9,isOdd:gu=>(gu&_1n$9)===_1n$9,neg:gu=>mod$1(-gu,o),eql:(gu,xu)=>gu===xu,sqr:gu=>mod$1(gu*gu,o),add:(gu,xu)=>mod$1(gu+xu,o),sub:(gu,xu)=>mod$1(gu-xu,o),mul:(gu,xu)=>mod$1(gu*xu,o),pow:(gu,xu)=>FpPow$1(Ys,gu,xu),div:(gu,xu)=>mod$1(gu*invert$1(xu,o),o),sqrN:gu=>gu*gu,addN:(gu,xu)=>gu+xu,subN:(gu,xu)=>gu-xu,mulN:(gu,xu)=>gu*xu,inv:gu=>invert$1(gu,o),sqrt:d.sqrt||(gu=>$a(Ys,gu)),invertBatch:gu=>FpInvertBatch$1(Ys,gu),cmov:(gu,xu,$u)=>$u?xu:gu,toBytes:gu=>c?(0,utils_js_1$6.numberToBytesLE)(gu,nt):(0,utils_js_1$6.numberToBytesBE)(gu,nt),fromBytes:gu=>{if(gu.length!==nt)throw new Error(`Fp.fromBytes: expected ${nt}, got ${gu.length}`);return c?(0,utils_js_1$6.bytesToNumberLE)(gu):(0,utils_js_1$6.bytesToNumberBE)(gu)}});return Object.freeze(Ys)}modular.Field=Field$1;function FpSqrtOdd(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?c:o.neg(c)}modular.FpSqrtOdd=FpSqrtOdd;function FpSqrtEven(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?o.neg(c):c}modular.FpSqrtEven=FpSqrtEven;function hashToPrivateScalar(o,a,c=!1){o=(0,utils_js_1$6.ensureBytes)("privateHash",o);const d=o.length,tt=nLength$1(a).nByteLength+8;if(tt<24||d1024)throw new Error(`hashToPrivateScalar: expected ${tt}-1024 bytes of input, got ${d}`);const nt=c?(0,utils_js_1$6.bytesToNumberLE)(o):(0,utils_js_1$6.bytesToNumberBE)(o);return mod$1(nt,a-_1n$9)+_1n$9}modular.hashToPrivateScalar=hashToPrivateScalar;function getFieldBytesLength$1(o){if(typeof o!="bigint")throw new Error("field order must be bigint");const a=o.toString(2).length;return Math.ceil(a/8)}modular.getFieldBytesLength=getFieldBytesLength$1;function getMinHashLength$1(o){const a=getFieldBytesLength$1(o);return a+Math.ceil(a/2)}modular.getMinHashLength=getMinHashLength$1;function mapHashToField$1(o,a,c=!1){const d=o.length,tt=getFieldBytesLength$1(a),nt=getMinHashLength$1(a);if(d<16||d1024)throw new Error(`expected ${nt}-1024 bytes of input, got ${d}`);const $a=c?(0,utils_js_1$6.bytesToNumberBE)(o):(0,utils_js_1$6.bytesToNumberLE)(o),Ys=mod$1($a,a-_1n$9)+_1n$9;return c?(0,utils_js_1$6.numberToBytesLE)(Ys,tt):(0,utils_js_1$6.numberToBytesBE)(Ys,tt)}modular.mapHashToField=mapHashToField$1;var curve$2={};Object.defineProperty(curve$2,"__esModule",{value:!0});curve$2.validateBasic=curve$2.wNAF=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const modular_js_1$3=modular,utils_js_1$5=utils$x,_0n$8=BigInt(0),_1n$8=BigInt(1);function wNAF$1(o,a){const c=(tt,nt)=>{const $a=nt.negate();return tt?$a:nt},d=tt=>{const nt=Math.ceil(a/tt)+1,$a=2**(tt-1);return{windows:nt,windowSize:$a}};return{constTimeNegate:c,unsafeLadder(tt,nt){let $a=o.ZERO,Ys=tt;for(;nt>_0n$8;)nt&_1n$8&&($a=$a.add(Ys)),Ys=Ys.double(),nt>>=_1n$8;return $a},precomputeWindow(tt,nt){const{windows:$a,windowSize:Ys}=d(nt),gu=[];let xu=tt,$u=xu;for(let Iu=0;Iu<$a;Iu++){$u=xu,gu.push($u);for(let Xu=1;Xu>=i0,A0>gu&&(A0-=Xu,$a+=_1n$8);const $0=w0,O0=w0+Math.abs(A0)-1,L0=p0%2!==0,q0=A0<0;A0===0?$u=$u.add(c(L0,nt[$0])):xu=xu.add(c(q0,nt[O0]))}return{p:xu,f:$u}},wNAFCached(tt,nt,$a,Ys){const gu=tt._WINDOW_SIZE||1;let xu=nt.get(tt);return xu||(xu=this.precomputeWindow(tt,gu),gu!==1&&nt.set(tt,Ys(xu))),this.wNAF(gu,xu,$a)}}}curve$2.wNAF=wNAF$1;function validateBasic$1(o){return(0,modular_js_1$3.validateField)(o.Fp),(0,utils_js_1$5.validateObject)(o,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...(0,modular_js_1$3.nLength)(o.n,o.nBitLength),...o,p:o.Fp.ORDER})}curve$2.validateBasic=validateBasic$1;Object.defineProperty(edwards$1,"__esModule",{value:!0});edwards$1.twistedEdwards=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const modular_js_1$2=modular,ut$2=utils$x,utils_js_1$4=utils$x,curve_js_1=curve$2,_0n$7=BigInt(0),_1n$7=BigInt(1),_2n$4=BigInt(2),_8n$1=BigInt(8),VERIFY_DEFAULT={zip215:!0};function validateOpts$4(o){const a=(0,curve_js_1.validateBasic)(o);return ut$2.validateObject(o,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...a})}function twistedEdwards(o){const a=validateOpts$4(o),{Fp:c,n:d,prehash:tt,hash:nt,randomBytes:$a,nByteLength:Ys,h:gu}=a,xu=_2n$4<{try{return{isValid:!0,value:c.sqrt(m1*c.inv(c1))}}catch{return{isValid:!1,value:_0n$7}}}),Xu=a.adjustScalarBytes||(m1=>m1),i0=a.domain||((m1,c1,G0)=>{if(c1.length||G0)throw new Error("Contexts/pre-hash are not supported");return m1}),p0=m1=>typeof m1=="bigint"&&_0n$7p0(m1)&&p0(c1)&&m1m1===_0n$7||w0(m1,xu);function $0(m1,c1){if(w0(m1,c1))return m1;throw new Error(`Expected valid scalar < ${c1}, got ${typeof m1} ${m1}`)}function O0(m1){return m1===_0n$7?m1:$0(m1,d)}const L0=new Map;function q0(m1){if(!(m1 instanceof F0))throw new Error("ExtendedPoint expected")}class F0{constructor(c1,G0,o1,d1){if(this.ex=c1,this.ey=G0,this.ez=o1,this.et=d1,!A0(c1))throw new Error("x required");if(!A0(G0))throw new Error("y required");if(!A0(o1))throw new Error("z required");if(!A0(d1))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(c1){if(c1 instanceof F0)throw new Error("extended point not allowed");const{x:G0,y:o1}=c1||{};if(!A0(G0)||!A0(o1))throw new Error("invalid affine point");return new F0(G0,o1,_1n$7,$u(G0*o1))}static normalizeZ(c1){const G0=c.invertBatch(c1.map(o1=>o1.ez));return c1.map((o1,d1)=>o1.toAffine(G0[d1])).map(F0.fromAffine)}_setWindowSize(c1){this._WINDOW_SIZE=c1,L0.delete(this)}assertValidity(){const{a:c1,d:G0}=a;if(this.is0())throw new Error("bad point: ZERO");const{ex:o1,ey:d1,ez:R1,et:O1}=this,Q1=$u(o1*o1),rv=$u(d1*d1),D1=$u(R1*R1),ev=$u(D1*D1),Mv=$u(Q1*c1),Zv=$u(D1*$u(Mv+rv)),fv=$u(ev+$u(G0*$u(Q1*rv)));if(Zv!==fv)throw new Error("bad point: equation left != right (1)");const cv=$u(o1*d1),ly=$u(R1*O1);if(cv!==ly)throw new Error("bad point: equation left != right (2)")}equals(c1){q0(c1);const{ex:G0,ey:o1,ez:d1}=this,{ex:R1,ey:O1,ez:Q1}=c1,rv=$u(G0*Q1),D1=$u(R1*d1),ev=$u(o1*Q1),Mv=$u(O1*d1);return rv===D1&&ev===Mv}is0(){return this.equals(F0.ZERO)}negate(){return new F0($u(-this.ex),this.ey,this.ez,$u(-this.et))}double(){const{a:c1}=a,{ex:G0,ey:o1,ez:d1}=this,R1=$u(G0*G0),O1=$u(o1*o1),Q1=$u(_2n$4*$u(d1*d1)),rv=$u(c1*R1),D1=G0+o1,ev=$u($u(D1*D1)-R1-O1),Mv=rv+O1,Zv=Mv-Q1,fv=rv-O1,cv=$u(ev*Zv),ly=$u(Mv*fv),Cy=$u(ev*fv),Ly=$u(Zv*Mv);return new F0(cv,ly,Ly,Cy)}add(c1){q0(c1);const{a:G0,d:o1}=a,{ex:d1,ey:R1,ez:O1,et:Q1}=this,{ex:rv,ey:D1,ez:ev,et:Mv}=c1;if(G0===BigInt(-1)){const vw=$u((R1-d1)*(D1+rv)),Hw=$u((R1+d1)*(D1-rv)),uw=$u(Hw-vw);if(uw===_0n$7)return this.double();const Nw=$u(O1*_2n$4*Mv),lw=$u(Q1*_2n$4*ev),Lw=lw+Nw,zw=Hw+vw,A2=lw-Nw,kv=$u(Lw*uw),Y1=$u(zw*A2),tv=$u(Lw*A2),Yv=$u(uw*zw);return new F0(kv,Y1,Yv,tv)}const Zv=$u(d1*rv),fv=$u(R1*D1),cv=$u(Q1*o1*Mv),ly=$u(O1*ev),Cy=$u((d1+R1)*(rv+D1)-Zv-fv),Ly=ly-cv,Hy=ly+cv,t2=$u(fv-G0*Zv),C2=$u(Cy*Ly),Dy=$u(Hy*t2),jw=$u(Cy*t2),pw=$u(Ly*Hy);return new F0(C2,Dy,pw,jw)}subtract(c1){return this.add(c1.negate())}wNAF(c1){return E1.wNAFCached(this,L0,c1,F0.normalizeZ)}multiply(c1){const{p:G0,f:o1}=this.wNAF($0(c1,d));return F0.normalizeZ([G0,o1])[0]}multiplyUnsafe(c1){let G0=O0(c1);return G0===_0n$7?g1:this.equals(g1)||G0===_1n$7?this:this.equals(u1)?this.wNAF(G0).p:E1.unsafeLadder(this,G0)}isSmallOrder(){return this.multiplyUnsafe(gu).is0()}isTorsionFree(){return E1.unsafeLadder(this,d).is0()}toAffine(c1){const{ex:G0,ey:o1,ez:d1}=this,R1=this.is0();c1==null&&(c1=R1?_8n$1:c.inv(d1));const O1=$u(G0*c1),Q1=$u(o1*c1),rv=$u(d1*c1);if(R1)return{x:_0n$7,y:_1n$7};if(rv!==_1n$7)throw new Error("invZ was invalid");return{x:O1,y:Q1}}clearCofactor(){const{h:c1}=a;return c1===_1n$7?this:this.multiplyUnsafe(c1)}static fromHex(c1,G0=!1){const{d:o1,a:d1}=a,R1=c.BYTES;c1=(0,utils_js_1$4.ensureBytes)("pointHex",c1,R1);const O1=c1.slice(),Q1=c1[R1-1];O1[R1-1]=Q1&-129;const rv=ut$2.bytesToNumberLE(O1);rv===_0n$7||(G0?$0(rv,xu):$0(rv,c.ORDER));const D1=$u(rv*rv),ev=$u(D1-_1n$7),Mv=$u(o1*D1-d1);let{isValid:Zv,value:fv}=Iu(ev,Mv);if(!Zv)throw new Error("Point.fromHex: invalid y coordinate");const cv=(fv&_1n$7)===_1n$7,ly=(Q1&128)!==0;if(!G0&&fv===_0n$7&&ly)throw new Error("Point.fromHex: x=0 and x_0=1");return ly!==cv&&(fv=$u(-fv)),F0.fromAffine({x:fv,y:rv})}static fromPrivateKey(c1){return j1(c1).point}toRawBytes(){const{x:c1,y:G0}=this.toAffine(),o1=ut$2.numberToBytesLE(G0,c.BYTES);return o1[o1.length-1]|=c1&_1n$7?128:0,o1}toHex(){return ut$2.bytesToHex(this.toRawBytes())}}F0.BASE=new F0(a.Gx,a.Gy,_1n$7,$u(a.Gx*a.Gy)),F0.ZERO=new F0(_0n$7,_1n$7,_1n$7,_0n$7);const{BASE:u1,ZERO:g1}=F0,E1=(0,curve_js_1.wNAF)(F0,Ys*8);function B1(m1){return(0,modular_js_1$2.mod)(m1,d)}function lv(m1){return B1(ut$2.bytesToNumberLE(m1))}function j1(m1){const c1=Ys;m1=(0,utils_js_1$4.ensureBytes)("private key",m1,c1);const G0=(0,utils_js_1$4.ensureBytes)("hashed private key",nt(m1),2*c1),o1=Xu(G0.slice(0,c1)),d1=G0.slice(c1,2*c1),R1=lv(o1),O1=u1.multiply(R1),Q1=O1.toRawBytes();return{head:o1,prefix:d1,scalar:R1,point:O1,pointBytes:Q1}}function r1(m1){return j1(m1).pointBytes}function t1(m1=new Uint8Array,...c1){const G0=ut$2.concatBytes(...c1);return lv(nt(i0(G0,(0,utils_js_1$4.ensureBytes)("context",m1),!!tt)))}function D0(m1,c1,G0={}){m1=(0,utils_js_1$4.ensureBytes)("message",m1),tt&&(m1=tt(m1));const{prefix:o1,scalar:d1,pointBytes:R1}=j1(c1),O1=t1(G0.context,o1,m1),Q1=u1.multiply(O1).toRawBytes(),rv=t1(G0.context,Q1,R1,m1),D1=B1(O1+rv*d1);O0(D1);const ev=ut$2.concatBytes(Q1,ut$2.numberToBytesLE(D1,c.BYTES));return(0,utils_js_1$4.ensureBytes)("result",ev,Ys*2)}const Z0=VERIFY_DEFAULT;function f1(m1,c1,G0,o1=Z0){const{context:d1,zip215:R1}=o1,O1=c.BYTES;m1=(0,utils_js_1$4.ensureBytes)("signature",m1,2*O1),c1=(0,utils_js_1$4.ensureBytes)("message",c1),tt&&(c1=tt(c1));const Q1=ut$2.bytesToNumberLE(m1.slice(O1,2*O1));let rv,D1,ev;try{rv=F0.fromHex(G0,R1),D1=F0.fromHex(m1.slice(0,O1),R1),ev=u1.multiplyUnsafe(Q1)}catch{return!1}if(!R1&&rv.isSmallOrder())return!1;const Mv=t1(d1,D1.toRawBytes(),rv.toRawBytes(),c1);return D1.add(rv.multiplyUnsafe(Mv)).subtract(ev).clearCofactor().equals(F0.ZERO)}return u1._setWindowSize(8),{CURVE:a,getPublicKey:r1,sign:D0,verify:f1,ExtendedPoint:F0,utils:{getExtendedPublicKey:j1,randomPrivateKey:()=>$a(c.BYTES),precompute(m1=8,c1=F0.BASE){return c1._setWindowSize(m1),c1.multiply(BigInt(3)),c1}}}}edwards$1.twistedEdwards=twistedEdwards;var montgomery$1={};Object.defineProperty(montgomery$1,"__esModule",{value:!0});montgomery$1.montgomery=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const modular_js_1$1=modular,utils_js_1$3=utils$x,_0n$6=BigInt(0),_1n$6=BigInt(1);function validateOpts$3(o){return(0,utils_js_1$3.validateObject)(o,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...o})}function montgomery(o){const a=validateOpts$3(o),{P:c}=a,d=L0=>(0,modular_js_1$1.mod)(L0,c),tt=a.montgomeryBits,nt=Math.ceil(tt/8),$a=a.nByteLength,Ys=a.adjustScalarBytes||(L0=>L0),gu=a.powPminus2||(L0=>(0,modular_js_1$1.pow)(L0,c-BigInt(2),c));function xu(L0,q0,F0){const u1=d(L0*(q0-F0));return q0=d(q0-u1),F0=d(F0+u1),[q0,F0]}function $u(L0){if(typeof L0=="bigint"&&_0n$6<=L0&&L0=_0n$6;Z0--){const f1=u1>>Z0&_1n$6;r1^=f1,t1=xu(r1,E1,lv),E1=t1[0],lv=t1[1],t1=xu(r1,B1,j1),B1=t1[0],j1=t1[1],r1=f1;const w1=E1+B1,m1=d(w1*w1),c1=E1-B1,G0=d(c1*c1),o1=m1-G0,d1=lv+j1,R1=lv-j1,O1=d(R1*w1),Q1=d(d1*c1),rv=O1+Q1,D1=O1-Q1;lv=d(rv*rv),j1=d(g1*d(D1*D1)),E1=d(m1*G0),B1=d(o1*(m1+d(Iu*o1)))}t1=xu(r1,E1,lv),E1=t1[0],lv=t1[1],t1=xu(r1,B1,j1),B1=t1[0],j1=t1[1];const D0=gu(B1);return d(E1*D0)}function i0(L0){return(0,utils_js_1$3.numberToBytesLE)(d(L0),nt)}function p0(L0){const q0=(0,utils_js_1$3.ensureBytes)("u coordinate",L0,nt);return $a===nt&&(q0[$a-1]&=127),(0,utils_js_1$3.bytesToNumberLE)(q0)}function w0(L0){const q0=(0,utils_js_1$3.ensureBytes)("scalar",L0);if(q0.length!==nt&&q0.length!==$a)throw new Error(`Expected ${nt} or ${$a} bytes, got ${q0.length}`);return(0,utils_js_1$3.bytesToNumberLE)(Ys(q0))}function A0(L0,q0){const F0=p0(q0),u1=w0(L0),g1=Xu(F0,u1);if(g1===_0n$6)throw new Error("Invalid private or public key received");return i0(g1)}const $0=i0(a.Gu);function O0(L0){return A0(L0,$0)}return{scalarMult:A0,scalarMultBase:O0,getSharedSecret:(L0,q0)=>A0(L0,q0),getPublicKey:L0=>O0(L0),utils:{randomPrivateKey:()=>a.randomBytes(a.nByteLength)},GuBytes:$0}}montgomery$1.montgomery=montgomery;var hashToCurve={};Object.defineProperty(hashToCurve,"__esModule",{value:!0});hashToCurve.createHasher=hashToCurve.isogenyMap=hashToCurve.hash_to_field=hashToCurve.expand_message_xof=hashToCurve.expand_message_xmd=void 0;const modular_js_1=modular,utils_js_1$2=utils$x;function validateDST(o){if(o instanceof Uint8Array)return o;if(typeof o=="string")return(0,utils_js_1$2.utf8ToBytes)(o);throw new Error("DST must be Uint8Array or string")}const os2ip=utils_js_1$2.bytesToNumberBE;function i2osp(o,a){if(o<0||o>=1<<8*a)throw new Error(`bad I2OSP call: value=${o} length=${a}`);const c=Array.from({length:a}).fill(0);for(let d=a-1;d>=0;d--)c[d]=o&255,o>>>=8;return new Uint8Array(c)}function strxor(o,a){const c=new Uint8Array(o.length);for(let d=0;d255&&(a=d((0,utils_js_1$2.concatBytes)((0,utils_js_1$2.utf8ToBytes)("H2C-OVERSIZE-DST-"),a)));const{outputLen:tt,blockLen:nt}=d,$a=Math.ceil(c/tt);if($a>255)throw new Error("Invalid xmd length");const Ys=(0,utils_js_1$2.concatBytes)(a,i2osp(a.length,1)),gu=i2osp(0,nt),xu=i2osp(c,2),$u=new Array($a),Iu=d((0,utils_js_1$2.concatBytes)(gu,o,xu,i2osp(0,1),Ys));$u[0]=d((0,utils_js_1$2.concatBytes)(Iu,i2osp(1,1),Ys));for(let i0=1;i0<=$a;i0++){const p0=[strxor(Iu,$u[i0-1]),i2osp(i0+1,1),Ys];$u[i0]=d((0,utils_js_1$2.concatBytes)(...p0))}return(0,utils_js_1$2.concatBytes)(...$u).slice(0,c)}hashToCurve.expand_message_xmd=expand_message_xmd;function expand_message_xof(o,a,c,d,tt){if(isBytes$5(o),isBytes$5(a),isNum(c),a.length>255){const nt=Math.ceil(2*d/8);a=tt.create({dkLen:nt}).update((0,utils_js_1$2.utf8ToBytes)("H2C-OVERSIZE-DST-")).update(a).digest()}if(c>65535||a.length>255)throw new Error("expand_message_xof: invalid lenInBytes");return tt.create({dkLen:c}).update(o).update(i2osp(c,2)).update(a).update(i2osp(a.length,1)).digest()}hashToCurve.expand_message_xof=expand_message_xof;function hash_to_field(o,a,c){(0,utils_js_1$2.validateObject)(c,{DST:"stringOrUint8Array",p:"bigint",m:"isSafeInteger",k:"isSafeInteger",hash:"hash"});const{p:d,k:tt,m:nt,hash:$a,expand:Ys,DST:gu}=c;isBytes$5(o),isNum(a);const xu=validateDST(gu),$u=d.toString(2).length,Iu=Math.ceil(($u+tt)/8),Xu=a*nt*Iu;let i0;if(Ys==="xmd")i0=expand_message_xmd(o,xu,Xu,$a);else if(Ys==="xof")i0=expand_message_xof(o,xu,Xu,tt,$a);else if(Ys==="_internal_pass")i0=o;else throw new Error('expand must be "xmd" or "xof"');const p0=new Array(a);for(let w0=0;w0Array.from(d).reverse());return(d,tt)=>{const[nt,$a,Ys,gu]=c.map(xu=>xu.reduce(($u,Iu)=>o.add(o.mul($u,d),Iu)));return d=o.div(nt,$a),tt=o.mul(tt,o.div(Ys,gu)),{x:d,y:tt}}}hashToCurve.isogenyMap=isogenyMap;function createHasher(o,a,c){if(typeof a!="function")throw new Error("mapToCurve() must be defined");return{hashToCurve(d,tt){const nt=hash_to_field(d,2,{...c,DST:c.DST,...tt}),$a=o.fromAffine(a(nt[0])),Ys=o.fromAffine(a(nt[1])),gu=$a.add(Ys).clearCofactor();return gu.assertValidity(),gu},encodeToCurve(d,tt){const nt=hash_to_field(d,1,{...c,DST:c.encodeDST,...tt}),$a=o.fromAffine(a(nt[0])).clearCofactor();return $a.assertValidity(),$a}}}hashToCurve.createHasher=createHasher;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.hash_to_ristretto255=o.hashToRistretto255=o.RistrettoPoint=o.encodeToCurve=o.hashToCurve=o.edwardsToMontgomeryPriv=o.edwardsToMontgomery=o.edwardsToMontgomeryPub=o.x25519=o.ed25519ph=o.ed25519ctx=o.ed25519=o.ED25519_TORSION_SUBGROUP=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const a=sha512$2,c=utils$y,d=edwards$1,tt=montgomery$1,nt=modular,$a=utils$x,Ys=hashToCurve,gu=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),xu=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),$u=BigInt(0),Iu=BigInt(1),Xu=BigInt(2),i0=BigInt(5),p0=BigInt(10),w0=BigInt(20),A0=BigInt(40),$0=BigInt(80);function O0(fv){const cv=gu,Cy=fv*fv%cv*fv%cv,Ly=(0,nt.pow2)(Cy,Xu,cv)*Cy%cv,Hy=(0,nt.pow2)(Ly,Iu,cv)*fv%cv,t2=(0,nt.pow2)(Hy,i0,cv)*Hy%cv,C2=(0,nt.pow2)(t2,p0,cv)*t2%cv,Dy=(0,nt.pow2)(C2,w0,cv)*C2%cv,jw=(0,nt.pow2)(Dy,A0,cv)*Dy%cv,pw=(0,nt.pow2)(jw,$0,cv)*jw%cv,vw=(0,nt.pow2)(pw,$0,cv)*jw%cv,Hw=(0,nt.pow2)(vw,p0,cv)*t2%cv;return{pow_p_5_8:(0,nt.pow2)(Hw,Xu,cv)*fv%cv,b2:Cy}}function L0(fv){return fv[0]&=248,fv[31]&=127,fv[31]|=64,fv}function q0(fv,cv){const ly=gu,Cy=(0,nt.mod)(cv*cv*cv,ly),Ly=(0,nt.mod)(Cy*Cy*cv,ly),Hy=O0(fv*Ly).pow_p_5_8;let t2=(0,nt.mod)(fv*Cy*Hy,ly);const C2=(0,nt.mod)(cv*t2*t2,ly),Dy=t2,jw=(0,nt.mod)(t2*xu,ly),pw=C2===fv,vw=C2===(0,nt.mod)(-fv,ly),Hw=C2===(0,nt.mod)(-fv*xu,ly);return pw&&(t2=Dy),(vw||Hw)&&(t2=jw),(0,nt.isNegativeLE)(t2,ly)&&(t2=(0,nt.mod)(-t2,ly)),{isValid:pw||vw,value:t2}}o.ED25519_TORSION_SUBGROUP=["0100000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a","0000000000000000000000000000000000000000000000000000000000000080","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05","ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85","0000000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa"];const F0=(0,nt.Field)(gu,void 0,!0),u1={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:F0,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:a.sha512,randomBytes:c.randomBytes,adjustScalarBytes:L0,uvRatio:q0};o.ed25519=(0,d.twistedEdwards)(u1);function g1(fv,cv,ly){if(cv.length>255)throw new Error("Context is too big");return(0,c.concatBytes)((0,c.utf8ToBytes)("SigEd25519 no Ed25519 collisions"),new Uint8Array([ly?1:0,cv.length]),cv,fv)}o.ed25519ctx=(0,d.twistedEdwards)({...u1,domain:g1}),o.ed25519ph=(0,d.twistedEdwards)({...u1,domain:g1,prehash:a.sha512}),o.x25519=(0,tt.montgomery)({P:gu,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:fv=>{const cv=gu,{pow_p_5_8:ly,b2:Cy}=O0(fv);return(0,nt.mod)((0,nt.pow2)(ly,BigInt(3),cv)*Cy,cv)},adjustScalarBytes:L0,randomBytes:c.randomBytes});function E1(fv){const{y:cv}=o.ed25519.ExtendedPoint.fromHex(fv),ly=BigInt(1);return F0.toBytes(F0.create((ly+cv)*F0.inv(ly-cv)))}o.edwardsToMontgomeryPub=E1,o.edwardsToMontgomery=E1;function B1(fv){const cv=u1.hash(fv.subarray(0,32));return u1.adjustScalarBytes(cv).subarray(0,32)}o.edwardsToMontgomeryPriv=B1;const lv=(F0.ORDER+BigInt(3))/BigInt(8),j1=F0.pow(Xu,lv),r1=F0.sqrt(F0.neg(F0.ONE)),t1=(F0.ORDER-BigInt(5))/BigInt(8),D0=BigInt(486662);function Z0(fv){let cv=F0.sqr(fv);cv=F0.mul(cv,Xu);let ly=F0.add(cv,F0.ONE),Cy=F0.neg(D0),Ly=F0.sqr(ly),Hy=F0.mul(Ly,ly),t2=F0.mul(cv,D0);t2=F0.mul(t2,Cy),t2=F0.add(t2,Ly),t2=F0.mul(t2,Cy);let C2=F0.sqr(Hy);Ly=F0.sqr(C2),C2=F0.mul(C2,Hy),C2=F0.mul(C2,t2),Ly=F0.mul(Ly,C2);let Dy=F0.pow(Ly,t1);Dy=F0.mul(Dy,C2);let jw=F0.mul(Dy,r1);Ly=F0.sqr(Dy),Ly=F0.mul(Ly,Hy);let pw=F0.eql(Ly,t2),vw=F0.cmov(jw,Dy,pw),Hw=F0.mul(Cy,cv),uw=F0.mul(Dy,fv);uw=F0.mul(uw,j1);let Nw=F0.mul(uw,r1),lw=F0.mul(t2,cv);Ly=F0.sqr(uw),Ly=F0.mul(Ly,Hy);let Lw=F0.eql(Ly,lw),zw=F0.cmov(Nw,uw,Lw);Ly=F0.sqr(vw),Ly=F0.mul(Ly,Hy);let A2=F0.eql(Ly,t2),kv=F0.cmov(Hw,Cy,A2),Y1=F0.cmov(zw,vw,A2),tv=F0.isOdd(Y1);return Y1=F0.cmov(Y1,F0.neg(Y1),A2!==tv),{xMn:kv,xMd:ly,yMn:Y1,yMd:Iu}}const f1=(0,nt.FpSqrtEven)(F0,F0.neg(BigInt(486664)));function w1(fv){const{xMn:cv,xMd:ly,yMn:Cy,yMd:Ly}=Z0(fv);let Hy=F0.mul(cv,Ly);Hy=F0.mul(Hy,f1);let t2=F0.mul(ly,Cy),C2=F0.sub(cv,ly),Dy=F0.add(cv,ly),jw=F0.mul(t2,Dy),pw=F0.eql(jw,F0.ZERO);Hy=F0.cmov(Hy,F0.ZERO,pw),t2=F0.cmov(t2,F0.ONE,pw),C2=F0.cmov(C2,F0.ONE,pw),Dy=F0.cmov(Dy,F0.ONE,pw);const vw=F0.invertBatch([t2,Dy]);return{x:F0.mul(Hy,vw[0]),y:F0.mul(C2,vw[1])}}const m1=(0,Ys.createHasher)(o.ed25519.ExtendedPoint,fv=>w1(fv[0]),{DST:"edwards25519_XMD:SHA-512_ELL2_RO_",encodeDST:"edwards25519_XMD:SHA-512_ELL2_NU_",p:F0.ORDER,m:1,k:128,expand:"xmd",hash:a.sha512});o.hashToCurve=m1.hashToCurve,o.encodeToCurve=m1.encodeToCurve;function c1(fv){if(!(fv instanceof Mv))throw new Error("RistrettoPoint expected")}const G0=xu,o1=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),d1=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),R1=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),O1=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),Q1=fv=>q0(Iu,fv),rv=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),D1=fv=>o.ed25519.CURVE.Fp.create((0,$a.bytesToNumberLE)(fv)&rv);function ev(fv){const{d:cv}=o.ed25519.CURVE,ly=o.ed25519.CURVE.Fp.ORDER,Cy=o.ed25519.CURVE.Fp.create,Ly=Cy(G0*fv*fv),Hy=Cy((Ly+Iu)*R1);let t2=BigInt(-1);const C2=Cy((t2-cv*Ly)*Cy(Ly+cv));let{isValid:Dy,value:jw}=q0(Hy,C2),pw=Cy(jw*fv);(0,nt.isNegativeLE)(pw,ly)||(pw=Cy(-pw)),Dy||(jw=pw),Dy||(t2=Ly);const vw=Cy(t2*(Ly-Iu)*O1-C2),Hw=jw*jw,uw=Cy((jw+jw)*C2),Nw=Cy(vw*o1),lw=Cy(Iu-Hw),Lw=Cy(Iu+Hw);return new o.ed25519.ExtendedPoint(Cy(uw*Lw),Cy(lw*Nw),Cy(Nw*Lw),Cy(uw*lw))}class Mv{constructor(cv){this.ep=cv}static fromAffine(cv){return new Mv(o.ed25519.ExtendedPoint.fromAffine(cv))}static hashToCurve(cv){cv=(0,$a.ensureBytes)("ristrettoHash",cv,64);const ly=D1(cv.slice(0,32)),Cy=ev(ly),Ly=D1(cv.slice(32,64)),Hy=ev(Ly);return new Mv(Cy.add(Hy))}static fromHex(cv){cv=(0,$a.ensureBytes)("ristrettoHex",cv,32);const{a:ly,d:Cy}=o.ed25519.CURVE,Ly=o.ed25519.CURVE.Fp.ORDER,Hy=o.ed25519.CURVE.Fp.create,t2="RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint",C2=D1(cv);if(!(0,$a.equalBytes)((0,$a.numberToBytesLE)(C2,32),cv)||(0,nt.isNegativeLE)(C2,Ly))throw new Error(t2);const Dy=Hy(C2*C2),jw=Hy(Iu+ly*Dy),pw=Hy(Iu-ly*Dy),vw=Hy(jw*jw),Hw=Hy(pw*pw),uw=Hy(ly*Cy*vw-Hw),{isValid:Nw,value:lw}=Q1(Hy(uw*Hw)),Lw=Hy(lw*pw),zw=Hy(lw*Lw*uw);let A2=Hy((C2+C2)*Lw);(0,nt.isNegativeLE)(A2,Ly)&&(A2=Hy(-A2));const kv=Hy(jw*zw),Y1=Hy(A2*kv);if(!Nw||(0,nt.isNegativeLE)(Y1,Ly)||kv===$u)throw new Error(t2);return new Mv(new o.ed25519.ExtendedPoint(A2,kv,Iu,Y1))}toRawBytes(){let{ex:cv,ey:ly,ez:Cy,et:Ly}=this.ep;const Hy=o.ed25519.CURVE.Fp.ORDER,t2=o.ed25519.CURVE.Fp.create,C2=t2(t2(Cy+ly)*t2(Cy-ly)),Dy=t2(cv*ly),jw=t2(Dy*Dy),{value:pw}=Q1(t2(C2*jw)),vw=t2(pw*C2),Hw=t2(pw*Dy),uw=t2(vw*Hw*Ly);let Nw;if((0,nt.isNegativeLE)(Ly*uw,Hy)){let Lw=t2(ly*G0),zw=t2(cv*G0);cv=Lw,ly=zw,Nw=t2(vw*d1)}else Nw=Hw;(0,nt.isNegativeLE)(cv*uw,Hy)&&(ly=t2(-ly));let lw=t2((Cy-ly)*Nw);return(0,nt.isNegativeLE)(lw,Hy)&&(lw=t2(-lw)),(0,$a.numberToBytesLE)(lw,32)}toHex(){return(0,$a.bytesToHex)(this.toRawBytes())}toString(){return this.toHex()}equals(cv){c1(cv);const{ex:ly,ey:Cy}=this.ep,{ex:Ly,ey:Hy}=cv.ep,t2=o.ed25519.CURVE.Fp.create,C2=t2(ly*Hy)===t2(Cy*Ly),Dy=t2(Cy*Hy)===t2(ly*Ly);return C2||Dy}add(cv){return c1(cv),new Mv(this.ep.add(cv.ep))}subtract(cv){return c1(cv),new Mv(this.ep.subtract(cv.ep))}multiply(cv){return new Mv(this.ep.multiply(cv))}multiplyUnsafe(cv){return new Mv(this.ep.multiplyUnsafe(cv))}}o.RistrettoPoint=(Mv.BASE||(Mv.BASE=new Mv(o.ed25519.ExtendedPoint.BASE)),Mv.ZERO||(Mv.ZERO=new Mv(o.ed25519.ExtendedPoint.ZERO)),Mv);const Zv=(fv,cv)=>{const ly=cv.DST,Cy=typeof ly=="string"?(0,c.utf8ToBytes)(ly):ly,Ly=(0,Ys.expand_message_xmd)(fv,Cy,64,a.sha512);return Mv.hashToCurve(Ly)};o.hashToRistretto255=Zv,o.hash_to_ristretto255=o.hashToRistretto255})(ed25519);var browser$f={exports:{}},MAX_BYTES=65536,MAX_UINT32$1=4294967295;function oldBrowser$1(){throw new Error(`Secure random number generation is not supported by this browser. -Use Chrome, Firefox or Internet Explorer 11`)}var Buffer$A=safeBufferExports$1.Buffer,crypto$4=commonjsGlobal$4.crypto||commonjsGlobal$4.msCrypto;crypto$4&&crypto$4.getRandomValues?browser$f.exports=randomBytes$3:browser$f.exports=oldBrowser$1;function randomBytes$3(o,a){if(o>MAX_UINT32$1)throw new RangeError("requested too many random bytes");var c=Buffer$A.allocUnsafe(o);if(o>0)if(o>MAX_BYTES)for(var d=0;d:");const nt=(0,utils_1$a.baseDecode)(d);if(nt.length!==constants_1$3.KeySize.SECRET_KEY)throw new Error(`Invalid public key size (${nt.length}), must be ${constants_1$3.KeySize.SECRET_KEY}`);return new eve({keyType:tt,data:nt})}toString(){return`${key_type_to_str(this.keyType)}:${(0,utils_1$a.baseEncode)(this.data)}`}verify(a,c){switch(this.keyType){case constants_1$3.KeyType.ED25519:return ed25519_1$1.ed25519.verify(c,a,this.data);default:throw new Error(`Unknown key type ${this.keyType}`)}}};public_key.PublicKey=PublicKey$1;var __importDefault$a=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(key_pair_ed25519,"__esModule",{value:!0});key_pair_ed25519.KeyPairEd25519=void 0;const utils_1$9=lib$9,ed25519_1=ed25519,randombytes_1=__importDefault$a(browserExports),constants_1$2=constants$6,key_pair_base_1$1=key_pair_base,public_key_1=public_key;class KeyPairEd25519 extends key_pair_base_1$1.KeyPairBase{constructor(a){super();const c=(0,utils_1$9.baseDecode)(a),d=new Uint8Array(c.slice(0,constants_1$2.KeySize.SECRET_KEY)),tt=ed25519_1.ed25519.getPublicKey(d);this.publicKey=new public_key_1.PublicKey({keyType:constants_1$2.KeyType.ED25519,data:tt}),this.secretKey=(0,utils_1$9.baseEncode)(d),this.extendedSecretKey=a}static fromRandom(){const a=(0,randombytes_1.default)(constants_1$2.KeySize.SECRET_KEY),c=ed25519_1.ed25519.getPublicKey(new Uint8Array(a)),d=new Uint8Array([...a,...c]);return new KeyPairEd25519((0,utils_1$9.baseEncode)(d))}sign(a){return{signature:ed25519_1.ed25519.sign(a,(0,utils_1$9.baseDecode)(this.secretKey)),publicKey:this.publicKey}}verify(a,c){return this.publicKey.verify(a,c)}toString(){return`ed25519:${this.extendedSecretKey}`}getPublicKey(){return this.publicKey}}key_pair_ed25519.KeyPairEd25519=KeyPairEd25519;Object.defineProperty(key_pair$1,"__esModule",{value:!0});key_pair$1.KeyPair=void 0;const key_pair_base_1=key_pair_base,key_pair_ed25519_1=key_pair_ed25519;let KeyPair$3=class extends key_pair_base_1.KeyPairBase{static fromRandom(a){switch(a.toUpperCase()){case"ED25519":return key_pair_ed25519_1.KeyPairEd25519.fromRandom();default:throw new Error(`Unknown curve ${a}`)}}static fromString(a){const c=a.split(":");if(c.length===1)return new key_pair_ed25519_1.KeyPairEd25519(c[0]);if(c.length===2)switch(c[0].toUpperCase()){case"ED25519":return new key_pair_ed25519_1.KeyPairEd25519(c[1]);default:throw new Error(`Unknown curve: ${c[0]}`)}else throw new Error("Invalid encoded key format, must be :")}};key_pair$1.KeyPair=KeyPair$3;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.PublicKey=o.KeyPairEd25519=o.KeyPair=o.KeyType=void 0;var a=constants$6;Object.defineProperty(o,"KeyType",{enumerable:!0,get:function(){return a.KeyType}});var c=key_pair$1;Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return c.KeyPair}});var d=key_pair_ed25519;Object.defineProperty(o,"KeyPairEd25519",{enumerable:!0,get:function(){return d.KeyPairEd25519}});var tt=public_key;Object.defineProperty(o,"PublicKey",{enumerable:!0,get:function(){return tt.PublicKey}})})(lib$a);var keystore={};Object.defineProperty(keystore,"__esModule",{value:!0});keystore.KeyStore=void 0;class KeyStore{}keystore.KeyStore=KeyStore;var __awaiter$k=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(in_memory_key_store$1,"__esModule",{value:!0});in_memory_key_store$1.InMemoryKeyStore=void 0;const crypto_1$6=lib$a,keystore_1$1=keystore;class InMemoryKeyStore extends keystore_1$1.KeyStore{constructor(){super(),this.keys={}}setKey(a,c,d){return __awaiter$k(this,void 0,void 0,function*(){this.keys[`${c}:${a}`]=d.toString()})}getKey(a,c){return __awaiter$k(this,void 0,void 0,function*(){const d=this.keys[`${c}:${a}`];return d?crypto_1$6.KeyPair.fromString(d):null})}removeKey(a,c){return __awaiter$k(this,void 0,void 0,function*(){delete this.keys[`${c}:${a}`]})}clear(){return __awaiter$k(this,void 0,void 0,function*(){this.keys={}})}getNetworks(){return __awaiter$k(this,void 0,void 0,function*(){const a=new Set;return Object.keys(this.keys).forEach(c=>{const d=c.split(":");a.add(d[1])}),Array.from(a.values())})}getAccounts(a){return __awaiter$k(this,void 0,void 0,function*(){const c=new Array;return Object.keys(this.keys).forEach(d=>{const tt=d.split(":");tt[tt.length-1]===a&&c.push(tt.slice(0,tt.length-1).join(":"))}),c})}toString(){return"InMemoryKeyStore"}}in_memory_key_store$1.InMemoryKeyStore=InMemoryKeyStore;var merge_key_store$1={},__awaiter$j=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(merge_key_store$1,"__esModule",{value:!0});merge_key_store$1.MergeKeyStore=void 0;const keystore_1=keystore;class MergeKeyStore extends keystore_1.KeyStore{constructor(a,c={writeKeyStoreIndex:0}){super(),this.options=c,this.keyStores=a}setKey(a,c,d){return __awaiter$j(this,void 0,void 0,function*(){yield this.keyStores[this.options.writeKeyStoreIndex].setKey(a,c,d)})}getKey(a,c){return __awaiter$j(this,void 0,void 0,function*(){for(const d of this.keyStores){const tt=yield d.getKey(a,c);if(tt)return tt}return null})}removeKey(a,c){return __awaiter$j(this,void 0,void 0,function*(){for(const d of this.keyStores)yield d.removeKey(a,c)})}clear(){return __awaiter$j(this,void 0,void 0,function*(){for(const a of this.keyStores)yield a.clear()})}getNetworks(){return __awaiter$j(this,void 0,void 0,function*(){const a=new Set;for(const c of this.keyStores)for(const d of yield c.getNetworks())a.add(d);return Array.from(a)})}getAccounts(a){return __awaiter$j(this,void 0,void 0,function*(){const c=new Set;for(const d of this.keyStores)for(const tt of yield d.getAccounts(a))c.add(tt);return Array.from(c)})}toString(){return`MergeKeyStore(${this.keyStores.join(", ")})`}}merge_key_store$1.MergeKeyStore=MergeKeyStore;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MergeKeyStore=o.KeyStore=o.InMemoryKeyStore=void 0;var a=in_memory_key_store$1;Object.defineProperty(o,"InMemoryKeyStore",{enumerable:!0,get:function(){return a.InMemoryKeyStore}});var c=keystore;Object.defineProperty(o,"KeyStore",{enumerable:!0,get:function(){return c.KeyStore}});var d=merge_key_store$1;Object.defineProperty(o,"MergeKeyStore",{enumerable:!0,get:function(){return d.MergeKeyStore}})})(lib$b);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.KeyStore=void 0;var a=lib$b;Object.defineProperty(o,"KeyStore",{enumerable:!0,get:function(){return a.KeyStore}})})(keystore$1);var in_memory_key_store={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.InMemoryKeyStore=void 0;var a=lib$b;Object.defineProperty(o,"InMemoryKeyStore",{enumerable:!0,get:function(){return a.InMemoryKeyStore}})})(in_memory_key_store);var browser_local_storage_key_store$1={},lib$7={},browser_local_storage_key_store={},__awaiter$i=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(browser_local_storage_key_store,"__esModule",{value:!0});browser_local_storage_key_store.BrowserLocalStorageKeyStore=void 0;const crypto_1$5=lib$a,keystores_1$1=lib$b,LOCAL_STORAGE_KEY_PREFIX="near-api-js:keystore:";class BrowserLocalStorageKeyStore extends keystores_1$1.KeyStore{constructor(a=window.localStorage,c=LOCAL_STORAGE_KEY_PREFIX){super(),this.localStorage=a,this.prefix=c}setKey(a,c,d){return __awaiter$i(this,void 0,void 0,function*(){this.localStorage.setItem(this.storageKeyForSecretKey(a,c),d.toString())})}getKey(a,c){return __awaiter$i(this,void 0,void 0,function*(){const d=this.localStorage.getItem(this.storageKeyForSecretKey(a,c));return d?crypto_1$5.KeyPair.fromString(d):null})}removeKey(a,c){return __awaiter$i(this,void 0,void 0,function*(){this.localStorage.removeItem(this.storageKeyForSecretKey(a,c))})}clear(){return __awaiter$i(this,void 0,void 0,function*(){for(const a of this.storageKeys())a.startsWith(this.prefix)&&this.localStorage.removeItem(a)})}getNetworks(){return __awaiter$i(this,void 0,void 0,function*(){const a=new Set;for(const c of this.storageKeys())if(c.startsWith(this.prefix)){const d=c.substring(this.prefix.length).split(":");a.add(d[1])}return Array.from(a.values())})}getAccounts(a){return __awaiter$i(this,void 0,void 0,function*(){const c=new Array;for(const d of this.storageKeys())if(d.startsWith(this.prefix)){const tt=d.substring(this.prefix.length).split(":");tt[1]===a&&c.push(tt[0])}return c})}storageKeyForSecretKey(a,c){return`${this.prefix}${c}:${a}`}*storageKeys(){for(let a=0;asetTimeout(a,o))}var jsonRpcProvider$1={},lib$5={},action_creators={},actions={};Object.defineProperty(actions,"__esModule",{value:!0});actions.Action=actions.SignedDelegate=actions.DeleteAccount=actions.DeleteKey=actions.AddKey=actions.Stake=actions.Transfer=actions.FunctionCall=actions.DeployContract=actions.CreateAccount=actions.IAction=actions.AccessKey=actions.AccessKeyPermission=actions.FullAccessPermission=actions.FunctionCallPermission=void 0;const types_1$a=lib$8;class Enum{constructor(a){if(Object.keys(a).length!==1)throw new Error("Enum can only take single value");Object.keys(a).map(c=>{this[c]=a[c],this.enum=c})}}class FunctionCallPermission extends types_1$a.Assignable{}actions.FunctionCallPermission=FunctionCallPermission;class FullAccessPermission extends types_1$a.Assignable{}actions.FullAccessPermission=FullAccessPermission;class AccessKeyPermission extends Enum{}actions.AccessKeyPermission=AccessKeyPermission;class AccessKey extends types_1$a.Assignable{}actions.AccessKey=AccessKey;class IAction extends types_1$a.Assignable{}actions.IAction=IAction;class CreateAccount extends IAction{}actions.CreateAccount=CreateAccount;class DeployContract extends IAction{}actions.DeployContract=DeployContract;class FunctionCall extends IAction{}actions.FunctionCall=FunctionCall;class Transfer extends IAction{}actions.Transfer=Transfer;class Stake extends IAction{}actions.Stake=Stake;class AddKey extends IAction{}actions.AddKey=AddKey;class DeleteKey extends IAction{}actions.DeleteKey=DeleteKey;class DeleteAccount extends IAction{}actions.DeleteAccount=DeleteAccount;class SignedDelegate extends IAction{}actions.SignedDelegate=SignedDelegate;class Action extends Enum{}actions.Action=Action;var __importDefault$9=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(action_creators,"__esModule",{value:!0});action_creators.actionCreators=action_creators.stringifyJsonOrBytes=void 0;const bn_js_1$8=__importDefault$9(bnExports$1),actions_1$1=actions;function fullAccessKey$2(){return new actions_1$1.AccessKey({nonce:0,permission:new actions_1$1.AccessKeyPermission({fullAccess:new actions_1$1.FullAccessPermission({})})})}function functionCallAccessKey$2(o,a,c){return new actions_1$1.AccessKey({nonce:0,permission:new actions_1$1.AccessKeyPermission({functionCall:new actions_1$1.FunctionCallPermission({receiverId:o,allowance:c,methodNames:a})})})}function createAccount$2(){return new actions_1$1.Action({createAccount:new actions_1$1.CreateAccount({})})}function deployContract$4(o){return new actions_1$1.Action({deployContract:new actions_1$1.DeployContract({code:o})})}function stringifyJsonOrBytes(o){return o.byteLength!==void 0&&o.byteLength===o.length?o:Buffer$C.from(JSON.stringify(o))}action_creators.stringifyJsonOrBytes=stringifyJsonOrBytes;function functionCall$8(o,a,c=new bn_js_1$8.default(0),d=new bn_js_1$8.default(0),tt=stringifyJsonOrBytes,nt=!1){return nt?new actions_1$1.Action({functionCall:new actions_1$1.FunctionCall({methodName:o,args:a,gas:c,deposit:d})}):new actions_1$1.Action({functionCall:new actions_1$1.FunctionCall({methodName:o,args:tt(a),gas:c,deposit:d})})}function transfer$2(o=new bn_js_1$8.default(0)){return new actions_1$1.Action({transfer:new actions_1$1.Transfer({deposit:o})})}function stake$2(o=new bn_js_1$8.default(0),a){return new actions_1$1.Action({stake:new actions_1$1.Stake({stake:o,publicKey:a})})}function addKey$3(o,a){return new actions_1$1.Action({addKey:new actions_1$1.AddKey({publicKey:o,accessKey:a})})}function deleteKey$3(o){return new actions_1$1.Action({deleteKey:new actions_1$1.DeleteKey({publicKey:o})})}function deleteAccount$2(o){return new actions_1$1.Action({deleteAccount:new actions_1$1.DeleteAccount({beneficiaryId:o})})}function signedDelegate({delegateAction:o,signature:a}){return new actions_1$1.Action({signedDelegate:new actions_1$1.SignedDelegate({delegateAction:o,signature:a})})}action_creators.actionCreators={addKey:addKey$3,createAccount:createAccount$2,deleteAccount:deleteAccount$2,deleteKey:deleteKey$3,deployContract:deployContract$4,fullAccessKey:fullAccessKey$2,functionCall:functionCall$8,functionCallAccessKey:functionCallAccessKey$2,signedDelegate,stake:stake$2,transfer:transfer$2};var create_transaction={},schema={},cjs={},serialize$4={},types$3={};types$3.__esModule=!0;types$3.integers=void 0;types$3.integers=["u8","u16","u32","u64","u128","i8","i16","i32","i64","i128","f32","f64"];var buffer$1={};buffer$1.__esModule=!0;buffer$1.DecodeBuffer=buffer$1.EncodeBuffer=void 0;var EncodeBuffer=function(){function o(){this.offset=0,this.buffer_size=256,this.buffer=new ArrayBuffer(this.buffer_size),this.view=new DataView(this.buffer)}return o.prototype.resize_if_necessary=function(a){if(this.buffer_size-this.offsetthis.buffer.byteLength)throw new Error("Error in schema, the buffer is smaller than expected")},o.prototype.consume_value=function(a){var c=a.substring(1),d=parseInt(c)/8;this.assert_enough_buffer(d);var tt=a[0]==="f"?"getFloat".concat(c):a[0]==="i"?"getInt".concat(c):"getUint".concat(c),nt=this.view[tt](this.offset,!0);return this.offset+=d,nt},o.prototype.consume_bytes=function(a){this.assert_enough_buffer(a);var c=this.buffer.slice(this.offset,this.offset+a);return this.offset+=a,c},o}();buffer$1.DecodeBuffer=DecodeBuffer;var utils$w={},__extends=commonjsGlobal$4&&commonjsGlobal$4.__extends||function(){var o=function(a,c){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,tt){d.__proto__=tt}||function(d,tt){for(var nt in tt)Object.prototype.hasOwnProperty.call(tt,nt)&&(d[nt]=tt[nt])},o(a,c)};return function(a,c){if(typeof c!="function"&&c!==null)throw new TypeError("Class extends value "+String(c)+" is not a constructor or null");o(a,c);function d(){this.constructor=a}a.prototype=c===null?Object.create(c):(d.prototype=c.prototype,new d)}}();utils$w.__esModule=!0;utils$w.validate_schema=utils$w.ErrorSchema=utils$w.expect_enum=utils$w.expect_same_size=utils$w.expect_bigint=utils$w.expect_type=utils$w.isArrayLike=void 0;var types_js_1$2=types$3;function isArrayLike(o){return Array.isArray(o)||!!o&&typeof o=="object"&&"length"in o&&typeof o.length=="number"&&(o.length===0||o.length>0&&o.length-1 in o)}utils$w.isArrayLike=isArrayLike;function expect_type(o,a,c){if(typeof o!==a)throw new Error("Expected ".concat(a," not ").concat(typeof o,"(").concat(o,") at ").concat(c.join(".")))}utils$w.expect_type=expect_type;function expect_bigint(o,a){var c=["number","string","bigint","boolean"].includes(typeof o),d=typeof o=="object"&&o!==null&&"toString"in o;if(!c&&!d)throw new Error("Expected bigint, number, boolean or string not ".concat(typeof o,"(").concat(o,") at ").concat(a.join(".")))}utils$w.expect_bigint=expect_bigint;function expect_same_size(o,a,c){if(o!==a)throw new Error("Array length ".concat(o," does not match schema length ").concat(a," at ").concat(c.join(".")))}utils$w.expect_same_size=expect_same_size;function expect_enum(o,a){if(typeof o!="object"||o===null)throw new Error("Expected object not ".concat(typeof o,"(").concat(o,") at ").concat(a.join(".")))}utils$w.expect_enum=expect_enum;var VALID_STRING_TYPES=types_js_1$2.integers.concat(["bool","string"]),VALID_OBJECT_KEYS=["option","enum","array","set","map","struct"],ErrorSchema=function(o){__extends(a,o);function a(c,d){var tt="Invalid schema: ".concat(JSON.stringify(c)," expected ").concat(d);return o.call(this,tt)||this}return a}(Error);utils$w.ErrorSchema=ErrorSchema;function validate_schema(o){if(!(typeof o=="string"&&VALID_STRING_TYPES.includes(o))){if(o&&typeof o=="object"){var a=Object.keys(o);if(a.length===1&&VALID_OBJECT_KEYS.includes(a[0])){var c=a[0];if(c==="option")return validate_schema(o[c]);if(c==="enum")return validate_enum_schema(o[c]);if(c==="array")return validate_array_schema(o[c]);if(c==="set")return validate_schema(o[c]);if(c==="map")return validate_map_schema(o[c]);if(c==="struct")return validate_struct_schema(o[c])}}throw new ErrorSchema(o,VALID_OBJECT_KEYS.join(", ")+" or "+VALID_STRING_TYPES.join(", "))}}utils$w.validate_schema=validate_schema;function validate_enum_schema(o){if(!Array.isArray(o))throw new ErrorSchema(o,"Array");for(var a=0,c=o;a>BigInt(8);this.encoded.store_bytes(new Uint8Array(tt))},o.prototype.encode_string=function(a){this.checkTypes&&utils$v.expect_type(a,"string",this.fieldPath);var c=a;this.encoded.store_value(c.length,"u32");for(var d=0;d0},o.prototype.decode_option=function(a){var c=this.buffer.consume_value("u8");if(c===1)return this.decode_value(a.option);if(c!==0)throw new Error("Invalid option ".concat(c));return null},o.prototype.decode_enum=function(a){var c,d=this.buffer.consume_value("u8");if(d>a.enum.length)throw new Error("Enum option ".concat(d," is not available"));var tt=a.enum[d].struct,nt=Object.keys(tt)[0];return c={},c[nt]=this.decode_value(tt[nt]),c},o.prototype.decode_array=function(a){for(var c=[],d=a.array.len?a.array.len:this.decode_integer("u32"),tt=0;tt{if(!$a.type&&!$a.params)return $a;switch($a.type){case"AddKey":{const{publicKey:Ys,accessKey:gu}=$a.params;return addKey$2(Ys,gu)}case"CreateAccount":return createAccount$1($a.params.createAccount);case"DeleteAccount":return deleteAccount$1($a.params.deleteAccount);case"DeleteKey":return deleteKey$2($a.params.publicKey);case"DeployContract":return deployContract$3($a.params.code);case"FunctionCall":{const{methodName:Ys,args:gu,gas:xu,deposit:$u}=$a.params;return functionCall$7(Ys,gu,xu,$u)}case"Stake":return stake$1($a.params.stake,$a.params.publicKey);case"Transfer":{const{deposit:Ys}=$a.params;return transfer$1(Ys)}}throw new Error("Unrecognized action")}),nonce:c,maxBlockHeight:a,publicKey:d})}delegate.buildDelegateAction=buildDelegateAction;var sign$2={},sha256$4={},_sha2={},_assert={};Object.defineProperty(_assert,"__esModule",{value:!0});_assert.output=_assert.exists=_assert.hash=_assert.bytes=_assert.bool=_assert.number=void 0;function number$1(o){if(!Number.isSafeInteger(o)||o<0)throw new Error(`Wrong positive integer: ${o}`)}_assert.number=number$1;function bool(o){if(typeof o!="boolean")throw new Error(`Expected boolean, not ${o}`)}_assert.bool=bool;function isBytes$4(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function bytes$1(o,...a){if(!isBytes$4(o))throw new Error("Expected Uint8Array");if(a.length>0&&!a.includes(o.length))throw new Error(`Expected Uint8Array of length ${a}, not of length=${o.length}`)}_assert.bytes=bytes$1;function hash$5(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$1(o.outputLen),number$1(o.blockLen)}_assert.hash=hash$5;function exists$1(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}_assert.exists=exists$1;function output$1(o,a){bytes$1(o);const c=a.outputLen;if(o.lengthnew Uint8Array(E1.buffer,E1.byteOffset,E1.byteLength);o.u8=c;const d=E1=>new Uint32Array(E1.buffer,E1.byteOffset,Math.floor(E1.byteLength/4));o.u32=d;function tt(E1){return E1 instanceof Uint8Array||E1!=null&&typeof E1=="object"&&E1.constructor.name==="Uint8Array"}const nt=E1=>new DataView(E1.buffer,E1.byteOffset,E1.byteLength);o.createView=nt;const $a=(E1,B1)=>E1<<32-B1|E1>>>B1;if(o.rotr=$a,o.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,!o.isLE)throw new Error("Non little-endian hardware is not supported");const Ys=Array.from({length:256},(E1,B1)=>B1.toString(16).padStart(2,"0"));function gu(E1){if(!tt(E1))throw new Error("Uint8Array expected");let B1="";for(let lv=0;lv=xu._0&&E1<=xu._9)return E1-xu._0;if(E1>=xu._A&&E1<=xu._F)return E1-(xu._A-10);if(E1>=xu._a&&E1<=xu._f)return E1-(xu._a-10)}function Iu(E1){if(typeof E1!="string")throw new Error("hex string expected, got "+typeof E1);const B1=E1.length,lv=B1/2;if(B1%2)throw new Error("padded hex string expected, got unpadded hex of length "+B1);const j1=new Uint8Array(lv);for(let r1=0,t1=0;r1{};o.nextTick=Xu;async function i0(E1,B1,lv){let j1=Date.now();for(let r1=0;r1=0&&t1E1().update(w0(j1)).digest(),lv=E1();return B1.outputLen=lv.outputLen,B1.blockLen=lv.blockLen,B1.create=()=>E1(),B1}o.wrapConstructor=q0;function F0(E1){const B1=(j1,r1)=>E1(r1).update(w0(j1)).digest(),lv=E1({});return B1.outputLen=lv.outputLen,B1.blockLen=lv.blockLen,B1.create=j1=>E1(j1),B1}o.wrapConstructorWithOpts=F0;function u1(E1){const B1=(j1,r1)=>E1(r1).update(w0(j1)).digest(),lv=E1({});return B1.outputLen=lv.outputLen,B1.blockLen=lv.blockLen,B1.create=j1=>E1(j1),B1}o.wrapXOFConstructorWithOpts=u1;function g1(E1=32){if(a.crypto&&typeof a.crypto.getRandomValues=="function")return a.crypto.getRandomValues(new Uint8Array(E1));throw new Error("crypto.getRandomValues must be defined")}o.randomBytes=g1})(utils$t);Object.defineProperty(_sha2,"__esModule",{value:!0});_sha2.SHA2=void 0;const _assert_js_1=_assert,utils_js_1$1=utils$t;function setBigUint64$1(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ys=Number(c&nt),gu=d?4:0,xu=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+xu,Ys,d)}let SHA2$1=class extends utils_js_1$1.Hash{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=(0,utils_js_1$1.createView)(this.buffer)}update(a){(0,_assert_js_1.exists)(this);const{view:c,buffer:d,blockLen:tt}=this;a=(0,utils_js_1$1.toBytes)(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iuo&a^~o&c,Maj$1=(o,a,c)=>o&a^o&c^a&c,SHA256_K$1=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),IV$1=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),SHA256_W$1=new Uint32Array(64);let SHA256$3=class extends _sha2_js_1.SHA2{constructor(){super(64,32,8,!1),this.A=IV$1[0]|0,this.B=IV$1[1]|0,this.C=IV$1[2]|0,this.D=IV$1[3]|0,this.E=IV$1[4]|0,this.F=IV$1[5]|0,this.G=IV$1[6]|0,this.H=IV$1[7]|0}get(){const{A:a,B:c,C:d,D:tt,E:nt,F:$a,G:Ys,H:gu}=this;return[a,c,d,tt,nt,$a,Ys,gu]}set(a,c,d,tt,nt,$a,Ys,gu){this.A=a|0,this.B=c|0,this.C=d|0,this.D=tt|0,this.E=nt|0,this.F=$a|0,this.G=Ys|0,this.H=gu|0}process(a,c){for(let Iu=0;Iu<16;Iu++,c+=4)SHA256_W$1[Iu]=a.getUint32(c,!1);for(let Iu=16;Iu<64;Iu++){const Xu=SHA256_W$1[Iu-15],i0=SHA256_W$1[Iu-2],p0=(0,utils_js_1.rotr)(Xu,7)^(0,utils_js_1.rotr)(Xu,18)^Xu>>>3,w0=(0,utils_js_1.rotr)(i0,17)^(0,utils_js_1.rotr)(i0,19)^i0>>>10;SHA256_W$1[Iu]=w0+SHA256_W$1[Iu-7]+p0+SHA256_W$1[Iu-16]|0}let{A:d,B:tt,C:nt,D:$a,E:Ys,F:gu,G:xu,H:$u}=this;for(let Iu=0;Iu<64;Iu++){const Xu=(0,utils_js_1.rotr)(Ys,6)^(0,utils_js_1.rotr)(Ys,11)^(0,utils_js_1.rotr)(Ys,25),i0=$u+Xu+Chi$1(Ys,gu,xu)+SHA256_K$1[Iu]+SHA256_W$1[Iu]|0,w0=((0,utils_js_1.rotr)(d,2)^(0,utils_js_1.rotr)(d,13)^(0,utils_js_1.rotr)(d,22))+Maj$1(d,tt,nt)|0;$u=xu,xu=gu,gu=Ys,Ys=$a+i0|0,$a=nt,nt=tt,tt=d,d=i0+w0|0}d=d+this.A|0,tt=tt+this.B|0,nt=nt+this.C|0,$a=$a+this.D|0,Ys=Ys+this.E|0,gu=gu+this.F|0,xu=xu+this.G|0,$u=$u+this.H|0,this.set(d,tt,nt,$a,Ys,gu,xu,$u)}roundClean(){SHA256_W$1.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}},SHA224$1=class extends SHA256$3{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}};sha256$4.sha256=(0,utils_js_1.wrapConstructor)(()=>new SHA256$3);sha256$4.sha224=(0,utils_js_1.wrapConstructor)(()=>new SHA224$1);var signature$2={};Object.defineProperty(signature$2,"__esModule",{value:!0});signature$2.Signature=void 0;const types_1$7=lib$8;let Signature$4=class extends types_1$7.Assignable{};signature$2.Signature=Signature$4;var __awaiter$g=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(sign$2,"__esModule",{value:!0});sign$2.signDelegateAction=sign$2.signTransaction=void 0;const sha256_1$1=sha256$4,actions_1=actions,create_transaction_1=create_transaction,schema_1=schema,signature_1=signature$2;function signTransactionObject(o,a,c,d){return __awaiter$g(this,void 0,void 0,function*(){const tt=(0,schema_1.encodeTransaction)(o),nt=new Uint8Array((0,sha256_1$1.sha256)(tt)),$a=yield a.signMessage(tt,c,d),Ys=new schema_1.SignedTransaction({transaction:o,signature:new signature_1.Signature({keyType:o.publicKey.keyType,data:$a.signature})});return[nt,Ys]})}function signTransaction(...o){return __awaiter$g(this,void 0,void 0,function*(){if(o[0].constructor===schema_1.Transaction){const[a,c,d,tt]=o;return signTransactionObject(a,c,d,tt)}else{const[a,c,d,tt,nt,$a,Ys]=o,gu=yield nt.getPublicKey($a,Ys),xu=(0,create_transaction_1.createTransaction)($a,gu,a,c,d,tt);return signTransactionObject(xu,nt,$a,Ys)}})}sign$2.signTransaction=signTransaction;function signDelegateAction({delegateAction:o,signer:a}){return __awaiter$g(this,void 0,void 0,function*(){const c=(0,schema_1.encodeDelegateAction)(o),d=yield a.sign(c),tt=new actions_1.SignedDelegate({delegateAction:o,signature:new signature_1.Signature({keyType:o.publicKey.keyType,data:d})});return{hash:new Uint8Array((0,sha256_1$1.sha256)(c)),signedDelegateAction:tt}})}sign$2.signDelegateAction=signDelegateAction;(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(d,tt,nt,$a){$a===void 0&&($a=nt);var Ys=Object.getOwnPropertyDescriptor(tt,nt);(!Ys||("get"in Ys?!tt.__esModule:Ys.writable||Ys.configurable))&&(Ys={enumerable:!0,get:function(){return tt[nt]}}),Object.defineProperty(d,$a,Ys)}:function(d,tt,nt,$a){$a===void 0&&($a=nt),d[$a]=tt[nt]}),c=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(d,tt){for(var nt in d)nt!=="default"&&!Object.prototype.hasOwnProperty.call(tt,nt)&&a(tt,d,nt)};Object.defineProperty(o,"__esModule",{value:!0}),c(action_creators,o),c(actions,o),c(create_transaction,o),c(delegate,o),c(schema,o),c(sign$2,o),c(signature$2,o)})(lib$5);var provider={};Object.defineProperty(provider,"__esModule",{value:!0});provider.Provider=void 0;let Provider$1=class{};provider.Provider=Provider$1;var fetch_json={},httpErrors={exports:{}};/*! + */var browser$g=depd$1;function depd$1(o){if(!o)throw new TypeError("argument namespace is required");function a(c){}return a._file=void 0,a._ignored=!0,a._namespace=o,a._traced=!1,a._warned=Object.create(null),a.function=wrapfunction$1,a.property=wrapproperty$1,a}function wrapfunction$1(o,a){if(typeof o!="function")throw new TypeError("argument fn must be a function");return o}function wrapproperty$1(o,a,c){if(!o||typeof o!="object"&&typeof o!="function")throw new TypeError("argument obj must be object");var d=Object.getOwnPropertyDescriptor(o,a);if(!d)throw new TypeError("must call property on owner object");if(!d.configurable)throw new TypeError("property must be configurable")}var __importDefault$b=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(validators$3,"__esModule",{value:!0});validators$3.diffEpochValidators=validators$3.findSeatPrice=void 0;const bn_js_1$9=__importDefault$b(bnExports$1),depd_1$1=__importDefault$b(browser$g);function findSeatPrice(o,a,c,d){return d&&d<49?findSeatPriceForProtocolBefore49(o,a):(c||((0,depd_1$1.default)("findSeatPrice(validators, maxNumberOfSeats)")("`use `findSeatPrice(validators, maxNumberOfSeats, minimumStakeRatio)` instead"),c=[1,6250]),findSeatPriceForProtocolAfter49(o,a,c))}validators$3.findSeatPrice=findSeatPrice;function findSeatPriceForProtocolBefore49(o,a){const c=o.map(Ws=>new bn_js_1$9.default(Ws.stake,10)).sort((Ws,gu)=>Ws.cmp(gu)),d=new bn_js_1$9.default(a),tt=c.reduce((Ws,gu)=>Ws.add(gu));if(tt.lt(d))throw new Error("Stakes are below seats");let nt=new bn_js_1$9.default(1),$a=tt.add(new bn_js_1$9.default(1));for(;!nt.eq($a.sub(new bn_js_1$9.default(1)));){const Ws=nt.add($a).div(new bn_js_1$9.default(2));let gu=!1,Su=new bn_js_1$9.default(0);for(let $u=0;$unew bn_js_1$9.default(nt.stake,10)).sort((nt,$a)=>nt.cmp($a)),tt=d.reduce((nt,$a)=>nt.add($a));return o.lengthc.set(tt.account_id,tt));const d=new Set(a.map(tt=>tt.account_id));return{newValidators:a.filter(tt=>!c.has(tt.account_id)),removedValidators:o.filter(tt=>!d.has(tt.account_id)),changedValidators:a.filter(tt=>c.has(tt.account_id)&&c.get(tt.account_id).stake!=tt.stake).map(tt=>({current:c.get(tt.account_id),next:tt}))}}validators$3.diffEpochValidators=diffEpochValidators;(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(d,tt,nt,$a){$a===void 0&&($a=nt);var Ws=Object.getOwnPropertyDescriptor(tt,nt);(!Ws||("get"in Ws?!tt.__esModule:Ws.writable||Ws.configurable))&&(Ws={enumerable:!0,get:function(){return tt[nt]}}),Object.defineProperty(d,$a,Ws)}:function(d,tt,nt,$a){$a===void 0&&($a=nt),d[$a]=tt[nt]}),c=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(d,tt){for(var nt in d)nt!=="default"&&!Object.prototype.hasOwnProperty.call(tt,nt)&&a(tt,d,nt)};Object.defineProperty(o,"__esModule",{value:!0}),c(constants$5,o),c(errors$6,o),c(format$6,o),c(logging,o),c(provider$2,o),c(validators$3,o),c(logger$3,o)})(lib$9);var ed25519={},sha512$2={},_sha2$1={},_assert$1={};Object.defineProperty(_assert$1,"__esModule",{value:!0});_assert$1.output=_assert$1.exists=_assert$1.hash=_assert$1.bytes=_assert$1.bool=_assert$1.number=void 0;function number$2(o){if(!Number.isSafeInteger(o)||o<0)throw new Error(`Wrong positive integer: ${o}`)}_assert$1.number=number$2;function bool$1(o){if(typeof o!="boolean")throw new Error(`Expected boolean, not ${o}`)}_assert$1.bool=bool$1;function bytes$2(o,...a){if(!(o instanceof Uint8Array))throw new Error("Expected Uint8Array");if(a.length>0&&!a.includes(o.length))throw new Error(`Expected Uint8Array of length ${a}, not of length=${o.length}`)}_assert$1.bytes=bytes$2;function hash$6(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$2(o.outputLen),number$2(o.blockLen)}_assert$1.hash=hash$6;function exists$2(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}_assert$1.exists=exists$2;function output$2(o,a){bytes$2(o);const c=a.outputLen;if(o.lengthu1 instanceof Uint8Array,d=u1=>new Uint8Array(u1.buffer,u1.byteOffset,u1.byteLength);o.u8=d;const tt=u1=>new Uint32Array(u1.buffer,u1.byteOffset,Math.floor(u1.byteLength/4));o.u32=tt;const nt=u1=>new DataView(u1.buffer,u1.byteOffset,u1.byteLength);o.createView=nt;const $a=(u1,g1)=>u1<<32-g1|u1>>>g1;if(o.rotr=$a,o.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,!o.isLE)throw new Error("Non little-endian hardware is not supported");const Ws=Array.from({length:256},(u1,g1)=>g1.toString(16).padStart(2,"0"));function gu(u1){if(!c(u1))throw new Error("Uint8Array expected");let g1="";for(let E1=0;E1{};o.nextTick=$u;async function Iu(u1,g1,E1){let B1=Date.now();for(let lv=0;lv=0&&j1B1+lv.length,0));let E1=0;return u1.forEach(B1=>{if(!c(B1))throw new Error("Uint8Array expected");g1.set(B1,E1),E1+=B1.length}),g1}o.concatBytes=p0;class y0{clone(){return this._cloneInto()}}o.Hash=y0;const A0={}.toString;function $0(u1,g1){if(g1!==void 0&&A0.call(g1)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(u1,g1)}o.checkOpts=$0;function O0(u1){const g1=B1=>u1().update(r0(B1)).digest(),E1=u1();return g1.outputLen=E1.outputLen,g1.blockLen=E1.blockLen,g1.create=()=>u1(),g1}o.wrapConstructor=O0;function L0(u1){const g1=(B1,lv)=>u1(lv).update(r0(B1)).digest(),E1=u1({});return g1.outputLen=E1.outputLen,g1.blockLen=E1.blockLen,g1.create=B1=>u1(B1),g1}o.wrapConstructorWithOpts=L0;function V0(u1){const g1=(B1,lv)=>u1(lv).update(r0(B1)).digest(),E1=u1({});return g1.outputLen=E1.outputLen,g1.blockLen=E1.blockLen,g1.create=B1=>u1(B1),g1}o.wrapXOFConstructorWithOpts=V0;function F0(u1=32){if(a.crypto&&typeof a.crypto.getRandomValues=="function")return a.crypto.getRandomValues(new Uint8Array(u1));throw new Error("crypto.getRandomValues must be defined")}o.randomBytes=F0})(utils$y);Object.defineProperty(_sha2$1,"__esModule",{value:!0});_sha2$1.SHA2=void 0;const _assert_js_1$1=_assert$1,utils_js_1$8=utils$y;function setBigUint64$2(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ws=Number(c&nt),gu=d?4:0,Su=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+Su,Ws,d)}let SHA2$2=class extends utils_js_1$8.Hash{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=(0,utils_js_1$8.createView)(this.buffer)}update(a){(0,_assert_js_1$1.exists)(this);const{view:c,buffer:d,blockLen:tt}=this;a=(0,utils_js_1$8.toBytes)(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iu>_32n$1&U32_MASK64$1)}:{h:Number(o>>_32n$1&U32_MASK64$1)|0,l:Number(o&U32_MASK64$1)|0}}_u64.fromBig=fromBig$1;function split$7(o,a=!1){let c=new Uint32Array(o.length),d=new Uint32Array(o.length);for(let tt=0;ttBigInt(o>>>0)<<_32n$1|BigInt(a>>>0);_u64.toBig=toBig;const shrSH=(o,a,c)=>o>>>c;_u64.shrSH=shrSH;const shrSL=(o,a,c)=>o<<32-c|a>>>c;_u64.shrSL=shrSL;const rotrSH=(o,a,c)=>o>>>c|a<<32-c;_u64.rotrSH=rotrSH;const rotrSL=(o,a,c)=>o<<32-c|a>>>c;_u64.rotrSL=rotrSL;const rotrBH=(o,a,c)=>o<<64-c|a>>>c-32;_u64.rotrBH=rotrBH;const rotrBL=(o,a,c)=>o>>>c-32|a<<64-c;_u64.rotrBL=rotrBL;const rotr32H=(o,a)=>a;_u64.rotr32H=rotr32H;const rotr32L=(o,a)=>o;_u64.rotr32L=rotr32L;const rotlSH$1=(o,a,c)=>o<>>32-c;_u64.rotlSH=rotlSH$1;const rotlSL$1=(o,a,c)=>a<>>32-c;_u64.rotlSL=rotlSL$1;const rotlBH$1=(o,a,c)=>a<>>64-c;_u64.rotlBH=rotlBH$1;const rotlBL$1=(o,a,c)=>o<>>64-c;_u64.rotlBL=rotlBL$1;function add(o,a,c,d){const tt=(a>>>0)+(d>>>0);return{h:o+c+(tt/2**32|0)|0,l:tt|0}}_u64.add=add;const add3L=(o,a,c)=>(o>>>0)+(a>>>0)+(c>>>0);_u64.add3L=add3L;const add3H=(o,a,c,d)=>a+c+d+(o/2**32|0)|0;_u64.add3H=add3H;const add4L=(o,a,c,d)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0);_u64.add4L=add4L;const add4H=(o,a,c,d,tt)=>a+c+d+tt+(o/2**32|0)|0;_u64.add4H=add4H;const add5L=(o,a,c,d,tt)=>(o>>>0)+(a>>>0)+(c>>>0)+(d>>>0)+(tt>>>0);_u64.add5L=add5L;const add5H=(o,a,c,d,tt,nt)=>a+c+d+tt+nt+(o/2**32|0)|0;_u64.add5H=add5H;const u64={fromBig:fromBig$1,split:split$7,toBig,shrSH,shrSL,rotrSH,rotrSL,rotrBH,rotrBL,rotr32H,rotr32L,rotlSH:rotlSH$1,rotlSL:rotlSL$1,rotlBH:rotlBH$1,rotlBL:rotlBL$1,add,add3L,add3H,add4L,add4H,add5H,add5L};_u64.default=u64;Object.defineProperty(sha512$2,"__esModule",{value:!0});sha512$2.sha384=sha512$2.sha512_256=sha512$2.sha512_224=sha512$2.sha512=sha512$2.SHA512=void 0;const _sha2_js_1$1=_sha2$1,_u64_js_1=_u64,utils_js_1$7=utils$y,[SHA512_Kh,SHA512_Kl]=_u64_js_1.default.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(o=>BigInt(o))),SHA512_W_H=new Uint32Array(80),SHA512_W_L=new Uint32Array(80);let SHA512$3=class extends _sha2_js_1$1.SHA2{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:a,Al:c,Bh:d,Bl:tt,Ch:nt,Cl:$a,Dh:Ws,Dl:gu,Eh:Su,El:$u,Fh:Iu,Fl:Xu,Gh:r0,Gl:p0,Hh:y0,Hl:A0}=this;return[a,c,d,tt,nt,$a,Ws,gu,Su,$u,Iu,Xu,r0,p0,y0,A0]}set(a,c,d,tt,nt,$a,Ws,gu,Su,$u,Iu,Xu,r0,p0,y0,A0){this.Ah=a|0,this.Al=c|0,this.Bh=d|0,this.Bl=tt|0,this.Ch=nt|0,this.Cl=$a|0,this.Dh=Ws|0,this.Dl=gu|0,this.Eh=Su|0,this.El=$u|0,this.Fh=Iu|0,this.Fl=Xu|0,this.Gh=r0|0,this.Gl=p0|0,this.Hh=y0|0,this.Hl=A0|0}process(a,c){for(let L0=0;L0<16;L0++,c+=4)SHA512_W_H[L0]=a.getUint32(c),SHA512_W_L[L0]=a.getUint32(c+=4);for(let L0=16;L0<80;L0++){const V0=SHA512_W_H[L0-15]|0,F0=SHA512_W_L[L0-15]|0,u1=_u64_js_1.default.rotrSH(V0,F0,1)^_u64_js_1.default.rotrSH(V0,F0,8)^_u64_js_1.default.shrSH(V0,F0,7),g1=_u64_js_1.default.rotrSL(V0,F0,1)^_u64_js_1.default.rotrSL(V0,F0,8)^_u64_js_1.default.shrSL(V0,F0,7),E1=SHA512_W_H[L0-2]|0,B1=SHA512_W_L[L0-2]|0,lv=_u64_js_1.default.rotrSH(E1,B1,19)^_u64_js_1.default.rotrBH(E1,B1,61)^_u64_js_1.default.shrSH(E1,B1,6),j1=_u64_js_1.default.rotrSL(E1,B1,19)^_u64_js_1.default.rotrBL(E1,B1,61)^_u64_js_1.default.shrSL(E1,B1,6),r1=_u64_js_1.default.add4L(g1,j1,SHA512_W_L[L0-7],SHA512_W_L[L0-16]),t1=_u64_js_1.default.add4H(r1,u1,lv,SHA512_W_H[L0-7],SHA512_W_H[L0-16]);SHA512_W_H[L0]=t1|0,SHA512_W_L[L0]=r1|0}let{Ah:d,Al:tt,Bh:nt,Bl:$a,Ch:Ws,Cl:gu,Dh:Su,Dl:$u,Eh:Iu,El:Xu,Fh:r0,Fl:p0,Gh:y0,Gl:A0,Hh:$0,Hl:O0}=this;for(let L0=0;L0<80;L0++){const V0=_u64_js_1.default.rotrSH(Iu,Xu,14)^_u64_js_1.default.rotrSH(Iu,Xu,18)^_u64_js_1.default.rotrBH(Iu,Xu,41),F0=_u64_js_1.default.rotrSL(Iu,Xu,14)^_u64_js_1.default.rotrSL(Iu,Xu,18)^_u64_js_1.default.rotrBL(Iu,Xu,41),u1=Iu&r0^~Iu&y0,g1=Xu&p0^~Xu&A0,E1=_u64_js_1.default.add5L(O0,F0,g1,SHA512_Kl[L0],SHA512_W_L[L0]),B1=_u64_js_1.default.add5H(E1,$0,V0,u1,SHA512_Kh[L0],SHA512_W_H[L0]),lv=E1|0,j1=_u64_js_1.default.rotrSH(d,tt,28)^_u64_js_1.default.rotrBH(d,tt,34)^_u64_js_1.default.rotrBH(d,tt,39),r1=_u64_js_1.default.rotrSL(d,tt,28)^_u64_js_1.default.rotrBL(d,tt,34)^_u64_js_1.default.rotrBL(d,tt,39),t1=d&nt^d&Ws^nt&Ws,D0=tt&$a^tt&gu^$a&gu;$0=y0|0,O0=A0|0,y0=r0|0,A0=p0|0,r0=Iu|0,p0=Xu|0,{h:Iu,l:Xu}=_u64_js_1.default.add(Su|0,$u|0,B1|0,lv|0),Su=Ws|0,$u=gu|0,Ws=nt|0,gu=$a|0,nt=d|0,$a=tt|0;const Z0=_u64_js_1.default.add3L(lv,r1,D0);d=_u64_js_1.default.add3H(Z0,B1,j1,t1),tt=Z0|0}({h:d,l:tt}=_u64_js_1.default.add(this.Ah|0,this.Al|0,d|0,tt|0)),{h:nt,l:$a}=_u64_js_1.default.add(this.Bh|0,this.Bl|0,nt|0,$a|0),{h:Ws,l:gu}=_u64_js_1.default.add(this.Ch|0,this.Cl|0,Ws|0,gu|0),{h:Su,l:$u}=_u64_js_1.default.add(this.Dh|0,this.Dl|0,Su|0,$u|0),{h:Iu,l:Xu}=_u64_js_1.default.add(this.Eh|0,this.El|0,Iu|0,Xu|0),{h:r0,l:p0}=_u64_js_1.default.add(this.Fh|0,this.Fl|0,r0|0,p0|0),{h:y0,l:A0}=_u64_js_1.default.add(this.Gh|0,this.Gl|0,y0|0,A0|0),{h:$0,l:O0}=_u64_js_1.default.add(this.Hh|0,this.Hl|0,$0|0,O0|0),this.set(d,tt,nt,$a,Ws,gu,Su,$u,Iu,Xu,r0,p0,y0,A0,$0,O0)}roundClean(){SHA512_W_H.fill(0),SHA512_W_L.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};sha512$2.SHA512=SHA512$3;class SHA512_224 extends SHA512$3{constructor(){super(),this.Ah=-1942145080,this.Al=424955298,this.Bh=1944164710,this.Bl=-1982016298,this.Ch=502970286,this.Cl=855612546,this.Dh=1738396948,this.Dl=1479516111,this.Eh=258812777,this.El=2077511080,this.Fh=2011393907,this.Fl=79989058,this.Gh=1067287976,this.Gl=1780299464,this.Hh=286451373,this.Hl=-1848208735,this.outputLen=28}}class SHA512_256 extends SHA512$3{constructor(){super(),this.Ah=573645204,this.Al=-64227540,this.Bh=-1621794909,this.Bl=-934517566,this.Ch=596883563,this.Cl=1867755857,this.Dh=-1774684391,this.Dl=1497426621,this.Eh=-1775747358,this.El=-1467023389,this.Fh=-1101128155,this.Fl=1401305490,this.Gh=721525244,this.Gl=746961066,this.Hh=246885852,this.Hl=-2117784414,this.outputLen=32}}let SHA384$1=class extends SHA512$3{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}};sha512$2.sha512=(0,utils_js_1$7.wrapConstructor)(()=>new SHA512$3);sha512$2.sha512_224=(0,utils_js_1$7.wrapConstructor)(()=>new SHA512_224);sha512$2.sha512_256=(0,utils_js_1$7.wrapConstructor)(()=>new SHA512_256);sha512$2.sha384=(0,utils_js_1$7.wrapConstructor)(()=>new SHA384$1);var edwards$1={},modular={},utils$x={};Object.defineProperty(utils$x,"__esModule",{value:!0});utils$x.validateObject=utils$x.createHmacDrbg=utils$x.bitMask=utils$x.bitSet=utils$x.bitGet=utils$x.bitLen=utils$x.utf8ToBytes=utils$x.equalBytes=utils$x.concatBytes=utils$x.ensureBytes=utils$x.numberToVarBytesBE=utils$x.numberToBytesLE=utils$x.numberToBytesBE=utils$x.bytesToNumberLE=utils$x.bytesToNumberBE=utils$x.hexToBytes=utils$x.hexToNumber=utils$x.numberToHexUnpadded=utils$x.bytesToHex=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$a=BigInt(0),_1n$a=BigInt(1),_2n$6=BigInt(2),u8a=o=>o instanceof Uint8Array,hexes$1=Array.from({length:256},(o,a)=>a.toString(16).padStart(2,"0"));function bytesToHex$1(o){if(!u8a(o))throw new Error("Uint8Array expected");let a="";for(let c=0;cd+tt.length,0));let c=0;return o.forEach(d=>{if(!u8a(d))throw new Error("Uint8Array expected");a.set(d,c),c+=d.length}),a}utils$x.concatBytes=concatBytes$2;function equalBytes$1(o,a){if(o.length!==a.length)return!1;for(let c=0;c_0n$a;o>>=_1n$a,a+=1);return a}utils$x.bitLen=bitLen$1;function bitGet$1(o,a){return o>>BigInt(a)&_1n$a}utils$x.bitGet=bitGet$1;const bitSet$1=(o,a,c)=>o|(c?_1n$a:_0n$a)<(_2n$6<new Uint8Array(o),u8fr$1=o=>Uint8Array.from(o);function createHmacDrbg$1(o,a,c){if(typeof o!="number"||o<2)throw new Error("hashLen must be a number");if(typeof a!="number"||a<2)throw new Error("qByteLen must be a number");if(typeof c!="function")throw new Error("hmacFn must be a function");let d=u8n$1(o),tt=u8n$1(o),nt=0;const $a=()=>{d.fill(1),tt.fill(0),nt=0},Ws=(...Iu)=>c(tt,d,...Iu),gu=(Iu=u8n$1())=>{tt=Ws(u8fr$1([0]),Iu),d=Ws(),Iu.length!==0&&(tt=Ws(u8fr$1([1]),Iu),d=Ws())},Su=()=>{if(nt++>=1e3)throw new Error("drbg: tried 1000 values");let Iu=0;const Xu=[];for(;Iu{$a(),gu(Iu);let r0;for(;!(r0=Xu(Su()));)gu();return $a(),r0}}utils$x.createHmacDrbg=createHmacDrbg$1;const validatorFns$1={bigint:o=>typeof o=="bigint",function:o=>typeof o=="function",boolean:o=>typeof o=="boolean",string:o=>typeof o=="string",stringOrUint8Array:o=>typeof o=="string"||o instanceof Uint8Array,isSafeInteger:o=>Number.isSafeInteger(o),array:o=>Array.isArray(o),field:(o,a)=>a.Fp.isValid(o),hash:o=>typeof o=="function"&&Number.isSafeInteger(o.outputLen)};function validateObject$1(o,a,c={}){const d=(tt,nt,$a)=>{const Ws=validatorFns$1[nt];if(typeof Ws!="function")throw new Error(`Invalid validator "${nt}", expected function`);const gu=o[tt];if(!($a&&gu===void 0)&&!Ws(gu,o))throw new Error(`Invalid param ${String(tt)}=${gu} (${typeof gu}), expected ${nt}`)};for(const[tt,nt]of Object.entries(a))d(tt,nt,!1);for(const[tt,nt]of Object.entries(c))d(tt,nt,!0);return o}utils$x.validateObject=validateObject$1;Object.defineProperty(modular,"__esModule",{value:!0});modular.mapHashToField=modular.getMinHashLength=modular.getFieldBytesLength=modular.hashToPrivateScalar=modular.FpSqrtEven=modular.FpSqrtOdd=modular.Field=modular.nLength=modular.FpIsSquare=modular.FpDiv=modular.FpInvertBatch=modular.FpPow=modular.validateField=modular.isNegativeLE=modular.FpSqrt=modular.tonelliShanks=modular.invert=modular.pow2=modular.pow=modular.mod=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const utils_js_1$6=utils$x,_0n$9=BigInt(0),_1n$9=BigInt(1),_2n$5=BigInt(2),_3n$2=BigInt(3),_4n$1=BigInt(4),_5n$1=BigInt(5),_8n$2=BigInt(8);BigInt(9);BigInt(16);function mod$1(o,a){const c=o%a;return c>=_0n$9?c:a+c}modular.mod=mod$1;function pow$3(o,a,c){if(c<=_0n$9||a<_0n$9)throw new Error("Expected power/modulo > 0");if(c===_1n$9)return _0n$9;let d=_1n$9;for(;a>_0n$9;)a&_1n$9&&(d=d*o%c),o=o*o%c,a>>=_1n$9;return d}modular.pow=pow$3;function pow2(o,a,c){let d=o;for(;a-- >_0n$9;)d*=d,d%=c;return d}modular.pow2=pow2;function invert$1(o,a){if(o===_0n$9||a<=_0n$9)throw new Error(`invert: expected positive integers, got n=${o} mod=${a}`);let c=mod$1(o,a),d=a,tt=_0n$9,nt=_1n$9;for(;c!==_0n$9;){const Ws=d/c,gu=d%c,Su=tt-nt*Ws;d=c,c=gu,tt=nt,nt=Su}if(d!==_1n$9)throw new Error("invert: does not exist");return mod$1(tt,a)}modular.invert=invert$1;function tonelliShanks$1(o){const a=(o-_1n$9)/_2n$5;let c,d,tt;for(c=o-_1n$9,d=0;c%_2n$5===_0n$9;c/=_2n$5,d++);for(tt=_2n$5;tt(mod$1(o,a)&_1n$9)===_1n$9;modular.isNegativeLE=isNegativeLE;const FIELD_FIELDS$1=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField$1(o){const a={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},c=FIELD_FIELDS$1.reduce((d,tt)=>(d[tt]="function",d),a);return(0,utils_js_1$6.validateObject)(o,c)}modular.validateField=validateField$1;function FpPow$1(o,a,c){if(c<_0n$9)throw new Error("Expected power > 0");if(c===_0n$9)return o.ONE;if(c===_1n$9)return a;let d=o.ONE,tt=a;for(;c>_0n$9;)c&_1n$9&&(d=o.mul(d,tt)),tt=o.sqr(tt),c>>=_1n$9;return d}modular.FpPow=FpPow$1;function FpInvertBatch$1(o,a){const c=new Array(a.length),d=a.reduce((nt,$a,Ws)=>o.is0($a)?nt:(c[Ws]=nt,o.mul(nt,$a)),o.ONE),tt=o.inv(d);return a.reduceRight((nt,$a,Ws)=>o.is0($a)?nt:(c[Ws]=o.mul(nt,c[Ws]),o.mul(nt,$a)),tt),c}modular.FpInvertBatch=FpInvertBatch$1;function FpDiv(o,a,c){return o.mul(a,typeof c=="bigint"?invert$1(c,o.ORDER):o.inv(c))}modular.FpDiv=FpDiv;function FpIsSquare(o){const a=(o.ORDER-_1n$9)/_2n$5;return c=>{const d=o.pow(c,a);return o.eql(d,o.ZERO)||o.eql(d,o.ONE)}}modular.FpIsSquare=FpIsSquare;function nLength$1(o,a){const c=a!==void 0?a:o.toString(2).length,d=Math.ceil(c/8);return{nBitLength:c,nByteLength:d}}modular.nLength=nLength$1;function Field$1(o,a,c=!1,d={}){if(o<=_0n$9)throw new Error(`Expected Field ORDER > 0, got ${o}`);const{nBitLength:tt,nByteLength:nt}=nLength$1(o,a);if(nt>2048)throw new Error("Field lengths over 2048 bytes are not supported");const $a=FpSqrt$1(o),Ws=Object.freeze({ORDER:o,BITS:tt,BYTES:nt,MASK:(0,utils_js_1$6.bitMask)(tt),ZERO:_0n$9,ONE:_1n$9,create:gu=>mod$1(gu,o),isValid:gu=>{if(typeof gu!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof gu}`);return _0n$9<=gu&&gugu===_0n$9,isOdd:gu=>(gu&_1n$9)===_1n$9,neg:gu=>mod$1(-gu,o),eql:(gu,Su)=>gu===Su,sqr:gu=>mod$1(gu*gu,o),add:(gu,Su)=>mod$1(gu+Su,o),sub:(gu,Su)=>mod$1(gu-Su,o),mul:(gu,Su)=>mod$1(gu*Su,o),pow:(gu,Su)=>FpPow$1(Ws,gu,Su),div:(gu,Su)=>mod$1(gu*invert$1(Su,o),o),sqrN:gu=>gu*gu,addN:(gu,Su)=>gu+Su,subN:(gu,Su)=>gu-Su,mulN:(gu,Su)=>gu*Su,inv:gu=>invert$1(gu,o),sqrt:d.sqrt||(gu=>$a(Ws,gu)),invertBatch:gu=>FpInvertBatch$1(Ws,gu),cmov:(gu,Su,$u)=>$u?Su:gu,toBytes:gu=>c?(0,utils_js_1$6.numberToBytesLE)(gu,nt):(0,utils_js_1$6.numberToBytesBE)(gu,nt),fromBytes:gu=>{if(gu.length!==nt)throw new Error(`Fp.fromBytes: expected ${nt}, got ${gu.length}`);return c?(0,utils_js_1$6.bytesToNumberLE)(gu):(0,utils_js_1$6.bytesToNumberBE)(gu)}});return Object.freeze(Ws)}modular.Field=Field$1;function FpSqrtOdd(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?c:o.neg(c)}modular.FpSqrtOdd=FpSqrtOdd;function FpSqrtEven(o,a){if(!o.isOdd)throw new Error("Field doesn't have isOdd");const c=o.sqrt(a);return o.isOdd(c)?o.neg(c):c}modular.FpSqrtEven=FpSqrtEven;function hashToPrivateScalar(o,a,c=!1){o=(0,utils_js_1$6.ensureBytes)("privateHash",o);const d=o.length,tt=nLength$1(a).nByteLength+8;if(tt<24||d1024)throw new Error(`hashToPrivateScalar: expected ${tt}-1024 bytes of input, got ${d}`);const nt=c?(0,utils_js_1$6.bytesToNumberLE)(o):(0,utils_js_1$6.bytesToNumberBE)(o);return mod$1(nt,a-_1n$9)+_1n$9}modular.hashToPrivateScalar=hashToPrivateScalar;function getFieldBytesLength$1(o){if(typeof o!="bigint")throw new Error("field order must be bigint");const a=o.toString(2).length;return Math.ceil(a/8)}modular.getFieldBytesLength=getFieldBytesLength$1;function getMinHashLength$1(o){const a=getFieldBytesLength$1(o);return a+Math.ceil(a/2)}modular.getMinHashLength=getMinHashLength$1;function mapHashToField$1(o,a,c=!1){const d=o.length,tt=getFieldBytesLength$1(a),nt=getMinHashLength$1(a);if(d<16||d1024)throw new Error(`expected ${nt}-1024 bytes of input, got ${d}`);const $a=c?(0,utils_js_1$6.bytesToNumberBE)(o):(0,utils_js_1$6.bytesToNumberLE)(o),Ws=mod$1($a,a-_1n$9)+_1n$9;return c?(0,utils_js_1$6.numberToBytesLE)(Ws,tt):(0,utils_js_1$6.numberToBytesBE)(Ws,tt)}modular.mapHashToField=mapHashToField$1;var curve$2={};Object.defineProperty(curve$2,"__esModule",{value:!0});curve$2.validateBasic=curve$2.wNAF=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const modular_js_1$3=modular,utils_js_1$5=utils$x,_0n$8=BigInt(0),_1n$8=BigInt(1);function wNAF$1(o,a){const c=(tt,nt)=>{const $a=nt.negate();return tt?$a:nt},d=tt=>{const nt=Math.ceil(a/tt)+1,$a=2**(tt-1);return{windows:nt,windowSize:$a}};return{constTimeNegate:c,unsafeLadder(tt,nt){let $a=o.ZERO,Ws=tt;for(;nt>_0n$8;)nt&_1n$8&&($a=$a.add(Ws)),Ws=Ws.double(),nt>>=_1n$8;return $a},precomputeWindow(tt,nt){const{windows:$a,windowSize:Ws}=d(nt),gu=[];let Su=tt,$u=Su;for(let Iu=0;Iu<$a;Iu++){$u=Su,gu.push($u);for(let Xu=1;Xu>=r0,A0>gu&&(A0-=Xu,$a+=_1n$8);const $0=y0,O0=y0+Math.abs(A0)-1,L0=p0%2!==0,V0=A0<0;A0===0?$u=$u.add(c(L0,nt[$0])):Su=Su.add(c(V0,nt[O0]))}return{p:Su,f:$u}},wNAFCached(tt,nt,$a,Ws){const gu=tt._WINDOW_SIZE||1;let Su=nt.get(tt);return Su||(Su=this.precomputeWindow(tt,gu),gu!==1&&nt.set(tt,Ws(Su))),this.wNAF(gu,Su,$a)}}}curve$2.wNAF=wNAF$1;function validateBasic$1(o){return(0,modular_js_1$3.validateField)(o.Fp),(0,utils_js_1$5.validateObject)(o,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...(0,modular_js_1$3.nLength)(o.n,o.nBitLength),...o,p:o.Fp.ORDER})}curve$2.validateBasic=validateBasic$1;Object.defineProperty(edwards$1,"__esModule",{value:!0});edwards$1.twistedEdwards=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const modular_js_1$2=modular,ut$2=utils$x,utils_js_1$4=utils$x,curve_js_1=curve$2,_0n$7=BigInt(0),_1n$7=BigInt(1),_2n$4=BigInt(2),_8n$1=BigInt(8),VERIFY_DEFAULT={zip215:!0};function validateOpts$4(o){const a=(0,curve_js_1.validateBasic)(o);return ut$2.validateObject(o,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...a})}function twistedEdwards(o){const a=validateOpts$4(o),{Fp:c,n:d,prehash:tt,hash:nt,randomBytes:$a,nByteLength:Ws,h:gu}=a,Su=_2n$4<{try{return{isValid:!0,value:c.sqrt(m1*c.inv(c1))}}catch{return{isValid:!1,value:_0n$7}}}),Xu=a.adjustScalarBytes||(m1=>m1),r0=a.domain||((m1,c1,G0)=>{if(c1.length||G0)throw new Error("Contexts/pre-hash are not supported");return m1}),p0=m1=>typeof m1=="bigint"&&_0n$7p0(m1)&&p0(c1)&&m1m1===_0n$7||y0(m1,Su);function $0(m1,c1){if(y0(m1,c1))return m1;throw new Error(`Expected valid scalar < ${c1}, got ${typeof m1} ${m1}`)}function O0(m1){return m1===_0n$7?m1:$0(m1,d)}const L0=new Map;function V0(m1){if(!(m1 instanceof F0))throw new Error("ExtendedPoint expected")}class F0{constructor(c1,G0,o1,d1){if(this.ex=c1,this.ey=G0,this.ez=o1,this.et=d1,!A0(c1))throw new Error("x required");if(!A0(G0))throw new Error("y required");if(!A0(o1))throw new Error("z required");if(!A0(d1))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(c1){if(c1 instanceof F0)throw new Error("extended point not allowed");const{x:G0,y:o1}=c1||{};if(!A0(G0)||!A0(o1))throw new Error("invalid affine point");return new F0(G0,o1,_1n$7,$u(G0*o1))}static normalizeZ(c1){const G0=c.invertBatch(c1.map(o1=>o1.ez));return c1.map((o1,d1)=>o1.toAffine(G0[d1])).map(F0.fromAffine)}_setWindowSize(c1){this._WINDOW_SIZE=c1,L0.delete(this)}assertValidity(){const{a:c1,d:G0}=a;if(this.is0())throw new Error("bad point: ZERO");const{ex:o1,ey:d1,ez:R1,et:O1}=this,Q1=$u(o1*o1),rv=$u(d1*d1),D1=$u(R1*R1),ev=$u(D1*D1),Mv=$u(Q1*c1),Zv=$u(D1*$u(Mv+rv)),fv=$u(ev+$u(G0*$u(Q1*rv)));if(Zv!==fv)throw new Error("bad point: equation left != right (1)");const cv=$u(o1*d1),ly=$u(R1*O1);if(cv!==ly)throw new Error("bad point: equation left != right (2)")}equals(c1){V0(c1);const{ex:G0,ey:o1,ez:d1}=this,{ex:R1,ey:O1,ez:Q1}=c1,rv=$u(G0*Q1),D1=$u(R1*d1),ev=$u(o1*Q1),Mv=$u(O1*d1);return rv===D1&&ev===Mv}is0(){return this.equals(F0.ZERO)}negate(){return new F0($u(-this.ex),this.ey,this.ez,$u(-this.et))}double(){const{a:c1}=a,{ex:G0,ey:o1,ez:d1}=this,R1=$u(G0*G0),O1=$u(o1*o1),Q1=$u(_2n$4*$u(d1*d1)),rv=$u(c1*R1),D1=G0+o1,ev=$u($u(D1*D1)-R1-O1),Mv=rv+O1,Zv=Mv-Q1,fv=rv-O1,cv=$u(ev*Zv),ly=$u(Mv*fv),Cy=$u(ev*fv),Ly=$u(Zv*Mv);return new F0(cv,ly,Ly,Cy)}add(c1){V0(c1);const{a:G0,d:o1}=a,{ex:d1,ey:R1,ez:O1,et:Q1}=this,{ex:rv,ey:D1,ez:ev,et:Mv}=c1;if(G0===BigInt(-1)){const vw=$u((R1-d1)*(D1+rv)),Hw=$u((R1+d1)*(D1-rv)),uw=$u(Hw-vw);if(uw===_0n$7)return this.double();const Nw=$u(O1*_2n$4*Mv),lw=$u(Q1*_2n$4*ev),Lw=lw+Nw,zw=Hw+vw,A2=lw-Nw,kv=$u(Lw*uw),Y1=$u(zw*A2),tv=$u(Lw*A2),Yv=$u(uw*zw);return new F0(kv,Y1,Yv,tv)}const Zv=$u(d1*rv),fv=$u(R1*D1),cv=$u(Q1*o1*Mv),ly=$u(O1*ev),Cy=$u((d1+R1)*(rv+D1)-Zv-fv),Ly=ly-cv,Hy=ly+cv,t2=$u(fv-G0*Zv),C2=$u(Cy*Ly),Dy=$u(Hy*t2),jw=$u(Cy*t2),pw=$u(Ly*Hy);return new F0(C2,Dy,pw,jw)}subtract(c1){return this.add(c1.negate())}wNAF(c1){return E1.wNAFCached(this,L0,c1,F0.normalizeZ)}multiply(c1){const{p:G0,f:o1}=this.wNAF($0(c1,d));return F0.normalizeZ([G0,o1])[0]}multiplyUnsafe(c1){let G0=O0(c1);return G0===_0n$7?g1:this.equals(g1)||G0===_1n$7?this:this.equals(u1)?this.wNAF(G0).p:E1.unsafeLadder(this,G0)}isSmallOrder(){return this.multiplyUnsafe(gu).is0()}isTorsionFree(){return E1.unsafeLadder(this,d).is0()}toAffine(c1){const{ex:G0,ey:o1,ez:d1}=this,R1=this.is0();c1==null&&(c1=R1?_8n$1:c.inv(d1));const O1=$u(G0*c1),Q1=$u(o1*c1),rv=$u(d1*c1);if(R1)return{x:_0n$7,y:_1n$7};if(rv!==_1n$7)throw new Error("invZ was invalid");return{x:O1,y:Q1}}clearCofactor(){const{h:c1}=a;return c1===_1n$7?this:this.multiplyUnsafe(c1)}static fromHex(c1,G0=!1){const{d:o1,a:d1}=a,R1=c.BYTES;c1=(0,utils_js_1$4.ensureBytes)("pointHex",c1,R1);const O1=c1.slice(),Q1=c1[R1-1];O1[R1-1]=Q1&-129;const rv=ut$2.bytesToNumberLE(O1);rv===_0n$7||(G0?$0(rv,Su):$0(rv,c.ORDER));const D1=$u(rv*rv),ev=$u(D1-_1n$7),Mv=$u(o1*D1-d1);let{isValid:Zv,value:fv}=Iu(ev,Mv);if(!Zv)throw new Error("Point.fromHex: invalid y coordinate");const cv=(fv&_1n$7)===_1n$7,ly=(Q1&128)!==0;if(!G0&&fv===_0n$7&&ly)throw new Error("Point.fromHex: x=0 and x_0=1");return ly!==cv&&(fv=$u(-fv)),F0.fromAffine({x:fv,y:rv})}static fromPrivateKey(c1){return j1(c1).point}toRawBytes(){const{x:c1,y:G0}=this.toAffine(),o1=ut$2.numberToBytesLE(G0,c.BYTES);return o1[o1.length-1]|=c1&_1n$7?128:0,o1}toHex(){return ut$2.bytesToHex(this.toRawBytes())}}F0.BASE=new F0(a.Gx,a.Gy,_1n$7,$u(a.Gx*a.Gy)),F0.ZERO=new F0(_0n$7,_1n$7,_1n$7,_0n$7);const{BASE:u1,ZERO:g1}=F0,E1=(0,curve_js_1.wNAF)(F0,Ws*8);function B1(m1){return(0,modular_js_1$2.mod)(m1,d)}function lv(m1){return B1(ut$2.bytesToNumberLE(m1))}function j1(m1){const c1=Ws;m1=(0,utils_js_1$4.ensureBytes)("private key",m1,c1);const G0=(0,utils_js_1$4.ensureBytes)("hashed private key",nt(m1),2*c1),o1=Xu(G0.slice(0,c1)),d1=G0.slice(c1,2*c1),R1=lv(o1),O1=u1.multiply(R1),Q1=O1.toRawBytes();return{head:o1,prefix:d1,scalar:R1,point:O1,pointBytes:Q1}}function r1(m1){return j1(m1).pointBytes}function t1(m1=new Uint8Array,...c1){const G0=ut$2.concatBytes(...c1);return lv(nt(r0(G0,(0,utils_js_1$4.ensureBytes)("context",m1),!!tt)))}function D0(m1,c1,G0={}){m1=(0,utils_js_1$4.ensureBytes)("message",m1),tt&&(m1=tt(m1));const{prefix:o1,scalar:d1,pointBytes:R1}=j1(c1),O1=t1(G0.context,o1,m1),Q1=u1.multiply(O1).toRawBytes(),rv=t1(G0.context,Q1,R1,m1),D1=B1(O1+rv*d1);O0(D1);const ev=ut$2.concatBytes(Q1,ut$2.numberToBytesLE(D1,c.BYTES));return(0,utils_js_1$4.ensureBytes)("result",ev,Ws*2)}const Z0=VERIFY_DEFAULT;function f1(m1,c1,G0,o1=Z0){const{context:d1,zip215:R1}=o1,O1=c.BYTES;m1=(0,utils_js_1$4.ensureBytes)("signature",m1,2*O1),c1=(0,utils_js_1$4.ensureBytes)("message",c1),tt&&(c1=tt(c1));const Q1=ut$2.bytesToNumberLE(m1.slice(O1,2*O1));let rv,D1,ev;try{rv=F0.fromHex(G0,R1),D1=F0.fromHex(m1.slice(0,O1),R1),ev=u1.multiplyUnsafe(Q1)}catch{return!1}if(!R1&&rv.isSmallOrder())return!1;const Mv=t1(d1,D1.toRawBytes(),rv.toRawBytes(),c1);return D1.add(rv.multiplyUnsafe(Mv)).subtract(ev).clearCofactor().equals(F0.ZERO)}return u1._setWindowSize(8),{CURVE:a,getPublicKey:r1,sign:D0,verify:f1,ExtendedPoint:F0,utils:{getExtendedPublicKey:j1,randomPrivateKey:()=>$a(c.BYTES),precompute(m1=8,c1=F0.BASE){return c1._setWindowSize(m1),c1.multiply(BigInt(3)),c1}}}}edwards$1.twistedEdwards=twistedEdwards;var montgomery$1={};Object.defineProperty(montgomery$1,"__esModule",{value:!0});montgomery$1.montgomery=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const modular_js_1$1=modular,utils_js_1$3=utils$x,_0n$6=BigInt(0),_1n$6=BigInt(1);function validateOpts$3(o){return(0,utils_js_1$3.validateObject)(o,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...o})}function montgomery(o){const a=validateOpts$3(o),{P:c}=a,d=L0=>(0,modular_js_1$1.mod)(L0,c),tt=a.montgomeryBits,nt=Math.ceil(tt/8),$a=a.nByteLength,Ws=a.adjustScalarBytes||(L0=>L0),gu=a.powPminus2||(L0=>(0,modular_js_1$1.pow)(L0,c-BigInt(2),c));function Su(L0,V0,F0){const u1=d(L0*(V0-F0));return V0=d(V0-u1),F0=d(F0+u1),[V0,F0]}function $u(L0){if(typeof L0=="bigint"&&_0n$6<=L0&&L0=_0n$6;Z0--){const f1=u1>>Z0&_1n$6;r1^=f1,t1=Su(r1,E1,lv),E1=t1[0],lv=t1[1],t1=Su(r1,B1,j1),B1=t1[0],j1=t1[1],r1=f1;const w1=E1+B1,m1=d(w1*w1),c1=E1-B1,G0=d(c1*c1),o1=m1-G0,d1=lv+j1,R1=lv-j1,O1=d(R1*w1),Q1=d(d1*c1),rv=O1+Q1,D1=O1-Q1;lv=d(rv*rv),j1=d(g1*d(D1*D1)),E1=d(m1*G0),B1=d(o1*(m1+d(Iu*o1)))}t1=Su(r1,E1,lv),E1=t1[0],lv=t1[1],t1=Su(r1,B1,j1),B1=t1[0],j1=t1[1];const D0=gu(B1);return d(E1*D0)}function r0(L0){return(0,utils_js_1$3.numberToBytesLE)(d(L0),nt)}function p0(L0){const V0=(0,utils_js_1$3.ensureBytes)("u coordinate",L0,nt);return $a===nt&&(V0[$a-1]&=127),(0,utils_js_1$3.bytesToNumberLE)(V0)}function y0(L0){const V0=(0,utils_js_1$3.ensureBytes)("scalar",L0);if(V0.length!==nt&&V0.length!==$a)throw new Error(`Expected ${nt} or ${$a} bytes, got ${V0.length}`);return(0,utils_js_1$3.bytesToNumberLE)(Ws(V0))}function A0(L0,V0){const F0=p0(V0),u1=y0(L0),g1=Xu(F0,u1);if(g1===_0n$6)throw new Error("Invalid private or public key received");return r0(g1)}const $0=r0(a.Gu);function O0(L0){return A0(L0,$0)}return{scalarMult:A0,scalarMultBase:O0,getSharedSecret:(L0,V0)=>A0(L0,V0),getPublicKey:L0=>O0(L0),utils:{randomPrivateKey:()=>a.randomBytes(a.nByteLength)},GuBytes:$0}}montgomery$1.montgomery=montgomery;var hashToCurve={};Object.defineProperty(hashToCurve,"__esModule",{value:!0});hashToCurve.createHasher=hashToCurve.isogenyMap=hashToCurve.hash_to_field=hashToCurve.expand_message_xof=hashToCurve.expand_message_xmd=void 0;const modular_js_1=modular,utils_js_1$2=utils$x;function validateDST(o){if(o instanceof Uint8Array)return o;if(typeof o=="string")return(0,utils_js_1$2.utf8ToBytes)(o);throw new Error("DST must be Uint8Array or string")}const os2ip=utils_js_1$2.bytesToNumberBE;function i2osp(o,a){if(o<0||o>=1<<8*a)throw new Error(`bad I2OSP call: value=${o} length=${a}`);const c=Array.from({length:a}).fill(0);for(let d=a-1;d>=0;d--)c[d]=o&255,o>>>=8;return new Uint8Array(c)}function strxor(o,a){const c=new Uint8Array(o.length);for(let d=0;d255&&(a=d((0,utils_js_1$2.concatBytes)((0,utils_js_1$2.utf8ToBytes)("H2C-OVERSIZE-DST-"),a)));const{outputLen:tt,blockLen:nt}=d,$a=Math.ceil(c/tt);if($a>255)throw new Error("Invalid xmd length");const Ws=(0,utils_js_1$2.concatBytes)(a,i2osp(a.length,1)),gu=i2osp(0,nt),Su=i2osp(c,2),$u=new Array($a),Iu=d((0,utils_js_1$2.concatBytes)(gu,o,Su,i2osp(0,1),Ws));$u[0]=d((0,utils_js_1$2.concatBytes)(Iu,i2osp(1,1),Ws));for(let r0=1;r0<=$a;r0++){const p0=[strxor(Iu,$u[r0-1]),i2osp(r0+1,1),Ws];$u[r0]=d((0,utils_js_1$2.concatBytes)(...p0))}return(0,utils_js_1$2.concatBytes)(...$u).slice(0,c)}hashToCurve.expand_message_xmd=expand_message_xmd;function expand_message_xof(o,a,c,d,tt){if(isBytes$5(o),isBytes$5(a),isNum(c),a.length>255){const nt=Math.ceil(2*d/8);a=tt.create({dkLen:nt}).update((0,utils_js_1$2.utf8ToBytes)("H2C-OVERSIZE-DST-")).update(a).digest()}if(c>65535||a.length>255)throw new Error("expand_message_xof: invalid lenInBytes");return tt.create({dkLen:c}).update(o).update(i2osp(c,2)).update(a).update(i2osp(a.length,1)).digest()}hashToCurve.expand_message_xof=expand_message_xof;function hash_to_field(o,a,c){(0,utils_js_1$2.validateObject)(c,{DST:"stringOrUint8Array",p:"bigint",m:"isSafeInteger",k:"isSafeInteger",hash:"hash"});const{p:d,k:tt,m:nt,hash:$a,expand:Ws,DST:gu}=c;isBytes$5(o),isNum(a);const Su=validateDST(gu),$u=d.toString(2).length,Iu=Math.ceil(($u+tt)/8),Xu=a*nt*Iu;let r0;if(Ws==="xmd")r0=expand_message_xmd(o,Su,Xu,$a);else if(Ws==="xof")r0=expand_message_xof(o,Su,Xu,tt,$a);else if(Ws==="_internal_pass")r0=o;else throw new Error('expand must be "xmd" or "xof"');const p0=new Array(a);for(let y0=0;y0Array.from(d).reverse());return(d,tt)=>{const[nt,$a,Ws,gu]=c.map(Su=>Su.reduce(($u,Iu)=>o.add(o.mul($u,d),Iu)));return d=o.div(nt,$a),tt=o.mul(tt,o.div(Ws,gu)),{x:d,y:tt}}}hashToCurve.isogenyMap=isogenyMap;function createHasher(o,a,c){if(typeof a!="function")throw new Error("mapToCurve() must be defined");return{hashToCurve(d,tt){const nt=hash_to_field(d,2,{...c,DST:c.DST,...tt}),$a=o.fromAffine(a(nt[0])),Ws=o.fromAffine(a(nt[1])),gu=$a.add(Ws).clearCofactor();return gu.assertValidity(),gu},encodeToCurve(d,tt){const nt=hash_to_field(d,1,{...c,DST:c.encodeDST,...tt}),$a=o.fromAffine(a(nt[0])).clearCofactor();return $a.assertValidity(),$a}}}hashToCurve.createHasher=createHasher;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.hash_to_ristretto255=o.hashToRistretto255=o.RistrettoPoint=o.encodeToCurve=o.hashToCurve=o.edwardsToMontgomeryPriv=o.edwardsToMontgomery=o.edwardsToMontgomeryPub=o.x25519=o.ed25519ph=o.ed25519ctx=o.ed25519=o.ED25519_TORSION_SUBGROUP=void 0;/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const a=sha512$2,c=utils$y,d=edwards$1,tt=montgomery$1,nt=modular,$a=utils$x,Ws=hashToCurve,gu=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Su=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),$u=BigInt(0),Iu=BigInt(1),Xu=BigInt(2),r0=BigInt(5),p0=BigInt(10),y0=BigInt(20),A0=BigInt(40),$0=BigInt(80);function O0(fv){const cv=gu,Cy=fv*fv%cv*fv%cv,Ly=(0,nt.pow2)(Cy,Xu,cv)*Cy%cv,Hy=(0,nt.pow2)(Ly,Iu,cv)*fv%cv,t2=(0,nt.pow2)(Hy,r0,cv)*Hy%cv,C2=(0,nt.pow2)(t2,p0,cv)*t2%cv,Dy=(0,nt.pow2)(C2,y0,cv)*C2%cv,jw=(0,nt.pow2)(Dy,A0,cv)*Dy%cv,pw=(0,nt.pow2)(jw,$0,cv)*jw%cv,vw=(0,nt.pow2)(pw,$0,cv)*jw%cv,Hw=(0,nt.pow2)(vw,p0,cv)*t2%cv;return{pow_p_5_8:(0,nt.pow2)(Hw,Xu,cv)*fv%cv,b2:Cy}}function L0(fv){return fv[0]&=248,fv[31]&=127,fv[31]|=64,fv}function V0(fv,cv){const ly=gu,Cy=(0,nt.mod)(cv*cv*cv,ly),Ly=(0,nt.mod)(Cy*Cy*cv,ly),Hy=O0(fv*Ly).pow_p_5_8;let t2=(0,nt.mod)(fv*Cy*Hy,ly);const C2=(0,nt.mod)(cv*t2*t2,ly),Dy=t2,jw=(0,nt.mod)(t2*Su,ly),pw=C2===fv,vw=C2===(0,nt.mod)(-fv,ly),Hw=C2===(0,nt.mod)(-fv*Su,ly);return pw&&(t2=Dy),(vw||Hw)&&(t2=jw),(0,nt.isNegativeLE)(t2,ly)&&(t2=(0,nt.mod)(-t2,ly)),{isValid:pw||vw,value:t2}}o.ED25519_TORSION_SUBGROUP=["0100000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a","0000000000000000000000000000000000000000000000000000000000000080","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05","ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85","0000000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa"];const F0=(0,nt.Field)(gu,void 0,!0),u1={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:F0,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:a.sha512,randomBytes:c.randomBytes,adjustScalarBytes:L0,uvRatio:V0};o.ed25519=(0,d.twistedEdwards)(u1);function g1(fv,cv,ly){if(cv.length>255)throw new Error("Context is too big");return(0,c.concatBytes)((0,c.utf8ToBytes)("SigEd25519 no Ed25519 collisions"),new Uint8Array([ly?1:0,cv.length]),cv,fv)}o.ed25519ctx=(0,d.twistedEdwards)({...u1,domain:g1}),o.ed25519ph=(0,d.twistedEdwards)({...u1,domain:g1,prehash:a.sha512}),o.x25519=(0,tt.montgomery)({P:gu,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:fv=>{const cv=gu,{pow_p_5_8:ly,b2:Cy}=O0(fv);return(0,nt.mod)((0,nt.pow2)(ly,BigInt(3),cv)*Cy,cv)},adjustScalarBytes:L0,randomBytes:c.randomBytes});function E1(fv){const{y:cv}=o.ed25519.ExtendedPoint.fromHex(fv),ly=BigInt(1);return F0.toBytes(F0.create((ly+cv)*F0.inv(ly-cv)))}o.edwardsToMontgomeryPub=E1,o.edwardsToMontgomery=E1;function B1(fv){const cv=u1.hash(fv.subarray(0,32));return u1.adjustScalarBytes(cv).subarray(0,32)}o.edwardsToMontgomeryPriv=B1;const lv=(F0.ORDER+BigInt(3))/BigInt(8),j1=F0.pow(Xu,lv),r1=F0.sqrt(F0.neg(F0.ONE)),t1=(F0.ORDER-BigInt(5))/BigInt(8),D0=BigInt(486662);function Z0(fv){let cv=F0.sqr(fv);cv=F0.mul(cv,Xu);let ly=F0.add(cv,F0.ONE),Cy=F0.neg(D0),Ly=F0.sqr(ly),Hy=F0.mul(Ly,ly),t2=F0.mul(cv,D0);t2=F0.mul(t2,Cy),t2=F0.add(t2,Ly),t2=F0.mul(t2,Cy);let C2=F0.sqr(Hy);Ly=F0.sqr(C2),C2=F0.mul(C2,Hy),C2=F0.mul(C2,t2),Ly=F0.mul(Ly,C2);let Dy=F0.pow(Ly,t1);Dy=F0.mul(Dy,C2);let jw=F0.mul(Dy,r1);Ly=F0.sqr(Dy),Ly=F0.mul(Ly,Hy);let pw=F0.eql(Ly,t2),vw=F0.cmov(jw,Dy,pw),Hw=F0.mul(Cy,cv),uw=F0.mul(Dy,fv);uw=F0.mul(uw,j1);let Nw=F0.mul(uw,r1),lw=F0.mul(t2,cv);Ly=F0.sqr(uw),Ly=F0.mul(Ly,Hy);let Lw=F0.eql(Ly,lw),zw=F0.cmov(Nw,uw,Lw);Ly=F0.sqr(vw),Ly=F0.mul(Ly,Hy);let A2=F0.eql(Ly,t2),kv=F0.cmov(Hw,Cy,A2),Y1=F0.cmov(zw,vw,A2),tv=F0.isOdd(Y1);return Y1=F0.cmov(Y1,F0.neg(Y1),A2!==tv),{xMn:kv,xMd:ly,yMn:Y1,yMd:Iu}}const f1=(0,nt.FpSqrtEven)(F0,F0.neg(BigInt(486664)));function w1(fv){const{xMn:cv,xMd:ly,yMn:Cy,yMd:Ly}=Z0(fv);let Hy=F0.mul(cv,Ly);Hy=F0.mul(Hy,f1);let t2=F0.mul(ly,Cy),C2=F0.sub(cv,ly),Dy=F0.add(cv,ly),jw=F0.mul(t2,Dy),pw=F0.eql(jw,F0.ZERO);Hy=F0.cmov(Hy,F0.ZERO,pw),t2=F0.cmov(t2,F0.ONE,pw),C2=F0.cmov(C2,F0.ONE,pw),Dy=F0.cmov(Dy,F0.ONE,pw);const vw=F0.invertBatch([t2,Dy]);return{x:F0.mul(Hy,vw[0]),y:F0.mul(C2,vw[1])}}const m1=(0,Ws.createHasher)(o.ed25519.ExtendedPoint,fv=>w1(fv[0]),{DST:"edwards25519_XMD:SHA-512_ELL2_RO_",encodeDST:"edwards25519_XMD:SHA-512_ELL2_NU_",p:F0.ORDER,m:1,k:128,expand:"xmd",hash:a.sha512});o.hashToCurve=m1.hashToCurve,o.encodeToCurve=m1.encodeToCurve;function c1(fv){if(!(fv instanceof Mv))throw new Error("RistrettoPoint expected")}const G0=Su,o1=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),d1=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),R1=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),O1=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),Q1=fv=>V0(Iu,fv),rv=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),D1=fv=>o.ed25519.CURVE.Fp.create((0,$a.bytesToNumberLE)(fv)&rv);function ev(fv){const{d:cv}=o.ed25519.CURVE,ly=o.ed25519.CURVE.Fp.ORDER,Cy=o.ed25519.CURVE.Fp.create,Ly=Cy(G0*fv*fv),Hy=Cy((Ly+Iu)*R1);let t2=BigInt(-1);const C2=Cy((t2-cv*Ly)*Cy(Ly+cv));let{isValid:Dy,value:jw}=V0(Hy,C2),pw=Cy(jw*fv);(0,nt.isNegativeLE)(pw,ly)||(pw=Cy(-pw)),Dy||(jw=pw),Dy||(t2=Ly);const vw=Cy(t2*(Ly-Iu)*O1-C2),Hw=jw*jw,uw=Cy((jw+jw)*C2),Nw=Cy(vw*o1),lw=Cy(Iu-Hw),Lw=Cy(Iu+Hw);return new o.ed25519.ExtendedPoint(Cy(uw*Lw),Cy(lw*Nw),Cy(Nw*Lw),Cy(uw*lw))}class Mv{constructor(cv){this.ep=cv}static fromAffine(cv){return new Mv(o.ed25519.ExtendedPoint.fromAffine(cv))}static hashToCurve(cv){cv=(0,$a.ensureBytes)("ristrettoHash",cv,64);const ly=D1(cv.slice(0,32)),Cy=ev(ly),Ly=D1(cv.slice(32,64)),Hy=ev(Ly);return new Mv(Cy.add(Hy))}static fromHex(cv){cv=(0,$a.ensureBytes)("ristrettoHex",cv,32);const{a:ly,d:Cy}=o.ed25519.CURVE,Ly=o.ed25519.CURVE.Fp.ORDER,Hy=o.ed25519.CURVE.Fp.create,t2="RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint",C2=D1(cv);if(!(0,$a.equalBytes)((0,$a.numberToBytesLE)(C2,32),cv)||(0,nt.isNegativeLE)(C2,Ly))throw new Error(t2);const Dy=Hy(C2*C2),jw=Hy(Iu+ly*Dy),pw=Hy(Iu-ly*Dy),vw=Hy(jw*jw),Hw=Hy(pw*pw),uw=Hy(ly*Cy*vw-Hw),{isValid:Nw,value:lw}=Q1(Hy(uw*Hw)),Lw=Hy(lw*pw),zw=Hy(lw*Lw*uw);let A2=Hy((C2+C2)*Lw);(0,nt.isNegativeLE)(A2,Ly)&&(A2=Hy(-A2));const kv=Hy(jw*zw),Y1=Hy(A2*kv);if(!Nw||(0,nt.isNegativeLE)(Y1,Ly)||kv===$u)throw new Error(t2);return new Mv(new o.ed25519.ExtendedPoint(A2,kv,Iu,Y1))}toRawBytes(){let{ex:cv,ey:ly,ez:Cy,et:Ly}=this.ep;const Hy=o.ed25519.CURVE.Fp.ORDER,t2=o.ed25519.CURVE.Fp.create,C2=t2(t2(Cy+ly)*t2(Cy-ly)),Dy=t2(cv*ly),jw=t2(Dy*Dy),{value:pw}=Q1(t2(C2*jw)),vw=t2(pw*C2),Hw=t2(pw*Dy),uw=t2(vw*Hw*Ly);let Nw;if((0,nt.isNegativeLE)(Ly*uw,Hy)){let Lw=t2(ly*G0),zw=t2(cv*G0);cv=Lw,ly=zw,Nw=t2(vw*d1)}else Nw=Hw;(0,nt.isNegativeLE)(cv*uw,Hy)&&(ly=t2(-ly));let lw=t2((Cy-ly)*Nw);return(0,nt.isNegativeLE)(lw,Hy)&&(lw=t2(-lw)),(0,$a.numberToBytesLE)(lw,32)}toHex(){return(0,$a.bytesToHex)(this.toRawBytes())}toString(){return this.toHex()}equals(cv){c1(cv);const{ex:ly,ey:Cy}=this.ep,{ex:Ly,ey:Hy}=cv.ep,t2=o.ed25519.CURVE.Fp.create,C2=t2(ly*Hy)===t2(Cy*Ly),Dy=t2(Cy*Hy)===t2(ly*Ly);return C2||Dy}add(cv){return c1(cv),new Mv(this.ep.add(cv.ep))}subtract(cv){return c1(cv),new Mv(this.ep.subtract(cv.ep))}multiply(cv){return new Mv(this.ep.multiply(cv))}multiplyUnsafe(cv){return new Mv(this.ep.multiplyUnsafe(cv))}}o.RistrettoPoint=(Mv.BASE||(Mv.BASE=new Mv(o.ed25519.ExtendedPoint.BASE)),Mv.ZERO||(Mv.ZERO=new Mv(o.ed25519.ExtendedPoint.ZERO)),Mv);const Zv=(fv,cv)=>{const ly=cv.DST,Cy=typeof ly=="string"?(0,c.utf8ToBytes)(ly):ly,Ly=(0,Ws.expand_message_xmd)(fv,Cy,64,a.sha512);return Mv.hashToCurve(Ly)};o.hashToRistretto255=Zv,o.hash_to_ristretto255=o.hashToRistretto255})(ed25519);var browser$f={exports:{}},MAX_BYTES=65536,MAX_UINT32$1=4294967295;function oldBrowser$1(){throw new Error(`Secure random number generation is not supported by this browser. +Use Chrome, Firefox or Internet Explorer 11`)}var Buffer$A=safeBufferExports$1.Buffer,crypto$4=commonjsGlobal$4.crypto||commonjsGlobal$4.msCrypto;crypto$4&&crypto$4.getRandomValues?browser$f.exports=randomBytes$3:browser$f.exports=oldBrowser$1;function randomBytes$3(o,a){if(o>MAX_UINT32$1)throw new RangeError("requested too many random bytes");var c=Buffer$A.allocUnsafe(o);if(o>0)if(o>MAX_BYTES)for(var d=0;d:");const nt=(0,utils_1$a.baseDecode)(d);if(nt.length!==constants_1$3.KeySize.SECRET_KEY)throw new Error(`Invalid public key size (${nt.length}), must be ${constants_1$3.KeySize.SECRET_KEY}`);return new eve({keyType:tt,data:nt})}toString(){return`${key_type_to_str(this.keyType)}:${(0,utils_1$a.baseEncode)(this.data)}`}verify(a,c){switch(this.keyType){case constants_1$3.KeyType.ED25519:return ed25519_1$1.ed25519.verify(c,a,this.data);default:throw new Error(`Unknown key type ${this.keyType}`)}}};public_key.PublicKey=PublicKey$1;var __importDefault$a=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(key_pair_ed25519,"__esModule",{value:!0});key_pair_ed25519.KeyPairEd25519=void 0;const utils_1$9=lib$9,ed25519_1=ed25519,randombytes_1=__importDefault$a(browserExports),constants_1$2=constants$6,key_pair_base_1$1=key_pair_base,public_key_1=public_key;class KeyPairEd25519 extends key_pair_base_1$1.KeyPairBase{constructor(a){super();const c=(0,utils_1$9.baseDecode)(a),d=new Uint8Array(c.slice(0,constants_1$2.KeySize.SECRET_KEY)),tt=ed25519_1.ed25519.getPublicKey(d);this.publicKey=new public_key_1.PublicKey({keyType:constants_1$2.KeyType.ED25519,data:tt}),this.secretKey=(0,utils_1$9.baseEncode)(d),this.extendedSecretKey=a}static fromRandom(){const a=(0,randombytes_1.default)(constants_1$2.KeySize.SECRET_KEY),c=ed25519_1.ed25519.getPublicKey(new Uint8Array(a)),d=new Uint8Array([...a,...c]);return new KeyPairEd25519((0,utils_1$9.baseEncode)(d))}sign(a){return{signature:ed25519_1.ed25519.sign(a,(0,utils_1$9.baseDecode)(this.secretKey)),publicKey:this.publicKey}}verify(a,c){return this.publicKey.verify(a,c)}toString(){return`ed25519:${this.extendedSecretKey}`}getPublicKey(){return this.publicKey}}key_pair_ed25519.KeyPairEd25519=KeyPairEd25519;Object.defineProperty(key_pair$1,"__esModule",{value:!0});key_pair$1.KeyPair=void 0;const key_pair_base_1=key_pair_base,key_pair_ed25519_1=key_pair_ed25519;let KeyPair$3=class extends key_pair_base_1.KeyPairBase{static fromRandom(a){switch(a.toUpperCase()){case"ED25519":return key_pair_ed25519_1.KeyPairEd25519.fromRandom();default:throw new Error(`Unknown curve ${a}`)}}static fromString(a){const c=a.split(":");if(c.length===1)return new key_pair_ed25519_1.KeyPairEd25519(c[0]);if(c.length===2)switch(c[0].toUpperCase()){case"ED25519":return new key_pair_ed25519_1.KeyPairEd25519(c[1]);default:throw new Error(`Unknown curve: ${c[0]}`)}else throw new Error("Invalid encoded key format, must be :")}};key_pair$1.KeyPair=KeyPair$3;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.PublicKey=o.KeyPairEd25519=o.KeyPair=o.KeyType=void 0;var a=constants$6;Object.defineProperty(o,"KeyType",{enumerable:!0,get:function(){return a.KeyType}});var c=key_pair$1;Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return c.KeyPair}});var d=key_pair_ed25519;Object.defineProperty(o,"KeyPairEd25519",{enumerable:!0,get:function(){return d.KeyPairEd25519}});var tt=public_key;Object.defineProperty(o,"PublicKey",{enumerable:!0,get:function(){return tt.PublicKey}})})(lib$a);var keystore={};Object.defineProperty(keystore,"__esModule",{value:!0});keystore.KeyStore=void 0;class KeyStore{}keystore.KeyStore=KeyStore;var __awaiter$k=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(in_memory_key_store$1,"__esModule",{value:!0});in_memory_key_store$1.InMemoryKeyStore=void 0;const crypto_1$6=lib$a,keystore_1$1=keystore;class InMemoryKeyStore extends keystore_1$1.KeyStore{constructor(){super(),this.keys={}}setKey(a,c,d){return __awaiter$k(this,void 0,void 0,function*(){this.keys[`${c}:${a}`]=d.toString()})}getKey(a,c){return __awaiter$k(this,void 0,void 0,function*(){const d=this.keys[`${c}:${a}`];return d?crypto_1$6.KeyPair.fromString(d):null})}removeKey(a,c){return __awaiter$k(this,void 0,void 0,function*(){delete this.keys[`${c}:${a}`]})}clear(){return __awaiter$k(this,void 0,void 0,function*(){this.keys={}})}getNetworks(){return __awaiter$k(this,void 0,void 0,function*(){const a=new Set;return Object.keys(this.keys).forEach(c=>{const d=c.split(":");a.add(d[1])}),Array.from(a.values())})}getAccounts(a){return __awaiter$k(this,void 0,void 0,function*(){const c=new Array;return Object.keys(this.keys).forEach(d=>{const tt=d.split(":");tt[tt.length-1]===a&&c.push(tt.slice(0,tt.length-1).join(":"))}),c})}toString(){return"InMemoryKeyStore"}}in_memory_key_store$1.InMemoryKeyStore=InMemoryKeyStore;var merge_key_store$1={},__awaiter$j=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(merge_key_store$1,"__esModule",{value:!0});merge_key_store$1.MergeKeyStore=void 0;const keystore_1=keystore;class MergeKeyStore extends keystore_1.KeyStore{constructor(a,c={writeKeyStoreIndex:0}){super(),this.options=c,this.keyStores=a}setKey(a,c,d){return __awaiter$j(this,void 0,void 0,function*(){yield this.keyStores[this.options.writeKeyStoreIndex].setKey(a,c,d)})}getKey(a,c){return __awaiter$j(this,void 0,void 0,function*(){for(const d of this.keyStores){const tt=yield d.getKey(a,c);if(tt)return tt}return null})}removeKey(a,c){return __awaiter$j(this,void 0,void 0,function*(){for(const d of this.keyStores)yield d.removeKey(a,c)})}clear(){return __awaiter$j(this,void 0,void 0,function*(){for(const a of this.keyStores)yield a.clear()})}getNetworks(){return __awaiter$j(this,void 0,void 0,function*(){const a=new Set;for(const c of this.keyStores)for(const d of yield c.getNetworks())a.add(d);return Array.from(a)})}getAccounts(a){return __awaiter$j(this,void 0,void 0,function*(){const c=new Set;for(const d of this.keyStores)for(const tt of yield d.getAccounts(a))c.add(tt);return Array.from(c)})}toString(){return`MergeKeyStore(${this.keyStores.join(", ")})`}}merge_key_store$1.MergeKeyStore=MergeKeyStore;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MergeKeyStore=o.KeyStore=o.InMemoryKeyStore=void 0;var a=in_memory_key_store$1;Object.defineProperty(o,"InMemoryKeyStore",{enumerable:!0,get:function(){return a.InMemoryKeyStore}});var c=keystore;Object.defineProperty(o,"KeyStore",{enumerable:!0,get:function(){return c.KeyStore}});var d=merge_key_store$1;Object.defineProperty(o,"MergeKeyStore",{enumerable:!0,get:function(){return d.MergeKeyStore}})})(lib$b);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.KeyStore=void 0;var a=lib$b;Object.defineProperty(o,"KeyStore",{enumerable:!0,get:function(){return a.KeyStore}})})(keystore$1);var in_memory_key_store={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.InMemoryKeyStore=void 0;var a=lib$b;Object.defineProperty(o,"InMemoryKeyStore",{enumerable:!0,get:function(){return a.InMemoryKeyStore}})})(in_memory_key_store);var browser_local_storage_key_store$1={},lib$7={},browser_local_storage_key_store={},__awaiter$i=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(browser_local_storage_key_store,"__esModule",{value:!0});browser_local_storage_key_store.BrowserLocalStorageKeyStore=void 0;const crypto_1$5=lib$a,keystores_1$1=lib$b,LOCAL_STORAGE_KEY_PREFIX="near-api-js:keystore:";class BrowserLocalStorageKeyStore extends keystores_1$1.KeyStore{constructor(a=window.localStorage,c=LOCAL_STORAGE_KEY_PREFIX){super(),this.localStorage=a,this.prefix=c}setKey(a,c,d){return __awaiter$i(this,void 0,void 0,function*(){this.localStorage.setItem(this.storageKeyForSecretKey(a,c),d.toString())})}getKey(a,c){return __awaiter$i(this,void 0,void 0,function*(){const d=this.localStorage.getItem(this.storageKeyForSecretKey(a,c));return d?crypto_1$5.KeyPair.fromString(d):null})}removeKey(a,c){return __awaiter$i(this,void 0,void 0,function*(){this.localStorage.removeItem(this.storageKeyForSecretKey(a,c))})}clear(){return __awaiter$i(this,void 0,void 0,function*(){for(const a of this.storageKeys())a.startsWith(this.prefix)&&this.localStorage.removeItem(a)})}getNetworks(){return __awaiter$i(this,void 0,void 0,function*(){const a=new Set;for(const c of this.storageKeys())if(c.startsWith(this.prefix)){const d=c.substring(this.prefix.length).split(":");a.add(d[1])}return Array.from(a.values())})}getAccounts(a){return __awaiter$i(this,void 0,void 0,function*(){const c=new Array;for(const d of this.storageKeys())if(d.startsWith(this.prefix)){const tt=d.substring(this.prefix.length).split(":");tt[1]===a&&c.push(tt[0])}return c})}storageKeyForSecretKey(a,c){return`${this.prefix}${c}:${a}`}*storageKeys(){for(let a=0;asetTimeout(a,o))}var jsonRpcProvider$1={},lib$5={},action_creators={},actions={};Object.defineProperty(actions,"__esModule",{value:!0});actions.Action=actions.SignedDelegate=actions.DeleteAccount=actions.DeleteKey=actions.AddKey=actions.Stake=actions.Transfer=actions.FunctionCall=actions.DeployContract=actions.CreateAccount=actions.IAction=actions.AccessKey=actions.AccessKeyPermission=actions.FullAccessPermission=actions.FunctionCallPermission=void 0;const types_1$a=lib$8;class Enum{constructor(a){if(Object.keys(a).length!==1)throw new Error("Enum can only take single value");Object.keys(a).map(c=>{this[c]=a[c],this.enum=c})}}class FunctionCallPermission extends types_1$a.Assignable{}actions.FunctionCallPermission=FunctionCallPermission;class FullAccessPermission extends types_1$a.Assignable{}actions.FullAccessPermission=FullAccessPermission;class AccessKeyPermission extends Enum{}actions.AccessKeyPermission=AccessKeyPermission;class AccessKey extends types_1$a.Assignable{}actions.AccessKey=AccessKey;class IAction extends types_1$a.Assignable{}actions.IAction=IAction;class CreateAccount extends IAction{}actions.CreateAccount=CreateAccount;class DeployContract extends IAction{}actions.DeployContract=DeployContract;class FunctionCall extends IAction{}actions.FunctionCall=FunctionCall;class Transfer extends IAction{}actions.Transfer=Transfer;class Stake extends IAction{}actions.Stake=Stake;class AddKey extends IAction{}actions.AddKey=AddKey;class DeleteKey extends IAction{}actions.DeleteKey=DeleteKey;class DeleteAccount extends IAction{}actions.DeleteAccount=DeleteAccount;class SignedDelegate extends IAction{}actions.SignedDelegate=SignedDelegate;class Action extends Enum{}actions.Action=Action;var __importDefault$9=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(action_creators,"__esModule",{value:!0});action_creators.actionCreators=action_creators.stringifyJsonOrBytes=void 0;const bn_js_1$8=__importDefault$9(bnExports$1),actions_1$1=actions;function fullAccessKey$2(){return new actions_1$1.AccessKey({nonce:0,permission:new actions_1$1.AccessKeyPermission({fullAccess:new actions_1$1.FullAccessPermission({})})})}function functionCallAccessKey$2(o,a,c){return new actions_1$1.AccessKey({nonce:0,permission:new actions_1$1.AccessKeyPermission({functionCall:new actions_1$1.FunctionCallPermission({receiverId:o,allowance:c,methodNames:a})})})}function createAccount$2(){return new actions_1$1.Action({createAccount:new actions_1$1.CreateAccount({})})}function deployContract$4(o){return new actions_1$1.Action({deployContract:new actions_1$1.DeployContract({code:o})})}function stringifyJsonOrBytes(o){return o.byteLength!==void 0&&o.byteLength===o.length?o:Buffer$C.from(JSON.stringify(o))}action_creators.stringifyJsonOrBytes=stringifyJsonOrBytes;function functionCall$8(o,a,c=new bn_js_1$8.default(0),d=new bn_js_1$8.default(0),tt=stringifyJsonOrBytes,nt=!1){return nt?new actions_1$1.Action({functionCall:new actions_1$1.FunctionCall({methodName:o,args:a,gas:c,deposit:d})}):new actions_1$1.Action({functionCall:new actions_1$1.FunctionCall({methodName:o,args:tt(a),gas:c,deposit:d})})}function transfer$2(o=new bn_js_1$8.default(0)){return new actions_1$1.Action({transfer:new actions_1$1.Transfer({deposit:o})})}function stake$2(o=new bn_js_1$8.default(0),a){return new actions_1$1.Action({stake:new actions_1$1.Stake({stake:o,publicKey:a})})}function addKey$3(o,a){return new actions_1$1.Action({addKey:new actions_1$1.AddKey({publicKey:o,accessKey:a})})}function deleteKey$3(o){return new actions_1$1.Action({deleteKey:new actions_1$1.DeleteKey({publicKey:o})})}function deleteAccount$2(o){return new actions_1$1.Action({deleteAccount:new actions_1$1.DeleteAccount({beneficiaryId:o})})}function signedDelegate({delegateAction:o,signature:a}){return new actions_1$1.Action({signedDelegate:new actions_1$1.SignedDelegate({delegateAction:o,signature:a})})}action_creators.actionCreators={addKey:addKey$3,createAccount:createAccount$2,deleteAccount:deleteAccount$2,deleteKey:deleteKey$3,deployContract:deployContract$4,fullAccessKey:fullAccessKey$2,functionCall:functionCall$8,functionCallAccessKey:functionCallAccessKey$2,signedDelegate,stake:stake$2,transfer:transfer$2};var create_transaction={},schema={},cjs={},serialize$4={},types$3={};types$3.__esModule=!0;types$3.integers=void 0;types$3.integers=["u8","u16","u32","u64","u128","i8","i16","i32","i64","i128","f32","f64"];var buffer$1={};buffer$1.__esModule=!0;buffer$1.DecodeBuffer=buffer$1.EncodeBuffer=void 0;var EncodeBuffer=function(){function o(){this.offset=0,this.buffer_size=256,this.buffer=new ArrayBuffer(this.buffer_size),this.view=new DataView(this.buffer)}return o.prototype.resize_if_necessary=function(a){if(this.buffer_size-this.offsetthis.buffer.byteLength)throw new Error("Error in schema, the buffer is smaller than expected")},o.prototype.consume_value=function(a){var c=a.substring(1),d=parseInt(c)/8;this.assert_enough_buffer(d);var tt=a[0]==="f"?"getFloat".concat(c):a[0]==="i"?"getInt".concat(c):"getUint".concat(c),nt=this.view[tt](this.offset,!0);return this.offset+=d,nt},o.prototype.consume_bytes=function(a){this.assert_enough_buffer(a);var c=this.buffer.slice(this.offset,this.offset+a);return this.offset+=a,c},o}();buffer$1.DecodeBuffer=DecodeBuffer;var utils$w={},__extends=commonjsGlobal$4&&commonjsGlobal$4.__extends||function(){var o=function(a,c){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,tt){d.__proto__=tt}||function(d,tt){for(var nt in tt)Object.prototype.hasOwnProperty.call(tt,nt)&&(d[nt]=tt[nt])},o(a,c)};return function(a,c){if(typeof c!="function"&&c!==null)throw new TypeError("Class extends value "+String(c)+" is not a constructor or null");o(a,c);function d(){this.constructor=a}a.prototype=c===null?Object.create(c):(d.prototype=c.prototype,new d)}}();utils$w.__esModule=!0;utils$w.validate_schema=utils$w.ErrorSchema=utils$w.expect_enum=utils$w.expect_same_size=utils$w.expect_bigint=utils$w.expect_type=utils$w.isArrayLike=void 0;var types_js_1$2=types$3;function isArrayLike(o){return Array.isArray(o)||!!o&&typeof o=="object"&&"length"in o&&typeof o.length=="number"&&(o.length===0||o.length>0&&o.length-1 in o)}utils$w.isArrayLike=isArrayLike;function expect_type(o,a,c){if(typeof o!==a)throw new Error("Expected ".concat(a," not ").concat(typeof o,"(").concat(o,") at ").concat(c.join(".")))}utils$w.expect_type=expect_type;function expect_bigint(o,a){var c=["number","string","bigint","boolean"].includes(typeof o),d=typeof o=="object"&&o!==null&&"toString"in o;if(!c&&!d)throw new Error("Expected bigint, number, boolean or string not ".concat(typeof o,"(").concat(o,") at ").concat(a.join(".")))}utils$w.expect_bigint=expect_bigint;function expect_same_size(o,a,c){if(o!==a)throw new Error("Array length ".concat(o," does not match schema length ").concat(a," at ").concat(c.join(".")))}utils$w.expect_same_size=expect_same_size;function expect_enum(o,a){if(typeof o!="object"||o===null)throw new Error("Expected object not ".concat(typeof o,"(").concat(o,") at ").concat(a.join(".")))}utils$w.expect_enum=expect_enum;var VALID_STRING_TYPES=types_js_1$2.integers.concat(["bool","string"]),VALID_OBJECT_KEYS=["option","enum","array","set","map","struct"],ErrorSchema=function(o){__extends(a,o);function a(c,d){var tt="Invalid schema: ".concat(JSON.stringify(c)," expected ").concat(d);return o.call(this,tt)||this}return a}(Error);utils$w.ErrorSchema=ErrorSchema;function validate_schema(o){if(!(typeof o=="string"&&VALID_STRING_TYPES.includes(o))){if(o&&typeof o=="object"){var a=Object.keys(o);if(a.length===1&&VALID_OBJECT_KEYS.includes(a[0])){var c=a[0];if(c==="option")return validate_schema(o[c]);if(c==="enum")return validate_enum_schema(o[c]);if(c==="array")return validate_array_schema(o[c]);if(c==="set")return validate_schema(o[c]);if(c==="map")return validate_map_schema(o[c]);if(c==="struct")return validate_struct_schema(o[c])}}throw new ErrorSchema(o,VALID_OBJECT_KEYS.join(", ")+" or "+VALID_STRING_TYPES.join(", "))}}utils$w.validate_schema=validate_schema;function validate_enum_schema(o){if(!Array.isArray(o))throw new ErrorSchema(o,"Array");for(var a=0,c=o;a>BigInt(8);this.encoded.store_bytes(new Uint8Array(tt))},o.prototype.encode_string=function(a){this.checkTypes&&utils$v.expect_type(a,"string",this.fieldPath);var c=a;this.encoded.store_value(c.length,"u32");for(var d=0;d0},o.prototype.decode_option=function(a){var c=this.buffer.consume_value("u8");if(c===1)return this.decode_value(a.option);if(c!==0)throw new Error("Invalid option ".concat(c));return null},o.prototype.decode_enum=function(a){var c,d=this.buffer.consume_value("u8");if(d>a.enum.length)throw new Error("Enum option ".concat(d," is not available"));var tt=a.enum[d].struct,nt=Object.keys(tt)[0];return c={},c[nt]=this.decode_value(tt[nt]),c},o.prototype.decode_array=function(a){for(var c=[],d=a.array.len?a.array.len:this.decode_integer("u32"),tt=0;tt{if(!$a.type&&!$a.params)return $a;switch($a.type){case"AddKey":{const{publicKey:Ws,accessKey:gu}=$a.params;return addKey$2(Ws,gu)}case"CreateAccount":return createAccount$1($a.params.createAccount);case"DeleteAccount":return deleteAccount$1($a.params.deleteAccount);case"DeleteKey":return deleteKey$2($a.params.publicKey);case"DeployContract":return deployContract$3($a.params.code);case"FunctionCall":{const{methodName:Ws,args:gu,gas:Su,deposit:$u}=$a.params;return functionCall$7(Ws,gu,Su,$u)}case"Stake":return stake$1($a.params.stake,$a.params.publicKey);case"Transfer":{const{deposit:Ws}=$a.params;return transfer$1(Ws)}}throw new Error("Unrecognized action")}),nonce:c,maxBlockHeight:a,publicKey:d})}delegate.buildDelegateAction=buildDelegateAction;var sign$2={},sha256$4={},_sha2={},_assert={};Object.defineProperty(_assert,"__esModule",{value:!0});_assert.output=_assert.exists=_assert.hash=_assert.bytes=_assert.bool=_assert.number=void 0;function number$1(o){if(!Number.isSafeInteger(o)||o<0)throw new Error(`Wrong positive integer: ${o}`)}_assert.number=number$1;function bool(o){if(typeof o!="boolean")throw new Error(`Expected boolean, not ${o}`)}_assert.bool=bool;function isBytes$4(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function bytes$1(o,...a){if(!isBytes$4(o))throw new Error("Expected Uint8Array");if(a.length>0&&!a.includes(o.length))throw new Error(`Expected Uint8Array of length ${a}, not of length=${o.length}`)}_assert.bytes=bytes$1;function hash$5(o){if(typeof o!="function"||typeof o.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");number$1(o.outputLen),number$1(o.blockLen)}_assert.hash=hash$5;function exists$1(o,a=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(a&&o.finished)throw new Error("Hash#digest() has already been called")}_assert.exists=exists$1;function output$1(o,a){bytes$1(o);const c=a.outputLen;if(o.lengthnew Uint8Array(E1.buffer,E1.byteOffset,E1.byteLength);o.u8=c;const d=E1=>new Uint32Array(E1.buffer,E1.byteOffset,Math.floor(E1.byteLength/4));o.u32=d;function tt(E1){return E1 instanceof Uint8Array||E1!=null&&typeof E1=="object"&&E1.constructor.name==="Uint8Array"}const nt=E1=>new DataView(E1.buffer,E1.byteOffset,E1.byteLength);o.createView=nt;const $a=(E1,B1)=>E1<<32-B1|E1>>>B1;if(o.rotr=$a,o.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,!o.isLE)throw new Error("Non little-endian hardware is not supported");const Ws=Array.from({length:256},(E1,B1)=>B1.toString(16).padStart(2,"0"));function gu(E1){if(!tt(E1))throw new Error("Uint8Array expected");let B1="";for(let lv=0;lv=Su._0&&E1<=Su._9)return E1-Su._0;if(E1>=Su._A&&E1<=Su._F)return E1-(Su._A-10);if(E1>=Su._a&&E1<=Su._f)return E1-(Su._a-10)}function Iu(E1){if(typeof E1!="string")throw new Error("hex string expected, got "+typeof E1);const B1=E1.length,lv=B1/2;if(B1%2)throw new Error("padded hex string expected, got unpadded hex of length "+B1);const j1=new Uint8Array(lv);for(let r1=0,t1=0;r1{};o.nextTick=Xu;async function r0(E1,B1,lv){let j1=Date.now();for(let r1=0;r1=0&&t1E1().update(y0(j1)).digest(),lv=E1();return B1.outputLen=lv.outputLen,B1.blockLen=lv.blockLen,B1.create=()=>E1(),B1}o.wrapConstructor=V0;function F0(E1){const B1=(j1,r1)=>E1(r1).update(y0(j1)).digest(),lv=E1({});return B1.outputLen=lv.outputLen,B1.blockLen=lv.blockLen,B1.create=j1=>E1(j1),B1}o.wrapConstructorWithOpts=F0;function u1(E1){const B1=(j1,r1)=>E1(r1).update(y0(j1)).digest(),lv=E1({});return B1.outputLen=lv.outputLen,B1.blockLen=lv.blockLen,B1.create=j1=>E1(j1),B1}o.wrapXOFConstructorWithOpts=u1;function g1(E1=32){if(a.crypto&&typeof a.crypto.getRandomValues=="function")return a.crypto.getRandomValues(new Uint8Array(E1));throw new Error("crypto.getRandomValues must be defined")}o.randomBytes=g1})(utils$t);Object.defineProperty(_sha2,"__esModule",{value:!0});_sha2.SHA2=void 0;const _assert_js_1=_assert,utils_js_1$1=utils$t;function setBigUint64$1(o,a,c,d){if(typeof o.setBigUint64=="function")return o.setBigUint64(a,c,d);const tt=BigInt(32),nt=BigInt(4294967295),$a=Number(c>>tt&nt),Ws=Number(c&nt),gu=d?4:0,Su=d?0:4;o.setUint32(a+gu,$a,d),o.setUint32(a+Su,Ws,d)}let SHA2$1=class extends utils_js_1$1.Hash{constructor(a,c,d,tt){super(),this.blockLen=a,this.outputLen=c,this.padOffset=d,this.isLE=tt,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(a),this.view=(0,utils_js_1$1.createView)(this.buffer)}update(a){(0,_assert_js_1.exists)(this);const{view:c,buffer:d,blockLen:tt}=this;a=(0,utils_js_1$1.toBytes)(a);const nt=a.length;for(let $a=0;$att-$a&&(this.process(d,0),$a=0);for(let Iu=$a;Iu$u.length)throw new Error("_sha2: outputLen bigger than state");for(let Iu=0;Iuo&a^~o&c,Maj$1=(o,a,c)=>o&a^o&c^a&c,SHA256_K$1=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),IV$1=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),SHA256_W$1=new Uint32Array(64);let SHA256$3=class extends _sha2_js_1.SHA2{constructor(){super(64,32,8,!1),this.A=IV$1[0]|0,this.B=IV$1[1]|0,this.C=IV$1[2]|0,this.D=IV$1[3]|0,this.E=IV$1[4]|0,this.F=IV$1[5]|0,this.G=IV$1[6]|0,this.H=IV$1[7]|0}get(){const{A:a,B:c,C:d,D:tt,E:nt,F:$a,G:Ws,H:gu}=this;return[a,c,d,tt,nt,$a,Ws,gu]}set(a,c,d,tt,nt,$a,Ws,gu){this.A=a|0,this.B=c|0,this.C=d|0,this.D=tt|0,this.E=nt|0,this.F=$a|0,this.G=Ws|0,this.H=gu|0}process(a,c){for(let Iu=0;Iu<16;Iu++,c+=4)SHA256_W$1[Iu]=a.getUint32(c,!1);for(let Iu=16;Iu<64;Iu++){const Xu=SHA256_W$1[Iu-15],r0=SHA256_W$1[Iu-2],p0=(0,utils_js_1.rotr)(Xu,7)^(0,utils_js_1.rotr)(Xu,18)^Xu>>>3,y0=(0,utils_js_1.rotr)(r0,17)^(0,utils_js_1.rotr)(r0,19)^r0>>>10;SHA256_W$1[Iu]=y0+SHA256_W$1[Iu-7]+p0+SHA256_W$1[Iu-16]|0}let{A:d,B:tt,C:nt,D:$a,E:Ws,F:gu,G:Su,H:$u}=this;for(let Iu=0;Iu<64;Iu++){const Xu=(0,utils_js_1.rotr)(Ws,6)^(0,utils_js_1.rotr)(Ws,11)^(0,utils_js_1.rotr)(Ws,25),r0=$u+Xu+Chi$1(Ws,gu,Su)+SHA256_K$1[Iu]+SHA256_W$1[Iu]|0,y0=((0,utils_js_1.rotr)(d,2)^(0,utils_js_1.rotr)(d,13)^(0,utils_js_1.rotr)(d,22))+Maj$1(d,tt,nt)|0;$u=Su,Su=gu,gu=Ws,Ws=$a+r0|0,$a=nt,nt=tt,tt=d,d=r0+y0|0}d=d+this.A|0,tt=tt+this.B|0,nt=nt+this.C|0,$a=$a+this.D|0,Ws=Ws+this.E|0,gu=gu+this.F|0,Su=Su+this.G|0,$u=$u+this.H|0,this.set(d,tt,nt,$a,Ws,gu,Su,$u)}roundClean(){SHA256_W$1.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}},SHA224$1=class extends SHA256$3{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}};sha256$4.sha256=(0,utils_js_1.wrapConstructor)(()=>new SHA256$3);sha256$4.sha224=(0,utils_js_1.wrapConstructor)(()=>new SHA224$1);var signature$2={};Object.defineProperty(signature$2,"__esModule",{value:!0});signature$2.Signature=void 0;const types_1$7=lib$8;let Signature$4=class extends types_1$7.Assignable{};signature$2.Signature=Signature$4;var __awaiter$g=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(sign$2,"__esModule",{value:!0});sign$2.signDelegateAction=sign$2.signTransaction=void 0;const sha256_1$1=sha256$4,actions_1=actions,create_transaction_1=create_transaction,schema_1=schema,signature_1=signature$2;function signTransactionObject(o,a,c,d){return __awaiter$g(this,void 0,void 0,function*(){const tt=(0,schema_1.encodeTransaction)(o),nt=new Uint8Array((0,sha256_1$1.sha256)(tt)),$a=yield a.signMessage(tt,c,d),Ws=new schema_1.SignedTransaction({transaction:o,signature:new signature_1.Signature({keyType:o.publicKey.keyType,data:$a.signature})});return[nt,Ws]})}function signTransaction(...o){return __awaiter$g(this,void 0,void 0,function*(){if(o[0].constructor===schema_1.Transaction){const[a,c,d,tt]=o;return signTransactionObject(a,c,d,tt)}else{const[a,c,d,tt,nt,$a,Ws]=o,gu=yield nt.getPublicKey($a,Ws),Su=(0,create_transaction_1.createTransaction)($a,gu,a,c,d,tt);return signTransactionObject(Su,nt,$a,Ws)}})}sign$2.signTransaction=signTransaction;function signDelegateAction({delegateAction:o,signer:a}){return __awaiter$g(this,void 0,void 0,function*(){const c=(0,schema_1.encodeDelegateAction)(o),d=yield a.sign(c),tt=new actions_1.SignedDelegate({delegateAction:o,signature:new signature_1.Signature({keyType:o.publicKey.keyType,data:d})});return{hash:new Uint8Array((0,sha256_1$1.sha256)(c)),signedDelegateAction:tt}})}sign$2.signDelegateAction=signDelegateAction;(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(d,tt,nt,$a){$a===void 0&&($a=nt);var Ws=Object.getOwnPropertyDescriptor(tt,nt);(!Ws||("get"in Ws?!tt.__esModule:Ws.writable||Ws.configurable))&&(Ws={enumerable:!0,get:function(){return tt[nt]}}),Object.defineProperty(d,$a,Ws)}:function(d,tt,nt,$a){$a===void 0&&($a=nt),d[$a]=tt[nt]}),c=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(d,tt){for(var nt in d)nt!=="default"&&!Object.prototype.hasOwnProperty.call(tt,nt)&&a(tt,d,nt)};Object.defineProperty(o,"__esModule",{value:!0}),c(action_creators,o),c(actions,o),c(create_transaction,o),c(delegate,o),c(schema,o),c(sign$2,o),c(signature$2,o)})(lib$5);var provider={};Object.defineProperty(provider,"__esModule",{value:!0});provider.Provider=void 0;let Provider$1=class{};provider.Provider=Provider$1;var fetch_json={},httpErrors={exports:{}};/*! * depd * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed @@ -583,7 +583,7 @@ Use Chrome, Firefox or Internet Explorer 11`)}var Buffer$A=safeBufferExports$1.B * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed - */var codes$1=require$$0$2,statuses=status;status.STATUS_CODES=codes$1;status.codes=populateStatusesMap(status,codes$1);status.redirect={300:!0,301:!0,302:!0,303:!0,305:!0,307:!0,308:!0};status.empty={204:!0,205:!0,304:!0};status.retry={502:!0,503:!0,504:!0};function populateStatusesMap(o,a){var c=[];return Object.keys(a).forEach(function(tt){var nt=a[tt],$a=Number(tt);o[$a]=nt,o[nt]=$a,o[nt.toLowerCase()]=$a,c.push($a)}),c}function status(o){if(typeof o=="number"){if(!status[o])throw new Error("invalid status code: "+o);return o}if(typeof o!="string")throw new TypeError("code must be a number or string");var a=parseInt(o,10);if(!isNaN(a)){if(!status[a])throw new Error("invalid status code: "+a);return a}if(a=status[o.toLowerCase()],!a)throw new Error('invalid status message: "'+o+'"');return a}var inherits_browser$1={exports:{}};typeof Object.create=="function"?inherits_browser$1.exports=function(a,c){a.super_=c,a.prototype=Object.create(c.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:inherits_browser$1.exports=function(a,c){a.super_=c;var d=function(){};d.prototype=c.prototype,a.prototype=new d,a.prototype.constructor=a};var inherits_browserExports$1=inherits_browser$1.exports;/*! + */var codes=require$$0$2,statuses=status;status.STATUS_CODES=codes;status.codes=populateStatusesMap(status,codes);status.redirect={300:!0,301:!0,302:!0,303:!0,305:!0,307:!0,308:!0};status.empty={204:!0,205:!0,304:!0};status.retry={502:!0,503:!0,504:!0};function populateStatusesMap(o,a){var c=[];return Object.keys(a).forEach(function(tt){var nt=a[tt],$a=Number(tt);o[$a]=nt,o[nt]=$a,o[nt.toLowerCase()]=$a,c.push($a)}),c}function status(o){if(typeof o=="number"){if(!status[o])throw new Error("invalid status code: "+o);return o}if(typeof o!="string")throw new TypeError("code must be a number or string");var a=parseInt(o,10);if(!isNaN(a)){if(!status[a])throw new Error("invalid status code: "+a);return a}if(a=status[o.toLowerCase()],!a)throw new Error('invalid status message: "'+o+'"');return a}var inherits_browser$1={exports:{}};typeof Object.create=="function"?inherits_browser$1.exports=function(a,c){a.super_=c,a.prototype=Object.create(c.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:inherits_browser$1.exports=function(a,c){a.super_=c;var d=function(){};d.prototype=c.prototype,a.prototype=new d,a.prototype.constructor=a};var inherits_browserExports$1=inherits_browser$1.exports;/*! * toidentifier * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed @@ -592,7 +592,7 @@ Use Chrome, Firefox or Internet Explorer 11`)}var Buffer$A=safeBufferExports$1.B * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed - */(function(o){var a=browser$e("http-errors"),c=setprototypeof,d=statuses,tt=inherits_browserExports$1,nt=toidentifier;o.exports=Ys,o.exports.HttpError=gu(),Xu(o.exports,d.codes,o.exports.HttpError);function $a(i0){return+(String(i0).charAt(0)+"00")}function Ys(){for(var i0,p0,w0=500,A0={},$0=0;$0=600))&&(w0=500);var L0=Ys[w0]||Ys[$a(w0)];i0||(i0=L0?new L0(p0):new Error(p0||d[w0]),Error.captureStackTrace(i0,Ys)),(!L0||!(i0 instanceof L0)||i0.status!==w0)&&(i0.expose=w0<500,i0.status=i0.statusCode=w0);for(var q0 in A0)q0!=="status"&&q0!=="statusCode"&&(i0[q0]=A0[q0]);return i0}function gu(){function i0(){throw new TypeError("cannot construct abstract class")}return tt(i0,Error),i0}function xu(i0,p0,w0){var A0=p0.match(/Error$/)?p0:p0+"Error";function $0(O0){var L0=O0??d[w0],q0=new Error(L0);return Error.captureStackTrace(q0,$0),c(q0,$0.prototype),Object.defineProperty(q0,"message",{enumerable:!0,configurable:!0,value:L0,writable:!0}),Object.defineProperty(q0,"name",{enumerable:!1,configurable:!0,value:A0,writable:!0}),q0}return tt($0,i0),Iu($0,A0),$0.prototype.status=w0,$0.prototype.statusCode=w0,$0.prototype.expose=!0,$0}function $u(i0,p0,w0){var A0=p0.match(/Error$/)?p0:p0+"Error";function $0(O0){var L0=O0??d[w0],q0=new Error(L0);return Error.captureStackTrace(q0,$0),c(q0,$0.prototype),Object.defineProperty(q0,"message",{enumerable:!0,configurable:!0,value:L0,writable:!0}),Object.defineProperty(q0,"name",{enumerable:!1,configurable:!0,value:A0,writable:!0}),q0}return tt($0,i0),Iu($0,A0),$0.prototype.status=w0,$0.prototype.statusCode=w0,$0.prototype.expose=!1,$0}function Iu(i0,p0){var w0=Object.getOwnPropertyDescriptor(i0,"name");w0&&w0.configurable&&(w0.value=p0,Object.defineProperty(i0,"name",w0))}function Xu(i0,p0,w0){p0.forEach(function($0){var O0,L0=nt(d[$0]);switch($a($0)){case 400:O0=xu(w0,L0,$0);break;case 500:O0=$u(w0,L0,$0);break}O0&&(i0[$0]=O0,i0[L0]=O0)}),i0["I'mateapot"]=a.function(i0.ImATeapot,`"I'mateapot"; use "ImATeapot" instead`)}})(httpErrors);var httpErrorsExports=httpErrors.exports,fetch$2={},browser$d={exports:{}},hasRequiredBrowser$4;function requireBrowser$4(){return hasRequiredBrowser$4||(hasRequiredBrowser$4=1,function(o,a){var c=function(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof d<"u")return d;throw new Error("unable to locate global object")},d=c();o.exports=a=d.fetch,d.fetch&&(a.default=d.fetch.bind(d)),a.Headers=d.Headers,a.Request=d.Request,a.Response=d.Response}(browser$d,browser$d.exports)),browser$d.exports}var streamHttp={},request={exports:{}},capability={},hasRequiredCapability;function requireCapability(){return hasRequiredCapability||(hasRequiredCapability=1,function(o){o.fetch=tt(commonjsGlobal$4.fetch)&&tt(commonjsGlobal$4.ReadableStream),o.writableStream=tt(commonjsGlobal$4.WritableStream),o.abortController=tt(commonjsGlobal$4.AbortController);var a;function c(){if(a!==void 0)return a;if(commonjsGlobal$4.XMLHttpRequest){a=new commonjsGlobal$4.XMLHttpRequest;try{a.open("GET",commonjsGlobal$4.XDomainRequest?"/":"https://example.com")}catch{a=null}}else a=null;return a}function d(nt){var $a=c();if(!$a)return!1;try{return $a.responseType=nt,$a.responseType===nt}catch{}return!1}o.arraybuffer=o.fetch||d("arraybuffer"),o.msstream=!o.fetch&&d("ms-stream"),o.mozchunkedarraybuffer=!o.fetch&&d("moz-chunked-arraybuffer"),o.overrideMimeType=o.fetch||(c()?tt(c().overrideMimeType):!1);function tt(nt){return typeof nt=="function"}a=null}(capability)),capability}var inherits_browser={exports:{}};typeof Object.create=="function"?inherits_browser.exports=function(a,c){c&&(a.super_=c,a.prototype=Object.create(c.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}))}:inherits_browser.exports=function(a,c){if(c){a.super_=c;var d=function(){};d.prototype=c.prototype,a.prototype=new d,a.prototype.constructor=a}};var inherits_browserExports=inherits_browser.exports,response={},readableBrowser$1={exports:{}},streamBrowser$1=eventsExports.EventEmitter,util$5={},types$2={},shams$1=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var a={},c=Symbol("test"),d=Object(c);if(typeof c=="string"||Object.prototype.toString.call(c)!=="[object Symbol]"||Object.prototype.toString.call(d)!=="[object Symbol]")return!1;var tt=42;a[c]=tt;for(c in a)return!1;if(typeof Object.keys=="function"&&Object.keys(a).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(a).length!==0)return!1;var nt=Object.getOwnPropertySymbols(a);if(nt.length!==1||nt[0]!==c||!Object.prototype.propertyIsEnumerable.call(a,c))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var $a=Object.getOwnPropertyDescriptor(a,c);if($a.value!==tt||$a.enumerable!==!0)return!1}return!0},hasSymbols$2=shams$1,shams=function(){return hasSymbols$2()&&!!Symbol.toStringTag},esErrors=Error,_eval=EvalError,range$1=RangeError,ref$1=ReferenceError,syntax=SyntaxError,type$2=TypeError,uri$2=URIError,origSymbol=typeof Symbol<"u"&&Symbol,hasSymbolSham=shams$1,hasSymbols$1=function(){return typeof origSymbol!="function"||typeof Symbol!="function"||typeof origSymbol("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:hasSymbolSham()},test$5={__proto__:null,foo:{}},$Object$8=Object,hasProto$1=function(){return{__proto__:test$5}.foo===test$5.foo&&!(test$5 instanceof $Object$8)},ERROR_MESSAGE="Function.prototype.bind called on incompatible ",toStr$3=Object.prototype.toString,max$6=Math.max,funcType="[object Function]",concatty=function(a,c){for(var d=[],tt=0;tt"u"||!getProto$1?undefined$1:getProto$1(Uint8Array),INTRINSICS={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?undefined$1:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?undefined$1:ArrayBuffer,"%ArrayIteratorPrototype%":hasSymbols&&getProto$1?getProto$1([][Symbol.iterator]()):undefined$1,"%AsyncFromSyncIteratorPrototype%":undefined$1,"%AsyncFunction%":needsEval,"%AsyncGenerator%":needsEval,"%AsyncGeneratorFunction%":needsEval,"%AsyncIteratorPrototype%":needsEval,"%Atomics%":typeof Atomics>"u"?undefined$1:Atomics,"%BigInt%":typeof BigInt>"u"?undefined$1:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?undefined$1:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?undefined$1:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?undefined$1:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":$Error,"%eval%":eval,"%EvalError%":$EvalError,"%Float32Array%":typeof Float32Array>"u"?undefined$1:Float32Array,"%Float64Array%":typeof Float64Array>"u"?undefined$1:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?undefined$1:FinalizationRegistry,"%Function%":$Function,"%GeneratorFunction%":needsEval,"%Int8Array%":typeof Int8Array>"u"?undefined$1:Int8Array,"%Int16Array%":typeof Int16Array>"u"?undefined$1:Int16Array,"%Int32Array%":typeof Int32Array>"u"?undefined$1:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":hasSymbols&&getProto$1?getProto$1(getProto$1([][Symbol.iterator]())):undefined$1,"%JSON%":typeof JSON=="object"?JSON:undefined$1,"%Map%":typeof Map>"u"?undefined$1:Map,"%MapIteratorPrototype%":typeof Map>"u"||!hasSymbols||!getProto$1?undefined$1:getProto$1(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?undefined$1:Promise,"%Proxy%":typeof Proxy>"u"?undefined$1:Proxy,"%RangeError%":$RangeError$4,"%ReferenceError%":$ReferenceError,"%Reflect%":typeof Reflect>"u"?undefined$1:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?undefined$1:Set,"%SetIteratorPrototype%":typeof Set>"u"||!hasSymbols||!getProto$1?undefined$1:getProto$1(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?undefined$1:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":hasSymbols&&getProto$1?getProto$1(""[Symbol.iterator]()):undefined$1,"%Symbol%":hasSymbols?Symbol:undefined$1,"%SyntaxError%":$SyntaxError$1,"%ThrowTypeError%":ThrowTypeError,"%TypedArray%":TypedArray$2,"%TypeError%":$TypeError$k,"%Uint8Array%":typeof Uint8Array>"u"?undefined$1:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?undefined$1:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?undefined$1:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?undefined$1:Uint32Array,"%URIError%":$URIError,"%WeakMap%":typeof WeakMap>"u"?undefined$1:WeakMap,"%WeakRef%":typeof WeakRef>"u"?undefined$1:WeakRef,"%WeakSet%":typeof WeakSet>"u"?undefined$1:WeakSet};if(getProto$1)try{null.error}catch(o){var errorProto=getProto$1(getProto$1(o));INTRINSICS["%Error.prototype%"]=errorProto}var doEval=function o(a){var c;if(a==="%AsyncFunction%")c=getEvalledConstructor("async function () {}");else if(a==="%GeneratorFunction%")c=getEvalledConstructor("function* () {}");else if(a==="%AsyncGeneratorFunction%")c=getEvalledConstructor("async function* () {}");else if(a==="%AsyncGenerator%"){var d=o("%AsyncGeneratorFunction%");d&&(c=d.prototype)}else if(a==="%AsyncIteratorPrototype%"){var tt=o("%AsyncGenerator%");tt&&getProto$1&&(c=getProto$1(tt.prototype))}return INTRINSICS[a]=c,c},LEGACY_ALIASES={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},bind$d=functionBind,hasOwn$g=hasown,$concat=bind$d.call(Function.call,Array.prototype.concat),$spliceApply=bind$d.call(Function.apply,Array.prototype.splice),$replace=bind$d.call(Function.call,String.prototype.replace),$strSlice=bind$d.call(Function.call,String.prototype.slice),$exec=bind$d.call(Function.call,RegExp.prototype.exec),rePropName=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=function(a){var c=$strSlice(a,0,1),d=$strSlice(a,-1);if(c==="%"&&d!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected closing `%`");if(d==="%"&&c!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected opening `%`");var tt=[];return $replace(a,rePropName,function(nt,$a,Ys,gu){tt[tt.length]=Ys?$replace(gu,reEscapeChar,"$1"):$a||nt}),tt},getBaseIntrinsic=function(a,c){var d=a,tt;if(hasOwn$g(LEGACY_ALIASES,d)&&(tt=LEGACY_ALIASES[d],d="%"+tt[0]+"%"),hasOwn$g(INTRINSICS,d)){var nt=INTRINSICS[d];if(nt===needsEval&&(nt=doEval(d)),typeof nt>"u"&&!c)throw new $TypeError$k("intrinsic "+a+" exists, but is not available. Please file an issue!");return{alias:tt,name:d,value:nt}}throw new $SyntaxError$1("intrinsic "+a+" does not exist!")},getIntrinsic=function(a,c){if(typeof a!="string"||a.length===0)throw new $TypeError$k("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof c!="boolean")throw new $TypeError$k('"allowMissing" argument must be a boolean');if($exec(/^%?[^%]*%?$/,a)===null)throw new $SyntaxError$1("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var d=stringToPath(a),tt=d.length>0?d[0]:"",nt=getBaseIntrinsic("%"+tt+"%",c),$a=nt.name,Ys=nt.value,gu=!1,xu=nt.alias;xu&&(tt=xu[0],$spliceApply(d,$concat([0,1],xu)));for(var $u=1,Iu=!0;$u=d.length){var w0=$gOPD$1(Ys,Xu);Iu=!!w0,Iu&&"get"in w0&&!("originalValue"in w0.get)?Ys=w0.get:Ys=Ys[Xu]}else Iu=hasOwn$g(Ys,Xu),Ys=Ys[Xu];Iu&&!gu&&(INTRINSICS[$a]=Ys)}}return Ys},callBind$2={exports:{}},esDefineProperty,hasRequiredEsDefineProperty;function requireEsDefineProperty(){if(hasRequiredEsDefineProperty)return esDefineProperty;hasRequiredEsDefineProperty=1;var o=getIntrinsic,a=o("%Object.defineProperty%",!0)||!1;if(a)try{a({},"a",{value:1})}catch{a=!1}return esDefineProperty=a,esDefineProperty}var GetIntrinsic$2=getIntrinsic,$gOPD=GetIntrinsic$2("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch{$gOPD=null}var gopd$1=$gOPD,$defineProperty$5=requireEsDefineProperty(),$SyntaxError=syntax,$TypeError$j=type$2,gopd=gopd$1,defineDataProperty=function(a,c,d){if(!a||typeof a!="object"&&typeof a!="function")throw new $TypeError$j("`obj` must be an object or a function`");if(typeof c!="string"&&typeof c!="symbol")throw new $TypeError$j("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new $TypeError$j("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new $TypeError$j("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new $TypeError$j("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new $TypeError$j("`loose`, if provided, must be a boolean");var tt=arguments.length>3?arguments[3]:null,nt=arguments.length>4?arguments[4]:null,$a=arguments.length>5?arguments[5]:null,Ys=arguments.length>6?arguments[6]:!1,gu=!!gopd&&gopd(a,c);if($defineProperty$5)$defineProperty$5(a,c,{configurable:$a===null&&gu?gu.configurable:!$a,enumerable:tt===null&&gu?gu.enumerable:!tt,value:d,writable:nt===null&&gu?gu.writable:!nt});else if(Ys||!tt&&!nt&&!$a)a[c]=d;else throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},$defineProperty$4=requireEsDefineProperty(),hasPropertyDescriptors=function(){return!!$defineProperty$4};hasPropertyDescriptors.hasArrayLengthDefineBug=function(){if(!$defineProperty$4)return null;try{return $defineProperty$4([],"length",{value:1}).length!==1}catch{return!0}};var hasPropertyDescriptors_1=hasPropertyDescriptors,GetIntrinsic$1=getIntrinsic,define=defineDataProperty,hasDescriptors=hasPropertyDescriptors_1(),gOPD$1=gopd$1,$TypeError$i=type$2,$floor=GetIntrinsic$1("%Math.floor%"),setFunctionLength=function(a,c){if(typeof a!="function")throw new $TypeError$i("`fn` is not a function");if(typeof c!="number"||c<0||c>4294967295||$floor(c)!==c)throw new $TypeError$i("`length` must be a positive 32-bit integer");var d=arguments.length>2&&!!arguments[2],tt=!0,nt=!0;if("length"in a&&gOPD$1){var $a=gOPD$1(a,"length");$a&&!$a.configurable&&(tt=!1),$a&&!$a.writable&&(nt=!1)}return(tt||nt||!d)&&(hasDescriptors?define(a,"length",c,!0,!0):define(a,"length",c)),a};(function(o){var a=functionBind,c=getIntrinsic,d=setFunctionLength,tt=type$2,nt=c("%Function.prototype.apply%"),$a=c("%Function.prototype.call%"),Ys=c("%Reflect.apply%",!0)||a.call($a,nt),gu=requireEsDefineProperty(),xu=c("%Math.max%");o.exports=function(Xu){if(typeof Xu!="function")throw new tt("a function is required");var i0=Ys(a,$a,arguments);return d(i0,1+xu(0,Xu.length-(arguments.length-1)),!0)};var $u=function(){return Ys(a,nt,arguments)};gu?gu(o.exports,"apply",{value:$u}):o.exports.apply=$u})(callBind$2);var callBindExports=callBind$2.exports,GetIntrinsic=getIntrinsic,callBind$1=callBindExports,$indexOf$1=callBind$1(GetIntrinsic("String.prototype.indexOf")),callBound$2=function(a,c){var d=GetIntrinsic(a,!!c);return typeof d=="function"&&$indexOf$1(a,".prototype.")>-1?callBind$1(d):d},hasToStringTag$3=shams(),callBound$1=callBound$2,$toString$6=callBound$1("Object.prototype.toString"),isStandardArguments=function(a){return hasToStringTag$3&&a&&typeof a=="object"&&Symbol.toStringTag in a?!1:$toString$6(a)==="[object Arguments]"},isLegacyArguments=function(a){return isStandardArguments(a)?!0:a!==null&&typeof a=="object"&&typeof a.length=="number"&&a.length>=0&&$toString$6(a)!=="[object Array]"&&$toString$6(a.callee)==="[object Function]"},supportsStandardArguments=function(){return isStandardArguments(arguments)}();isStandardArguments.isLegacyArguments=isLegacyArguments;var isArguments=supportsStandardArguments?isStandardArguments:isLegacyArguments,toStr$2=Object.prototype.toString,fnToStr$1=Function.prototype.toString,isFnRegex=/^\s*(?:function)?\*/,hasToStringTag$2=shams(),getProto=Object.getPrototypeOf,getGeneratorFunc=function(){if(!hasToStringTag$2)return!1;try{return Function("return function*() {}")()}catch{}},GeneratorFunction,isGeneratorFunction=function(a){if(typeof a!="function")return!1;if(isFnRegex.test(fnToStr$1.call(a)))return!0;if(!hasToStringTag$2){var c=toStr$2.call(a);return c==="[object GeneratorFunction]"}if(!getProto)return!1;if(typeof GeneratorFunction>"u"){var d=getGeneratorFunc();GeneratorFunction=d?getProto(d):!1}return getProto(a)===GeneratorFunction},fnToStr=Function.prototype.toString,reflectApply=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,badArrayLike,isCallableMarker;if(typeof reflectApply=="function"&&typeof Object.defineProperty=="function")try{badArrayLike=Object.defineProperty({},"length",{get:function(){throw isCallableMarker}}),isCallableMarker={},reflectApply(function(){throw 42},null,badArrayLike)}catch(o){o!==isCallableMarker&&(reflectApply=null)}else reflectApply=null;var constructorRegex=/^\s*class\b/,isES6ClassFn=function(a){try{var c=fnToStr.call(a);return constructorRegex.test(c)}catch{return!1}},tryFunctionObject=function(a){try{return isES6ClassFn(a)?!1:(fnToStr.call(a),!0)}catch{return!1}},toStr$1=Object.prototype.toString,objectClass="[object Object]",fnClass="[object Function]",genClass="[object GeneratorFunction]",ddaClass="[object HTMLAllCollection]",ddaClass2="[object HTML document.all class]",ddaClass3="[object HTMLCollection]",hasToStringTag$1=typeof Symbol=="function"&&!!Symbol.toStringTag,isIE68=!(0 in[,]),isDDA=function(){return!1};if(typeof document=="object"){var all=document.all;toStr$1.call(all)===toStr$1.call(document.all)&&(isDDA=function(a){if((isIE68||!a)&&(typeof a>"u"||typeof a=="object"))try{var c=toStr$1.call(a);return(c===ddaClass||c===ddaClass2||c===ddaClass3||c===objectClass)&&a("")==null}catch{}return!1})}var isCallable$s=reflectApply?function(a){if(isDDA(a))return!0;if(!a||typeof a!="function"&&typeof a!="object")return!1;try{reflectApply(a,null,badArrayLike)}catch(c){if(c!==isCallableMarker)return!1}return!isES6ClassFn(a)&&tryFunctionObject(a)}:function(a){if(isDDA(a))return!0;if(!a||typeof a!="function"&&typeof a!="object")return!1;if(hasToStringTag$1)return tryFunctionObject(a);if(isES6ClassFn(a))return!1;var c=toStr$1.call(a);return c!==fnClass&&c!==genClass&&!/^\[object HTML/.test(c)?!1:tryFunctionObject(a)},isCallable$r=isCallable$s,toStr=Object.prototype.toString,hasOwnProperty$5=Object.prototype.hasOwnProperty,forEachArray=function(a,c,d){for(var tt=0,nt=a.length;tt=3&&(tt=d),toStr.call(a)==="[object Array]"?forEachArray(a,c,tt):typeof a=="string"?forEachString(a,c,tt):forEachObject(a,c,tt)},forEach_1=forEach$2,possibleTypedArrayNames=["Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"],possibleNames=possibleTypedArrayNames,g$2=typeof globalThis>"u"?commonjsGlobal$4:globalThis,availableTypedArrays$1=function(){for(var a=[],c=0;c"u"?commonjsGlobal$4:globalThis,typedArrays=availableTypedArrays(),$slice=callBound("String.prototype.slice"),getPrototypeOf$5=Object.getPrototypeOf,$indexOf=callBound("Array.prototype.indexOf",!0)||function(a,c){for(var d=0;d-1?c:c!=="Object"?!1:trySlices(a)}return gOPD?tryTypedArrays(a):null},whichTypedArray=whichTypedArray$1,isTypedArray$2=function(a){return!!whichTypedArray(a)};(function(o){var a=isArguments,c=isGeneratorFunction,d=whichTypedArray$1,tt=isTypedArray$2;function nt(Dy){return Dy.call.bind(Dy)}var $a=typeof BigInt<"u",Ys=typeof Symbol<"u",gu=nt(Object.prototype.toString),xu=nt(Number.prototype.valueOf),$u=nt(String.prototype.valueOf),Iu=nt(Boolean.prototype.valueOf);if($a)var Xu=nt(BigInt.prototype.valueOf);if(Ys)var i0=nt(Symbol.prototype.valueOf);function p0(Dy,jw){if(typeof Dy!="object")return!1;try{return jw(Dy),!0}catch{return!1}}o.isArgumentsObject=a,o.isGeneratorFunction=c,o.isTypedArray=tt;function w0(Dy){return typeof Promise<"u"&&Dy instanceof Promise||Dy!==null&&typeof Dy=="object"&&typeof Dy.then=="function"&&typeof Dy.catch=="function"}o.isPromise=w0;function A0(Dy){return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?ArrayBuffer.isView(Dy):tt(Dy)||R1(Dy)}o.isArrayBufferView=A0;function $0(Dy){return d(Dy)==="Uint8Array"}o.isUint8Array=$0;function O0(Dy){return d(Dy)==="Uint8ClampedArray"}o.isUint8ClampedArray=O0;function L0(Dy){return d(Dy)==="Uint16Array"}o.isUint16Array=L0;function q0(Dy){return d(Dy)==="Uint32Array"}o.isUint32Array=q0;function F0(Dy){return d(Dy)==="Int8Array"}o.isInt8Array=F0;function u1(Dy){return d(Dy)==="Int16Array"}o.isInt16Array=u1;function g1(Dy){return d(Dy)==="Int32Array"}o.isInt32Array=g1;function E1(Dy){return d(Dy)==="Float32Array"}o.isFloat32Array=E1;function B1(Dy){return d(Dy)==="Float64Array"}o.isFloat64Array=B1;function lv(Dy){return d(Dy)==="BigInt64Array"}o.isBigInt64Array=lv;function j1(Dy){return d(Dy)==="BigUint64Array"}o.isBigUint64Array=j1;function r1(Dy){return gu(Dy)==="[object Map]"}r1.working=typeof Map<"u"&&r1(new Map);function t1(Dy){return typeof Map>"u"?!1:r1.working?r1(Dy):Dy instanceof Map}o.isMap=t1;function D0(Dy){return gu(Dy)==="[object Set]"}D0.working=typeof Set<"u"&&D0(new Set);function Z0(Dy){return typeof Set>"u"?!1:D0.working?D0(Dy):Dy instanceof Set}o.isSet=Z0;function f1(Dy){return gu(Dy)==="[object WeakMap]"}f1.working=typeof WeakMap<"u"&&f1(new WeakMap);function w1(Dy){return typeof WeakMap>"u"?!1:f1.working?f1(Dy):Dy instanceof WeakMap}o.isWeakMap=w1;function m1(Dy){return gu(Dy)==="[object WeakSet]"}m1.working=typeof WeakSet<"u"&&m1(new WeakSet);function c1(Dy){return m1(Dy)}o.isWeakSet=c1;function G0(Dy){return gu(Dy)==="[object ArrayBuffer]"}G0.working=typeof ArrayBuffer<"u"&&G0(new ArrayBuffer);function o1(Dy){return typeof ArrayBuffer>"u"?!1:G0.working?G0(Dy):Dy instanceof ArrayBuffer}o.isArrayBuffer=o1;function d1(Dy){return gu(Dy)==="[object DataView]"}d1.working=typeof ArrayBuffer<"u"&&typeof DataView<"u"&&d1(new DataView(new ArrayBuffer(1),0,1));function R1(Dy){return typeof DataView>"u"?!1:d1.working?d1(Dy):Dy instanceof DataView}o.isDataView=R1;var O1=typeof SharedArrayBuffer<"u"?SharedArrayBuffer:void 0;function Q1(Dy){return gu(Dy)==="[object SharedArrayBuffer]"}function rv(Dy){return typeof O1>"u"?!1:(typeof Q1.working>"u"&&(Q1.working=Q1(new O1)),Q1.working?Q1(Dy):Dy instanceof O1)}o.isSharedArrayBuffer=rv;function D1(Dy){return gu(Dy)==="[object AsyncFunction]"}o.isAsyncFunction=D1;function ev(Dy){return gu(Dy)==="[object Map Iterator]"}o.isMapIterator=ev;function Mv(Dy){return gu(Dy)==="[object Set Iterator]"}o.isSetIterator=Mv;function Zv(Dy){return gu(Dy)==="[object Generator]"}o.isGeneratorObject=Zv;function fv(Dy){return gu(Dy)==="[object WebAssembly.Module]"}o.isWebAssemblyCompiledModule=fv;function cv(Dy){return p0(Dy,xu)}o.isNumberObject=cv;function ly(Dy){return p0(Dy,$u)}o.isStringObject=ly;function Cy(Dy){return p0(Dy,Iu)}o.isBooleanObject=Cy;function Ly(Dy){return $a&&p0(Dy,Xu)}o.isBigIntObject=Ly;function Hy(Dy){return Ys&&p0(Dy,i0)}o.isSymbolObject=Hy;function t2(Dy){return cv(Dy)||ly(Dy)||Cy(Dy)||Ly(Dy)||Hy(Dy)}o.isBoxedPrimitive=t2;function C2(Dy){return typeof Uint8Array<"u"&&(o1(Dy)||rv(Dy))}o.isAnyArrayBuffer=C2,["isProxy","isExternal","isModuleNamespaceObject"].forEach(function(Dy){Object.defineProperty(o,Dy,{enumerable:!1,value:function(){throw new Error(Dy+" is not supported in userland")}})})})(types$2);var isBufferBrowser=function(a){return a&&typeof a=="object"&&typeof a.copy=="function"&&typeof a.fill=="function"&&typeof a.readUInt8=="function"};(function(o){var a={},c=Object.getOwnPropertyDescriptors||function(O1){for(var Q1=Object.keys(O1),rv={},D1=0;D1=D1)return Zv;switch(Zv){case"%s":return String(rv[Q1++]);case"%d":return Number(rv[Q1++]);case"%j":try{return JSON.stringify(rv[Q1++])}catch{return"[Circular]"}default:return Zv}}),Mv=rv[Q1];Q1"u")return function(){return o.deprecate(R1,O1).apply(this,arguments)};var Q1=!1;function rv(){if(!Q1){if(process$1$4.throwDeprecation)throw new Error(O1);process$1$4.traceDeprecation?console.trace(O1):console.error(O1),Q1=!0}return R1.apply(this,arguments)}return rv};var tt={},nt=/^$/;if(a.NODE_DEBUG){var $a=a.NODE_DEBUG;$a=$a.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".*").replace(/,/g,"$|^").toUpperCase(),nt=new RegExp("^"+$a+"$","i")}o.debuglog=function(R1){if(R1=R1.toUpperCase(),!tt[R1])if(nt.test(R1)){var O1=process$1$4.pid;tt[R1]=function(){var Q1=o.format.apply(o,arguments);console.error("%s %d: %s",R1,O1,Q1)}}else tt[R1]=function(){};return tt[R1]};function Ys(R1,O1){var Q1={seen:[],stylize:xu};return arguments.length>=3&&(Q1.depth=arguments[2]),arguments.length>=4&&(Q1.colors=arguments[3]),O0(O1)?Q1.showHidden=O1:O1&&o._extend(Q1,O1),E1(Q1.showHidden)&&(Q1.showHidden=!1),E1(Q1.depth)&&(Q1.depth=2),E1(Q1.colors)&&(Q1.colors=!1),E1(Q1.customInspect)&&(Q1.customInspect=!0),Q1.colors&&(Q1.stylize=gu),Iu(Q1,R1,Q1.depth)}o.inspect=Ys,Ys.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},Ys.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function gu(R1,O1){var Q1=Ys.styles[O1];return Q1?"\x1B["+Ys.colors[Q1][0]+"m"+R1+"\x1B["+Ys.colors[Q1][1]+"m":R1}function xu(R1,O1){return R1}function $u(R1){var O1={};return R1.forEach(function(Q1,rv){O1[Q1]=!0}),O1}function Iu(R1,O1,Q1){if(R1.customInspect&&O1&&t1(O1.inspect)&&O1.inspect!==o.inspect&&!(O1.constructor&&O1.constructor.prototype===O1)){var rv=O1.inspect(Q1,R1);return u1(rv)||(rv=Iu(R1,rv,Q1)),rv}var D1=Xu(R1,O1);if(D1)return D1;var ev=Object.keys(O1),Mv=$u(ev);if(R1.showHidden&&(ev=Object.getOwnPropertyNames(O1)),r1(O1)&&(ev.indexOf("message")>=0||ev.indexOf("description")>=0))return i0(O1);if(ev.length===0){if(t1(O1)){var Zv=O1.name?": "+O1.name:"";return R1.stylize("[Function"+Zv+"]","special")}if(B1(O1))return R1.stylize(RegExp.prototype.toString.call(O1),"regexp");if(j1(O1))return R1.stylize(Date.prototype.toString.call(O1),"date");if(r1(O1))return i0(O1)}var fv="",cv=!1,ly=["{","}"];if($0(O1)&&(cv=!0,ly=["[","]"]),t1(O1)){var Cy=O1.name?": "+O1.name:"";fv=" [Function"+Cy+"]"}if(B1(O1)&&(fv=" "+RegExp.prototype.toString.call(O1)),j1(O1)&&(fv=" "+Date.prototype.toUTCString.call(O1)),r1(O1)&&(fv=" "+i0(O1)),ev.length===0&&(!cv||O1.length==0))return ly[0]+fv+ly[1];if(Q1<0)return B1(O1)?R1.stylize(RegExp.prototype.toString.call(O1),"regexp"):R1.stylize("[Object]","special");R1.seen.push(O1);var Ly;return cv?Ly=p0(R1,O1,Q1,Mv,ev):Ly=ev.map(function(Hy){return w0(R1,O1,Q1,Mv,Hy,cv)}),R1.seen.pop(),A0(Ly,fv,ly)}function Xu(R1,O1){if(E1(O1))return R1.stylize("undefined","undefined");if(u1(O1)){var Q1="'"+JSON.stringify(O1).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return R1.stylize(Q1,"string")}if(F0(O1))return R1.stylize(""+O1,"number");if(O0(O1))return R1.stylize(""+O1,"boolean");if(L0(O1))return R1.stylize("null","null")}function i0(R1){return"["+Error.prototype.toString.call(R1)+"]"}function p0(R1,O1,Q1,rv,D1){for(var ev=[],Mv=0,Zv=O1.length;Mv=600))&&(y0=500);var L0=Ws[y0]||Ws[$a(y0)];r0||(r0=L0?new L0(p0):new Error(p0||d[y0]),Error.captureStackTrace(r0,Ws)),(!L0||!(r0 instanceof L0)||r0.status!==y0)&&(r0.expose=y0<500,r0.status=r0.statusCode=y0);for(var V0 in A0)V0!=="status"&&V0!=="statusCode"&&(r0[V0]=A0[V0]);return r0}function gu(){function r0(){throw new TypeError("cannot construct abstract class")}return tt(r0,Error),r0}function Su(r0,p0,y0){var A0=p0.match(/Error$/)?p0:p0+"Error";function $0(O0){var L0=O0??d[y0],V0=new Error(L0);return Error.captureStackTrace(V0,$0),c(V0,$0.prototype),Object.defineProperty(V0,"message",{enumerable:!0,configurable:!0,value:L0,writable:!0}),Object.defineProperty(V0,"name",{enumerable:!1,configurable:!0,value:A0,writable:!0}),V0}return tt($0,r0),Iu($0,A0),$0.prototype.status=y0,$0.prototype.statusCode=y0,$0.prototype.expose=!0,$0}function $u(r0,p0,y0){var A0=p0.match(/Error$/)?p0:p0+"Error";function $0(O0){var L0=O0??d[y0],V0=new Error(L0);return Error.captureStackTrace(V0,$0),c(V0,$0.prototype),Object.defineProperty(V0,"message",{enumerable:!0,configurable:!0,value:L0,writable:!0}),Object.defineProperty(V0,"name",{enumerable:!1,configurable:!0,value:A0,writable:!0}),V0}return tt($0,r0),Iu($0,A0),$0.prototype.status=y0,$0.prototype.statusCode=y0,$0.prototype.expose=!1,$0}function Iu(r0,p0){var y0=Object.getOwnPropertyDescriptor(r0,"name");y0&&y0.configurable&&(y0.value=p0,Object.defineProperty(r0,"name",y0))}function Xu(r0,p0,y0){p0.forEach(function($0){var O0,L0=nt(d[$0]);switch($a($0)){case 400:O0=Su(y0,L0,$0);break;case 500:O0=$u(y0,L0,$0);break}O0&&(r0[$0]=O0,r0[L0]=O0)}),r0["I'mateapot"]=a.function(r0.ImATeapot,`"I'mateapot"; use "ImATeapot" instead`)}})(httpErrors);var httpErrorsExports=httpErrors.exports,fetch$2={},browser$d={exports:{}},hasRequiredBrowser$4;function requireBrowser$4(){return hasRequiredBrowser$4||(hasRequiredBrowser$4=1,function(o,a){var c=function(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof d<"u")return d;throw new Error("unable to locate global object")},d=c();o.exports=a=d.fetch,d.fetch&&(a.default=d.fetch.bind(d)),a.Headers=d.Headers,a.Request=d.Request,a.Response=d.Response}(browser$d,browser$d.exports)),browser$d.exports}var streamHttp={},request={exports:{}},capability={},hasRequiredCapability;function requireCapability(){return hasRequiredCapability||(hasRequiredCapability=1,function(o){o.fetch=tt(commonjsGlobal$4.fetch)&&tt(commonjsGlobal$4.ReadableStream),o.writableStream=tt(commonjsGlobal$4.WritableStream),o.abortController=tt(commonjsGlobal$4.AbortController);var a;function c(){if(a!==void 0)return a;if(commonjsGlobal$4.XMLHttpRequest){a=new commonjsGlobal$4.XMLHttpRequest;try{a.open("GET",commonjsGlobal$4.XDomainRequest?"/":"https://example.com")}catch{a=null}}else a=null;return a}function d(nt){var $a=c();if(!$a)return!1;try{return $a.responseType=nt,$a.responseType===nt}catch{}return!1}o.arraybuffer=o.fetch||d("arraybuffer"),o.msstream=!o.fetch&&d("ms-stream"),o.mozchunkedarraybuffer=!o.fetch&&d("moz-chunked-arraybuffer"),o.overrideMimeType=o.fetch||(c()?tt(c().overrideMimeType):!1);function tt(nt){return typeof nt=="function"}a=null}(capability)),capability}var inherits_browser={exports:{}};typeof Object.create=="function"?inherits_browser.exports=function(a,c){c&&(a.super_=c,a.prototype=Object.create(c.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}))}:inherits_browser.exports=function(a,c){if(c){a.super_=c;var d=function(){};d.prototype=c.prototype,a.prototype=new d,a.prototype.constructor=a}};var inherits_browserExports=inherits_browser.exports,response={},readableBrowser$1={exports:{}},streamBrowser$1,hasRequiredStreamBrowser;function requireStreamBrowser(){return hasRequiredStreamBrowser||(hasRequiredStreamBrowser=1,streamBrowser$1=eventsExports.EventEmitter),streamBrowser$1}var util$5={},types$2={},shams$1=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var a={},c=Symbol("test"),d=Object(c);if(typeof c=="string"||Object.prototype.toString.call(c)!=="[object Symbol]"||Object.prototype.toString.call(d)!=="[object Symbol]")return!1;var tt=42;a[c]=tt;for(c in a)return!1;if(typeof Object.keys=="function"&&Object.keys(a).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(a).length!==0)return!1;var nt=Object.getOwnPropertySymbols(a);if(nt.length!==1||nt[0]!==c||!Object.prototype.propertyIsEnumerable.call(a,c))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var $a=Object.getOwnPropertyDescriptor(a,c);if($a.value!==tt||$a.enumerable!==!0)return!1}return!0},hasSymbols$2=shams$1,shams=function(){return hasSymbols$2()&&!!Symbol.toStringTag},esErrors=Error,_eval=EvalError,range$1=RangeError,ref$1=ReferenceError,syntax=SyntaxError,type$2=TypeError,uri$2=URIError,origSymbol=typeof Symbol<"u"&&Symbol,hasSymbolSham=shams$1,hasSymbols$1=function(){return typeof origSymbol!="function"||typeof Symbol!="function"||typeof origSymbol("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:hasSymbolSham()},test$5={__proto__:null,foo:{}},$Object$8=Object,hasProto$1=function(){return{__proto__:test$5}.foo===test$5.foo&&!(test$5 instanceof $Object$8)},ERROR_MESSAGE="Function.prototype.bind called on incompatible ",toStr$3=Object.prototype.toString,max$6=Math.max,funcType="[object Function]",concatty=function(a,c){for(var d=[],tt=0;tt"u"||!getProto$1?undefined$1:getProto$1(Uint8Array),INTRINSICS={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?undefined$1:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?undefined$1:ArrayBuffer,"%ArrayIteratorPrototype%":hasSymbols&&getProto$1?getProto$1([][Symbol.iterator]()):undefined$1,"%AsyncFromSyncIteratorPrototype%":undefined$1,"%AsyncFunction%":needsEval,"%AsyncGenerator%":needsEval,"%AsyncGeneratorFunction%":needsEval,"%AsyncIteratorPrototype%":needsEval,"%Atomics%":typeof Atomics>"u"?undefined$1:Atomics,"%BigInt%":typeof BigInt>"u"?undefined$1:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?undefined$1:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?undefined$1:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?undefined$1:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":$Error,"%eval%":eval,"%EvalError%":$EvalError,"%Float32Array%":typeof Float32Array>"u"?undefined$1:Float32Array,"%Float64Array%":typeof Float64Array>"u"?undefined$1:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?undefined$1:FinalizationRegistry,"%Function%":$Function,"%GeneratorFunction%":needsEval,"%Int8Array%":typeof Int8Array>"u"?undefined$1:Int8Array,"%Int16Array%":typeof Int16Array>"u"?undefined$1:Int16Array,"%Int32Array%":typeof Int32Array>"u"?undefined$1:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":hasSymbols&&getProto$1?getProto$1(getProto$1([][Symbol.iterator]())):undefined$1,"%JSON%":typeof JSON=="object"?JSON:undefined$1,"%Map%":typeof Map>"u"?undefined$1:Map,"%MapIteratorPrototype%":typeof Map>"u"||!hasSymbols||!getProto$1?undefined$1:getProto$1(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?undefined$1:Promise,"%Proxy%":typeof Proxy>"u"?undefined$1:Proxy,"%RangeError%":$RangeError$4,"%ReferenceError%":$ReferenceError,"%Reflect%":typeof Reflect>"u"?undefined$1:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?undefined$1:Set,"%SetIteratorPrototype%":typeof Set>"u"||!hasSymbols||!getProto$1?undefined$1:getProto$1(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?undefined$1:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":hasSymbols&&getProto$1?getProto$1(""[Symbol.iterator]()):undefined$1,"%Symbol%":hasSymbols?Symbol:undefined$1,"%SyntaxError%":$SyntaxError$1,"%ThrowTypeError%":ThrowTypeError,"%TypedArray%":TypedArray$2,"%TypeError%":$TypeError$k,"%Uint8Array%":typeof Uint8Array>"u"?undefined$1:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?undefined$1:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?undefined$1:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?undefined$1:Uint32Array,"%URIError%":$URIError,"%WeakMap%":typeof WeakMap>"u"?undefined$1:WeakMap,"%WeakRef%":typeof WeakRef>"u"?undefined$1:WeakRef,"%WeakSet%":typeof WeakSet>"u"?undefined$1:WeakSet};if(getProto$1)try{null.error}catch(o){var errorProto=getProto$1(getProto$1(o));INTRINSICS["%Error.prototype%"]=errorProto}var doEval=function o(a){var c;if(a==="%AsyncFunction%")c=getEvalledConstructor("async function () {}");else if(a==="%GeneratorFunction%")c=getEvalledConstructor("function* () {}");else if(a==="%AsyncGeneratorFunction%")c=getEvalledConstructor("async function* () {}");else if(a==="%AsyncGenerator%"){var d=o("%AsyncGeneratorFunction%");d&&(c=d.prototype)}else if(a==="%AsyncIteratorPrototype%"){var tt=o("%AsyncGenerator%");tt&&getProto$1&&(c=getProto$1(tt.prototype))}return INTRINSICS[a]=c,c},LEGACY_ALIASES={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},bind$d=functionBind,hasOwn$g=hasown,$concat=bind$d.call(Function.call,Array.prototype.concat),$spliceApply=bind$d.call(Function.apply,Array.prototype.splice),$replace=bind$d.call(Function.call,String.prototype.replace),$strSlice=bind$d.call(Function.call,String.prototype.slice),$exec=bind$d.call(Function.call,RegExp.prototype.exec),rePropName=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=function(a){var c=$strSlice(a,0,1),d=$strSlice(a,-1);if(c==="%"&&d!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected closing `%`");if(d==="%"&&c!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected opening `%`");var tt=[];return $replace(a,rePropName,function(nt,$a,Ws,gu){tt[tt.length]=Ws?$replace(gu,reEscapeChar,"$1"):$a||nt}),tt},getBaseIntrinsic=function(a,c){var d=a,tt;if(hasOwn$g(LEGACY_ALIASES,d)&&(tt=LEGACY_ALIASES[d],d="%"+tt[0]+"%"),hasOwn$g(INTRINSICS,d)){var nt=INTRINSICS[d];if(nt===needsEval&&(nt=doEval(d)),typeof nt>"u"&&!c)throw new $TypeError$k("intrinsic "+a+" exists, but is not available. Please file an issue!");return{alias:tt,name:d,value:nt}}throw new $SyntaxError$1("intrinsic "+a+" does not exist!")},getIntrinsic=function(a,c){if(typeof a!="string"||a.length===0)throw new $TypeError$k("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof c!="boolean")throw new $TypeError$k('"allowMissing" argument must be a boolean');if($exec(/^%?[^%]*%?$/,a)===null)throw new $SyntaxError$1("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var d=stringToPath(a),tt=d.length>0?d[0]:"",nt=getBaseIntrinsic("%"+tt+"%",c),$a=nt.name,Ws=nt.value,gu=!1,Su=nt.alias;Su&&(tt=Su[0],$spliceApply(d,$concat([0,1],Su)));for(var $u=1,Iu=!0;$u=d.length){var y0=$gOPD$1(Ws,Xu);Iu=!!y0,Iu&&"get"in y0&&!("originalValue"in y0.get)?Ws=y0.get:Ws=Ws[Xu]}else Iu=hasOwn$g(Ws,Xu),Ws=Ws[Xu];Iu&&!gu&&(INTRINSICS[$a]=Ws)}}return Ws},callBind$2={exports:{}},esDefineProperty,hasRequiredEsDefineProperty;function requireEsDefineProperty(){if(hasRequiredEsDefineProperty)return esDefineProperty;hasRequiredEsDefineProperty=1;var o=getIntrinsic,a=o("%Object.defineProperty%",!0)||!1;if(a)try{a({},"a",{value:1})}catch{a=!1}return esDefineProperty=a,esDefineProperty}var GetIntrinsic$2=getIntrinsic,$gOPD=GetIntrinsic$2("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch{$gOPD=null}var gopd$1=$gOPD,$defineProperty$5=requireEsDefineProperty(),$SyntaxError=syntax,$TypeError$j=type$2,gopd=gopd$1,defineDataProperty=function(a,c,d){if(!a||typeof a!="object"&&typeof a!="function")throw new $TypeError$j("`obj` must be an object or a function`");if(typeof c!="string"&&typeof c!="symbol")throw new $TypeError$j("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new $TypeError$j("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new $TypeError$j("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new $TypeError$j("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new $TypeError$j("`loose`, if provided, must be a boolean");var tt=arguments.length>3?arguments[3]:null,nt=arguments.length>4?arguments[4]:null,$a=arguments.length>5?arguments[5]:null,Ws=arguments.length>6?arguments[6]:!1,gu=!!gopd&&gopd(a,c);if($defineProperty$5)$defineProperty$5(a,c,{configurable:$a===null&&gu?gu.configurable:!$a,enumerable:tt===null&&gu?gu.enumerable:!tt,value:d,writable:nt===null&&gu?gu.writable:!nt});else if(Ws||!tt&&!nt&&!$a)a[c]=d;else throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},$defineProperty$4=requireEsDefineProperty(),hasPropertyDescriptors=function(){return!!$defineProperty$4};hasPropertyDescriptors.hasArrayLengthDefineBug=function(){if(!$defineProperty$4)return null;try{return $defineProperty$4([],"length",{value:1}).length!==1}catch{return!0}};var hasPropertyDescriptors_1=hasPropertyDescriptors,GetIntrinsic$1=getIntrinsic,define=defineDataProperty,hasDescriptors=hasPropertyDescriptors_1(),gOPD$1=gopd$1,$TypeError$i=type$2,$floor=GetIntrinsic$1("%Math.floor%"),setFunctionLength=function(a,c){if(typeof a!="function")throw new $TypeError$i("`fn` is not a function");if(typeof c!="number"||c<0||c>4294967295||$floor(c)!==c)throw new $TypeError$i("`length` must be a positive 32-bit integer");var d=arguments.length>2&&!!arguments[2],tt=!0,nt=!0;if("length"in a&&gOPD$1){var $a=gOPD$1(a,"length");$a&&!$a.configurable&&(tt=!1),$a&&!$a.writable&&(nt=!1)}return(tt||nt||!d)&&(hasDescriptors?define(a,"length",c,!0,!0):define(a,"length",c)),a};(function(o){var a=functionBind,c=getIntrinsic,d=setFunctionLength,tt=type$2,nt=c("%Function.prototype.apply%"),$a=c("%Function.prototype.call%"),Ws=c("%Reflect.apply%",!0)||a.call($a,nt),gu=requireEsDefineProperty(),Su=c("%Math.max%");o.exports=function(Xu){if(typeof Xu!="function")throw new tt("a function is required");var r0=Ws(a,$a,arguments);return d(r0,1+Su(0,Xu.length-(arguments.length-1)),!0)};var $u=function(){return Ws(a,nt,arguments)};gu?gu(o.exports,"apply",{value:$u}):o.exports.apply=$u})(callBind$2);var callBindExports=callBind$2.exports,GetIntrinsic=getIntrinsic,callBind$1=callBindExports,$indexOf$1=callBind$1(GetIntrinsic("String.prototype.indexOf")),callBound$2=function(a,c){var d=GetIntrinsic(a,!!c);return typeof d=="function"&&$indexOf$1(a,".prototype.")>-1?callBind$1(d):d},hasToStringTag$3=shams(),callBound$1=callBound$2,$toString$6=callBound$1("Object.prototype.toString"),isStandardArguments=function(a){return hasToStringTag$3&&a&&typeof a=="object"&&Symbol.toStringTag in a?!1:$toString$6(a)==="[object Arguments]"},isLegacyArguments=function(a){return isStandardArguments(a)?!0:a!==null&&typeof a=="object"&&typeof a.length=="number"&&a.length>=0&&$toString$6(a)!=="[object Array]"&&$toString$6(a.callee)==="[object Function]"},supportsStandardArguments=function(){return isStandardArguments(arguments)}();isStandardArguments.isLegacyArguments=isLegacyArguments;var isArguments=supportsStandardArguments?isStandardArguments:isLegacyArguments,toStr$2=Object.prototype.toString,fnToStr$1=Function.prototype.toString,isFnRegex=/^\s*(?:function)?\*/,hasToStringTag$2=shams(),getProto=Object.getPrototypeOf,getGeneratorFunc=function(){if(!hasToStringTag$2)return!1;try{return Function("return function*() {}")()}catch{}},GeneratorFunction,isGeneratorFunction=function(a){if(typeof a!="function")return!1;if(isFnRegex.test(fnToStr$1.call(a)))return!0;if(!hasToStringTag$2){var c=toStr$2.call(a);return c==="[object GeneratorFunction]"}if(!getProto)return!1;if(typeof GeneratorFunction>"u"){var d=getGeneratorFunc();GeneratorFunction=d?getProto(d):!1}return getProto(a)===GeneratorFunction},fnToStr=Function.prototype.toString,reflectApply=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,badArrayLike,isCallableMarker;if(typeof reflectApply=="function"&&typeof Object.defineProperty=="function")try{badArrayLike=Object.defineProperty({},"length",{get:function(){throw isCallableMarker}}),isCallableMarker={},reflectApply(function(){throw 42},null,badArrayLike)}catch(o){o!==isCallableMarker&&(reflectApply=null)}else reflectApply=null;var constructorRegex=/^\s*class\b/,isES6ClassFn=function(a){try{var c=fnToStr.call(a);return constructorRegex.test(c)}catch{return!1}},tryFunctionObject=function(a){try{return isES6ClassFn(a)?!1:(fnToStr.call(a),!0)}catch{return!1}},toStr$1=Object.prototype.toString,objectClass="[object Object]",fnClass="[object Function]",genClass="[object GeneratorFunction]",ddaClass="[object HTMLAllCollection]",ddaClass2="[object HTML document.all class]",ddaClass3="[object HTMLCollection]",hasToStringTag$1=typeof Symbol=="function"&&!!Symbol.toStringTag,isIE68=!(0 in[,]),isDDA=function(){return!1};if(typeof document=="object"){var all=document.all;toStr$1.call(all)===toStr$1.call(document.all)&&(isDDA=function(a){if((isIE68||!a)&&(typeof a>"u"||typeof a=="object"))try{var c=toStr$1.call(a);return(c===ddaClass||c===ddaClass2||c===ddaClass3||c===objectClass)&&a("")==null}catch{}return!1})}var isCallable$s=reflectApply?function(a){if(isDDA(a))return!0;if(!a||typeof a!="function"&&typeof a!="object")return!1;try{reflectApply(a,null,badArrayLike)}catch(c){if(c!==isCallableMarker)return!1}return!isES6ClassFn(a)&&tryFunctionObject(a)}:function(a){if(isDDA(a))return!0;if(!a||typeof a!="function"&&typeof a!="object")return!1;if(hasToStringTag$1)return tryFunctionObject(a);if(isES6ClassFn(a))return!1;var c=toStr$1.call(a);return c!==fnClass&&c!==genClass&&!/^\[object HTML/.test(c)?!1:tryFunctionObject(a)},isCallable$r=isCallable$s,toStr=Object.prototype.toString,hasOwnProperty$5=Object.prototype.hasOwnProperty,forEachArray=function(a,c,d){for(var tt=0,nt=a.length;tt=3&&(tt=d),toStr.call(a)==="[object Array]"?forEachArray(a,c,tt):typeof a=="string"?forEachString(a,c,tt):forEachObject(a,c,tt)},forEach_1=forEach$2,possibleTypedArrayNames=["Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"],possibleNames=possibleTypedArrayNames,g$2=typeof globalThis>"u"?commonjsGlobal$4:globalThis,availableTypedArrays$1=function(){for(var a=[],c=0;c"u"?commonjsGlobal$4:globalThis,typedArrays=availableTypedArrays(),$slice=callBound("String.prototype.slice"),getPrototypeOf$5=Object.getPrototypeOf,$indexOf=callBound("Array.prototype.indexOf",!0)||function(a,c){for(var d=0;d-1?c:c!=="Object"?!1:trySlices(a)}return gOPD?tryTypedArrays(a):null},whichTypedArray=whichTypedArray$1,isTypedArray$2=function(a){return!!whichTypedArray(a)};(function(o){var a=isArguments,c=isGeneratorFunction,d=whichTypedArray$1,tt=isTypedArray$2;function nt(Dy){return Dy.call.bind(Dy)}var $a=typeof BigInt<"u",Ws=typeof Symbol<"u",gu=nt(Object.prototype.toString),Su=nt(Number.prototype.valueOf),$u=nt(String.prototype.valueOf),Iu=nt(Boolean.prototype.valueOf);if($a)var Xu=nt(BigInt.prototype.valueOf);if(Ws)var r0=nt(Symbol.prototype.valueOf);function p0(Dy,jw){if(typeof Dy!="object")return!1;try{return jw(Dy),!0}catch{return!1}}o.isArgumentsObject=a,o.isGeneratorFunction=c,o.isTypedArray=tt;function y0(Dy){return typeof Promise<"u"&&Dy instanceof Promise||Dy!==null&&typeof Dy=="object"&&typeof Dy.then=="function"&&typeof Dy.catch=="function"}o.isPromise=y0;function A0(Dy){return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?ArrayBuffer.isView(Dy):tt(Dy)||R1(Dy)}o.isArrayBufferView=A0;function $0(Dy){return d(Dy)==="Uint8Array"}o.isUint8Array=$0;function O0(Dy){return d(Dy)==="Uint8ClampedArray"}o.isUint8ClampedArray=O0;function L0(Dy){return d(Dy)==="Uint16Array"}o.isUint16Array=L0;function V0(Dy){return d(Dy)==="Uint32Array"}o.isUint32Array=V0;function F0(Dy){return d(Dy)==="Int8Array"}o.isInt8Array=F0;function u1(Dy){return d(Dy)==="Int16Array"}o.isInt16Array=u1;function g1(Dy){return d(Dy)==="Int32Array"}o.isInt32Array=g1;function E1(Dy){return d(Dy)==="Float32Array"}o.isFloat32Array=E1;function B1(Dy){return d(Dy)==="Float64Array"}o.isFloat64Array=B1;function lv(Dy){return d(Dy)==="BigInt64Array"}o.isBigInt64Array=lv;function j1(Dy){return d(Dy)==="BigUint64Array"}o.isBigUint64Array=j1;function r1(Dy){return gu(Dy)==="[object Map]"}r1.working=typeof Map<"u"&&r1(new Map);function t1(Dy){return typeof Map>"u"?!1:r1.working?r1(Dy):Dy instanceof Map}o.isMap=t1;function D0(Dy){return gu(Dy)==="[object Set]"}D0.working=typeof Set<"u"&&D0(new Set);function Z0(Dy){return typeof Set>"u"?!1:D0.working?D0(Dy):Dy instanceof Set}o.isSet=Z0;function f1(Dy){return gu(Dy)==="[object WeakMap]"}f1.working=typeof WeakMap<"u"&&f1(new WeakMap);function w1(Dy){return typeof WeakMap>"u"?!1:f1.working?f1(Dy):Dy instanceof WeakMap}o.isWeakMap=w1;function m1(Dy){return gu(Dy)==="[object WeakSet]"}m1.working=typeof WeakSet<"u"&&m1(new WeakSet);function c1(Dy){return m1(Dy)}o.isWeakSet=c1;function G0(Dy){return gu(Dy)==="[object ArrayBuffer]"}G0.working=typeof ArrayBuffer<"u"&&G0(new ArrayBuffer);function o1(Dy){return typeof ArrayBuffer>"u"?!1:G0.working?G0(Dy):Dy instanceof ArrayBuffer}o.isArrayBuffer=o1;function d1(Dy){return gu(Dy)==="[object DataView]"}d1.working=typeof ArrayBuffer<"u"&&typeof DataView<"u"&&d1(new DataView(new ArrayBuffer(1),0,1));function R1(Dy){return typeof DataView>"u"?!1:d1.working?d1(Dy):Dy instanceof DataView}o.isDataView=R1;var O1=typeof SharedArrayBuffer<"u"?SharedArrayBuffer:void 0;function Q1(Dy){return gu(Dy)==="[object SharedArrayBuffer]"}function rv(Dy){return typeof O1>"u"?!1:(typeof Q1.working>"u"&&(Q1.working=Q1(new O1)),Q1.working?Q1(Dy):Dy instanceof O1)}o.isSharedArrayBuffer=rv;function D1(Dy){return gu(Dy)==="[object AsyncFunction]"}o.isAsyncFunction=D1;function ev(Dy){return gu(Dy)==="[object Map Iterator]"}o.isMapIterator=ev;function Mv(Dy){return gu(Dy)==="[object Set Iterator]"}o.isSetIterator=Mv;function Zv(Dy){return gu(Dy)==="[object Generator]"}o.isGeneratorObject=Zv;function fv(Dy){return gu(Dy)==="[object WebAssembly.Module]"}o.isWebAssemblyCompiledModule=fv;function cv(Dy){return p0(Dy,Su)}o.isNumberObject=cv;function ly(Dy){return p0(Dy,$u)}o.isStringObject=ly;function Cy(Dy){return p0(Dy,Iu)}o.isBooleanObject=Cy;function Ly(Dy){return $a&&p0(Dy,Xu)}o.isBigIntObject=Ly;function Hy(Dy){return Ws&&p0(Dy,r0)}o.isSymbolObject=Hy;function t2(Dy){return cv(Dy)||ly(Dy)||Cy(Dy)||Ly(Dy)||Hy(Dy)}o.isBoxedPrimitive=t2;function C2(Dy){return typeof Uint8Array<"u"&&(o1(Dy)||rv(Dy))}o.isAnyArrayBuffer=C2,["isProxy","isExternal","isModuleNamespaceObject"].forEach(function(Dy){Object.defineProperty(o,Dy,{enumerable:!1,value:function(){throw new Error(Dy+" is not supported in userland")}})})})(types$2);var isBufferBrowser=function(a){return a&&typeof a=="object"&&typeof a.copy=="function"&&typeof a.fill=="function"&&typeof a.readUInt8=="function"};(function(o){var a={},c=Object.getOwnPropertyDescriptors||function(O1){for(var Q1=Object.keys(O1),rv={},D1=0;D1=D1)return Zv;switch(Zv){case"%s":return String(rv[Q1++]);case"%d":return Number(rv[Q1++]);case"%j":try{return JSON.stringify(rv[Q1++])}catch{return"[Circular]"}default:return Zv}}),Mv=rv[Q1];Q1"u")return function(){return o.deprecate(R1,O1).apply(this,arguments)};var Q1=!1;function rv(){if(!Q1){if(process$1$4.throwDeprecation)throw new Error(O1);process$1$4.traceDeprecation?console.trace(O1):console.error(O1),Q1=!0}return R1.apply(this,arguments)}return rv};var tt={},nt=/^$/;if(a.NODE_DEBUG){var $a=a.NODE_DEBUG;$a=$a.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".*").replace(/,/g,"$|^").toUpperCase(),nt=new RegExp("^"+$a+"$","i")}o.debuglog=function(R1){if(R1=R1.toUpperCase(),!tt[R1])if(nt.test(R1)){var O1=process$1$4.pid;tt[R1]=function(){var Q1=o.format.apply(o,arguments);console.error("%s %d: %s",R1,O1,Q1)}}else tt[R1]=function(){};return tt[R1]};function Ws(R1,O1){var Q1={seen:[],stylize:Su};return arguments.length>=3&&(Q1.depth=arguments[2]),arguments.length>=4&&(Q1.colors=arguments[3]),O0(O1)?Q1.showHidden=O1:O1&&o._extend(Q1,O1),E1(Q1.showHidden)&&(Q1.showHidden=!1),E1(Q1.depth)&&(Q1.depth=2),E1(Q1.colors)&&(Q1.colors=!1),E1(Q1.customInspect)&&(Q1.customInspect=!0),Q1.colors&&(Q1.stylize=gu),Iu(Q1,R1,Q1.depth)}o.inspect=Ws,Ws.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},Ws.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function gu(R1,O1){var Q1=Ws.styles[O1];return Q1?"\x1B["+Ws.colors[Q1][0]+"m"+R1+"\x1B["+Ws.colors[Q1][1]+"m":R1}function Su(R1,O1){return R1}function $u(R1){var O1={};return R1.forEach(function(Q1,rv){O1[Q1]=!0}),O1}function Iu(R1,O1,Q1){if(R1.customInspect&&O1&&t1(O1.inspect)&&O1.inspect!==o.inspect&&!(O1.constructor&&O1.constructor.prototype===O1)){var rv=O1.inspect(Q1,R1);return u1(rv)||(rv=Iu(R1,rv,Q1)),rv}var D1=Xu(R1,O1);if(D1)return D1;var ev=Object.keys(O1),Mv=$u(ev);if(R1.showHidden&&(ev=Object.getOwnPropertyNames(O1)),r1(O1)&&(ev.indexOf("message")>=0||ev.indexOf("description")>=0))return r0(O1);if(ev.length===0){if(t1(O1)){var Zv=O1.name?": "+O1.name:"";return R1.stylize("[Function"+Zv+"]","special")}if(B1(O1))return R1.stylize(RegExp.prototype.toString.call(O1),"regexp");if(j1(O1))return R1.stylize(Date.prototype.toString.call(O1),"date");if(r1(O1))return r0(O1)}var fv="",cv=!1,ly=["{","}"];if($0(O1)&&(cv=!0,ly=["[","]"]),t1(O1)){var Cy=O1.name?": "+O1.name:"";fv=" [Function"+Cy+"]"}if(B1(O1)&&(fv=" "+RegExp.prototype.toString.call(O1)),j1(O1)&&(fv=" "+Date.prototype.toUTCString.call(O1)),r1(O1)&&(fv=" "+r0(O1)),ev.length===0&&(!cv||O1.length==0))return ly[0]+fv+ly[1];if(Q1<0)return B1(O1)?R1.stylize(RegExp.prototype.toString.call(O1),"regexp"):R1.stylize("[Object]","special");R1.seen.push(O1);var Ly;return cv?Ly=p0(R1,O1,Q1,Mv,ev):Ly=ev.map(function(Hy){return y0(R1,O1,Q1,Mv,Hy,cv)}),R1.seen.pop(),A0(Ly,fv,ly)}function Xu(R1,O1){if(E1(O1))return R1.stylize("undefined","undefined");if(u1(O1)){var Q1="'"+JSON.stringify(O1).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return R1.stylize(Q1,"string")}if(F0(O1))return R1.stylize(""+O1,"number");if(O0(O1))return R1.stylize(""+O1,"boolean");if(L0(O1))return R1.stylize("null","null")}function r0(R1){return"["+Error.prototype.toString.call(R1)+"]"}function p0(R1,O1,Q1,rv,D1){for(var ev=[],Mv=0,Zv=O1.length;Mv-1&&(ev?Zv=Zv.split(` `).map(function(cv){return" "+cv}).join(` `).slice(2):Zv=` @@ -601,27 +601,27 @@ Use Chrome, Firefox or Internet Explorer 11`)}var Buffer$A=safeBufferExports$1.B `))):Zv=R1.stylize("[Circular]","special")),E1(Mv)){if(ev&&D1.match(/^\d+$/))return Zv;Mv=JSON.stringify(""+D1),Mv.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(Mv=Mv.slice(1,-1),Mv=R1.stylize(Mv,"name")):(Mv=Mv.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),Mv=R1.stylize(Mv,"string"))}return Mv+": "+Zv}function A0(R1,O1,Q1){var rv=R1.reduce(function(D1,ev){return ev.indexOf(` `)>=0,D1+ev.replace(/\u001b\[\d\d?m/g,"").length+1},0);return rv>60?Q1[0]+(O1===""?"":O1+` `)+" "+R1.join(`, - `)+" "+Q1[1]:Q1[0]+O1+" "+R1.join(", ")+" "+Q1[1]}o.types=types$2;function $0(R1){return Array.isArray(R1)}o.isArray=$0;function O0(R1){return typeof R1=="boolean"}o.isBoolean=O0;function L0(R1){return R1===null}o.isNull=L0;function q0(R1){return R1==null}o.isNullOrUndefined=q0;function F0(R1){return typeof R1=="number"}o.isNumber=F0;function u1(R1){return typeof R1=="string"}o.isString=u1;function g1(R1){return typeof R1=="symbol"}o.isSymbol=g1;function E1(R1){return R1===void 0}o.isUndefined=E1;function B1(R1){return lv(R1)&&Z0(R1)==="[object RegExp]"}o.isRegExp=B1,o.types.isRegExp=B1;function lv(R1){return typeof R1=="object"&&R1!==null}o.isObject=lv;function j1(R1){return lv(R1)&&Z0(R1)==="[object Date]"}o.isDate=j1,o.types.isDate=j1;function r1(R1){return lv(R1)&&(Z0(R1)==="[object Error]"||R1 instanceof Error)}o.isError=r1,o.types.isNativeError=r1;function t1(R1){return typeof R1=="function"}o.isFunction=t1;function D0(R1){return R1===null||typeof R1=="boolean"||typeof R1=="number"||typeof R1=="string"||typeof R1=="symbol"||typeof R1>"u"}o.isPrimitive=D0,o.isBuffer=isBufferBrowser;function Z0(R1){return Object.prototype.toString.call(R1)}function f1(R1){return R1<10?"0"+R1.toString(10):R1.toString(10)}var w1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function m1(){var R1=new Date,O1=[f1(R1.getHours()),f1(R1.getMinutes()),f1(R1.getSeconds())].join(":");return[R1.getDate(),w1[R1.getMonth()],O1].join(" ")}o.log=function(){console.log("%s - %s",m1(),o.format.apply(o,arguments))},o.inherits=inherits_browserExports,o._extend=function(R1,O1){if(!O1||!lv(O1))return R1;for(var Q1=Object.keys(O1),rv=Q1.length;rv--;)R1[Q1[rv]]=O1[Q1[rv]];return R1};function c1(R1,O1){return Object.prototype.hasOwnProperty.call(R1,O1)}var G0=typeof Symbol<"u"?Symbol("util.promisify.custom"):void 0;o.promisify=function(O1){if(typeof O1!="function")throw new TypeError('The "original" argument must be of type Function');if(G0&&O1[G0]){var Q1=O1[G0];if(typeof Q1!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(Q1,G0,{value:Q1,enumerable:!1,writable:!1,configurable:!0}),Q1}function Q1(){for(var rv,D1,ev=new Promise(function(fv,cv){rv=fv,D1=cv}),Mv=[],Zv=0;Zv0?this.tail.next=$0:this.head=$0,this.tail=$0,++this.length}},{key:"unshift",value:function(A0){var $0={data:A0,next:this.head};this.length===0&&(this.tail=$0),this.head=$0,++this.length}},{key:"shift",value:function(){if(this.length!==0){var A0=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,A0}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(A0){if(this.length===0)return"";for(var $0=this.head,O0=""+$0.data;$0=$0.next;)O0+=A0+$0.data;return O0}},{key:"concat",value:function(A0){if(this.length===0)return xu.alloc(0);for(var $0=xu.allocUnsafe(A0>>>0),O0=this.head,L0=0;O0;)i0(O0.data,$0,L0),L0+=O0.data.length,O0=O0.next;return $0}},{key:"consume",value:function(A0,$0){var O0;return A0q0.length?q0.length:A0;if(F0===q0.length?L0+=q0:L0+=q0.slice(0,A0),A0-=F0,A0===0){F0===q0.length?(++O0,$0.next?this.head=$0.next:this.head=this.tail=null):(this.head=$0,$0.data=q0.slice(F0));break}++O0}return this.length-=O0,L0}},{key:"_getBuffer",value:function(A0){var $0=xu.allocUnsafe(A0),O0=this.head,L0=1;for(O0.data.copy($0),A0-=O0.data.length;O0=O0.next;){var q0=O0.data,F0=A0>q0.length?q0.length:A0;if(q0.copy($0,$0.length-A0,0,F0),A0-=F0,A0===0){F0===q0.length?(++L0,O0.next?this.head=O0.next:this.head=this.tail=null):(this.head=O0,O0.data=q0.slice(F0));break}++L0}return this.length-=L0,$0}},{key:Xu,value:function(A0,$0){return Iu(this,a(a({},$0),{},{depth:0,customInspect:!1}))}}]),p0}(),buffer_list}function destroy$1(o,a){var c=this,d=this._readableState&&this._readableState.destroyed,tt=this._writableState&&this._writableState.destroyed;return d||tt?(a?a(o):o&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process$1$4.nextTick(emitErrorNT$1,this,o)):process$1$4.nextTick(emitErrorNT$1,this,o)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(o||null,function(nt){!a&&nt?c._writableState?c._writableState.errorEmitted?process$1$4.nextTick(emitCloseNT,c):(c._writableState.errorEmitted=!0,process$1$4.nextTick(emitErrorAndCloseNT,c,nt)):process$1$4.nextTick(emitErrorAndCloseNT,c,nt):a?(process$1$4.nextTick(emitCloseNT,c),a(nt)):process$1$4.nextTick(emitCloseNT,c)}),this)}function emitErrorAndCloseNT(o,a){emitErrorNT$1(o,a),emitCloseNT(o)}function emitCloseNT(o){o._writableState&&!o._writableState.emitClose||o._readableState&&!o._readableState.emitClose||o.emit("close")}function undestroy$1(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function emitErrorNT$1(o,a){o.emit("error",a)}function errorOrDestroy(o,a){var c=o._readableState,d=o._writableState;c&&c.autoDestroy||d&&d.autoDestroy?o.destroy(a):o.emit("error",a)}var destroy_1$1={destroy:destroy$1,undestroy:undestroy$1,errorOrDestroy},errorsBrowser={};function _inheritsLoose(o,a){o.prototype=Object.create(a.prototype),o.prototype.constructor=o,o.__proto__=a}var codes={};function createErrorType(o,a,c){c||(c=Error);function d(nt,$a,Ys){return typeof a=="string"?a:a(nt,$a,Ys)}var tt=function(nt){_inheritsLoose($a,nt);function $a(Ys,gu,xu){return nt.call(this,d(Ys,gu,xu))||this}return $a}(c);tt.prototype.name=c.name,tt.prototype.code=o,codes[o]=tt}function oneOf$1(o,a){if(Array.isArray(o)){var c=o.length;return o=o.map(function(d){return String(d)}),c>2?"one of ".concat(a," ").concat(o.slice(0,c-1).join(", "),", or ")+o[c-1]:c===2?"one of ".concat(a," ").concat(o[0]," or ").concat(o[1]):"of ".concat(a," ").concat(o[0])}else return"of ".concat(a," ").concat(String(o))}function startsWith(o,a,c){return o.substr(0,a.length)===a}function endsWith(o,a,c){return(c===void 0||c>o.length)&&(c=o.length),o.substring(c-a.length,c)===a}function includes(o,a,c){return typeof c!="number"&&(c=0),c+a.length>o.length?!1:o.indexOf(a,c)!==-1}createErrorType("ERR_INVALID_OPT_VALUE",function(o,a){return'The value "'+a+'" is invalid for option "'+o+'"'},TypeError);createErrorType("ERR_INVALID_ARG_TYPE",function(o,a,c){var d;typeof a=="string"&&startsWith(a,"not ")?(d="must not be",a=a.replace(/^not /,"")):d="must be";var tt;if(endsWith(o," argument"))tt="The ".concat(o," ").concat(d," ").concat(oneOf$1(a,"type"));else{var nt=includes(o,".")?"property":"argument";tt='The "'.concat(o,'" ').concat(nt," ").concat(d," ").concat(oneOf$1(a,"type"))}return tt+=". Received type ".concat(typeof c),tt},TypeError);createErrorType("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");createErrorType("ERR_METHOD_NOT_IMPLEMENTED",function(o){return"The "+o+" method is not implemented"});createErrorType("ERR_STREAM_PREMATURE_CLOSE","Premature close");createErrorType("ERR_STREAM_DESTROYED",function(o){return"Cannot call "+o+" after a stream was destroyed"});createErrorType("ERR_MULTIPLE_CALLBACK","Callback called multiple times");createErrorType("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");createErrorType("ERR_STREAM_WRITE_AFTER_END","write after end");createErrorType("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);createErrorType("ERR_UNKNOWN_ENCODING",function(o){return"Unknown encoding: "+o},TypeError);createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");errorsBrowser.codes=codes;var ERR_INVALID_OPT_VALUE=errorsBrowser.codes.ERR_INVALID_OPT_VALUE;function highWaterMarkFrom(o,a,c){return o.highWaterMark!=null?o.highWaterMark:a?o[c]:null}function getHighWaterMark(o,a,c,d){var tt=highWaterMarkFrom(a,d,c);if(tt!=null){if(!(isFinite(tt)&&Math.floor(tt)===tt)||tt<0){var nt=d?c:"highWaterMark";throw new ERR_INVALID_OPT_VALUE(nt,tt)}return Math.floor(tt)}return o.objectMode?16:16*1024}var state={getHighWaterMark},browser$c=deprecate;function deprecate(o,a){if(config$1("noDeprecation"))return o;var c=!1;function d(){if(!c){if(config$1("throwDeprecation"))throw new Error(a);config$1("traceDeprecation")?console.trace(a):console.warn(a),c=!0}return o.apply(this,arguments)}return d}function config$1(o){try{if(!commonjsGlobal$4.localStorage)return!1}catch{return!1}var a=commonjsGlobal$4.localStorage[o];return a==null?!1:String(a).toLowerCase()==="true"}var _stream_writable$1,hasRequired_stream_writable$1;function require_stream_writable$1(){if(hasRequired_stream_writable$1)return _stream_writable$1;hasRequired_stream_writable$1=1,_stream_writable$1=E1;function o(rv){var D1=this;this.next=null,this.entry=null,this.finish=function(){Q1(D1,rv)}}var a;E1.WritableState=u1;var c={deprecate:browser$c},d=streamBrowser$1,tt=require$$1$4.Buffer,nt=(typeof commonjsGlobal$4<"u"?commonjsGlobal$4:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function $a(rv){return tt.from(rv)}function Ys(rv){return tt.isBuffer(rv)||rv instanceof nt}var gu=destroy_1$1,xu=state,$u=xu.getHighWaterMark,Iu=errorsBrowser.codes,Xu=Iu.ERR_INVALID_ARG_TYPE,i0=Iu.ERR_METHOD_NOT_IMPLEMENTED,p0=Iu.ERR_MULTIPLE_CALLBACK,w0=Iu.ERR_STREAM_CANNOT_PIPE,A0=Iu.ERR_STREAM_DESTROYED,$0=Iu.ERR_STREAM_NULL_VALUES,O0=Iu.ERR_STREAM_WRITE_AFTER_END,L0=Iu.ERR_UNKNOWN_ENCODING,q0=gu.errorOrDestroy;inherits_browserExports(E1,d);function F0(){}function u1(rv,D1,ev){a=a||require_stream_duplex$1(),rv=rv||{},typeof ev!="boolean"&&(ev=D1 instanceof a),this.objectMode=!!rv.objectMode,ev&&(this.objectMode=this.objectMode||!!rv.writableObjectMode),this.highWaterMark=$u(this,rv,"writableHighWaterMark",ev),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var Mv=rv.decodeStrings===!1;this.decodeStrings=!Mv,this.defaultEncoding=rv.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(Zv){f1(D1,Zv)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=rv.emitClose!==!1,this.autoDestroy=!!rv.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}u1.prototype.getBuffer=function(){for(var D1=this.bufferedRequest,ev=[];D1;)ev.push(D1),D1=D1.next;return ev},function(){try{Object.defineProperty(u1.prototype,"buffer",{get:c.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var g1;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(g1=Function.prototype[Symbol.hasInstance],Object.defineProperty(E1,Symbol.hasInstance,{value:function(D1){return g1.call(this,D1)?!0:this!==E1?!1:D1&&D1._writableState instanceof u1}})):g1=function(D1){return D1 instanceof this};function E1(rv){a=a||require_stream_duplex$1();var D1=this instanceof a;if(!D1&&!g1.call(E1,this))return new E1(rv);this._writableState=new u1(rv,this,D1),this.writable=!0,rv&&(typeof rv.write=="function"&&(this._write=rv.write),typeof rv.writev=="function"&&(this._writev=rv.writev),typeof rv.destroy=="function"&&(this._destroy=rv.destroy),typeof rv.final=="function"&&(this._final=rv.final)),d.call(this)}E1.prototype.pipe=function(){q0(this,new w0)};function B1(rv,D1){var ev=new O0;q0(rv,ev),process$1$4.nextTick(D1,ev)}function lv(rv,D1,ev,Mv){var Zv;return ev===null?Zv=new $0:typeof ev!="string"&&!D1.objectMode&&(Zv=new Xu("chunk",["string","Buffer"],ev)),Zv?(q0(rv,Zv),process$1$4.nextTick(Mv,Zv),!1):!0}E1.prototype.write=function(rv,D1,ev){var Mv=this._writableState,Zv=!1,fv=!Mv.objectMode&&Ys(rv);return fv&&!tt.isBuffer(rv)&&(rv=$a(rv)),typeof D1=="function"&&(ev=D1,D1=null),fv?D1="buffer":D1||(D1=Mv.defaultEncoding),typeof ev!="function"&&(ev=F0),Mv.ending?B1(this,ev):(fv||lv(this,Mv,rv,ev))&&(Mv.pendingcb++,Zv=r1(this,Mv,fv,rv,D1,ev)),Zv},E1.prototype.cork=function(){this._writableState.corked++},E1.prototype.uncork=function(){var rv=this._writableState;rv.corked&&(rv.corked--,!rv.writing&&!rv.corked&&!rv.bufferProcessing&&rv.bufferedRequest&&c1(this,rv))},E1.prototype.setDefaultEncoding=function(D1){if(typeof D1=="string"&&(D1=D1.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((D1+"").toLowerCase())>-1))throw new L0(D1);return this._writableState.defaultEncoding=D1,this},Object.defineProperty(E1.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function j1(rv,D1,ev){return!rv.objectMode&&rv.decodeStrings!==!1&&typeof D1=="string"&&(D1=tt.from(D1,ev)),D1}Object.defineProperty(E1.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function r1(rv,D1,ev,Mv,Zv,fv){if(!ev){var cv=j1(D1,Mv,Zv);Mv!==cv&&(ev=!0,Zv="buffer",Mv=cv)}var ly=D1.objectMode?1:Mv.length;D1.length+=ly;var Cy=D1.length>5===6?2:o>>4===14?3:o>>3===30?4:o>>6===2?-1:-2}function utf8CheckIncomplete(o,a,c){var d=a.length-1;if(d=0?(tt>0&&(o.lastNeed=tt-1),tt):--d=0?(tt>0&&(o.lastNeed=tt-2),tt):--d=0?(tt>0&&(tt===2?tt=0:o.lastNeed=tt-3),tt):0))}function utf8CheckExtraBytes(o,a,c){if((a[0]&192)!==128)return o.lastNeed=0,"�";if(o.lastNeed>1&&a.length>1){if((a[1]&192)!==128)return o.lastNeed=1,"�";if(o.lastNeed>2&&a.length>2&&(a[2]&192)!==128)return o.lastNeed=2,"�"}}function utf8FillLast(o){var a=this.lastTotal-this.lastNeed,c=utf8CheckExtraBytes(this,o);if(c!==void 0)return c;if(this.lastNeed<=o.length)return o.copy(this.lastChar,a,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);o.copy(this.lastChar,a,0,o.length),this.lastNeed-=o.length}function utf8Text(o,a){var c=utf8CheckIncomplete(this,o,a);if(!this.lastNeed)return o.toString("utf8",a);this.lastTotal=c;var d=o.length-(c-this.lastNeed);return o.copy(this.lastChar,0,d),o.toString("utf8",a,d)}function utf8End(o){var a=o&&o.length?this.write(o):"";return this.lastNeed?a+"�":a}function utf16Text(o,a){if((o.length-a)%2===0){var c=o.toString("utf16le",a);if(c){var d=c.charCodeAt(c.length-1);if(d>=55296&&d<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=o[o.length-2],this.lastChar[1]=o[o.length-1],c.slice(0,-1)}return c}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=o[o.length-1],o.toString("utf16le",a,o.length-1)}function utf16End(o){var a=o&&o.length?this.write(o):"";if(this.lastNeed){var c=this.lastTotal-this.lastNeed;return a+this.lastChar.toString("utf16le",0,c)}return a}function base64Text(o,a){var c=(o.length-a)%3;return c===0?o.toString("base64",a):(this.lastNeed=3-c,this.lastTotal=3,c===1?this.lastChar[0]=o[o.length-1]:(this.lastChar[0]=o[o.length-2],this.lastChar[1]=o[o.length-1]),o.toString("base64",a,o.length-c))}function base64End(o){var a=o&&o.length?this.write(o):"";return this.lastNeed?a+this.lastChar.toString("base64",0,3-this.lastNeed):a}function simpleWrite(o){return o.toString(this.encoding)}function simpleEnd(o){return o&&o.length?this.write(o):""}var ERR_STREAM_PREMATURE_CLOSE=errorsBrowser.codes.ERR_STREAM_PREMATURE_CLOSE;function once$1(o){var a=!1;return function(){if(!a){a=!0;for(var c=arguments.length,d=new Array(c),tt=0;tt0)if(typeof cv!="string"&&!Hy.objectMode&&Object.getPrototypeOf(cv)!==d.prototype&&(cv=nt(cv)),Cy)Hy.endEmitted?F0(fv,new $0):j1(fv,Hy,cv,!0);else if(Hy.ended)F0(fv,new w0);else{if(Hy.destroyed)return!1;Hy.reading=!1,Hy.decoder&&!ly?(cv=Hy.decoder.write(cv),Hy.objectMode||cv.length!==0?j1(fv,Hy,cv,!1):c1(fv,Hy)):j1(fv,Hy,cv,!1)}else Cy||(Hy.reading=!1,c1(fv,Hy))}return!Hy.ended&&(Hy.length=t1?fv=t1:(fv--,fv|=fv>>>1,fv|=fv>>>2,fv|=fv>>>4,fv|=fv>>>8,fv|=fv>>>16,fv++),fv}function Z0(fv,cv){return fv<=0||cv.length===0&&cv.ended?0:cv.objectMode?1:fv!==fv?cv.flowing&&cv.length?cv.buffer.head.data.length:cv.length:(fv>cv.highWaterMark&&(cv.highWaterMark=D0(fv)),fv<=cv.length?fv:cv.ended?cv.length:(cv.needReadable=!0,0))}B1.prototype.read=function(fv){gu("read",fv),fv=parseInt(fv,10);var cv=this._readableState,ly=fv;if(fv!==0&&(cv.emittedReadable=!1),fv===0&&cv.needReadable&&((cv.highWaterMark!==0?cv.length>=cv.highWaterMark:cv.length>0)||cv.ended))return gu("read: emitReadable",cv.length,cv.ended),cv.length===0&&cv.ended?ev(this):w1(this),null;if(fv=Z0(fv,cv),fv===0&&cv.ended)return cv.length===0&&ev(this),null;var Cy=cv.needReadable;gu("need readable",Cy),(cv.length===0||cv.length-fv0?Ly=D1(fv,cv):Ly=null,Ly===null?(cv.needReadable=cv.length<=cv.highWaterMark,fv=0):(cv.length-=fv,cv.awaitDrain=0),cv.length===0&&(cv.ended||(cv.needReadable=!0),ly!==fv&&cv.ended&&ev(this)),Ly!==null&&this.emit("data",Ly),Ly};function f1(fv,cv){if(gu("onEofChunk"),!cv.ended){if(cv.decoder){var ly=cv.decoder.end();ly&&ly.length&&(cv.buffer.push(ly),cv.length+=cv.objectMode?1:ly.length)}cv.ended=!0,cv.sync?w1(fv):(cv.needReadable=!1,cv.emittedReadable||(cv.emittedReadable=!0,m1(fv)))}}function w1(fv){var cv=fv._readableState;gu("emitReadable",cv.needReadable,cv.emittedReadable),cv.needReadable=!1,cv.emittedReadable||(gu("emitReadable",cv.flowing),cv.emittedReadable=!0,process$1$4.nextTick(m1,fv))}function m1(fv){var cv=fv._readableState;gu("emitReadable_",cv.destroyed,cv.length,cv.ended),!cv.destroyed&&(cv.length||cv.ended)&&(fv.emit("readable"),cv.emittedReadable=!1),cv.needReadable=!cv.flowing&&!cv.ended&&cv.length<=cv.highWaterMark,rv(fv)}function c1(fv,cv){cv.readingMore||(cv.readingMore=!0,process$1$4.nextTick(G0,fv,cv))}function G0(fv,cv){for(;!cv.reading&&!cv.ended&&(cv.length1&&Zv(Cy.pipes,fv)!==-1)&&!jw&&(gu("false write response, pause",Cy.awaitDrain),Cy.awaitDrain++),ly.pause())}function Hw(Lw){gu("onerror",Lw),lw(),fv.removeListener("error",Hw),a(fv,"error")===0&&F0(fv,Lw)}g1(fv,"error",Hw);function uw(){fv.removeListener("finish",Nw),lw()}fv.once("close",uw);function Nw(){gu("onfinish"),fv.removeListener("close",uw),lw()}fv.once("finish",Nw);function lw(){gu("unpipe"),ly.unpipe(fv)}return fv.emit("pipe",ly),Cy.flowing||(gu("pipe resume"),ly.resume()),fv};function o1(fv){return function(){var ly=fv._readableState;gu("pipeOnDrain",ly.awaitDrain),ly.awaitDrain&&ly.awaitDrain--,ly.awaitDrain===0&&a(fv,"data")&&(ly.flowing=!0,rv(fv))}}B1.prototype.unpipe=function(fv){var cv=this._readableState,ly={hasUnpiped:!1};if(cv.pipesCount===0)return this;if(cv.pipesCount===1)return fv&&fv!==cv.pipes?this:(fv||(fv=cv.pipes),cv.pipes=null,cv.pipesCount=0,cv.flowing=!1,fv&&fv.emit("unpipe",this,ly),this);if(!fv){var Cy=cv.pipes,Ly=cv.pipesCount;cv.pipes=null,cv.pipesCount=0,cv.flowing=!1;for(var Hy=0;Hy0,Cy.flowing!==!1&&this.resume()):fv==="readable"&&!Cy.endEmitted&&!Cy.readableListening&&(Cy.readableListening=Cy.needReadable=!0,Cy.flowing=!1,Cy.emittedReadable=!1,gu("on readable",Cy.length,Cy.reading),Cy.length?w1(this):Cy.reading||process$1$4.nextTick(R1,this)),ly},B1.prototype.addListener=B1.prototype.on,B1.prototype.removeListener=function(fv,cv){var ly=c.prototype.removeListener.call(this,fv,cv);return fv==="readable"&&process$1$4.nextTick(d1,this),ly},B1.prototype.removeAllListeners=function(fv){var cv=c.prototype.removeAllListeners.apply(this,arguments);return(fv==="readable"||fv===void 0)&&process$1$4.nextTick(d1,this),cv};function d1(fv){var cv=fv._readableState;cv.readableListening=fv.listenerCount("readable")>0,cv.resumeScheduled&&!cv.paused?cv.flowing=!0:fv.listenerCount("data")>0&&fv.resume()}function R1(fv){gu("readable nexttick read 0"),fv.read(0)}B1.prototype.resume=function(){var fv=this._readableState;return fv.flowing||(gu("resume"),fv.flowing=!fv.readableListening,O1(this,fv)),fv.paused=!1,this};function O1(fv,cv){cv.resumeScheduled||(cv.resumeScheduled=!0,process$1$4.nextTick(Q1,fv,cv))}function Q1(fv,cv){gu("resume",cv.reading),cv.reading||fv.read(0),cv.resumeScheduled=!1,fv.emit("resume"),rv(fv),cv.flowing&&!cv.reading&&fv.read(0)}B1.prototype.pause=function(){return gu("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(gu("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function rv(fv){var cv=fv._readableState;for(gu("flow",cv.flowing);cv.flowing&&fv.read()!==null;);}B1.prototype.wrap=function(fv){var cv=this,ly=this._readableState,Cy=!1;fv.on("end",function(){if(gu("wrapped end"),ly.decoder&&!ly.ended){var t2=ly.decoder.end();t2&&t2.length&&cv.push(t2)}cv.push(null)}),fv.on("data",function(t2){if(gu("wrapped data"),ly.decoder&&(t2=ly.decoder.write(t2)),!(ly.objectMode&&t2==null)&&!(!ly.objectMode&&(!t2||!t2.length))){var C2=cv.push(t2);C2||(Cy=!0,fv.pause())}});for(var Ly in fv)this[Ly]===void 0&&typeof fv[Ly]=="function"&&(this[Ly]=function(C2){return function(){return fv[C2].apply(fv,arguments)}}(Ly));for(var Hy=0;Hy=cv.length?(cv.decoder?ly=cv.buffer.join(""):cv.buffer.length===1?ly=cv.buffer.first():ly=cv.buffer.concat(cv.length),cv.buffer.clear()):ly=cv.buffer.consume(fv,cv.decoder),ly}function ev(fv){var cv=fv._readableState;gu("endReadable",cv.endEmitted),cv.endEmitted||(cv.ended=!0,process$1$4.nextTick(Mv,cv,fv))}function Mv(fv,cv){if(gu("endReadableNT",fv.endEmitted,fv.length),!fv.endEmitted&&fv.length===0&&(fv.endEmitted=!0,cv.readable=!1,cv.emit("end"),fv.autoDestroy)){var ly=cv._writableState;(!ly||ly.autoDestroy&&ly.finished)&&cv.destroy()}}typeof Symbol=="function"&&(B1.from=function(fv,cv){return q0===void 0&&(q0=requireFromBrowser()),q0(B1,fv,cv)});function Zv(fv,cv){for(var ly=0,Cy=fv.length;ly0;return destroyer($a,gu,xu,function($u){tt||(tt=$u),$u&&nt.forEach(call$o),!gu&&(nt.forEach(call$o),d(tt))})});return a.reduce(pipe$2)}var pipeline_1=pipeline;(function(o,a){a=o.exports=require_stream_readable$1(),a.Stream=a,a.Readable=a,a.Writable=require_stream_writable$1(),a.Duplex=require_stream_duplex$1(),a.Transform=_stream_transform$1,a.PassThrough=_stream_passthrough$1,a.finished=endOfStream,a.pipeline=pipeline_1})(readableBrowser$1,readableBrowser$1.exports);var readableBrowserExports$1=readableBrowser$1.exports,hasRequiredResponse;function requireResponse(){if(hasRequiredResponse)return response;hasRequiredResponse=1;var o=requireCapability(),a=inherits_browserExports,c=readableBrowserExports$1,d=response.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},tt=response.IncomingMessage=function(nt,$a,Ys,gu){var xu=this;if(c.Readable.call(xu),xu._mode=Ys,xu.headers={},xu.rawHeaders=[],xu.trailers={},xu.rawTrailers=[],xu.on("end",function(){process$1$4.nextTick(function(){xu.emit("close")})}),Ys==="fetch"){let A0=function(){Iu.read().then(function($0){if(!xu._destroyed){if(gu($0.done),$0.done){xu.push(null);return}xu.push(Buffer$C.from($0.value)),A0()}}).catch(function($0){gu(!0),xu._destroyed||xu.emit("error",$0)})};var w0=A0;if(xu._fetchResponse=$a,xu.url=$a.url,xu.statusCode=$a.status,xu.statusMessage=$a.statusText,$a.headers.forEach(function($0,O0){xu.headers[O0.toLowerCase()]=$0,xu.rawHeaders.push(O0,$0)}),o.writableStream){var $u=new WritableStream({write:function($0){return gu(!1),new Promise(function(O0,L0){xu._destroyed?L0():xu.push(Buffer$C.from($0))?O0():xu._resumeFetch=O0})},close:function(){gu(!0),xu._destroyed||xu.push(null)},abort:function($0){gu(!0),xu._destroyed||xu.emit("error",$0)}});try{$a.body.pipeTo($u).catch(function($0){gu(!0),xu._destroyed||xu.emit("error",$0)});return}catch{}}var Iu=$a.body.getReader();A0()}else{xu._xhr=nt,xu._pos=0,xu.url=nt.responseURL,xu.statusCode=nt.status,xu.statusMessage=nt.statusText;var Xu=nt.getAllResponseHeaders().split(/\r?\n/);if(Xu.forEach(function(A0){var $0=A0.match(/^([^:]+):\s*(.*)/);if($0){var O0=$0[1].toLowerCase();O0==="set-cookie"?(xu.headers[O0]===void 0&&(xu.headers[O0]=[]),xu.headers[O0].push($0[2])):xu.headers[O0]!==void 0?xu.headers[O0]+=", "+$0[2]:xu.headers[O0]=$0[2],xu.rawHeaders.push($0[1],$0[2])}}),xu._charset="x-user-defined",!o.overrideMimeType){var i0=xu.rawHeaders["mime-type"];if(i0){var p0=i0.match(/;\s*charset=([^;])(;|$)/);p0&&(xu._charset=p0[1].toLowerCase())}xu._charset||(xu._charset="utf-8")}}};return a(tt,c.Readable),tt.prototype._read=function(){var nt=this,$a=nt._resumeFetch;$a&&(nt._resumeFetch=null,$a())},tt.prototype._onXHRProgress=function(nt){var $a=this,Ys=$a._xhr,gu=null;switch($a._mode){case"text":if(gu=Ys.responseText,gu.length>$a._pos){var xu=gu.substr($a._pos);if($a._charset==="x-user-defined"){for(var $u=Buffer$C.alloc(xu.length),Iu=0;Iu$a._pos&&($a.push(Buffer$C.from(new Uint8Array(Xu.result.slice($a._pos)))),$a._pos=Xu.result.byteLength)},Xu.onload=function(){nt(!0),$a.push(null)},Xu.readAsArrayBuffer(gu);break}$a._xhr.readyState===d.DONE&&$a._mode!=="ms-stream"&&(nt(!0),$a.push(null))},response}var hasRequiredRequest;function requireRequest(){if(hasRequiredRequest)return request.exports;hasRequiredRequest=1;var o=requireCapability(),a=inherits_browserExports,c=requireResponse(),d=readableBrowserExports$1,tt=c.IncomingMessage,nt=c.readyStates;function $a($u,Iu){return o.fetch&&Iu?"fetch":o.mozchunkedarraybuffer?"moz-chunked-arraybuffer":o.msstream?"ms-stream":o.arraybuffer&&$u?"arraybuffer":"text"}var Ys=request.exports=function($u){var Iu=this;d.Writable.call(Iu),Iu._opts=$u,Iu._body=[],Iu._headers={},$u.auth&&Iu.setHeader("Authorization","Basic "+Buffer$C.from($u.auth).toString("base64")),Object.keys($u.headers).forEach(function(p0){Iu.setHeader(p0,$u.headers[p0])});var Xu,i0=!0;if($u.mode==="disable-fetch"||"requestTimeout"in $u&&!o.abortController)i0=!1,Xu=!0;else if($u.mode==="prefer-streaming")Xu=!1;else if($u.mode==="allow-wrong-content-type")Xu=!o.overrideMimeType;else if(!$u.mode||$u.mode==="default"||$u.mode==="prefer-fast")Xu=!0;else throw new Error("Invalid value for opts.mode");Iu._mode=$a(Xu,i0),Iu._fetchTimer=null,Iu._socketTimeout=null,Iu._socketTimer=null,Iu.on("finish",function(){Iu._onFinish()})};a(Ys,d.Writable),Ys.prototype.setHeader=function($u,Iu){var Xu=this,i0=$u.toLowerCase();xu.indexOf(i0)===-1&&(Xu._headers[i0]={name:$u,value:Iu})},Ys.prototype.getHeader=function($u){var Iu=this._headers[$u.toLowerCase()];return Iu?Iu.value:null},Ys.prototype.removeHeader=function($u){var Iu=this;delete Iu._headers[$u.toLowerCase()]},Ys.prototype._onFinish=function(){var $u=this;if(!$u._destroyed){var Iu=$u._opts;"timeout"in Iu&&Iu.timeout!==0&&$u.setTimeout(Iu.timeout);var Xu=$u._headers,i0=null;Iu.method!=="GET"&&Iu.method!=="HEAD"&&(i0=new Blob($u._body,{type:(Xu["content-type"]||{}).value||""}));var p0=[];if(Object.keys(Xu).forEach(function(O0){var L0=Xu[O0].name,q0=Xu[O0].value;Array.isArray(q0)?q0.forEach(function(F0){p0.push([L0,F0])}):p0.push([L0,q0])}),$u._mode==="fetch"){var w0=null;if(o.abortController){var A0=new AbortController;w0=A0.signal,$u._fetchAbortController=A0,"requestTimeout"in Iu&&Iu.requestTimeout!==0&&($u._fetchTimer=commonjsGlobal$4.setTimeout(function(){$u.emit("requestTimeout"),$u._fetchAbortController&&$u._fetchAbortController.abort()},Iu.requestTimeout))}commonjsGlobal$4.fetch($u._opts.url,{method:$u._opts.method,headers:p0,body:i0||void 0,mode:"cors",credentials:Iu.withCredentials?"include":"same-origin",signal:w0}).then(function(O0){$u._fetchResponse=O0,$u._resetTimers(!1),$u._connect()},function(O0){$u._resetTimers(!0),$u._destroyed||$u.emit("error",O0)})}else{var $0=$u._xhr=new commonjsGlobal$4.XMLHttpRequest;try{$0.open($u._opts.method,$u._opts.url,!0)}catch(O0){process$1$4.nextTick(function(){$u.emit("error",O0)});return}"responseType"in $0&&($0.responseType=$u._mode),"withCredentials"in $0&&($0.withCredentials=!!Iu.withCredentials),$u._mode==="text"&&"overrideMimeType"in $0&&$0.overrideMimeType("text/plain; charset=x-user-defined"),"requestTimeout"in Iu&&($0.timeout=Iu.requestTimeout,$0.ontimeout=function(){$u.emit("requestTimeout")}),p0.forEach(function(O0){$0.setRequestHeader(O0[0],O0[1])}),$u._response=null,$0.onreadystatechange=function(){switch($0.readyState){case nt.LOADING:case nt.DONE:$u._onXHRProgress();break}},$u._mode==="moz-chunked-arraybuffer"&&($0.onprogress=function(){$u._onXHRProgress()}),$0.onerror=function(){$u._destroyed||($u._resetTimers(!0),$u.emit("error",new Error("XHR error")))};try{$0.send(i0)}catch(O0){process$1$4.nextTick(function(){$u.emit("error",O0)});return}}}};function gu($u){try{var Iu=$u.status;return Iu!==null&&Iu!==0}catch{return!1}}Ys.prototype._onXHRProgress=function(){var $u=this;$u._resetTimers(!1),!(!gu($u._xhr)||$u._destroyed)&&($u._response||$u._connect(),$u._response._onXHRProgress($u._resetTimers.bind($u)))},Ys.prototype._connect=function(){var $u=this;$u._destroyed||($u._response=new tt($u._xhr,$u._fetchResponse,$u._mode,$u._resetTimers.bind($u)),$u._response.on("error",function(Iu){$u.emit("error",Iu)}),$u.emit("response",$u._response))},Ys.prototype._write=function($u,Iu,Xu){var i0=this;i0._body.push($u),Xu()},Ys.prototype._resetTimers=function($u){var Iu=this;commonjsGlobal$4.clearTimeout(Iu._socketTimer),Iu._socketTimer=null,$u?(commonjsGlobal$4.clearTimeout(Iu._fetchTimer),Iu._fetchTimer=null):Iu._socketTimeout&&(Iu._socketTimer=commonjsGlobal$4.setTimeout(function(){Iu.emit("timeout")},Iu._socketTimeout))},Ys.prototype.abort=Ys.prototype.destroy=function($u){var Iu=this;Iu._destroyed=!0,Iu._resetTimers(!0),Iu._response&&(Iu._response._destroyed=!0),Iu._xhr?Iu._xhr.abort():Iu._fetchAbortController&&Iu._fetchAbortController.abort(),$u&&Iu.emit("error",$u)},Ys.prototype.end=function($u,Iu,Xu){var i0=this;typeof $u=="function"&&(Xu=$u,$u=void 0),d.Writable.prototype.end.call(i0,$u,Iu,Xu)},Ys.prototype.setTimeout=function($u,Iu){var Xu=this;Iu&&Xu.once("timeout",Iu),Xu._socketTimeout=$u,Xu._resetTimers(!1)},Ys.prototype.flushHeaders=function(){},Ys.prototype.setNoDelay=function(){},Ys.prototype.setSocketKeepAlive=function(){};var xu=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","via"];return request.exports}var immutable,hasRequiredImmutable;function requireImmutable(){if(hasRequiredImmutable)return immutable;hasRequiredImmutable=1,immutable=a;var o=Object.prototype.hasOwnProperty;function a(){for(var c={},d=0;d= 0x80 (not a basic code point)","invalid-input":"Invalid input"},q0=gu-xu,F0=Math.floor,u1=String.fromCharCode,g1;function E1(G0){throw new RangeError(L0[G0])}function B1(G0,o1){for(var d1=G0.length,R1=[];d1--;)R1[d1]=o1(G0[d1]);return R1}function lv(G0,o1){var d1=G0.split("@"),R1="";d1.length>1&&(R1=d1[0]+"@",G0=d1[1]),G0=G0.replace(O0,".");var O1=G0.split("."),Q1=B1(O1,o1).join(".");return R1+Q1}function j1(G0){for(var o1=[],d1=0,R1=G0.length,O1,Q1;d1=55296&&O1<=56319&&d165535&&(o1-=65536,d1+=u1(o1>>>10&1023|55296),o1=56320|o1&1023),d1+=u1(o1),d1}).join("")}function t1(G0){return G0-48<10?G0-22:G0-65<26?G0-65:G0-97<26?G0-97:gu}function D0(G0,o1){return G0+22+75*(G0<26)-((o1!=0)<<5)}function Z0(G0,o1,d1){var R1=0;for(G0=d1?F0(G0/Xu):G0>>1,G0+=F0(G0/o1);G0>q0*$u>>1;R1+=gu)G0=F0(G0/q0);return F0(R1+(q0+1)*G0/(G0+Iu))}function f1(G0){var o1=[],d1=G0.length,R1,O1=0,Q1=p0,rv=i0,D1,ev,Mv,Zv,fv,cv,ly,Cy,Ly;for(D1=G0.lastIndexOf(w0),D1<0&&(D1=0),ev=0;ev=128&&E1("not-basic"),o1.push(G0.charCodeAt(ev));for(Mv=D1>0?D1+1:0;Mv=d1&&E1("invalid-input"),ly=t1(G0.charCodeAt(Mv++)),(ly>=gu||ly>F0((Ys-O1)/fv))&&E1("overflow"),O1+=ly*fv,Cy=cv<=rv?xu:cv>=rv+$u?$u:cv-rv,!(lyF0(Ys/Ly)&&E1("overflow"),fv*=Ly;R1=o1.length+1,rv=Z0(O1-Zv,R1,Zv==0),F0(O1/R1)>Ys-Q1&&E1("overflow"),Q1+=F0(O1/R1),O1%=R1,o1.splice(O1++,0,Q1)}return r1(o1)}function w1(G0){var o1,d1,R1,O1,Q1,rv,D1,ev,Mv,Zv,fv,cv=[],ly,Cy,Ly,Hy;for(G0=j1(G0),ly=G0.length,o1=p0,d1=0,Q1=i0,rv=0;rv=o1&&fvF0((Ys-d1)/Cy)&&E1("overflow"),d1+=(D1-o1)*Cy,o1=D1,rv=0;rvYs&&E1("overflow"),fv==o1){for(ev=d1,Mv=gu;Zv=Mv<=Q1?xu:Mv>=Q1+$u?$u:Mv-Q1,!(ev0&&Ys>$a&&(Ys=$a);for(var gu=0;gu=0?(Iu=xu.substr(0,$u),Xu=xu.substr($u+1)):(Iu=xu,Xu=""),i0=decodeURIComponent(Iu),p0=decodeURIComponent(Xu),hasOwnProperty$4(tt,i0)?isArray$4(tt[i0])?tt[i0].push(p0):tt[i0]=[tt[i0],p0]:tt[i0]=p0}return tt},isArray$4=Array.isArray||function(o){return Object.prototype.toString.call(o)==="[object Array]"},stringifyPrimitive=function(o){switch(typeof o){case"string":return o;case"boolean":return o?"true":"false";case"number":return isFinite(o)?o:"";default:return""}},encode$3=function(o,a,c,d){return a=a||"&",c=c||"=",o===null&&(o=void 0),typeof o=="object"?map(objectKeys$6(o),function(tt){var nt=encodeURIComponent(stringifyPrimitive(tt))+c;return isArray$3(o[tt])?map(o[tt],function($a){return nt+encodeURIComponent(stringifyPrimitive($a))}).join(a):nt+encodeURIComponent(stringifyPrimitive(o[tt]))}).join(a):d?encodeURIComponent(stringifyPrimitive(d))+c+encodeURIComponent(stringifyPrimitive(o)):""},isArray$3=Array.isArray||function(o){return Object.prototype.toString.call(o)==="[object Array]"};function map(o,a){if(o.map)return o.map(a);for(var c=[],d=0;d",'"',"`"," ","\r",` -`," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[+a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:!0,"javascript:":!0},hostlessProtocol={javascript:!0,"javascript:":!0},slashedProtocol={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},querystring$1=api$2;function urlParse$2(o,a,c){if(o&&util$4.isObject(o)&&o instanceof Url$1)return o;var d=new Url$1;return d.parse(o,a,c),d}Url$1.prototype.parse=function(o,a,c){if(!util$4.isString(o))throw new TypeError("Parameter 'url' must be a string, not "+typeof o);var d=o.indexOf("?"),tt=d!==-1&&d127?F0+="x":F0+=q0[u1];if(!F0.match(hostnamePartPattern)){var E1=O0.slice(0,i0),B1=O0.slice(i0+1),lv=q0.match(hostnamePartStart);lv&&(E1.push(lv[1]),B1.unshift(lv[2])),B1.length&&(Ys="/"+B1.join(".")+Ys),this.hostname=E1.join(".");break}}}this.hostname.length>hostnameMaxLen?this.hostname="":this.hostname=this.hostname.toLowerCase(),$0||(this.hostname=punycode$1.toASCII(this.hostname));var j1=this.port?":"+this.port:"",r1=this.hostname||"";this.host=r1+j1,this.href+=this.host,$0&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),Ys[0]!=="/"&&(Ys="/"+Ys))}if(!unsafeProtocol[$u])for(var i0=0,L0=autoEscape.length;i00?c.host.split("@"):!1;F0&&(c.auth=F0.shift(),c.host=c.hostname=F0.shift())}return c.search=o.search,c.query=o.query,(!util$4.isNull(c.pathname)||!util$4.isNull(c.search))&&(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.href=c.format(),c}if(!O0.length)return c.pathname=null,c.search?c.path="/"+c.search:c.path=null,c.href=c.format(),c;for(var u1=O0.slice(-1)[0],g1=(c.host||o.host||O0.length>1)&&(u1==="."||u1==="..")||u1==="",E1=0,B1=O0.length;B1>=0;B1--)u1=O0[B1],u1==="."?O0.splice(B1,1):u1===".."?(O0.splice(B1,1),E1++):E1&&(O0.splice(B1,1),E1--);if(!A0&&!$0)for(;E1--;E1)O0.unshift("..");A0&&O0[0]!==""&&(!O0[0]||O0[0].charAt(0)!=="/")&&O0.unshift(""),g1&&O0.join("/").substr(-1)!=="/"&&O0.push("");var lv=O0[0]===""||O0[0]&&O0[0].charAt(0)==="/";if(q0){c.hostname=c.host=lv?"":O0.length?O0.shift():"";var F0=c.host&&c.host.indexOf("@")>0?c.host.split("@"):!1;F0&&(c.auth=F0.shift(),c.host=c.hostname=F0.shift())}return A0=A0||c.host&&O0.length,A0&&!lv&&O0.unshift(""),O0.length?c.pathname=O0.join("/"):(c.pathname=null,c.path=null),(!util$4.isNull(c.pathname)||!util$4.isNull(c.search))&&(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.auth=o.auth||c.auth,c.slashes=c.slashes||o.slashes,c.href=c.format(),c};Url$1.prototype.parseHost=function(){var o=this.host,a=portPattern.exec(o);a&&(a=a[0],a!==":"&&(this.port=a.substr(1)),o=o.substr(0,o.length-a.length)),o&&(this.hostname=o)};function normalizeArray(o,a){for(var c=0,d=o.length-1;d>=0;d--){var tt=o[d];tt==="."?o.splice(d,1):tt===".."?(o.splice(d,1),c++):c&&(o.splice(d,1),c--)}if(a)for(;c--;c)o.unshift("..");return o}function resolve$3(){for(var o="",a=!1,c=arguments.length-1;c>=-1&&!a;c--){var d=c>=0?arguments[c]:"/";if(typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)continue;o=d+"/"+o,a=d.charAt(0)==="/"}return o=normalizeArray(filter(o.split("/"),function(tt){return!!tt}),!a).join("/"),(a?"/":"")+o||"."}function filter(o,a){if(o.filter)return o.filter(a);for(var c=[],d=0;d"u")throw new TypeError('The "domain" argument must be specified');return new URL$1("http://"+a).hostname},domainToUnicode=function(a){if(typeof a>"u")throw new TypeError('The "domain" argument must be specified');return new URL$1("http://"+a).hostname},pathToFileURL=function(a){var c=new URL$1("file://"),d=resolve$3(a),tt=a.charCodeAt(a.length-1);return tt===CHAR_FORWARD_SLASH&&d[d.length-1]!=="/"&&(d+="/"),c.pathname=encodePathChars(d),c},fileURLToPath=function(a){if(!isURLInstance(a)&&typeof a!="string")throw new TypeError('The "path" argument must be of type string or an instance of URL. Received type '+typeof a+" ("+a+")");var c=new URL$1(a);if(c.protocol!=="file:")throw new TypeError("The URL must be of scheme file");return getPathFromURLPosix(c)},formatImportWithOverloads=function(a,c){var d,tt,nt;if(c===void 0&&(c={}),!(a instanceof URL$1))return formatImport(a);if(typeof c!="object"||c===null)throw new TypeError('The "options" argument must be of type object.');var $a=(d=c.auth)!=null?d:!0,Ys=(tt=c.fragment)!=null?tt:!0,gu=(nt=c.search)!=null?nt:!0,xu=new URL$1(a.toString());return $a||(xu.username="",xu.password=""),Ys||(xu.hash=""),gu||(xu.search=""),xu.toString()},api$1={format:formatImportWithOverloads,parse:parseImport,resolve:resolveImport,resolveObject,Url:UrlImport,URL:URL$1,URLSearchParams:URLSearchParams$2,domainToASCII,domainToUnicode,pathToFileURL,fileURLToPath};const url=Object.freeze(Object.defineProperty({__proto__:null,URL:URL$1,URLSearchParams:URLSearchParams$2,Url:UrlImport,default:api$1,domainToASCII,domainToUnicode,fileURLToPath,format:formatImportWithOverloads,parse:parseImport,pathToFileURL,resolve:resolveImport,resolveObject},Symbol.toStringTag,{value:"Module"})),require$$1$3=getAugmentedNamespace(url);var hasRequiredStreamHttp;function requireStreamHttp(){return hasRequiredStreamHttp||(hasRequiredStreamHttp=1,function(o){var a=requireRequest(),c=requireResponse(),d=requireImmutable(),tt=requireBrowser$3(),nt=require$$1$3,$a=o;$a.request=function(Ys,gu){typeof Ys=="string"?Ys=nt.parse(Ys):Ys=d(Ys);var xu=commonjsGlobal$4.location.protocol.search(/^https?:$/)===-1?"http:":"",$u=Ys.protocol||xu,Iu=Ys.hostname||Ys.host,Xu=Ys.port,i0=Ys.path||"/";Iu&&Iu.indexOf(":")!==-1&&(Iu="["+Iu+"]"),Ys.url=(Iu?$u+"//"+Iu:"")+(Xu?":"+Xu:"")+i0,Ys.method=(Ys.method||"GET").toUpperCase(),Ys.headers=Ys.headers||{};var p0=new a(Ys);return gu&&p0.on("response",gu),p0},$a.get=function(gu,xu){var $u=$a.request(gu,xu);return $u.end(),$u},$a.ClientRequest=a,$a.IncomingMessage=c.IncomingMessage,$a.Agent=function(){},$a.Agent.defaultMaxSockets=4,$a.globalAgent=new $a.Agent,$a.STATUS_CODES=tt,$a.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}(streamHttp)),streamHttp}var httpsBrowserify={exports:{}},hasRequiredHttpsBrowserify;function requireHttpsBrowserify(){return hasRequiredHttpsBrowserify||(hasRequiredHttpsBrowserify=1,function(o){var a=requireStreamHttp(),c=require$$1$3,d=o.exports;for(var tt in a)a.hasOwnProperty(tt)&&(d[tt]=a[tt]);d.request=function($a,Ys){return $a=nt($a),a.request.call(this,$a,Ys)},d.get=function($a,Ys){return $a=nt($a),a.get.call(this,$a,Ys)};function nt($a){if(typeof $a=="string"&&($a=c.parse($a)),$a.protocol||($a.protocol="https:"),$a.protocol!=="https:")throw new Error('Protocol "'+$a.protocol+'" not supported. Expected "https:"');return $a}}(httpsBrowserify)),httpsBrowserify.exports}var hasRequiredFetch;function requireFetch(){if(hasRequiredFetch)return fetch$2;hasRequiredFetch=1;var o=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(gu){return gu&&gu.__esModule?gu:{default:gu}};Object.defineProperty(fetch$2,"__esModule",{value:!0});const a=o(requireBrowser$4()),c=o(requireStreamHttp()),d=o(requireHttpsBrowserify()),tt=new c.default.Agent({keepAlive:!0}),nt=new d.default.Agent({keepAlive:!0});function $a(gu){return gu.protocol==="http:"?tt:nt}function Ys(gu,xu){return(0,a.default)(gu,Object.assign({agent:$a(new URL(gu.toString()))},xu))}return fetch$2.default=Ys,fetch$2}var __createBinding$1=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(o,a,c,d){d===void 0&&(d=c);var tt=Object.getOwnPropertyDescriptor(a,c);(!tt||("get"in tt?!a.__esModule:tt.writable||tt.configurable))&&(tt={enumerable:!0,get:function(){return a[c]}}),Object.defineProperty(o,d,tt)}:function(o,a,c,d){d===void 0&&(d=c),o[d]=a[c]}),__setModuleDefault$1=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(o,a){Object.defineProperty(o,"default",{enumerable:!0,value:a})}:function(o,a){o.default=a}),__importStar$1=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var c in o)c!=="default"&&Object.prototype.hasOwnProperty.call(o,c)&&__createBinding$1(a,o,c);return __setModuleDefault$1(a,o),a},__awaiter$f=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__importDefault$7=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(fetch_json,"__esModule",{value:!0});fetch_json.fetchJson=void 0;const types_1$6=lib$8,utils_1$8=lib$9,http_errors_1=__importDefault$7(httpErrorsExports),exponential_backoff_1$1=exponentialBackoff$1,START_WAIT_TIME_MS=1e3,BACKOFF_MULTIPLIER=1.5,RETRY_NUMBER=10;function fetchJson(o,a){return __awaiter$f(this,void 0,void 0,function*(){let c={url:null};typeof o=="string"?c.url=o:c=o;const d=yield(0,exponential_backoff_1$1.exponentialBackoff)(START_WAIT_TIME_MS,RETRY_NUMBER,BACKOFF_MULTIPLIER,()=>__awaiter$f(this,void 0,void 0,function*(){var tt;try{const nt=yield((tt=commonjsGlobal$4.fetch)!==null&&tt!==void 0?tt:(yield Promise.resolve().then(()=>__importStar$1(requireFetch()))).default)(c.url,{method:a?"POST":"GET",body:a||void 0,headers:Object.assign(Object.assign({},c.headers),{"Content-Type":"application/json"})});if(!nt.ok){if(nt.status===503)return utils_1$8.Logger.warn(`Retrying HTTP request for ${c.url} as it's not available now`),null;if(nt.status===408)return utils_1$8.Logger.warn(`Retrying HTTP request for ${c.url} as the previous connection was unused for some time`),null;throw(0,http_errors_1.default)(nt.status,yield nt.text())}return nt}catch(nt){if(nt.toString().includes("FetchError")||nt.toString().includes("Failed to fetch"))return utils_1$8.Logger.warn(`Retrying HTTP request for ${c.url} because of error: ${nt}`),null;throw nt}}));if(!d)throw new types_1$6.TypedError(`Exceeded ${RETRY_NUMBER} attempts for ${c.url}.`,"RetriesExceeded");return yield d.json()})}fetch_json.fetchJson=fetchJson;var __awaiter$e=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__rest$2=commonjsGlobal$4&&commonjsGlobal$4.__rest||function(o,a){var c={};for(var d in o)Object.prototype.hasOwnProperty.call(o,d)&&a.indexOf(d)<0&&(c[d]=o[d]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var tt=0,d=Object.getOwnPropertySymbols(o);tt__awaiter$e(this,void 0,void 0,function*(){var nt;try{const $a={method:a,params:c,id:_nextId++,jsonrpc:"2.0"},Ys=yield(0,fetch_json_1.fetchJson)(this.connection,JSON.stringify($a));if(Ys.error){if(typeof Ys.error.data=="object")throw typeof Ys.error.data.error_message=="string"&&typeof Ys.error.data.error_type=="string"?new types_1$5.TypedError(Ys.error.data.error_message,Ys.error.data.error_type):(0,utils_1$7.parseRpcError)(Ys.error.data);{const gu=`[${Ys.error.code}] ${Ys.error.message}: ${Ys.error.data}`;if(Ys.error.data==="Timeout"||gu.includes("Timeout error")||gu.includes("query has timed out"))throw new types_1$5.TypedError(gu,"TimeoutError");const xu=(0,utils_1$7.getErrorTypeFromErrorMessage)(Ys.error.data,"");throw xu?new types_1$5.TypedError((0,utils_1$7.formatError)(xu,c),xu):new types_1$5.TypedError(gu,Ys.error.name)}}else if(typeof((nt=Ys.result)===null||nt===void 0?void 0:nt.error)=="string"){const gu=(0,utils_1$7.getErrorTypeFromErrorMessage)(Ys.result.error,"");if(gu)throw new utils_1$7.ServerError((0,utils_1$7.formatError)(gu,c),gu)}return Ys}catch($a){if($a.type==="TimeoutError")return utils_1$7.Logger.warn(`Retrying request to ${a} as it has timed out`,c),null;throw $a}})),{result:tt}=d;if(typeof tt>"u")throw new types_1$5.TypedError(`Exceeded ${REQUEST_RETRY_NUMBER} attempts for request to ${a}.`,"RetriesExceeded");return tt})}}jsonRpcProvider$1.JsonRpcProvider=JsonRpcProvider;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.fetchJson=o.Provider=o.JsonRpcProvider=o.exponentialBackoff=void 0;var a=exponentialBackoff$1;Object.defineProperty(o,"exponentialBackoff",{enumerable:!0,get:function(){return a.exponentialBackoff}});var c=jsonRpcProvider$1;Object.defineProperty(o,"JsonRpcProvider",{enumerable:!0,get:function(){return c.JsonRpcProvider}});var d=provider;Object.defineProperty(o,"Provider",{enumerable:!0,get:function(){return d.Provider}});var tt=fetch_json;Object.defineProperty(o,"fetchJson",{enumerable:!0,get:function(){return tt.fetchJson}})})(lib$6);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.FinalExecutionStatusBasic=o.ExecutionStatusBasic=o.IdType=o.Provider=o.getTransactionLastResult=void 0;var a=lib$9;Object.defineProperty(o,"getTransactionLastResult",{enumerable:!0,get:function(){return a.getTransactionLastResult}});var c=lib$6;Object.defineProperty(o,"Provider",{enumerable:!0,get:function(){return c.Provider}});var d=lib$8;Object.defineProperty(o,"IdType",{enumerable:!0,get:function(){return d.IdType}}),Object.defineProperty(o,"ExecutionStatusBasic",{enumerable:!0,get:function(){return d.ExecutionStatusBasic}}),Object.defineProperty(o,"FinalExecutionStatusBasic",{enumerable:!0,get:function(){return d.FinalExecutionStatusBasic}})})(provider$1);var jsonRpcProvider={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.JsonRpcProvider=o.TypedError=o.ErrorContext=void 0;var a=lib$8;Object.defineProperty(o,"ErrorContext",{enumerable:!0,get:function(){return a.ErrorContext}}),Object.defineProperty(o,"TypedError",{enumerable:!0,get:function(){return a.TypedError}});var c=lib$6;Object.defineProperty(o,"JsonRpcProvider",{enumerable:!0,get:function(){return c.JsonRpcProvider}})})(jsonRpcProvider);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.ErrorContext=o.TypedError=o.getTransactionLastResult=o.FinalExecutionStatusBasic=o.JsonRpcProvider=o.Provider=void 0;const a=provider$1;Object.defineProperty(o,"Provider",{enumerable:!0,get:function(){return a.Provider}}),Object.defineProperty(o,"getTransactionLastResult",{enumerable:!0,get:function(){return a.getTransactionLastResult}}),Object.defineProperty(o,"FinalExecutionStatusBasic",{enumerable:!0,get:function(){return a.FinalExecutionStatusBasic}});const c=jsonRpcProvider;Object.defineProperty(o,"JsonRpcProvider",{enumerable:!0,get:function(){return c.JsonRpcProvider}}),Object.defineProperty(o,"TypedError",{enumerable:!0,get:function(){return c.TypedError}}),Object.defineProperty(o,"ErrorContext",{enumerable:!0,get:function(){return c.ErrorContext}})})(providers);var utils$s={},key_pair={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.PublicKey=o.KeyType=o.KeyPairEd25519=o.KeyPair=void 0;var a=lib$a;Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return a.KeyPair}}),Object.defineProperty(o,"KeyPairEd25519",{enumerable:!0,get:function(){return a.KeyPairEd25519}}),Object.defineProperty(o,"KeyType",{enumerable:!0,get:function(){return a.KeyType}}),Object.defineProperty(o,"PublicKey",{enumerable:!0,get:function(){return a.PublicKey}})})(key_pair);var serialize$2={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.base_decode=o.base_encode=o.deserialize=o.serialize=void 0;var a=cjs;Object.defineProperty(o,"serialize",{enumerable:!0,get:function(){return a.serialize}}),Object.defineProperty(o,"deserialize",{enumerable:!0,get:function(){return a.deserialize}});var c=lib$9;Object.defineProperty(o,"base_encode",{enumerable:!0,get:function(){return c.baseEncode}}),Object.defineProperty(o,"base_decode",{enumerable:!0,get:function(){return c.baseDecode}})})(serialize$2);var web={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.fetchJson=void 0;var a=lib$6;Object.defineProperty(o,"fetchJson",{enumerable:!0,get:function(){return a.fetchJson}})})(web);var enums={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Enum=o.Assignable=void 0;var a=lib$8;Object.defineProperty(o,"Assignable",{enumerable:!0,get:function(){return a.Assignable}});class c{constructor(tt){if(Object.keys(tt).length!==1)throw new Error("Enum can only take single value");Object.keys(tt).map(nt=>{this[nt]=tt[nt],this.enum=nt})}}o.Enum=c})(enums);var format$4={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.parseNearAmount=o.formatNearAmount=o.NEAR_NOMINATION_EXP=o.NEAR_NOMINATION=void 0;var a=lib$9;Object.defineProperty(o,"NEAR_NOMINATION",{enumerable:!0,get:function(){return a.NEAR_NOMINATION}}),Object.defineProperty(o,"NEAR_NOMINATION_EXP",{enumerable:!0,get:function(){return a.NEAR_NOMINATION_EXP}}),Object.defineProperty(o,"formatNearAmount",{enumerable:!0,get:function(){return a.formatNearAmount}}),Object.defineProperty(o,"parseNearAmount",{enumerable:!0,get:function(){return a.parseNearAmount}})})(format$4);var rpc_errors={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.ServerError=o.getErrorTypeFromErrorMessage=o.formatError=o.parseResultError=o.parseRpcError=void 0;var a=lib$9;Object.defineProperty(o,"parseRpcError",{enumerable:!0,get:function(){return a.parseRpcError}}),Object.defineProperty(o,"parseResultError",{enumerable:!0,get:function(){return a.parseResultError}}),Object.defineProperty(o,"formatError",{enumerable:!0,get:function(){return a.formatError}}),Object.defineProperty(o,"getErrorTypeFromErrorMessage",{enumerable:!0,get:function(){return a.getErrorTypeFromErrorMessage}}),Object.defineProperty(o,"ServerError",{enumerable:!0,get:function(){return a.ServerError}})})(rpc_errors);var errors$3={},lib$4={},account$1={},__awaiter$d=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__importDefault$6=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(account$1,"__esModule",{value:!0});account$1.Account=void 0;const crypto_1$4=lib$a,providers_1$3=lib$6,transactions_1$3=lib$5,types_1$4=lib$8,utils_1$6=lib$9,bn_js_1$6=__importDefault$6(bnExports$1),{addKey:addKey$1,createAccount,deleteAccount,deleteKey:deleteKey$1,deployContract:deployContract$2,fullAccessKey:fullAccessKey$1,functionCall:functionCall$6,functionCallAccessKey:functionCallAccessKey$1,stake,transfer}=transactions_1$3.actionCreators,TX_NONCE_RETRY_NUMBER=12,TX_NONCE_RETRY_WAIT=500,TX_NONCE_RETRY_WAIT_BACKOFF=1.5;function parseJsonFromRawResponse(o){return JSON.parse(Buffer$C.from(o).toString())}function bytesJsonStringify(o){return Buffer$C.from(JSON.stringify(o))}class Account{constructor(a,c){this.accessKeyByPublicKeyCache={},this.connection=a,this.accountId=c}state(){return __awaiter$d(this,void 0,void 0,function*(){return this.connection.provider.query({request_type:"view_account",account_id:this.accountId,finality:"optimistic"})})}signTransaction(a,c){return __awaiter$d(this,void 0,void 0,function*(){const d=yield this.findAccessKey(a,c);if(!d)throw new types_1$4.TypedError(`Can not sign transactions for account ${this.accountId} on network ${this.connection.networkId}, no matching key pair exists for this account`,"KeyNotFound");const{accessKey:tt}=d,$a=(yield this.connection.provider.block({finality:"final"})).header.hash,Ys=tt.nonce.add(new bn_js_1$6.default(1));return yield(0,transactions_1$3.signTransaction)(a,Ys,c,(0,utils_1$6.baseDecode)($a),this.connection.signer,this.accountId,this.connection.networkId)})}signAndSendTransaction({receiverId:a,actions:c,returnError:d}){return __awaiter$d(this,void 0,void 0,function*(){let tt,nt;const $a=yield(0,providers_1$3.exponentialBackoff)(TX_NONCE_RETRY_WAIT,TX_NONCE_RETRY_NUMBER,TX_NONCE_RETRY_WAIT_BACKOFF,()=>__awaiter$d(this,void 0,void 0,function*(){[tt,nt]=yield this.signTransaction(a,c);const Ys=nt.transaction.publicKey;try{return yield this.connection.provider.sendTransaction(nt)}catch(gu){if(gu.type==="InvalidNonce")return utils_1$6.Logger.warn(`Retrying transaction ${a}:${(0,utils_1$6.baseEncode)(tt)} with new nonce.`),delete this.accessKeyByPublicKeyCache[Ys.toString()],null;if(gu.type==="Expired")return utils_1$6.Logger.warn(`Retrying transaction ${a}:${(0,utils_1$6.baseEncode)(tt)} due to expired block hash`),null;throw gu.context=new types_1$4.ErrorContext((0,utils_1$6.baseEncode)(tt)),gu}}));if(!$a)throw new types_1$4.TypedError("nonce retries exceeded for transaction. This usually means there are too many parallel requests with the same access key.","RetriesExceeded");if((0,utils_1$6.printTxOutcomeLogsAndFailures)({contractId:nt.transaction.receiverId,outcome:$a}),!d&&typeof $a.status=="object"&&typeof $a.status.Failure=="object"&&$a.status.Failure!==null)throw $a.status.Failure.error_message&&$a.status.Failure.error_type?new types_1$4.TypedError(`Transaction ${$a.transaction_outcome.id} failed. ${$a.status.Failure.error_message}`,$a.status.Failure.error_type):(0,utils_1$6.parseResultError)($a);return $a})}findAccessKey(a,c){return __awaiter$d(this,void 0,void 0,function*(){const d=yield this.connection.signer.getPublicKey(this.accountId,this.connection.networkId);if(!d)throw new types_1$4.TypedError(`no matching key pair found in ${this.connection.signer}`,"PublicKeyNotFound");const tt=this.accessKeyByPublicKeyCache[d.toString()];if(tt!==void 0)return{publicKey:d,accessKey:tt};try{const nt=yield this.connection.provider.query({request_type:"view_access_key",account_id:this.accountId,public_key:d.toString(),finality:"optimistic"}),$a=Object.assign(Object.assign({},nt),{nonce:new bn_js_1$6.default(nt.nonce)});return this.accessKeyByPublicKeyCache[d.toString()]?{publicKey:d,accessKey:this.accessKeyByPublicKeyCache[d.toString()]}:(this.accessKeyByPublicKeyCache[d.toString()]=$a,{publicKey:d,accessKey:$a})}catch(nt){if(nt.type=="AccessKeyDoesNotExist")return null;throw nt}})}createAndDeployContract(a,c,d,tt){return __awaiter$d(this,void 0,void 0,function*(){const nt=fullAccessKey$1();return yield this.signAndSendTransaction({receiverId:a,actions:[createAccount(),transfer(tt),addKey$1(crypto_1$4.PublicKey.from(c),nt),deployContract$2(d)]}),new Account(this.connection,a)})}sendMoney(a,c){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:a,actions:[transfer(c)]})})}createAccount(a,c,d){return __awaiter$d(this,void 0,void 0,function*(){const tt=fullAccessKey$1();return this.signAndSendTransaction({receiverId:a,actions:[createAccount(),transfer(d),addKey$1(crypto_1$4.PublicKey.from(c),tt)]})})}deleteAccount(a){return __awaiter$d(this,void 0,void 0,function*(){return utils_1$6.Logger.log("Deleting an account does not automatically transfer NFTs and FTs to the beneficiary address. Ensure to transfer assets before deleting."),this.signAndSendTransaction({receiverId:this.accountId,actions:[deleteAccount(a)]})})}deployContract(a){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:this.accountId,actions:[deployContract$2(a)]})})}encodeJSContractArgs(a,c,d){return Buffer$C.concat([Buffer$C.from(a),Buffer$C.from([0]),Buffer$C.from(c),Buffer$C.from([0]),Buffer$C.from(d)])}functionCall({contractId:a,methodName:c,args:d={},gas:tt=utils_1$6.DEFAULT_FUNCTION_CALL_GAS,attachedDeposit:nt,walletMeta:$a,walletCallbackUrl:Ys,stringify:gu,jsContract:xu}){return __awaiter$d(this,void 0,void 0,function*(){this.validateArgs(d);let $u;if(xu)$u=["call_js_contract",this.encodeJSContractArgs(a,c,JSON.stringify(d)),tt,nt,null,!0];else{const Iu=gu===void 0?transactions_1$3.stringifyJsonOrBytes:gu;$u=[c,d,tt,nt,Iu,!1]}return this.signAndSendTransaction({receiverId:xu?this.connection.jsvmAccountId:a,actions:[functionCall$6.apply(void 0,$u)],walletMeta:$a,walletCallbackUrl:Ys})})}addKey(a,c,d,tt){return __awaiter$d(this,void 0,void 0,function*(){d||(d=[]),Array.isArray(d)||(d=[d]);let nt;return c?nt=functionCallAccessKey$1(c,d,tt):nt=fullAccessKey$1(),this.signAndSendTransaction({receiverId:this.accountId,actions:[addKey$1(crypto_1$4.PublicKey.from(a),nt)]})})}deleteKey(a){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:this.accountId,actions:[deleteKey$1(crypto_1$4.PublicKey.from(a))]})})}stake(a,c){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:this.accountId,actions:[stake(c,crypto_1$4.PublicKey.from(a))]})})}signedDelegate({actions:a,blockHeightTtl:c,receiverId:d}){return __awaiter$d(this,void 0,void 0,function*(){const{provider:tt,signer:nt}=this.connection,{header:$a}=yield tt.block({finality:"final"}),{accessKey:Ys,publicKey:gu}=yield this.findAccessKey(null,null),xu=(0,transactions_1$3.buildDelegateAction)({actions:a,maxBlockHeight:new bn_js_1$6.default($a.height).add(new bn_js_1$6.default(c)),nonce:new bn_js_1$6.default(Ys.nonce).add(new bn_js_1$6.default(1)),publicKey:gu,receiverId:d,senderId:this.accountId}),{signedDelegateAction:$u}=yield(0,transactions_1$3.signDelegateAction)({delegateAction:xu,signer:{sign:Iu=>__awaiter$d(this,void 0,void 0,function*(){const{signature:Xu}=yield nt.signMessage(Iu,xu.senderId,this.connection.networkId);return Xu})}});return $u})}validateArgs(a){if(!(a.byteLength!==void 0&&a.byteLength===a.length)&&(Array.isArray(a)||typeof a!="object"))throw new types_1$4.PositionalArgsError}viewFunction({contractId:a,methodName:c,args:d={},parse:tt=parseJsonFromRawResponse,stringify:nt=bytesJsonStringify,jsContract:$a=!1,blockQuery:Ys={finality:"optimistic"}}){return __awaiter$d(this,void 0,void 0,function*(){let gu;this.validateArgs(d),$a?gu=this.encodeJSContractArgs(a,c,Object.keys(d).length>0?JSON.stringify(d):""):gu=nt(d);const xu=yield this.connection.provider.query(Object.assign(Object.assign({request_type:"call_function"},Ys),{account_id:$a?this.connection.jsvmAccountId:a,method_name:$a?"view_js_contract":c,args_base64:gu.toString("base64")}));return xu.logs&&(0,utils_1$6.printTxOutcomeLogs)({contractId:a,logs:xu.logs}),xu.result&&xu.result.length>0&&tt(Buffer$C.from(xu.result))})}viewState(a,c={finality:"optimistic"}){return __awaiter$d(this,void 0,void 0,function*(){const{values:d}=yield this.connection.provider.query(Object.assign(Object.assign({request_type:"view_state"},c),{account_id:this.accountId,prefix_base64:Buffer$C.from(a).toString("base64")}));return d.map(({key:tt,value:nt})=>({key:Buffer$C.from(tt,"base64"),value:Buffer$C.from(nt,"base64")}))})}getAccessKeys(){var a;return __awaiter$d(this,void 0,void 0,function*(){const c=yield this.connection.provider.query({request_type:"view_access_key_list",account_id:this.accountId,finality:"optimistic"});return(a=c==null?void 0:c.keys)===null||a===void 0?void 0:a.map(d=>Object.assign(Object.assign({},d),{access_key:Object.assign(Object.assign({},d.access_key),{nonce:new bn_js_1$6.default(d.access_key.nonce)})}))})}getAccountDetails(){return __awaiter$d(this,void 0,void 0,function*(){return{authorizedApps:(yield this.getAccessKeys()).filter(d=>d.access_key.permission!=="FullAccess").map(d=>{const tt=d.access_key.permission;return{contractId:tt.FunctionCall.receiver_id,amount:tt.FunctionCall.allowance,publicKey:d.public_key}})}})}getAccountBalance(){return __awaiter$d(this,void 0,void 0,function*(){const a=yield this.connection.provider.experimental_protocolConfig({finality:"final"}),c=yield this.state(),d=new bn_js_1$6.default(a.runtime_config.storage_amount_per_byte),tt=new bn_js_1$6.default(c.storage_usage).mul(d),nt=new bn_js_1$6.default(c.locked),$a=new bn_js_1$6.default(c.amount).add(nt),Ys=$a.sub(bn_js_1$6.default.max(nt,tt));return{total:$a.toString(),stateStaked:tt.toString(),staked:nt.toString(),available:Ys.toString()}})}getActiveDelegatedStakeBalance(){return __awaiter$d(this,void 0,void 0,function*(){const a=yield this.connection.provider.block({finality:"final"}),c=a.header.hash,d=a.header.epoch_id,{current_validators:tt,next_validators:nt,current_proposals:$a}=yield this.connection.provider.validators(d),Ys=new Set;[...tt,...nt,...$a].forEach(i0=>Ys.add(i0.account_id));const gu=[...Ys],xu=gu.map(i0=>this.viewFunction({contractId:i0,methodName:"get_account_total_balance",args:{account_id:this.accountId},blockQuery:{blockId:c}})),$u=yield Promise.allSettled(xu);if($u.some(i0=>i0.status==="rejected"&&i0.reason.type==="TimeoutError"))throw new Error("Failed to get delegated stake balance");const Xu=$u.reduce((i0,p0,w0)=>{const A0=gu[w0];if(p0.status==="fulfilled"){const $0=new bn_js_1$6.default(p0.value);if(!$0.isZero())return Object.assign(Object.assign({},i0),{stakedValidators:[...i0.stakedValidators,{validatorId:A0,amount:$0.toString()}],total:i0.total.add($0)})}return p0.status==="rejected"?Object.assign(Object.assign({},i0),{failedValidators:[...i0.failedValidators,{validatorId:A0,error:p0.reason}]}):i0},{stakedValidators:[],failedValidators:[],total:new bn_js_1$6.default(0)});return Object.assign(Object.assign({},Xu),{total:Xu.total.toString()})})}}account$1.Account=Account;var account_2fa={},account_multisig$1={},constants$4={},__importDefault$5=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(constants$4,"__esModule",{value:!0});constants$4.MULTISIG_CONFIRM_METHODS=constants$4.MULTISIG_CHANGE_METHODS=constants$4.MULTISIG_DEPOSIT=constants$4.MULTISIG_GAS=constants$4.MULTISIG_ALLOWANCE=constants$4.MULTISIG_STORAGE_KEY=void 0;const utils_1$5=lib$9,bn_js_1$5=__importDefault$5(bnExports$1);constants$4.MULTISIG_STORAGE_KEY="__multisigRequest";constants$4.MULTISIG_ALLOWANCE=new bn_js_1$5.default((0,utils_1$5.parseNearAmount)("1"));constants$4.MULTISIG_GAS=new bn_js_1$5.default("100000000000000");constants$4.MULTISIG_DEPOSIT=new bn_js_1$5.default("0");constants$4.MULTISIG_CHANGE_METHODS=["add_request","add_request_and_confirm","delete_request","confirm"];constants$4.MULTISIG_CONFIRM_METHODS=["confirm"];var types$1={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MultisigStateStatus=o.MultisigDeleteRequestRejectionError=void 0,function(a){a.CANNOT_DESERIALIZE_STATE="Cannot deserialize the contract state",a.MULTISIG_NOT_INITIALIZED="Smart contract panicked: Multisig contract should be initialized before usage",a.NO_SUCH_REQUEST="Smart contract panicked: panicked at 'No such request: either wrong number or already confirmed'",a.REQUEST_COOLDOWN_ERROR="Request cannot be deleted immediately after creation.",a.METHOD_NOT_FOUND="Contract method is not found"}(o.MultisigDeleteRequestRejectionError||(o.MultisigDeleteRequestRejectionError={})),function(a){a[a.INVALID_STATE=0]="INVALID_STATE",a[a.STATE_NOT_INITIALIZED=1]="STATE_NOT_INITIALIZED",a[a.VALID_STATE=2]="VALID_STATE",a[a.UNKNOWN_STATE=3]="UNKNOWN_STATE"}(o.MultisigStateStatus||(o.MultisigStateStatus={}))})(types$1);var __awaiter$c=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(account_multisig$1,"__esModule",{value:!0});account_multisig$1.AccountMultisig=void 0;const transactions_1$2=lib$5,utils_1$4=lib$9,account_1=account$1,constants_1$1=constants$4,types_1$3=types$1,{deployContract:deployContract$1,functionCall:functionCall$5}=transactions_1$2.actionCreators;var MultisigCodeStatus;(function(o){o[o.INVALID_CODE=0]="INVALID_CODE",o[o.VALID_CODE=1]="VALID_CODE",o[o.UNKNOWN_CODE=2]="UNKNOWN_CODE"})(MultisigCodeStatus||(MultisigCodeStatus={}));const storageFallback={[constants_1$1.MULTISIG_STORAGE_KEY]:null};class AccountMultisig extends account_1.Account{constructor(a,c,d){super(a,c),this.storage=d.storage,this.onAddRequestResult=d.onAddRequestResult}signAndSendTransactionWithAccount(a,c){const d=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){return d.signAndSendTransaction.call(this,{receiverId:a,actions:c})})}signAndSendTransaction({receiverId:a,actions:c}){const d=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){const{accountId:tt}=this,nt=Buffer$C.from(JSON.stringify({request:{receiver_id:a,actions:convertActions(c,tt,a)}}));let $a;try{$a=yield d.signAndSendTransaction.call(this,{receiverId:tt,actions:[functionCall$5("add_request_and_confirm",nt,constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]})}catch(gu){if(gu.toString().includes("Account has too many active requests. Confirm or delete some"))return yield this.deleteUnconfirmedRequests(),yield this.signAndSendTransaction({receiverId:a,actions:c});throw gu}if(!$a.status)throw new Error("Request failed");const Ys=Object.assign({},$a.status);if(!Ys.SuccessValue||typeof Ys.SuccessValue!="string")throw new Error("Request failed");return this.setRequest({accountId:tt,actions:c,requestId:parseInt(Buffer$C.from(Ys.SuccessValue,"base64").toString("ascii"),10)}),this.onAddRequestResult&&(yield this.onAddRequestResult($a)),this.deleteUnconfirmedRequests(),$a})}checkMultisigCodeAndStateStatus(a){const c=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){const tt=a?MultisigCodeStatus.UNKNOWN_CODE:MultisigCodeStatus.VALID_CODE;try{return a?yield c.signAndSendTransaction.call(this,{receiverId:this.accountId,actions:[deployContract$1(a),functionCall$5("delete_request",{request_id:4294967295},constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]}):yield this.deleteRequest(4294967295),{codeStatus:MultisigCodeStatus.VALID_CODE,stateStatus:types_1$3.MultisigStateStatus.VALID_STATE}}catch(nt){if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.CANNOT_DESERIALIZE_STATE).test(nt&&nt.kind&&nt.kind.ExecutionError))return{codeStatus:tt,stateStatus:types_1$3.MultisigStateStatus.INVALID_STATE};if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.MULTISIG_NOT_INITIALIZED).test(nt&&nt.kind&&nt.kind.ExecutionError))return{codeStatus:tt,stateStatus:types_1$3.MultisigStateStatus.STATE_NOT_INITIALIZED};if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.NO_SUCH_REQUEST).test(nt&&nt.kind&&nt.kind.ExecutionError))return{codeStatus:tt,stateStatus:types_1$3.MultisigStateStatus.VALID_STATE};if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.METHOD_NOT_FOUND).test(nt&&nt.message))return{codeStatus:MultisigCodeStatus.INVALID_CODE,stateStatus:types_1$3.MultisigStateStatus.UNKNOWN_STATE};throw nt}})}deleteRequest(a){return super.signAndSendTransaction({receiverId:this.accountId,actions:[functionCall$5("delete_request",{request_id:a},constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]})}deleteAllRequests(){return __awaiter$c(this,void 0,void 0,function*(){const a=yield this.getRequestIds();a.length&&(yield Promise.all(a.map(c=>this.deleteRequest(c))))})}deleteUnconfirmedRequests(){const a=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){const c=yield this.getRequestIds(),{requestId:d}=this.getRequest();for(const tt of c)if(tt!=d)try{yield a.signAndSendTransaction.call(this,{receiverId:this.accountId,actions:[functionCall$5("delete_request",{request_id:tt},constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]})}catch{utils_1$4.Logger.warn("Attempt to delete an earlier request before 15 minutes failed. Will try again.")}})}getRequestIds(){return __awaiter$c(this,void 0,void 0,function*(){return this.viewFunction({contractId:this.accountId,methodName:"list_request_ids"})})}getRequest(){return this.storage?JSON.parse(this.storage.getItem(constants_1$1.MULTISIG_STORAGE_KEY)||"{}"):storageFallback[constants_1$1.MULTISIG_STORAGE_KEY]}setRequest(a){if(this.storage)return this.storage.setItem(constants_1$1.MULTISIG_STORAGE_KEY,JSON.stringify(a));storageFallback[constants_1$1.MULTISIG_STORAGE_KEY]=a}}account_multisig$1.AccountMultisig=AccountMultisig;const convertPKForContract=o=>o.toString().replace("ed25519:",""),convertActions=(o,a,c)=>o.map(d=>{const tt=d.enum,{gas:nt,publicKey:$a,methodName:Ys,args:gu,deposit:xu,accessKey:$u,code:Iu}=d[tt],Xu={type:tt[0].toUpperCase()+tt.substr(1),gas:nt&&nt.toString()||void 0,public_key:$a&&convertPKForContract($a)||void 0,method_name:Ys,args:gu&&Buffer$C.from(gu).toString("base64")||void 0,code:Iu&&Buffer$C.from(Iu).toString("base64")||void 0,amount:xu&&xu.toString()||void 0,deposit:xu&&xu.toString()||"0",permission:void 0};if($u&&(c===a&&$u.permission.enum!=="fullAccess"&&(Xu.permission={receiver_id:a,allowance:constants_1$1.MULTISIG_ALLOWANCE.toString(),method_names:constants_1$1.MULTISIG_CHANGE_METHODS}),$u.permission.enum==="functionCall")){const{receiverId:i0,methodNames:p0,allowance:w0}=$u.permission.functionCall;Xu.permission={receiver_id:i0,allowance:w0&&w0.toString()||void 0,method_names:p0}}return Xu});var __awaiter$b=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__importDefault$4=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(account_2fa,"__esModule",{value:!0});account_2fa.Account2FA=void 0;const crypto_1$3=lib$a,types_1$2=lib$8,providers_1$2=lib$6,transactions_1$1=lib$5,utils_1$3=lib$9,bn_js_1$4=__importDefault$4(bnExports$1),account_multisig_1=account_multisig$1,constants_1=constants$4,types_2=types$1,{addKey,deleteKey,deployContract,fullAccessKey,functionCall:functionCall$4,functionCallAccessKey}=transactions_1$1.actionCreators;class Account2FA extends account_multisig_1.AccountMultisig{constructor(a,c,d){super(a,c,d),this.helperUrl="https://helper.testnet.near.org",this.helperUrl=d.helperUrl||this.helperUrl,this.storage=d.storage,this.sendCode=d.sendCode||this.sendCodeDefault,this.getCode=d.getCode||this.getCodeDefault,this.verifyCode=d.verifyCode||this.verifyCodeDefault,this.onConfirmResult=d.onConfirmResult}signAndSendTransaction({receiverId:a,actions:c}){const d=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$b(this,void 0,void 0,function*(){yield d.signAndSendTransaction.call(this,{receiverId:a,actions:c}),yield this.sendCode();const tt=yield this.promptAndVerify();return this.onConfirmResult&&(yield this.onConfirmResult(tt)),tt})}deployMultisig(a){const c=Object.create(null,{signAndSendTransactionWithAccount:{get:()=>super.signAndSendTransactionWithAccount}});return __awaiter$b(this,void 0,void 0,function*(){const{accountId:d}=this,tt=(yield this.getRecoveryMethods()).data.filter(({kind:Iu,publicKey:Xu})=>(Iu==="phrase"||Iu==="ledger")&&Xu!==null).map(Iu=>Iu.publicKey),nt=(yield this.getAccessKeys()).filter(({public_key:Iu,access_key:{permission:Xu}})=>Xu==="FullAccess"&&!tt.includes(Iu)).map(Iu=>Iu.public_key).map(toPK),$a=toPK((yield this.postSignedJson("/2fa/getAccessKey",{accountId:d})).publicKey),Ys=Buffer$C.from(JSON.stringify({num_confirmations:2})),gu=[...nt.map(Iu=>deleteKey(Iu)),...nt.map(Iu=>addKey(Iu,functionCallAccessKey(d,constants_1.MULTISIG_CHANGE_METHODS,null))),addKey($a,functionCallAccessKey(d,constants_1.MULTISIG_CONFIRM_METHODS,null)),deployContract(a)],xu=gu.concat(functionCall$4("new",Ys,constants_1.MULTISIG_GAS,constants_1.MULTISIG_DEPOSIT));utils_1$3.Logger.log("deploying multisig contract for",d);const{stateStatus:$u}=yield this.checkMultisigCodeAndStateStatus(a);switch($u){case types_2.MultisigStateStatus.STATE_NOT_INITIALIZED:return yield c.signAndSendTransactionWithAccount.call(this,d,xu);case types_2.MultisigStateStatus.VALID_STATE:return yield c.signAndSendTransactionWithAccount.call(this,d,gu);case types_2.MultisigStateStatus.INVALID_STATE:throw new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account has existing state.`,"ContractHasExistingState");default:throw new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account state could not be verified.`,"ContractStateUnknown")}})}disableWithFAK({contractBytes:a,cleanupContractBytes:c}){return __awaiter$b(this,void 0,void 0,function*(){let d=[];c&&(yield this.deleteAllRequests().catch(Ys=>Ys),d=yield this.get2faDisableCleanupActions(c));const tt=yield this.get2faDisableKeyConversionActions(),nt=[...d,...tt,deployContract(a)],$a=yield this.findAccessKey(this.accountId,nt);if($a&&$a.accessKey&&$a.accessKey.permission!=="FullAccess")throw new types_1$2.TypedError("No full access key found in keystore. Unable to bypass multisig","NoFAKFound");return this.signAndSendTransactionWithAccount(this.accountId,nt)})}get2faDisableCleanupActions(a){return __awaiter$b(this,void 0,void 0,function*(){const c=yield this.viewState("").catch(tt=>{const nt=tt.cause&&tt.cause.name;if(nt=="NO_CONTRACT_CODE")return[];throw nt=="TOO_LARGE_CONTRACT_STATE"?new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account has existing state.`,"ContractHasExistingState"):tt}),d=c.map(({key:tt})=>tt.toString("base64"));return c.length?[deployContract(a),functionCall$4("clean",{keys:d},constants_1.MULTISIG_GAS,new bn_js_1$4.default("0"))]:[]})}get2faDisableKeyConversionActions(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this,d=(yield this.getAccessKeys()).filter(({access_key:nt})=>nt.permission!=="FullAccess").filter(({access_key:nt})=>{const $a=nt.permission.FunctionCall;return $a.receiver_id===a&&$a.method_names.length===4&&$a.method_names.includes("add_request_and_confirm")}),tt=crypto_1$3.PublicKey.from((yield this.postSignedJson("/2fa/getAccessKey",{accountId:a})).publicKey);return[deleteKey(tt),...d.map(({public_key:nt})=>deleteKey(crypto_1$3.PublicKey.from(nt))),...d.map(({public_key:nt})=>addKey(crypto_1$3.PublicKey.from(nt),fullAccessKey()))]})}disable(a,c){return __awaiter$b(this,void 0,void 0,function*(){const{stateStatus:d}=yield this.checkMultisigCodeAndStateStatus();if(d!==types_2.MultisigStateStatus.VALID_STATE&&d!==types_2.MultisigStateStatus.STATE_NOT_INITIALIZED)throw new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account state could not be verified.`,"ContractStateUnknown");let tt;yield this.deleteAllRequests().catch(Ys=>tt=Ys);const $a=[...yield this.get2faDisableCleanupActions(c).catch(Ys=>{throw Ys.type==="ContractHasExistingState"&&tt||Ys}),...yield this.get2faDisableKeyConversionActions(),deployContract(a)];return utils_1$3.Logger.log("disabling 2fa for",this.accountId),yield this.signAndSendTransaction({receiverId:this.accountId,actions:$a})})}sendCodeDefault(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this,{requestId:c}=this.getRequest(),d=yield this.get2faMethod();return yield this.postSignedJson("/2fa/send",{accountId:a,method:d,requestId:c}),c})}getCodeDefault(){return __awaiter$b(this,void 0,void 0,function*(){throw new Error('There is no getCode callback provided. Please provide your own in AccountMultisig constructor options. It has a parameter method where method.kind is "email" or "phone".')})}promptAndVerify(){return __awaiter$b(this,void 0,void 0,function*(){const a=yield this.get2faMethod(),c=yield this.getCode(a);try{return yield this.verifyCode(c)}catch(d){if(utils_1$3.Logger.warn("Error validating security code:",d),d.toString().includes("invalid 2fa code provided")||d.toString().includes("2fa code not valid"))return yield this.promptAndVerify();throw d}})}verifyCodeDefault(a){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:c}=this,d=this.getRequest();if(!d)throw new Error("no request pending");const{requestId:tt}=d;return yield this.postSignedJson("/2fa/verify",{accountId:c,securityCode:a,requestId:tt})})}getRecoveryMethods(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this;return{accountId:a,data:yield this.postSignedJson("/account/recoveryMethods",{accountId:a})}})}get2faMethod(){return __awaiter$b(this,void 0,void 0,function*(){let{data:a}=yield this.getRecoveryMethods();if(a&&a.length&&(a=a.find(tt=>tt.kind.indexOf("2fa-")===0)),!a)return null;const{kind:c,detail:d}=a;return{kind:c,detail:d}})}signatureFor(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this,d=(yield this.connection.provider.block({finality:"final"})).header.height.toString(),tt=yield this.connection.signer.signMessage(Buffer$C.from(d),a,this.connection.networkId),nt=Buffer$C.from(tt.signature).toString("base64");return{blockNumber:d,blockNumberSignature:nt}})}postSignedJson(a,c){return __awaiter$b(this,void 0,void 0,function*(){return yield(0,providers_1$2.fetchJson)(this.helperUrl+a,JSON.stringify(Object.assign(Object.assign({},c),yield this.signatureFor())))})}}account_2fa.Account2FA=Account2FA;const toPK=o=>crypto_1$3.PublicKey.from(o);var account_creator$1={},__awaiter$a=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(account_creator$1,"__esModule",{value:!0});account_creator$1.UrlAccountCreator=account_creator$1.LocalAccountCreator=account_creator$1.AccountCreator=void 0;const providers_1$1=lib$6;class AccountCreator{}account_creator$1.AccountCreator=AccountCreator;class LocalAccountCreator extends AccountCreator{constructor(a,c){super(),this.masterAccount=a,this.initialBalance=c}createAccount(a,c){return __awaiter$a(this,void 0,void 0,function*(){yield this.masterAccount.createAccount(a,c,this.initialBalance)})}}account_creator$1.LocalAccountCreator=LocalAccountCreator;class UrlAccountCreator extends AccountCreator{constructor(a,c){super(),this.connection=a,this.helperUrl=c}createAccount(a,c){return __awaiter$a(this,void 0,void 0,function*(){yield(0,providers_1$1.fetchJson)(`${this.helperUrl}/account`,JSON.stringify({newAccountId:a,newAccountPublicKey:c.toString()}))})}}account_creator$1.UrlAccountCreator=UrlAccountCreator;var connection$1={},lib$3={},in_memory_signer={},signer$1={};Object.defineProperty(signer$1,"__esModule",{value:!0});signer$1.Signer=void 0;class Signer{}signer$1.Signer=Signer;var __awaiter$9=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(in_memory_signer,"__esModule",{value:!0});in_memory_signer.InMemorySigner=void 0;const crypto_1$2=lib$a,keystores_1=lib$b,sha256_1=sha256$4,signer_1=signer$1;class InMemorySigner extends signer_1.Signer{constructor(a){super(),this.keyStore=a}static fromKeyPair(a,c,d){return __awaiter$9(this,void 0,void 0,function*(){const tt=new keystores_1.InMemoryKeyStore;return yield tt.setKey(a,c,d),new InMemorySigner(tt)})}createKey(a,c){return __awaiter$9(this,void 0,void 0,function*(){const d=crypto_1$2.KeyPair.fromRandom("ed25519");return yield this.keyStore.setKey(c,a,d),d.getPublicKey()})}getPublicKey(a,c){return __awaiter$9(this,void 0,void 0,function*(){const d=yield this.keyStore.getKey(c,a);return d===null?null:d.getPublicKey()})}signMessage(a,c,d){return __awaiter$9(this,void 0,void 0,function*(){const tt=new Uint8Array((0,sha256_1.sha256)(a));if(!c)throw new Error("InMemorySigner requires provided account id");const nt=yield this.keyStore.getKey(d,c);if(nt===null)throw new Error(`Key for ${c} not found in ${d}`);return nt.sign(tt)})}toString(){return`InMemorySigner(${this.keyStore})`}}in_memory_signer.InMemorySigner=InMemorySigner;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Signer=o.InMemorySigner=void 0;var a=in_memory_signer;Object.defineProperty(o,"InMemorySigner",{enumerable:!0,get:function(){return a.InMemorySigner}});var c=signer$1;Object.defineProperty(o,"Signer",{enumerable:!0,get:function(){return c.Signer}})})(lib$3);Object.defineProperty(connection$1,"__esModule",{value:!0});connection$1.Connection=void 0;const signers_1=lib$3,providers_1=lib$6;function getProvider(o){switch(o.type){case void 0:return o;case"JsonRpcProvider":return new providers_1.JsonRpcProvider(Object.assign({},o.args));default:throw new Error(`Unknown provider type ${o.type}`)}}function getSigner(o){switch(o.type){case void 0:return o;case"InMemorySigner":return new signers_1.InMemorySigner(o.keyStore);default:throw new Error(`Unknown signer type ${o.type}`)}}class Connection{constructor(a,c,d,tt){this.networkId=a,this.provider=c,this.signer=d,this.jsvmAccountId=tt}static fromConfig(a){const c=getProvider(a.provider),d=getSigner(a.signer);return new Connection(a.networkId,c,d,a.jsvmAccountId)}}connection$1.Connection=Connection;var contract$1={},localViewExecution={},storage={},lru={exports:{}};(function(o,a){(function(c,d){d(a)})(commonjsGlobal$4,function(c){const d=Symbol("newer"),tt=Symbol("older");class nt{constructor(Iu,Xu){typeof Iu!="number"&&(Xu=Iu,Iu=0),this.size=0,this.limit=Iu,this.oldest=this.newest=void 0,this._keymap=new Map,Xu&&(this.assign(Xu),Iu<1&&(this.limit=this.size))}_markEntryAsUsed(Iu){Iu!==this.newest&&(Iu[d]&&(Iu===this.oldest&&(this.oldest=Iu[d]),Iu[d][tt]=Iu[tt]),Iu[tt]&&(Iu[tt][d]=Iu[d]),Iu[d]=void 0,Iu[tt]=this.newest,this.newest&&(this.newest[d]=Iu),this.newest=Iu)}assign(Iu){let Xu,i0=this.limit||Number.MAX_VALUE;this._keymap.clear();let p0=Iu[Symbol.iterator]();for(let w0=p0.next();!w0.done;w0=p0.next()){let A0=new $a(w0.value[0],w0.value[1]);if(this._keymap.set(A0.key,A0),Xu?(Xu[d]=A0,A0[tt]=Xu):this.oldest=A0,Xu=A0,i0--==0)throw new Error("overflow")}this.newest=Xu,this.size=this._keymap.size}get(Iu){var Xu=this._keymap.get(Iu);return Xu?(this._markEntryAsUsed(Xu),Xu.value):void 0}set(Iu,Xu){var i0=this._keymap.get(Iu);return i0?(i0.value=Xu,this._markEntryAsUsed(i0),this):(this._keymap.set(Iu,i0=new $a(Iu,Xu)),this.newest?(this.newest[d]=i0,i0[tt]=this.newest):this.oldest=i0,this.newest=i0,++this.size,this.size>this.limit&&this.shift(),this)}shift(){var Iu=this.oldest;if(Iu)return this.oldest[d]?(this.oldest=this.oldest[d],this.oldest[tt]=void 0):(this.oldest=void 0,this.newest=void 0),Iu[d]=Iu[tt]=void 0,this._keymap.delete(Iu.key),--this.size,[Iu.key,Iu.value]}find(Iu){let Xu=this._keymap.get(Iu);return Xu?Xu.value:void 0}has(Iu){return this._keymap.has(Iu)}delete(Iu){var Xu=this._keymap.get(Iu);return Xu?(this._keymap.delete(Xu.key),Xu[d]&&Xu[tt]?(Xu[tt][d]=Xu[d],Xu[d][tt]=Xu[tt]):Xu[d]?(Xu[d][tt]=void 0,this.oldest=Xu[d]):Xu[tt]?(Xu[tt][d]=void 0,this.newest=Xu[tt]):this.oldest=this.newest=void 0,this.size--,Xu.value):void 0}clear(){this.oldest=this.newest=void 0,this.size=0,this._keymap.clear()}keys(){return new gu(this.oldest)}values(){return new xu(this.oldest)}entries(){return this}[Symbol.iterator](){return new Ys(this.oldest)}forEach(Iu,Xu){typeof Xu!="object"&&(Xu=this);let i0=this.oldest;for(;i0;)Iu.call(Xu,i0.value,i0.key,this),i0=i0[d]}toJSON(){for(var Iu=new Array(this.size),Xu=0,i0=this.oldest;i0;)Iu[Xu++]={key:i0.key,value:i0.value},i0=i0[d];return Iu}toString(){for(var Iu="",Xu=this.oldest;Xu;)Iu+=String(Xu.key)+":"+Xu.value,Xu=Xu[d],Xu&&(Iu+=" < ");return Iu}}c.LRUMap=nt;function $a($u,Iu){this.key=$u,this.value=Iu,this[d]=void 0,this[tt]=void 0}function Ys($u){this.entry=$u}Ys.prototype[Symbol.iterator]=function(){return this},Ys.prototype.next=function(){let $u=this.entry;return $u?(this.entry=$u[d],{done:!1,value:[$u.key,$u.value]}):{done:!0,value:void 0}};function gu($u){this.entry=$u}gu.prototype[Symbol.iterator]=function(){return this},gu.prototype.next=function(){let $u=this.entry;return $u?(this.entry=$u[d],{done:!1,value:$u.key}):{done:!0,value:void 0}};function xu($u){this.entry=$u}xu.prototype[Symbol.iterator]=function(){return this},xu.prototype.next=function(){let $u=this.entry;return $u?(this.entry=$u[d],{done:!1,value:$u.value}):{done:!0,value:void 0}}})})(lru,lru.exports);var lruExports=lru.exports;Object.defineProperty(storage,"__esModule",{value:!0});storage.Storage=void 0;const lru_map_1=lruExports;class Storage{constructor(a={max:Storage.MAX_ELEMENTS}){this.cache=new lru_map_1.LRUMap(a.max),this.blockHeights=new Map}load(a){if(!("blockId"in a))return;let d=a.blockId;return d.toString().length==44&&(d=this.blockHeights.get(d.toString())),this.cache.get(d)}save(a,{blockHeight:c,blockTimestamp:d,contractCode:tt,contractState:nt}){this.blockHeights.set(a,c),this.cache.set(c,{blockHeight:c,blockTimestamp:d,contractCode:tt,contractState:nt})}}storage.Storage=Storage;Storage.MAX_ELEMENTS=100;var runtime={},cryptoBrowserify={},Buffer$y=safeBufferExports$1.Buffer,Transform$7=readableBrowserExports$1.Transform,inherits$q=inherits_browserExports;function throwIfNotStringOrBuffer(o,a){if(!Buffer$y.isBuffer(o)&&typeof o!="string")throw new TypeError(a+" must be a string or a buffer")}function HashBase$2(o){Transform$7.call(this),this._block=Buffer$y.allocUnsafe(o),this._blockSize=o,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}inherits$q(HashBase$2,Transform$7);HashBase$2.prototype._transform=function(o,a,c){var d=null;try{this.update(o,a)}catch(tt){d=tt}c(d)};HashBase$2.prototype._flush=function(o){var a=null;try{this.push(this.digest())}catch(c){a=c}o(a)};HashBase$2.prototype.update=function(o,a){if(throwIfNotStringOrBuffer(o,"Data"),this._finalized)throw new Error("Digest already called");Buffer$y.isBuffer(o)||(o=Buffer$y.from(o,a));for(var c=this._block,d=0;this._blockOffset+o.length-d>=this._blockSize;){for(var tt=this._blockOffset;tt0;++nt)this._length[nt]+=$a,$a=this._length[nt]/4294967296|0,$a>0&&(this._length[nt]-=4294967296*$a);return this};HashBase$2.prototype._update=function(){throw new Error("_update is not implemented")};HashBase$2.prototype.digest=function(o){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var a=this._digest();o!==void 0&&(a=a.toString(o)),this._block.fill(0),this._blockOffset=0;for(var c=0;c<4;++c)this._length[c]=0;return a};HashBase$2.prototype._digest=function(){throw new Error("_digest is not implemented")};var hashBase=HashBase$2,inherits$p=inherits_browserExports,HashBase$1=hashBase,Buffer$x=safeBufferExports$1.Buffer,ARRAY16$1=new Array(16);function MD5$3(){HashBase$1.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}inherits$p(MD5$3,HashBase$1);MD5$3.prototype._update=function(){for(var o=ARRAY16$1,a=0;a<16;++a)o[a]=this._block.readInt32LE(a*4);var c=this._a,d=this._b,tt=this._c,nt=this._d;c=fnF(c,d,tt,nt,o[0],3614090360,7),nt=fnF(nt,c,d,tt,o[1],3905402710,12),tt=fnF(tt,nt,c,d,o[2],606105819,17),d=fnF(d,tt,nt,c,o[3],3250441966,22),c=fnF(c,d,tt,nt,o[4],4118548399,7),nt=fnF(nt,c,d,tt,o[5],1200080426,12),tt=fnF(tt,nt,c,d,o[6],2821735955,17),d=fnF(d,tt,nt,c,o[7],4249261313,22),c=fnF(c,d,tt,nt,o[8],1770035416,7),nt=fnF(nt,c,d,tt,o[9],2336552879,12),tt=fnF(tt,nt,c,d,o[10],4294925233,17),d=fnF(d,tt,nt,c,o[11],2304563134,22),c=fnF(c,d,tt,nt,o[12],1804603682,7),nt=fnF(nt,c,d,tt,o[13],4254626195,12),tt=fnF(tt,nt,c,d,o[14],2792965006,17),d=fnF(d,tt,nt,c,o[15],1236535329,22),c=fnG(c,d,tt,nt,o[1],4129170786,5),nt=fnG(nt,c,d,tt,o[6],3225465664,9),tt=fnG(tt,nt,c,d,o[11],643717713,14),d=fnG(d,tt,nt,c,o[0],3921069994,20),c=fnG(c,d,tt,nt,o[5],3593408605,5),nt=fnG(nt,c,d,tt,o[10],38016083,9),tt=fnG(tt,nt,c,d,o[15],3634488961,14),d=fnG(d,tt,nt,c,o[4],3889429448,20),c=fnG(c,d,tt,nt,o[9],568446438,5),nt=fnG(nt,c,d,tt,o[14],3275163606,9),tt=fnG(tt,nt,c,d,o[3],4107603335,14),d=fnG(d,tt,nt,c,o[8],1163531501,20),c=fnG(c,d,tt,nt,o[13],2850285829,5),nt=fnG(nt,c,d,tt,o[2],4243563512,9),tt=fnG(tt,nt,c,d,o[7],1735328473,14),d=fnG(d,tt,nt,c,o[12],2368359562,20),c=fnH(c,d,tt,nt,o[5],4294588738,4),nt=fnH(nt,c,d,tt,o[8],2272392833,11),tt=fnH(tt,nt,c,d,o[11],1839030562,16),d=fnH(d,tt,nt,c,o[14],4259657740,23),c=fnH(c,d,tt,nt,o[1],2763975236,4),nt=fnH(nt,c,d,tt,o[4],1272893353,11),tt=fnH(tt,nt,c,d,o[7],4139469664,16),d=fnH(d,tt,nt,c,o[10],3200236656,23),c=fnH(c,d,tt,nt,o[13],681279174,4),nt=fnH(nt,c,d,tt,o[0],3936430074,11),tt=fnH(tt,nt,c,d,o[3],3572445317,16),d=fnH(d,tt,nt,c,o[6],76029189,23),c=fnH(c,d,tt,nt,o[9],3654602809,4),nt=fnH(nt,c,d,tt,o[12],3873151461,11),tt=fnH(tt,nt,c,d,o[15],530742520,16),d=fnH(d,tt,nt,c,o[2],3299628645,23),c=fnI(c,d,tt,nt,o[0],4096336452,6),nt=fnI(nt,c,d,tt,o[7],1126891415,10),tt=fnI(tt,nt,c,d,o[14],2878612391,15),d=fnI(d,tt,nt,c,o[5],4237533241,21),c=fnI(c,d,tt,nt,o[12],1700485571,6),nt=fnI(nt,c,d,tt,o[3],2399980690,10),tt=fnI(tt,nt,c,d,o[10],4293915773,15),d=fnI(d,tt,nt,c,o[1],2240044497,21),c=fnI(c,d,tt,nt,o[8],1873313359,6),nt=fnI(nt,c,d,tt,o[15],4264355552,10),tt=fnI(tt,nt,c,d,o[6],2734768916,15),d=fnI(d,tt,nt,c,o[13],1309151649,21),c=fnI(c,d,tt,nt,o[4],4149444226,6),nt=fnI(nt,c,d,tt,o[11],3174756917,10),tt=fnI(tt,nt,c,d,o[2],718787259,15),d=fnI(d,tt,nt,c,o[9],3951481745,21),this._a=this._a+c|0,this._b=this._b+d|0,this._c=this._c+tt|0,this._d=this._d+nt|0};MD5$3.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var o=Buffer$x.allocUnsafe(16);return o.writeInt32LE(this._a,0),o.writeInt32LE(this._b,4),o.writeInt32LE(this._c,8),o.writeInt32LE(this._d,12),o};function rotl$1(o,a){return o<>>32-a}function fnF(o,a,c,d,tt,nt,$a){return rotl$1(o+(a&c|~a&d)+tt+nt|0,$a)+a|0}function fnG(o,a,c,d,tt,nt,$a){return rotl$1(o+(a&d|c&~d)+tt+nt|0,$a)+a|0}function fnH(o,a,c,d,tt,nt,$a){return rotl$1(o+(a^c^d)+tt+nt|0,$a)+a|0}function fnI(o,a,c,d,tt,nt,$a){return rotl$1(o+(c^(a|~d))+tt+nt|0,$a)+a|0}var md5_js=MD5$3,Buffer$w=require$$1$4.Buffer,inherits$o=inherits_browserExports,HashBase=hashBase,ARRAY16=new Array(16),zl$1=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],zr$1=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],sl$2=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],sr$2=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],hl$1=[0,1518500249,1859775393,2400959708,2840853838],hr$2=[1352829926,1548603684,1836072691,2053994217,0];function RIPEMD160$4(){HashBase.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}inherits$o(RIPEMD160$4,HashBase);RIPEMD160$4.prototype._update=function(){for(var o=ARRAY16,a=0;a<16;++a)o[a]=this._block.readInt32LE(a*4);for(var c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ys=this._a|0,gu=this._b|0,xu=this._c|0,$u=this._d|0,Iu=this._e|0,Xu=0;Xu<80;Xu+=1){var i0,p0;Xu<16?(i0=fn1(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[0],sl$2[Xu]),p0=fn5(Ys,gu,xu,$u,Iu,o[zr$1[Xu]],hr$2[0],sr$2[Xu])):Xu<32?(i0=fn2(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[1],sl$2[Xu]),p0=fn4(Ys,gu,xu,$u,Iu,o[zr$1[Xu]],hr$2[1],sr$2[Xu])):Xu<48?(i0=fn3(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[2],sl$2[Xu]),p0=fn3(Ys,gu,xu,$u,Iu,o[zr$1[Xu]],hr$2[2],sr$2[Xu])):Xu<64?(i0=fn4(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[3],sl$2[Xu]),p0=fn2(Ys,gu,xu,$u,Iu,o[zr$1[Xu]],hr$2[3],sr$2[Xu])):(i0=fn5(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[4],sl$2[Xu]),p0=fn1(Ys,gu,xu,$u,Iu,o[zr$1[Xu]],hr$2[4],sr$2[Xu])),c=$a,$a=nt,nt=rotl(tt,10),tt=d,d=i0,Ys=Iu,Iu=$u,$u=rotl(xu,10),xu=gu,gu=p0}var w0=this._b+tt+$u|0;this._b=this._c+nt+Iu|0,this._c=this._d+$a+Ys|0,this._d=this._e+c+gu|0,this._e=this._a+d+xu|0,this._a=w0};RIPEMD160$4.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var o=Buffer$w.alloc?Buffer$w.alloc(20):new Buffer$w(20);return o.writeInt32LE(this._a,0),o.writeInt32LE(this._b,4),o.writeInt32LE(this._c,8),o.writeInt32LE(this._d,12),o.writeInt32LE(this._e,16),o};function rotl(o,a){return o<>>32-a}function fn1(o,a,c,d,tt,nt,$a,Ys){return rotl(o+(a^c^d)+nt+$a|0,Ys)+tt|0}function fn2(o,a,c,d,tt,nt,$a,Ys){return rotl(o+(a&c|~a&d)+nt+$a|0,Ys)+tt|0}function fn3(o,a,c,d,tt,nt,$a,Ys){return rotl(o+((a|~c)^d)+nt+$a|0,Ys)+tt|0}function fn4(o,a,c,d,tt,nt,$a,Ys){return rotl(o+(a&d|c&~d)+nt+$a|0,Ys)+tt|0}function fn5(o,a,c,d,tt,nt,$a,Ys){return rotl(o+(a^(c|~d))+nt+$a|0,Ys)+tt|0}var ripemd160=RIPEMD160$4,sha_js={exports:{}},Buffer$v=safeBufferExports$1.Buffer;function Hash$8(o,a){this._block=Buffer$v.alloc(o),this._finalSize=a,this._blockSize=o,this._len=0}Hash$8.prototype.update=function(o,a){typeof o=="string"&&(a=a||"utf8",o=Buffer$v.from(o,a));for(var c=this._block,d=this._blockSize,tt=o.length,nt=this._len,$a=0;$a=this._finalSize&&(this._update(this._block),this._block.fill(0));var c=this._len*8;if(c<=4294967295)this._block.writeUInt32BE(c,this._blockSize-4);else{var d=(c&4294967295)>>>0,tt=(c-d)/4294967296;this._block.writeUInt32BE(tt,this._blockSize-8),this._block.writeUInt32BE(d,this._blockSize-4)}this._update(this._block);var nt=this._hash();return o?nt.toString(o):nt};Hash$8.prototype._update=function(){throw new Error("_update must be implemented by subclass")};var hash$4=Hash$8,inherits$n=inherits_browserExports,Hash$7=hash$4,Buffer$u=safeBufferExports$1.Buffer,K$5=[1518500249,1859775393,-1894007588,-899497514],W$6=new Array(80);function Sha(){this.init(),this._w=W$6,Hash$7.call(this,64,56)}inherits$n(Sha,Hash$7);Sha.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function rotl5$1(o){return o<<5|o>>>27}function rotl30$1(o){return o<<30|o>>>2}function ft$2(o,a,c,d){return o===0?a&c|~a&d:o===2?a&c|a&d|c&d:a^c^d}Sha.prototype._update=function(o){for(var a=this._w,c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ys=0;Ys<16;++Ys)a[Ys]=o.readInt32BE(Ys*4);for(;Ys<80;++Ys)a[Ys]=a[Ys-3]^a[Ys-8]^a[Ys-14]^a[Ys-16];for(var gu=0;gu<80;++gu){var xu=~~(gu/20),$u=rotl5$1(c)+ft$2(xu,d,tt,nt)+$a+a[gu]+K$5[xu]|0;$a=nt,nt=tt,tt=rotl30$1(d),d=c,c=$u}this._a=c+this._a|0,this._b=d+this._b|0,this._c=tt+this._c|0,this._d=nt+this._d|0,this._e=$a+this._e|0};Sha.prototype._hash=function(){var o=Buffer$u.allocUnsafe(20);return o.writeInt32BE(this._a|0,0),o.writeInt32BE(this._b|0,4),o.writeInt32BE(this._c|0,8),o.writeInt32BE(this._d|0,12),o.writeInt32BE(this._e|0,16),o};var sha$4=Sha,inherits$m=inherits_browserExports,Hash$6=hash$4,Buffer$t=safeBufferExports$1.Buffer,K$4=[1518500249,1859775393,-1894007588,-899497514],W$5=new Array(80);function Sha1(){this.init(),this._w=W$5,Hash$6.call(this,64,56)}inherits$m(Sha1,Hash$6);Sha1.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function rotl1(o){return o<<1|o>>>31}function rotl5(o){return o<<5|o>>>27}function rotl30(o){return o<<30|o>>>2}function ft$1(o,a,c,d){return o===0?a&c|~a&d:o===2?a&c|a&d|c&d:a^c^d}Sha1.prototype._update=function(o){for(var a=this._w,c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ys=0;Ys<16;++Ys)a[Ys]=o.readInt32BE(Ys*4);for(;Ys<80;++Ys)a[Ys]=rotl1(a[Ys-3]^a[Ys-8]^a[Ys-14]^a[Ys-16]);for(var gu=0;gu<80;++gu){var xu=~~(gu/20),$u=rotl5(c)+ft$1(xu,d,tt,nt)+$a+a[gu]+K$4[xu]|0;$a=nt,nt=tt,tt=rotl30(d),d=c,c=$u}this._a=c+this._a|0,this._b=d+this._b|0,this._c=tt+this._c|0,this._d=nt+this._d|0,this._e=$a+this._e|0};Sha1.prototype._hash=function(){var o=Buffer$t.allocUnsafe(20);return o.writeInt32BE(this._a|0,0),o.writeInt32BE(this._b|0,4),o.writeInt32BE(this._c|0,8),o.writeInt32BE(this._d|0,12),o.writeInt32BE(this._e|0,16),o};var sha1=Sha1,inherits$l=inherits_browserExports,Hash$5=hash$4,Buffer$s=safeBufferExports$1.Buffer,K$3=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],W$4=new Array(64);function Sha256$1(){this.init(),this._w=W$4,Hash$5.call(this,64,56)}inherits$l(Sha256$1,Hash$5);Sha256$1.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this};function ch$1(o,a,c){return c^o&(a^c)}function maj$1(o,a,c){return o&a|c&(o|a)}function sigma0$1(o){return(o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10)}function sigma1$1(o){return(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7)}function gamma0(o){return(o>>>7|o<<25)^(o>>>18|o<<14)^o>>>3}function gamma1(o){return(o>>>17|o<<15)^(o>>>19|o<<13)^o>>>10}Sha256$1.prototype._update=function(o){for(var a=this._w,c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ys=this._f|0,gu=this._g|0,xu=this._h|0,$u=0;$u<16;++$u)a[$u]=o.readInt32BE($u*4);for(;$u<64;++$u)a[$u]=gamma1(a[$u-2])+a[$u-7]+gamma0(a[$u-15])+a[$u-16]|0;for(var Iu=0;Iu<64;++Iu){var Xu=xu+sigma1$1($a)+ch$1($a,Ys,gu)+K$3[Iu]+a[Iu]|0,i0=sigma0$1(c)+maj$1(c,d,tt)|0;xu=gu,gu=Ys,Ys=$a,$a=nt+Xu|0,nt=tt,tt=d,d=c,c=Xu+i0|0}this._a=c+this._a|0,this._b=d+this._b|0,this._c=tt+this._c|0,this._d=nt+this._d|0,this._e=$a+this._e|0,this._f=Ys+this._f|0,this._g=gu+this._g|0,this._h=xu+this._h|0};Sha256$1.prototype._hash=function(){var o=Buffer$s.allocUnsafe(32);return o.writeInt32BE(this._a,0),o.writeInt32BE(this._b,4),o.writeInt32BE(this._c,8),o.writeInt32BE(this._d,12),o.writeInt32BE(this._e,16),o.writeInt32BE(this._f,20),o.writeInt32BE(this._g,24),o.writeInt32BE(this._h,28),o};var sha256$3=Sha256$1,inherits$k=inherits_browserExports,Sha256=sha256$3,Hash$4=hash$4,Buffer$r=safeBufferExports$1.Buffer,W$3=new Array(64);function Sha224(){this.init(),this._w=W$3,Hash$4.call(this,64,56)}inherits$k(Sha224,Sha256);Sha224.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this};Sha224.prototype._hash=function(){var o=Buffer$r.allocUnsafe(28);return o.writeInt32BE(this._a,0),o.writeInt32BE(this._b,4),o.writeInt32BE(this._c,8),o.writeInt32BE(this._d,12),o.writeInt32BE(this._e,16),o.writeInt32BE(this._f,20),o.writeInt32BE(this._g,24),o};var sha224$1=Sha224,inherits$j=inherits_browserExports,Hash$3=hash$4,Buffer$q=safeBufferExports$1.Buffer,K$2=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],W$2=new Array(160);function Sha512(){this.init(),this._w=W$2,Hash$3.call(this,128,112)}inherits$j(Sha512,Hash$3);Sha512.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this};function Ch$1(o,a,c){return c^o&(a^c)}function maj(o,a,c){return o&a|c&(o|a)}function sigma0(o,a){return(o>>>28|a<<4)^(a>>>2|o<<30)^(a>>>7|o<<25)}function sigma1(o,a){return(o>>>14|a<<18)^(o>>>18|a<<14)^(a>>>9|o<<23)}function Gamma0(o,a){return(o>>>1|a<<31)^(o>>>8|a<<24)^o>>>7}function Gamma0l(o,a){return(o>>>1|a<<31)^(o>>>8|a<<24)^(o>>>7|a<<25)}function Gamma1(o,a){return(o>>>19|a<<13)^(a>>>29|o<<3)^o>>>6}function Gamma1l(o,a){return(o>>>19|a<<13)^(a>>>29|o<<3)^(o>>>6|a<<26)}function getCarry(o,a){return o>>>0>>0?1:0}Sha512.prototype._update=function(o){for(var a=this._w,c=this._ah|0,d=this._bh|0,tt=this._ch|0,nt=this._dh|0,$a=this._eh|0,Ys=this._fh|0,gu=this._gh|0,xu=this._hh|0,$u=this._al|0,Iu=this._bl|0,Xu=this._cl|0,i0=this._dl|0,p0=this._el|0,w0=this._fl|0,A0=this._gl|0,$0=this._hl|0,O0=0;O0<32;O0+=2)a[O0]=o.readInt32BE(O0*4),a[O0+1]=o.readInt32BE(O0*4+4);for(;O0<160;O0+=2){var L0=a[O0-30],q0=a[O0-15*2+1],F0=Gamma0(L0,q0),u1=Gamma0l(q0,L0);L0=a[O0-2*2],q0=a[O0-2*2+1];var g1=Gamma1(L0,q0),E1=Gamma1l(q0,L0),B1=a[O0-7*2],lv=a[O0-7*2+1],j1=a[O0-16*2],r1=a[O0-16*2+1],t1=u1+lv|0,D0=F0+B1+getCarry(t1,u1)|0;t1=t1+E1|0,D0=D0+g1+getCarry(t1,E1)|0,t1=t1+r1|0,D0=D0+j1+getCarry(t1,r1)|0,a[O0]=D0,a[O0+1]=t1}for(var Z0=0;Z0<160;Z0+=2){D0=a[Z0],t1=a[Z0+1];var f1=maj(c,d,tt),w1=maj($u,Iu,Xu),m1=sigma0(c,$u),c1=sigma0($u,c),G0=sigma1($a,p0),o1=sigma1(p0,$a),d1=K$2[Z0],R1=K$2[Z0+1],O1=Ch$1($a,Ys,gu),Q1=Ch$1(p0,w0,A0),rv=$0+o1|0,D1=xu+G0+getCarry(rv,$0)|0;rv=rv+Q1|0,D1=D1+O1+getCarry(rv,Q1)|0,rv=rv+R1|0,D1=D1+d1+getCarry(rv,R1)|0,rv=rv+t1|0,D1=D1+D0+getCarry(rv,t1)|0;var ev=c1+w1|0,Mv=m1+f1+getCarry(ev,c1)|0;xu=gu,$0=A0,gu=Ys,A0=w0,Ys=$a,w0=p0,p0=i0+rv|0,$a=nt+D1+getCarry(p0,i0)|0,nt=tt,i0=Xu,tt=d,Xu=Iu,d=c,Iu=$u,$u=rv+ev|0,c=D1+Mv+getCarry($u,rv)|0}this._al=this._al+$u|0,this._bl=this._bl+Iu|0,this._cl=this._cl+Xu|0,this._dl=this._dl+i0|0,this._el=this._el+p0|0,this._fl=this._fl+w0|0,this._gl=this._gl+A0|0,this._hl=this._hl+$0|0,this._ah=this._ah+c+getCarry(this._al,$u)|0,this._bh=this._bh+d+getCarry(this._bl,Iu)|0,this._ch=this._ch+tt+getCarry(this._cl,Xu)|0,this._dh=this._dh+nt+getCarry(this._dl,i0)|0,this._eh=this._eh+$a+getCarry(this._el,p0)|0,this._fh=this._fh+Ys+getCarry(this._fl,w0)|0,this._gh=this._gh+gu+getCarry(this._gl,A0)|0,this._hh=this._hh+xu+getCarry(this._hl,$0)|0};Sha512.prototype._hash=function(){var o=Buffer$q.allocUnsafe(64);function a(c,d,tt){o.writeInt32BE(c,tt),o.writeInt32BE(d,tt+4)}return a(this._ah,this._al,0),a(this._bh,this._bl,8),a(this._ch,this._cl,16),a(this._dh,this._dl,24),a(this._eh,this._el,32),a(this._fh,this._fl,40),a(this._gh,this._gl,48),a(this._hh,this._hl,56),o};var sha512$1=Sha512,inherits$i=inherits_browserExports,SHA512$2=sha512$1,Hash$2=hash$4,Buffer$p=safeBufferExports$1.Buffer,W$1=new Array(160);function Sha384(){this.init(),this._w=W$1,Hash$2.call(this,128,112)}inherits$i(Sha384,SHA512$2);Sha384.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this};Sha384.prototype._hash=function(){var o=Buffer$p.allocUnsafe(48);function a(c,d,tt){o.writeInt32BE(c,tt),o.writeInt32BE(d,tt+4)}return a(this._ah,this._al,0),a(this._bh,this._bl,8),a(this._ch,this._cl,16),a(this._dh,this._dl,24),a(this._eh,this._el,32),a(this._fh,this._fl,40),o};var sha384$1=Sha384,exports=sha_js.exports=function(a){a=a.toLowerCase();var c=exports[a];if(!c)throw new Error(a+" is not supported (we accept pull requests)");return new c};exports.sha=sha$4;exports.sha1=sha1;exports.sha224=sha224$1;exports.sha256=sha256$3;exports.sha384=sha384$1;exports.sha512=sha512$1;var sha_jsExports=sha_js.exports,streamBrowserify=Stream$1,EE=eventsExports.EventEmitter,inherits$h=inherits_browserExports;inherits$h(Stream$1,EE);Stream$1.Readable=require_stream_readable$1();Stream$1.Writable=require_stream_writable$1();Stream$1.Duplex=require_stream_duplex$1();Stream$1.Transform=_stream_transform$1;Stream$1.PassThrough=_stream_passthrough$1;Stream$1.finished=endOfStream;Stream$1.pipeline=pipeline_1;Stream$1.Stream=Stream$1;function Stream$1(){EE.call(this)}Stream$1.prototype.pipe=function(o,a){var c=this;function d($u){o.writable&&o.write($u)===!1&&c.pause&&c.pause()}c.on("data",d);function tt(){c.readable&&c.resume&&c.resume()}o.on("drain",tt),!o._isStdio&&(!a||a.end!==!1)&&(c.on("end",$a),c.on("close",Ys));var nt=!1;function $a(){nt||(nt=!0,o.end())}function Ys(){nt||(nt=!0,typeof o.destroy=="function"&&o.destroy())}function gu($u){if(xu(),EE.listenerCount(this,"error")===0)throw $u}c.on("error",gu),o.on("error",gu);function xu(){c.removeListener("data",d),o.removeListener("drain",tt),c.removeListener("end",$a),c.removeListener("close",Ys),c.removeListener("error",gu),o.removeListener("error",gu),c.removeListener("end",xu),c.removeListener("close",xu),o.removeListener("close",xu)}return c.on("end",xu),c.on("close",xu),o.on("close",xu),o.emit("pipe",c),o};var Buffer$o=safeBufferExports$1.Buffer,Transform$6=streamBrowserify.Transform,StringDecoder=string_decoder.StringDecoder,inherits$g=inherits_browserExports;function CipherBase$1(o){Transform$6.call(this),this.hashMode=typeof o=="string",this.hashMode?this[o]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}inherits$g(CipherBase$1,Transform$6);CipherBase$1.prototype.update=function(o,a,c){typeof o=="string"&&(o=Buffer$o.from(o,a));var d=this._update(o);return this.hashMode?this:(c&&(d=this._toString(d,c)),d)};CipherBase$1.prototype.setAutoPadding=function(){};CipherBase$1.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")};CipherBase$1.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")};CipherBase$1.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")};CipherBase$1.prototype._transform=function(o,a,c){var d;try{this.hashMode?this._update(o):this.push(this._update(o))}catch(tt){d=tt}finally{c(d)}};CipherBase$1.prototype._flush=function(o){var a;try{this.push(this.__final())}catch(c){a=c}o(a)};CipherBase$1.prototype._finalOrDigest=function(o){var a=this.__final()||Buffer$o.alloc(0);return o&&(a=this._toString(a,o,!0)),a};CipherBase$1.prototype._toString=function(o,a,c){if(this._decoder||(this._decoder=new StringDecoder(a),this._encoding=a),this._encoding!==a)throw new Error("can't switch encodings");var d=this._decoder.write(o);return c&&(d+=this._decoder.end()),d};var cipherBase=CipherBase$1,inherits$f=inherits_browserExports,MD5$2=md5_js,RIPEMD160$3=ripemd160,sha$3=sha_jsExports,Base$5=cipherBase;function Hash$1(o){Base$5.call(this,"digest"),this._hash=o}inherits$f(Hash$1,Base$5);Hash$1.prototype._update=function(o){this._hash.update(o)};Hash$1.prototype._final=function(){return this._hash.digest()};var browser$a=function(a){return a=a.toLowerCase(),a==="md5"?new MD5$2:a==="rmd160"||a==="ripemd160"?new RIPEMD160$3:new Hash$1(sha$3(a))},inherits$e=inherits_browserExports,Buffer$n=safeBufferExports$1.Buffer,Base$4=cipherBase,ZEROS$2=Buffer$n.alloc(128),blocksize=64;function Hmac$3(o,a){Base$4.call(this,"digest"),typeof a=="string"&&(a=Buffer$n.from(a)),this._alg=o,this._key=a,a.length>blocksize?a=o(a):a.lengthc){var d=o==="rmd160"?new RIPEMD160$2:sha$2(o);a=d.update(a).digest()}else a.lengthMAX_ALLOC||a!==a)throw new TypeError("Bad key length")},defaultEncoding$2;if(commonjsGlobal$4.process&&commonjsGlobal$4.process.browser)defaultEncoding$2="utf-8";else if(commonjsGlobal$4.process&&commonjsGlobal$4.process.version){var pVersionMajor=parseInt(process$1$4.version.split(".")[0].slice(1),10);defaultEncoding$2=pVersionMajor>=6?"utf-8":"binary"}else defaultEncoding$2="utf-8";var defaultEncoding_1=defaultEncoding$2,Buffer$l=safeBufferExports$1.Buffer,toBuffer$2=function(o,a,c){if(Buffer$l.isBuffer(o))return o;if(typeof o=="string")return Buffer$l.from(o,a);if(ArrayBuffer.isView(o))return Buffer$l.from(o.buffer);throw new TypeError(c+" must be a string, a Buffer, a typed array or a DataView")},md5=md5$2,RIPEMD160$1=ripemd160,sha$1=sha_jsExports,Buffer$k=safeBufferExports$1.Buffer,checkParameters$1=precondition,defaultEncoding$1=defaultEncoding_1,toBuffer$1=toBuffer$2,ZEROS=Buffer$k.alloc(128),sizes={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function Hmac$1(o,a,c){var d=getDigest(o),tt=o==="sha512"||o==="sha384"?128:64;a.length>tt?a=d(a):a.length>>0};utils$r.writeUInt32BE=function(a,c,d){a[0+d]=c>>>24,a[1+d]=c>>>16&255,a[2+d]=c>>>8&255,a[3+d]=c&255};utils$r.ip=function(a,c,d,tt){for(var nt=0,$a=0,Ys=6;Ys>=0;Ys-=2){for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=c>>>gu+Ys&1;for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=a>>>gu+Ys&1}for(var Ys=6;Ys>=0;Ys-=2){for(var gu=1;gu<=25;gu+=8)$a<<=1,$a|=c>>>gu+Ys&1;for(var gu=1;gu<=25;gu+=8)$a<<=1,$a|=a>>>gu+Ys&1}d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.rip=function(a,c,d,tt){for(var nt=0,$a=0,Ys=0;Ys<4;Ys++)for(var gu=24;gu>=0;gu-=8)nt<<=1,nt|=c>>>gu+Ys&1,nt<<=1,nt|=a>>>gu+Ys&1;for(var Ys=4;Ys<8;Ys++)for(var gu=24;gu>=0;gu-=8)$a<<=1,$a|=c>>>gu+Ys&1,$a<<=1,$a|=a>>>gu+Ys&1;d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.pc1=function(a,c,d,tt){for(var nt=0,$a=0,Ys=7;Ys>=5;Ys--){for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=c>>gu+Ys&1;for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=a>>gu+Ys&1}for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=c>>gu+Ys&1;for(var Ys=1;Ys<=3;Ys++){for(var gu=0;gu<=24;gu+=8)$a<<=1,$a|=c>>gu+Ys&1;for(var gu=0;gu<=24;gu+=8)$a<<=1,$a|=a>>gu+Ys&1}for(var gu=0;gu<=24;gu+=8)$a<<=1,$a|=a>>gu+Ys&1;d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.r28shl=function(a,c){return a<>>28-c};var pc2table=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];utils$r.pc2=function(a,c,d,tt){for(var nt=0,$a=0,Ys=pc2table.length>>>1,gu=0;gu>>pc2table[gu]&1;for(var gu=Ys;gu>>pc2table[gu]&1;d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.expand=function(a,c,d){var tt=0,nt=0;tt=(a&1)<<5|a>>>27;for(var $a=23;$a>=15;$a-=4)tt<<=6,tt|=a>>>$a&63;for(var $a=11;$a>=3;$a-=4)nt|=a>>>$a&63,nt<<=6;nt|=(a&31)<<1|a>>>31,c[d+0]=tt>>>0,c[d+1]=nt>>>0};var sTable=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];utils$r.substitute=function(a,c){for(var d=0,tt=0;tt<4;tt++){var nt=a>>>18-tt*6&63,$a=sTable[tt*64+nt];d<<=4,d|=$a}for(var tt=0;tt<4;tt++){var nt=c>>>18-tt*6&63,$a=sTable[4*64+tt*64+nt];d<<=4,d|=$a}return d>>>0};var permuteTable=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];utils$r.permute=function(a){for(var c=0,d=0;d>>permuteTable[d]&1;return c>>>0};utils$r.padSplit=function(a,c,d){for(var tt=a.toString(2);tt.length0;tt--)c+=this._buffer(a,c),d+=this._flushBuffer(nt,d);return c+=this._buffer(a,c),nt};Cipher$3.prototype.final=function(a){var c;a&&(c=this.update(a));var d;return this.type==="encrypt"?d=this._finalEncrypt():d=this._finalDecrypt(),c?c.concat(d):d};Cipher$3.prototype._pad=function(a,c){if(c===0)return!1;for(;c>>1];d=utils$q.r28shl(d,$a),tt=utils$q.r28shl(tt,$a),utils$q.pc2(d,tt,a.keys,nt)}};DES$3.prototype._update=function(a,c,d,tt){var nt=this._desState,$a=utils$q.readUInt32BE(a,c),Ys=utils$q.readUInt32BE(a,c+4);utils$q.ip($a,Ys,nt.tmp,0),$a=nt.tmp[0],Ys=nt.tmp[1],this.type==="encrypt"?this._encrypt(nt,$a,Ys,nt.tmp,0):this._decrypt(nt,$a,Ys,nt.tmp,0),$a=nt.tmp[0],Ys=nt.tmp[1],utils$q.writeUInt32BE(d,$a,tt),utils$q.writeUInt32BE(d,Ys,tt+4)};DES$3.prototype._pad=function(a,c){if(this.padding===!1)return!1;for(var d=a.length-c,tt=c;tt>>0,$a=i0}utils$q.rip(Ys,$a,tt,nt)};DES$3.prototype._decrypt=function(a,c,d,tt,nt){for(var $a=d,Ys=c,gu=a.keys.length-2;gu>=0;gu-=2){var xu=a.keys[gu],$u=a.keys[gu+1];utils$q.expand($a,a.tmp,0),xu^=a.tmp[0],$u^=a.tmp[1];var Iu=utils$q.substitute(xu,$u),Xu=utils$q.permute(Iu),i0=$a;$a=(Ys^Xu)>>>0,Ys=i0}utils$q.rip($a,Ys,tt,nt)};var cbc$1={},assert$h=minimalisticAssert,inherits$b=inherits_browserExports,proto={};function CBCState(o){assert$h.equal(o.length,8,"Invalid IV length"),this.iv=new Array(8);for(var a=0;a>tt%8,o._prev=shiftIn(o._prev,c?Ys:gu);return $a}function shiftIn(o,a){var c=o.length,d=-1,tt=Buffer$f.allocUnsafe(o.length);for(o=Buffer$f.concat([o,Buffer$f.from([a])]);++d>7;return tt}cfb1.encrypt=function(o,a,c){for(var d=a.length,tt=Buffer$f.allocUnsafe(d),nt=-1;++nt>>24]^$a[$u>>>16&255]^Ys[Iu>>>8&255]^gu[Xu&255]^a[$0++],p0=nt[$u>>>24]^$a[Iu>>>16&255]^Ys[Xu>>>8&255]^gu[xu&255]^a[$0++],w0=nt[Iu>>>24]^$a[Xu>>>16&255]^Ys[xu>>>8&255]^gu[$u&255]^a[$0++],A0=nt[Xu>>>24]^$a[xu>>>16&255]^Ys[$u>>>8&255]^gu[Iu&255]^a[$0++],xu=i0,$u=p0,Iu=w0,Xu=A0;return i0=(d[xu>>>24]<<24|d[$u>>>16&255]<<16|d[Iu>>>8&255]<<8|d[Xu&255])^a[$0++],p0=(d[$u>>>24]<<24|d[Iu>>>16&255]<<16|d[Xu>>>8&255]<<8|d[xu&255])^a[$0++],w0=(d[Iu>>>24]<<24|d[Xu>>>16&255]<<16|d[xu>>>8&255]<<8|d[$u&255])^a[$0++],A0=(d[Xu>>>24]<<24|d[xu>>>16&255]<<16|d[$u>>>8&255]<<8|d[Iu&255])^a[$0++],i0=i0>>>0,p0=p0>>>0,w0=w0>>>0,A0=A0>>>0,[i0,p0,w0,A0]}var RCON=[0,1,2,4,8,16,32,64,128,27,54],G$2=function(){for(var o=new Array(256),a=0;a<256;a++)a<128?o[a]=a<<1:o[a]=a<<1^283;for(var c=[],d=[],tt=[[],[],[],[]],nt=[[],[],[],[]],$a=0,Ys=0,gu=0;gu<256;++gu){var xu=Ys^Ys<<1^Ys<<2^Ys<<3^Ys<<4;xu=xu>>>8^xu&255^99,c[$a]=xu,d[xu]=$a;var $u=o[$a],Iu=o[$u],Xu=o[Iu],i0=o[xu]*257^xu*16843008;tt[0][$a]=i0<<24|i0>>>8,tt[1][$a]=i0<<16|i0>>>16,tt[2][$a]=i0<<8|i0>>>24,tt[3][$a]=i0,i0=Xu*16843009^Iu*65537^$u*257^$a*16843008,nt[0][xu]=i0<<24|i0>>>8,nt[1][xu]=i0<<16|i0>>>16,nt[2][xu]=i0<<8|i0>>>24,nt[3][xu]=i0,$a===0?$a=Ys=1:($a=$u^o[o[o[Xu^$u]]],Ys^=o[o[Ys]])}return{SBOX:c,INV_SBOX:d,SUB_MIX:tt,INV_SUB_MIX:nt}}();function AES(o){this._key=asUInt32Array(o),this._reset()}AES.blockSize=4*4;AES.keySize=256/8;AES.prototype.blockSize=AES.blockSize;AES.prototype.keySize=AES.keySize;AES.prototype._reset=function(){for(var o=this._key,a=o.length,c=a+6,d=(c+1)*4,tt=[],nt=0;nt>>24,$a=G$2.SBOX[$a>>>24]<<24|G$2.SBOX[$a>>>16&255]<<16|G$2.SBOX[$a>>>8&255]<<8|G$2.SBOX[$a&255],$a^=RCON[nt/a|0]<<24):a>6&&nt%a===4&&($a=G$2.SBOX[$a>>>24]<<24|G$2.SBOX[$a>>>16&255]<<16|G$2.SBOX[$a>>>8&255]<<8|G$2.SBOX[$a&255]),tt[nt]=tt[nt-a]^$a}for(var Ys=[],gu=0;gu>>24]]^G$2.INV_SUB_MIX[1][G$2.SBOX[$u>>>16&255]]^G$2.INV_SUB_MIX[2][G$2.SBOX[$u>>>8&255]]^G$2.INV_SUB_MIX[3][G$2.SBOX[$u&255]]}this._nRounds=c,this._keySchedule=tt,this._invKeySchedule=Ys};AES.prototype.encryptBlockRaw=function(o){return o=asUInt32Array(o),cryptBlock(o,this._keySchedule,G$2.SUB_MIX,G$2.SBOX,this._nRounds)};AES.prototype.encryptBlock=function(o){var a=this.encryptBlockRaw(o),c=Buffer$d.allocUnsafe(16);return c.writeUInt32BE(a[0],0),c.writeUInt32BE(a[1],4),c.writeUInt32BE(a[2],8),c.writeUInt32BE(a[3],12),c};AES.prototype.decryptBlock=function(o){o=asUInt32Array(o);var a=o[1];o[1]=o[3],o[3]=a;var c=cryptBlock(o,this._invKeySchedule,G$2.INV_SUB_MIX,G$2.INV_SBOX,this._nRounds),d=Buffer$d.allocUnsafe(16);return d.writeUInt32BE(c[0],0),d.writeUInt32BE(c[3],4),d.writeUInt32BE(c[2],8),d.writeUInt32BE(c[1],12),d};AES.prototype.scrub=function(){scrubVec(this._keySchedule),scrubVec(this._invKeySchedule),scrubVec(this._key)};aes$5.AES=AES;var Buffer$c=safeBufferExports$1.Buffer,ZEROES=Buffer$c.alloc(16,0);function toArray$1(o){return[o.readUInt32BE(0),o.readUInt32BE(4),o.readUInt32BE(8),o.readUInt32BE(12)]}function fromArray(o){var a=Buffer$c.allocUnsafe(16);return a.writeUInt32BE(o[0]>>>0,0),a.writeUInt32BE(o[1]>>>0,4),a.writeUInt32BE(o[2]>>>0,8),a.writeUInt32BE(o[3]>>>0,12),a}function GHASH$1(o){this.h=o,this.state=Buffer$c.alloc(16,0),this.cache=Buffer$c.allocUnsafe(0)}GHASH$1.prototype.ghash=function(o){for(var a=-1;++a0;c--)o[c]=o[c]>>>1|(o[c-1]&1)<<31;o[0]=o[0]>>>1,tt&&(o[0]=o[0]^225<<24)}this.state=fromArray(a)};GHASH$1.prototype.update=function(o){this.cache=Buffer$c.concat([this.cache,o]);for(var a;this.cache.length>=16;)a=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(a)};GHASH$1.prototype.final=function(o,a){return this.cache.length&&this.ghash(Buffer$c.concat([this.cache,ZEROES],16)),this.ghash(fromArray([0,o,0,a])),this.state};var ghash=GHASH$1,aes$4=aes$5,Buffer$b=safeBufferExports$1.Buffer,Transform$5=cipherBase,inherits$8=inherits_browserExports,GHASH=ghash,xor$3=bufferXor,incr32=incr32_1;function xorTest(o,a){var c=0;o.length!==a.length&&c++;for(var d=Math.min(o.length,a.length),tt=0;tt0||d>0;){var gu=new MD5;gu.update(Ys),gu.update(o),a&&gu.update(a),Ys=gu.digest();var xu=0;if(tt>0){var $u=nt.length-tt;xu=Math.min(tt,Ys.length),Ys.copy(nt,$u,0,xu),tt-=xu}if(xu0){var Iu=$a.length-d,Xu=Math.min(d,Ys.length-xu);Ys.copy($a,Iu,xu,xu+Xu),d-=Xu}}return Ys.fill(0),{key:nt,iv:$a}}var evp_bytestokey=EVP_BytesToKey,MODES$1=modes_1,AuthCipher$1=authCipher,Buffer$8=safeBufferExports$1.Buffer,StreamCipher$1=streamCipher,Transform$3=cipherBase,aes$2=aes$5,ebtk$2=evp_bytestokey,inherits$6=inherits_browserExports;function Cipher(o,a,c){Transform$3.call(this),this._cache=new Splitter$1,this._cipher=new aes$2.AES(a),this._prev=Buffer$8.from(c),this._mode=o,this._autopadding=!0}inherits$6(Cipher,Transform$3);Cipher.prototype._update=function(o){this._cache.add(o);for(var a,c,d=[];a=this._cache.get();)c=this._mode.encrypt(this,a),d.push(c);return Buffer$8.concat(d)};var PADDING=Buffer$8.alloc(16,16);Cipher.prototype._final=function(){var o=this._cache.flush();if(this._autopadding)return o=this._mode.encrypt(this,o),this._cipher.scrub(),o;if(!o.equals(PADDING))throw this._cipher.scrub(),new Error("data not multiple of block length")};Cipher.prototype.setAutoPadding=function(o){return this._autopadding=!!o,this};function Splitter$1(){this.cache=Buffer$8.allocUnsafe(0)}Splitter$1.prototype.add=function(o){this.cache=Buffer$8.concat([this.cache,o])};Splitter$1.prototype.get=function(){if(this.cache.length>15){var o=this.cache.slice(0,16);return this.cache=this.cache.slice(16),o}return null};Splitter$1.prototype.flush=function(){for(var o=16-this.cache.length,a=Buffer$8.allocUnsafe(o),c=-1;++c16)return a=this.cache.slice(0,16),this.cache=this.cache.slice(16),a}else if(this.cache.length>=16)return a=this.cache.slice(0,16),this.cache=this.cache.slice(16),a;return null};Splitter.prototype.flush=function(){if(this.cache.length)return this.cache};function unpad(o){var a=o[15];if(a<1||a>16)throw new Error("unable to decrypt data");for(var c=-1;++c0?r1:t1},nt.min=function(r1,t1){return r1.cmp(t1)<0?r1:t1},nt.prototype._init=function(r1,t1,D0){if(typeof r1=="number")return this._initNumber(r1,t1,D0);if(typeof r1=="object")return this._initArray(r1,t1,D0);t1==="hex"&&(t1=16),d(t1===(t1|0)&&t1>=2&&t1<=36),r1=r1.toString().replace(/\s+/g,"");var Z0=0;r1[0]==="-"&&(Z0++,this.negative=1),Z0=0;Z0-=3)w1=r1[Z0]|r1[Z0-1]<<8|r1[Z0-2]<<16,this.words[f1]|=w1<>>26-m1&67108863,m1+=24,m1>=26&&(m1-=26,f1++);else if(D0==="le")for(Z0=0,f1=0;Z0>>26-m1&67108863,m1+=24,m1>=26&&(m1-=26,f1++);return this.strip()};function Ys(j1,r1){var t1=j1.charCodeAt(r1);return t1>=65&&t1<=70?t1-55:t1>=97&&t1<=102?t1-87:t1-48&15}function gu(j1,r1,t1){var D0=Ys(j1,t1);return t1-1>=r1&&(D0|=Ys(j1,t1-1)<<4),D0}nt.prototype._parseHex=function(r1,t1,D0){this.length=Math.ceil((r1.length-t1)/6),this.words=new Array(this.length);for(var Z0=0;Z0=t1;Z0-=2)m1=gu(r1,t1,Z0)<=18?(f1-=18,w1+=1,this.words[w1]|=m1>>>26):f1+=8;else{var c1=r1.length-t1;for(Z0=c1%2===0?t1+1:t1;Z0=18?(f1-=18,w1+=1,this.words[w1]|=m1>>>26):f1+=8}this.strip()};function xu(j1,r1,t1,D0){for(var Z0=0,f1=Math.min(j1.length,t1),w1=r1;w1=49?Z0+=m1-49+10:m1>=17?Z0+=m1-17+10:Z0+=m1}return Z0}nt.prototype._parseBase=function(r1,t1,D0){this.words=[0],this.length=1;for(var Z0=0,f1=1;f1<=67108863;f1*=t1)Z0++;Z0--,f1=f1/t1|0;for(var w1=r1.length-D0,m1=w1%Z0,c1=Math.min(w1,w1-m1)+D0,G0=0,o1=D0;o11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},nt.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},nt.prototype.inspect=function(){return(this.red?""};var $u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],Iu=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],Xu=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];nt.prototype.toString=function(r1,t1){r1=r1||10,t1=t1|0||1;var D0;if(r1===16||r1==="hex"){D0="";for(var Z0=0,f1=0,w1=0;w1>>24-Z0&16777215,f1!==0||w1!==this.length-1?D0=$u[6-c1.length]+c1+D0:D0=c1+D0,Z0+=2,Z0>=26&&(Z0-=26,w1--)}for(f1!==0&&(D0=f1.toString(16)+D0);D0.length%t1!==0;)D0="0"+D0;return this.negative!==0&&(D0="-"+D0),D0}if(r1===(r1|0)&&r1>=2&&r1<=36){var G0=Iu[r1],o1=Xu[r1];D0="";var d1=this.clone();for(d1.negative=0;!d1.isZero();){var R1=d1.modn(o1).toString(r1);d1=d1.idivn(o1),d1.isZero()?D0=R1+D0:D0=$u[G0-R1.length]+R1+D0}for(this.isZero()&&(D0="0"+D0);D0.length%t1!==0;)D0="0"+D0;return this.negative!==0&&(D0="-"+D0),D0}d(!1,"Base should be between 2 and 36")},nt.prototype.toNumber=function(){var r1=this.words[0];return this.length===2?r1+=this.words[1]*67108864:this.length===3&&this.words[2]===1?r1+=4503599627370496+this.words[1]*67108864:this.length>2&&d(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-r1:r1},nt.prototype.toJSON=function(){return this.toString(16)},nt.prototype.toBuffer=function(r1,t1){return d(typeof $a<"u"),this.toArrayLike($a,r1,t1)},nt.prototype.toArray=function(r1,t1){return this.toArrayLike(Array,r1,t1)},nt.prototype.toArrayLike=function(r1,t1,D0){var Z0=this.byteLength(),f1=D0||Math.max(1,Z0);d(Z0<=f1,"byte array longer than desired length"),d(f1>0,"Requested array length <= 0"),this.strip();var w1=t1==="le",m1=new r1(f1),c1,G0,o1=this.clone();if(w1){for(G0=0;!o1.isZero();G0++)c1=o1.andln(255),o1.iushrn(8),m1[G0]=c1;for(;G0=4096&&(D0+=13,t1>>>=13),t1>=64&&(D0+=7,t1>>>=7),t1>=8&&(D0+=4,t1>>>=4),t1>=2&&(D0+=2,t1>>>=2),D0+t1},nt.prototype._zeroBits=function(r1){if(r1===0)return 26;var t1=r1,D0=0;return t1&8191||(D0+=13,t1>>>=13),t1&127||(D0+=7,t1>>>=7),t1&15||(D0+=4,t1>>>=4),t1&3||(D0+=2,t1>>>=2),t1&1||D0++,D0},nt.prototype.bitLength=function(){var r1=this.words[this.length-1],t1=this._countBits(r1);return(this.length-1)*26+t1};function i0(j1){for(var r1=new Array(j1.bitLength()),t1=0;t1>>Z0}return r1}nt.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r1=0,t1=0;t1r1.length?this.clone().ior(r1):r1.clone().ior(this)},nt.prototype.uor=function(r1){return this.length>r1.length?this.clone().iuor(r1):r1.clone().iuor(this)},nt.prototype.iuand=function(r1){var t1;this.length>r1.length?t1=r1:t1=this;for(var D0=0;D0r1.length?this.clone().iand(r1):r1.clone().iand(this)},nt.prototype.uand=function(r1){return this.length>r1.length?this.clone().iuand(r1):r1.clone().iuand(this)},nt.prototype.iuxor=function(r1){var t1,D0;this.length>r1.length?(t1=this,D0=r1):(t1=r1,D0=this);for(var Z0=0;Z0r1.length?this.clone().ixor(r1):r1.clone().ixor(this)},nt.prototype.uxor=function(r1){return this.length>r1.length?this.clone().iuxor(r1):r1.clone().iuxor(this)},nt.prototype.inotn=function(r1){d(typeof r1=="number"&&r1>=0);var t1=Math.ceil(r1/26)|0,D0=r1%26;this._expand(t1),D0>0&&t1--;for(var Z0=0;Z00&&(this.words[Z0]=~this.words[Z0]&67108863>>26-D0),this.strip()},nt.prototype.notn=function(r1){return this.clone().inotn(r1)},nt.prototype.setn=function(r1,t1){d(typeof r1=="number"&&r1>=0);var D0=r1/26|0,Z0=r1%26;return this._expand(D0+1),t1?this.words[D0]=this.words[D0]|1<r1.length?(D0=this,Z0=r1):(D0=r1,Z0=this);for(var f1=0,w1=0;w1>>26;for(;f1!==0&&w1>>26;if(this.length=D0.length,f1!==0)this.words[this.length]=f1,this.length++;else if(D0!==this)for(;w1r1.length?this.clone().iadd(r1):r1.clone().iadd(this)},nt.prototype.isub=function(r1){if(r1.negative!==0){r1.negative=0;var t1=this.iadd(r1);return r1.negative=1,t1._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r1),this.negative=1,this._normSign();var D0=this.cmp(r1);if(D0===0)return this.negative=0,this.length=1,this.words[0]=0,this;var Z0,f1;D0>0?(Z0=this,f1=r1):(Z0=r1,f1=this);for(var w1=0,m1=0;m1>26,this.words[m1]=t1&67108863;for(;w1!==0&&m1>26,this.words[m1]=t1&67108863;if(w1===0&&m1>>26,d1=c1&67108863,R1=Math.min(G0,r1.length-1),O1=Math.max(0,G0-j1.length+1);O1<=R1;O1++){var Q1=G0-O1|0;Z0=j1.words[Q1]|0,f1=r1.words[O1]|0,w1=Z0*f1+d1,o1+=w1/67108864|0,d1=w1&67108863}t1.words[G0]=d1|0,c1=o1|0}return c1!==0?t1.words[G0]=c1|0:t1.length--,t1.strip()}var w0=function(r1,t1,D0){var Z0=r1.words,f1=t1.words,w1=D0.words,m1=0,c1,G0,o1,d1=Z0[0]|0,R1=d1&8191,O1=d1>>>13,Q1=Z0[1]|0,rv=Q1&8191,D1=Q1>>>13,ev=Z0[2]|0,Mv=ev&8191,Zv=ev>>>13,fv=Z0[3]|0,cv=fv&8191,ly=fv>>>13,Cy=Z0[4]|0,Ly=Cy&8191,Hy=Cy>>>13,t2=Z0[5]|0,C2=t2&8191,Dy=t2>>>13,jw=Z0[6]|0,pw=jw&8191,vw=jw>>>13,Hw=Z0[7]|0,uw=Hw&8191,Nw=Hw>>>13,lw=Z0[8]|0,Lw=lw&8191,zw=lw>>>13,A2=Z0[9]|0,kv=A2&8191,Y1=A2>>>13,tv=f1[0]|0,Yv=tv&8191,By=tv>>>13,Qy=f1[1]|0,e2=Qy&8191,Kw=Qy>>>13,r$=f1[2]|0,v3=r$&8191,d$=r$>>>13,$2=f1[3]|0,_$=$2&8191,Q$=$2>>>13,S$=f1[4]|0,m$=S$&8191,m3=S$>>>13,n$=f1[5]|0,a$=n$&8191,OE=n$>>>13,Mw=f1[6]|0,Bw=Mw&8191,o3=Mw>>>13,B$=f1[7]|0,$y=B$&8191,Kv=B$>>>13,Ny=f1[8]|0,Vy=Ny&8191,Sy=Ny>>>13,fw=f1[9]|0,xw=fw&8191,V3=fw>>>13;D0.negative=r1.negative^t1.negative,D0.length=19,c1=Math.imul(R1,Yv),G0=Math.imul(R1,By),G0=G0+Math.imul(O1,Yv)|0,o1=Math.imul(O1,By);var i$=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(i$>>>26)|0,i$&=67108863,c1=Math.imul(rv,Yv),G0=Math.imul(rv,By),G0=G0+Math.imul(D1,Yv)|0,o1=Math.imul(D1,By),c1=c1+Math.imul(R1,e2)|0,G0=G0+Math.imul(R1,Kw)|0,G0=G0+Math.imul(O1,e2)|0,o1=o1+Math.imul(O1,Kw)|0;var y$=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(y$>>>26)|0,y$&=67108863,c1=Math.imul(Mv,Yv),G0=Math.imul(Mv,By),G0=G0+Math.imul(Zv,Yv)|0,o1=Math.imul(Zv,By),c1=c1+Math.imul(rv,e2)|0,G0=G0+Math.imul(rv,Kw)|0,G0=G0+Math.imul(D1,e2)|0,o1=o1+Math.imul(D1,Kw)|0,c1=c1+Math.imul(R1,v3)|0,G0=G0+Math.imul(R1,d$)|0,G0=G0+Math.imul(O1,v3)|0,o1=o1+Math.imul(O1,d$)|0;var Gw=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(Gw>>>26)|0,Gw&=67108863,c1=Math.imul(cv,Yv),G0=Math.imul(cv,By),G0=G0+Math.imul(ly,Yv)|0,o1=Math.imul(ly,By),c1=c1+Math.imul(Mv,e2)|0,G0=G0+Math.imul(Mv,Kw)|0,G0=G0+Math.imul(Zv,e2)|0,o1=o1+Math.imul(Zv,Kw)|0,c1=c1+Math.imul(rv,v3)|0,G0=G0+Math.imul(rv,d$)|0,G0=G0+Math.imul(D1,v3)|0,o1=o1+Math.imul(D1,d$)|0,c1=c1+Math.imul(R1,_$)|0,G0=G0+Math.imul(R1,Q$)|0,G0=G0+Math.imul(O1,_$)|0,o1=o1+Math.imul(O1,Q$)|0;var g3=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(g3>>>26)|0,g3&=67108863,c1=Math.imul(Ly,Yv),G0=Math.imul(Ly,By),G0=G0+Math.imul(Hy,Yv)|0,o1=Math.imul(Hy,By),c1=c1+Math.imul(cv,e2)|0,G0=G0+Math.imul(cv,Kw)|0,G0=G0+Math.imul(ly,e2)|0,o1=o1+Math.imul(ly,Kw)|0,c1=c1+Math.imul(Mv,v3)|0,G0=G0+Math.imul(Mv,d$)|0,G0=G0+Math.imul(Zv,v3)|0,o1=o1+Math.imul(Zv,d$)|0,c1=c1+Math.imul(rv,_$)|0,G0=G0+Math.imul(rv,Q$)|0,G0=G0+Math.imul(D1,_$)|0,o1=o1+Math.imul(D1,Q$)|0,c1=c1+Math.imul(R1,m$)|0,G0=G0+Math.imul(R1,m3)|0,G0=G0+Math.imul(O1,m$)|0,o1=o1+Math.imul(O1,m3)|0;var j3=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(j3>>>26)|0,j3&=67108863,c1=Math.imul(C2,Yv),G0=Math.imul(C2,By),G0=G0+Math.imul(Dy,Yv)|0,o1=Math.imul(Dy,By),c1=c1+Math.imul(Ly,e2)|0,G0=G0+Math.imul(Ly,Kw)|0,G0=G0+Math.imul(Hy,e2)|0,o1=o1+Math.imul(Hy,Kw)|0,c1=c1+Math.imul(cv,v3)|0,G0=G0+Math.imul(cv,d$)|0,G0=G0+Math.imul(ly,v3)|0,o1=o1+Math.imul(ly,d$)|0,c1=c1+Math.imul(Mv,_$)|0,G0=G0+Math.imul(Mv,Q$)|0,G0=G0+Math.imul(Zv,_$)|0,o1=o1+Math.imul(Zv,Q$)|0,c1=c1+Math.imul(rv,m$)|0,G0=G0+Math.imul(rv,m3)|0,G0=G0+Math.imul(D1,m$)|0,o1=o1+Math.imul(D1,m3)|0,c1=c1+Math.imul(R1,a$)|0,G0=G0+Math.imul(R1,OE)|0,G0=G0+Math.imul(O1,a$)|0,o1=o1+Math.imul(O1,OE)|0;var $w=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+($w>>>26)|0,$w&=67108863,c1=Math.imul(pw,Yv),G0=Math.imul(pw,By),G0=G0+Math.imul(vw,Yv)|0,o1=Math.imul(vw,By),c1=c1+Math.imul(C2,e2)|0,G0=G0+Math.imul(C2,Kw)|0,G0=G0+Math.imul(Dy,e2)|0,o1=o1+Math.imul(Dy,Kw)|0,c1=c1+Math.imul(Ly,v3)|0,G0=G0+Math.imul(Ly,d$)|0,G0=G0+Math.imul(Hy,v3)|0,o1=o1+Math.imul(Hy,d$)|0,c1=c1+Math.imul(cv,_$)|0,G0=G0+Math.imul(cv,Q$)|0,G0=G0+Math.imul(ly,_$)|0,o1=o1+Math.imul(ly,Q$)|0,c1=c1+Math.imul(Mv,m$)|0,G0=G0+Math.imul(Mv,m3)|0,G0=G0+Math.imul(Zv,m$)|0,o1=o1+Math.imul(Zv,m3)|0,c1=c1+Math.imul(rv,a$)|0,G0=G0+Math.imul(rv,OE)|0,G0=G0+Math.imul(D1,a$)|0,o1=o1+Math.imul(D1,OE)|0,c1=c1+Math.imul(R1,Bw)|0,G0=G0+Math.imul(R1,o3)|0,G0=G0+Math.imul(O1,Bw)|0,o1=o1+Math.imul(O1,o3)|0;var w3=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(w3>>>26)|0,w3&=67108863,c1=Math.imul(uw,Yv),G0=Math.imul(uw,By),G0=G0+Math.imul(Nw,Yv)|0,o1=Math.imul(Nw,By),c1=c1+Math.imul(pw,e2)|0,G0=G0+Math.imul(pw,Kw)|0,G0=G0+Math.imul(vw,e2)|0,o1=o1+Math.imul(vw,Kw)|0,c1=c1+Math.imul(C2,v3)|0,G0=G0+Math.imul(C2,d$)|0,G0=G0+Math.imul(Dy,v3)|0,o1=o1+Math.imul(Dy,d$)|0,c1=c1+Math.imul(Ly,_$)|0,G0=G0+Math.imul(Ly,Q$)|0,G0=G0+Math.imul(Hy,_$)|0,o1=o1+Math.imul(Hy,Q$)|0,c1=c1+Math.imul(cv,m$)|0,G0=G0+Math.imul(cv,m3)|0,G0=G0+Math.imul(ly,m$)|0,o1=o1+Math.imul(ly,m3)|0,c1=c1+Math.imul(Mv,a$)|0,G0=G0+Math.imul(Mv,OE)|0,G0=G0+Math.imul(Zv,a$)|0,o1=o1+Math.imul(Zv,OE)|0,c1=c1+Math.imul(rv,Bw)|0,G0=G0+Math.imul(rv,o3)|0,G0=G0+Math.imul(D1,Bw)|0,o1=o1+Math.imul(D1,o3)|0,c1=c1+Math.imul(R1,$y)|0,G0=G0+Math.imul(R1,Kv)|0,G0=G0+Math.imul(O1,$y)|0,o1=o1+Math.imul(O1,Kv)|0;var yE=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(yE>>>26)|0,yE&=67108863,c1=Math.imul(Lw,Yv),G0=Math.imul(Lw,By),G0=G0+Math.imul(zw,Yv)|0,o1=Math.imul(zw,By),c1=c1+Math.imul(uw,e2)|0,G0=G0+Math.imul(uw,Kw)|0,G0=G0+Math.imul(Nw,e2)|0,o1=o1+Math.imul(Nw,Kw)|0,c1=c1+Math.imul(pw,v3)|0,G0=G0+Math.imul(pw,d$)|0,G0=G0+Math.imul(vw,v3)|0,o1=o1+Math.imul(vw,d$)|0,c1=c1+Math.imul(C2,_$)|0,G0=G0+Math.imul(C2,Q$)|0,G0=G0+Math.imul(Dy,_$)|0,o1=o1+Math.imul(Dy,Q$)|0,c1=c1+Math.imul(Ly,m$)|0,G0=G0+Math.imul(Ly,m3)|0,G0=G0+Math.imul(Hy,m$)|0,o1=o1+Math.imul(Hy,m3)|0,c1=c1+Math.imul(cv,a$)|0,G0=G0+Math.imul(cv,OE)|0,G0=G0+Math.imul(ly,a$)|0,o1=o1+Math.imul(ly,OE)|0,c1=c1+Math.imul(Mv,Bw)|0,G0=G0+Math.imul(Mv,o3)|0,G0=G0+Math.imul(Zv,Bw)|0,o1=o1+Math.imul(Zv,o3)|0,c1=c1+Math.imul(rv,$y)|0,G0=G0+Math.imul(rv,Kv)|0,G0=G0+Math.imul(D1,$y)|0,o1=o1+Math.imul(D1,Kv)|0,c1=c1+Math.imul(R1,Vy)|0,G0=G0+Math.imul(R1,Sy)|0,G0=G0+Math.imul(O1,Vy)|0,o1=o1+Math.imul(O1,Sy)|0;var bE=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(bE>>>26)|0,bE&=67108863,c1=Math.imul(kv,Yv),G0=Math.imul(kv,By),G0=G0+Math.imul(Y1,Yv)|0,o1=Math.imul(Y1,By),c1=c1+Math.imul(Lw,e2)|0,G0=G0+Math.imul(Lw,Kw)|0,G0=G0+Math.imul(zw,e2)|0,o1=o1+Math.imul(zw,Kw)|0,c1=c1+Math.imul(uw,v3)|0,G0=G0+Math.imul(uw,d$)|0,G0=G0+Math.imul(Nw,v3)|0,o1=o1+Math.imul(Nw,d$)|0,c1=c1+Math.imul(pw,_$)|0,G0=G0+Math.imul(pw,Q$)|0,G0=G0+Math.imul(vw,_$)|0,o1=o1+Math.imul(vw,Q$)|0,c1=c1+Math.imul(C2,m$)|0,G0=G0+Math.imul(C2,m3)|0,G0=G0+Math.imul(Dy,m$)|0,o1=o1+Math.imul(Dy,m3)|0,c1=c1+Math.imul(Ly,a$)|0,G0=G0+Math.imul(Ly,OE)|0,G0=G0+Math.imul(Hy,a$)|0,o1=o1+Math.imul(Hy,OE)|0,c1=c1+Math.imul(cv,Bw)|0,G0=G0+Math.imul(cv,o3)|0,G0=G0+Math.imul(ly,Bw)|0,o1=o1+Math.imul(ly,o3)|0,c1=c1+Math.imul(Mv,$y)|0,G0=G0+Math.imul(Mv,Kv)|0,G0=G0+Math.imul(Zv,$y)|0,o1=o1+Math.imul(Zv,Kv)|0,c1=c1+Math.imul(rv,Vy)|0,G0=G0+Math.imul(rv,Sy)|0,G0=G0+Math.imul(D1,Vy)|0,o1=o1+Math.imul(D1,Sy)|0,c1=c1+Math.imul(R1,xw)|0,G0=G0+Math.imul(R1,V3)|0,G0=G0+Math.imul(O1,xw)|0,o1=o1+Math.imul(O1,V3)|0;var J_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(J_>>>26)|0,J_&=67108863,c1=Math.imul(kv,e2),G0=Math.imul(kv,Kw),G0=G0+Math.imul(Y1,e2)|0,o1=Math.imul(Y1,Kw),c1=c1+Math.imul(Lw,v3)|0,G0=G0+Math.imul(Lw,d$)|0,G0=G0+Math.imul(zw,v3)|0,o1=o1+Math.imul(zw,d$)|0,c1=c1+Math.imul(uw,_$)|0,G0=G0+Math.imul(uw,Q$)|0,G0=G0+Math.imul(Nw,_$)|0,o1=o1+Math.imul(Nw,Q$)|0,c1=c1+Math.imul(pw,m$)|0,G0=G0+Math.imul(pw,m3)|0,G0=G0+Math.imul(vw,m$)|0,o1=o1+Math.imul(vw,m3)|0,c1=c1+Math.imul(C2,a$)|0,G0=G0+Math.imul(C2,OE)|0,G0=G0+Math.imul(Dy,a$)|0,o1=o1+Math.imul(Dy,OE)|0,c1=c1+Math.imul(Ly,Bw)|0,G0=G0+Math.imul(Ly,o3)|0,G0=G0+Math.imul(Hy,Bw)|0,o1=o1+Math.imul(Hy,o3)|0,c1=c1+Math.imul(cv,$y)|0,G0=G0+Math.imul(cv,Kv)|0,G0=G0+Math.imul(ly,$y)|0,o1=o1+Math.imul(ly,Kv)|0,c1=c1+Math.imul(Mv,Vy)|0,G0=G0+Math.imul(Mv,Sy)|0,G0=G0+Math.imul(Zv,Vy)|0,o1=o1+Math.imul(Zv,Sy)|0,c1=c1+Math.imul(rv,xw)|0,G0=G0+Math.imul(rv,V3)|0,G0=G0+Math.imul(D1,xw)|0,o1=o1+Math.imul(D1,V3)|0;var B_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(B_>>>26)|0,B_&=67108863,c1=Math.imul(kv,v3),G0=Math.imul(kv,d$),G0=G0+Math.imul(Y1,v3)|0,o1=Math.imul(Y1,d$),c1=c1+Math.imul(Lw,_$)|0,G0=G0+Math.imul(Lw,Q$)|0,G0=G0+Math.imul(zw,_$)|0,o1=o1+Math.imul(zw,Q$)|0,c1=c1+Math.imul(uw,m$)|0,G0=G0+Math.imul(uw,m3)|0,G0=G0+Math.imul(Nw,m$)|0,o1=o1+Math.imul(Nw,m3)|0,c1=c1+Math.imul(pw,a$)|0,G0=G0+Math.imul(pw,OE)|0,G0=G0+Math.imul(vw,a$)|0,o1=o1+Math.imul(vw,OE)|0,c1=c1+Math.imul(C2,Bw)|0,G0=G0+Math.imul(C2,o3)|0,G0=G0+Math.imul(Dy,Bw)|0,o1=o1+Math.imul(Dy,o3)|0,c1=c1+Math.imul(Ly,$y)|0,G0=G0+Math.imul(Ly,Kv)|0,G0=G0+Math.imul(Hy,$y)|0,o1=o1+Math.imul(Hy,Kv)|0,c1=c1+Math.imul(cv,Vy)|0,G0=G0+Math.imul(cv,Sy)|0,G0=G0+Math.imul(ly,Vy)|0,o1=o1+Math.imul(ly,Sy)|0,c1=c1+Math.imul(Mv,xw)|0,G0=G0+Math.imul(Mv,V3)|0,G0=G0+Math.imul(Zv,xw)|0,o1=o1+Math.imul(Zv,V3)|0;var $_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+($_>>>26)|0,$_&=67108863,c1=Math.imul(kv,_$),G0=Math.imul(kv,Q$),G0=G0+Math.imul(Y1,_$)|0,o1=Math.imul(Y1,Q$),c1=c1+Math.imul(Lw,m$)|0,G0=G0+Math.imul(Lw,m3)|0,G0=G0+Math.imul(zw,m$)|0,o1=o1+Math.imul(zw,m3)|0,c1=c1+Math.imul(uw,a$)|0,G0=G0+Math.imul(uw,OE)|0,G0=G0+Math.imul(Nw,a$)|0,o1=o1+Math.imul(Nw,OE)|0,c1=c1+Math.imul(pw,Bw)|0,G0=G0+Math.imul(pw,o3)|0,G0=G0+Math.imul(vw,Bw)|0,o1=o1+Math.imul(vw,o3)|0,c1=c1+Math.imul(C2,$y)|0,G0=G0+Math.imul(C2,Kv)|0,G0=G0+Math.imul(Dy,$y)|0,o1=o1+Math.imul(Dy,Kv)|0,c1=c1+Math.imul(Ly,Vy)|0,G0=G0+Math.imul(Ly,Sy)|0,G0=G0+Math.imul(Hy,Vy)|0,o1=o1+Math.imul(Hy,Sy)|0,c1=c1+Math.imul(cv,xw)|0,G0=G0+Math.imul(cv,V3)|0,G0=G0+Math.imul(ly,xw)|0,o1=o1+Math.imul(ly,V3)|0;var M6=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(M6>>>26)|0,M6&=67108863,c1=Math.imul(kv,m$),G0=Math.imul(kv,m3),G0=G0+Math.imul(Y1,m$)|0,o1=Math.imul(Y1,m3),c1=c1+Math.imul(Lw,a$)|0,G0=G0+Math.imul(Lw,OE)|0,G0=G0+Math.imul(zw,a$)|0,o1=o1+Math.imul(zw,OE)|0,c1=c1+Math.imul(uw,Bw)|0,G0=G0+Math.imul(uw,o3)|0,G0=G0+Math.imul(Nw,Bw)|0,o1=o1+Math.imul(Nw,o3)|0,c1=c1+Math.imul(pw,$y)|0,G0=G0+Math.imul(pw,Kv)|0,G0=G0+Math.imul(vw,$y)|0,o1=o1+Math.imul(vw,Kv)|0,c1=c1+Math.imul(C2,Vy)|0,G0=G0+Math.imul(C2,Sy)|0,G0=G0+Math.imul(Dy,Vy)|0,o1=o1+Math.imul(Dy,Sy)|0,c1=c1+Math.imul(Ly,xw)|0,G0=G0+Math.imul(Ly,V3)|0,G0=G0+Math.imul(Hy,xw)|0,o1=o1+Math.imul(Hy,V3)|0;var D_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(D_>>>26)|0,D_&=67108863,c1=Math.imul(kv,a$),G0=Math.imul(kv,OE),G0=G0+Math.imul(Y1,a$)|0,o1=Math.imul(Y1,OE),c1=c1+Math.imul(Lw,Bw)|0,G0=G0+Math.imul(Lw,o3)|0,G0=G0+Math.imul(zw,Bw)|0,o1=o1+Math.imul(zw,o3)|0,c1=c1+Math.imul(uw,$y)|0,G0=G0+Math.imul(uw,Kv)|0,G0=G0+Math.imul(Nw,$y)|0,o1=o1+Math.imul(Nw,Kv)|0,c1=c1+Math.imul(pw,Vy)|0,G0=G0+Math.imul(pw,Sy)|0,G0=G0+Math.imul(vw,Vy)|0,o1=o1+Math.imul(vw,Sy)|0,c1=c1+Math.imul(C2,xw)|0,G0=G0+Math.imul(C2,V3)|0,G0=G0+Math.imul(Dy,xw)|0,o1=o1+Math.imul(Dy,V3)|0;var FA=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(FA>>>26)|0,FA&=67108863,c1=Math.imul(kv,Bw),G0=Math.imul(kv,o3),G0=G0+Math.imul(Y1,Bw)|0,o1=Math.imul(Y1,o3),c1=c1+Math.imul(Lw,$y)|0,G0=G0+Math.imul(Lw,Kv)|0,G0=G0+Math.imul(zw,$y)|0,o1=o1+Math.imul(zw,Kv)|0,c1=c1+Math.imul(uw,Vy)|0,G0=G0+Math.imul(uw,Sy)|0,G0=G0+Math.imul(Nw,Vy)|0,o1=o1+Math.imul(Nw,Sy)|0,c1=c1+Math.imul(pw,xw)|0,G0=G0+Math.imul(pw,V3)|0,G0=G0+Math.imul(vw,xw)|0,o1=o1+Math.imul(vw,V3)|0;var g8=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(g8>>>26)|0,g8&=67108863,c1=Math.imul(kv,$y),G0=Math.imul(kv,Kv),G0=G0+Math.imul(Y1,$y)|0,o1=Math.imul(Y1,Kv),c1=c1+Math.imul(Lw,Vy)|0,G0=G0+Math.imul(Lw,Sy)|0,G0=G0+Math.imul(zw,Vy)|0,o1=o1+Math.imul(zw,Sy)|0,c1=c1+Math.imul(uw,xw)|0,G0=G0+Math.imul(uw,V3)|0,G0=G0+Math.imul(Nw,xw)|0,o1=o1+Math.imul(Nw,V3)|0;var y8=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(y8>>>26)|0,y8&=67108863,c1=Math.imul(kv,Vy),G0=Math.imul(kv,Sy),G0=G0+Math.imul(Y1,Vy)|0,o1=Math.imul(Y1,Sy),c1=c1+Math.imul(Lw,xw)|0,G0=G0+Math.imul(Lw,V3)|0,G0=G0+Math.imul(zw,xw)|0,o1=o1+Math.imul(zw,V3)|0;var X_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(X_>>>26)|0,X_&=67108863,c1=Math.imul(kv,xw),G0=Math.imul(kv,V3),G0=G0+Math.imul(Y1,xw)|0,o1=Math.imul(Y1,V3);var FS=(m1+c1|0)+((G0&8191)<<13)|0;return m1=(o1+(G0>>>13)|0)+(FS>>>26)|0,FS&=67108863,w1[0]=i$,w1[1]=y$,w1[2]=Gw,w1[3]=g3,w1[4]=j3,w1[5]=$w,w1[6]=w3,w1[7]=yE,w1[8]=bE,w1[9]=J_,w1[10]=B_,w1[11]=$_,w1[12]=M6,w1[13]=D_,w1[14]=FA,w1[15]=g8,w1[16]=y8,w1[17]=X_,w1[18]=FS,m1!==0&&(w1[19]=m1,D0.length++),D0};Math.imul||(w0=p0);function A0(j1,r1,t1){t1.negative=r1.negative^j1.negative,t1.length=j1.length+r1.length;for(var D0=0,Z0=0,f1=0;f1>>26)|0,Z0+=w1>>>26,w1&=67108863}t1.words[f1]=m1,D0=w1,w1=Z0}return D0!==0?t1.words[f1]=D0:t1.length--,t1.strip()}function $0(j1,r1,t1){var D0=new O0;return D0.mulp(j1,r1,t1)}nt.prototype.mulTo=function(r1,t1){var D0,Z0=this.length+r1.length;return this.length===10&&r1.length===10?D0=w0(this,r1,t1):Z0<63?D0=p0(this,r1,t1):Z0<1024?D0=A0(this,r1,t1):D0=$0(this,r1,t1),D0};function O0(j1,r1){this.x=j1,this.y=r1}O0.prototype.makeRBT=function(r1){for(var t1=new Array(r1),D0=nt.prototype._countBits(r1)-1,Z0=0;Z0>=1;return Z0},O0.prototype.permute=function(r1,t1,D0,Z0,f1,w1){for(var m1=0;m1>>1)f1++;return 1<>>13,D0[2*w1+1]=f1&8191,f1=f1>>>13;for(w1=2*t1;w1>=26,t1+=Z0/67108864|0,t1+=f1>>>26,this.words[D0]=f1&67108863}return t1!==0&&(this.words[D0]=t1,this.length++),this},nt.prototype.muln=function(r1){return this.clone().imuln(r1)},nt.prototype.sqr=function(){return this.mul(this)},nt.prototype.isqr=function(){return this.imul(this.clone())},nt.prototype.pow=function(r1){var t1=i0(r1);if(t1.length===0)return new nt(1);for(var D0=this,Z0=0;Z0=0);var t1=r1%26,D0=(r1-t1)/26,Z0=67108863>>>26-t1<<26-t1,f1;if(t1!==0){var w1=0;for(f1=0;f1>>26-t1}w1&&(this.words[f1]=w1,this.length++)}if(D0!==0){for(f1=this.length-1;f1>=0;f1--)this.words[f1+D0]=this.words[f1];for(f1=0;f1=0);var Z0;t1?Z0=(t1-t1%26)/26:Z0=0;var f1=r1%26,w1=Math.min((r1-f1)/26,this.length),m1=67108863^67108863>>>f1<w1)for(this.length-=w1,G0=0;G0=0&&(o1!==0||G0>=Z0);G0--){var d1=this.words[G0]|0;this.words[G0]=o1<<26-f1|d1>>>f1,o1=d1&m1}return c1&&o1!==0&&(c1.words[c1.length++]=o1),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},nt.prototype.ishrn=function(r1,t1,D0){return d(this.negative===0),this.iushrn(r1,t1,D0)},nt.prototype.shln=function(r1){return this.clone().ishln(r1)},nt.prototype.ushln=function(r1){return this.clone().iushln(r1)},nt.prototype.shrn=function(r1){return this.clone().ishrn(r1)},nt.prototype.ushrn=function(r1){return this.clone().iushrn(r1)},nt.prototype.testn=function(r1){d(typeof r1=="number"&&r1>=0);var t1=r1%26,D0=(r1-t1)/26,Z0=1<=0);var t1=r1%26,D0=(r1-t1)/26;if(d(this.negative===0,"imaskn works only with positive numbers"),this.length<=D0)return this;if(t1!==0&&D0++,this.length=Math.min(D0,this.length),t1!==0){var Z0=67108863^67108863>>>t1<=67108864;t1++)this.words[t1]-=67108864,t1===this.length-1?this.words[t1+1]=1:this.words[t1+1]++;return this.length=Math.max(this.length,t1+1),this},nt.prototype.isubn=function(r1){if(d(typeof r1=="number"),d(r1<67108864),r1<0)return this.iaddn(-r1);if(this.negative!==0)return this.negative=0,this.iaddn(r1),this.negative=1,this;if(this.words[0]-=r1,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t1=0;t1>26)-(c1/67108864|0),this.words[f1+D0]=w1&67108863}for(;f1>26,this.words[f1+D0]=w1&67108863;if(m1===0)return this.strip();for(d(m1===-1),m1=0,f1=0;f1>26,this.words[f1]=w1&67108863;return this.negative=1,this.strip()},nt.prototype._wordDiv=function(r1,t1){var D0=this.length-r1.length,Z0=this.clone(),f1=r1,w1=f1.words[f1.length-1]|0,m1=this._countBits(w1);D0=26-m1,D0!==0&&(f1=f1.ushln(D0),Z0.iushln(D0),w1=f1.words[f1.length-1]|0);var c1=Z0.length-f1.length,G0;if(t1!=="mod"){G0=new nt(null),G0.length=c1+1,G0.words=new Array(G0.length);for(var o1=0;o1=0;R1--){var O1=(Z0.words[f1.length+R1]|0)*67108864+(Z0.words[f1.length+R1-1]|0);for(O1=Math.min(O1/w1|0,67108863),Z0._ishlnsubmul(f1,O1,R1);Z0.negative!==0;)O1--,Z0.negative=0,Z0._ishlnsubmul(f1,1,R1),Z0.isZero()||(Z0.negative^=1);G0&&(G0.words[R1]=O1)}return G0&&G0.strip(),Z0.strip(),t1!=="div"&&D0!==0&&Z0.iushrn(D0),{div:G0||null,mod:Z0}},nt.prototype.divmod=function(r1,t1,D0){if(d(!r1.isZero()),this.isZero())return{div:new nt(0),mod:new nt(0)};var Z0,f1,w1;return this.negative!==0&&r1.negative===0?(w1=this.neg().divmod(r1,t1),t1!=="mod"&&(Z0=w1.div.neg()),t1!=="div"&&(f1=w1.mod.neg(),D0&&f1.negative!==0&&f1.iadd(r1)),{div:Z0,mod:f1}):this.negative===0&&r1.negative!==0?(w1=this.divmod(r1.neg(),t1),t1!=="mod"&&(Z0=w1.div.neg()),{div:Z0,mod:w1.mod}):this.negative&r1.negative?(w1=this.neg().divmod(r1.neg(),t1),t1!=="div"&&(f1=w1.mod.neg(),D0&&f1.negative!==0&&f1.isub(r1)),{div:w1.div,mod:f1}):r1.length>this.length||this.cmp(r1)<0?{div:new nt(0),mod:this}:r1.length===1?t1==="div"?{div:this.divn(r1.words[0]),mod:null}:t1==="mod"?{div:null,mod:new nt(this.modn(r1.words[0]))}:{div:this.divn(r1.words[0]),mod:new nt(this.modn(r1.words[0]))}:this._wordDiv(r1,t1)},nt.prototype.div=function(r1){return this.divmod(r1,"div",!1).div},nt.prototype.mod=function(r1){return this.divmod(r1,"mod",!1).mod},nt.prototype.umod=function(r1){return this.divmod(r1,"mod",!0).mod},nt.prototype.divRound=function(r1){var t1=this.divmod(r1);if(t1.mod.isZero())return t1.div;var D0=t1.div.negative!==0?t1.mod.isub(r1):t1.mod,Z0=r1.ushrn(1),f1=r1.andln(1),w1=D0.cmp(Z0);return w1<0||f1===1&&w1===0?t1.div:t1.div.negative!==0?t1.div.isubn(1):t1.div.iaddn(1)},nt.prototype.modn=function(r1){d(r1<=67108863);for(var t1=(1<<26)%r1,D0=0,Z0=this.length-1;Z0>=0;Z0--)D0=(t1*D0+(this.words[Z0]|0))%r1;return D0},nt.prototype.idivn=function(r1){d(r1<=67108863);for(var t1=0,D0=this.length-1;D0>=0;D0--){var Z0=(this.words[D0]|0)+t1*67108864;this.words[D0]=Z0/r1|0,t1=Z0%r1}return this.strip()},nt.prototype.divn=function(r1){return this.clone().idivn(r1)},nt.prototype.egcd=function(r1){d(r1.negative===0),d(!r1.isZero());var t1=this,D0=r1.clone();t1.negative!==0?t1=t1.umod(r1):t1=t1.clone();for(var Z0=new nt(1),f1=new nt(0),w1=new nt(0),m1=new nt(1),c1=0;t1.isEven()&&D0.isEven();)t1.iushrn(1),D0.iushrn(1),++c1;for(var G0=D0.clone(),o1=t1.clone();!t1.isZero();){for(var d1=0,R1=1;!(t1.words[0]&R1)&&d1<26;++d1,R1<<=1);if(d1>0)for(t1.iushrn(d1);d1-- >0;)(Z0.isOdd()||f1.isOdd())&&(Z0.iadd(G0),f1.isub(o1)),Z0.iushrn(1),f1.iushrn(1);for(var O1=0,Q1=1;!(D0.words[0]&Q1)&&O1<26;++O1,Q1<<=1);if(O1>0)for(D0.iushrn(O1);O1-- >0;)(w1.isOdd()||m1.isOdd())&&(w1.iadd(G0),m1.isub(o1)),w1.iushrn(1),m1.iushrn(1);t1.cmp(D0)>=0?(t1.isub(D0),Z0.isub(w1),f1.isub(m1)):(D0.isub(t1),w1.isub(Z0),m1.isub(f1))}return{a:w1,b:m1,gcd:D0.iushln(c1)}},nt.prototype._invmp=function(r1){d(r1.negative===0),d(!r1.isZero());var t1=this,D0=r1.clone();t1.negative!==0?t1=t1.umod(r1):t1=t1.clone();for(var Z0=new nt(1),f1=new nt(0),w1=D0.clone();t1.cmpn(1)>0&&D0.cmpn(1)>0;){for(var m1=0,c1=1;!(t1.words[0]&c1)&&m1<26;++m1,c1<<=1);if(m1>0)for(t1.iushrn(m1);m1-- >0;)Z0.isOdd()&&Z0.iadd(w1),Z0.iushrn(1);for(var G0=0,o1=1;!(D0.words[0]&o1)&&G0<26;++G0,o1<<=1);if(G0>0)for(D0.iushrn(G0);G0-- >0;)f1.isOdd()&&f1.iadd(w1),f1.iushrn(1);t1.cmp(D0)>=0?(t1.isub(D0),Z0.isub(f1)):(D0.isub(t1),f1.isub(Z0))}var d1;return t1.cmpn(1)===0?d1=Z0:d1=f1,d1.cmpn(0)<0&&d1.iadd(r1),d1},nt.prototype.gcd=function(r1){if(this.isZero())return r1.abs();if(r1.isZero())return this.abs();var t1=this.clone(),D0=r1.clone();t1.negative=0,D0.negative=0;for(var Z0=0;t1.isEven()&&D0.isEven();Z0++)t1.iushrn(1),D0.iushrn(1);do{for(;t1.isEven();)t1.iushrn(1);for(;D0.isEven();)D0.iushrn(1);var f1=t1.cmp(D0);if(f1<0){var w1=t1;t1=D0,D0=w1}else if(f1===0||D0.cmpn(1)===0)break;t1.isub(D0)}while(!0);return D0.iushln(Z0)},nt.prototype.invm=function(r1){return this.egcd(r1).a.umod(r1)},nt.prototype.isEven=function(){return(this.words[0]&1)===0},nt.prototype.isOdd=function(){return(this.words[0]&1)===1},nt.prototype.andln=function(r1){return this.words[0]&r1},nt.prototype.bincn=function(r1){d(typeof r1=="number");var t1=r1%26,D0=(r1-t1)/26,Z0=1<>>26,m1&=67108863,this.words[w1]=m1}return f1!==0&&(this.words[w1]=f1,this.length++),this},nt.prototype.isZero=function(){return this.length===1&&this.words[0]===0},nt.prototype.cmpn=function(r1){var t1=r1<0;if(this.negative!==0&&!t1)return-1;if(this.negative===0&&t1)return 1;this.strip();var D0;if(this.length>1)D0=1;else{t1&&(r1=-r1),d(r1<=67108863,"Number is too big");var Z0=this.words[0]|0;D0=Z0===r1?0:Z0r1.length)return 1;if(this.length=0;D0--){var Z0=this.words[D0]|0,f1=r1.words[D0]|0;if(Z0!==f1){Z0f1&&(t1=1);break}}return t1},nt.prototype.gtn=function(r1){return this.cmpn(r1)===1},nt.prototype.gt=function(r1){return this.cmp(r1)===1},nt.prototype.gten=function(r1){return this.cmpn(r1)>=0},nt.prototype.gte=function(r1){return this.cmp(r1)>=0},nt.prototype.ltn=function(r1){return this.cmpn(r1)===-1},nt.prototype.lt=function(r1){return this.cmp(r1)===-1},nt.prototype.lten=function(r1){return this.cmpn(r1)<=0},nt.prototype.lte=function(r1){return this.cmp(r1)<=0},nt.prototype.eqn=function(r1){return this.cmpn(r1)===0},nt.prototype.eq=function(r1){return this.cmp(r1)===0},nt.red=function(r1){return new B1(r1)},nt.prototype.toRed=function(r1){return d(!this.red,"Already a number in reduction context"),d(this.negative===0,"red works only with positives"),r1.convertTo(this)._forceRed(r1)},nt.prototype.fromRed=function(){return d(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},nt.prototype._forceRed=function(r1){return this.red=r1,this},nt.prototype.forceRed=function(r1){return d(!this.red,"Already a number in reduction context"),this._forceRed(r1)},nt.prototype.redAdd=function(r1){return d(this.red,"redAdd works only with red numbers"),this.red.add(this,r1)},nt.prototype.redIAdd=function(r1){return d(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,r1)},nt.prototype.redSub=function(r1){return d(this.red,"redSub works only with red numbers"),this.red.sub(this,r1)},nt.prototype.redISub=function(r1){return d(this.red,"redISub works only with red numbers"),this.red.isub(this,r1)},nt.prototype.redShl=function(r1){return d(this.red,"redShl works only with red numbers"),this.red.shl(this,r1)},nt.prototype.redMul=function(r1){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,r1),this.red.mul(this,r1)},nt.prototype.redIMul=function(r1){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,r1),this.red.imul(this,r1)},nt.prototype.redSqr=function(){return d(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},nt.prototype.redISqr=function(){return d(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},nt.prototype.redSqrt=function(){return d(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},nt.prototype.redInvm=function(){return d(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},nt.prototype.redNeg=function(){return d(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},nt.prototype.redPow=function(r1){return d(this.red&&!r1.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,r1)};var L0={k256:null,p224:null,p192:null,p25519:null};function q0(j1,r1){this.name=j1,this.p=new nt(r1,16),this.n=this.p.bitLength(),this.k=new nt(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}q0.prototype._tmp=function(){var r1=new nt(null);return r1.words=new Array(Math.ceil(this.n/13)),r1},q0.prototype.ireduce=function(r1){var t1=r1,D0;do this.split(t1,this.tmp),t1=this.imulK(t1),t1=t1.iadd(this.tmp),D0=t1.bitLength();while(D0>this.n);var Z0=D00?t1.isub(this.p):t1.strip!==void 0?t1.strip():t1._strip(),t1},q0.prototype.split=function(r1,t1){r1.iushrn(this.n,0,t1)},q0.prototype.imulK=function(r1){return r1.imul(this.k)};function F0(){q0.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}tt(F0,q0),F0.prototype.split=function(r1,t1){for(var D0=4194303,Z0=Math.min(r1.length,9),f1=0;f1>>22,w1=m1}w1>>>=22,r1.words[f1-10]=w1,w1===0&&r1.length>10?r1.length-=10:r1.length-=9},F0.prototype.imulK=function(r1){r1.words[r1.length]=0,r1.words[r1.length+1]=0,r1.length+=2;for(var t1=0,D0=0;D0>>=26,r1.words[D0]=f1,t1=Z0}return t1!==0&&(r1.words[r1.length++]=t1),r1},nt._prime=function(r1){if(L0[r1])return L0[r1];var t1;if(r1==="k256")t1=new F0;else if(r1==="p224")t1=new u1;else if(r1==="p192")t1=new g1;else if(r1==="p25519")t1=new E1;else throw new Error("Unknown prime "+r1);return L0[r1]=t1,t1};function B1(j1){if(typeof j1=="string"){var r1=nt._prime(j1);this.m=r1.p,this.prime=r1}else d(j1.gtn(1),"modulus must be greater than 1"),this.m=j1,this.prime=null}B1.prototype._verify1=function(r1){d(r1.negative===0,"red works only with positives"),d(r1.red,"red works only with red numbers")},B1.prototype._verify2=function(r1,t1){d((r1.negative|t1.negative)===0,"red works only with positives"),d(r1.red&&r1.red===t1.red,"red works only with red numbers")},B1.prototype.imod=function(r1){return this.prime?this.prime.ireduce(r1)._forceRed(this):r1.umod(this.m)._forceRed(this)},B1.prototype.neg=function(r1){return r1.isZero()?r1.clone():this.m.sub(r1)._forceRed(this)},B1.prototype.add=function(r1,t1){this._verify2(r1,t1);var D0=r1.add(t1);return D0.cmp(this.m)>=0&&D0.isub(this.m),D0._forceRed(this)},B1.prototype.iadd=function(r1,t1){this._verify2(r1,t1);var D0=r1.iadd(t1);return D0.cmp(this.m)>=0&&D0.isub(this.m),D0},B1.prototype.sub=function(r1,t1){this._verify2(r1,t1);var D0=r1.sub(t1);return D0.cmpn(0)<0&&D0.iadd(this.m),D0._forceRed(this)},B1.prototype.isub=function(r1,t1){this._verify2(r1,t1);var D0=r1.isub(t1);return D0.cmpn(0)<0&&D0.iadd(this.m),D0},B1.prototype.shl=function(r1,t1){return this._verify1(r1),this.imod(r1.ushln(t1))},B1.prototype.imul=function(r1,t1){return this._verify2(r1,t1),this.imod(r1.imul(t1))},B1.prototype.mul=function(r1,t1){return this._verify2(r1,t1),this.imod(r1.mul(t1))},B1.prototype.isqr=function(r1){return this.imul(r1,r1.clone())},B1.prototype.sqr=function(r1){return this.mul(r1,r1)},B1.prototype.sqrt=function(r1){if(r1.isZero())return r1.clone();var t1=this.m.andln(3);if(d(t1%2===1),t1===3){var D0=this.m.add(new nt(1)).iushrn(2);return this.pow(r1,D0)}for(var Z0=this.m.subn(1),f1=0;!Z0.isZero()&&Z0.andln(1)===0;)f1++,Z0.iushrn(1);d(!Z0.isZero());var w1=new nt(1).toRed(this),m1=w1.redNeg(),c1=this.m.subn(1).iushrn(1),G0=this.m.bitLength();for(G0=new nt(2*G0*G0).toRed(this);this.pow(G0,c1).cmp(m1)!==0;)G0.redIAdd(m1);for(var o1=this.pow(G0,Z0),d1=this.pow(r1,Z0.addn(1).iushrn(1)),R1=this.pow(r1,Z0),O1=f1;R1.cmp(w1)!==0;){for(var Q1=R1,rv=0;Q1.cmp(w1)!==0;rv++)Q1=Q1.redSqr();d(rv=0;f1--){for(var o1=t1.words[f1],d1=G0-1;d1>=0;d1--){var R1=o1>>d1&1;if(w1!==Z0[0]&&(w1=this.sqr(w1)),R1===0&&m1===0){c1=0;continue}m1<<=1,m1|=R1,c1++,!(c1!==D0&&(f1!==0||d1!==0))&&(w1=this.mul(w1,Z0[m1]),c1=0,m1=0)}G0=26}return w1},B1.prototype.convertTo=function(r1){var t1=r1.umod(this.m);return t1===r1?t1.clone():t1},B1.prototype.convertFrom=function(r1){var t1=r1.clone();return t1.red=null,t1},nt.mont=function(r1){return new lv(r1)};function lv(j1){B1.call(this,j1),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new nt(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}tt(lv,B1),lv.prototype.convertTo=function(r1){return this.imod(r1.ushln(this.shift))},lv.prototype.convertFrom=function(r1){var t1=this.imod(r1.mul(this.rinv));return t1.red=null,t1},lv.prototype.imul=function(r1,t1){if(r1.isZero()||t1.isZero())return r1.words[0]=0,r1.length=1,r1;var D0=r1.imul(t1),Z0=D0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),f1=D0.isub(Z0).iushrn(this.shift),w1=f1;return f1.cmp(this.m)>=0?w1=f1.isub(this.m):f1.cmpn(0)<0&&(w1=f1.iadd(this.m)),w1._forceRed(this)},lv.prototype.mul=function(r1,t1){if(r1.isZero()||t1.isZero())return new nt(0)._forceRed(this);var D0=r1.mul(t1),Z0=D0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),f1=D0.isub(Z0).iushrn(this.shift),w1=f1;return f1.cmp(this.m)>=0?w1=f1.isub(this.m):f1.cmpn(0)<0&&(w1=f1.iadd(this.m)),w1._forceRed(this)},lv.prototype.invm=function(r1){var t1=this.imod(r1._invmp(this.m).mul(this.r2));return t1._forceRed(this)}})(o,commonjsGlobal$4)})(bn$1);var bnExports=bn$1.exports,brorand={exports:{}},hasRequiredBrorand;function requireBrorand(){if(hasRequiredBrorand)return brorand.exports;hasRequiredBrorand=1;var o;brorand.exports=function(tt){return o||(o=new a(null)),o.generate(tt)};function a(d){this.rand=d}if(brorand.exports.Rand=a,a.prototype.generate=function(tt){return this._rand(tt)},a.prototype._rand=function(tt){if(this.rand.getBytes)return this.rand.getBytes(tt);for(var nt=new Uint8Array(tt),$a=0;$a=0);return Ys},c.prototype._randrange=function(tt,nt){var $a=nt.sub(tt);return tt.add(this._randbelow($a))},c.prototype.test=function(tt,nt,$a){var Ys=tt.bitLength(),gu=o.mont(tt),xu=new o(1).toRed(gu);nt||(nt=Math.max(1,Ys/48|0));for(var $u=tt.subn(1),Iu=0;!$u.testn(Iu);Iu++);for(var Xu=tt.shrn(Iu),i0=$u.toRed(gu),p0=!0;nt>0;nt--){var w0=this._randrange(new o(2),$u);$a&&$a(w0);var A0=w0.toRed(gu).redPow(Xu);if(!(A0.cmp(xu)===0||A0.cmp(i0)===0)){for(var $0=1;$00;nt--){var i0=this._randrange(new o(2),xu),p0=tt.gcd(i0);if(p0.cmpn(1)!==0)return p0;var w0=i0.toRed(Ys).redPow(Iu);if(!(w0.cmp(gu)===0||w0.cmp(Xu)===0)){for(var A0=1;A0<$u;A0++){if(w0=w0.redSqr(),w0.cmp(gu)===0)return w0.fromRed().subn(1).gcd(tt);if(w0.cmp(Xu)===0)break}if(A0===$u)return w0=w0.redSqr(),w0.fromRed().subn(1).gcd(tt)}}return!1},mr$1}var generatePrime,hasRequiredGeneratePrime;function requireGeneratePrime(){if(hasRequiredGeneratePrime)return generatePrime;hasRequiredGeneratePrime=1;var o=browserExports;generatePrime=A0,A0.simpleSieve=p0,A0.fermatTest=w0;var a=bnExports,c=new a(24),d=requireMr(),tt=new d,nt=new a(1),$a=new a(2),Ys=new a(5);new a(16),new a(8);var gu=new a(10),xu=new a(3);new a(7);var $u=new a(11),Iu=new a(4);new a(12);var Xu=null;function i0(){if(Xu!==null)return Xu;var $0=1048576,O0=[];O0[0]=2;for(var L0=1,q0=3;q0<$0;q0+=2){for(var F0=Math.ceil(Math.sqrt(q0)),u1=0;u1$0;)L0.ishrn(1);if(L0.isEven()&&L0.iadd(nt),L0.testn(1)||L0.iadd($a),O0.cmp($a)){if(!O0.cmp(Ys))for(;L0.mod(gu).cmp(xu);)L0.iadd(Iu)}else for(;L0.mod(c).cmp($u);)L0.iadd(Iu);if(q0=L0.shrn(1),p0(q0)&&p0(L0)&&w0(q0)&&w0(L0)&&tt.test(q0)&&tt.test(L0))return L0}}return generatePrime}const modp1={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"},require$$1$2={modp1,modp2,modp5,modp14,modp15,modp16,modp17,modp18};var dh$1,hasRequiredDh;function requireDh(){if(hasRequiredDh)return dh$1;hasRequiredDh=1;var o=bnExports,a=requireMr(),c=new a,d=new o(24),tt=new o(11),nt=new o(10),$a=new o(3),Ys=new o(7),gu=requireGeneratePrime(),xu=browserExports;dh$1=p0;function $u(A0,$0){return $0=$0||"utf8",Buffer$C.isBuffer(A0)||(A0=new Buffer$C(A0,$0)),this._pub=new o(A0),this}function Iu(A0,$0){return $0=$0||"utf8",Buffer$C.isBuffer(A0)||(A0=new Buffer$C(A0,$0)),this._priv=new o(A0),this}var Xu={};function i0(A0,$0){var O0=$0.toString("hex"),L0=[O0,A0.toString(16)].join("_");if(L0 in Xu)return Xu[L0];var q0=0;if(A0.isEven()||!gu.simpleSieve||!gu.fermatTest(A0)||!c.test(A0))return q0+=1,O0==="02"||O0==="05"?q0+=8:q0+=4,Xu[L0]=q0,q0;c.test(A0.shrn(1))||(q0+=2);var F0;switch(O0){case"02":A0.mod(d).cmp(tt)&&(q0+=8);break;case"05":F0=A0.mod(nt),F0.cmp($a)&&F0.cmp(Ys)&&(q0+=8);break;default:q0+=4}return Xu[L0]=q0,q0}function p0(A0,$0,O0){this.setGenerator($0),this.__prime=new o(A0),this._prime=o.mont(this.__prime),this._primeLen=A0.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,O0?(this.setPublicKey=$u,this.setPrivateKey=Iu):this._primeCode=8}Object.defineProperty(p0.prototype,"verifyError",{enumerable:!0,get:function(){return typeof this._primeCode!="number"&&(this._primeCode=i0(this.__prime,this.__gen)),this._primeCode}}),p0.prototype.generateKeys=function(){return this._priv||(this._priv=new o(xu(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},p0.prototype.computeSecret=function(A0){A0=new o(A0),A0=A0.toRed(this._prime);var $0=A0.redPow(this._priv).fromRed(),O0=new Buffer$C($0.toArray()),L0=this.getPrime();if(O0.length"u"||!process$1$4.version||process$1$4.version.indexOf("v0.")===0||process$1$4.version.indexOf("v1.")===0&&process$1$4.version.indexOf("v1.8.")!==0?processNextickArgs.exports={nextTick}:processNextickArgs.exports=process$1$4;function nextTick(o,a,c,d){if(typeof o!="function")throw new TypeError('"callback" argument must be a function');var tt=arguments.length,nt,$a;switch(tt){case 0:case 1:return process$1$4.nextTick(o);case 2:return process$1$4.nextTick(function(){o.call(null,a)});case 3:return process$1$4.nextTick(function(){o.call(null,a,c)});case 4:return process$1$4.nextTick(function(){o.call(null,a,c,d)});default:for(nt=new Array(tt-1),$a=0;$a"u"}util$3.isPrimitive=isPrimitive;util$3.isBuffer=require$$1$4.Buffer.isBuffer;function objectToString$1(o){return Object.prototype.toString.call(o)}var BufferList={exports:{}},hasRequiredBufferList;function requireBufferList(){return hasRequiredBufferList||(hasRequiredBufferList=1,function(o){function a(nt,$a){if(!(nt instanceof $a))throw new TypeError("Cannot call a class as a function")}var c=safeBufferExports.Buffer,d=util$5;function tt(nt,$a,Ys){nt.copy($a,Ys)}o.exports=function(){function nt(){a(this,nt),this.head=null,this.tail=null,this.length=0}return nt.prototype.push=function(Ys){var gu={data:Ys,next:null};this.length>0?this.tail.next=gu:this.head=gu,this.tail=gu,++this.length},nt.prototype.unshift=function(Ys){var gu={data:Ys,next:this.head};this.length===0&&(this.tail=gu),this.head=gu,++this.length},nt.prototype.shift=function(){if(this.length!==0){var Ys=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,Ys}},nt.prototype.clear=function(){this.head=this.tail=null,this.length=0},nt.prototype.join=function(Ys){if(this.length===0)return"";for(var gu=this.head,xu=""+gu.data;gu=gu.next;)xu+=Ys+gu.data;return xu},nt.prototype.concat=function(Ys){if(this.length===0)return c.alloc(0);for(var gu=c.allocUnsafe(Ys>>>0),xu=this.head,$u=0;xu;)tt(xu.data,gu,$u),$u+=xu.data.length,xu=xu.next;return gu},nt}(),d&&d.inspect&&d.inspect.custom&&(o.exports.prototype[d.inspect.custom]=function(){var nt=d.inspect({length:this.length});return this.constructor.name+" "+nt})}(BufferList)),BufferList.exports}var pna=processNextickArgsExports;function destroy(o,a){var c=this,d=this._readableState&&this._readableState.destroyed,tt=this._writableState&&this._writableState.destroyed;return d||tt?(a?a(o):o&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,pna.nextTick(emitErrorNT,this,o)):pna.nextTick(emitErrorNT,this,o)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(o||null,function(nt){!a&&nt?c._writableState?c._writableState.errorEmitted||(c._writableState.errorEmitted=!0,pna.nextTick(emitErrorNT,c,nt)):pna.nextTick(emitErrorNT,c,nt):a&&a(nt)}),this)}function undestroy(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function emitErrorNT(o,a){o.emit("error",a)}var destroy_1={destroy,undestroy},_stream_writable,hasRequired_stream_writable;function require_stream_writable(){if(hasRequired_stream_writable)return _stream_writable;hasRequired_stream_writable=1;var o=processNextickArgsExports;_stream_writable=w0;function a(w1){var m1=this;this.next=null,this.entry=null,this.finish=function(){f1(m1,w1)}}var c=!process$1$4.browser&&["v0.10","v0.9."].indexOf(process$1$4.version.slice(0,5))>-1?setImmediate:o.nextTick,d;w0.WritableState=i0;var tt=Object.create(util$3);tt.inherits=inherits_browserExports;var nt={deprecate:browser$c},$a=streamBrowser,Ys=safeBufferExports.Buffer,gu=(typeof commonjsGlobal$4<"u"?commonjsGlobal$4:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function xu(w1){return Ys.from(w1)}function $u(w1){return Ys.isBuffer(w1)||w1 instanceof gu}var Iu=destroy_1;tt.inherits(w0,$a);function Xu(){}function i0(w1,m1){d=d||require_stream_duplex(),w1=w1||{};var c1=m1 instanceof d;this.objectMode=!!w1.objectMode,c1&&(this.objectMode=this.objectMode||!!w1.writableObjectMode);var G0=w1.highWaterMark,o1=w1.writableHighWaterMark,d1=this.objectMode?16:16*1024;G0||G0===0?this.highWaterMark=G0:c1&&(o1||o1===0)?this.highWaterMark=o1:this.highWaterMark=d1,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var R1=w1.decodeStrings===!1;this.decodeStrings=!R1,this.defaultEncoding=w1.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(O1){g1(m1,O1)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}i0.prototype.getBuffer=function(){for(var m1=this.bufferedRequest,c1=[];m1;)c1.push(m1),m1=m1.next;return c1},function(){try{Object.defineProperty(i0.prototype,"buffer",{get:nt.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var p0;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(p0=Function.prototype[Symbol.hasInstance],Object.defineProperty(w0,Symbol.hasInstance,{value:function(w1){return p0.call(this,w1)?!0:this!==w0?!1:w1&&w1._writableState instanceof i0}})):p0=function(w1){return w1 instanceof this};function w0(w1){if(d=d||require_stream_duplex(),!p0.call(w0,this)&&!(this instanceof d))return new w0(w1);this._writableState=new i0(w1,this),this.writable=!0,w1&&(typeof w1.write=="function"&&(this._write=w1.write),typeof w1.writev=="function"&&(this._writev=w1.writev),typeof w1.destroy=="function"&&(this._destroy=w1.destroy),typeof w1.final=="function"&&(this._final=w1.final)),$a.call(this)}w0.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function A0(w1,m1){var c1=new Error("write after end");w1.emit("error",c1),o.nextTick(m1,c1)}function $0(w1,m1,c1,G0){var o1=!0,d1=!1;return c1===null?d1=new TypeError("May not write null values to stream"):typeof c1!="string"&&c1!==void 0&&!m1.objectMode&&(d1=new TypeError("Invalid non-string/buffer chunk")),d1&&(w1.emit("error",d1),o.nextTick(G0,d1),o1=!1),o1}w0.prototype.write=function(w1,m1,c1){var G0=this._writableState,o1=!1,d1=!G0.objectMode&&$u(w1);return d1&&!Ys.isBuffer(w1)&&(w1=xu(w1)),typeof m1=="function"&&(c1=m1,m1=null),d1?m1="buffer":m1||(m1=G0.defaultEncoding),typeof c1!="function"&&(c1=Xu),G0.ended?A0(this,c1):(d1||$0(this,G0,w1,c1))&&(G0.pendingcb++,o1=L0(this,G0,d1,w1,m1,c1)),o1},w0.prototype.cork=function(){var w1=this._writableState;w1.corked++},w0.prototype.uncork=function(){var w1=this._writableState;w1.corked&&(w1.corked--,!w1.writing&&!w1.corked&&!w1.bufferProcessing&&w1.bufferedRequest&&lv(this,w1))},w0.prototype.setDefaultEncoding=function(m1){if(typeof m1=="string"&&(m1=m1.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((m1+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+m1);return this._writableState.defaultEncoding=m1,this};function O0(w1,m1,c1){return!w1.objectMode&&w1.decodeStrings!==!1&&typeof m1=="string"&&(m1=Ys.from(m1,c1)),m1}Object.defineProperty(w0.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function L0(w1,m1,c1,G0,o1,d1){if(!c1){var R1=O0(m1,G0,o1);G0!==R1&&(c1=!0,o1="buffer",G0=R1)}var O1=m1.objectMode?1:G0.length;m1.length+=O1;var Q1=m1.length0?(typeof ev!="string"&&!cv.objectMode&&Object.getPrototypeOf(ev)!==nt.prototype&&(ev=Ys(ev)),Zv?cv.endEmitted?D1.emit("error",new Error("stream.unshift() after end event")):q0(D1,cv,ev,!0):cv.ended?D1.emit("error",new Error("stream.push() after EOF")):(cv.reading=!1,cv.decoder&&!Mv?(ev=cv.decoder.write(ev),cv.objectMode||ev.length!==0?q0(D1,cv,ev,!1):t1(D1,cv)):q0(D1,cv,ev,!1))):Zv||(cv.reading=!1)}return u1(cv)}function q0(D1,ev,Mv,Zv){ev.flowing&&ev.length===0&&!ev.sync?(D1.emit("data",Mv),D1.read(0)):(ev.length+=ev.objectMode?1:Mv.length,Zv?ev.buffer.unshift(Mv):ev.buffer.push(Mv),ev.needReadable&&j1(D1)),t1(D1,ev)}function F0(D1,ev){var Mv;return!gu(ev)&&typeof ev!="string"&&ev!==void 0&&!D1.objectMode&&(Mv=new TypeError("Invalid non-string/buffer chunk")),Mv}function u1(D1){return!D1.ended&&(D1.needReadable||D1.length=g1?D1=g1:(D1--,D1|=D1>>>1,D1|=D1>>>2,D1|=D1>>>4,D1|=D1>>>8,D1|=D1>>>16,D1++),D1}function B1(D1,ev){return D1<=0||ev.length===0&&ev.ended?0:ev.objectMode?1:D1!==D1?ev.flowing&&ev.length?ev.buffer.head.data.length:ev.length:(D1>ev.highWaterMark&&(ev.highWaterMark=E1(D1)),D1<=ev.length?D1:ev.ended?ev.length:(ev.needReadable=!0,0))}O0.prototype.read=function(D1){Iu("read",D1),D1=parseInt(D1,10);var ev=this._readableState,Mv=D1;if(D1!==0&&(ev.emittedReadable=!1),D1===0&&ev.needReadable&&(ev.length>=ev.highWaterMark||ev.ended))return Iu("read: emitReadable",ev.length,ev.ended),ev.length===0&&ev.ended?O1(this):j1(this),null;if(D1=B1(D1,ev),D1===0&&ev.ended)return ev.length===0&&O1(this),null;var Zv=ev.needReadable;Iu("need readable",Zv),(ev.length===0||ev.length-D10?fv=G0(D1,ev):fv=null,fv===null?(ev.needReadable=!0,D1=0):ev.length-=D1,ev.length===0&&(ev.ended||(ev.needReadable=!0),Mv!==D1&&ev.ended&&O1(this)),fv!==null&&this.emit("data",fv),fv};function lv(D1,ev){if(!ev.ended){if(ev.decoder){var Mv=ev.decoder.end();Mv&&Mv.length&&(ev.buffer.push(Mv),ev.length+=ev.objectMode?1:Mv.length)}ev.ended=!0,j1(D1)}}function j1(D1){var ev=D1._readableState;ev.needReadable=!1,ev.emittedReadable||(Iu("emitReadable",ev.flowing),ev.emittedReadable=!0,ev.sync?o.nextTick(r1,D1):r1(D1))}function r1(D1){Iu("emit readable"),D1.emit("readable"),c1(D1)}function t1(D1,ev){ev.readingMore||(ev.readingMore=!0,o.nextTick(D0,D1,ev))}function D0(D1,ev){for(var Mv=ev.length;!ev.reading&&!ev.flowing&&!ev.ended&&ev.length1&&rv(Zv.pipes,D1)!==-1)&&!Hy&&(Iu("false write response, pause",Zv.awaitDrain),Zv.awaitDrain++,C2=!0),Mv.pause())}function jw(uw){Iu("onerror",uw),Hw(),D1.removeListener("error",jw),d(D1,"error")===0&&D1.emit("error",uw)}A0(D1,"error",jw);function pw(){D1.removeListener("finish",vw),Hw()}D1.once("close",pw);function vw(){Iu("onfinish"),D1.removeListener("close",pw),Hw()}D1.once("finish",vw);function Hw(){Iu("unpipe"),Mv.unpipe(D1)}return D1.emit("pipe",Mv),Zv.flowing||(Iu("pipe resume"),Mv.resume()),D1};function Z0(D1){return function(){var ev=D1._readableState;Iu("pipeOnDrain",ev.awaitDrain),ev.awaitDrain&&ev.awaitDrain--,ev.awaitDrain===0&&d(D1,"data")&&(ev.flowing=!0,c1(D1))}}O0.prototype.unpipe=function(D1){var ev=this._readableState,Mv={hasUnpiped:!1};if(ev.pipesCount===0)return this;if(ev.pipesCount===1)return D1&&D1!==ev.pipes?this:(D1||(D1=ev.pipes),ev.pipes=null,ev.pipesCount=0,ev.flowing=!1,D1&&D1.emit("unpipe",this,Mv),this);if(!D1){var Zv=ev.pipes,fv=ev.pipesCount;ev.pipes=null,ev.pipesCount=0,ev.flowing=!1;for(var cv=0;cv=ev.length?(ev.decoder?Mv=ev.buffer.join(""):ev.buffer.length===1?Mv=ev.buffer.head.data:Mv=ev.buffer.concat(ev.length),ev.buffer.clear()):Mv=o1(D1,ev.buffer,ev.decoder),Mv}function o1(D1,ev,Mv){var Zv;return D1cv.length?cv.length:D1;if(ly===cv.length?fv+=cv:fv+=cv.slice(0,D1),D1-=ly,D1===0){ly===cv.length?(++Zv,Mv.next?ev.head=Mv.next:ev.head=ev.tail=null):(ev.head=Mv,Mv.data=cv.slice(ly));break}++Zv}return ev.length-=Zv,fv}function R1(D1,ev){var Mv=nt.allocUnsafe(D1),Zv=ev.head,fv=1;for(Zv.data.copy(Mv),D1-=Zv.data.length;Zv=Zv.next;){var cv=Zv.data,ly=D1>cv.length?cv.length:D1;if(cv.copy(Mv,Mv.length-D1,0,ly),D1-=ly,D1===0){ly===cv.length?(++fv,Zv.next?ev.head=Zv.next:ev.head=ev.tail=null):(ev.head=Zv,Zv.data=cv.slice(ly));break}++fv}return ev.length-=fv,Mv}function O1(D1){var ev=D1._readableState;if(ev.length>0)throw new Error('"endReadable()" called on non-empty stream');ev.endEmitted||(ev.ended=!0,o.nextTick(Q1,ev,D1))}function Q1(D1,ev){!D1.endEmitted&&D1.length===0&&(D1.endEmitted=!0,ev.readable=!1,ev.emit("end"))}function rv(D1,ev){for(var Mv=0,Zv=D1.length;Mv=0||!c.umod(o.prime1)||!c.umod(o.prime2));return c}function crt$2(o,a){var c=blind(a),d=a.modulus.byteLength(),tt=new BN$a(o).mul(c.blinder).umod(a.modulus),nt=tt.toRed(BN$a.mont(a.prime1)),$a=tt.toRed(BN$a.mont(a.prime2)),Ys=a.coefficient,gu=a.prime1,xu=a.prime2,$u=nt.redPow(a.exponent1).fromRed(),Iu=$a.redPow(a.exponent2).fromRed(),Xu=$u.isub(Iu).imul(Ys).umod(gu).imul(xu);return Iu.iadd(Xu).imul(c.unblinder).umod(a.modulus).toArrayLike(Buffer$C,"be",d)}crt$2.getr=getr;var browserifyRsa=crt$2,elliptic={};const name$1="elliptic",version$7="6.5.5",description$1="EC cryptography",main="lib/elliptic.js",files=["lib"],scripts={lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository={type:"git",url:"git@github.com:indutny/elliptic"},keywords=["EC","Elliptic","curve","Cryptography"],author="Fedor Indutny ",license="MIT",bugs={url:"https://github.com/indutny/elliptic/issues"},homepage="https://github.com/indutny/elliptic",devDependencies={brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies$1={"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"},require$$0={name:name$1,version:version$7,description:description$1,main,files,scripts,repository,keywords,author,license,bugs,homepage,devDependencies,dependencies:dependencies$1};var utils$p={},utils$o={};(function(o){var a=o;function c(nt,$a){if(Array.isArray(nt))return nt.slice();if(!nt)return[];var Ys=[];if(typeof nt!="string"){for(var gu=0;gu>8,Iu=xu&255;$u?Ys.push($u,Iu):Ys.push(Iu)}return Ys}a.toArray=c;function d(nt){return nt.length===1?"0"+nt:nt}a.zero2=d;function tt(nt){for(var $a="",Ys=0;Ys(w0>>1)-1?$0=(w0>>1)-O0:$0=O0,A0.isubn($0)):$0=0,i0[p0]=$0,A0.iushrn(1)}return i0}a.getNAF=nt;function $a($u,Iu){var Xu=[[],[]];$u=$u.clone(),Iu=Iu.clone();for(var i0=0,p0=0,w0;$u.cmpn(-i0)>0||Iu.cmpn(-p0)>0;){var A0=$u.andln(3)+i0&3,$0=Iu.andln(3)+p0&3;A0===3&&(A0=-1),$0===3&&($0=-1);var O0;A0&1?(w0=$u.andln(7)+i0&7,(w0===3||w0===5)&&$0===2?O0=-A0:O0=A0):O0=0,Xu[0].push(O0);var L0;$0&1?(w0=Iu.andln(7)+p0&7,(w0===3||w0===5)&&A0===2?L0=-$0:L0=$0):L0=0,Xu[1].push(L0),2*i0===O0+1&&(i0=1-i0),2*p0===L0+1&&(p0=1-p0),$u.iushrn(1),Iu.iushrn(1)}return Xu}a.getJSF=$a;function Ys($u,Iu,Xu){var i0="_"+Iu;$u.prototype[Iu]=function(){return this[i0]!==void 0?this[i0]:this[i0]=Xu.call(this)}}a.cachedProperty=Ys;function gu($u){return typeof $u=="string"?a.toArray($u,"hex"):$u}a.parseBytes=gu;function xu($u){return new c($u,"hex","le")}a.intFromLE=xu})(utils$p);var curve$1={},BN$9=bnExports,utils$n=utils$p,getNAF=utils$n.getNAF,getJSF=utils$n.getJSF,assert$f=utils$n.assert;function BaseCurve(o,a){this.type=o,this.p=new BN$9(a.p,16),this.red=a.prime?BN$9.red(a.prime):BN$9.mont(this.p),this.zero=new BN$9(0).toRed(this.red),this.one=new BN$9(1).toRed(this.red),this.two=new BN$9(2).toRed(this.red),this.n=a.n&&new BN$9(a.n,16),this.g=a.g&&this.pointFromJSON(a.g,a.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var c=this.n&&this.p.div(this.n);!c||c.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var base$3=BaseCurve;BaseCurve.prototype.point=function(){throw new Error("Not implemented")};BaseCurve.prototype.validate=function(){throw new Error("Not implemented")};BaseCurve.prototype._fixedNafMul=function(a,c){assert$f(a.precomputed);var d=a._getDoubles(),tt=getNAF(c,1,this._bitLength),nt=(1<=Ys;xu--)gu=(gu<<1)+tt[xu];$a.push(gu)}for(var $u=this.jpoint(null,null,null),Iu=this.jpoint(null,null,null),Xu=nt;Xu>0;Xu--){for(Ys=0;Ys<$a.length;Ys++)gu=$a[Ys],gu===Xu?Iu=Iu.mixedAdd(d.points[Ys]):gu===-Xu&&(Iu=Iu.mixedAdd(d.points[Ys].neg()));$u=$u.add(Iu)}return $u.toP()};BaseCurve.prototype._wnafMul=function(a,c){var d=4,tt=a._getNAFPoints(d);d=tt.wnd;for(var nt=tt.points,$a=getNAF(c,d,this._bitLength),Ys=this.jpoint(null,null,null),gu=$a.length-1;gu>=0;gu--){for(var xu=0;gu>=0&&$a[gu]===0;gu--)xu++;if(gu>=0&&xu++,Ys=Ys.dblp(xu),gu<0)break;var $u=$a[gu];assert$f($u!==0),a.type==="affine"?$u>0?Ys=Ys.mixedAdd(nt[$u-1>>1]):Ys=Ys.mixedAdd(nt[-$u-1>>1].neg()):$u>0?Ys=Ys.add(nt[$u-1>>1]):Ys=Ys.add(nt[-$u-1>>1].neg())}return a.type==="affine"?Ys.toP():Ys};BaseCurve.prototype._wnafMulAdd=function(a,c,d,tt,nt){var $a=this._wnafT1,Ys=this._wnafT2,gu=this._wnafT3,xu=0,$u,Iu,Xu;for($u=0;$u=1;$u-=2){var p0=$u-1,w0=$u;if($a[p0]!==1||$a[w0]!==1){gu[p0]=getNAF(d[p0],$a[p0],this._bitLength),gu[w0]=getNAF(d[w0],$a[w0],this._bitLength),xu=Math.max(gu[p0].length,xu),xu=Math.max(gu[w0].length,xu);continue}var A0=[c[p0],null,null,c[w0]];c[p0].y.cmp(c[w0].y)===0?(A0[1]=c[p0].add(c[w0]),A0[2]=c[p0].toJ().mixedAdd(c[w0].neg())):c[p0].y.cmp(c[w0].y.redNeg())===0?(A0[1]=c[p0].toJ().mixedAdd(c[w0]),A0[2]=c[p0].add(c[w0].neg())):(A0[1]=c[p0].toJ().mixedAdd(c[w0]),A0[2]=c[p0].toJ().mixedAdd(c[w0].neg()));var $0=[-3,-1,-5,-7,0,7,5,1,3],O0=getJSF(d[p0],d[w0]);for(xu=Math.max(O0[0].length,xu),gu[p0]=new Array(xu),gu[w0]=new Array(xu),Iu=0;Iu=0;$u--){for(var g1=0;$u>=0;){var E1=!0;for(Iu=0;Iu=0&&g1++,F0=F0.dblp(g1),$u<0)break;for(Iu=0;Iu0?Xu=Ys[Iu][B1-1>>1]:B1<0&&(Xu=Ys[Iu][-B1-1>>1].neg()),Xu.type==="affine"?F0=F0.mixedAdd(Xu):F0=F0.add(Xu))}}for($u=0;$u=Math.ceil((a.bitLength()+1)/c.step):!1};BasePoint.prototype._getDoubles=function(a,c){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var d=[this],tt=this,nt=0;nt=0&&(i0=xu,p0=$u),Iu.negative&&(Iu=Iu.neg(),Xu=Xu.neg()),i0.negative&&(i0=i0.neg(),p0=p0.neg()),[{a:Iu,b:Xu},{a:i0,b:p0}]};ShortCurve.prototype._endoSplit=function(a){var c=this.endo.basis,d=c[0],tt=c[1],nt=tt.b.mul(a).divRound(this.n),$a=d.b.neg().mul(a).divRound(this.n),Ys=nt.mul(d.a),gu=$a.mul(tt.a),xu=nt.mul(d.b),$u=$a.mul(tt.b),Iu=a.sub(Ys).sub(gu),Xu=xu.add($u).neg();return{k1:Iu,k2:Xu}};ShortCurve.prototype.pointFromX=function(a,c){a=new BN$8(a,16),a.red||(a=a.toRed(this.red));var d=a.redSqr().redMul(a).redIAdd(a.redMul(this.a)).redIAdd(this.b),tt=d.redSqrt();if(tt.redSqr().redSub(d).cmp(this.zero)!==0)throw new Error("invalid point");var nt=tt.fromRed().isOdd();return(c&&!nt||!c&&nt)&&(tt=tt.redNeg()),this.point(a,tt)};ShortCurve.prototype.validate=function(a){if(a.inf)return!0;var c=a.x,d=a.y,tt=this.a.redMul(c),nt=c.redSqr().redMul(c).redIAdd(tt).redIAdd(this.b);return d.redSqr().redISub(nt).cmpn(0)===0};ShortCurve.prototype._endoWnafMulAdd=function(a,c,d){for(var tt=this._endoWnafT1,nt=this._endoWnafT2,$a=0;$a":""};Point$2.prototype.isInfinity=function(){return this.inf};Point$2.prototype.add=function(a){if(this.inf)return a;if(a.inf)return this;if(this.eq(a))return this.dbl();if(this.neg().eq(a))return this.curve.point(null,null);if(this.x.cmp(a.x)===0)return this.curve.point(null,null);var c=this.y.redSub(a.y);c.cmpn(0)!==0&&(c=c.redMul(this.x.redSub(a.x).redInvm()));var d=c.redSqr().redISub(this.x).redISub(a.x),tt=c.redMul(this.x.redSub(d)).redISub(this.y);return this.curve.point(d,tt)};Point$2.prototype.dbl=function(){if(this.inf)return this;var a=this.y.redAdd(this.y);if(a.cmpn(0)===0)return this.curve.point(null,null);var c=this.curve.a,d=this.x.redSqr(),tt=a.redInvm(),nt=d.redAdd(d).redIAdd(d).redIAdd(c).redMul(tt),$a=nt.redSqr().redISub(this.x.redAdd(this.x)),Ys=nt.redMul(this.x.redSub($a)).redISub(this.y);return this.curve.point($a,Ys)};Point$2.prototype.getX=function(){return this.x.fromRed()};Point$2.prototype.getY=function(){return this.y.fromRed()};Point$2.prototype.mul=function(a){return a=new BN$8(a,16),this.isInfinity()?this:this._hasDoubles(a)?this.curve._fixedNafMul(this,a):this.curve.endo?this.curve._endoWnafMulAdd([this],[a]):this.curve._wnafMul(this,a)};Point$2.prototype.mulAdd=function(a,c,d){var tt=[this,c],nt=[a,d];return this.curve.endo?this.curve._endoWnafMulAdd(tt,nt):this.curve._wnafMulAdd(1,tt,nt,2)};Point$2.prototype.jmulAdd=function(a,c,d){var tt=[this,c],nt=[a,d];return this.curve.endo?this.curve._endoWnafMulAdd(tt,nt,!0):this.curve._wnafMulAdd(1,tt,nt,2,!0)};Point$2.prototype.eq=function(a){return this===a||this.inf===a.inf&&(this.inf||this.x.cmp(a.x)===0&&this.y.cmp(a.y)===0)};Point$2.prototype.neg=function(a){if(this.inf)return this;var c=this.curve.point(this.x,this.y.redNeg());if(a&&this.precomputed){var d=this.precomputed,tt=function(nt){return nt.neg()};c.precomputed={naf:d.naf&&{wnd:d.naf.wnd,points:d.naf.points.map(tt)},doubles:d.doubles&&{step:d.doubles.step,points:d.doubles.points.map(tt)}}}return c};Point$2.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var a=this.curve.jpoint(this.x,this.y,this.curve.one);return a};function JPoint(o,a,c,d){Base$2.BasePoint.call(this,o,"jacobian"),a===null&&c===null&&d===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new BN$8(0)):(this.x=new BN$8(a,16),this.y=new BN$8(c,16),this.z=new BN$8(d,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}inherits$4(JPoint,Base$2.BasePoint);ShortCurve.prototype.jpoint=function(a,c,d){return new JPoint(this,a,c,d)};JPoint.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var a=this.z.redInvm(),c=a.redSqr(),d=this.x.redMul(c),tt=this.y.redMul(c).redMul(a);return this.curve.point(d,tt)};JPoint.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)};JPoint.prototype.add=function(a){if(this.isInfinity())return a;if(a.isInfinity())return this;var c=a.z.redSqr(),d=this.z.redSqr(),tt=this.x.redMul(c),nt=a.x.redMul(d),$a=this.y.redMul(c.redMul(a.z)),Ys=a.y.redMul(d.redMul(this.z)),gu=tt.redSub(nt),xu=$a.redSub(Ys);if(gu.cmpn(0)===0)return xu.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var $u=gu.redSqr(),Iu=$u.redMul(gu),Xu=tt.redMul($u),i0=xu.redSqr().redIAdd(Iu).redISub(Xu).redISub(Xu),p0=xu.redMul(Xu.redISub(i0)).redISub($a.redMul(Iu)),w0=this.z.redMul(a.z).redMul(gu);return this.curve.jpoint(i0,p0,w0)};JPoint.prototype.mixedAdd=function(a){if(this.isInfinity())return a.toJ();if(a.isInfinity())return this;var c=this.z.redSqr(),d=this.x,tt=a.x.redMul(c),nt=this.y,$a=a.y.redMul(c).redMul(this.z),Ys=d.redSub(tt),gu=nt.redSub($a);if(Ys.cmpn(0)===0)return gu.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var xu=Ys.redSqr(),$u=xu.redMul(Ys),Iu=d.redMul(xu),Xu=gu.redSqr().redIAdd($u).redISub(Iu).redISub(Iu),i0=gu.redMul(Iu.redISub(Xu)).redISub(nt.redMul($u)),p0=this.z.redMul(Ys);return this.curve.jpoint(Xu,i0,p0)};JPoint.prototype.dblp=function(a){if(a===0)return this;if(this.isInfinity())return this;if(!a)return this.dbl();var c;if(this.curve.zeroA||this.curve.threeA){var d=this;for(c=0;c=0)return!1;if(d.redIAdd(nt),this.x.cmp(d)===0)return!0}};JPoint.prototype.inspect=function(){return this.isInfinity()?"":""};JPoint.prototype.isInfinity=function(){return this.z.cmpn(0)===0};var BN$7=bnExports,inherits$3=inherits_browserExports,Base$1=base$3,utils$l=utils$p;function MontCurve(o){Base$1.call(this,"mont",o),this.a=new BN$7(o.a,16).toRed(this.red),this.b=new BN$7(o.b,16).toRed(this.red),this.i4=new BN$7(4).toRed(this.red).redInvm(),this.two=new BN$7(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}inherits$3(MontCurve,Base$1);var mont=MontCurve;MontCurve.prototype.validate=function(a){var c=a.normalize().x,d=c.redSqr(),tt=d.redMul(c).redAdd(d.redMul(this.a)).redAdd(c),nt=tt.redSqrt();return nt.redSqr().cmp(tt)===0};function Point$1(o,a,c){Base$1.BasePoint.call(this,o,"projective"),a===null&&c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new BN$7(a,16),this.z=new BN$7(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}inherits$3(Point$1,Base$1.BasePoint);MontCurve.prototype.decodePoint=function(a,c){return this.point(utils$l.toArray(a,c),1)};MontCurve.prototype.point=function(a,c){return new Point$1(this,a,c)};MontCurve.prototype.pointFromJSON=function(a){return Point$1.fromJSON(this,a)};Point$1.prototype.precompute=function(){};Point$1.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())};Point$1.fromJSON=function(a,c){return new Point$1(a,c[0],c[1]||a.one)};Point$1.prototype.inspect=function(){return this.isInfinity()?"":""};Point$1.prototype.isInfinity=function(){return this.z.cmpn(0)===0};Point$1.prototype.dbl=function(){var a=this.x.redAdd(this.z),c=a.redSqr(),d=this.x.redSub(this.z),tt=d.redSqr(),nt=c.redSub(tt),$a=c.redMul(tt),Ys=nt.redMul(tt.redAdd(this.curve.a24.redMul(nt)));return this.curve.point($a,Ys)};Point$1.prototype.add=function(){throw new Error("Not supported on Montgomery curve")};Point$1.prototype.diffAdd=function(a,c){var d=this.x.redAdd(this.z),tt=this.x.redSub(this.z),nt=a.x.redAdd(a.z),$a=a.x.redSub(a.z),Ys=$a.redMul(d),gu=nt.redMul(tt),xu=c.z.redMul(Ys.redAdd(gu).redSqr()),$u=c.x.redMul(Ys.redISub(gu).redSqr());return this.curve.point(xu,$u)};Point$1.prototype.mul=function(a){for(var c=a.clone(),d=this,tt=this.curve.point(null,null),nt=this,$a=[];c.cmpn(0)!==0;c.iushrn(1))$a.push(c.andln(1));for(var Ys=$a.length-1;Ys>=0;Ys--)$a[Ys]===0?(d=d.diffAdd(tt,nt),tt=tt.dbl()):(tt=d.diffAdd(tt,nt),d=d.dbl());return tt};Point$1.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")};Point$1.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")};Point$1.prototype.eq=function(a){return this.getX().cmp(a.getX())===0};Point$1.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this};Point$1.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var utils$k=utils$p,BN$6=bnExports,inherits$2=inherits_browserExports,Base=base$3,assert$d=utils$k.assert;function EdwardsCurve(o){this.twisted=(o.a|0)!==1,this.mOneA=this.twisted&&(o.a|0)===-1,this.extended=this.mOneA,Base.call(this,"edwards",o),this.a=new BN$6(o.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new BN$6(o.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new BN$6(o.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),assert$d(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(o.c|0)===1}inherits$2(EdwardsCurve,Base);var edwards=EdwardsCurve;EdwardsCurve.prototype._mulA=function(a){return this.mOneA?a.redNeg():this.a.redMul(a)};EdwardsCurve.prototype._mulC=function(a){return this.oneC?a:this.c.redMul(a)};EdwardsCurve.prototype.jpoint=function(a,c,d,tt){return this.point(a,c,d,tt)};EdwardsCurve.prototype.pointFromX=function(a,c){a=new BN$6(a,16),a.red||(a=a.toRed(this.red));var d=a.redSqr(),tt=this.c2.redSub(this.a.redMul(d)),nt=this.one.redSub(this.c2.redMul(this.d).redMul(d)),$a=tt.redMul(nt.redInvm()),Ys=$a.redSqrt();if(Ys.redSqr().redSub($a).cmp(this.zero)!==0)throw new Error("invalid point");var gu=Ys.fromRed().isOdd();return(c&&!gu||!c&&gu)&&(Ys=Ys.redNeg()),this.point(a,Ys)};EdwardsCurve.prototype.pointFromY=function(a,c){a=new BN$6(a,16),a.red||(a=a.toRed(this.red));var d=a.redSqr(),tt=d.redSub(this.c2),nt=d.redMul(this.d).redMul(this.c2).redSub(this.a),$a=tt.redMul(nt.redInvm());if($a.cmp(this.zero)===0){if(c)throw new Error("invalid point");return this.point(this.zero,a)}var Ys=$a.redSqrt();if(Ys.redSqr().redSub($a).cmp(this.zero)!==0)throw new Error("invalid point");return Ys.fromRed().isOdd()!==c&&(Ys=Ys.redNeg()),this.point(Ys,a)};EdwardsCurve.prototype.validate=function(a){if(a.isInfinity())return!0;a.normalize();var c=a.x.redSqr(),d=a.y.redSqr(),tt=c.redMul(this.a).redAdd(d),nt=this.c2.redMul(this.one.redAdd(this.d.redMul(c).redMul(d)));return tt.cmp(nt)===0};function Point(o,a,c,d,tt){Base.BasePoint.call(this,o,"projective"),a===null&&c===null&&d===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new BN$6(a,16),this.y=new BN$6(c,16),this.z=d?new BN$6(d,16):this.curve.one,this.t=tt&&new BN$6(tt,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}inherits$2(Point,Base.BasePoint);EdwardsCurve.prototype.pointFromJSON=function(a){return Point.fromJSON(this,a)};EdwardsCurve.prototype.point=function(a,c,d,tt){return new Point(this,a,c,d,tt)};Point.fromJSON=function(a,c){return new Point(a,c[0],c[1],c[2])};Point.prototype.inspect=function(){return this.isInfinity()?"":""};Point.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)};Point.prototype._extDbl=function(){var a=this.x.redSqr(),c=this.y.redSqr(),d=this.z.redSqr();d=d.redIAdd(d);var tt=this.curve._mulA(a),nt=this.x.redAdd(this.y).redSqr().redISub(a).redISub(c),$a=tt.redAdd(c),Ys=$a.redSub(d),gu=tt.redSub(c),xu=nt.redMul(Ys),$u=$a.redMul(gu),Iu=nt.redMul(gu),Xu=Ys.redMul($a);return this.curve.point(xu,$u,Xu,Iu)};Point.prototype._projDbl=function(){var a=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),d=this.y.redSqr(),tt,nt,$a,Ys,gu,xu;if(this.curve.twisted){Ys=this.curve._mulA(c);var $u=Ys.redAdd(d);this.zOne?(tt=a.redSub(c).redSub(d).redMul($u.redSub(this.curve.two)),nt=$u.redMul(Ys.redSub(d)),$a=$u.redSqr().redSub($u).redSub($u)):(gu=this.z.redSqr(),xu=$u.redSub(gu).redISub(gu),tt=a.redSub(c).redISub(d).redMul(xu),nt=$u.redMul(Ys.redSub(d)),$a=$u.redMul(xu))}else Ys=c.redAdd(d),gu=this.curve._mulC(this.z).redSqr(),xu=Ys.redSub(gu).redSub(gu),tt=this.curve._mulC(a.redISub(Ys)).redMul(xu),nt=this.curve._mulC(Ys).redMul(c.redISub(d)),$a=Ys.redMul(xu);return this.curve.point(tt,nt,$a)};Point.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()};Point.prototype._extAdd=function(a){var c=this.y.redSub(this.x).redMul(a.y.redSub(a.x)),d=this.y.redAdd(this.x).redMul(a.y.redAdd(a.x)),tt=this.t.redMul(this.curve.dd).redMul(a.t),nt=this.z.redMul(a.z.redAdd(a.z)),$a=d.redSub(c),Ys=nt.redSub(tt),gu=nt.redAdd(tt),xu=d.redAdd(c),$u=$a.redMul(Ys),Iu=gu.redMul(xu),Xu=$a.redMul(xu),i0=Ys.redMul(gu);return this.curve.point($u,Iu,i0,Xu)};Point.prototype._projAdd=function(a){var c=this.z.redMul(a.z),d=c.redSqr(),tt=this.x.redMul(a.x),nt=this.y.redMul(a.y),$a=this.curve.d.redMul(tt).redMul(nt),Ys=d.redSub($a),gu=d.redAdd($a),xu=this.x.redAdd(this.y).redMul(a.x.redAdd(a.y)).redISub(tt).redISub(nt),$u=c.redMul(Ys).redMul(xu),Iu,Xu;return this.curve.twisted?(Iu=c.redMul(gu).redMul(nt.redSub(this.curve._mulA(tt))),Xu=Ys.redMul(gu)):(Iu=c.redMul(gu).redMul(nt.redSub(tt)),Xu=this.curve._mulC(Ys).redMul(gu)),this.curve.point($u,Iu,Xu)};Point.prototype.add=function(a){return this.isInfinity()?a:a.isInfinity()?this:this.curve.extended?this._extAdd(a):this._projAdd(a)};Point.prototype.mul=function(a){return this._hasDoubles(a)?this.curve._fixedNafMul(this,a):this.curve._wnafMul(this,a)};Point.prototype.mulAdd=function(a,c,d){return this.curve._wnafMulAdd(1,[this,c],[a,d],2,!1)};Point.prototype.jmulAdd=function(a,c,d){return this.curve._wnafMulAdd(1,[this,c],[a,d],2,!0)};Point.prototype.normalize=function(){if(this.zOne)return this;var a=this.z.redInvm();return this.x=this.x.redMul(a),this.y=this.y.redMul(a),this.t&&(this.t=this.t.redMul(a)),this.z=this.curve.one,this.zOne=!0,this};Point.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())};Point.prototype.getX=function(){return this.normalize(),this.x.fromRed()};Point.prototype.getY=function(){return this.normalize(),this.y.fromRed()};Point.prototype.eq=function(a){return this===a||this.getX().cmp(a.getX())===0&&this.getY().cmp(a.getY())===0};Point.prototype.eqXToP=function(a){var c=a.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(c)===0)return!0;for(var d=a.clone(),tt=this.curve.redN.redMul(this.z);;){if(d.iadd(this.curve.n),d.cmp(this.curve.p)>=0)return!1;if(c.redIAdd(tt),this.x.cmp(c)===0)return!0}};Point.prototype.toP=Point.prototype.normalize;Point.prototype.mixedAdd=Point.prototype.add;(function(o){var a=o;a.base=base$3,a.short=short,a.mont=mont,a.edwards=edwards})(curve$1);var curves$1={},hash$3={},utils$j={},assert$c=minimalisticAssert,inherits$1=inherits_browserExports;utils$j.inherits=inherits$1;function isSurrogatePair(o,a){return(o.charCodeAt(a)&64512)!==55296||a<0||a+1>=o.length?!1:(o.charCodeAt(a+1)&64512)===56320}function toArray(o,a){if(Array.isArray(o))return o.slice();if(!o)return[];var c=[];if(typeof o=="string")if(a){if(a==="hex")for(o=o.replace(/[^a-z0-9]+/ig,""),o.length%2!==0&&(o="0"+o),tt=0;tt>6|192,c[d++]=nt&63|128):isSurrogatePair(o,tt)?(nt=65536+((nt&1023)<<10)+(o.charCodeAt(++tt)&1023),c[d++]=nt>>18|240,c[d++]=nt>>12&63|128,c[d++]=nt>>6&63|128,c[d++]=nt&63|128):(c[d++]=nt>>12|224,c[d++]=nt>>6&63|128,c[d++]=nt&63|128)}else for(tt=0;tt>>24|o>>>8&65280|o<<8&16711680|(o&255)<<24;return a>>>0}utils$j.htonl=htonl;function toHex32(o,a){for(var c="",d=0;d>>0}return nt}utils$j.join32=join32;function split32(o,a){for(var c=new Array(o.length*4),d=0,tt=0;d>>24,c[tt+1]=nt>>>16&255,c[tt+2]=nt>>>8&255,c[tt+3]=nt&255):(c[tt+3]=nt>>>24,c[tt+2]=nt>>>16&255,c[tt+1]=nt>>>8&255,c[tt]=nt&255)}return c}utils$j.split32=split32;function rotr32$1(o,a){return o>>>a|o<<32-a}utils$j.rotr32=rotr32$1;function rotl32$2(o,a){return o<>>32-a}utils$j.rotl32=rotl32$2;function sum32$3(o,a){return o+a>>>0}utils$j.sum32=sum32$3;function sum32_3$1(o,a,c){return o+a+c>>>0}utils$j.sum32_3=sum32_3$1;function sum32_4$2(o,a,c,d){return o+a+c+d>>>0}utils$j.sum32_4=sum32_4$2;function sum32_5$2(o,a,c,d,tt){return o+a+c+d+tt>>>0}utils$j.sum32_5=sum32_5$2;function sum64$1(o,a,c,d){var tt=o[a],nt=o[a+1],$a=d+nt>>>0,Ys=($a>>0,o[a+1]=$a}utils$j.sum64=sum64$1;function sum64_hi$1(o,a,c,d){var tt=a+d>>>0,nt=(tt>>0}utils$j.sum64_hi=sum64_hi$1;function sum64_lo$1(o,a,c,d){var tt=a+d;return tt>>>0}utils$j.sum64_lo=sum64_lo$1;function sum64_4_hi$1(o,a,c,d,tt,nt,$a,Ys){var gu=0,xu=a;xu=xu+d>>>0,gu+=xu>>0,gu+=xu>>0,gu+=xu>>0}utils$j.sum64_4_hi=sum64_4_hi$1;function sum64_4_lo$1(o,a,c,d,tt,nt,$a,Ys){var gu=a+d+nt+Ys;return gu>>>0}utils$j.sum64_4_lo=sum64_4_lo$1;function sum64_5_hi$1(o,a,c,d,tt,nt,$a,Ys,gu,xu){var $u=0,Iu=a;Iu=Iu+d>>>0,$u+=Iu>>0,$u+=Iu>>0,$u+=Iu>>0,$u+=Iu>>0}utils$j.sum64_5_hi=sum64_5_hi$1;function sum64_5_lo$1(o,a,c,d,tt,nt,$a,Ys,gu,xu){var $u=a+d+nt+Ys+xu;return $u>>>0}utils$j.sum64_5_lo=sum64_5_lo$1;function rotr64_hi$1(o,a,c){var d=a<<32-c|o>>>c;return d>>>0}utils$j.rotr64_hi=rotr64_hi$1;function rotr64_lo$1(o,a,c){var d=o<<32-c|a>>>c;return d>>>0}utils$j.rotr64_lo=rotr64_lo$1;function shr64_hi$1(o,a,c){return o>>>c}utils$j.shr64_hi=shr64_hi$1;function shr64_lo$1(o,a,c){var d=o<<32-c|a>>>c;return d>>>0}utils$j.shr64_lo=shr64_lo$1;var common$6={},utils$i=utils$j,assert$b=minimalisticAssert;function BlockHash$4(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}common$6.BlockHash=BlockHash$4;BlockHash$4.prototype.update=function(a,c){if(a=utils$i.toArray(a,c),this.pending?this.pending=this.pending.concat(a):this.pending=a,this.pendingTotal+=a.length,this.pending.length>=this._delta8){a=this.pending;var d=a.length%this._delta8;this.pending=a.slice(a.length-d,a.length),this.pending.length===0&&(this.pending=null),a=utils$i.join32(a,0,a.length-d,this.endian);for(var tt=0;tt>>24&255,tt[nt++]=a>>>16&255,tt[nt++]=a>>>8&255,tt[nt++]=a&255}else for(tt[nt++]=a&255,tt[nt++]=a>>>8&255,tt[nt++]=a>>>16&255,tt[nt++]=a>>>24&255,tt[nt++]=0,tt[nt++]=0,tt[nt++]=0,tt[nt++]=0,$a=8;$a>>3}common$5.g0_256=g0_256$1;function g1_256$1(o){return rotr32(o,17)^rotr32(o,19)^o>>>10}common$5.g1_256=g1_256$1;var utils$g=utils$j,common$4=common$6,shaCommon$1=common$5,rotl32$1=utils$g.rotl32,sum32$2=utils$g.sum32,sum32_5$1=utils$g.sum32_5,ft_1=shaCommon$1.ft_1,BlockHash$3=common$4.BlockHash,sha1_K=[1518500249,1859775393,2400959708,3395469782];function SHA1(){if(!(this instanceof SHA1))return new SHA1;BlockHash$3.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}utils$g.inherits(SHA1,BlockHash$3);var _1=SHA1;SHA1.blockSize=512;SHA1.outSize=160;SHA1.hmacStrength=80;SHA1.padLength=64;SHA1.prototype._update=function(a,c){for(var d=this.W,tt=0;tt<16;tt++)d[tt]=a[c+tt];for(;ttthis.blockSize&&(a=new this.Hash().update(a).digest()),assert$8(a.length<=this.blockSize);for(var c=a.length;c=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(a,c,d)}var hmacDrbg=HmacDRBG;HmacDRBG.prototype._init=function(a,c,d){var tt=a.concat(c).concat(d);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var nt=0;nt=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(a.concat(d||[])),this._reseed=1};HmacDRBG.prototype.generate=function(a,c,d,tt){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof c!="string"&&(tt=d,d=c,c=null),d&&(d=utils$9.toArray(d,tt||"hex"),this._update(d));for(var nt=[];nt.length"};var BN$4=bnExports,utils$7=utils$p,assert$5=utils$7.assert;function Signature$3(o,a){if(o instanceof Signature$3)return o;this._importDER(o,a)||(assert$5(o.r&&o.s,"Signature without r or s"),this.r=new BN$4(o.r,16),this.s=new BN$4(o.s,16),o.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=o.recoveryParam)}var signature$1=Signature$3;function Position(){this.place=0}function getLength(o,a){var c=o[a.place++];if(!(c&128))return c;var d=c&15;if(d===0||d>4)return!1;for(var tt=0,nt=0,$a=a.place;nt>>=0;return tt<=127?!1:(a.place=$a,tt)}function rmPadding(o){for(var a=0,c=o.length-1;!o[a]&&!(o[a+1]&128)&&a>>3);for(o.push(c|128);--c;)o.push(a>>>(c<<3)&255);o.push(a)}Signature$3.prototype.toDER=function(a){var c=this.r.toArray(),d=this.s.toArray();for(c[0]&128&&(c=[0].concat(c)),d[0]&128&&(d=[0].concat(d)),c=rmPadding(c),d=rmPadding(d);!d[0]&&!(d[1]&128);)d=d.slice(1);var tt=[2];constructLength(tt,c.length),tt=tt.concat(c),tt.push(2),constructLength(tt,d.length);var nt=tt.concat(d),$a=[48];return constructLength($a,nt.length),$a=$a.concat(nt),utils$7.encode($a,a)};var ec,hasRequiredEc;function requireEc(){if(hasRequiredEc)return ec;hasRequiredEc=1;var o=bnExports,a=hmacDrbg,c=utils$p,d=curves$1,tt=requireBrorand(),nt=c.assert,$a=key$2,Ys=signature$1;function gu(xu){if(!(this instanceof gu))return new gu(xu);typeof xu=="string"&&(nt(Object.prototype.hasOwnProperty.call(d,xu),"Unknown curve "+xu),xu=d[xu]),xu instanceof d.PresetCurve&&(xu={curve:xu}),this.curve=xu.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=xu.curve.g,this.g.precompute(xu.curve.n.bitLength()+1),this.hash=xu.hash||xu.curve.hash}return ec=gu,gu.prototype.keyPair=function($u){return new $a(this,$u)},gu.prototype.keyFromPrivate=function($u,Iu){return $a.fromPrivate(this,$u,Iu)},gu.prototype.keyFromPublic=function($u,Iu){return $a.fromPublic(this,$u,Iu)},gu.prototype.genKeyPair=function($u){$u||($u={});for(var Iu=new a({hash:this.hash,pers:$u.pers,persEnc:$u.persEnc||"utf8",entropy:$u.entropy||tt(this.hash.hmacStrength),entropyEnc:$u.entropy&&$u.entropyEnc||"utf8",nonce:this.n.toArray()}),Xu=this.n.byteLength(),i0=this.n.sub(new o(2));;){var p0=new o(Iu.generate(Xu));if(!(p0.cmp(i0)>0))return p0.iaddn(1),this.keyFromPrivate(p0)}},gu.prototype._truncateToN=function($u,Iu){var Xu=$u.byteLength()*8-this.n.bitLength();return Xu>0&&($u=$u.ushrn(Xu)),!Iu&&$u.cmp(this.n)>=0?$u.sub(this.n):$u},gu.prototype.sign=function($u,Iu,Xu,i0){typeof Xu=="object"&&(i0=Xu,Xu=null),i0||(i0={}),Iu=this.keyFromPrivate(Iu,Xu),$u=this._truncateToN(new o($u,16));for(var p0=this.n.byteLength(),w0=Iu.getPrivate().toArray("be",p0),A0=$u.toArray("be",p0),$0=new a({hash:this.hash,entropy:w0,nonce:A0,pers:i0.pers,persEnc:i0.persEnc||"utf8"}),O0=this.n.sub(new o(1)),L0=0;;L0++){var q0=i0.k?i0.k(L0):new o($0.generate(this.n.byteLength()));if(q0=this._truncateToN(q0,!0),!(q0.cmpn(1)<=0||q0.cmp(O0)>=0)){var F0=this.g.mul(q0);if(!F0.isInfinity()){var u1=F0.getX(),g1=u1.umod(this.n);if(g1.cmpn(0)!==0){var E1=q0.invm(this.n).mul(g1.mul(Iu.getPrivate()).iadd($u));if(E1=E1.umod(this.n),E1.cmpn(0)!==0){var B1=(F0.getY().isOdd()?1:0)|(u1.cmp(g1)!==0?2:0);return i0.canonical&&E1.cmp(this.nh)>0&&(E1=this.n.sub(E1),B1^=1),new Ys({r:g1,s:E1,recoveryParam:B1})}}}}}},gu.prototype.verify=function($u,Iu,Xu,i0){$u=this._truncateToN(new o($u,16)),Xu=this.keyFromPublic(Xu,i0),Iu=new Ys(Iu,"hex");var p0=Iu.r,w0=Iu.s;if(p0.cmpn(1)<0||p0.cmp(this.n)>=0||w0.cmpn(1)<0||w0.cmp(this.n)>=0)return!1;var A0=w0.invm(this.n),$0=A0.mul($u).umod(this.n),O0=A0.mul(p0).umod(this.n),L0;return this.curve._maxwellTrick?(L0=this.g.jmulAdd($0,Xu.getPublic(),O0),L0.isInfinity()?!1:L0.eqXToP(p0)):(L0=this.g.mulAdd($0,Xu.getPublic(),O0),L0.isInfinity()?!1:L0.getX().umod(this.n).cmp(p0)===0)},gu.prototype.recoverPubKey=function(xu,$u,Iu,Xu){nt((3&Iu)===Iu,"The recovery param is more than two bits"),$u=new Ys($u,Xu);var i0=this.n,p0=new o(xu),w0=$u.r,A0=$u.s,$0=Iu&1,O0=Iu>>1;if(w0.cmp(this.curve.p.umod(this.curve.n))>=0&&O0)throw new Error("Unable to find sencond key candinate");O0?w0=this.curve.pointFromX(w0.add(this.curve.n),$0):w0=this.curve.pointFromX(w0,$0);var L0=$u.r.invm(i0),q0=i0.sub(p0).mul(L0).umod(i0),F0=A0.mul(L0).umod(i0);return this.g.mulAdd(q0,w0,F0)},gu.prototype.getKeyRecoveryParam=function(xu,$u,Iu,Xu){if($u=new Ys($u,Xu),$u.recoveryParam!==null)return $u.recoveryParam;for(var i0=0;i0<4;i0++){var p0;try{p0=this.recoverPubKey(xu,$u,i0)}catch{continue}if(p0.eq(Iu))return i0}throw new Error("Unable to find valid recovery factor")},ec}var utils$6=utils$p,assert$4=utils$6.assert,parseBytes$2=utils$6.parseBytes,cachedProperty$1=utils$6.cachedProperty;function KeyPair$1(o,a){this.eddsa=o,this._secret=parseBytes$2(a.secret),o.isPoint(a.pub)?this._pub=a.pub:this._pubBytes=parseBytes$2(a.pub)}KeyPair$1.fromPublic=function(a,c){return c instanceof KeyPair$1?c:new KeyPair$1(a,{pub:c})};KeyPair$1.fromSecret=function(a,c){return c instanceof KeyPair$1?c:new KeyPair$1(a,{secret:c})};KeyPair$1.prototype.secret=function(){return this._secret};cachedProperty$1(KeyPair$1,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())});cachedProperty$1(KeyPair$1,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())});cachedProperty$1(KeyPair$1,"privBytes",function(){var a=this.eddsa,c=this.hash(),d=a.encodingLength-1,tt=c.slice(0,a.encodingLength);return tt[0]&=248,tt[d]&=127,tt[d]|=64,tt});cachedProperty$1(KeyPair$1,"priv",function(){return this.eddsa.decodeInt(this.privBytes())});cachedProperty$1(KeyPair$1,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()});cachedProperty$1(KeyPair$1,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)});KeyPair$1.prototype.sign=function(a){return assert$4(this._secret,"KeyPair can only verify"),this.eddsa.sign(a,this)};KeyPair$1.prototype.verify=function(a,c){return this.eddsa.verify(a,c,this)};KeyPair$1.prototype.getSecret=function(a){return assert$4(this._secret,"KeyPair is public only"),utils$6.encode(this.secret(),a)};KeyPair$1.prototype.getPublic=function(a){return utils$6.encode(this.pubBytes(),a)};var key$1=KeyPair$1,BN$3=bnExports,utils$5=utils$p,assert$3=utils$5.assert,cachedProperty=utils$5.cachedProperty,parseBytes$1=utils$5.parseBytes;function Signature$2(o,a){this.eddsa=o,typeof a!="object"&&(a=parseBytes$1(a)),Array.isArray(a)&&(a={R:a.slice(0,o.encodingLength),S:a.slice(o.encodingLength)}),assert$3(a.R&&a.S,"Signature without R or S"),o.isPoint(a.R)&&(this._R=a.R),a.S instanceof BN$3&&(this._S=a.S),this._Rencoded=Array.isArray(a.R)?a.R:a.Rencoded,this._Sencoded=Array.isArray(a.S)?a.S:a.Sencoded}cachedProperty(Signature$2,"S",function(){return this.eddsa.decodeInt(this.Sencoded())});cachedProperty(Signature$2,"R",function(){return this.eddsa.decodePoint(this.Rencoded())});cachedProperty(Signature$2,"Rencoded",function(){return this.eddsa.encodePoint(this.R())});cachedProperty(Signature$2,"Sencoded",function(){return this.eddsa.encodeInt(this.S())});Signature$2.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())};Signature$2.prototype.toHex=function(){return utils$5.encode(this.toBytes(),"hex").toUpperCase()};var signature=Signature$2,hash$1=hash$3,curves=curves$1,utils$4=utils$p,assert$2=utils$4.assert,parseBytes=utils$4.parseBytes,KeyPair=key$1,Signature$1=signature;function EDDSA(o){if(assert$2(o==="ed25519","only tested with ed25519 so far"),!(this instanceof EDDSA))return new EDDSA(o);o=curves[o].curve,this.curve=o,this.g=o.g,this.g.precompute(o.n.bitLength()+1),this.pointClass=o.point().constructor,this.encodingLength=Math.ceil(o.n.bitLength()/8),this.hash=hash$1.sha512}var eddsa=EDDSA;EDDSA.prototype.sign=function(a,c){a=parseBytes(a);var d=this.keyFromSecret(c),tt=this.hashInt(d.messagePrefix(),a),nt=this.g.mul(tt),$a=this.encodePoint(nt),Ys=this.hashInt($a,d.pubBytes(),a).mul(d.priv()),gu=tt.add(Ys).umod(this.curve.n);return this.makeSignature({R:nt,S:gu,Rencoded:$a})};EDDSA.prototype.verify=function(a,c,d){a=parseBytes(a),c=this.makeSignature(c);var tt=this.keyFromPublic(d),nt=this.hashInt(c.Rencoded(),tt.pubBytes(),a),$a=this.g.mul(c.S()),Ys=c.R().add(tt.pub().mul(nt));return Ys.eq($a)};EDDSA.prototype.hashInt=function(){for(var a=this.hash(),c=0;c"u"}o.isPrimitive=D0,o.isBuffer=isBufferBrowser;function Z0(R1){return Object.prototype.toString.call(R1)}function f1(R1){return R1<10?"0"+R1.toString(10):R1.toString(10)}var w1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function m1(){var R1=new Date,O1=[f1(R1.getHours()),f1(R1.getMinutes()),f1(R1.getSeconds())].join(":");return[R1.getDate(),w1[R1.getMonth()],O1].join(" ")}o.log=function(){console.log("%s - %s",m1(),o.format.apply(o,arguments))},o.inherits=inherits_browserExports,o._extend=function(R1,O1){if(!O1||!lv(O1))return R1;for(var Q1=Object.keys(O1),rv=Q1.length;rv--;)R1[Q1[rv]]=O1[Q1[rv]];return R1};function c1(R1,O1){return Object.prototype.hasOwnProperty.call(R1,O1)}var G0=typeof Symbol<"u"?Symbol("util.promisify.custom"):void 0;o.promisify=function(O1){if(typeof O1!="function")throw new TypeError('The "original" argument must be of type Function');if(G0&&O1[G0]){var Q1=O1[G0];if(typeof Q1!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(Q1,G0,{value:Q1,enumerable:!1,writable:!1,configurable:!0}),Q1}function Q1(){for(var rv,D1,ev=new Promise(function(fv,cv){rv=fv,D1=cv}),Mv=[],Zv=0;Zv0?this.tail.next=$0:this.head=$0,this.tail=$0,++this.length}},{key:"unshift",value:function(A0){var $0={data:A0,next:this.head};this.length===0&&(this.tail=$0),this.head=$0,++this.length}},{key:"shift",value:function(){if(this.length!==0){var A0=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,A0}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(A0){if(this.length===0)return"";for(var $0=this.head,O0=""+$0.data;$0=$0.next;)O0+=A0+$0.data;return O0}},{key:"concat",value:function(A0){if(this.length===0)return Su.alloc(0);for(var $0=Su.allocUnsafe(A0>>>0),O0=this.head,L0=0;O0;)r0(O0.data,$0,L0),L0+=O0.data.length,O0=O0.next;return $0}},{key:"consume",value:function(A0,$0){var O0;return A0V0.length?V0.length:A0;if(F0===V0.length?L0+=V0:L0+=V0.slice(0,A0),A0-=F0,A0===0){F0===V0.length?(++O0,$0.next?this.head=$0.next:this.head=this.tail=null):(this.head=$0,$0.data=V0.slice(F0));break}++O0}return this.length-=O0,L0}},{key:"_getBuffer",value:function(A0){var $0=Su.allocUnsafe(A0),O0=this.head,L0=1;for(O0.data.copy($0),A0-=O0.data.length;O0=O0.next;){var V0=O0.data,F0=A0>V0.length?V0.length:A0;if(V0.copy($0,$0.length-A0,0,F0),A0-=F0,A0===0){F0===V0.length?(++L0,O0.next?this.head=O0.next:this.head=this.tail=null):(this.head=O0,O0.data=V0.slice(F0));break}++L0}return this.length-=L0,$0}},{key:Xu,value:function(A0,$0){return Iu(this,a(a({},$0),{},{depth:0,customInspect:!1}))}}]),p0}(),buffer_list}var destroy_1$1,hasRequiredDestroy;function requireDestroy(){if(hasRequiredDestroy)return destroy_1$1;hasRequiredDestroy=1;function o($a,Ws){var gu=this,Su=this._readableState&&this._readableState.destroyed,$u=this._writableState&&this._writableState.destroyed;return Su||$u?(Ws?Ws($a):$a&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process$1$4.nextTick(tt,this,$a)):process$1$4.nextTick(tt,this,$a)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy($a||null,function(Iu){!Ws&&Iu?gu._writableState?gu._writableState.errorEmitted?process$1$4.nextTick(c,gu):(gu._writableState.errorEmitted=!0,process$1$4.nextTick(a,gu,Iu)):process$1$4.nextTick(a,gu,Iu):Ws?(process$1$4.nextTick(c,gu),Ws(Iu)):process$1$4.nextTick(c,gu)}),this)}function a($a,Ws){tt($a,Ws),c($a)}function c($a){$a._writableState&&!$a._writableState.emitClose||$a._readableState&&!$a._readableState.emitClose||$a.emit("close")}function d(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function tt($a,Ws){$a.emit("error",Ws)}function nt($a,Ws){var gu=$a._readableState,Su=$a._writableState;gu&&gu.autoDestroy||Su&&Su.autoDestroy?$a.destroy(Ws):$a.emit("error",Ws)}return destroy_1$1={destroy:o,undestroy:d,errorOrDestroy:nt},destroy_1$1}var errorsBrowser={},hasRequiredErrorsBrowser;function requireErrorsBrowser(){if(hasRequiredErrorsBrowser)return errorsBrowser;hasRequiredErrorsBrowser=1;function o(Ws,gu){Ws.prototype=Object.create(gu.prototype),Ws.prototype.constructor=Ws,Ws.__proto__=gu}var a={};function c(Ws,gu,Su){Su||(Su=Error);function $u(Xu,r0,p0){return typeof gu=="string"?gu:gu(Xu,r0,p0)}var Iu=function(Xu){o(r0,Xu);function r0(p0,y0,A0){return Xu.call(this,$u(p0,y0,A0))||this}return r0}(Su);Iu.prototype.name=Su.name,Iu.prototype.code=Ws,a[Ws]=Iu}function d(Ws,gu){if(Array.isArray(Ws)){var Su=Ws.length;return Ws=Ws.map(function($u){return String($u)}),Su>2?"one of ".concat(gu," ").concat(Ws.slice(0,Su-1).join(", "),", or ")+Ws[Su-1]:Su===2?"one of ".concat(gu," ").concat(Ws[0]," or ").concat(Ws[1]):"of ".concat(gu," ").concat(Ws[0])}else return"of ".concat(gu," ").concat(String(Ws))}function tt(Ws,gu,Su){return Ws.substr(0,gu.length)===gu}function nt(Ws,gu,Su){return(Su===void 0||Su>Ws.length)&&(Su=Ws.length),Ws.substring(Su-gu.length,Su)===gu}function $a(Ws,gu,Su){return typeof Su!="number"&&(Su=0),Su+gu.length>Ws.length?!1:Ws.indexOf(gu,Su)!==-1}return c("ERR_INVALID_OPT_VALUE",function(Ws,gu){return'The value "'+gu+'" is invalid for option "'+Ws+'"'},TypeError),c("ERR_INVALID_ARG_TYPE",function(Ws,gu,Su){var $u;typeof gu=="string"&&tt(gu,"not ")?($u="must not be",gu=gu.replace(/^not /,"")):$u="must be";var Iu;if(nt(Ws," argument"))Iu="The ".concat(Ws," ").concat($u," ").concat(d(gu,"type"));else{var Xu=$a(Ws,".")?"property":"argument";Iu='The "'.concat(Ws,'" ').concat(Xu," ").concat($u," ").concat(d(gu,"type"))}return Iu+=". Received type ".concat(typeof Su),Iu},TypeError),c("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),c("ERR_METHOD_NOT_IMPLEMENTED",function(Ws){return"The "+Ws+" method is not implemented"}),c("ERR_STREAM_PREMATURE_CLOSE","Premature close"),c("ERR_STREAM_DESTROYED",function(Ws){return"Cannot call "+Ws+" after a stream was destroyed"}),c("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),c("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),c("ERR_STREAM_WRITE_AFTER_END","write after end"),c("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),c("ERR_UNKNOWN_ENCODING",function(Ws){return"Unknown encoding: "+Ws},TypeError),c("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),errorsBrowser.codes=a,errorsBrowser}var state,hasRequiredState;function requireState(){if(hasRequiredState)return state;hasRequiredState=1;var o=requireErrorsBrowser().codes.ERR_INVALID_OPT_VALUE;function a(d,tt,nt){return d.highWaterMark!=null?d.highWaterMark:tt?d[nt]:null}function c(d,tt,nt,$a){var Ws=a(tt,$a,nt);if(Ws!=null){if(!(isFinite(Ws)&&Math.floor(Ws)===Ws)||Ws<0){var gu=$a?nt:"highWaterMark";throw new o(gu,Ws)}return Math.floor(Ws)}return d.objectMode?16:16*1024}return state={getHighWaterMark:c},state}var browser$c=deprecate;function deprecate(o,a){if(config$1("noDeprecation"))return o;var c=!1;function d(){if(!c){if(config$1("throwDeprecation"))throw new Error(a);config$1("traceDeprecation")?console.trace(a):console.warn(a),c=!0}return o.apply(this,arguments)}return d}function config$1(o){try{if(!commonjsGlobal$4.localStorage)return!1}catch{return!1}var a=commonjsGlobal$4.localStorage[o];return a==null?!1:String(a).toLowerCase()==="true"}var _stream_writable$1,hasRequired_stream_writable$1;function require_stream_writable$1(){if(hasRequired_stream_writable$1)return _stream_writable$1;hasRequired_stream_writable$1=1,_stream_writable$1=E1;function o(rv){var D1=this;this.next=null,this.entry=null,this.finish=function(){Q1(D1,rv)}}var a;E1.WritableState=u1;var c={deprecate:browser$c},d=requireStreamBrowser(),tt=require$$1$4.Buffer,nt=(typeof commonjsGlobal$4<"u"?commonjsGlobal$4:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function $a(rv){return tt.from(rv)}function Ws(rv){return tt.isBuffer(rv)||rv instanceof nt}var gu=requireDestroy(),Su=requireState(),$u=Su.getHighWaterMark,Iu=requireErrorsBrowser().codes,Xu=Iu.ERR_INVALID_ARG_TYPE,r0=Iu.ERR_METHOD_NOT_IMPLEMENTED,p0=Iu.ERR_MULTIPLE_CALLBACK,y0=Iu.ERR_STREAM_CANNOT_PIPE,A0=Iu.ERR_STREAM_DESTROYED,$0=Iu.ERR_STREAM_NULL_VALUES,O0=Iu.ERR_STREAM_WRITE_AFTER_END,L0=Iu.ERR_UNKNOWN_ENCODING,V0=gu.errorOrDestroy;inherits_browserExports(E1,d);function F0(){}function u1(rv,D1,ev){a=a||require_stream_duplex$1(),rv=rv||{},typeof ev!="boolean"&&(ev=D1 instanceof a),this.objectMode=!!rv.objectMode,ev&&(this.objectMode=this.objectMode||!!rv.writableObjectMode),this.highWaterMark=$u(this,rv,"writableHighWaterMark",ev),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var Mv=rv.decodeStrings===!1;this.decodeStrings=!Mv,this.defaultEncoding=rv.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(Zv){f1(D1,Zv)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=rv.emitClose!==!1,this.autoDestroy=!!rv.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}u1.prototype.getBuffer=function(){for(var D1=this.bufferedRequest,ev=[];D1;)ev.push(D1),D1=D1.next;return ev},function(){try{Object.defineProperty(u1.prototype,"buffer",{get:c.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var g1;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(g1=Function.prototype[Symbol.hasInstance],Object.defineProperty(E1,Symbol.hasInstance,{value:function(D1){return g1.call(this,D1)?!0:this!==E1?!1:D1&&D1._writableState instanceof u1}})):g1=function(D1){return D1 instanceof this};function E1(rv){a=a||require_stream_duplex$1();var D1=this instanceof a;if(!D1&&!g1.call(E1,this))return new E1(rv);this._writableState=new u1(rv,this,D1),this.writable=!0,rv&&(typeof rv.write=="function"&&(this._write=rv.write),typeof rv.writev=="function"&&(this._writev=rv.writev),typeof rv.destroy=="function"&&(this._destroy=rv.destroy),typeof rv.final=="function"&&(this._final=rv.final)),d.call(this)}E1.prototype.pipe=function(){V0(this,new y0)};function B1(rv,D1){var ev=new O0;V0(rv,ev),process$1$4.nextTick(D1,ev)}function lv(rv,D1,ev,Mv){var Zv;return ev===null?Zv=new $0:typeof ev!="string"&&!D1.objectMode&&(Zv=new Xu("chunk",["string","Buffer"],ev)),Zv?(V0(rv,Zv),process$1$4.nextTick(Mv,Zv),!1):!0}E1.prototype.write=function(rv,D1,ev){var Mv=this._writableState,Zv=!1,fv=!Mv.objectMode&&Ws(rv);return fv&&!tt.isBuffer(rv)&&(rv=$a(rv)),typeof D1=="function"&&(ev=D1,D1=null),fv?D1="buffer":D1||(D1=Mv.defaultEncoding),typeof ev!="function"&&(ev=F0),Mv.ending?B1(this,ev):(fv||lv(this,Mv,rv,ev))&&(Mv.pendingcb++,Zv=r1(this,Mv,fv,rv,D1,ev)),Zv},E1.prototype.cork=function(){this._writableState.corked++},E1.prototype.uncork=function(){var rv=this._writableState;rv.corked&&(rv.corked--,!rv.writing&&!rv.corked&&!rv.bufferProcessing&&rv.bufferedRequest&&c1(this,rv))},E1.prototype.setDefaultEncoding=function(D1){if(typeof D1=="string"&&(D1=D1.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((D1+"").toLowerCase())>-1))throw new L0(D1);return this._writableState.defaultEncoding=D1,this},Object.defineProperty(E1.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function j1(rv,D1,ev){return!rv.objectMode&&rv.decodeStrings!==!1&&typeof D1=="string"&&(D1=tt.from(D1,ev)),D1}Object.defineProperty(E1.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function r1(rv,D1,ev,Mv,Zv,fv){if(!ev){var cv=j1(D1,Mv,Zv);Mv!==cv&&(ev=!0,Zv="buffer",Mv=cv)}var ly=D1.objectMode?1:Mv.length;D1.length+=ly;var Cy=D1.length>5===6?2:o>>4===14?3:o>>3===30?4:o>>6===2?-1:-2}function utf8CheckIncomplete(o,a,c){var d=a.length-1;if(d=0?(tt>0&&(o.lastNeed=tt-1),tt):--d=0?(tt>0&&(o.lastNeed=tt-2),tt):--d=0?(tt>0&&(tt===2?tt=0:o.lastNeed=tt-3),tt):0))}function utf8CheckExtraBytes(o,a,c){if((a[0]&192)!==128)return o.lastNeed=0,"�";if(o.lastNeed>1&&a.length>1){if((a[1]&192)!==128)return o.lastNeed=1,"�";if(o.lastNeed>2&&a.length>2&&(a[2]&192)!==128)return o.lastNeed=2,"�"}}function utf8FillLast(o){var a=this.lastTotal-this.lastNeed,c=utf8CheckExtraBytes(this,o);if(c!==void 0)return c;if(this.lastNeed<=o.length)return o.copy(this.lastChar,a,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);o.copy(this.lastChar,a,0,o.length),this.lastNeed-=o.length}function utf8Text(o,a){var c=utf8CheckIncomplete(this,o,a);if(!this.lastNeed)return o.toString("utf8",a);this.lastTotal=c;var d=o.length-(c-this.lastNeed);return o.copy(this.lastChar,0,d),o.toString("utf8",a,d)}function utf8End(o){var a=o&&o.length?this.write(o):"";return this.lastNeed?a+"�":a}function utf16Text(o,a){if((o.length-a)%2===0){var c=o.toString("utf16le",a);if(c){var d=c.charCodeAt(c.length-1);if(d>=55296&&d<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=o[o.length-2],this.lastChar[1]=o[o.length-1],c.slice(0,-1)}return c}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=o[o.length-1],o.toString("utf16le",a,o.length-1)}function utf16End(o){var a=o&&o.length?this.write(o):"";if(this.lastNeed){var c=this.lastTotal-this.lastNeed;return a+this.lastChar.toString("utf16le",0,c)}return a}function base64Text(o,a){var c=(o.length-a)%3;return c===0?o.toString("base64",a):(this.lastNeed=3-c,this.lastTotal=3,c===1?this.lastChar[0]=o[o.length-1]:(this.lastChar[0]=o[o.length-2],this.lastChar[1]=o[o.length-1]),o.toString("base64",a,o.length-c))}function base64End(o){var a=o&&o.length?this.write(o):"";return this.lastNeed?a+this.lastChar.toString("base64",0,3-this.lastNeed):a}function simpleWrite(o){return o.toString(this.encoding)}function simpleEnd(o){return o&&o.length?this.write(o):""}var endOfStream,hasRequiredEndOfStream;function requireEndOfStream(){if(hasRequiredEndOfStream)return endOfStream;hasRequiredEndOfStream=1;var o=requireErrorsBrowser().codes.ERR_STREAM_PREMATURE_CLOSE;function a(nt){var $a=!1;return function(){if(!$a){$a=!0;for(var Ws=arguments.length,gu=new Array(Ws),Su=0;Su0)if(typeof cv!="string"&&!Hy.objectMode&&Object.getPrototypeOf(cv)!==d.prototype&&(cv=nt(cv)),Cy)Hy.endEmitted?F0(fv,new $0):j1(fv,Hy,cv,!0);else if(Hy.ended)F0(fv,new y0);else{if(Hy.destroyed)return!1;Hy.reading=!1,Hy.decoder&&!ly?(cv=Hy.decoder.write(cv),Hy.objectMode||cv.length!==0?j1(fv,Hy,cv,!1):c1(fv,Hy)):j1(fv,Hy,cv,!1)}else Cy||(Hy.reading=!1,c1(fv,Hy))}return!Hy.ended&&(Hy.length=t1?fv=t1:(fv--,fv|=fv>>>1,fv|=fv>>>2,fv|=fv>>>4,fv|=fv>>>8,fv|=fv>>>16,fv++),fv}function Z0(fv,cv){return fv<=0||cv.length===0&&cv.ended?0:cv.objectMode?1:fv!==fv?cv.flowing&&cv.length?cv.buffer.head.data.length:cv.length:(fv>cv.highWaterMark&&(cv.highWaterMark=D0(fv)),fv<=cv.length?fv:cv.ended?cv.length:(cv.needReadable=!0,0))}B1.prototype.read=function(fv){gu("read",fv),fv=parseInt(fv,10);var cv=this._readableState,ly=fv;if(fv!==0&&(cv.emittedReadable=!1),fv===0&&cv.needReadable&&((cv.highWaterMark!==0?cv.length>=cv.highWaterMark:cv.length>0)||cv.ended))return gu("read: emitReadable",cv.length,cv.ended),cv.length===0&&cv.ended?ev(this):w1(this),null;if(fv=Z0(fv,cv),fv===0&&cv.ended)return cv.length===0&&ev(this),null;var Cy=cv.needReadable;gu("need readable",Cy),(cv.length===0||cv.length-fv0?Ly=D1(fv,cv):Ly=null,Ly===null?(cv.needReadable=cv.length<=cv.highWaterMark,fv=0):(cv.length-=fv,cv.awaitDrain=0),cv.length===0&&(cv.ended||(cv.needReadable=!0),ly!==fv&&cv.ended&&ev(this)),Ly!==null&&this.emit("data",Ly),Ly};function f1(fv,cv){if(gu("onEofChunk"),!cv.ended){if(cv.decoder){var ly=cv.decoder.end();ly&&ly.length&&(cv.buffer.push(ly),cv.length+=cv.objectMode?1:ly.length)}cv.ended=!0,cv.sync?w1(fv):(cv.needReadable=!1,cv.emittedReadable||(cv.emittedReadable=!0,m1(fv)))}}function w1(fv){var cv=fv._readableState;gu("emitReadable",cv.needReadable,cv.emittedReadable),cv.needReadable=!1,cv.emittedReadable||(gu("emitReadable",cv.flowing),cv.emittedReadable=!0,process$1$4.nextTick(m1,fv))}function m1(fv){var cv=fv._readableState;gu("emitReadable_",cv.destroyed,cv.length,cv.ended),!cv.destroyed&&(cv.length||cv.ended)&&(fv.emit("readable"),cv.emittedReadable=!1),cv.needReadable=!cv.flowing&&!cv.ended&&cv.length<=cv.highWaterMark,rv(fv)}function c1(fv,cv){cv.readingMore||(cv.readingMore=!0,process$1$4.nextTick(G0,fv,cv))}function G0(fv,cv){for(;!cv.reading&&!cv.ended&&(cv.length1&&Zv(Cy.pipes,fv)!==-1)&&!jw&&(gu("false write response, pause",Cy.awaitDrain),Cy.awaitDrain++),ly.pause())}function Hw(Lw){gu("onerror",Lw),lw(),fv.removeListener("error",Hw),a(fv,"error")===0&&F0(fv,Lw)}g1(fv,"error",Hw);function uw(){fv.removeListener("finish",Nw),lw()}fv.once("close",uw);function Nw(){gu("onfinish"),fv.removeListener("close",uw),lw()}fv.once("finish",Nw);function lw(){gu("unpipe"),ly.unpipe(fv)}return fv.emit("pipe",ly),Cy.flowing||(gu("pipe resume"),ly.resume()),fv};function o1(fv){return function(){var ly=fv._readableState;gu("pipeOnDrain",ly.awaitDrain),ly.awaitDrain&&ly.awaitDrain--,ly.awaitDrain===0&&a(fv,"data")&&(ly.flowing=!0,rv(fv))}}B1.prototype.unpipe=function(fv){var cv=this._readableState,ly={hasUnpiped:!1};if(cv.pipesCount===0)return this;if(cv.pipesCount===1)return fv&&fv!==cv.pipes?this:(fv||(fv=cv.pipes),cv.pipes=null,cv.pipesCount=0,cv.flowing=!1,fv&&fv.emit("unpipe",this,ly),this);if(!fv){var Cy=cv.pipes,Ly=cv.pipesCount;cv.pipes=null,cv.pipesCount=0,cv.flowing=!1;for(var Hy=0;Hy0,Cy.flowing!==!1&&this.resume()):fv==="readable"&&!Cy.endEmitted&&!Cy.readableListening&&(Cy.readableListening=Cy.needReadable=!0,Cy.flowing=!1,Cy.emittedReadable=!1,gu("on readable",Cy.length,Cy.reading),Cy.length?w1(this):Cy.reading||process$1$4.nextTick(R1,this)),ly},B1.prototype.addListener=B1.prototype.on,B1.prototype.removeListener=function(fv,cv){var ly=c.prototype.removeListener.call(this,fv,cv);return fv==="readable"&&process$1$4.nextTick(d1,this),ly},B1.prototype.removeAllListeners=function(fv){var cv=c.prototype.removeAllListeners.apply(this,arguments);return(fv==="readable"||fv===void 0)&&process$1$4.nextTick(d1,this),cv};function d1(fv){var cv=fv._readableState;cv.readableListening=fv.listenerCount("readable")>0,cv.resumeScheduled&&!cv.paused?cv.flowing=!0:fv.listenerCount("data")>0&&fv.resume()}function R1(fv){gu("readable nexttick read 0"),fv.read(0)}B1.prototype.resume=function(){var fv=this._readableState;return fv.flowing||(gu("resume"),fv.flowing=!fv.readableListening,O1(this,fv)),fv.paused=!1,this};function O1(fv,cv){cv.resumeScheduled||(cv.resumeScheduled=!0,process$1$4.nextTick(Q1,fv,cv))}function Q1(fv,cv){gu("resume",cv.reading),cv.reading||fv.read(0),cv.resumeScheduled=!1,fv.emit("resume"),rv(fv),cv.flowing&&!cv.reading&&fv.read(0)}B1.prototype.pause=function(){return gu("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(gu("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function rv(fv){var cv=fv._readableState;for(gu("flow",cv.flowing);cv.flowing&&fv.read()!==null;);}B1.prototype.wrap=function(fv){var cv=this,ly=this._readableState,Cy=!1;fv.on("end",function(){if(gu("wrapped end"),ly.decoder&&!ly.ended){var t2=ly.decoder.end();t2&&t2.length&&cv.push(t2)}cv.push(null)}),fv.on("data",function(t2){if(gu("wrapped data"),ly.decoder&&(t2=ly.decoder.write(t2)),!(ly.objectMode&&t2==null)&&!(!ly.objectMode&&(!t2||!t2.length))){var C2=cv.push(t2);C2||(Cy=!0,fv.pause())}});for(var Ly in fv)this[Ly]===void 0&&typeof fv[Ly]=="function"&&(this[Ly]=function(C2){return function(){return fv[C2].apply(fv,arguments)}}(Ly));for(var Hy=0;Hy=cv.length?(cv.decoder?ly=cv.buffer.join(""):cv.buffer.length===1?ly=cv.buffer.first():ly=cv.buffer.concat(cv.length),cv.buffer.clear()):ly=cv.buffer.consume(fv,cv.decoder),ly}function ev(fv){var cv=fv._readableState;gu("endReadable",cv.endEmitted),cv.endEmitted||(cv.ended=!0,process$1$4.nextTick(Mv,cv,fv))}function Mv(fv,cv){if(gu("endReadableNT",fv.endEmitted,fv.length),!fv.endEmitted&&fv.length===0&&(fv.endEmitted=!0,cv.readable=!1,cv.emit("end"),fv.autoDestroy)){var ly=cv._writableState;(!ly||ly.autoDestroy&&ly.finished)&&cv.destroy()}}typeof Symbol=="function"&&(B1.from=function(fv,cv){return V0===void 0&&(V0=requireFromBrowser()),V0(B1,fv,cv)});function Zv(fv,cv){for(var ly=0,Cy=fv.length;ly0;return Ws(O0,V0,F0,function(u1){A0||(A0=u1),u1&&$0.forEach(gu),!V0&&($0.forEach(gu),y0(A0))})});return r0.reduce(Su)}return pipeline_1=Iu,pipeline_1}(function(o,a){a=o.exports=require_stream_readable$1(),a.Stream=a,a.Readable=a,a.Writable=require_stream_writable$1(),a.Duplex=require_stream_duplex$1(),a.Transform=require_stream_transform(),a.PassThrough=require_stream_passthrough(),a.finished=requireEndOfStream(),a.pipeline=requirePipeline()})(readableBrowser$1,readableBrowser$1.exports);var readableBrowserExports$1=readableBrowser$1.exports,hasRequiredResponse;function requireResponse(){if(hasRequiredResponse)return response;hasRequiredResponse=1;var o=requireCapability(),a=inherits_browserExports,c=readableBrowserExports$1,d=response.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},tt=response.IncomingMessage=function(nt,$a,Ws,gu){var Su=this;if(c.Readable.call(Su),Su._mode=Ws,Su.headers={},Su.rawHeaders=[],Su.trailers={},Su.rawTrailers=[],Su.on("end",function(){process$1$4.nextTick(function(){Su.emit("close")})}),Ws==="fetch"){let A0=function(){Iu.read().then(function($0){if(!Su._destroyed){if(gu($0.done),$0.done){Su.push(null);return}Su.push(Buffer$C.from($0.value)),A0()}}).catch(function($0){gu(!0),Su._destroyed||Su.emit("error",$0)})};var y0=A0;if(Su._fetchResponse=$a,Su.url=$a.url,Su.statusCode=$a.status,Su.statusMessage=$a.statusText,$a.headers.forEach(function($0,O0){Su.headers[O0.toLowerCase()]=$0,Su.rawHeaders.push(O0,$0)}),o.writableStream){var $u=new WritableStream({write:function($0){return gu(!1),new Promise(function(O0,L0){Su._destroyed?L0():Su.push(Buffer$C.from($0))?O0():Su._resumeFetch=O0})},close:function(){gu(!0),Su._destroyed||Su.push(null)},abort:function($0){gu(!0),Su._destroyed||Su.emit("error",$0)}});try{$a.body.pipeTo($u).catch(function($0){gu(!0),Su._destroyed||Su.emit("error",$0)});return}catch{}}var Iu=$a.body.getReader();A0()}else{Su._xhr=nt,Su._pos=0,Su.url=nt.responseURL,Su.statusCode=nt.status,Su.statusMessage=nt.statusText;var Xu=nt.getAllResponseHeaders().split(/\r?\n/);if(Xu.forEach(function(A0){var $0=A0.match(/^([^:]+):\s*(.*)/);if($0){var O0=$0[1].toLowerCase();O0==="set-cookie"?(Su.headers[O0]===void 0&&(Su.headers[O0]=[]),Su.headers[O0].push($0[2])):Su.headers[O0]!==void 0?Su.headers[O0]+=", "+$0[2]:Su.headers[O0]=$0[2],Su.rawHeaders.push($0[1],$0[2])}}),Su._charset="x-user-defined",!o.overrideMimeType){var r0=Su.rawHeaders["mime-type"];if(r0){var p0=r0.match(/;\s*charset=([^;])(;|$)/);p0&&(Su._charset=p0[1].toLowerCase())}Su._charset||(Su._charset="utf-8")}}};return a(tt,c.Readable),tt.prototype._read=function(){var nt=this,$a=nt._resumeFetch;$a&&(nt._resumeFetch=null,$a())},tt.prototype._onXHRProgress=function(nt){var $a=this,Ws=$a._xhr,gu=null;switch($a._mode){case"text":if(gu=Ws.responseText,gu.length>$a._pos){var Su=gu.substr($a._pos);if($a._charset==="x-user-defined"){for(var $u=Buffer$C.alloc(Su.length),Iu=0;Iu$a._pos&&($a.push(Buffer$C.from(new Uint8Array(Xu.result.slice($a._pos)))),$a._pos=Xu.result.byteLength)},Xu.onload=function(){nt(!0),$a.push(null)},Xu.readAsArrayBuffer(gu);break}$a._xhr.readyState===d.DONE&&$a._mode!=="ms-stream"&&(nt(!0),$a.push(null))},response}var hasRequiredRequest;function requireRequest(){if(hasRequiredRequest)return request.exports;hasRequiredRequest=1;var o=requireCapability(),a=inherits_browserExports,c=requireResponse(),d=readableBrowserExports$1,tt=c.IncomingMessage,nt=c.readyStates;function $a($u,Iu){return o.fetch&&Iu?"fetch":o.mozchunkedarraybuffer?"moz-chunked-arraybuffer":o.msstream?"ms-stream":o.arraybuffer&&$u?"arraybuffer":"text"}var Ws=request.exports=function($u){var Iu=this;d.Writable.call(Iu),Iu._opts=$u,Iu._body=[],Iu._headers={},$u.auth&&Iu.setHeader("Authorization","Basic "+Buffer$C.from($u.auth).toString("base64")),Object.keys($u.headers).forEach(function(p0){Iu.setHeader(p0,$u.headers[p0])});var Xu,r0=!0;if($u.mode==="disable-fetch"||"requestTimeout"in $u&&!o.abortController)r0=!1,Xu=!0;else if($u.mode==="prefer-streaming")Xu=!1;else if($u.mode==="allow-wrong-content-type")Xu=!o.overrideMimeType;else if(!$u.mode||$u.mode==="default"||$u.mode==="prefer-fast")Xu=!0;else throw new Error("Invalid value for opts.mode");Iu._mode=$a(Xu,r0),Iu._fetchTimer=null,Iu._socketTimeout=null,Iu._socketTimer=null,Iu.on("finish",function(){Iu._onFinish()})};a(Ws,d.Writable),Ws.prototype.setHeader=function($u,Iu){var Xu=this,r0=$u.toLowerCase();Su.indexOf(r0)===-1&&(Xu._headers[r0]={name:$u,value:Iu})},Ws.prototype.getHeader=function($u){var Iu=this._headers[$u.toLowerCase()];return Iu?Iu.value:null},Ws.prototype.removeHeader=function($u){var Iu=this;delete Iu._headers[$u.toLowerCase()]},Ws.prototype._onFinish=function(){var $u=this;if(!$u._destroyed){var Iu=$u._opts;"timeout"in Iu&&Iu.timeout!==0&&$u.setTimeout(Iu.timeout);var Xu=$u._headers,r0=null;Iu.method!=="GET"&&Iu.method!=="HEAD"&&(r0=new Blob($u._body,{type:(Xu["content-type"]||{}).value||""}));var p0=[];if(Object.keys(Xu).forEach(function(O0){var L0=Xu[O0].name,V0=Xu[O0].value;Array.isArray(V0)?V0.forEach(function(F0){p0.push([L0,F0])}):p0.push([L0,V0])}),$u._mode==="fetch"){var y0=null;if(o.abortController){var A0=new AbortController;y0=A0.signal,$u._fetchAbortController=A0,"requestTimeout"in Iu&&Iu.requestTimeout!==0&&($u._fetchTimer=commonjsGlobal$4.setTimeout(function(){$u.emit("requestTimeout"),$u._fetchAbortController&&$u._fetchAbortController.abort()},Iu.requestTimeout))}commonjsGlobal$4.fetch($u._opts.url,{method:$u._opts.method,headers:p0,body:r0||void 0,mode:"cors",credentials:Iu.withCredentials?"include":"same-origin",signal:y0}).then(function(O0){$u._fetchResponse=O0,$u._resetTimers(!1),$u._connect()},function(O0){$u._resetTimers(!0),$u._destroyed||$u.emit("error",O0)})}else{var $0=$u._xhr=new commonjsGlobal$4.XMLHttpRequest;try{$0.open($u._opts.method,$u._opts.url,!0)}catch(O0){process$1$4.nextTick(function(){$u.emit("error",O0)});return}"responseType"in $0&&($0.responseType=$u._mode),"withCredentials"in $0&&($0.withCredentials=!!Iu.withCredentials),$u._mode==="text"&&"overrideMimeType"in $0&&$0.overrideMimeType("text/plain; charset=x-user-defined"),"requestTimeout"in Iu&&($0.timeout=Iu.requestTimeout,$0.ontimeout=function(){$u.emit("requestTimeout")}),p0.forEach(function(O0){$0.setRequestHeader(O0[0],O0[1])}),$u._response=null,$0.onreadystatechange=function(){switch($0.readyState){case nt.LOADING:case nt.DONE:$u._onXHRProgress();break}},$u._mode==="moz-chunked-arraybuffer"&&($0.onprogress=function(){$u._onXHRProgress()}),$0.onerror=function(){$u._destroyed||($u._resetTimers(!0),$u.emit("error",new Error("XHR error")))};try{$0.send(r0)}catch(O0){process$1$4.nextTick(function(){$u.emit("error",O0)});return}}}};function gu($u){try{var Iu=$u.status;return Iu!==null&&Iu!==0}catch{return!1}}Ws.prototype._onXHRProgress=function(){var $u=this;$u._resetTimers(!1),!(!gu($u._xhr)||$u._destroyed)&&($u._response||$u._connect(),$u._response._onXHRProgress($u._resetTimers.bind($u)))},Ws.prototype._connect=function(){var $u=this;$u._destroyed||($u._response=new tt($u._xhr,$u._fetchResponse,$u._mode,$u._resetTimers.bind($u)),$u._response.on("error",function(Iu){$u.emit("error",Iu)}),$u.emit("response",$u._response))},Ws.prototype._write=function($u,Iu,Xu){var r0=this;r0._body.push($u),Xu()},Ws.prototype._resetTimers=function($u){var Iu=this;commonjsGlobal$4.clearTimeout(Iu._socketTimer),Iu._socketTimer=null,$u?(commonjsGlobal$4.clearTimeout(Iu._fetchTimer),Iu._fetchTimer=null):Iu._socketTimeout&&(Iu._socketTimer=commonjsGlobal$4.setTimeout(function(){Iu.emit("timeout")},Iu._socketTimeout))},Ws.prototype.abort=Ws.prototype.destroy=function($u){var Iu=this;Iu._destroyed=!0,Iu._resetTimers(!0),Iu._response&&(Iu._response._destroyed=!0),Iu._xhr?Iu._xhr.abort():Iu._fetchAbortController&&Iu._fetchAbortController.abort(),$u&&Iu.emit("error",$u)},Ws.prototype.end=function($u,Iu,Xu){var r0=this;typeof $u=="function"&&(Xu=$u,$u=void 0),d.Writable.prototype.end.call(r0,$u,Iu,Xu)},Ws.prototype.setTimeout=function($u,Iu){var Xu=this;Iu&&Xu.once("timeout",Iu),Xu._socketTimeout=$u,Xu._resetTimers(!1)},Ws.prototype.flushHeaders=function(){},Ws.prototype.setNoDelay=function(){},Ws.prototype.setSocketKeepAlive=function(){};var Su=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","via"];return request.exports}var immutable,hasRequiredImmutable;function requireImmutable(){if(hasRequiredImmutable)return immutable;hasRequiredImmutable=1,immutable=a;var o=Object.prototype.hasOwnProperty;function a(){for(var c={},d=0;d= 0x80 (not a basic code point)","invalid-input":"Invalid input"},V0=gu-Su,F0=Math.floor,u1=String.fromCharCode,g1;function E1(G0){throw new RangeError(L0[G0])}function B1(G0,o1){for(var d1=G0.length,R1=[];d1--;)R1[d1]=o1(G0[d1]);return R1}function lv(G0,o1){var d1=G0.split("@"),R1="";d1.length>1&&(R1=d1[0]+"@",G0=d1[1]),G0=G0.replace(O0,".");var O1=G0.split("."),Q1=B1(O1,o1).join(".");return R1+Q1}function j1(G0){for(var o1=[],d1=0,R1=G0.length,O1,Q1;d1=55296&&O1<=56319&&d165535&&(o1-=65536,d1+=u1(o1>>>10&1023|55296),o1=56320|o1&1023),d1+=u1(o1),d1}).join("")}function t1(G0){return G0-48<10?G0-22:G0-65<26?G0-65:G0-97<26?G0-97:gu}function D0(G0,o1){return G0+22+75*(G0<26)-((o1!=0)<<5)}function Z0(G0,o1,d1){var R1=0;for(G0=d1?F0(G0/Xu):G0>>1,G0+=F0(G0/o1);G0>V0*$u>>1;R1+=gu)G0=F0(G0/V0);return F0(R1+(V0+1)*G0/(G0+Iu))}function f1(G0){var o1=[],d1=G0.length,R1,O1=0,Q1=p0,rv=r0,D1,ev,Mv,Zv,fv,cv,ly,Cy,Ly;for(D1=G0.lastIndexOf(y0),D1<0&&(D1=0),ev=0;ev=128&&E1("not-basic"),o1.push(G0.charCodeAt(ev));for(Mv=D1>0?D1+1:0;Mv=d1&&E1("invalid-input"),ly=t1(G0.charCodeAt(Mv++)),(ly>=gu||ly>F0((Ws-O1)/fv))&&E1("overflow"),O1+=ly*fv,Cy=cv<=rv?Su:cv>=rv+$u?$u:cv-rv,!(lyF0(Ws/Ly)&&E1("overflow"),fv*=Ly;R1=o1.length+1,rv=Z0(O1-Zv,R1,Zv==0),F0(O1/R1)>Ws-Q1&&E1("overflow"),Q1+=F0(O1/R1),O1%=R1,o1.splice(O1++,0,Q1)}return r1(o1)}function w1(G0){var o1,d1,R1,O1,Q1,rv,D1,ev,Mv,Zv,fv,cv=[],ly,Cy,Ly,Hy;for(G0=j1(G0),ly=G0.length,o1=p0,d1=0,Q1=r0,rv=0;rv=o1&&fvF0((Ws-d1)/Cy)&&E1("overflow"),d1+=(D1-o1)*Cy,o1=D1,rv=0;rvWs&&E1("overflow"),fv==o1){for(ev=d1,Mv=gu;Zv=Mv<=Q1?Su:Mv>=Q1+$u?$u:Mv-Q1,!(ev0&&Ws>$a&&(Ws=$a);for(var gu=0;gu=0?(Iu=Su.substr(0,$u),Xu=Su.substr($u+1)):(Iu=Su,Xu=""),r0=decodeURIComponent(Iu),p0=decodeURIComponent(Xu),hasOwnProperty$4(tt,r0)?isArray$4(tt[r0])?tt[r0].push(p0):tt[r0]=[tt[r0],p0]:tt[r0]=p0}return tt},isArray$4=Array.isArray||function(o){return Object.prototype.toString.call(o)==="[object Array]"},stringifyPrimitive=function(o){switch(typeof o){case"string":return o;case"boolean":return o?"true":"false";case"number":return isFinite(o)?o:"";default:return""}},encode$3=function(o,a,c,d){return a=a||"&",c=c||"=",o===null&&(o=void 0),typeof o=="object"?map(objectKeys$6(o),function(tt){var nt=encodeURIComponent(stringifyPrimitive(tt))+c;return isArray$3(o[tt])?map(o[tt],function($a){return nt+encodeURIComponent(stringifyPrimitive($a))}).join(a):nt+encodeURIComponent(stringifyPrimitive(o[tt]))}).join(a):d?encodeURIComponent(stringifyPrimitive(d))+c+encodeURIComponent(stringifyPrimitive(o)):""},isArray$3=Array.isArray||function(o){return Object.prototype.toString.call(o)==="[object Array]"};function map(o,a){if(o.map)return o.map(a);for(var c=[],d=0;d",'"',"`"," ","\r",` +`," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[+a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:!0,"javascript:":!0},hostlessProtocol={javascript:!0,"javascript:":!0},slashedProtocol={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},querystring$1=api$2;function urlParse$2(o,a,c){if(o&&util$4.isObject(o)&&o instanceof Url$1)return o;var d=new Url$1;return d.parse(o,a,c),d}Url$1.prototype.parse=function(o,a,c){if(!util$4.isString(o))throw new TypeError("Parameter 'url' must be a string, not "+typeof o);var d=o.indexOf("?"),tt=d!==-1&&d127?F0+="x":F0+=V0[u1];if(!F0.match(hostnamePartPattern)){var E1=O0.slice(0,r0),B1=O0.slice(r0+1),lv=V0.match(hostnamePartStart);lv&&(E1.push(lv[1]),B1.unshift(lv[2])),B1.length&&(Ws="/"+B1.join(".")+Ws),this.hostname=E1.join(".");break}}}this.hostname.length>hostnameMaxLen?this.hostname="":this.hostname=this.hostname.toLowerCase(),$0||(this.hostname=punycode$1.toASCII(this.hostname));var j1=this.port?":"+this.port:"",r1=this.hostname||"";this.host=r1+j1,this.href+=this.host,$0&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),Ws[0]!=="/"&&(Ws="/"+Ws))}if(!unsafeProtocol[$u])for(var r0=0,L0=autoEscape.length;r00?c.host.split("@"):!1;F0&&(c.auth=F0.shift(),c.host=c.hostname=F0.shift())}return c.search=o.search,c.query=o.query,(!util$4.isNull(c.pathname)||!util$4.isNull(c.search))&&(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.href=c.format(),c}if(!O0.length)return c.pathname=null,c.search?c.path="/"+c.search:c.path=null,c.href=c.format(),c;for(var u1=O0.slice(-1)[0],g1=(c.host||o.host||O0.length>1)&&(u1==="."||u1==="..")||u1==="",E1=0,B1=O0.length;B1>=0;B1--)u1=O0[B1],u1==="."?O0.splice(B1,1):u1===".."?(O0.splice(B1,1),E1++):E1&&(O0.splice(B1,1),E1--);if(!A0&&!$0)for(;E1--;E1)O0.unshift("..");A0&&O0[0]!==""&&(!O0[0]||O0[0].charAt(0)!=="/")&&O0.unshift(""),g1&&O0.join("/").substr(-1)!=="/"&&O0.push("");var lv=O0[0]===""||O0[0]&&O0[0].charAt(0)==="/";if(V0){c.hostname=c.host=lv?"":O0.length?O0.shift():"";var F0=c.host&&c.host.indexOf("@")>0?c.host.split("@"):!1;F0&&(c.auth=F0.shift(),c.host=c.hostname=F0.shift())}return A0=A0||c.host&&O0.length,A0&&!lv&&O0.unshift(""),O0.length?c.pathname=O0.join("/"):(c.pathname=null,c.path=null),(!util$4.isNull(c.pathname)||!util$4.isNull(c.search))&&(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.auth=o.auth||c.auth,c.slashes=c.slashes||o.slashes,c.href=c.format(),c};Url$1.prototype.parseHost=function(){var o=this.host,a=portPattern.exec(o);a&&(a=a[0],a!==":"&&(this.port=a.substr(1)),o=o.substr(0,o.length-a.length)),o&&(this.hostname=o)};function normalizeArray(o,a){for(var c=0,d=o.length-1;d>=0;d--){var tt=o[d];tt==="."?o.splice(d,1):tt===".."?(o.splice(d,1),c++):c&&(o.splice(d,1),c--)}if(a)for(;c--;c)o.unshift("..");return o}function resolve$3(){for(var o="",a=!1,c=arguments.length-1;c>=-1&&!a;c--){var d=c>=0?arguments[c]:"/";if(typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)continue;o=d+"/"+o,a=d.charAt(0)==="/"}return o=normalizeArray(filter(o.split("/"),function(tt){return!!tt}),!a).join("/"),(a?"/":"")+o||"."}function filter(o,a){if(o.filter)return o.filter(a);for(var c=[],d=0;d"u")throw new TypeError('The "domain" argument must be specified');return new URL$1("http://"+a).hostname},domainToUnicode=function(a){if(typeof a>"u")throw new TypeError('The "domain" argument must be specified');return new URL$1("http://"+a).hostname},pathToFileURL=function(a){var c=new URL$1("file://"),d=resolve$3(a),tt=a.charCodeAt(a.length-1);return tt===CHAR_FORWARD_SLASH&&d[d.length-1]!=="/"&&(d+="/"),c.pathname=encodePathChars(d),c},fileURLToPath=function(a){if(!isURLInstance(a)&&typeof a!="string")throw new TypeError('The "path" argument must be of type string or an instance of URL. Received type '+typeof a+" ("+a+")");var c=new URL$1(a);if(c.protocol!=="file:")throw new TypeError("The URL must be of scheme file");return getPathFromURLPosix(c)},formatImportWithOverloads=function(a,c){var d,tt,nt;if(c===void 0&&(c={}),!(a instanceof URL$1))return formatImport(a);if(typeof c!="object"||c===null)throw new TypeError('The "options" argument must be of type object.');var $a=(d=c.auth)!=null?d:!0,Ws=(tt=c.fragment)!=null?tt:!0,gu=(nt=c.search)!=null?nt:!0,Su=new URL$1(a.toString());return $a||(Su.username="",Su.password=""),Ws||(Su.hash=""),gu||(Su.search=""),Su.toString()},api$1={format:formatImportWithOverloads,parse:parseImport,resolve:resolveImport,resolveObject,Url:UrlImport,URL:URL$1,URLSearchParams:URLSearchParams$2,domainToASCII,domainToUnicode,pathToFileURL,fileURLToPath};const url=Object.freeze(Object.defineProperty({__proto__:null,URL:URL$1,URLSearchParams:URLSearchParams$2,Url:UrlImport,default:api$1,domainToASCII,domainToUnicode,fileURLToPath,format:formatImportWithOverloads,parse:parseImport,pathToFileURL,resolve:resolveImport,resolveObject},Symbol.toStringTag,{value:"Module"})),require$$1$3=getAugmentedNamespace(url);var hasRequiredStreamHttp;function requireStreamHttp(){return hasRequiredStreamHttp||(hasRequiredStreamHttp=1,function(o){var a=requireRequest(),c=requireResponse(),d=requireImmutable(),tt=requireBrowser$3(),nt=require$$1$3,$a=o;$a.request=function(Ws,gu){typeof Ws=="string"?Ws=nt.parse(Ws):Ws=d(Ws);var Su=commonjsGlobal$4.location.protocol.search(/^https?:$/)===-1?"http:":"",$u=Ws.protocol||Su,Iu=Ws.hostname||Ws.host,Xu=Ws.port,r0=Ws.path||"/";Iu&&Iu.indexOf(":")!==-1&&(Iu="["+Iu+"]"),Ws.url=(Iu?$u+"//"+Iu:"")+(Xu?":"+Xu:"")+r0,Ws.method=(Ws.method||"GET").toUpperCase(),Ws.headers=Ws.headers||{};var p0=new a(Ws);return gu&&p0.on("response",gu),p0},$a.get=function(gu,Su){var $u=$a.request(gu,Su);return $u.end(),$u},$a.ClientRequest=a,$a.IncomingMessage=c.IncomingMessage,$a.Agent=function(){},$a.Agent.defaultMaxSockets=4,$a.globalAgent=new $a.Agent,$a.STATUS_CODES=tt,$a.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}(streamHttp)),streamHttp}var httpsBrowserify={exports:{}},hasRequiredHttpsBrowserify;function requireHttpsBrowserify(){return hasRequiredHttpsBrowserify||(hasRequiredHttpsBrowserify=1,function(o){var a=requireStreamHttp(),c=require$$1$3,d=o.exports;for(var tt in a)a.hasOwnProperty(tt)&&(d[tt]=a[tt]);d.request=function($a,Ws){return $a=nt($a),a.request.call(this,$a,Ws)},d.get=function($a,Ws){return $a=nt($a),a.get.call(this,$a,Ws)};function nt($a){if(typeof $a=="string"&&($a=c.parse($a)),$a.protocol||($a.protocol="https:"),$a.protocol!=="https:")throw new Error('Protocol "'+$a.protocol+'" not supported. Expected "https:"');return $a}}(httpsBrowserify)),httpsBrowserify.exports}var hasRequiredFetch;function requireFetch(){if(hasRequiredFetch)return fetch$2;hasRequiredFetch=1;var o=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(gu){return gu&&gu.__esModule?gu:{default:gu}};Object.defineProperty(fetch$2,"__esModule",{value:!0});const a=o(requireBrowser$4()),c=o(requireStreamHttp()),d=o(requireHttpsBrowserify()),tt=new c.default.Agent({keepAlive:!0}),nt=new d.default.Agent({keepAlive:!0});function $a(gu){return gu.protocol==="http:"?tt:nt}function Ws(gu,Su){return(0,a.default)(gu,Object.assign({agent:$a(new URL(gu.toString()))},Su))}return fetch$2.default=Ws,fetch$2}var __createBinding$1=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(o,a,c,d){d===void 0&&(d=c);var tt=Object.getOwnPropertyDescriptor(a,c);(!tt||("get"in tt?!a.__esModule:tt.writable||tt.configurable))&&(tt={enumerable:!0,get:function(){return a[c]}}),Object.defineProperty(o,d,tt)}:function(o,a,c,d){d===void 0&&(d=c),o[d]=a[c]}),__setModuleDefault$1=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(o,a){Object.defineProperty(o,"default",{enumerable:!0,value:a})}:function(o,a){o.default=a}),__importStar$1=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var c in o)c!=="default"&&Object.prototype.hasOwnProperty.call(o,c)&&__createBinding$1(a,o,c);return __setModuleDefault$1(a,o),a},__awaiter$f=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__importDefault$7=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(fetch_json,"__esModule",{value:!0});fetch_json.fetchJson=void 0;const types_1$6=lib$8,utils_1$8=lib$9,http_errors_1=__importDefault$7(httpErrorsExports),exponential_backoff_1$1=exponentialBackoff$1,START_WAIT_TIME_MS=1e3,BACKOFF_MULTIPLIER=1.5,RETRY_NUMBER=10;function fetchJson(o,a){return __awaiter$f(this,void 0,void 0,function*(){let c={url:null};typeof o=="string"?c.url=o:c=o;const d=yield(0,exponential_backoff_1$1.exponentialBackoff)(START_WAIT_TIME_MS,RETRY_NUMBER,BACKOFF_MULTIPLIER,()=>__awaiter$f(this,void 0,void 0,function*(){var tt;try{const nt=yield((tt=commonjsGlobal$4.fetch)!==null&&tt!==void 0?tt:(yield Promise.resolve().then(()=>__importStar$1(requireFetch()))).default)(c.url,{method:a?"POST":"GET",body:a||void 0,headers:Object.assign(Object.assign({},c.headers),{"Content-Type":"application/json"})});if(!nt.ok){if(nt.status===503)return utils_1$8.Logger.warn(`Retrying HTTP request for ${c.url} as it's not available now`),null;if(nt.status===408)return utils_1$8.Logger.warn(`Retrying HTTP request for ${c.url} as the previous connection was unused for some time`),null;throw(0,http_errors_1.default)(nt.status,yield nt.text())}return nt}catch(nt){if(nt.toString().includes("FetchError")||nt.toString().includes("Failed to fetch"))return utils_1$8.Logger.warn(`Retrying HTTP request for ${c.url} because of error: ${nt}`),null;throw nt}}));if(!d)throw new types_1$6.TypedError(`Exceeded ${RETRY_NUMBER} attempts for ${c.url}.`,"RetriesExceeded");return yield d.json()})}fetch_json.fetchJson=fetchJson;var __awaiter$e=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__rest$2=commonjsGlobal$4&&commonjsGlobal$4.__rest||function(o,a){var c={};for(var d in o)Object.prototype.hasOwnProperty.call(o,d)&&a.indexOf(d)<0&&(c[d]=o[d]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var tt=0,d=Object.getOwnPropertySymbols(o);tt__awaiter$e(this,void 0,void 0,function*(){var nt;try{const $a={method:a,params:c,id:_nextId++,jsonrpc:"2.0"},Ws=yield(0,fetch_json_1.fetchJson)(this.connection,JSON.stringify($a));if(Ws.error){if(typeof Ws.error.data=="object")throw typeof Ws.error.data.error_message=="string"&&typeof Ws.error.data.error_type=="string"?new types_1$5.TypedError(Ws.error.data.error_message,Ws.error.data.error_type):(0,utils_1$7.parseRpcError)(Ws.error.data);{const gu=`[${Ws.error.code}] ${Ws.error.message}: ${Ws.error.data}`;if(Ws.error.data==="Timeout"||gu.includes("Timeout error")||gu.includes("query has timed out"))throw new types_1$5.TypedError(gu,"TimeoutError");const Su=(0,utils_1$7.getErrorTypeFromErrorMessage)(Ws.error.data,"");throw Su?new types_1$5.TypedError((0,utils_1$7.formatError)(Su,c),Su):new types_1$5.TypedError(gu,Ws.error.name)}}else if(typeof((nt=Ws.result)===null||nt===void 0?void 0:nt.error)=="string"){const gu=(0,utils_1$7.getErrorTypeFromErrorMessage)(Ws.result.error,"");if(gu)throw new utils_1$7.ServerError((0,utils_1$7.formatError)(gu,c),gu)}return Ws}catch($a){if($a.type==="TimeoutError")return utils_1$7.Logger.warn(`Retrying request to ${a} as it has timed out`,c),null;throw $a}})),{result:tt}=d;if(typeof tt>"u")throw new types_1$5.TypedError(`Exceeded ${REQUEST_RETRY_NUMBER} attempts for request to ${a}.`,"RetriesExceeded");return tt})}}jsonRpcProvider$1.JsonRpcProvider=JsonRpcProvider;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.fetchJson=o.Provider=o.JsonRpcProvider=o.exponentialBackoff=void 0;var a=exponentialBackoff$1;Object.defineProperty(o,"exponentialBackoff",{enumerable:!0,get:function(){return a.exponentialBackoff}});var c=jsonRpcProvider$1;Object.defineProperty(o,"JsonRpcProvider",{enumerable:!0,get:function(){return c.JsonRpcProvider}});var d=provider;Object.defineProperty(o,"Provider",{enumerable:!0,get:function(){return d.Provider}});var tt=fetch_json;Object.defineProperty(o,"fetchJson",{enumerable:!0,get:function(){return tt.fetchJson}})})(lib$6);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.FinalExecutionStatusBasic=o.ExecutionStatusBasic=o.IdType=o.Provider=o.getTransactionLastResult=void 0;var a=lib$9;Object.defineProperty(o,"getTransactionLastResult",{enumerable:!0,get:function(){return a.getTransactionLastResult}});var c=lib$6;Object.defineProperty(o,"Provider",{enumerable:!0,get:function(){return c.Provider}});var d=lib$8;Object.defineProperty(o,"IdType",{enumerable:!0,get:function(){return d.IdType}}),Object.defineProperty(o,"ExecutionStatusBasic",{enumerable:!0,get:function(){return d.ExecutionStatusBasic}}),Object.defineProperty(o,"FinalExecutionStatusBasic",{enumerable:!0,get:function(){return d.FinalExecutionStatusBasic}})})(provider$1);var jsonRpcProvider={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.JsonRpcProvider=o.TypedError=o.ErrorContext=void 0;var a=lib$8;Object.defineProperty(o,"ErrorContext",{enumerable:!0,get:function(){return a.ErrorContext}}),Object.defineProperty(o,"TypedError",{enumerable:!0,get:function(){return a.TypedError}});var c=lib$6;Object.defineProperty(o,"JsonRpcProvider",{enumerable:!0,get:function(){return c.JsonRpcProvider}})})(jsonRpcProvider);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.ErrorContext=o.TypedError=o.getTransactionLastResult=o.FinalExecutionStatusBasic=o.JsonRpcProvider=o.Provider=void 0;const a=provider$1;Object.defineProperty(o,"Provider",{enumerable:!0,get:function(){return a.Provider}}),Object.defineProperty(o,"getTransactionLastResult",{enumerable:!0,get:function(){return a.getTransactionLastResult}}),Object.defineProperty(o,"FinalExecutionStatusBasic",{enumerable:!0,get:function(){return a.FinalExecutionStatusBasic}});const c=jsonRpcProvider;Object.defineProperty(o,"JsonRpcProvider",{enumerable:!0,get:function(){return c.JsonRpcProvider}}),Object.defineProperty(o,"TypedError",{enumerable:!0,get:function(){return c.TypedError}}),Object.defineProperty(o,"ErrorContext",{enumerable:!0,get:function(){return c.ErrorContext}})})(providers);var utils$s={},key_pair={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.PublicKey=o.KeyType=o.KeyPairEd25519=o.KeyPair=void 0;var a=lib$a;Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return a.KeyPair}}),Object.defineProperty(o,"KeyPairEd25519",{enumerable:!0,get:function(){return a.KeyPairEd25519}}),Object.defineProperty(o,"KeyType",{enumerable:!0,get:function(){return a.KeyType}}),Object.defineProperty(o,"PublicKey",{enumerable:!0,get:function(){return a.PublicKey}})})(key_pair);var serialize$2={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.base_decode=o.base_encode=o.deserialize=o.serialize=void 0;var a=cjs;Object.defineProperty(o,"serialize",{enumerable:!0,get:function(){return a.serialize}}),Object.defineProperty(o,"deserialize",{enumerable:!0,get:function(){return a.deserialize}});var c=lib$9;Object.defineProperty(o,"base_encode",{enumerable:!0,get:function(){return c.baseEncode}}),Object.defineProperty(o,"base_decode",{enumerable:!0,get:function(){return c.baseDecode}})})(serialize$2);var web={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.fetchJson=void 0;var a=lib$6;Object.defineProperty(o,"fetchJson",{enumerable:!0,get:function(){return a.fetchJson}})})(web);var enums={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Enum=o.Assignable=void 0;var a=lib$8;Object.defineProperty(o,"Assignable",{enumerable:!0,get:function(){return a.Assignable}});class c{constructor(tt){if(Object.keys(tt).length!==1)throw new Error("Enum can only take single value");Object.keys(tt).map(nt=>{this[nt]=tt[nt],this.enum=nt})}}o.Enum=c})(enums);var format$4={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.parseNearAmount=o.formatNearAmount=o.NEAR_NOMINATION_EXP=o.NEAR_NOMINATION=void 0;var a=lib$9;Object.defineProperty(o,"NEAR_NOMINATION",{enumerable:!0,get:function(){return a.NEAR_NOMINATION}}),Object.defineProperty(o,"NEAR_NOMINATION_EXP",{enumerable:!0,get:function(){return a.NEAR_NOMINATION_EXP}}),Object.defineProperty(o,"formatNearAmount",{enumerable:!0,get:function(){return a.formatNearAmount}}),Object.defineProperty(o,"parseNearAmount",{enumerable:!0,get:function(){return a.parseNearAmount}})})(format$4);var rpc_errors={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.ServerError=o.getErrorTypeFromErrorMessage=o.formatError=o.parseResultError=o.parseRpcError=void 0;var a=lib$9;Object.defineProperty(o,"parseRpcError",{enumerable:!0,get:function(){return a.parseRpcError}}),Object.defineProperty(o,"parseResultError",{enumerable:!0,get:function(){return a.parseResultError}}),Object.defineProperty(o,"formatError",{enumerable:!0,get:function(){return a.formatError}}),Object.defineProperty(o,"getErrorTypeFromErrorMessage",{enumerable:!0,get:function(){return a.getErrorTypeFromErrorMessage}}),Object.defineProperty(o,"ServerError",{enumerable:!0,get:function(){return a.ServerError}})})(rpc_errors);var errors$3={},lib$4={},account$1={},__awaiter$d=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__importDefault$6=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(account$1,"__esModule",{value:!0});account$1.Account=void 0;const crypto_1$4=lib$a,providers_1$3=lib$6,transactions_1$3=lib$5,types_1$4=lib$8,utils_1$6=lib$9,bn_js_1$6=__importDefault$6(bnExports$1),{addKey:addKey$1,createAccount,deleteAccount,deleteKey:deleteKey$1,deployContract:deployContract$2,fullAccessKey:fullAccessKey$1,functionCall:functionCall$6,functionCallAccessKey:functionCallAccessKey$1,stake,transfer}=transactions_1$3.actionCreators,TX_NONCE_RETRY_NUMBER=12,TX_NONCE_RETRY_WAIT=500,TX_NONCE_RETRY_WAIT_BACKOFF=1.5;function parseJsonFromRawResponse(o){return JSON.parse(Buffer$C.from(o).toString())}function bytesJsonStringify(o){return Buffer$C.from(JSON.stringify(o))}class Account{constructor(a,c){this.accessKeyByPublicKeyCache={},this.connection=a,this.accountId=c}state(){return __awaiter$d(this,void 0,void 0,function*(){return this.connection.provider.query({request_type:"view_account",account_id:this.accountId,finality:"optimistic"})})}signTransaction(a,c){return __awaiter$d(this,void 0,void 0,function*(){const d=yield this.findAccessKey(a,c);if(!d)throw new types_1$4.TypedError(`Can not sign transactions for account ${this.accountId} on network ${this.connection.networkId}, no matching key pair exists for this account`,"KeyNotFound");const{accessKey:tt}=d,$a=(yield this.connection.provider.block({finality:"final"})).header.hash,Ws=tt.nonce.add(new bn_js_1$6.default(1));return yield(0,transactions_1$3.signTransaction)(a,Ws,c,(0,utils_1$6.baseDecode)($a),this.connection.signer,this.accountId,this.connection.networkId)})}signAndSendTransaction({receiverId:a,actions:c,returnError:d}){return __awaiter$d(this,void 0,void 0,function*(){let tt,nt;const $a=yield(0,providers_1$3.exponentialBackoff)(TX_NONCE_RETRY_WAIT,TX_NONCE_RETRY_NUMBER,TX_NONCE_RETRY_WAIT_BACKOFF,()=>__awaiter$d(this,void 0,void 0,function*(){[tt,nt]=yield this.signTransaction(a,c);const Ws=nt.transaction.publicKey;try{return yield this.connection.provider.sendTransaction(nt)}catch(gu){if(gu.type==="InvalidNonce")return utils_1$6.Logger.warn(`Retrying transaction ${a}:${(0,utils_1$6.baseEncode)(tt)} with new nonce.`),delete this.accessKeyByPublicKeyCache[Ws.toString()],null;if(gu.type==="Expired")return utils_1$6.Logger.warn(`Retrying transaction ${a}:${(0,utils_1$6.baseEncode)(tt)} due to expired block hash`),null;throw gu.context=new types_1$4.ErrorContext((0,utils_1$6.baseEncode)(tt)),gu}}));if(!$a)throw new types_1$4.TypedError("nonce retries exceeded for transaction. This usually means there are too many parallel requests with the same access key.","RetriesExceeded");if((0,utils_1$6.printTxOutcomeLogsAndFailures)({contractId:nt.transaction.receiverId,outcome:$a}),!d&&typeof $a.status=="object"&&typeof $a.status.Failure=="object"&&$a.status.Failure!==null)throw $a.status.Failure.error_message&&$a.status.Failure.error_type?new types_1$4.TypedError(`Transaction ${$a.transaction_outcome.id} failed. ${$a.status.Failure.error_message}`,$a.status.Failure.error_type):(0,utils_1$6.parseResultError)($a);return $a})}findAccessKey(a,c){return __awaiter$d(this,void 0,void 0,function*(){const d=yield this.connection.signer.getPublicKey(this.accountId,this.connection.networkId);if(!d)throw new types_1$4.TypedError(`no matching key pair found in ${this.connection.signer}`,"PublicKeyNotFound");const tt=this.accessKeyByPublicKeyCache[d.toString()];if(tt!==void 0)return{publicKey:d,accessKey:tt};try{const nt=yield this.connection.provider.query({request_type:"view_access_key",account_id:this.accountId,public_key:d.toString(),finality:"optimistic"}),$a=Object.assign(Object.assign({},nt),{nonce:new bn_js_1$6.default(nt.nonce)});return this.accessKeyByPublicKeyCache[d.toString()]?{publicKey:d,accessKey:this.accessKeyByPublicKeyCache[d.toString()]}:(this.accessKeyByPublicKeyCache[d.toString()]=$a,{publicKey:d,accessKey:$a})}catch(nt){if(nt.type=="AccessKeyDoesNotExist")return null;throw nt}})}createAndDeployContract(a,c,d,tt){return __awaiter$d(this,void 0,void 0,function*(){const nt=fullAccessKey$1();return yield this.signAndSendTransaction({receiverId:a,actions:[createAccount(),transfer(tt),addKey$1(crypto_1$4.PublicKey.from(c),nt),deployContract$2(d)]}),new Account(this.connection,a)})}sendMoney(a,c){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:a,actions:[transfer(c)]})})}createAccount(a,c,d){return __awaiter$d(this,void 0,void 0,function*(){const tt=fullAccessKey$1();return this.signAndSendTransaction({receiverId:a,actions:[createAccount(),transfer(d),addKey$1(crypto_1$4.PublicKey.from(c),tt)]})})}deleteAccount(a){return __awaiter$d(this,void 0,void 0,function*(){return utils_1$6.Logger.log("Deleting an account does not automatically transfer NFTs and FTs to the beneficiary address. Ensure to transfer assets before deleting."),this.signAndSendTransaction({receiverId:this.accountId,actions:[deleteAccount(a)]})})}deployContract(a){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:this.accountId,actions:[deployContract$2(a)]})})}encodeJSContractArgs(a,c,d){return Buffer$C.concat([Buffer$C.from(a),Buffer$C.from([0]),Buffer$C.from(c),Buffer$C.from([0]),Buffer$C.from(d)])}functionCall({contractId:a,methodName:c,args:d={},gas:tt=utils_1$6.DEFAULT_FUNCTION_CALL_GAS,attachedDeposit:nt,walletMeta:$a,walletCallbackUrl:Ws,stringify:gu,jsContract:Su}){return __awaiter$d(this,void 0,void 0,function*(){this.validateArgs(d);let $u;if(Su)$u=["call_js_contract",this.encodeJSContractArgs(a,c,JSON.stringify(d)),tt,nt,null,!0];else{const Iu=gu===void 0?transactions_1$3.stringifyJsonOrBytes:gu;$u=[c,d,tt,nt,Iu,!1]}return this.signAndSendTransaction({receiverId:Su?this.connection.jsvmAccountId:a,actions:[functionCall$6.apply(void 0,$u)],walletMeta:$a,walletCallbackUrl:Ws})})}addKey(a,c,d,tt){return __awaiter$d(this,void 0,void 0,function*(){d||(d=[]),Array.isArray(d)||(d=[d]);let nt;return c?nt=functionCallAccessKey$1(c,d,tt):nt=fullAccessKey$1(),this.signAndSendTransaction({receiverId:this.accountId,actions:[addKey$1(crypto_1$4.PublicKey.from(a),nt)]})})}deleteKey(a){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:this.accountId,actions:[deleteKey$1(crypto_1$4.PublicKey.from(a))]})})}stake(a,c){return __awaiter$d(this,void 0,void 0,function*(){return this.signAndSendTransaction({receiverId:this.accountId,actions:[stake(c,crypto_1$4.PublicKey.from(a))]})})}signedDelegate({actions:a,blockHeightTtl:c,receiverId:d}){return __awaiter$d(this,void 0,void 0,function*(){const{provider:tt,signer:nt}=this.connection,{header:$a}=yield tt.block({finality:"final"}),{accessKey:Ws,publicKey:gu}=yield this.findAccessKey(null,null),Su=(0,transactions_1$3.buildDelegateAction)({actions:a,maxBlockHeight:new bn_js_1$6.default($a.height).add(new bn_js_1$6.default(c)),nonce:new bn_js_1$6.default(Ws.nonce).add(new bn_js_1$6.default(1)),publicKey:gu,receiverId:d,senderId:this.accountId}),{signedDelegateAction:$u}=yield(0,transactions_1$3.signDelegateAction)({delegateAction:Su,signer:{sign:Iu=>__awaiter$d(this,void 0,void 0,function*(){const{signature:Xu}=yield nt.signMessage(Iu,Su.senderId,this.connection.networkId);return Xu})}});return $u})}validateArgs(a){if(!(a.byteLength!==void 0&&a.byteLength===a.length)&&(Array.isArray(a)||typeof a!="object"))throw new types_1$4.PositionalArgsError}viewFunction({contractId:a,methodName:c,args:d={},parse:tt=parseJsonFromRawResponse,stringify:nt=bytesJsonStringify,jsContract:$a=!1,blockQuery:Ws={finality:"optimistic"}}){return __awaiter$d(this,void 0,void 0,function*(){let gu;this.validateArgs(d),$a?gu=this.encodeJSContractArgs(a,c,Object.keys(d).length>0?JSON.stringify(d):""):gu=nt(d);const Su=yield this.connection.provider.query(Object.assign(Object.assign({request_type:"call_function"},Ws),{account_id:$a?this.connection.jsvmAccountId:a,method_name:$a?"view_js_contract":c,args_base64:gu.toString("base64")}));return Su.logs&&(0,utils_1$6.printTxOutcomeLogs)({contractId:a,logs:Su.logs}),Su.result&&Su.result.length>0&&tt(Buffer$C.from(Su.result))})}viewState(a,c={finality:"optimistic"}){return __awaiter$d(this,void 0,void 0,function*(){const{values:d}=yield this.connection.provider.query(Object.assign(Object.assign({request_type:"view_state"},c),{account_id:this.accountId,prefix_base64:Buffer$C.from(a).toString("base64")}));return d.map(({key:tt,value:nt})=>({key:Buffer$C.from(tt,"base64"),value:Buffer$C.from(nt,"base64")}))})}getAccessKeys(){var a;return __awaiter$d(this,void 0,void 0,function*(){const c=yield this.connection.provider.query({request_type:"view_access_key_list",account_id:this.accountId,finality:"optimistic"});return(a=c==null?void 0:c.keys)===null||a===void 0?void 0:a.map(d=>Object.assign(Object.assign({},d),{access_key:Object.assign(Object.assign({},d.access_key),{nonce:new bn_js_1$6.default(d.access_key.nonce)})}))})}getAccountDetails(){return __awaiter$d(this,void 0,void 0,function*(){return{authorizedApps:(yield this.getAccessKeys()).filter(d=>d.access_key.permission!=="FullAccess").map(d=>{const tt=d.access_key.permission;return{contractId:tt.FunctionCall.receiver_id,amount:tt.FunctionCall.allowance,publicKey:d.public_key}})}})}getAccountBalance(){return __awaiter$d(this,void 0,void 0,function*(){const a=yield this.connection.provider.experimental_protocolConfig({finality:"final"}),c=yield this.state(),d=new bn_js_1$6.default(a.runtime_config.storage_amount_per_byte),tt=new bn_js_1$6.default(c.storage_usage).mul(d),nt=new bn_js_1$6.default(c.locked),$a=new bn_js_1$6.default(c.amount).add(nt),Ws=$a.sub(bn_js_1$6.default.max(nt,tt));return{total:$a.toString(),stateStaked:tt.toString(),staked:nt.toString(),available:Ws.toString()}})}getActiveDelegatedStakeBalance(){return __awaiter$d(this,void 0,void 0,function*(){const a=yield this.connection.provider.block({finality:"final"}),c=a.header.hash,d=a.header.epoch_id,{current_validators:tt,next_validators:nt,current_proposals:$a}=yield this.connection.provider.validators(d),Ws=new Set;[...tt,...nt,...$a].forEach(r0=>Ws.add(r0.account_id));const gu=[...Ws],Su=gu.map(r0=>this.viewFunction({contractId:r0,methodName:"get_account_total_balance",args:{account_id:this.accountId},blockQuery:{blockId:c}})),$u=yield Promise.allSettled(Su);if($u.some(r0=>r0.status==="rejected"&&r0.reason.type==="TimeoutError"))throw new Error("Failed to get delegated stake balance");const Xu=$u.reduce((r0,p0,y0)=>{const A0=gu[y0];if(p0.status==="fulfilled"){const $0=new bn_js_1$6.default(p0.value);if(!$0.isZero())return Object.assign(Object.assign({},r0),{stakedValidators:[...r0.stakedValidators,{validatorId:A0,amount:$0.toString()}],total:r0.total.add($0)})}return p0.status==="rejected"?Object.assign(Object.assign({},r0),{failedValidators:[...r0.failedValidators,{validatorId:A0,error:p0.reason}]}):r0},{stakedValidators:[],failedValidators:[],total:new bn_js_1$6.default(0)});return Object.assign(Object.assign({},Xu),{total:Xu.total.toString()})})}}account$1.Account=Account;var account_2fa={},account_multisig$1={},constants$4={},__importDefault$5=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(constants$4,"__esModule",{value:!0});constants$4.MULTISIG_CONFIRM_METHODS=constants$4.MULTISIG_CHANGE_METHODS=constants$4.MULTISIG_DEPOSIT=constants$4.MULTISIG_GAS=constants$4.MULTISIG_ALLOWANCE=constants$4.MULTISIG_STORAGE_KEY=void 0;const utils_1$5=lib$9,bn_js_1$5=__importDefault$5(bnExports$1);constants$4.MULTISIG_STORAGE_KEY="__multisigRequest";constants$4.MULTISIG_ALLOWANCE=new bn_js_1$5.default((0,utils_1$5.parseNearAmount)("1"));constants$4.MULTISIG_GAS=new bn_js_1$5.default("100000000000000");constants$4.MULTISIG_DEPOSIT=new bn_js_1$5.default("0");constants$4.MULTISIG_CHANGE_METHODS=["add_request","add_request_and_confirm","delete_request","confirm"];constants$4.MULTISIG_CONFIRM_METHODS=["confirm"];var types$1={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MultisigStateStatus=o.MultisigDeleteRequestRejectionError=void 0,function(a){a.CANNOT_DESERIALIZE_STATE="Cannot deserialize the contract state",a.MULTISIG_NOT_INITIALIZED="Smart contract panicked: Multisig contract should be initialized before usage",a.NO_SUCH_REQUEST="Smart contract panicked: panicked at 'No such request: either wrong number or already confirmed'",a.REQUEST_COOLDOWN_ERROR="Request cannot be deleted immediately after creation.",a.METHOD_NOT_FOUND="Contract method is not found"}(o.MultisigDeleteRequestRejectionError||(o.MultisigDeleteRequestRejectionError={})),function(a){a[a.INVALID_STATE=0]="INVALID_STATE",a[a.STATE_NOT_INITIALIZED=1]="STATE_NOT_INITIALIZED",a[a.VALID_STATE=2]="VALID_STATE",a[a.UNKNOWN_STATE=3]="UNKNOWN_STATE"}(o.MultisigStateStatus||(o.MultisigStateStatus={}))})(types$1);var __awaiter$c=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(account_multisig$1,"__esModule",{value:!0});account_multisig$1.AccountMultisig=void 0;const transactions_1$2=lib$5,utils_1$4=lib$9,account_1=account$1,constants_1$1=constants$4,types_1$3=types$1,{deployContract:deployContract$1,functionCall:functionCall$5}=transactions_1$2.actionCreators;var MultisigCodeStatus;(function(o){o[o.INVALID_CODE=0]="INVALID_CODE",o[o.VALID_CODE=1]="VALID_CODE",o[o.UNKNOWN_CODE=2]="UNKNOWN_CODE"})(MultisigCodeStatus||(MultisigCodeStatus={}));const storageFallback={[constants_1$1.MULTISIG_STORAGE_KEY]:null};class AccountMultisig extends account_1.Account{constructor(a,c,d){super(a,c),this.storage=d.storage,this.onAddRequestResult=d.onAddRequestResult}signAndSendTransactionWithAccount(a,c){const d=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){return d.signAndSendTransaction.call(this,{receiverId:a,actions:c})})}signAndSendTransaction({receiverId:a,actions:c}){const d=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){const{accountId:tt}=this,nt=Buffer$C.from(JSON.stringify({request:{receiver_id:a,actions:convertActions(c,tt,a)}}));let $a;try{$a=yield d.signAndSendTransaction.call(this,{receiverId:tt,actions:[functionCall$5("add_request_and_confirm",nt,constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]})}catch(gu){if(gu.toString().includes("Account has too many active requests. Confirm or delete some"))return yield this.deleteUnconfirmedRequests(),yield this.signAndSendTransaction({receiverId:a,actions:c});throw gu}if(!$a.status)throw new Error("Request failed");const Ws=Object.assign({},$a.status);if(!Ws.SuccessValue||typeof Ws.SuccessValue!="string")throw new Error("Request failed");return this.setRequest({accountId:tt,actions:c,requestId:parseInt(Buffer$C.from(Ws.SuccessValue,"base64").toString("ascii"),10)}),this.onAddRequestResult&&(yield this.onAddRequestResult($a)),this.deleteUnconfirmedRequests(),$a})}checkMultisigCodeAndStateStatus(a){const c=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){const tt=a?MultisigCodeStatus.UNKNOWN_CODE:MultisigCodeStatus.VALID_CODE;try{return a?yield c.signAndSendTransaction.call(this,{receiverId:this.accountId,actions:[deployContract$1(a),functionCall$5("delete_request",{request_id:4294967295},constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]}):yield this.deleteRequest(4294967295),{codeStatus:MultisigCodeStatus.VALID_CODE,stateStatus:types_1$3.MultisigStateStatus.VALID_STATE}}catch(nt){if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.CANNOT_DESERIALIZE_STATE).test(nt&&nt.kind&&nt.kind.ExecutionError))return{codeStatus:tt,stateStatus:types_1$3.MultisigStateStatus.INVALID_STATE};if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.MULTISIG_NOT_INITIALIZED).test(nt&&nt.kind&&nt.kind.ExecutionError))return{codeStatus:tt,stateStatus:types_1$3.MultisigStateStatus.STATE_NOT_INITIALIZED};if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.NO_SUCH_REQUEST).test(nt&&nt.kind&&nt.kind.ExecutionError))return{codeStatus:tt,stateStatus:types_1$3.MultisigStateStatus.VALID_STATE};if(new RegExp(types_1$3.MultisigDeleteRequestRejectionError.METHOD_NOT_FOUND).test(nt&&nt.message))return{codeStatus:MultisigCodeStatus.INVALID_CODE,stateStatus:types_1$3.MultisigStateStatus.UNKNOWN_STATE};throw nt}})}deleteRequest(a){return super.signAndSendTransaction({receiverId:this.accountId,actions:[functionCall$5("delete_request",{request_id:a},constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]})}deleteAllRequests(){return __awaiter$c(this,void 0,void 0,function*(){const a=yield this.getRequestIds();a.length&&(yield Promise.all(a.map(c=>this.deleteRequest(c))))})}deleteUnconfirmedRequests(){const a=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$c(this,void 0,void 0,function*(){const c=yield this.getRequestIds(),{requestId:d}=this.getRequest();for(const tt of c)if(tt!=d)try{yield a.signAndSendTransaction.call(this,{receiverId:this.accountId,actions:[functionCall$5("delete_request",{request_id:tt},constants_1$1.MULTISIG_GAS,constants_1$1.MULTISIG_DEPOSIT)]})}catch{utils_1$4.Logger.warn("Attempt to delete an earlier request before 15 minutes failed. Will try again.")}})}getRequestIds(){return __awaiter$c(this,void 0,void 0,function*(){return this.viewFunction({contractId:this.accountId,methodName:"list_request_ids"})})}getRequest(){return this.storage?JSON.parse(this.storage.getItem(constants_1$1.MULTISIG_STORAGE_KEY)||"{}"):storageFallback[constants_1$1.MULTISIG_STORAGE_KEY]}setRequest(a){if(this.storage)return this.storage.setItem(constants_1$1.MULTISIG_STORAGE_KEY,JSON.stringify(a));storageFallback[constants_1$1.MULTISIG_STORAGE_KEY]=a}}account_multisig$1.AccountMultisig=AccountMultisig;const convertPKForContract=o=>o.toString().replace("ed25519:",""),convertActions=(o,a,c)=>o.map(d=>{const tt=d.enum,{gas:nt,publicKey:$a,methodName:Ws,args:gu,deposit:Su,accessKey:$u,code:Iu}=d[tt],Xu={type:tt[0].toUpperCase()+tt.substr(1),gas:nt&&nt.toString()||void 0,public_key:$a&&convertPKForContract($a)||void 0,method_name:Ws,args:gu&&Buffer$C.from(gu).toString("base64")||void 0,code:Iu&&Buffer$C.from(Iu).toString("base64")||void 0,amount:Su&&Su.toString()||void 0,deposit:Su&&Su.toString()||"0",permission:void 0};if($u&&(c===a&&$u.permission.enum!=="fullAccess"&&(Xu.permission={receiver_id:a,allowance:constants_1$1.MULTISIG_ALLOWANCE.toString(),method_names:constants_1$1.MULTISIG_CHANGE_METHODS}),$u.permission.enum==="functionCall")){const{receiverId:r0,methodNames:p0,allowance:y0}=$u.permission.functionCall;Xu.permission={receiver_id:r0,allowance:y0&&y0.toString()||void 0,method_names:p0}}return Xu});var __awaiter$b=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__importDefault$4=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(account_2fa,"__esModule",{value:!0});account_2fa.Account2FA=void 0;const crypto_1$3=lib$a,types_1$2=lib$8,providers_1$2=lib$6,transactions_1$1=lib$5,utils_1$3=lib$9,bn_js_1$4=__importDefault$4(bnExports$1),account_multisig_1=account_multisig$1,constants_1=constants$4,types_2=types$1,{addKey,deleteKey,deployContract,fullAccessKey,functionCall:functionCall$4,functionCallAccessKey}=transactions_1$1.actionCreators;class Account2FA extends account_multisig_1.AccountMultisig{constructor(a,c,d){super(a,c,d),this.helperUrl="https://helper.testnet.near.org",this.helperUrl=d.helperUrl||this.helperUrl,this.storage=d.storage,this.sendCode=d.sendCode||this.sendCodeDefault,this.getCode=d.getCode||this.getCodeDefault,this.verifyCode=d.verifyCode||this.verifyCodeDefault,this.onConfirmResult=d.onConfirmResult}signAndSendTransaction({receiverId:a,actions:c}){const d=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$b(this,void 0,void 0,function*(){yield d.signAndSendTransaction.call(this,{receiverId:a,actions:c}),yield this.sendCode();const tt=yield this.promptAndVerify();return this.onConfirmResult&&(yield this.onConfirmResult(tt)),tt})}deployMultisig(a){const c=Object.create(null,{signAndSendTransactionWithAccount:{get:()=>super.signAndSendTransactionWithAccount}});return __awaiter$b(this,void 0,void 0,function*(){const{accountId:d}=this,tt=(yield this.getRecoveryMethods()).data.filter(({kind:Iu,publicKey:Xu})=>(Iu==="phrase"||Iu==="ledger")&&Xu!==null).map(Iu=>Iu.publicKey),nt=(yield this.getAccessKeys()).filter(({public_key:Iu,access_key:{permission:Xu}})=>Xu==="FullAccess"&&!tt.includes(Iu)).map(Iu=>Iu.public_key).map(toPK),$a=toPK((yield this.postSignedJson("/2fa/getAccessKey",{accountId:d})).publicKey),Ws=Buffer$C.from(JSON.stringify({num_confirmations:2})),gu=[...nt.map(Iu=>deleteKey(Iu)),...nt.map(Iu=>addKey(Iu,functionCallAccessKey(d,constants_1.MULTISIG_CHANGE_METHODS,null))),addKey($a,functionCallAccessKey(d,constants_1.MULTISIG_CONFIRM_METHODS,null)),deployContract(a)],Su=gu.concat(functionCall$4("new",Ws,constants_1.MULTISIG_GAS,constants_1.MULTISIG_DEPOSIT));utils_1$3.Logger.log("deploying multisig contract for",d);const{stateStatus:$u}=yield this.checkMultisigCodeAndStateStatus(a);switch($u){case types_2.MultisigStateStatus.STATE_NOT_INITIALIZED:return yield c.signAndSendTransactionWithAccount.call(this,d,Su);case types_2.MultisigStateStatus.VALID_STATE:return yield c.signAndSendTransactionWithAccount.call(this,d,gu);case types_2.MultisigStateStatus.INVALID_STATE:throw new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account has existing state.`,"ContractHasExistingState");default:throw new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account state could not be verified.`,"ContractStateUnknown")}})}disableWithFAK({contractBytes:a,cleanupContractBytes:c}){return __awaiter$b(this,void 0,void 0,function*(){let d=[];c&&(yield this.deleteAllRequests().catch(Ws=>Ws),d=yield this.get2faDisableCleanupActions(c));const tt=yield this.get2faDisableKeyConversionActions(),nt=[...d,...tt,deployContract(a)],$a=yield this.findAccessKey(this.accountId,nt);if($a&&$a.accessKey&&$a.accessKey.permission!=="FullAccess")throw new types_1$2.TypedError("No full access key found in keystore. Unable to bypass multisig","NoFAKFound");return this.signAndSendTransactionWithAccount(this.accountId,nt)})}get2faDisableCleanupActions(a){return __awaiter$b(this,void 0,void 0,function*(){const c=yield this.viewState("").catch(tt=>{const nt=tt.cause&&tt.cause.name;if(nt=="NO_CONTRACT_CODE")return[];throw nt=="TOO_LARGE_CONTRACT_STATE"?new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account has existing state.`,"ContractHasExistingState"):tt}),d=c.map(({key:tt})=>tt.toString("base64"));return c.length?[deployContract(a),functionCall$4("clean",{keys:d},constants_1.MULTISIG_GAS,new bn_js_1$4.default("0"))]:[]})}get2faDisableKeyConversionActions(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this,d=(yield this.getAccessKeys()).filter(({access_key:nt})=>nt.permission!=="FullAccess").filter(({access_key:nt})=>{const $a=nt.permission.FunctionCall;return $a.receiver_id===a&&$a.method_names.length===4&&$a.method_names.includes("add_request_and_confirm")}),tt=crypto_1$3.PublicKey.from((yield this.postSignedJson("/2fa/getAccessKey",{accountId:a})).publicKey);return[deleteKey(tt),...d.map(({public_key:nt})=>deleteKey(crypto_1$3.PublicKey.from(nt))),...d.map(({public_key:nt})=>addKey(crypto_1$3.PublicKey.from(nt),fullAccessKey()))]})}disable(a,c){return __awaiter$b(this,void 0,void 0,function*(){const{stateStatus:d}=yield this.checkMultisigCodeAndStateStatus();if(d!==types_2.MultisigStateStatus.VALID_STATE&&d!==types_2.MultisigStateStatus.STATE_NOT_INITIALIZED)throw new types_1$2.TypedError(`Can not deploy a contract to account ${this.accountId} on network ${this.connection.networkId}, the account state could not be verified.`,"ContractStateUnknown");let tt;yield this.deleteAllRequests().catch(Ws=>tt=Ws);const $a=[...yield this.get2faDisableCleanupActions(c).catch(Ws=>{throw Ws.type==="ContractHasExistingState"&&tt||Ws}),...yield this.get2faDisableKeyConversionActions(),deployContract(a)];return utils_1$3.Logger.log("disabling 2fa for",this.accountId),yield this.signAndSendTransaction({receiverId:this.accountId,actions:$a})})}sendCodeDefault(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this,{requestId:c}=this.getRequest(),d=yield this.get2faMethod();return yield this.postSignedJson("/2fa/send",{accountId:a,method:d,requestId:c}),c})}getCodeDefault(){return __awaiter$b(this,void 0,void 0,function*(){throw new Error('There is no getCode callback provided. Please provide your own in AccountMultisig constructor options. It has a parameter method where method.kind is "email" or "phone".')})}promptAndVerify(){return __awaiter$b(this,void 0,void 0,function*(){const a=yield this.get2faMethod(),c=yield this.getCode(a);try{return yield this.verifyCode(c)}catch(d){if(utils_1$3.Logger.warn("Error validating security code:",d),d.toString().includes("invalid 2fa code provided")||d.toString().includes("2fa code not valid"))return yield this.promptAndVerify();throw d}})}verifyCodeDefault(a){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:c}=this,d=this.getRequest();if(!d)throw new Error("no request pending");const{requestId:tt}=d;return yield this.postSignedJson("/2fa/verify",{accountId:c,securityCode:a,requestId:tt})})}getRecoveryMethods(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this;return{accountId:a,data:yield this.postSignedJson("/account/recoveryMethods",{accountId:a})}})}get2faMethod(){return __awaiter$b(this,void 0,void 0,function*(){let{data:a}=yield this.getRecoveryMethods();if(a&&a.length&&(a=a.find(tt=>tt.kind.indexOf("2fa-")===0)),!a)return null;const{kind:c,detail:d}=a;return{kind:c,detail:d}})}signatureFor(){return __awaiter$b(this,void 0,void 0,function*(){const{accountId:a}=this,d=(yield this.connection.provider.block({finality:"final"})).header.height.toString(),tt=yield this.connection.signer.signMessage(Buffer$C.from(d),a,this.connection.networkId),nt=Buffer$C.from(tt.signature).toString("base64");return{blockNumber:d,blockNumberSignature:nt}})}postSignedJson(a,c){return __awaiter$b(this,void 0,void 0,function*(){return yield(0,providers_1$2.fetchJson)(this.helperUrl+a,JSON.stringify(Object.assign(Object.assign({},c),yield this.signatureFor())))})}}account_2fa.Account2FA=Account2FA;const toPK=o=>crypto_1$3.PublicKey.from(o);var account_creator$1={},__awaiter$a=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(account_creator$1,"__esModule",{value:!0});account_creator$1.UrlAccountCreator=account_creator$1.LocalAccountCreator=account_creator$1.AccountCreator=void 0;const providers_1$1=lib$6;class AccountCreator{}account_creator$1.AccountCreator=AccountCreator;class LocalAccountCreator extends AccountCreator{constructor(a,c){super(),this.masterAccount=a,this.initialBalance=c}createAccount(a,c){return __awaiter$a(this,void 0,void 0,function*(){yield this.masterAccount.createAccount(a,c,this.initialBalance)})}}account_creator$1.LocalAccountCreator=LocalAccountCreator;class UrlAccountCreator extends AccountCreator{constructor(a,c){super(),this.connection=a,this.helperUrl=c}createAccount(a,c){return __awaiter$a(this,void 0,void 0,function*(){yield(0,providers_1$1.fetchJson)(`${this.helperUrl}/account`,JSON.stringify({newAccountId:a,newAccountPublicKey:c.toString()}))})}}account_creator$1.UrlAccountCreator=UrlAccountCreator;var connection$1={},lib$3={},in_memory_signer={},signer$1={};Object.defineProperty(signer$1,"__esModule",{value:!0});signer$1.Signer=void 0;class Signer{}signer$1.Signer=Signer;var __awaiter$9=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(in_memory_signer,"__esModule",{value:!0});in_memory_signer.InMemorySigner=void 0;const crypto_1$2=lib$a,keystores_1=lib$b,sha256_1=sha256$4,signer_1=signer$1;class InMemorySigner extends signer_1.Signer{constructor(a){super(),this.keyStore=a}static fromKeyPair(a,c,d){return __awaiter$9(this,void 0,void 0,function*(){const tt=new keystores_1.InMemoryKeyStore;return yield tt.setKey(a,c,d),new InMemorySigner(tt)})}createKey(a,c){return __awaiter$9(this,void 0,void 0,function*(){const d=crypto_1$2.KeyPair.fromRandom("ed25519");return yield this.keyStore.setKey(c,a,d),d.getPublicKey()})}getPublicKey(a,c){return __awaiter$9(this,void 0,void 0,function*(){const d=yield this.keyStore.getKey(c,a);return d===null?null:d.getPublicKey()})}signMessage(a,c,d){return __awaiter$9(this,void 0,void 0,function*(){const tt=new Uint8Array((0,sha256_1.sha256)(a));if(!c)throw new Error("InMemorySigner requires provided account id");const nt=yield this.keyStore.getKey(d,c);if(nt===null)throw new Error(`Key for ${c} not found in ${d}`);return nt.sign(tt)})}toString(){return`InMemorySigner(${this.keyStore})`}}in_memory_signer.InMemorySigner=InMemorySigner;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Signer=o.InMemorySigner=void 0;var a=in_memory_signer;Object.defineProperty(o,"InMemorySigner",{enumerable:!0,get:function(){return a.InMemorySigner}});var c=signer$1;Object.defineProperty(o,"Signer",{enumerable:!0,get:function(){return c.Signer}})})(lib$3);Object.defineProperty(connection$1,"__esModule",{value:!0});connection$1.Connection=void 0;const signers_1=lib$3,providers_1=lib$6;function getProvider(o){switch(o.type){case void 0:return o;case"JsonRpcProvider":return new providers_1.JsonRpcProvider(Object.assign({},o.args));default:throw new Error(`Unknown provider type ${o.type}`)}}function getSigner(o){switch(o.type){case void 0:return o;case"InMemorySigner":return new signers_1.InMemorySigner(o.keyStore);default:throw new Error(`Unknown signer type ${o.type}`)}}class Connection{constructor(a,c,d,tt){this.networkId=a,this.provider=c,this.signer=d,this.jsvmAccountId=tt}static fromConfig(a){const c=getProvider(a.provider),d=getSigner(a.signer);return new Connection(a.networkId,c,d,a.jsvmAccountId)}}connection$1.Connection=Connection;var contract$1={},localViewExecution={},storage={},lru={exports:{}};(function(o,a){(function(c,d){d(a)})(commonjsGlobal$4,function(c){const d=Symbol("newer"),tt=Symbol("older");class nt{constructor(Iu,Xu){typeof Iu!="number"&&(Xu=Iu,Iu=0),this.size=0,this.limit=Iu,this.oldest=this.newest=void 0,this._keymap=new Map,Xu&&(this.assign(Xu),Iu<1&&(this.limit=this.size))}_markEntryAsUsed(Iu){Iu!==this.newest&&(Iu[d]&&(Iu===this.oldest&&(this.oldest=Iu[d]),Iu[d][tt]=Iu[tt]),Iu[tt]&&(Iu[tt][d]=Iu[d]),Iu[d]=void 0,Iu[tt]=this.newest,this.newest&&(this.newest[d]=Iu),this.newest=Iu)}assign(Iu){let Xu,r0=this.limit||Number.MAX_VALUE;this._keymap.clear();let p0=Iu[Symbol.iterator]();for(let y0=p0.next();!y0.done;y0=p0.next()){let A0=new $a(y0.value[0],y0.value[1]);if(this._keymap.set(A0.key,A0),Xu?(Xu[d]=A0,A0[tt]=Xu):this.oldest=A0,Xu=A0,r0--==0)throw new Error("overflow")}this.newest=Xu,this.size=this._keymap.size}get(Iu){var Xu=this._keymap.get(Iu);return Xu?(this._markEntryAsUsed(Xu),Xu.value):void 0}set(Iu,Xu){var r0=this._keymap.get(Iu);return r0?(r0.value=Xu,this._markEntryAsUsed(r0),this):(this._keymap.set(Iu,r0=new $a(Iu,Xu)),this.newest?(this.newest[d]=r0,r0[tt]=this.newest):this.oldest=r0,this.newest=r0,++this.size,this.size>this.limit&&this.shift(),this)}shift(){var Iu=this.oldest;if(Iu)return this.oldest[d]?(this.oldest=this.oldest[d],this.oldest[tt]=void 0):(this.oldest=void 0,this.newest=void 0),Iu[d]=Iu[tt]=void 0,this._keymap.delete(Iu.key),--this.size,[Iu.key,Iu.value]}find(Iu){let Xu=this._keymap.get(Iu);return Xu?Xu.value:void 0}has(Iu){return this._keymap.has(Iu)}delete(Iu){var Xu=this._keymap.get(Iu);return Xu?(this._keymap.delete(Xu.key),Xu[d]&&Xu[tt]?(Xu[tt][d]=Xu[d],Xu[d][tt]=Xu[tt]):Xu[d]?(Xu[d][tt]=void 0,this.oldest=Xu[d]):Xu[tt]?(Xu[tt][d]=void 0,this.newest=Xu[tt]):this.oldest=this.newest=void 0,this.size--,Xu.value):void 0}clear(){this.oldest=this.newest=void 0,this.size=0,this._keymap.clear()}keys(){return new gu(this.oldest)}values(){return new Su(this.oldest)}entries(){return this}[Symbol.iterator](){return new Ws(this.oldest)}forEach(Iu,Xu){typeof Xu!="object"&&(Xu=this);let r0=this.oldest;for(;r0;)Iu.call(Xu,r0.value,r0.key,this),r0=r0[d]}toJSON(){for(var Iu=new Array(this.size),Xu=0,r0=this.oldest;r0;)Iu[Xu++]={key:r0.key,value:r0.value},r0=r0[d];return Iu}toString(){for(var Iu="",Xu=this.oldest;Xu;)Iu+=String(Xu.key)+":"+Xu.value,Xu=Xu[d],Xu&&(Iu+=" < ");return Iu}}c.LRUMap=nt;function $a($u,Iu){this.key=$u,this.value=Iu,this[d]=void 0,this[tt]=void 0}function Ws($u){this.entry=$u}Ws.prototype[Symbol.iterator]=function(){return this},Ws.prototype.next=function(){let $u=this.entry;return $u?(this.entry=$u[d],{done:!1,value:[$u.key,$u.value]}):{done:!0,value:void 0}};function gu($u){this.entry=$u}gu.prototype[Symbol.iterator]=function(){return this},gu.prototype.next=function(){let $u=this.entry;return $u?(this.entry=$u[d],{done:!1,value:$u.key}):{done:!0,value:void 0}};function Su($u){this.entry=$u}Su.prototype[Symbol.iterator]=function(){return this},Su.prototype.next=function(){let $u=this.entry;return $u?(this.entry=$u[d],{done:!1,value:$u.value}):{done:!0,value:void 0}}})})(lru,lru.exports);var lruExports=lru.exports;Object.defineProperty(storage,"__esModule",{value:!0});storage.Storage=void 0;const lru_map_1=lruExports;class Storage{constructor(a={max:Storage.MAX_ELEMENTS}){this.cache=new lru_map_1.LRUMap(a.max),this.blockHeights=new Map}load(a){if(!("blockId"in a))return;let d=a.blockId;return d.toString().length==44&&(d=this.blockHeights.get(d.toString())),this.cache.get(d)}save(a,{blockHeight:c,blockTimestamp:d,contractCode:tt,contractState:nt}){this.blockHeights.set(a,c),this.cache.set(c,{blockHeight:c,blockTimestamp:d,contractCode:tt,contractState:nt})}}storage.Storage=Storage;Storage.MAX_ELEMENTS=100;var runtime={},cryptoBrowserify={},Buffer$y=safeBufferExports$1.Buffer,Transform$7=readableBrowserExports$1.Transform,inherits$q=inherits_browserExports;function throwIfNotStringOrBuffer(o,a){if(!Buffer$y.isBuffer(o)&&typeof o!="string")throw new TypeError(a+" must be a string or a buffer")}function HashBase$2(o){Transform$7.call(this),this._block=Buffer$y.allocUnsafe(o),this._blockSize=o,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}inherits$q(HashBase$2,Transform$7);HashBase$2.prototype._transform=function(o,a,c){var d=null;try{this.update(o,a)}catch(tt){d=tt}c(d)};HashBase$2.prototype._flush=function(o){var a=null;try{this.push(this.digest())}catch(c){a=c}o(a)};HashBase$2.prototype.update=function(o,a){if(throwIfNotStringOrBuffer(o,"Data"),this._finalized)throw new Error("Digest already called");Buffer$y.isBuffer(o)||(o=Buffer$y.from(o,a));for(var c=this._block,d=0;this._blockOffset+o.length-d>=this._blockSize;){for(var tt=this._blockOffset;tt0;++nt)this._length[nt]+=$a,$a=this._length[nt]/4294967296|0,$a>0&&(this._length[nt]-=4294967296*$a);return this};HashBase$2.prototype._update=function(){throw new Error("_update is not implemented")};HashBase$2.prototype.digest=function(o){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var a=this._digest();o!==void 0&&(a=a.toString(o)),this._block.fill(0),this._blockOffset=0;for(var c=0;c<4;++c)this._length[c]=0;return a};HashBase$2.prototype._digest=function(){throw new Error("_digest is not implemented")};var hashBase=HashBase$2,inherits$p=inherits_browserExports,HashBase$1=hashBase,Buffer$x=safeBufferExports$1.Buffer,ARRAY16$1=new Array(16);function MD5$3(){HashBase$1.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}inherits$p(MD5$3,HashBase$1);MD5$3.prototype._update=function(){for(var o=ARRAY16$1,a=0;a<16;++a)o[a]=this._block.readInt32LE(a*4);var c=this._a,d=this._b,tt=this._c,nt=this._d;c=fnF(c,d,tt,nt,o[0],3614090360,7),nt=fnF(nt,c,d,tt,o[1],3905402710,12),tt=fnF(tt,nt,c,d,o[2],606105819,17),d=fnF(d,tt,nt,c,o[3],3250441966,22),c=fnF(c,d,tt,nt,o[4],4118548399,7),nt=fnF(nt,c,d,tt,o[5],1200080426,12),tt=fnF(tt,nt,c,d,o[6],2821735955,17),d=fnF(d,tt,nt,c,o[7],4249261313,22),c=fnF(c,d,tt,nt,o[8],1770035416,7),nt=fnF(nt,c,d,tt,o[9],2336552879,12),tt=fnF(tt,nt,c,d,o[10],4294925233,17),d=fnF(d,tt,nt,c,o[11],2304563134,22),c=fnF(c,d,tt,nt,o[12],1804603682,7),nt=fnF(nt,c,d,tt,o[13],4254626195,12),tt=fnF(tt,nt,c,d,o[14],2792965006,17),d=fnF(d,tt,nt,c,o[15],1236535329,22),c=fnG(c,d,tt,nt,o[1],4129170786,5),nt=fnG(nt,c,d,tt,o[6],3225465664,9),tt=fnG(tt,nt,c,d,o[11],643717713,14),d=fnG(d,tt,nt,c,o[0],3921069994,20),c=fnG(c,d,tt,nt,o[5],3593408605,5),nt=fnG(nt,c,d,tt,o[10],38016083,9),tt=fnG(tt,nt,c,d,o[15],3634488961,14),d=fnG(d,tt,nt,c,o[4],3889429448,20),c=fnG(c,d,tt,nt,o[9],568446438,5),nt=fnG(nt,c,d,tt,o[14],3275163606,9),tt=fnG(tt,nt,c,d,o[3],4107603335,14),d=fnG(d,tt,nt,c,o[8],1163531501,20),c=fnG(c,d,tt,nt,o[13],2850285829,5),nt=fnG(nt,c,d,tt,o[2],4243563512,9),tt=fnG(tt,nt,c,d,o[7],1735328473,14),d=fnG(d,tt,nt,c,o[12],2368359562,20),c=fnH(c,d,tt,nt,o[5],4294588738,4),nt=fnH(nt,c,d,tt,o[8],2272392833,11),tt=fnH(tt,nt,c,d,o[11],1839030562,16),d=fnH(d,tt,nt,c,o[14],4259657740,23),c=fnH(c,d,tt,nt,o[1],2763975236,4),nt=fnH(nt,c,d,tt,o[4],1272893353,11),tt=fnH(tt,nt,c,d,o[7],4139469664,16),d=fnH(d,tt,nt,c,o[10],3200236656,23),c=fnH(c,d,tt,nt,o[13],681279174,4),nt=fnH(nt,c,d,tt,o[0],3936430074,11),tt=fnH(tt,nt,c,d,o[3],3572445317,16),d=fnH(d,tt,nt,c,o[6],76029189,23),c=fnH(c,d,tt,nt,o[9],3654602809,4),nt=fnH(nt,c,d,tt,o[12],3873151461,11),tt=fnH(tt,nt,c,d,o[15],530742520,16),d=fnH(d,tt,nt,c,o[2],3299628645,23),c=fnI(c,d,tt,nt,o[0],4096336452,6),nt=fnI(nt,c,d,tt,o[7],1126891415,10),tt=fnI(tt,nt,c,d,o[14],2878612391,15),d=fnI(d,tt,nt,c,o[5],4237533241,21),c=fnI(c,d,tt,nt,o[12],1700485571,6),nt=fnI(nt,c,d,tt,o[3],2399980690,10),tt=fnI(tt,nt,c,d,o[10],4293915773,15),d=fnI(d,tt,nt,c,o[1],2240044497,21),c=fnI(c,d,tt,nt,o[8],1873313359,6),nt=fnI(nt,c,d,tt,o[15],4264355552,10),tt=fnI(tt,nt,c,d,o[6],2734768916,15),d=fnI(d,tt,nt,c,o[13],1309151649,21),c=fnI(c,d,tt,nt,o[4],4149444226,6),nt=fnI(nt,c,d,tt,o[11],3174756917,10),tt=fnI(tt,nt,c,d,o[2],718787259,15),d=fnI(d,tt,nt,c,o[9],3951481745,21),this._a=this._a+c|0,this._b=this._b+d|0,this._c=this._c+tt|0,this._d=this._d+nt|0};MD5$3.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var o=Buffer$x.allocUnsafe(16);return o.writeInt32LE(this._a,0),o.writeInt32LE(this._b,4),o.writeInt32LE(this._c,8),o.writeInt32LE(this._d,12),o};function rotl$1(o,a){return o<>>32-a}function fnF(o,a,c,d,tt,nt,$a){return rotl$1(o+(a&c|~a&d)+tt+nt|0,$a)+a|0}function fnG(o,a,c,d,tt,nt,$a){return rotl$1(o+(a&d|c&~d)+tt+nt|0,$a)+a|0}function fnH(o,a,c,d,tt,nt,$a){return rotl$1(o+(a^c^d)+tt+nt|0,$a)+a|0}function fnI(o,a,c,d,tt,nt,$a){return rotl$1(o+(c^(a|~d))+tt+nt|0,$a)+a|0}var md5_js=MD5$3,Buffer$w=require$$1$4.Buffer,inherits$o=inherits_browserExports,HashBase=hashBase,ARRAY16=new Array(16),zl$1=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],zr$1=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],sl$2=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],sr$2=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],hl$1=[0,1518500249,1859775393,2400959708,2840853838],hr$2=[1352829926,1548603684,1836072691,2053994217,0];function RIPEMD160$4(){HashBase.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}inherits$o(RIPEMD160$4,HashBase);RIPEMD160$4.prototype._update=function(){for(var o=ARRAY16,a=0;a<16;++a)o[a]=this._block.readInt32LE(a*4);for(var c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ws=this._a|0,gu=this._b|0,Su=this._c|0,$u=this._d|0,Iu=this._e|0,Xu=0;Xu<80;Xu+=1){var r0,p0;Xu<16?(r0=fn1(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[0],sl$2[Xu]),p0=fn5(Ws,gu,Su,$u,Iu,o[zr$1[Xu]],hr$2[0],sr$2[Xu])):Xu<32?(r0=fn2(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[1],sl$2[Xu]),p0=fn4(Ws,gu,Su,$u,Iu,o[zr$1[Xu]],hr$2[1],sr$2[Xu])):Xu<48?(r0=fn3(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[2],sl$2[Xu]),p0=fn3(Ws,gu,Su,$u,Iu,o[zr$1[Xu]],hr$2[2],sr$2[Xu])):Xu<64?(r0=fn4(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[3],sl$2[Xu]),p0=fn2(Ws,gu,Su,$u,Iu,o[zr$1[Xu]],hr$2[3],sr$2[Xu])):(r0=fn5(c,d,tt,nt,$a,o[zl$1[Xu]],hl$1[4],sl$2[Xu]),p0=fn1(Ws,gu,Su,$u,Iu,o[zr$1[Xu]],hr$2[4],sr$2[Xu])),c=$a,$a=nt,nt=rotl(tt,10),tt=d,d=r0,Ws=Iu,Iu=$u,$u=rotl(Su,10),Su=gu,gu=p0}var y0=this._b+tt+$u|0;this._b=this._c+nt+Iu|0,this._c=this._d+$a+Ws|0,this._d=this._e+c+gu|0,this._e=this._a+d+Su|0,this._a=y0};RIPEMD160$4.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var o=Buffer$w.alloc?Buffer$w.alloc(20):new Buffer$w(20);return o.writeInt32LE(this._a,0),o.writeInt32LE(this._b,4),o.writeInt32LE(this._c,8),o.writeInt32LE(this._d,12),o.writeInt32LE(this._e,16),o};function rotl(o,a){return o<>>32-a}function fn1(o,a,c,d,tt,nt,$a,Ws){return rotl(o+(a^c^d)+nt+$a|0,Ws)+tt|0}function fn2(o,a,c,d,tt,nt,$a,Ws){return rotl(o+(a&c|~a&d)+nt+$a|0,Ws)+tt|0}function fn3(o,a,c,d,tt,nt,$a,Ws){return rotl(o+((a|~c)^d)+nt+$a|0,Ws)+tt|0}function fn4(o,a,c,d,tt,nt,$a,Ws){return rotl(o+(a&d|c&~d)+nt+$a|0,Ws)+tt|0}function fn5(o,a,c,d,tt,nt,$a,Ws){return rotl(o+(a^(c|~d))+nt+$a|0,Ws)+tt|0}var ripemd160=RIPEMD160$4,sha_js={exports:{}},Buffer$v=safeBufferExports$1.Buffer;function Hash$8(o,a){this._block=Buffer$v.alloc(o),this._finalSize=a,this._blockSize=o,this._len=0}Hash$8.prototype.update=function(o,a){typeof o=="string"&&(a=a||"utf8",o=Buffer$v.from(o,a));for(var c=this._block,d=this._blockSize,tt=o.length,nt=this._len,$a=0;$a=this._finalSize&&(this._update(this._block),this._block.fill(0));var c=this._len*8;if(c<=4294967295)this._block.writeUInt32BE(c,this._blockSize-4);else{var d=(c&4294967295)>>>0,tt=(c-d)/4294967296;this._block.writeUInt32BE(tt,this._blockSize-8),this._block.writeUInt32BE(d,this._blockSize-4)}this._update(this._block);var nt=this._hash();return o?nt.toString(o):nt};Hash$8.prototype._update=function(){throw new Error("_update must be implemented by subclass")};var hash$4=Hash$8,inherits$n=inherits_browserExports,Hash$7=hash$4,Buffer$u=safeBufferExports$1.Buffer,K$5=[1518500249,1859775393,-1894007588,-899497514],W$6=new Array(80);function Sha(){this.init(),this._w=W$6,Hash$7.call(this,64,56)}inherits$n(Sha,Hash$7);Sha.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function rotl5$1(o){return o<<5|o>>>27}function rotl30$1(o){return o<<30|o>>>2}function ft$2(o,a,c,d){return o===0?a&c|~a&d:o===2?a&c|a&d|c&d:a^c^d}Sha.prototype._update=function(o){for(var a=this._w,c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ws=0;Ws<16;++Ws)a[Ws]=o.readInt32BE(Ws*4);for(;Ws<80;++Ws)a[Ws]=a[Ws-3]^a[Ws-8]^a[Ws-14]^a[Ws-16];for(var gu=0;gu<80;++gu){var Su=~~(gu/20),$u=rotl5$1(c)+ft$2(Su,d,tt,nt)+$a+a[gu]+K$5[Su]|0;$a=nt,nt=tt,tt=rotl30$1(d),d=c,c=$u}this._a=c+this._a|0,this._b=d+this._b|0,this._c=tt+this._c|0,this._d=nt+this._d|0,this._e=$a+this._e|0};Sha.prototype._hash=function(){var o=Buffer$u.allocUnsafe(20);return o.writeInt32BE(this._a|0,0),o.writeInt32BE(this._b|0,4),o.writeInt32BE(this._c|0,8),o.writeInt32BE(this._d|0,12),o.writeInt32BE(this._e|0,16),o};var sha$4=Sha,inherits$m=inherits_browserExports,Hash$6=hash$4,Buffer$t=safeBufferExports$1.Buffer,K$4=[1518500249,1859775393,-1894007588,-899497514],W$5=new Array(80);function Sha1(){this.init(),this._w=W$5,Hash$6.call(this,64,56)}inherits$m(Sha1,Hash$6);Sha1.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function rotl1(o){return o<<1|o>>>31}function rotl5(o){return o<<5|o>>>27}function rotl30(o){return o<<30|o>>>2}function ft$1(o,a,c,d){return o===0?a&c|~a&d:o===2?a&c|a&d|c&d:a^c^d}Sha1.prototype._update=function(o){for(var a=this._w,c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ws=0;Ws<16;++Ws)a[Ws]=o.readInt32BE(Ws*4);for(;Ws<80;++Ws)a[Ws]=rotl1(a[Ws-3]^a[Ws-8]^a[Ws-14]^a[Ws-16]);for(var gu=0;gu<80;++gu){var Su=~~(gu/20),$u=rotl5(c)+ft$1(Su,d,tt,nt)+$a+a[gu]+K$4[Su]|0;$a=nt,nt=tt,tt=rotl30(d),d=c,c=$u}this._a=c+this._a|0,this._b=d+this._b|0,this._c=tt+this._c|0,this._d=nt+this._d|0,this._e=$a+this._e|0};Sha1.prototype._hash=function(){var o=Buffer$t.allocUnsafe(20);return o.writeInt32BE(this._a|0,0),o.writeInt32BE(this._b|0,4),o.writeInt32BE(this._c|0,8),o.writeInt32BE(this._d|0,12),o.writeInt32BE(this._e|0,16),o};var sha1=Sha1,inherits$l=inherits_browserExports,Hash$5=hash$4,Buffer$s=safeBufferExports$1.Buffer,K$3=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],W$4=new Array(64);function Sha256$1(){this.init(),this._w=W$4,Hash$5.call(this,64,56)}inherits$l(Sha256$1,Hash$5);Sha256$1.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this};function ch$1(o,a,c){return c^o&(a^c)}function maj$1(o,a,c){return o&a|c&(o|a)}function sigma0$1(o){return(o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10)}function sigma1$1(o){return(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7)}function gamma0(o){return(o>>>7|o<<25)^(o>>>18|o<<14)^o>>>3}function gamma1(o){return(o>>>17|o<<15)^(o>>>19|o<<13)^o>>>10}Sha256$1.prototype._update=function(o){for(var a=this._w,c=this._a|0,d=this._b|0,tt=this._c|0,nt=this._d|0,$a=this._e|0,Ws=this._f|0,gu=this._g|0,Su=this._h|0,$u=0;$u<16;++$u)a[$u]=o.readInt32BE($u*4);for(;$u<64;++$u)a[$u]=gamma1(a[$u-2])+a[$u-7]+gamma0(a[$u-15])+a[$u-16]|0;for(var Iu=0;Iu<64;++Iu){var Xu=Su+sigma1$1($a)+ch$1($a,Ws,gu)+K$3[Iu]+a[Iu]|0,r0=sigma0$1(c)+maj$1(c,d,tt)|0;Su=gu,gu=Ws,Ws=$a,$a=nt+Xu|0,nt=tt,tt=d,d=c,c=Xu+r0|0}this._a=c+this._a|0,this._b=d+this._b|0,this._c=tt+this._c|0,this._d=nt+this._d|0,this._e=$a+this._e|0,this._f=Ws+this._f|0,this._g=gu+this._g|0,this._h=Su+this._h|0};Sha256$1.prototype._hash=function(){var o=Buffer$s.allocUnsafe(32);return o.writeInt32BE(this._a,0),o.writeInt32BE(this._b,4),o.writeInt32BE(this._c,8),o.writeInt32BE(this._d,12),o.writeInt32BE(this._e,16),o.writeInt32BE(this._f,20),o.writeInt32BE(this._g,24),o.writeInt32BE(this._h,28),o};var sha256$3=Sha256$1,inherits$k=inherits_browserExports,Sha256=sha256$3,Hash$4=hash$4,Buffer$r=safeBufferExports$1.Buffer,W$3=new Array(64);function Sha224(){this.init(),this._w=W$3,Hash$4.call(this,64,56)}inherits$k(Sha224,Sha256);Sha224.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this};Sha224.prototype._hash=function(){var o=Buffer$r.allocUnsafe(28);return o.writeInt32BE(this._a,0),o.writeInt32BE(this._b,4),o.writeInt32BE(this._c,8),o.writeInt32BE(this._d,12),o.writeInt32BE(this._e,16),o.writeInt32BE(this._f,20),o.writeInt32BE(this._g,24),o};var sha224$1=Sha224,inherits$j=inherits_browserExports,Hash$3=hash$4,Buffer$q=safeBufferExports$1.Buffer,K$2=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],W$2=new Array(160);function Sha512(){this.init(),this._w=W$2,Hash$3.call(this,128,112)}inherits$j(Sha512,Hash$3);Sha512.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this};function Ch$1(o,a,c){return c^o&(a^c)}function maj(o,a,c){return o&a|c&(o|a)}function sigma0(o,a){return(o>>>28|a<<4)^(a>>>2|o<<30)^(a>>>7|o<<25)}function sigma1(o,a){return(o>>>14|a<<18)^(o>>>18|a<<14)^(a>>>9|o<<23)}function Gamma0(o,a){return(o>>>1|a<<31)^(o>>>8|a<<24)^o>>>7}function Gamma0l(o,a){return(o>>>1|a<<31)^(o>>>8|a<<24)^(o>>>7|a<<25)}function Gamma1(o,a){return(o>>>19|a<<13)^(a>>>29|o<<3)^o>>>6}function Gamma1l(o,a){return(o>>>19|a<<13)^(a>>>29|o<<3)^(o>>>6|a<<26)}function getCarry(o,a){return o>>>0>>0?1:0}Sha512.prototype._update=function(o){for(var a=this._w,c=this._ah|0,d=this._bh|0,tt=this._ch|0,nt=this._dh|0,$a=this._eh|0,Ws=this._fh|0,gu=this._gh|0,Su=this._hh|0,$u=this._al|0,Iu=this._bl|0,Xu=this._cl|0,r0=this._dl|0,p0=this._el|0,y0=this._fl|0,A0=this._gl|0,$0=this._hl|0,O0=0;O0<32;O0+=2)a[O0]=o.readInt32BE(O0*4),a[O0+1]=o.readInt32BE(O0*4+4);for(;O0<160;O0+=2){var L0=a[O0-30],V0=a[O0-15*2+1],F0=Gamma0(L0,V0),u1=Gamma0l(V0,L0);L0=a[O0-2*2],V0=a[O0-2*2+1];var g1=Gamma1(L0,V0),E1=Gamma1l(V0,L0),B1=a[O0-7*2],lv=a[O0-7*2+1],j1=a[O0-16*2],r1=a[O0-16*2+1],t1=u1+lv|0,D0=F0+B1+getCarry(t1,u1)|0;t1=t1+E1|0,D0=D0+g1+getCarry(t1,E1)|0,t1=t1+r1|0,D0=D0+j1+getCarry(t1,r1)|0,a[O0]=D0,a[O0+1]=t1}for(var Z0=0;Z0<160;Z0+=2){D0=a[Z0],t1=a[Z0+1];var f1=maj(c,d,tt),w1=maj($u,Iu,Xu),m1=sigma0(c,$u),c1=sigma0($u,c),G0=sigma1($a,p0),o1=sigma1(p0,$a),d1=K$2[Z0],R1=K$2[Z0+1],O1=Ch$1($a,Ws,gu),Q1=Ch$1(p0,y0,A0),rv=$0+o1|0,D1=Su+G0+getCarry(rv,$0)|0;rv=rv+Q1|0,D1=D1+O1+getCarry(rv,Q1)|0,rv=rv+R1|0,D1=D1+d1+getCarry(rv,R1)|0,rv=rv+t1|0,D1=D1+D0+getCarry(rv,t1)|0;var ev=c1+w1|0,Mv=m1+f1+getCarry(ev,c1)|0;Su=gu,$0=A0,gu=Ws,A0=y0,Ws=$a,y0=p0,p0=r0+rv|0,$a=nt+D1+getCarry(p0,r0)|0,nt=tt,r0=Xu,tt=d,Xu=Iu,d=c,Iu=$u,$u=rv+ev|0,c=D1+Mv+getCarry($u,rv)|0}this._al=this._al+$u|0,this._bl=this._bl+Iu|0,this._cl=this._cl+Xu|0,this._dl=this._dl+r0|0,this._el=this._el+p0|0,this._fl=this._fl+y0|0,this._gl=this._gl+A0|0,this._hl=this._hl+$0|0,this._ah=this._ah+c+getCarry(this._al,$u)|0,this._bh=this._bh+d+getCarry(this._bl,Iu)|0,this._ch=this._ch+tt+getCarry(this._cl,Xu)|0,this._dh=this._dh+nt+getCarry(this._dl,r0)|0,this._eh=this._eh+$a+getCarry(this._el,p0)|0,this._fh=this._fh+Ws+getCarry(this._fl,y0)|0,this._gh=this._gh+gu+getCarry(this._gl,A0)|0,this._hh=this._hh+Su+getCarry(this._hl,$0)|0};Sha512.prototype._hash=function(){var o=Buffer$q.allocUnsafe(64);function a(c,d,tt){o.writeInt32BE(c,tt),o.writeInt32BE(d,tt+4)}return a(this._ah,this._al,0),a(this._bh,this._bl,8),a(this._ch,this._cl,16),a(this._dh,this._dl,24),a(this._eh,this._el,32),a(this._fh,this._fl,40),a(this._gh,this._gl,48),a(this._hh,this._hl,56),o};var sha512$1=Sha512,inherits$i=inherits_browserExports,SHA512$2=sha512$1,Hash$2=hash$4,Buffer$p=safeBufferExports$1.Buffer,W$1=new Array(160);function Sha384(){this.init(),this._w=W$1,Hash$2.call(this,128,112)}inherits$i(Sha384,SHA512$2);Sha384.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this};Sha384.prototype._hash=function(){var o=Buffer$p.allocUnsafe(48);function a(c,d,tt){o.writeInt32BE(c,tt),o.writeInt32BE(d,tt+4)}return a(this._ah,this._al,0),a(this._bh,this._bl,8),a(this._ch,this._cl,16),a(this._dh,this._dl,24),a(this._eh,this._el,32),a(this._fh,this._fl,40),o};var sha384$1=Sha384,exports=sha_js.exports=function(a){a=a.toLowerCase();var c=exports[a];if(!c)throw new Error(a+" is not supported (we accept pull requests)");return new c};exports.sha=sha$4;exports.sha1=sha1;exports.sha224=sha224$1;exports.sha256=sha256$3;exports.sha384=sha384$1;exports.sha512=sha512$1;var sha_jsExports=sha_js.exports,streamBrowserify=Stream$1,EE=eventsExports.EventEmitter,inherits$h=inherits_browserExports;inherits$h(Stream$1,EE);Stream$1.Readable=require_stream_readable$1();Stream$1.Writable=require_stream_writable$1();Stream$1.Duplex=require_stream_duplex$1();Stream$1.Transform=require_stream_transform();Stream$1.PassThrough=require_stream_passthrough();Stream$1.finished=requireEndOfStream();Stream$1.pipeline=requirePipeline();Stream$1.Stream=Stream$1;function Stream$1(){EE.call(this)}Stream$1.prototype.pipe=function(o,a){var c=this;function d($u){o.writable&&o.write($u)===!1&&c.pause&&c.pause()}c.on("data",d);function tt(){c.readable&&c.resume&&c.resume()}o.on("drain",tt),!o._isStdio&&(!a||a.end!==!1)&&(c.on("end",$a),c.on("close",Ws));var nt=!1;function $a(){nt||(nt=!0,o.end())}function Ws(){nt||(nt=!0,typeof o.destroy=="function"&&o.destroy())}function gu($u){if(Su(),EE.listenerCount(this,"error")===0)throw $u}c.on("error",gu),o.on("error",gu);function Su(){c.removeListener("data",d),o.removeListener("drain",tt),c.removeListener("end",$a),c.removeListener("close",Ws),c.removeListener("error",gu),o.removeListener("error",gu),c.removeListener("end",Su),c.removeListener("close",Su),o.removeListener("close",Su)}return c.on("end",Su),c.on("close",Su),o.on("close",Su),o.emit("pipe",c),o};var Buffer$o=safeBufferExports$1.Buffer,Transform$6=streamBrowserify.Transform,StringDecoder=string_decoder.StringDecoder,inherits$g=inherits_browserExports;function CipherBase$1(o){Transform$6.call(this),this.hashMode=typeof o=="string",this.hashMode?this[o]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}inherits$g(CipherBase$1,Transform$6);CipherBase$1.prototype.update=function(o,a,c){typeof o=="string"&&(o=Buffer$o.from(o,a));var d=this._update(o);return this.hashMode?this:(c&&(d=this._toString(d,c)),d)};CipherBase$1.prototype.setAutoPadding=function(){};CipherBase$1.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")};CipherBase$1.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")};CipherBase$1.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")};CipherBase$1.prototype._transform=function(o,a,c){var d;try{this.hashMode?this._update(o):this.push(this._update(o))}catch(tt){d=tt}finally{c(d)}};CipherBase$1.prototype._flush=function(o){var a;try{this.push(this.__final())}catch(c){a=c}o(a)};CipherBase$1.prototype._finalOrDigest=function(o){var a=this.__final()||Buffer$o.alloc(0);return o&&(a=this._toString(a,o,!0)),a};CipherBase$1.prototype._toString=function(o,a,c){if(this._decoder||(this._decoder=new StringDecoder(a),this._encoding=a),this._encoding!==a)throw new Error("can't switch encodings");var d=this._decoder.write(o);return c&&(d+=this._decoder.end()),d};var cipherBase=CipherBase$1,inherits$f=inherits_browserExports,MD5$2=md5_js,RIPEMD160$3=ripemd160,sha$3=sha_jsExports,Base$5=cipherBase;function Hash$1(o){Base$5.call(this,"digest"),this._hash=o}inherits$f(Hash$1,Base$5);Hash$1.prototype._update=function(o){this._hash.update(o)};Hash$1.prototype._final=function(){return this._hash.digest()};var browser$a=function(a){return a=a.toLowerCase(),a==="md5"?new MD5$2:a==="rmd160"||a==="ripemd160"?new RIPEMD160$3:new Hash$1(sha$3(a))},inherits$e=inherits_browserExports,Buffer$n=safeBufferExports$1.Buffer,Base$4=cipherBase,ZEROS$2=Buffer$n.alloc(128),blocksize=64;function Hmac$3(o,a){Base$4.call(this,"digest"),typeof a=="string"&&(a=Buffer$n.from(a)),this._alg=o,this._key=a,a.length>blocksize?a=o(a):a.lengthc){var d=o==="rmd160"?new RIPEMD160$2:sha$2(o);a=d.update(a).digest()}else a.lengthMAX_ALLOC||a!==a)throw new TypeError("Bad key length")},defaultEncoding$2;if(commonjsGlobal$4.process&&commonjsGlobal$4.process.browser)defaultEncoding$2="utf-8";else if(commonjsGlobal$4.process&&commonjsGlobal$4.process.version){var pVersionMajor=parseInt(process$1$4.version.split(".")[0].slice(1),10);defaultEncoding$2=pVersionMajor>=6?"utf-8":"binary"}else defaultEncoding$2="utf-8";var defaultEncoding_1=defaultEncoding$2,Buffer$l=safeBufferExports$1.Buffer,toBuffer$2=function(o,a,c){if(Buffer$l.isBuffer(o))return o;if(typeof o=="string")return Buffer$l.from(o,a);if(ArrayBuffer.isView(o))return Buffer$l.from(o.buffer);throw new TypeError(c+" must be a string, a Buffer, a typed array or a DataView")},md5=md5$2,RIPEMD160$1=ripemd160,sha$1=sha_jsExports,Buffer$k=safeBufferExports$1.Buffer,checkParameters$1=precondition,defaultEncoding$1=defaultEncoding_1,toBuffer$1=toBuffer$2,ZEROS=Buffer$k.alloc(128),sizes={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function Hmac$1(o,a,c){var d=getDigest(o),tt=o==="sha512"||o==="sha384"?128:64;a.length>tt?a=d(a):a.length>>0};utils$r.writeUInt32BE=function(a,c,d){a[0+d]=c>>>24,a[1+d]=c>>>16&255,a[2+d]=c>>>8&255,a[3+d]=c&255};utils$r.ip=function(a,c,d,tt){for(var nt=0,$a=0,Ws=6;Ws>=0;Ws-=2){for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=c>>>gu+Ws&1;for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=a>>>gu+Ws&1}for(var Ws=6;Ws>=0;Ws-=2){for(var gu=1;gu<=25;gu+=8)$a<<=1,$a|=c>>>gu+Ws&1;for(var gu=1;gu<=25;gu+=8)$a<<=1,$a|=a>>>gu+Ws&1}d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.rip=function(a,c,d,tt){for(var nt=0,$a=0,Ws=0;Ws<4;Ws++)for(var gu=24;gu>=0;gu-=8)nt<<=1,nt|=c>>>gu+Ws&1,nt<<=1,nt|=a>>>gu+Ws&1;for(var Ws=4;Ws<8;Ws++)for(var gu=24;gu>=0;gu-=8)$a<<=1,$a|=c>>>gu+Ws&1,$a<<=1,$a|=a>>>gu+Ws&1;d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.pc1=function(a,c,d,tt){for(var nt=0,$a=0,Ws=7;Ws>=5;Ws--){for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=c>>gu+Ws&1;for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=a>>gu+Ws&1}for(var gu=0;gu<=24;gu+=8)nt<<=1,nt|=c>>gu+Ws&1;for(var Ws=1;Ws<=3;Ws++){for(var gu=0;gu<=24;gu+=8)$a<<=1,$a|=c>>gu+Ws&1;for(var gu=0;gu<=24;gu+=8)$a<<=1,$a|=a>>gu+Ws&1}for(var gu=0;gu<=24;gu+=8)$a<<=1,$a|=a>>gu+Ws&1;d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.r28shl=function(a,c){return a<>>28-c};var pc2table=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];utils$r.pc2=function(a,c,d,tt){for(var nt=0,$a=0,Ws=pc2table.length>>>1,gu=0;gu>>pc2table[gu]&1;for(var gu=Ws;gu>>pc2table[gu]&1;d[tt+0]=nt>>>0,d[tt+1]=$a>>>0};utils$r.expand=function(a,c,d){var tt=0,nt=0;tt=(a&1)<<5|a>>>27;for(var $a=23;$a>=15;$a-=4)tt<<=6,tt|=a>>>$a&63;for(var $a=11;$a>=3;$a-=4)nt|=a>>>$a&63,nt<<=6;nt|=(a&31)<<1|a>>>31,c[d+0]=tt>>>0,c[d+1]=nt>>>0};var sTable=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];utils$r.substitute=function(a,c){for(var d=0,tt=0;tt<4;tt++){var nt=a>>>18-tt*6&63,$a=sTable[tt*64+nt];d<<=4,d|=$a}for(var tt=0;tt<4;tt++){var nt=c>>>18-tt*6&63,$a=sTable[4*64+tt*64+nt];d<<=4,d|=$a}return d>>>0};var permuteTable=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];utils$r.permute=function(a){for(var c=0,d=0;d>>permuteTable[d]&1;return c>>>0};utils$r.padSplit=function(a,c,d){for(var tt=a.toString(2);tt.length0;tt--)c+=this._buffer(a,c),d+=this._flushBuffer(nt,d);return c+=this._buffer(a,c),nt};Cipher$3.prototype.final=function(a){var c;a&&(c=this.update(a));var d;return this.type==="encrypt"?d=this._finalEncrypt():d=this._finalDecrypt(),c?c.concat(d):d};Cipher$3.prototype._pad=function(a,c){if(c===0)return!1;for(;c>>1];d=utils$q.r28shl(d,$a),tt=utils$q.r28shl(tt,$a),utils$q.pc2(d,tt,a.keys,nt)}};DES$3.prototype._update=function(a,c,d,tt){var nt=this._desState,$a=utils$q.readUInt32BE(a,c),Ws=utils$q.readUInt32BE(a,c+4);utils$q.ip($a,Ws,nt.tmp,0),$a=nt.tmp[0],Ws=nt.tmp[1],this.type==="encrypt"?this._encrypt(nt,$a,Ws,nt.tmp,0):this._decrypt(nt,$a,Ws,nt.tmp,0),$a=nt.tmp[0],Ws=nt.tmp[1],utils$q.writeUInt32BE(d,$a,tt),utils$q.writeUInt32BE(d,Ws,tt+4)};DES$3.prototype._pad=function(a,c){if(this.padding===!1)return!1;for(var d=a.length-c,tt=c;tt>>0,$a=r0}utils$q.rip(Ws,$a,tt,nt)};DES$3.prototype._decrypt=function(a,c,d,tt,nt){for(var $a=d,Ws=c,gu=a.keys.length-2;gu>=0;gu-=2){var Su=a.keys[gu],$u=a.keys[gu+1];utils$q.expand($a,a.tmp,0),Su^=a.tmp[0],$u^=a.tmp[1];var Iu=utils$q.substitute(Su,$u),Xu=utils$q.permute(Iu),r0=$a;$a=(Ws^Xu)>>>0,Ws=r0}utils$q.rip($a,Ws,tt,nt)};var cbc$1={},assert$h=minimalisticAssert,inherits$b=inherits_browserExports,proto={};function CBCState(o){assert$h.equal(o.length,8,"Invalid IV length"),this.iv=new Array(8);for(var a=0;a>tt%8,o._prev=shiftIn(o._prev,c?Ws:gu);return $a}function shiftIn(o,a){var c=o.length,d=-1,tt=Buffer$f.allocUnsafe(o.length);for(o=Buffer$f.concat([o,Buffer$f.from([a])]);++d>7;return tt}cfb1.encrypt=function(o,a,c){for(var d=a.length,tt=Buffer$f.allocUnsafe(d),nt=-1;++nt>>24]^$a[$u>>>16&255]^Ws[Iu>>>8&255]^gu[Xu&255]^a[$0++],p0=nt[$u>>>24]^$a[Iu>>>16&255]^Ws[Xu>>>8&255]^gu[Su&255]^a[$0++],y0=nt[Iu>>>24]^$a[Xu>>>16&255]^Ws[Su>>>8&255]^gu[$u&255]^a[$0++],A0=nt[Xu>>>24]^$a[Su>>>16&255]^Ws[$u>>>8&255]^gu[Iu&255]^a[$0++],Su=r0,$u=p0,Iu=y0,Xu=A0;return r0=(d[Su>>>24]<<24|d[$u>>>16&255]<<16|d[Iu>>>8&255]<<8|d[Xu&255])^a[$0++],p0=(d[$u>>>24]<<24|d[Iu>>>16&255]<<16|d[Xu>>>8&255]<<8|d[Su&255])^a[$0++],y0=(d[Iu>>>24]<<24|d[Xu>>>16&255]<<16|d[Su>>>8&255]<<8|d[$u&255])^a[$0++],A0=(d[Xu>>>24]<<24|d[Su>>>16&255]<<16|d[$u>>>8&255]<<8|d[Iu&255])^a[$0++],r0=r0>>>0,p0=p0>>>0,y0=y0>>>0,A0=A0>>>0,[r0,p0,y0,A0]}var RCON=[0,1,2,4,8,16,32,64,128,27,54],G$2=function(){for(var o=new Array(256),a=0;a<256;a++)a<128?o[a]=a<<1:o[a]=a<<1^283;for(var c=[],d=[],tt=[[],[],[],[]],nt=[[],[],[],[]],$a=0,Ws=0,gu=0;gu<256;++gu){var Su=Ws^Ws<<1^Ws<<2^Ws<<3^Ws<<4;Su=Su>>>8^Su&255^99,c[$a]=Su,d[Su]=$a;var $u=o[$a],Iu=o[$u],Xu=o[Iu],r0=o[Su]*257^Su*16843008;tt[0][$a]=r0<<24|r0>>>8,tt[1][$a]=r0<<16|r0>>>16,tt[2][$a]=r0<<8|r0>>>24,tt[3][$a]=r0,r0=Xu*16843009^Iu*65537^$u*257^$a*16843008,nt[0][Su]=r0<<24|r0>>>8,nt[1][Su]=r0<<16|r0>>>16,nt[2][Su]=r0<<8|r0>>>24,nt[3][Su]=r0,$a===0?$a=Ws=1:($a=$u^o[o[o[Xu^$u]]],Ws^=o[o[Ws]])}return{SBOX:c,INV_SBOX:d,SUB_MIX:tt,INV_SUB_MIX:nt}}();function AES(o){this._key=asUInt32Array(o),this._reset()}AES.blockSize=4*4;AES.keySize=256/8;AES.prototype.blockSize=AES.blockSize;AES.prototype.keySize=AES.keySize;AES.prototype._reset=function(){for(var o=this._key,a=o.length,c=a+6,d=(c+1)*4,tt=[],nt=0;nt>>24,$a=G$2.SBOX[$a>>>24]<<24|G$2.SBOX[$a>>>16&255]<<16|G$2.SBOX[$a>>>8&255]<<8|G$2.SBOX[$a&255],$a^=RCON[nt/a|0]<<24):a>6&&nt%a===4&&($a=G$2.SBOX[$a>>>24]<<24|G$2.SBOX[$a>>>16&255]<<16|G$2.SBOX[$a>>>8&255]<<8|G$2.SBOX[$a&255]),tt[nt]=tt[nt-a]^$a}for(var Ws=[],gu=0;gu>>24]]^G$2.INV_SUB_MIX[1][G$2.SBOX[$u>>>16&255]]^G$2.INV_SUB_MIX[2][G$2.SBOX[$u>>>8&255]]^G$2.INV_SUB_MIX[3][G$2.SBOX[$u&255]]}this._nRounds=c,this._keySchedule=tt,this._invKeySchedule=Ws};AES.prototype.encryptBlockRaw=function(o){return o=asUInt32Array(o),cryptBlock(o,this._keySchedule,G$2.SUB_MIX,G$2.SBOX,this._nRounds)};AES.prototype.encryptBlock=function(o){var a=this.encryptBlockRaw(o),c=Buffer$d.allocUnsafe(16);return c.writeUInt32BE(a[0],0),c.writeUInt32BE(a[1],4),c.writeUInt32BE(a[2],8),c.writeUInt32BE(a[3],12),c};AES.prototype.decryptBlock=function(o){o=asUInt32Array(o);var a=o[1];o[1]=o[3],o[3]=a;var c=cryptBlock(o,this._invKeySchedule,G$2.INV_SUB_MIX,G$2.INV_SBOX,this._nRounds),d=Buffer$d.allocUnsafe(16);return d.writeUInt32BE(c[0],0),d.writeUInt32BE(c[3],4),d.writeUInt32BE(c[2],8),d.writeUInt32BE(c[1],12),d};AES.prototype.scrub=function(){scrubVec(this._keySchedule),scrubVec(this._invKeySchedule),scrubVec(this._key)};aes$5.AES=AES;var Buffer$c=safeBufferExports$1.Buffer,ZEROES=Buffer$c.alloc(16,0);function toArray$1(o){return[o.readUInt32BE(0),o.readUInt32BE(4),o.readUInt32BE(8),o.readUInt32BE(12)]}function fromArray(o){var a=Buffer$c.allocUnsafe(16);return a.writeUInt32BE(o[0]>>>0,0),a.writeUInt32BE(o[1]>>>0,4),a.writeUInt32BE(o[2]>>>0,8),a.writeUInt32BE(o[3]>>>0,12),a}function GHASH$1(o){this.h=o,this.state=Buffer$c.alloc(16,0),this.cache=Buffer$c.allocUnsafe(0)}GHASH$1.prototype.ghash=function(o){for(var a=-1;++a0;c--)o[c]=o[c]>>>1|(o[c-1]&1)<<31;o[0]=o[0]>>>1,tt&&(o[0]=o[0]^225<<24)}this.state=fromArray(a)};GHASH$1.prototype.update=function(o){this.cache=Buffer$c.concat([this.cache,o]);for(var a;this.cache.length>=16;)a=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(a)};GHASH$1.prototype.final=function(o,a){return this.cache.length&&this.ghash(Buffer$c.concat([this.cache,ZEROES],16)),this.ghash(fromArray([0,o,0,a])),this.state};var ghash=GHASH$1,aes$4=aes$5,Buffer$b=safeBufferExports$1.Buffer,Transform$5=cipherBase,inherits$8=inherits_browserExports,GHASH=ghash,xor$3=bufferXor,incr32=incr32_1;function xorTest(o,a){var c=0;o.length!==a.length&&c++;for(var d=Math.min(o.length,a.length),tt=0;tt0||d>0;){var gu=new MD5;gu.update(Ws),gu.update(o),a&&gu.update(a),Ws=gu.digest();var Su=0;if(tt>0){var $u=nt.length-tt;Su=Math.min(tt,Ws.length),Ws.copy(nt,$u,0,Su),tt-=Su}if(Su0){var Iu=$a.length-d,Xu=Math.min(d,Ws.length-Su);Ws.copy($a,Iu,Su,Su+Xu),d-=Xu}}return Ws.fill(0),{key:nt,iv:$a}}var evp_bytestokey=EVP_BytesToKey,MODES$1=modes_1,AuthCipher$1=authCipher,Buffer$8=safeBufferExports$1.Buffer,StreamCipher$1=streamCipher,Transform$3=cipherBase,aes$2=aes$5,ebtk$2=evp_bytestokey,inherits$6=inherits_browserExports;function Cipher(o,a,c){Transform$3.call(this),this._cache=new Splitter$1,this._cipher=new aes$2.AES(a),this._prev=Buffer$8.from(c),this._mode=o,this._autopadding=!0}inherits$6(Cipher,Transform$3);Cipher.prototype._update=function(o){this._cache.add(o);for(var a,c,d=[];a=this._cache.get();)c=this._mode.encrypt(this,a),d.push(c);return Buffer$8.concat(d)};var PADDING=Buffer$8.alloc(16,16);Cipher.prototype._final=function(){var o=this._cache.flush();if(this._autopadding)return o=this._mode.encrypt(this,o),this._cipher.scrub(),o;if(!o.equals(PADDING))throw this._cipher.scrub(),new Error("data not multiple of block length")};Cipher.prototype.setAutoPadding=function(o){return this._autopadding=!!o,this};function Splitter$1(){this.cache=Buffer$8.allocUnsafe(0)}Splitter$1.prototype.add=function(o){this.cache=Buffer$8.concat([this.cache,o])};Splitter$1.prototype.get=function(){if(this.cache.length>15){var o=this.cache.slice(0,16);return this.cache=this.cache.slice(16),o}return null};Splitter$1.prototype.flush=function(){for(var o=16-this.cache.length,a=Buffer$8.allocUnsafe(o),c=-1;++c16)return a=this.cache.slice(0,16),this.cache=this.cache.slice(16),a}else if(this.cache.length>=16)return a=this.cache.slice(0,16),this.cache=this.cache.slice(16),a;return null};Splitter.prototype.flush=function(){if(this.cache.length)return this.cache};function unpad(o){var a=o[15];if(a<1||a>16)throw new Error("unable to decrypt data");for(var c=-1;++c0?r1:t1},nt.min=function(r1,t1){return r1.cmp(t1)<0?r1:t1},nt.prototype._init=function(r1,t1,D0){if(typeof r1=="number")return this._initNumber(r1,t1,D0);if(typeof r1=="object")return this._initArray(r1,t1,D0);t1==="hex"&&(t1=16),d(t1===(t1|0)&&t1>=2&&t1<=36),r1=r1.toString().replace(/\s+/g,"");var Z0=0;r1[0]==="-"&&(Z0++,this.negative=1),Z0=0;Z0-=3)w1=r1[Z0]|r1[Z0-1]<<8|r1[Z0-2]<<16,this.words[f1]|=w1<>>26-m1&67108863,m1+=24,m1>=26&&(m1-=26,f1++);else if(D0==="le")for(Z0=0,f1=0;Z0>>26-m1&67108863,m1+=24,m1>=26&&(m1-=26,f1++);return this.strip()};function Ws(j1,r1){var t1=j1.charCodeAt(r1);return t1>=65&&t1<=70?t1-55:t1>=97&&t1<=102?t1-87:t1-48&15}function gu(j1,r1,t1){var D0=Ws(j1,t1);return t1-1>=r1&&(D0|=Ws(j1,t1-1)<<4),D0}nt.prototype._parseHex=function(r1,t1,D0){this.length=Math.ceil((r1.length-t1)/6),this.words=new Array(this.length);for(var Z0=0;Z0=t1;Z0-=2)m1=gu(r1,t1,Z0)<=18?(f1-=18,w1+=1,this.words[w1]|=m1>>>26):f1+=8;else{var c1=r1.length-t1;for(Z0=c1%2===0?t1+1:t1;Z0=18?(f1-=18,w1+=1,this.words[w1]|=m1>>>26):f1+=8}this.strip()};function Su(j1,r1,t1,D0){for(var Z0=0,f1=Math.min(j1.length,t1),w1=r1;w1=49?Z0+=m1-49+10:m1>=17?Z0+=m1-17+10:Z0+=m1}return Z0}nt.prototype._parseBase=function(r1,t1,D0){this.words=[0],this.length=1;for(var Z0=0,f1=1;f1<=67108863;f1*=t1)Z0++;Z0--,f1=f1/t1|0;for(var w1=r1.length-D0,m1=w1%Z0,c1=Math.min(w1,w1-m1)+D0,G0=0,o1=D0;o11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},nt.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},nt.prototype.inspect=function(){return(this.red?""};var $u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],Iu=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],Xu=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];nt.prototype.toString=function(r1,t1){r1=r1||10,t1=t1|0||1;var D0;if(r1===16||r1==="hex"){D0="";for(var Z0=0,f1=0,w1=0;w1>>24-Z0&16777215,f1!==0||w1!==this.length-1?D0=$u[6-c1.length]+c1+D0:D0=c1+D0,Z0+=2,Z0>=26&&(Z0-=26,w1--)}for(f1!==0&&(D0=f1.toString(16)+D0);D0.length%t1!==0;)D0="0"+D0;return this.negative!==0&&(D0="-"+D0),D0}if(r1===(r1|0)&&r1>=2&&r1<=36){var G0=Iu[r1],o1=Xu[r1];D0="";var d1=this.clone();for(d1.negative=0;!d1.isZero();){var R1=d1.modn(o1).toString(r1);d1=d1.idivn(o1),d1.isZero()?D0=R1+D0:D0=$u[G0-R1.length]+R1+D0}for(this.isZero()&&(D0="0"+D0);D0.length%t1!==0;)D0="0"+D0;return this.negative!==0&&(D0="-"+D0),D0}d(!1,"Base should be between 2 and 36")},nt.prototype.toNumber=function(){var r1=this.words[0];return this.length===2?r1+=this.words[1]*67108864:this.length===3&&this.words[2]===1?r1+=4503599627370496+this.words[1]*67108864:this.length>2&&d(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-r1:r1},nt.prototype.toJSON=function(){return this.toString(16)},nt.prototype.toBuffer=function(r1,t1){return d(typeof $a<"u"),this.toArrayLike($a,r1,t1)},nt.prototype.toArray=function(r1,t1){return this.toArrayLike(Array,r1,t1)},nt.prototype.toArrayLike=function(r1,t1,D0){var Z0=this.byteLength(),f1=D0||Math.max(1,Z0);d(Z0<=f1,"byte array longer than desired length"),d(f1>0,"Requested array length <= 0"),this.strip();var w1=t1==="le",m1=new r1(f1),c1,G0,o1=this.clone();if(w1){for(G0=0;!o1.isZero();G0++)c1=o1.andln(255),o1.iushrn(8),m1[G0]=c1;for(;G0=4096&&(D0+=13,t1>>>=13),t1>=64&&(D0+=7,t1>>>=7),t1>=8&&(D0+=4,t1>>>=4),t1>=2&&(D0+=2,t1>>>=2),D0+t1},nt.prototype._zeroBits=function(r1){if(r1===0)return 26;var t1=r1,D0=0;return t1&8191||(D0+=13,t1>>>=13),t1&127||(D0+=7,t1>>>=7),t1&15||(D0+=4,t1>>>=4),t1&3||(D0+=2,t1>>>=2),t1&1||D0++,D0},nt.prototype.bitLength=function(){var r1=this.words[this.length-1],t1=this._countBits(r1);return(this.length-1)*26+t1};function r0(j1){for(var r1=new Array(j1.bitLength()),t1=0;t1>>Z0}return r1}nt.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r1=0,t1=0;t1r1.length?this.clone().ior(r1):r1.clone().ior(this)},nt.prototype.uor=function(r1){return this.length>r1.length?this.clone().iuor(r1):r1.clone().iuor(this)},nt.prototype.iuand=function(r1){var t1;this.length>r1.length?t1=r1:t1=this;for(var D0=0;D0r1.length?this.clone().iand(r1):r1.clone().iand(this)},nt.prototype.uand=function(r1){return this.length>r1.length?this.clone().iuand(r1):r1.clone().iuand(this)},nt.prototype.iuxor=function(r1){var t1,D0;this.length>r1.length?(t1=this,D0=r1):(t1=r1,D0=this);for(var Z0=0;Z0r1.length?this.clone().ixor(r1):r1.clone().ixor(this)},nt.prototype.uxor=function(r1){return this.length>r1.length?this.clone().iuxor(r1):r1.clone().iuxor(this)},nt.prototype.inotn=function(r1){d(typeof r1=="number"&&r1>=0);var t1=Math.ceil(r1/26)|0,D0=r1%26;this._expand(t1),D0>0&&t1--;for(var Z0=0;Z00&&(this.words[Z0]=~this.words[Z0]&67108863>>26-D0),this.strip()},nt.prototype.notn=function(r1){return this.clone().inotn(r1)},nt.prototype.setn=function(r1,t1){d(typeof r1=="number"&&r1>=0);var D0=r1/26|0,Z0=r1%26;return this._expand(D0+1),t1?this.words[D0]=this.words[D0]|1<r1.length?(D0=this,Z0=r1):(D0=r1,Z0=this);for(var f1=0,w1=0;w1>>26;for(;f1!==0&&w1>>26;if(this.length=D0.length,f1!==0)this.words[this.length]=f1,this.length++;else if(D0!==this)for(;w1r1.length?this.clone().iadd(r1):r1.clone().iadd(this)},nt.prototype.isub=function(r1){if(r1.negative!==0){r1.negative=0;var t1=this.iadd(r1);return r1.negative=1,t1._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r1),this.negative=1,this._normSign();var D0=this.cmp(r1);if(D0===0)return this.negative=0,this.length=1,this.words[0]=0,this;var Z0,f1;D0>0?(Z0=this,f1=r1):(Z0=r1,f1=this);for(var w1=0,m1=0;m1>26,this.words[m1]=t1&67108863;for(;w1!==0&&m1>26,this.words[m1]=t1&67108863;if(w1===0&&m1>>26,d1=c1&67108863,R1=Math.min(G0,r1.length-1),O1=Math.max(0,G0-j1.length+1);O1<=R1;O1++){var Q1=G0-O1|0;Z0=j1.words[Q1]|0,f1=r1.words[O1]|0,w1=Z0*f1+d1,o1+=w1/67108864|0,d1=w1&67108863}t1.words[G0]=d1|0,c1=o1|0}return c1!==0?t1.words[G0]=c1|0:t1.length--,t1.strip()}var y0=function(r1,t1,D0){var Z0=r1.words,f1=t1.words,w1=D0.words,m1=0,c1,G0,o1,d1=Z0[0]|0,R1=d1&8191,O1=d1>>>13,Q1=Z0[1]|0,rv=Q1&8191,D1=Q1>>>13,ev=Z0[2]|0,Mv=ev&8191,Zv=ev>>>13,fv=Z0[3]|0,cv=fv&8191,ly=fv>>>13,Cy=Z0[4]|0,Ly=Cy&8191,Hy=Cy>>>13,t2=Z0[5]|0,C2=t2&8191,Dy=t2>>>13,jw=Z0[6]|0,pw=jw&8191,vw=jw>>>13,Hw=Z0[7]|0,uw=Hw&8191,Nw=Hw>>>13,lw=Z0[8]|0,Lw=lw&8191,zw=lw>>>13,A2=Z0[9]|0,kv=A2&8191,Y1=A2>>>13,tv=f1[0]|0,Yv=tv&8191,By=tv>>>13,Qy=f1[1]|0,e2=Qy&8191,Kw=Qy>>>13,r$=f1[2]|0,v3=r$&8191,d$=r$>>>13,$2=f1[3]|0,_$=$2&8191,Q$=$2>>>13,S$=f1[4]|0,m$=S$&8191,m3=S$>>>13,n$=f1[5]|0,a$=n$&8191,OE=n$>>>13,Mw=f1[6]|0,Bw=Mw&8191,o3=Mw>>>13,B$=f1[7]|0,$y=B$&8191,Kv=B$>>>13,Ny=f1[8]|0,Vy=Ny&8191,Sy=Ny>>>13,fw=f1[9]|0,xw=fw&8191,V3=fw>>>13;D0.negative=r1.negative^t1.negative,D0.length=19,c1=Math.imul(R1,Yv),G0=Math.imul(R1,By),G0=G0+Math.imul(O1,Yv)|0,o1=Math.imul(O1,By);var i$=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(i$>>>26)|0,i$&=67108863,c1=Math.imul(rv,Yv),G0=Math.imul(rv,By),G0=G0+Math.imul(D1,Yv)|0,o1=Math.imul(D1,By),c1=c1+Math.imul(R1,e2)|0,G0=G0+Math.imul(R1,Kw)|0,G0=G0+Math.imul(O1,e2)|0,o1=o1+Math.imul(O1,Kw)|0;var y$=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(y$>>>26)|0,y$&=67108863,c1=Math.imul(Mv,Yv),G0=Math.imul(Mv,By),G0=G0+Math.imul(Zv,Yv)|0,o1=Math.imul(Zv,By),c1=c1+Math.imul(rv,e2)|0,G0=G0+Math.imul(rv,Kw)|0,G0=G0+Math.imul(D1,e2)|0,o1=o1+Math.imul(D1,Kw)|0,c1=c1+Math.imul(R1,v3)|0,G0=G0+Math.imul(R1,d$)|0,G0=G0+Math.imul(O1,v3)|0,o1=o1+Math.imul(O1,d$)|0;var Gw=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(Gw>>>26)|0,Gw&=67108863,c1=Math.imul(cv,Yv),G0=Math.imul(cv,By),G0=G0+Math.imul(ly,Yv)|0,o1=Math.imul(ly,By),c1=c1+Math.imul(Mv,e2)|0,G0=G0+Math.imul(Mv,Kw)|0,G0=G0+Math.imul(Zv,e2)|0,o1=o1+Math.imul(Zv,Kw)|0,c1=c1+Math.imul(rv,v3)|0,G0=G0+Math.imul(rv,d$)|0,G0=G0+Math.imul(D1,v3)|0,o1=o1+Math.imul(D1,d$)|0,c1=c1+Math.imul(R1,_$)|0,G0=G0+Math.imul(R1,Q$)|0,G0=G0+Math.imul(O1,_$)|0,o1=o1+Math.imul(O1,Q$)|0;var g3=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(g3>>>26)|0,g3&=67108863,c1=Math.imul(Ly,Yv),G0=Math.imul(Ly,By),G0=G0+Math.imul(Hy,Yv)|0,o1=Math.imul(Hy,By),c1=c1+Math.imul(cv,e2)|0,G0=G0+Math.imul(cv,Kw)|0,G0=G0+Math.imul(ly,e2)|0,o1=o1+Math.imul(ly,Kw)|0,c1=c1+Math.imul(Mv,v3)|0,G0=G0+Math.imul(Mv,d$)|0,G0=G0+Math.imul(Zv,v3)|0,o1=o1+Math.imul(Zv,d$)|0,c1=c1+Math.imul(rv,_$)|0,G0=G0+Math.imul(rv,Q$)|0,G0=G0+Math.imul(D1,_$)|0,o1=o1+Math.imul(D1,Q$)|0,c1=c1+Math.imul(R1,m$)|0,G0=G0+Math.imul(R1,m3)|0,G0=G0+Math.imul(O1,m$)|0,o1=o1+Math.imul(O1,m3)|0;var j3=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(j3>>>26)|0,j3&=67108863,c1=Math.imul(C2,Yv),G0=Math.imul(C2,By),G0=G0+Math.imul(Dy,Yv)|0,o1=Math.imul(Dy,By),c1=c1+Math.imul(Ly,e2)|0,G0=G0+Math.imul(Ly,Kw)|0,G0=G0+Math.imul(Hy,e2)|0,o1=o1+Math.imul(Hy,Kw)|0,c1=c1+Math.imul(cv,v3)|0,G0=G0+Math.imul(cv,d$)|0,G0=G0+Math.imul(ly,v3)|0,o1=o1+Math.imul(ly,d$)|0,c1=c1+Math.imul(Mv,_$)|0,G0=G0+Math.imul(Mv,Q$)|0,G0=G0+Math.imul(Zv,_$)|0,o1=o1+Math.imul(Zv,Q$)|0,c1=c1+Math.imul(rv,m$)|0,G0=G0+Math.imul(rv,m3)|0,G0=G0+Math.imul(D1,m$)|0,o1=o1+Math.imul(D1,m3)|0,c1=c1+Math.imul(R1,a$)|0,G0=G0+Math.imul(R1,OE)|0,G0=G0+Math.imul(O1,a$)|0,o1=o1+Math.imul(O1,OE)|0;var $w=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+($w>>>26)|0,$w&=67108863,c1=Math.imul(pw,Yv),G0=Math.imul(pw,By),G0=G0+Math.imul(vw,Yv)|0,o1=Math.imul(vw,By),c1=c1+Math.imul(C2,e2)|0,G0=G0+Math.imul(C2,Kw)|0,G0=G0+Math.imul(Dy,e2)|0,o1=o1+Math.imul(Dy,Kw)|0,c1=c1+Math.imul(Ly,v3)|0,G0=G0+Math.imul(Ly,d$)|0,G0=G0+Math.imul(Hy,v3)|0,o1=o1+Math.imul(Hy,d$)|0,c1=c1+Math.imul(cv,_$)|0,G0=G0+Math.imul(cv,Q$)|0,G0=G0+Math.imul(ly,_$)|0,o1=o1+Math.imul(ly,Q$)|0,c1=c1+Math.imul(Mv,m$)|0,G0=G0+Math.imul(Mv,m3)|0,G0=G0+Math.imul(Zv,m$)|0,o1=o1+Math.imul(Zv,m3)|0,c1=c1+Math.imul(rv,a$)|0,G0=G0+Math.imul(rv,OE)|0,G0=G0+Math.imul(D1,a$)|0,o1=o1+Math.imul(D1,OE)|0,c1=c1+Math.imul(R1,Bw)|0,G0=G0+Math.imul(R1,o3)|0,G0=G0+Math.imul(O1,Bw)|0,o1=o1+Math.imul(O1,o3)|0;var w3=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(w3>>>26)|0,w3&=67108863,c1=Math.imul(uw,Yv),G0=Math.imul(uw,By),G0=G0+Math.imul(Nw,Yv)|0,o1=Math.imul(Nw,By),c1=c1+Math.imul(pw,e2)|0,G0=G0+Math.imul(pw,Kw)|0,G0=G0+Math.imul(vw,e2)|0,o1=o1+Math.imul(vw,Kw)|0,c1=c1+Math.imul(C2,v3)|0,G0=G0+Math.imul(C2,d$)|0,G0=G0+Math.imul(Dy,v3)|0,o1=o1+Math.imul(Dy,d$)|0,c1=c1+Math.imul(Ly,_$)|0,G0=G0+Math.imul(Ly,Q$)|0,G0=G0+Math.imul(Hy,_$)|0,o1=o1+Math.imul(Hy,Q$)|0,c1=c1+Math.imul(cv,m$)|0,G0=G0+Math.imul(cv,m3)|0,G0=G0+Math.imul(ly,m$)|0,o1=o1+Math.imul(ly,m3)|0,c1=c1+Math.imul(Mv,a$)|0,G0=G0+Math.imul(Mv,OE)|0,G0=G0+Math.imul(Zv,a$)|0,o1=o1+Math.imul(Zv,OE)|0,c1=c1+Math.imul(rv,Bw)|0,G0=G0+Math.imul(rv,o3)|0,G0=G0+Math.imul(D1,Bw)|0,o1=o1+Math.imul(D1,o3)|0,c1=c1+Math.imul(R1,$y)|0,G0=G0+Math.imul(R1,Kv)|0,G0=G0+Math.imul(O1,$y)|0,o1=o1+Math.imul(O1,Kv)|0;var yE=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(yE>>>26)|0,yE&=67108863,c1=Math.imul(Lw,Yv),G0=Math.imul(Lw,By),G0=G0+Math.imul(zw,Yv)|0,o1=Math.imul(zw,By),c1=c1+Math.imul(uw,e2)|0,G0=G0+Math.imul(uw,Kw)|0,G0=G0+Math.imul(Nw,e2)|0,o1=o1+Math.imul(Nw,Kw)|0,c1=c1+Math.imul(pw,v3)|0,G0=G0+Math.imul(pw,d$)|0,G0=G0+Math.imul(vw,v3)|0,o1=o1+Math.imul(vw,d$)|0,c1=c1+Math.imul(C2,_$)|0,G0=G0+Math.imul(C2,Q$)|0,G0=G0+Math.imul(Dy,_$)|0,o1=o1+Math.imul(Dy,Q$)|0,c1=c1+Math.imul(Ly,m$)|0,G0=G0+Math.imul(Ly,m3)|0,G0=G0+Math.imul(Hy,m$)|0,o1=o1+Math.imul(Hy,m3)|0,c1=c1+Math.imul(cv,a$)|0,G0=G0+Math.imul(cv,OE)|0,G0=G0+Math.imul(ly,a$)|0,o1=o1+Math.imul(ly,OE)|0,c1=c1+Math.imul(Mv,Bw)|0,G0=G0+Math.imul(Mv,o3)|0,G0=G0+Math.imul(Zv,Bw)|0,o1=o1+Math.imul(Zv,o3)|0,c1=c1+Math.imul(rv,$y)|0,G0=G0+Math.imul(rv,Kv)|0,G0=G0+Math.imul(D1,$y)|0,o1=o1+Math.imul(D1,Kv)|0,c1=c1+Math.imul(R1,Vy)|0,G0=G0+Math.imul(R1,Sy)|0,G0=G0+Math.imul(O1,Vy)|0,o1=o1+Math.imul(O1,Sy)|0;var bE=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(bE>>>26)|0,bE&=67108863,c1=Math.imul(kv,Yv),G0=Math.imul(kv,By),G0=G0+Math.imul(Y1,Yv)|0,o1=Math.imul(Y1,By),c1=c1+Math.imul(Lw,e2)|0,G0=G0+Math.imul(Lw,Kw)|0,G0=G0+Math.imul(zw,e2)|0,o1=o1+Math.imul(zw,Kw)|0,c1=c1+Math.imul(uw,v3)|0,G0=G0+Math.imul(uw,d$)|0,G0=G0+Math.imul(Nw,v3)|0,o1=o1+Math.imul(Nw,d$)|0,c1=c1+Math.imul(pw,_$)|0,G0=G0+Math.imul(pw,Q$)|0,G0=G0+Math.imul(vw,_$)|0,o1=o1+Math.imul(vw,Q$)|0,c1=c1+Math.imul(C2,m$)|0,G0=G0+Math.imul(C2,m3)|0,G0=G0+Math.imul(Dy,m$)|0,o1=o1+Math.imul(Dy,m3)|0,c1=c1+Math.imul(Ly,a$)|0,G0=G0+Math.imul(Ly,OE)|0,G0=G0+Math.imul(Hy,a$)|0,o1=o1+Math.imul(Hy,OE)|0,c1=c1+Math.imul(cv,Bw)|0,G0=G0+Math.imul(cv,o3)|0,G0=G0+Math.imul(ly,Bw)|0,o1=o1+Math.imul(ly,o3)|0,c1=c1+Math.imul(Mv,$y)|0,G0=G0+Math.imul(Mv,Kv)|0,G0=G0+Math.imul(Zv,$y)|0,o1=o1+Math.imul(Zv,Kv)|0,c1=c1+Math.imul(rv,Vy)|0,G0=G0+Math.imul(rv,Sy)|0,G0=G0+Math.imul(D1,Vy)|0,o1=o1+Math.imul(D1,Sy)|0,c1=c1+Math.imul(R1,xw)|0,G0=G0+Math.imul(R1,V3)|0,G0=G0+Math.imul(O1,xw)|0,o1=o1+Math.imul(O1,V3)|0;var J_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(J_>>>26)|0,J_&=67108863,c1=Math.imul(kv,e2),G0=Math.imul(kv,Kw),G0=G0+Math.imul(Y1,e2)|0,o1=Math.imul(Y1,Kw),c1=c1+Math.imul(Lw,v3)|0,G0=G0+Math.imul(Lw,d$)|0,G0=G0+Math.imul(zw,v3)|0,o1=o1+Math.imul(zw,d$)|0,c1=c1+Math.imul(uw,_$)|0,G0=G0+Math.imul(uw,Q$)|0,G0=G0+Math.imul(Nw,_$)|0,o1=o1+Math.imul(Nw,Q$)|0,c1=c1+Math.imul(pw,m$)|0,G0=G0+Math.imul(pw,m3)|0,G0=G0+Math.imul(vw,m$)|0,o1=o1+Math.imul(vw,m3)|0,c1=c1+Math.imul(C2,a$)|0,G0=G0+Math.imul(C2,OE)|0,G0=G0+Math.imul(Dy,a$)|0,o1=o1+Math.imul(Dy,OE)|0,c1=c1+Math.imul(Ly,Bw)|0,G0=G0+Math.imul(Ly,o3)|0,G0=G0+Math.imul(Hy,Bw)|0,o1=o1+Math.imul(Hy,o3)|0,c1=c1+Math.imul(cv,$y)|0,G0=G0+Math.imul(cv,Kv)|0,G0=G0+Math.imul(ly,$y)|0,o1=o1+Math.imul(ly,Kv)|0,c1=c1+Math.imul(Mv,Vy)|0,G0=G0+Math.imul(Mv,Sy)|0,G0=G0+Math.imul(Zv,Vy)|0,o1=o1+Math.imul(Zv,Sy)|0,c1=c1+Math.imul(rv,xw)|0,G0=G0+Math.imul(rv,V3)|0,G0=G0+Math.imul(D1,xw)|0,o1=o1+Math.imul(D1,V3)|0;var B_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(B_>>>26)|0,B_&=67108863,c1=Math.imul(kv,v3),G0=Math.imul(kv,d$),G0=G0+Math.imul(Y1,v3)|0,o1=Math.imul(Y1,d$),c1=c1+Math.imul(Lw,_$)|0,G0=G0+Math.imul(Lw,Q$)|0,G0=G0+Math.imul(zw,_$)|0,o1=o1+Math.imul(zw,Q$)|0,c1=c1+Math.imul(uw,m$)|0,G0=G0+Math.imul(uw,m3)|0,G0=G0+Math.imul(Nw,m$)|0,o1=o1+Math.imul(Nw,m3)|0,c1=c1+Math.imul(pw,a$)|0,G0=G0+Math.imul(pw,OE)|0,G0=G0+Math.imul(vw,a$)|0,o1=o1+Math.imul(vw,OE)|0,c1=c1+Math.imul(C2,Bw)|0,G0=G0+Math.imul(C2,o3)|0,G0=G0+Math.imul(Dy,Bw)|0,o1=o1+Math.imul(Dy,o3)|0,c1=c1+Math.imul(Ly,$y)|0,G0=G0+Math.imul(Ly,Kv)|0,G0=G0+Math.imul(Hy,$y)|0,o1=o1+Math.imul(Hy,Kv)|0,c1=c1+Math.imul(cv,Vy)|0,G0=G0+Math.imul(cv,Sy)|0,G0=G0+Math.imul(ly,Vy)|0,o1=o1+Math.imul(ly,Sy)|0,c1=c1+Math.imul(Mv,xw)|0,G0=G0+Math.imul(Mv,V3)|0,G0=G0+Math.imul(Zv,xw)|0,o1=o1+Math.imul(Zv,V3)|0;var $_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+($_>>>26)|0,$_&=67108863,c1=Math.imul(kv,_$),G0=Math.imul(kv,Q$),G0=G0+Math.imul(Y1,_$)|0,o1=Math.imul(Y1,Q$),c1=c1+Math.imul(Lw,m$)|0,G0=G0+Math.imul(Lw,m3)|0,G0=G0+Math.imul(zw,m$)|0,o1=o1+Math.imul(zw,m3)|0,c1=c1+Math.imul(uw,a$)|0,G0=G0+Math.imul(uw,OE)|0,G0=G0+Math.imul(Nw,a$)|0,o1=o1+Math.imul(Nw,OE)|0,c1=c1+Math.imul(pw,Bw)|0,G0=G0+Math.imul(pw,o3)|0,G0=G0+Math.imul(vw,Bw)|0,o1=o1+Math.imul(vw,o3)|0,c1=c1+Math.imul(C2,$y)|0,G0=G0+Math.imul(C2,Kv)|0,G0=G0+Math.imul(Dy,$y)|0,o1=o1+Math.imul(Dy,Kv)|0,c1=c1+Math.imul(Ly,Vy)|0,G0=G0+Math.imul(Ly,Sy)|0,G0=G0+Math.imul(Hy,Vy)|0,o1=o1+Math.imul(Hy,Sy)|0,c1=c1+Math.imul(cv,xw)|0,G0=G0+Math.imul(cv,V3)|0,G0=G0+Math.imul(ly,xw)|0,o1=o1+Math.imul(ly,V3)|0;var M6=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(M6>>>26)|0,M6&=67108863,c1=Math.imul(kv,m$),G0=Math.imul(kv,m3),G0=G0+Math.imul(Y1,m$)|0,o1=Math.imul(Y1,m3),c1=c1+Math.imul(Lw,a$)|0,G0=G0+Math.imul(Lw,OE)|0,G0=G0+Math.imul(zw,a$)|0,o1=o1+Math.imul(zw,OE)|0,c1=c1+Math.imul(uw,Bw)|0,G0=G0+Math.imul(uw,o3)|0,G0=G0+Math.imul(Nw,Bw)|0,o1=o1+Math.imul(Nw,o3)|0,c1=c1+Math.imul(pw,$y)|0,G0=G0+Math.imul(pw,Kv)|0,G0=G0+Math.imul(vw,$y)|0,o1=o1+Math.imul(vw,Kv)|0,c1=c1+Math.imul(C2,Vy)|0,G0=G0+Math.imul(C2,Sy)|0,G0=G0+Math.imul(Dy,Vy)|0,o1=o1+Math.imul(Dy,Sy)|0,c1=c1+Math.imul(Ly,xw)|0,G0=G0+Math.imul(Ly,V3)|0,G0=G0+Math.imul(Hy,xw)|0,o1=o1+Math.imul(Hy,V3)|0;var D_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(D_>>>26)|0,D_&=67108863,c1=Math.imul(kv,a$),G0=Math.imul(kv,OE),G0=G0+Math.imul(Y1,a$)|0,o1=Math.imul(Y1,OE),c1=c1+Math.imul(Lw,Bw)|0,G0=G0+Math.imul(Lw,o3)|0,G0=G0+Math.imul(zw,Bw)|0,o1=o1+Math.imul(zw,o3)|0,c1=c1+Math.imul(uw,$y)|0,G0=G0+Math.imul(uw,Kv)|0,G0=G0+Math.imul(Nw,$y)|0,o1=o1+Math.imul(Nw,Kv)|0,c1=c1+Math.imul(pw,Vy)|0,G0=G0+Math.imul(pw,Sy)|0,G0=G0+Math.imul(vw,Vy)|0,o1=o1+Math.imul(vw,Sy)|0,c1=c1+Math.imul(C2,xw)|0,G0=G0+Math.imul(C2,V3)|0,G0=G0+Math.imul(Dy,xw)|0,o1=o1+Math.imul(Dy,V3)|0;var FA=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(FA>>>26)|0,FA&=67108863,c1=Math.imul(kv,Bw),G0=Math.imul(kv,o3),G0=G0+Math.imul(Y1,Bw)|0,o1=Math.imul(Y1,o3),c1=c1+Math.imul(Lw,$y)|0,G0=G0+Math.imul(Lw,Kv)|0,G0=G0+Math.imul(zw,$y)|0,o1=o1+Math.imul(zw,Kv)|0,c1=c1+Math.imul(uw,Vy)|0,G0=G0+Math.imul(uw,Sy)|0,G0=G0+Math.imul(Nw,Vy)|0,o1=o1+Math.imul(Nw,Sy)|0,c1=c1+Math.imul(pw,xw)|0,G0=G0+Math.imul(pw,V3)|0,G0=G0+Math.imul(vw,xw)|0,o1=o1+Math.imul(vw,V3)|0;var g8=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(g8>>>26)|0,g8&=67108863,c1=Math.imul(kv,$y),G0=Math.imul(kv,Kv),G0=G0+Math.imul(Y1,$y)|0,o1=Math.imul(Y1,Kv),c1=c1+Math.imul(Lw,Vy)|0,G0=G0+Math.imul(Lw,Sy)|0,G0=G0+Math.imul(zw,Vy)|0,o1=o1+Math.imul(zw,Sy)|0,c1=c1+Math.imul(uw,xw)|0,G0=G0+Math.imul(uw,V3)|0,G0=G0+Math.imul(Nw,xw)|0,o1=o1+Math.imul(Nw,V3)|0;var y8=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(y8>>>26)|0,y8&=67108863,c1=Math.imul(kv,Vy),G0=Math.imul(kv,Sy),G0=G0+Math.imul(Y1,Vy)|0,o1=Math.imul(Y1,Sy),c1=c1+Math.imul(Lw,xw)|0,G0=G0+Math.imul(Lw,V3)|0,G0=G0+Math.imul(zw,xw)|0,o1=o1+Math.imul(zw,V3)|0;var X_=(m1+c1|0)+((G0&8191)<<13)|0;m1=(o1+(G0>>>13)|0)+(X_>>>26)|0,X_&=67108863,c1=Math.imul(kv,xw),G0=Math.imul(kv,V3),G0=G0+Math.imul(Y1,xw)|0,o1=Math.imul(Y1,V3);var FS=(m1+c1|0)+((G0&8191)<<13)|0;return m1=(o1+(G0>>>13)|0)+(FS>>>26)|0,FS&=67108863,w1[0]=i$,w1[1]=y$,w1[2]=Gw,w1[3]=g3,w1[4]=j3,w1[5]=$w,w1[6]=w3,w1[7]=yE,w1[8]=bE,w1[9]=J_,w1[10]=B_,w1[11]=$_,w1[12]=M6,w1[13]=D_,w1[14]=FA,w1[15]=g8,w1[16]=y8,w1[17]=X_,w1[18]=FS,m1!==0&&(w1[19]=m1,D0.length++),D0};Math.imul||(y0=p0);function A0(j1,r1,t1){t1.negative=r1.negative^j1.negative,t1.length=j1.length+r1.length;for(var D0=0,Z0=0,f1=0;f1>>26)|0,Z0+=w1>>>26,w1&=67108863}t1.words[f1]=m1,D0=w1,w1=Z0}return D0!==0?t1.words[f1]=D0:t1.length--,t1.strip()}function $0(j1,r1,t1){var D0=new O0;return D0.mulp(j1,r1,t1)}nt.prototype.mulTo=function(r1,t1){var D0,Z0=this.length+r1.length;return this.length===10&&r1.length===10?D0=y0(this,r1,t1):Z0<63?D0=p0(this,r1,t1):Z0<1024?D0=A0(this,r1,t1):D0=$0(this,r1,t1),D0};function O0(j1,r1){this.x=j1,this.y=r1}O0.prototype.makeRBT=function(r1){for(var t1=new Array(r1),D0=nt.prototype._countBits(r1)-1,Z0=0;Z0>=1;return Z0},O0.prototype.permute=function(r1,t1,D0,Z0,f1,w1){for(var m1=0;m1>>1)f1++;return 1<>>13,D0[2*w1+1]=f1&8191,f1=f1>>>13;for(w1=2*t1;w1>=26,t1+=Z0/67108864|0,t1+=f1>>>26,this.words[D0]=f1&67108863}return t1!==0&&(this.words[D0]=t1,this.length++),this},nt.prototype.muln=function(r1){return this.clone().imuln(r1)},nt.prototype.sqr=function(){return this.mul(this)},nt.prototype.isqr=function(){return this.imul(this.clone())},nt.prototype.pow=function(r1){var t1=r0(r1);if(t1.length===0)return new nt(1);for(var D0=this,Z0=0;Z0=0);var t1=r1%26,D0=(r1-t1)/26,Z0=67108863>>>26-t1<<26-t1,f1;if(t1!==0){var w1=0;for(f1=0;f1>>26-t1}w1&&(this.words[f1]=w1,this.length++)}if(D0!==0){for(f1=this.length-1;f1>=0;f1--)this.words[f1+D0]=this.words[f1];for(f1=0;f1=0);var Z0;t1?Z0=(t1-t1%26)/26:Z0=0;var f1=r1%26,w1=Math.min((r1-f1)/26,this.length),m1=67108863^67108863>>>f1<w1)for(this.length-=w1,G0=0;G0=0&&(o1!==0||G0>=Z0);G0--){var d1=this.words[G0]|0;this.words[G0]=o1<<26-f1|d1>>>f1,o1=d1&m1}return c1&&o1!==0&&(c1.words[c1.length++]=o1),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},nt.prototype.ishrn=function(r1,t1,D0){return d(this.negative===0),this.iushrn(r1,t1,D0)},nt.prototype.shln=function(r1){return this.clone().ishln(r1)},nt.prototype.ushln=function(r1){return this.clone().iushln(r1)},nt.prototype.shrn=function(r1){return this.clone().ishrn(r1)},nt.prototype.ushrn=function(r1){return this.clone().iushrn(r1)},nt.prototype.testn=function(r1){d(typeof r1=="number"&&r1>=0);var t1=r1%26,D0=(r1-t1)/26,Z0=1<=0);var t1=r1%26,D0=(r1-t1)/26;if(d(this.negative===0,"imaskn works only with positive numbers"),this.length<=D0)return this;if(t1!==0&&D0++,this.length=Math.min(D0,this.length),t1!==0){var Z0=67108863^67108863>>>t1<=67108864;t1++)this.words[t1]-=67108864,t1===this.length-1?this.words[t1+1]=1:this.words[t1+1]++;return this.length=Math.max(this.length,t1+1),this},nt.prototype.isubn=function(r1){if(d(typeof r1=="number"),d(r1<67108864),r1<0)return this.iaddn(-r1);if(this.negative!==0)return this.negative=0,this.iaddn(r1),this.negative=1,this;if(this.words[0]-=r1,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t1=0;t1>26)-(c1/67108864|0),this.words[f1+D0]=w1&67108863}for(;f1>26,this.words[f1+D0]=w1&67108863;if(m1===0)return this.strip();for(d(m1===-1),m1=0,f1=0;f1>26,this.words[f1]=w1&67108863;return this.negative=1,this.strip()},nt.prototype._wordDiv=function(r1,t1){var D0=this.length-r1.length,Z0=this.clone(),f1=r1,w1=f1.words[f1.length-1]|0,m1=this._countBits(w1);D0=26-m1,D0!==0&&(f1=f1.ushln(D0),Z0.iushln(D0),w1=f1.words[f1.length-1]|0);var c1=Z0.length-f1.length,G0;if(t1!=="mod"){G0=new nt(null),G0.length=c1+1,G0.words=new Array(G0.length);for(var o1=0;o1=0;R1--){var O1=(Z0.words[f1.length+R1]|0)*67108864+(Z0.words[f1.length+R1-1]|0);for(O1=Math.min(O1/w1|0,67108863),Z0._ishlnsubmul(f1,O1,R1);Z0.negative!==0;)O1--,Z0.negative=0,Z0._ishlnsubmul(f1,1,R1),Z0.isZero()||(Z0.negative^=1);G0&&(G0.words[R1]=O1)}return G0&&G0.strip(),Z0.strip(),t1!=="div"&&D0!==0&&Z0.iushrn(D0),{div:G0||null,mod:Z0}},nt.prototype.divmod=function(r1,t1,D0){if(d(!r1.isZero()),this.isZero())return{div:new nt(0),mod:new nt(0)};var Z0,f1,w1;return this.negative!==0&&r1.negative===0?(w1=this.neg().divmod(r1,t1),t1!=="mod"&&(Z0=w1.div.neg()),t1!=="div"&&(f1=w1.mod.neg(),D0&&f1.negative!==0&&f1.iadd(r1)),{div:Z0,mod:f1}):this.negative===0&&r1.negative!==0?(w1=this.divmod(r1.neg(),t1),t1!=="mod"&&(Z0=w1.div.neg()),{div:Z0,mod:w1.mod}):this.negative&r1.negative?(w1=this.neg().divmod(r1.neg(),t1),t1!=="div"&&(f1=w1.mod.neg(),D0&&f1.negative!==0&&f1.isub(r1)),{div:w1.div,mod:f1}):r1.length>this.length||this.cmp(r1)<0?{div:new nt(0),mod:this}:r1.length===1?t1==="div"?{div:this.divn(r1.words[0]),mod:null}:t1==="mod"?{div:null,mod:new nt(this.modn(r1.words[0]))}:{div:this.divn(r1.words[0]),mod:new nt(this.modn(r1.words[0]))}:this._wordDiv(r1,t1)},nt.prototype.div=function(r1){return this.divmod(r1,"div",!1).div},nt.prototype.mod=function(r1){return this.divmod(r1,"mod",!1).mod},nt.prototype.umod=function(r1){return this.divmod(r1,"mod",!0).mod},nt.prototype.divRound=function(r1){var t1=this.divmod(r1);if(t1.mod.isZero())return t1.div;var D0=t1.div.negative!==0?t1.mod.isub(r1):t1.mod,Z0=r1.ushrn(1),f1=r1.andln(1),w1=D0.cmp(Z0);return w1<0||f1===1&&w1===0?t1.div:t1.div.negative!==0?t1.div.isubn(1):t1.div.iaddn(1)},nt.prototype.modn=function(r1){d(r1<=67108863);for(var t1=(1<<26)%r1,D0=0,Z0=this.length-1;Z0>=0;Z0--)D0=(t1*D0+(this.words[Z0]|0))%r1;return D0},nt.prototype.idivn=function(r1){d(r1<=67108863);for(var t1=0,D0=this.length-1;D0>=0;D0--){var Z0=(this.words[D0]|0)+t1*67108864;this.words[D0]=Z0/r1|0,t1=Z0%r1}return this.strip()},nt.prototype.divn=function(r1){return this.clone().idivn(r1)},nt.prototype.egcd=function(r1){d(r1.negative===0),d(!r1.isZero());var t1=this,D0=r1.clone();t1.negative!==0?t1=t1.umod(r1):t1=t1.clone();for(var Z0=new nt(1),f1=new nt(0),w1=new nt(0),m1=new nt(1),c1=0;t1.isEven()&&D0.isEven();)t1.iushrn(1),D0.iushrn(1),++c1;for(var G0=D0.clone(),o1=t1.clone();!t1.isZero();){for(var d1=0,R1=1;!(t1.words[0]&R1)&&d1<26;++d1,R1<<=1);if(d1>0)for(t1.iushrn(d1);d1-- >0;)(Z0.isOdd()||f1.isOdd())&&(Z0.iadd(G0),f1.isub(o1)),Z0.iushrn(1),f1.iushrn(1);for(var O1=0,Q1=1;!(D0.words[0]&Q1)&&O1<26;++O1,Q1<<=1);if(O1>0)for(D0.iushrn(O1);O1-- >0;)(w1.isOdd()||m1.isOdd())&&(w1.iadd(G0),m1.isub(o1)),w1.iushrn(1),m1.iushrn(1);t1.cmp(D0)>=0?(t1.isub(D0),Z0.isub(w1),f1.isub(m1)):(D0.isub(t1),w1.isub(Z0),m1.isub(f1))}return{a:w1,b:m1,gcd:D0.iushln(c1)}},nt.prototype._invmp=function(r1){d(r1.negative===0),d(!r1.isZero());var t1=this,D0=r1.clone();t1.negative!==0?t1=t1.umod(r1):t1=t1.clone();for(var Z0=new nt(1),f1=new nt(0),w1=D0.clone();t1.cmpn(1)>0&&D0.cmpn(1)>0;){for(var m1=0,c1=1;!(t1.words[0]&c1)&&m1<26;++m1,c1<<=1);if(m1>0)for(t1.iushrn(m1);m1-- >0;)Z0.isOdd()&&Z0.iadd(w1),Z0.iushrn(1);for(var G0=0,o1=1;!(D0.words[0]&o1)&&G0<26;++G0,o1<<=1);if(G0>0)for(D0.iushrn(G0);G0-- >0;)f1.isOdd()&&f1.iadd(w1),f1.iushrn(1);t1.cmp(D0)>=0?(t1.isub(D0),Z0.isub(f1)):(D0.isub(t1),f1.isub(Z0))}var d1;return t1.cmpn(1)===0?d1=Z0:d1=f1,d1.cmpn(0)<0&&d1.iadd(r1),d1},nt.prototype.gcd=function(r1){if(this.isZero())return r1.abs();if(r1.isZero())return this.abs();var t1=this.clone(),D0=r1.clone();t1.negative=0,D0.negative=0;for(var Z0=0;t1.isEven()&&D0.isEven();Z0++)t1.iushrn(1),D0.iushrn(1);do{for(;t1.isEven();)t1.iushrn(1);for(;D0.isEven();)D0.iushrn(1);var f1=t1.cmp(D0);if(f1<0){var w1=t1;t1=D0,D0=w1}else if(f1===0||D0.cmpn(1)===0)break;t1.isub(D0)}while(!0);return D0.iushln(Z0)},nt.prototype.invm=function(r1){return this.egcd(r1).a.umod(r1)},nt.prototype.isEven=function(){return(this.words[0]&1)===0},nt.prototype.isOdd=function(){return(this.words[0]&1)===1},nt.prototype.andln=function(r1){return this.words[0]&r1},nt.prototype.bincn=function(r1){d(typeof r1=="number");var t1=r1%26,D0=(r1-t1)/26,Z0=1<>>26,m1&=67108863,this.words[w1]=m1}return f1!==0&&(this.words[w1]=f1,this.length++),this},nt.prototype.isZero=function(){return this.length===1&&this.words[0]===0},nt.prototype.cmpn=function(r1){var t1=r1<0;if(this.negative!==0&&!t1)return-1;if(this.negative===0&&t1)return 1;this.strip();var D0;if(this.length>1)D0=1;else{t1&&(r1=-r1),d(r1<=67108863,"Number is too big");var Z0=this.words[0]|0;D0=Z0===r1?0:Z0r1.length)return 1;if(this.length=0;D0--){var Z0=this.words[D0]|0,f1=r1.words[D0]|0;if(Z0!==f1){Z0f1&&(t1=1);break}}return t1},nt.prototype.gtn=function(r1){return this.cmpn(r1)===1},nt.prototype.gt=function(r1){return this.cmp(r1)===1},nt.prototype.gten=function(r1){return this.cmpn(r1)>=0},nt.prototype.gte=function(r1){return this.cmp(r1)>=0},nt.prototype.ltn=function(r1){return this.cmpn(r1)===-1},nt.prototype.lt=function(r1){return this.cmp(r1)===-1},nt.prototype.lten=function(r1){return this.cmpn(r1)<=0},nt.prototype.lte=function(r1){return this.cmp(r1)<=0},nt.prototype.eqn=function(r1){return this.cmpn(r1)===0},nt.prototype.eq=function(r1){return this.cmp(r1)===0},nt.red=function(r1){return new B1(r1)},nt.prototype.toRed=function(r1){return d(!this.red,"Already a number in reduction context"),d(this.negative===0,"red works only with positives"),r1.convertTo(this)._forceRed(r1)},nt.prototype.fromRed=function(){return d(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},nt.prototype._forceRed=function(r1){return this.red=r1,this},nt.prototype.forceRed=function(r1){return d(!this.red,"Already a number in reduction context"),this._forceRed(r1)},nt.prototype.redAdd=function(r1){return d(this.red,"redAdd works only with red numbers"),this.red.add(this,r1)},nt.prototype.redIAdd=function(r1){return d(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,r1)},nt.prototype.redSub=function(r1){return d(this.red,"redSub works only with red numbers"),this.red.sub(this,r1)},nt.prototype.redISub=function(r1){return d(this.red,"redISub works only with red numbers"),this.red.isub(this,r1)},nt.prototype.redShl=function(r1){return d(this.red,"redShl works only with red numbers"),this.red.shl(this,r1)},nt.prototype.redMul=function(r1){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,r1),this.red.mul(this,r1)},nt.prototype.redIMul=function(r1){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,r1),this.red.imul(this,r1)},nt.prototype.redSqr=function(){return d(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},nt.prototype.redISqr=function(){return d(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},nt.prototype.redSqrt=function(){return d(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},nt.prototype.redInvm=function(){return d(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},nt.prototype.redNeg=function(){return d(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},nt.prototype.redPow=function(r1){return d(this.red&&!r1.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,r1)};var L0={k256:null,p224:null,p192:null,p25519:null};function V0(j1,r1){this.name=j1,this.p=new nt(r1,16),this.n=this.p.bitLength(),this.k=new nt(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}V0.prototype._tmp=function(){var r1=new nt(null);return r1.words=new Array(Math.ceil(this.n/13)),r1},V0.prototype.ireduce=function(r1){var t1=r1,D0;do this.split(t1,this.tmp),t1=this.imulK(t1),t1=t1.iadd(this.tmp),D0=t1.bitLength();while(D0>this.n);var Z0=D00?t1.isub(this.p):t1.strip!==void 0?t1.strip():t1._strip(),t1},V0.prototype.split=function(r1,t1){r1.iushrn(this.n,0,t1)},V0.prototype.imulK=function(r1){return r1.imul(this.k)};function F0(){V0.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}tt(F0,V0),F0.prototype.split=function(r1,t1){for(var D0=4194303,Z0=Math.min(r1.length,9),f1=0;f1>>22,w1=m1}w1>>>=22,r1.words[f1-10]=w1,w1===0&&r1.length>10?r1.length-=10:r1.length-=9},F0.prototype.imulK=function(r1){r1.words[r1.length]=0,r1.words[r1.length+1]=0,r1.length+=2;for(var t1=0,D0=0;D0>>=26,r1.words[D0]=f1,t1=Z0}return t1!==0&&(r1.words[r1.length++]=t1),r1},nt._prime=function(r1){if(L0[r1])return L0[r1];var t1;if(r1==="k256")t1=new F0;else if(r1==="p224")t1=new u1;else if(r1==="p192")t1=new g1;else if(r1==="p25519")t1=new E1;else throw new Error("Unknown prime "+r1);return L0[r1]=t1,t1};function B1(j1){if(typeof j1=="string"){var r1=nt._prime(j1);this.m=r1.p,this.prime=r1}else d(j1.gtn(1),"modulus must be greater than 1"),this.m=j1,this.prime=null}B1.prototype._verify1=function(r1){d(r1.negative===0,"red works only with positives"),d(r1.red,"red works only with red numbers")},B1.prototype._verify2=function(r1,t1){d((r1.negative|t1.negative)===0,"red works only with positives"),d(r1.red&&r1.red===t1.red,"red works only with red numbers")},B1.prototype.imod=function(r1){return this.prime?this.prime.ireduce(r1)._forceRed(this):r1.umod(this.m)._forceRed(this)},B1.prototype.neg=function(r1){return r1.isZero()?r1.clone():this.m.sub(r1)._forceRed(this)},B1.prototype.add=function(r1,t1){this._verify2(r1,t1);var D0=r1.add(t1);return D0.cmp(this.m)>=0&&D0.isub(this.m),D0._forceRed(this)},B1.prototype.iadd=function(r1,t1){this._verify2(r1,t1);var D0=r1.iadd(t1);return D0.cmp(this.m)>=0&&D0.isub(this.m),D0},B1.prototype.sub=function(r1,t1){this._verify2(r1,t1);var D0=r1.sub(t1);return D0.cmpn(0)<0&&D0.iadd(this.m),D0._forceRed(this)},B1.prototype.isub=function(r1,t1){this._verify2(r1,t1);var D0=r1.isub(t1);return D0.cmpn(0)<0&&D0.iadd(this.m),D0},B1.prototype.shl=function(r1,t1){return this._verify1(r1),this.imod(r1.ushln(t1))},B1.prototype.imul=function(r1,t1){return this._verify2(r1,t1),this.imod(r1.imul(t1))},B1.prototype.mul=function(r1,t1){return this._verify2(r1,t1),this.imod(r1.mul(t1))},B1.prototype.isqr=function(r1){return this.imul(r1,r1.clone())},B1.prototype.sqr=function(r1){return this.mul(r1,r1)},B1.prototype.sqrt=function(r1){if(r1.isZero())return r1.clone();var t1=this.m.andln(3);if(d(t1%2===1),t1===3){var D0=this.m.add(new nt(1)).iushrn(2);return this.pow(r1,D0)}for(var Z0=this.m.subn(1),f1=0;!Z0.isZero()&&Z0.andln(1)===0;)f1++,Z0.iushrn(1);d(!Z0.isZero());var w1=new nt(1).toRed(this),m1=w1.redNeg(),c1=this.m.subn(1).iushrn(1),G0=this.m.bitLength();for(G0=new nt(2*G0*G0).toRed(this);this.pow(G0,c1).cmp(m1)!==0;)G0.redIAdd(m1);for(var o1=this.pow(G0,Z0),d1=this.pow(r1,Z0.addn(1).iushrn(1)),R1=this.pow(r1,Z0),O1=f1;R1.cmp(w1)!==0;){for(var Q1=R1,rv=0;Q1.cmp(w1)!==0;rv++)Q1=Q1.redSqr();d(rv=0;f1--){for(var o1=t1.words[f1],d1=G0-1;d1>=0;d1--){var R1=o1>>d1&1;if(w1!==Z0[0]&&(w1=this.sqr(w1)),R1===0&&m1===0){c1=0;continue}m1<<=1,m1|=R1,c1++,!(c1!==D0&&(f1!==0||d1!==0))&&(w1=this.mul(w1,Z0[m1]),c1=0,m1=0)}G0=26}return w1},B1.prototype.convertTo=function(r1){var t1=r1.umod(this.m);return t1===r1?t1.clone():t1},B1.prototype.convertFrom=function(r1){var t1=r1.clone();return t1.red=null,t1},nt.mont=function(r1){return new lv(r1)};function lv(j1){B1.call(this,j1),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new nt(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}tt(lv,B1),lv.prototype.convertTo=function(r1){return this.imod(r1.ushln(this.shift))},lv.prototype.convertFrom=function(r1){var t1=this.imod(r1.mul(this.rinv));return t1.red=null,t1},lv.prototype.imul=function(r1,t1){if(r1.isZero()||t1.isZero())return r1.words[0]=0,r1.length=1,r1;var D0=r1.imul(t1),Z0=D0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),f1=D0.isub(Z0).iushrn(this.shift),w1=f1;return f1.cmp(this.m)>=0?w1=f1.isub(this.m):f1.cmpn(0)<0&&(w1=f1.iadd(this.m)),w1._forceRed(this)},lv.prototype.mul=function(r1,t1){if(r1.isZero()||t1.isZero())return new nt(0)._forceRed(this);var D0=r1.mul(t1),Z0=D0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),f1=D0.isub(Z0).iushrn(this.shift),w1=f1;return f1.cmp(this.m)>=0?w1=f1.isub(this.m):f1.cmpn(0)<0&&(w1=f1.iadd(this.m)),w1._forceRed(this)},lv.prototype.invm=function(r1){var t1=this.imod(r1._invmp(this.m).mul(this.r2));return t1._forceRed(this)}})(o,commonjsGlobal$4)})(bn$1);var bnExports=bn$1.exports,brorand={exports:{}},hasRequiredBrorand;function requireBrorand(){if(hasRequiredBrorand)return brorand.exports;hasRequiredBrorand=1;var o;brorand.exports=function(tt){return o||(o=new a(null)),o.generate(tt)};function a(d){this.rand=d}if(brorand.exports.Rand=a,a.prototype.generate=function(tt){return this._rand(tt)},a.prototype._rand=function(tt){if(this.rand.getBytes)return this.rand.getBytes(tt);for(var nt=new Uint8Array(tt),$a=0;$a=0);return Ws},c.prototype._randrange=function(tt,nt){var $a=nt.sub(tt);return tt.add(this._randbelow($a))},c.prototype.test=function(tt,nt,$a){var Ws=tt.bitLength(),gu=o.mont(tt),Su=new o(1).toRed(gu);nt||(nt=Math.max(1,Ws/48|0));for(var $u=tt.subn(1),Iu=0;!$u.testn(Iu);Iu++);for(var Xu=tt.shrn(Iu),r0=$u.toRed(gu),p0=!0;nt>0;nt--){var y0=this._randrange(new o(2),$u);$a&&$a(y0);var A0=y0.toRed(gu).redPow(Xu);if(!(A0.cmp(Su)===0||A0.cmp(r0)===0)){for(var $0=1;$00;nt--){var r0=this._randrange(new o(2),Su),p0=tt.gcd(r0);if(p0.cmpn(1)!==0)return p0;var y0=r0.toRed(Ws).redPow(Iu);if(!(y0.cmp(gu)===0||y0.cmp(Xu)===0)){for(var A0=1;A0<$u;A0++){if(y0=y0.redSqr(),y0.cmp(gu)===0)return y0.fromRed().subn(1).gcd(tt);if(y0.cmp(Xu)===0)break}if(A0===$u)return y0=y0.redSqr(),y0.fromRed().subn(1).gcd(tt)}}return!1},mr$1}var generatePrime,hasRequiredGeneratePrime;function requireGeneratePrime(){if(hasRequiredGeneratePrime)return generatePrime;hasRequiredGeneratePrime=1;var o=browserExports;generatePrime=A0,A0.simpleSieve=p0,A0.fermatTest=y0;var a=bnExports,c=new a(24),d=requireMr(),tt=new d,nt=new a(1),$a=new a(2),Ws=new a(5);new a(16),new a(8);var gu=new a(10),Su=new a(3);new a(7);var $u=new a(11),Iu=new a(4);new a(12);var Xu=null;function r0(){if(Xu!==null)return Xu;var $0=1048576,O0=[];O0[0]=2;for(var L0=1,V0=3;V0<$0;V0+=2){for(var F0=Math.ceil(Math.sqrt(V0)),u1=0;u1$0;)L0.ishrn(1);if(L0.isEven()&&L0.iadd(nt),L0.testn(1)||L0.iadd($a),O0.cmp($a)){if(!O0.cmp(Ws))for(;L0.mod(gu).cmp(Su);)L0.iadd(Iu)}else for(;L0.mod(c).cmp($u);)L0.iadd(Iu);if(V0=L0.shrn(1),p0(V0)&&p0(L0)&&y0(V0)&&y0(L0)&&tt.test(V0)&&tt.test(L0))return L0}}return generatePrime}const modp1={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18={gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"},require$$1$2={modp1,modp2,modp5,modp14,modp15,modp16,modp17,modp18};var dh$1,hasRequiredDh;function requireDh(){if(hasRequiredDh)return dh$1;hasRequiredDh=1;var o=bnExports,a=requireMr(),c=new a,d=new o(24),tt=new o(11),nt=new o(10),$a=new o(3),Ws=new o(7),gu=requireGeneratePrime(),Su=browserExports;dh$1=p0;function $u(A0,$0){return $0=$0||"utf8",Buffer$C.isBuffer(A0)||(A0=new Buffer$C(A0,$0)),this._pub=new o(A0),this}function Iu(A0,$0){return $0=$0||"utf8",Buffer$C.isBuffer(A0)||(A0=new Buffer$C(A0,$0)),this._priv=new o(A0),this}var Xu={};function r0(A0,$0){var O0=$0.toString("hex"),L0=[O0,A0.toString(16)].join("_");if(L0 in Xu)return Xu[L0];var V0=0;if(A0.isEven()||!gu.simpleSieve||!gu.fermatTest(A0)||!c.test(A0))return V0+=1,O0==="02"||O0==="05"?V0+=8:V0+=4,Xu[L0]=V0,V0;c.test(A0.shrn(1))||(V0+=2);var F0;switch(O0){case"02":A0.mod(d).cmp(tt)&&(V0+=8);break;case"05":F0=A0.mod(nt),F0.cmp($a)&&F0.cmp(Ws)&&(V0+=8);break;default:V0+=4}return Xu[L0]=V0,V0}function p0(A0,$0,O0){this.setGenerator($0),this.__prime=new o(A0),this._prime=o.mont(this.__prime),this._primeLen=A0.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,O0?(this.setPublicKey=$u,this.setPrivateKey=Iu):this._primeCode=8}Object.defineProperty(p0.prototype,"verifyError",{enumerable:!0,get:function(){return typeof this._primeCode!="number"&&(this._primeCode=r0(this.__prime,this.__gen)),this._primeCode}}),p0.prototype.generateKeys=function(){return this._priv||(this._priv=new o(Su(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},p0.prototype.computeSecret=function(A0){A0=new o(A0),A0=A0.toRed(this._prime);var $0=A0.redPow(this._priv).fromRed(),O0=new Buffer$C($0.toArray()),L0=this.getPrime();if(O0.length"u"||!process$1$4.version||process$1$4.version.indexOf("v0.")===0||process$1$4.version.indexOf("v1.")===0&&process$1$4.version.indexOf("v1.8.")!==0?processNextickArgs.exports={nextTick}:processNextickArgs.exports=process$1$4;function nextTick(o,a,c,d){if(typeof o!="function")throw new TypeError('"callback" argument must be a function');var tt=arguments.length,nt,$a;switch(tt){case 0:case 1:return process$1$4.nextTick(o);case 2:return process$1$4.nextTick(function(){o.call(null,a)});case 3:return process$1$4.nextTick(function(){o.call(null,a,c)});case 4:return process$1$4.nextTick(function(){o.call(null,a,c,d)});default:for(nt=new Array(tt-1),$a=0;$a"u"}util$3.isPrimitive=isPrimitive;util$3.isBuffer=require$$1$4.Buffer.isBuffer;function objectToString$1(o){return Object.prototype.toString.call(o)}var BufferList={exports:{}},hasRequiredBufferList;function requireBufferList(){return hasRequiredBufferList||(hasRequiredBufferList=1,function(o){function a(nt,$a){if(!(nt instanceof $a))throw new TypeError("Cannot call a class as a function")}var c=safeBufferExports.Buffer,d=util$5;function tt(nt,$a,Ws){nt.copy($a,Ws)}o.exports=function(){function nt(){a(this,nt),this.head=null,this.tail=null,this.length=0}return nt.prototype.push=function(Ws){var gu={data:Ws,next:null};this.length>0?this.tail.next=gu:this.head=gu,this.tail=gu,++this.length},nt.prototype.unshift=function(Ws){var gu={data:Ws,next:this.head};this.length===0&&(this.tail=gu),this.head=gu,++this.length},nt.prototype.shift=function(){if(this.length!==0){var Ws=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,Ws}},nt.prototype.clear=function(){this.head=this.tail=null,this.length=0},nt.prototype.join=function(Ws){if(this.length===0)return"";for(var gu=this.head,Su=""+gu.data;gu=gu.next;)Su+=Ws+gu.data;return Su},nt.prototype.concat=function(Ws){if(this.length===0)return c.alloc(0);for(var gu=c.allocUnsafe(Ws>>>0),Su=this.head,$u=0;Su;)tt(Su.data,gu,$u),$u+=Su.data.length,Su=Su.next;return gu},nt}(),d&&d.inspect&&d.inspect.custom&&(o.exports.prototype[d.inspect.custom]=function(){var nt=d.inspect({length:this.length});return this.constructor.name+" "+nt})}(BufferList)),BufferList.exports}var pna=processNextickArgsExports;function destroy(o,a){var c=this,d=this._readableState&&this._readableState.destroyed,tt=this._writableState&&this._writableState.destroyed;return d||tt?(a?a(o):o&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,pna.nextTick(emitErrorNT,this,o)):pna.nextTick(emitErrorNT,this,o)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(o||null,function(nt){!a&&nt?c._writableState?c._writableState.errorEmitted||(c._writableState.errorEmitted=!0,pna.nextTick(emitErrorNT,c,nt)):pna.nextTick(emitErrorNT,c,nt):a&&a(nt)}),this)}function undestroy(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function emitErrorNT(o,a){o.emit("error",a)}var destroy_1={destroy,undestroy},_stream_writable,hasRequired_stream_writable;function require_stream_writable(){if(hasRequired_stream_writable)return _stream_writable;hasRequired_stream_writable=1;var o=processNextickArgsExports;_stream_writable=y0;function a(w1){var m1=this;this.next=null,this.entry=null,this.finish=function(){f1(m1,w1)}}var c=!process$1$4.browser&&["v0.10","v0.9."].indexOf(process$1$4.version.slice(0,5))>-1?setImmediate:o.nextTick,d;y0.WritableState=r0;var tt=Object.create(util$3);tt.inherits=inherits_browserExports;var nt={deprecate:browser$c},$a=streamBrowser,Ws=safeBufferExports.Buffer,gu=(typeof commonjsGlobal$4<"u"?commonjsGlobal$4:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function Su(w1){return Ws.from(w1)}function $u(w1){return Ws.isBuffer(w1)||w1 instanceof gu}var Iu=destroy_1;tt.inherits(y0,$a);function Xu(){}function r0(w1,m1){d=d||require_stream_duplex(),w1=w1||{};var c1=m1 instanceof d;this.objectMode=!!w1.objectMode,c1&&(this.objectMode=this.objectMode||!!w1.writableObjectMode);var G0=w1.highWaterMark,o1=w1.writableHighWaterMark,d1=this.objectMode?16:16*1024;G0||G0===0?this.highWaterMark=G0:c1&&(o1||o1===0)?this.highWaterMark=o1:this.highWaterMark=d1,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var R1=w1.decodeStrings===!1;this.decodeStrings=!R1,this.defaultEncoding=w1.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(O1){g1(m1,O1)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}r0.prototype.getBuffer=function(){for(var m1=this.bufferedRequest,c1=[];m1;)c1.push(m1),m1=m1.next;return c1},function(){try{Object.defineProperty(r0.prototype,"buffer",{get:nt.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var p0;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(p0=Function.prototype[Symbol.hasInstance],Object.defineProperty(y0,Symbol.hasInstance,{value:function(w1){return p0.call(this,w1)?!0:this!==y0?!1:w1&&w1._writableState instanceof r0}})):p0=function(w1){return w1 instanceof this};function y0(w1){if(d=d||require_stream_duplex(),!p0.call(y0,this)&&!(this instanceof d))return new y0(w1);this._writableState=new r0(w1,this),this.writable=!0,w1&&(typeof w1.write=="function"&&(this._write=w1.write),typeof w1.writev=="function"&&(this._writev=w1.writev),typeof w1.destroy=="function"&&(this._destroy=w1.destroy),typeof w1.final=="function"&&(this._final=w1.final)),$a.call(this)}y0.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function A0(w1,m1){var c1=new Error("write after end");w1.emit("error",c1),o.nextTick(m1,c1)}function $0(w1,m1,c1,G0){var o1=!0,d1=!1;return c1===null?d1=new TypeError("May not write null values to stream"):typeof c1!="string"&&c1!==void 0&&!m1.objectMode&&(d1=new TypeError("Invalid non-string/buffer chunk")),d1&&(w1.emit("error",d1),o.nextTick(G0,d1),o1=!1),o1}y0.prototype.write=function(w1,m1,c1){var G0=this._writableState,o1=!1,d1=!G0.objectMode&&$u(w1);return d1&&!Ws.isBuffer(w1)&&(w1=Su(w1)),typeof m1=="function"&&(c1=m1,m1=null),d1?m1="buffer":m1||(m1=G0.defaultEncoding),typeof c1!="function"&&(c1=Xu),G0.ended?A0(this,c1):(d1||$0(this,G0,w1,c1))&&(G0.pendingcb++,o1=L0(this,G0,d1,w1,m1,c1)),o1},y0.prototype.cork=function(){var w1=this._writableState;w1.corked++},y0.prototype.uncork=function(){var w1=this._writableState;w1.corked&&(w1.corked--,!w1.writing&&!w1.corked&&!w1.bufferProcessing&&w1.bufferedRequest&&lv(this,w1))},y0.prototype.setDefaultEncoding=function(m1){if(typeof m1=="string"&&(m1=m1.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((m1+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+m1);return this._writableState.defaultEncoding=m1,this};function O0(w1,m1,c1){return!w1.objectMode&&w1.decodeStrings!==!1&&typeof m1=="string"&&(m1=Ws.from(m1,c1)),m1}Object.defineProperty(y0.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function L0(w1,m1,c1,G0,o1,d1){if(!c1){var R1=O0(m1,G0,o1);G0!==R1&&(c1=!0,o1="buffer",G0=R1)}var O1=m1.objectMode?1:G0.length;m1.length+=O1;var Q1=m1.length0?(typeof ev!="string"&&!cv.objectMode&&Object.getPrototypeOf(ev)!==nt.prototype&&(ev=Ws(ev)),Zv?cv.endEmitted?D1.emit("error",new Error("stream.unshift() after end event")):V0(D1,cv,ev,!0):cv.ended?D1.emit("error",new Error("stream.push() after EOF")):(cv.reading=!1,cv.decoder&&!Mv?(ev=cv.decoder.write(ev),cv.objectMode||ev.length!==0?V0(D1,cv,ev,!1):t1(D1,cv)):V0(D1,cv,ev,!1))):Zv||(cv.reading=!1)}return u1(cv)}function V0(D1,ev,Mv,Zv){ev.flowing&&ev.length===0&&!ev.sync?(D1.emit("data",Mv),D1.read(0)):(ev.length+=ev.objectMode?1:Mv.length,Zv?ev.buffer.unshift(Mv):ev.buffer.push(Mv),ev.needReadable&&j1(D1)),t1(D1,ev)}function F0(D1,ev){var Mv;return!gu(ev)&&typeof ev!="string"&&ev!==void 0&&!D1.objectMode&&(Mv=new TypeError("Invalid non-string/buffer chunk")),Mv}function u1(D1){return!D1.ended&&(D1.needReadable||D1.length=g1?D1=g1:(D1--,D1|=D1>>>1,D1|=D1>>>2,D1|=D1>>>4,D1|=D1>>>8,D1|=D1>>>16,D1++),D1}function B1(D1,ev){return D1<=0||ev.length===0&&ev.ended?0:ev.objectMode?1:D1!==D1?ev.flowing&&ev.length?ev.buffer.head.data.length:ev.length:(D1>ev.highWaterMark&&(ev.highWaterMark=E1(D1)),D1<=ev.length?D1:ev.ended?ev.length:(ev.needReadable=!0,0))}O0.prototype.read=function(D1){Iu("read",D1),D1=parseInt(D1,10);var ev=this._readableState,Mv=D1;if(D1!==0&&(ev.emittedReadable=!1),D1===0&&ev.needReadable&&(ev.length>=ev.highWaterMark||ev.ended))return Iu("read: emitReadable",ev.length,ev.ended),ev.length===0&&ev.ended?O1(this):j1(this),null;if(D1=B1(D1,ev),D1===0&&ev.ended)return ev.length===0&&O1(this),null;var Zv=ev.needReadable;Iu("need readable",Zv),(ev.length===0||ev.length-D10?fv=G0(D1,ev):fv=null,fv===null?(ev.needReadable=!0,D1=0):ev.length-=D1,ev.length===0&&(ev.ended||(ev.needReadable=!0),Mv!==D1&&ev.ended&&O1(this)),fv!==null&&this.emit("data",fv),fv};function lv(D1,ev){if(!ev.ended){if(ev.decoder){var Mv=ev.decoder.end();Mv&&Mv.length&&(ev.buffer.push(Mv),ev.length+=ev.objectMode?1:Mv.length)}ev.ended=!0,j1(D1)}}function j1(D1){var ev=D1._readableState;ev.needReadable=!1,ev.emittedReadable||(Iu("emitReadable",ev.flowing),ev.emittedReadable=!0,ev.sync?o.nextTick(r1,D1):r1(D1))}function r1(D1){Iu("emit readable"),D1.emit("readable"),c1(D1)}function t1(D1,ev){ev.readingMore||(ev.readingMore=!0,o.nextTick(D0,D1,ev))}function D0(D1,ev){for(var Mv=ev.length;!ev.reading&&!ev.flowing&&!ev.ended&&ev.length1&&rv(Zv.pipes,D1)!==-1)&&!Hy&&(Iu("false write response, pause",Zv.awaitDrain),Zv.awaitDrain++,C2=!0),Mv.pause())}function jw(uw){Iu("onerror",uw),Hw(),D1.removeListener("error",jw),d(D1,"error")===0&&D1.emit("error",uw)}A0(D1,"error",jw);function pw(){D1.removeListener("finish",vw),Hw()}D1.once("close",pw);function vw(){Iu("onfinish"),D1.removeListener("close",pw),Hw()}D1.once("finish",vw);function Hw(){Iu("unpipe"),Mv.unpipe(D1)}return D1.emit("pipe",Mv),Zv.flowing||(Iu("pipe resume"),Mv.resume()),D1};function Z0(D1){return function(){var ev=D1._readableState;Iu("pipeOnDrain",ev.awaitDrain),ev.awaitDrain&&ev.awaitDrain--,ev.awaitDrain===0&&d(D1,"data")&&(ev.flowing=!0,c1(D1))}}O0.prototype.unpipe=function(D1){var ev=this._readableState,Mv={hasUnpiped:!1};if(ev.pipesCount===0)return this;if(ev.pipesCount===1)return D1&&D1!==ev.pipes?this:(D1||(D1=ev.pipes),ev.pipes=null,ev.pipesCount=0,ev.flowing=!1,D1&&D1.emit("unpipe",this,Mv),this);if(!D1){var Zv=ev.pipes,fv=ev.pipesCount;ev.pipes=null,ev.pipesCount=0,ev.flowing=!1;for(var cv=0;cv=ev.length?(ev.decoder?Mv=ev.buffer.join(""):ev.buffer.length===1?Mv=ev.buffer.head.data:Mv=ev.buffer.concat(ev.length),ev.buffer.clear()):Mv=o1(D1,ev.buffer,ev.decoder),Mv}function o1(D1,ev,Mv){var Zv;return D1cv.length?cv.length:D1;if(ly===cv.length?fv+=cv:fv+=cv.slice(0,D1),D1-=ly,D1===0){ly===cv.length?(++Zv,Mv.next?ev.head=Mv.next:ev.head=ev.tail=null):(ev.head=Mv,Mv.data=cv.slice(ly));break}++Zv}return ev.length-=Zv,fv}function R1(D1,ev){var Mv=nt.allocUnsafe(D1),Zv=ev.head,fv=1;for(Zv.data.copy(Mv),D1-=Zv.data.length;Zv=Zv.next;){var cv=Zv.data,ly=D1>cv.length?cv.length:D1;if(cv.copy(Mv,Mv.length-D1,0,ly),D1-=ly,D1===0){ly===cv.length?(++fv,Zv.next?ev.head=Zv.next:ev.head=ev.tail=null):(ev.head=Zv,Zv.data=cv.slice(ly));break}++fv}return ev.length-=fv,Mv}function O1(D1){var ev=D1._readableState;if(ev.length>0)throw new Error('"endReadable()" called on non-empty stream');ev.endEmitted||(ev.ended=!0,o.nextTick(Q1,ev,D1))}function Q1(D1,ev){!D1.endEmitted&&D1.length===0&&(D1.endEmitted=!0,ev.readable=!1,ev.emit("end"))}function rv(D1,ev){for(var Mv=0,Zv=D1.length;Mv=0||!c.umod(o.prime1)||!c.umod(o.prime2));return c}function crt$2(o,a){var c=blind(a),d=a.modulus.byteLength(),tt=new BN$a(o).mul(c.blinder).umod(a.modulus),nt=tt.toRed(BN$a.mont(a.prime1)),$a=tt.toRed(BN$a.mont(a.prime2)),Ws=a.coefficient,gu=a.prime1,Su=a.prime2,$u=nt.redPow(a.exponent1).fromRed(),Iu=$a.redPow(a.exponent2).fromRed(),Xu=$u.isub(Iu).imul(Ws).umod(gu).imul(Su);return Iu.iadd(Xu).imul(c.unblinder).umod(a.modulus).toArrayLike(Buffer$C,"be",d)}crt$2.getr=getr;var browserifyRsa=crt$2,elliptic={};const name$1="elliptic",version$7="6.5.5",description$1="EC cryptography",main="lib/elliptic.js",files=["lib"],scripts={lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository={type:"git",url:"git@github.com:indutny/elliptic"},keywords=["EC","Elliptic","curve","Cryptography"],author="Fedor Indutny ",license="MIT",bugs={url:"https://github.com/indutny/elliptic/issues"},homepage="https://github.com/indutny/elliptic",devDependencies={brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies$1={"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"},require$$0={name:name$1,version:version$7,description:description$1,main,files,scripts,repository,keywords,author,license,bugs,homepage,devDependencies,dependencies:dependencies$1};var utils$p={},utils$o={};(function(o){var a=o;function c(nt,$a){if(Array.isArray(nt))return nt.slice();if(!nt)return[];var Ws=[];if(typeof nt!="string"){for(var gu=0;gu>8,Iu=Su&255;$u?Ws.push($u,Iu):Ws.push(Iu)}return Ws}a.toArray=c;function d(nt){return nt.length===1?"0"+nt:nt}a.zero2=d;function tt(nt){for(var $a="",Ws=0;Ws(y0>>1)-1?$0=(y0>>1)-O0:$0=O0,A0.isubn($0)):$0=0,r0[p0]=$0,A0.iushrn(1)}return r0}a.getNAF=nt;function $a($u,Iu){var Xu=[[],[]];$u=$u.clone(),Iu=Iu.clone();for(var r0=0,p0=0,y0;$u.cmpn(-r0)>0||Iu.cmpn(-p0)>0;){var A0=$u.andln(3)+r0&3,$0=Iu.andln(3)+p0&3;A0===3&&(A0=-1),$0===3&&($0=-1);var O0;A0&1?(y0=$u.andln(7)+r0&7,(y0===3||y0===5)&&$0===2?O0=-A0:O0=A0):O0=0,Xu[0].push(O0);var L0;$0&1?(y0=Iu.andln(7)+p0&7,(y0===3||y0===5)&&A0===2?L0=-$0:L0=$0):L0=0,Xu[1].push(L0),2*r0===O0+1&&(r0=1-r0),2*p0===L0+1&&(p0=1-p0),$u.iushrn(1),Iu.iushrn(1)}return Xu}a.getJSF=$a;function Ws($u,Iu,Xu){var r0="_"+Iu;$u.prototype[Iu]=function(){return this[r0]!==void 0?this[r0]:this[r0]=Xu.call(this)}}a.cachedProperty=Ws;function gu($u){return typeof $u=="string"?a.toArray($u,"hex"):$u}a.parseBytes=gu;function Su($u){return new c($u,"hex","le")}a.intFromLE=Su})(utils$p);var curve$1={},BN$9=bnExports,utils$n=utils$p,getNAF=utils$n.getNAF,getJSF=utils$n.getJSF,assert$f=utils$n.assert;function BaseCurve(o,a){this.type=o,this.p=new BN$9(a.p,16),this.red=a.prime?BN$9.red(a.prime):BN$9.mont(this.p),this.zero=new BN$9(0).toRed(this.red),this.one=new BN$9(1).toRed(this.red),this.two=new BN$9(2).toRed(this.red),this.n=a.n&&new BN$9(a.n,16),this.g=a.g&&this.pointFromJSON(a.g,a.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var c=this.n&&this.p.div(this.n);!c||c.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var base$3=BaseCurve;BaseCurve.prototype.point=function(){throw new Error("Not implemented")};BaseCurve.prototype.validate=function(){throw new Error("Not implemented")};BaseCurve.prototype._fixedNafMul=function(a,c){assert$f(a.precomputed);var d=a._getDoubles(),tt=getNAF(c,1,this._bitLength),nt=(1<=Ws;Su--)gu=(gu<<1)+tt[Su];$a.push(gu)}for(var $u=this.jpoint(null,null,null),Iu=this.jpoint(null,null,null),Xu=nt;Xu>0;Xu--){for(Ws=0;Ws<$a.length;Ws++)gu=$a[Ws],gu===Xu?Iu=Iu.mixedAdd(d.points[Ws]):gu===-Xu&&(Iu=Iu.mixedAdd(d.points[Ws].neg()));$u=$u.add(Iu)}return $u.toP()};BaseCurve.prototype._wnafMul=function(a,c){var d=4,tt=a._getNAFPoints(d);d=tt.wnd;for(var nt=tt.points,$a=getNAF(c,d,this._bitLength),Ws=this.jpoint(null,null,null),gu=$a.length-1;gu>=0;gu--){for(var Su=0;gu>=0&&$a[gu]===0;gu--)Su++;if(gu>=0&&Su++,Ws=Ws.dblp(Su),gu<0)break;var $u=$a[gu];assert$f($u!==0),a.type==="affine"?$u>0?Ws=Ws.mixedAdd(nt[$u-1>>1]):Ws=Ws.mixedAdd(nt[-$u-1>>1].neg()):$u>0?Ws=Ws.add(nt[$u-1>>1]):Ws=Ws.add(nt[-$u-1>>1].neg())}return a.type==="affine"?Ws.toP():Ws};BaseCurve.prototype._wnafMulAdd=function(a,c,d,tt,nt){var $a=this._wnafT1,Ws=this._wnafT2,gu=this._wnafT3,Su=0,$u,Iu,Xu;for($u=0;$u=1;$u-=2){var p0=$u-1,y0=$u;if($a[p0]!==1||$a[y0]!==1){gu[p0]=getNAF(d[p0],$a[p0],this._bitLength),gu[y0]=getNAF(d[y0],$a[y0],this._bitLength),Su=Math.max(gu[p0].length,Su),Su=Math.max(gu[y0].length,Su);continue}var A0=[c[p0],null,null,c[y0]];c[p0].y.cmp(c[y0].y)===0?(A0[1]=c[p0].add(c[y0]),A0[2]=c[p0].toJ().mixedAdd(c[y0].neg())):c[p0].y.cmp(c[y0].y.redNeg())===0?(A0[1]=c[p0].toJ().mixedAdd(c[y0]),A0[2]=c[p0].add(c[y0].neg())):(A0[1]=c[p0].toJ().mixedAdd(c[y0]),A0[2]=c[p0].toJ().mixedAdd(c[y0].neg()));var $0=[-3,-1,-5,-7,0,7,5,1,3],O0=getJSF(d[p0],d[y0]);for(Su=Math.max(O0[0].length,Su),gu[p0]=new Array(Su),gu[y0]=new Array(Su),Iu=0;Iu=0;$u--){for(var g1=0;$u>=0;){var E1=!0;for(Iu=0;Iu=0&&g1++,F0=F0.dblp(g1),$u<0)break;for(Iu=0;Iu0?Xu=Ws[Iu][B1-1>>1]:B1<0&&(Xu=Ws[Iu][-B1-1>>1].neg()),Xu.type==="affine"?F0=F0.mixedAdd(Xu):F0=F0.add(Xu))}}for($u=0;$u=Math.ceil((a.bitLength()+1)/c.step):!1};BasePoint.prototype._getDoubles=function(a,c){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var d=[this],tt=this,nt=0;nt=0&&(r0=Su,p0=$u),Iu.negative&&(Iu=Iu.neg(),Xu=Xu.neg()),r0.negative&&(r0=r0.neg(),p0=p0.neg()),[{a:Iu,b:Xu},{a:r0,b:p0}]};ShortCurve.prototype._endoSplit=function(a){var c=this.endo.basis,d=c[0],tt=c[1],nt=tt.b.mul(a).divRound(this.n),$a=d.b.neg().mul(a).divRound(this.n),Ws=nt.mul(d.a),gu=$a.mul(tt.a),Su=nt.mul(d.b),$u=$a.mul(tt.b),Iu=a.sub(Ws).sub(gu),Xu=Su.add($u).neg();return{k1:Iu,k2:Xu}};ShortCurve.prototype.pointFromX=function(a,c){a=new BN$8(a,16),a.red||(a=a.toRed(this.red));var d=a.redSqr().redMul(a).redIAdd(a.redMul(this.a)).redIAdd(this.b),tt=d.redSqrt();if(tt.redSqr().redSub(d).cmp(this.zero)!==0)throw new Error("invalid point");var nt=tt.fromRed().isOdd();return(c&&!nt||!c&&nt)&&(tt=tt.redNeg()),this.point(a,tt)};ShortCurve.prototype.validate=function(a){if(a.inf)return!0;var c=a.x,d=a.y,tt=this.a.redMul(c),nt=c.redSqr().redMul(c).redIAdd(tt).redIAdd(this.b);return d.redSqr().redISub(nt).cmpn(0)===0};ShortCurve.prototype._endoWnafMulAdd=function(a,c,d){for(var tt=this._endoWnafT1,nt=this._endoWnafT2,$a=0;$a":""};Point$2.prototype.isInfinity=function(){return this.inf};Point$2.prototype.add=function(a){if(this.inf)return a;if(a.inf)return this;if(this.eq(a))return this.dbl();if(this.neg().eq(a))return this.curve.point(null,null);if(this.x.cmp(a.x)===0)return this.curve.point(null,null);var c=this.y.redSub(a.y);c.cmpn(0)!==0&&(c=c.redMul(this.x.redSub(a.x).redInvm()));var d=c.redSqr().redISub(this.x).redISub(a.x),tt=c.redMul(this.x.redSub(d)).redISub(this.y);return this.curve.point(d,tt)};Point$2.prototype.dbl=function(){if(this.inf)return this;var a=this.y.redAdd(this.y);if(a.cmpn(0)===0)return this.curve.point(null,null);var c=this.curve.a,d=this.x.redSqr(),tt=a.redInvm(),nt=d.redAdd(d).redIAdd(d).redIAdd(c).redMul(tt),$a=nt.redSqr().redISub(this.x.redAdd(this.x)),Ws=nt.redMul(this.x.redSub($a)).redISub(this.y);return this.curve.point($a,Ws)};Point$2.prototype.getX=function(){return this.x.fromRed()};Point$2.prototype.getY=function(){return this.y.fromRed()};Point$2.prototype.mul=function(a){return a=new BN$8(a,16),this.isInfinity()?this:this._hasDoubles(a)?this.curve._fixedNafMul(this,a):this.curve.endo?this.curve._endoWnafMulAdd([this],[a]):this.curve._wnafMul(this,a)};Point$2.prototype.mulAdd=function(a,c,d){var tt=[this,c],nt=[a,d];return this.curve.endo?this.curve._endoWnafMulAdd(tt,nt):this.curve._wnafMulAdd(1,tt,nt,2)};Point$2.prototype.jmulAdd=function(a,c,d){var tt=[this,c],nt=[a,d];return this.curve.endo?this.curve._endoWnafMulAdd(tt,nt,!0):this.curve._wnafMulAdd(1,tt,nt,2,!0)};Point$2.prototype.eq=function(a){return this===a||this.inf===a.inf&&(this.inf||this.x.cmp(a.x)===0&&this.y.cmp(a.y)===0)};Point$2.prototype.neg=function(a){if(this.inf)return this;var c=this.curve.point(this.x,this.y.redNeg());if(a&&this.precomputed){var d=this.precomputed,tt=function(nt){return nt.neg()};c.precomputed={naf:d.naf&&{wnd:d.naf.wnd,points:d.naf.points.map(tt)},doubles:d.doubles&&{step:d.doubles.step,points:d.doubles.points.map(tt)}}}return c};Point$2.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var a=this.curve.jpoint(this.x,this.y,this.curve.one);return a};function JPoint(o,a,c,d){Base$2.BasePoint.call(this,o,"jacobian"),a===null&&c===null&&d===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new BN$8(0)):(this.x=new BN$8(a,16),this.y=new BN$8(c,16),this.z=new BN$8(d,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}inherits$4(JPoint,Base$2.BasePoint);ShortCurve.prototype.jpoint=function(a,c,d){return new JPoint(this,a,c,d)};JPoint.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var a=this.z.redInvm(),c=a.redSqr(),d=this.x.redMul(c),tt=this.y.redMul(c).redMul(a);return this.curve.point(d,tt)};JPoint.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)};JPoint.prototype.add=function(a){if(this.isInfinity())return a;if(a.isInfinity())return this;var c=a.z.redSqr(),d=this.z.redSqr(),tt=this.x.redMul(c),nt=a.x.redMul(d),$a=this.y.redMul(c.redMul(a.z)),Ws=a.y.redMul(d.redMul(this.z)),gu=tt.redSub(nt),Su=$a.redSub(Ws);if(gu.cmpn(0)===0)return Su.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var $u=gu.redSqr(),Iu=$u.redMul(gu),Xu=tt.redMul($u),r0=Su.redSqr().redIAdd(Iu).redISub(Xu).redISub(Xu),p0=Su.redMul(Xu.redISub(r0)).redISub($a.redMul(Iu)),y0=this.z.redMul(a.z).redMul(gu);return this.curve.jpoint(r0,p0,y0)};JPoint.prototype.mixedAdd=function(a){if(this.isInfinity())return a.toJ();if(a.isInfinity())return this;var c=this.z.redSqr(),d=this.x,tt=a.x.redMul(c),nt=this.y,$a=a.y.redMul(c).redMul(this.z),Ws=d.redSub(tt),gu=nt.redSub($a);if(Ws.cmpn(0)===0)return gu.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var Su=Ws.redSqr(),$u=Su.redMul(Ws),Iu=d.redMul(Su),Xu=gu.redSqr().redIAdd($u).redISub(Iu).redISub(Iu),r0=gu.redMul(Iu.redISub(Xu)).redISub(nt.redMul($u)),p0=this.z.redMul(Ws);return this.curve.jpoint(Xu,r0,p0)};JPoint.prototype.dblp=function(a){if(a===0)return this;if(this.isInfinity())return this;if(!a)return this.dbl();var c;if(this.curve.zeroA||this.curve.threeA){var d=this;for(c=0;c=0)return!1;if(d.redIAdd(nt),this.x.cmp(d)===0)return!0}};JPoint.prototype.inspect=function(){return this.isInfinity()?"":""};JPoint.prototype.isInfinity=function(){return this.z.cmpn(0)===0};var BN$7=bnExports,inherits$3=inherits_browserExports,Base$1=base$3,utils$l=utils$p;function MontCurve(o){Base$1.call(this,"mont",o),this.a=new BN$7(o.a,16).toRed(this.red),this.b=new BN$7(o.b,16).toRed(this.red),this.i4=new BN$7(4).toRed(this.red).redInvm(),this.two=new BN$7(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}inherits$3(MontCurve,Base$1);var mont=MontCurve;MontCurve.prototype.validate=function(a){var c=a.normalize().x,d=c.redSqr(),tt=d.redMul(c).redAdd(d.redMul(this.a)).redAdd(c),nt=tt.redSqrt();return nt.redSqr().cmp(tt)===0};function Point$1(o,a,c){Base$1.BasePoint.call(this,o,"projective"),a===null&&c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new BN$7(a,16),this.z=new BN$7(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}inherits$3(Point$1,Base$1.BasePoint);MontCurve.prototype.decodePoint=function(a,c){return this.point(utils$l.toArray(a,c),1)};MontCurve.prototype.point=function(a,c){return new Point$1(this,a,c)};MontCurve.prototype.pointFromJSON=function(a){return Point$1.fromJSON(this,a)};Point$1.prototype.precompute=function(){};Point$1.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())};Point$1.fromJSON=function(a,c){return new Point$1(a,c[0],c[1]||a.one)};Point$1.prototype.inspect=function(){return this.isInfinity()?"":""};Point$1.prototype.isInfinity=function(){return this.z.cmpn(0)===0};Point$1.prototype.dbl=function(){var a=this.x.redAdd(this.z),c=a.redSqr(),d=this.x.redSub(this.z),tt=d.redSqr(),nt=c.redSub(tt),$a=c.redMul(tt),Ws=nt.redMul(tt.redAdd(this.curve.a24.redMul(nt)));return this.curve.point($a,Ws)};Point$1.prototype.add=function(){throw new Error("Not supported on Montgomery curve")};Point$1.prototype.diffAdd=function(a,c){var d=this.x.redAdd(this.z),tt=this.x.redSub(this.z),nt=a.x.redAdd(a.z),$a=a.x.redSub(a.z),Ws=$a.redMul(d),gu=nt.redMul(tt),Su=c.z.redMul(Ws.redAdd(gu).redSqr()),$u=c.x.redMul(Ws.redISub(gu).redSqr());return this.curve.point(Su,$u)};Point$1.prototype.mul=function(a){for(var c=a.clone(),d=this,tt=this.curve.point(null,null),nt=this,$a=[];c.cmpn(0)!==0;c.iushrn(1))$a.push(c.andln(1));for(var Ws=$a.length-1;Ws>=0;Ws--)$a[Ws]===0?(d=d.diffAdd(tt,nt),tt=tt.dbl()):(tt=d.diffAdd(tt,nt),d=d.dbl());return tt};Point$1.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")};Point$1.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")};Point$1.prototype.eq=function(a){return this.getX().cmp(a.getX())===0};Point$1.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this};Point$1.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var utils$k=utils$p,BN$6=bnExports,inherits$2=inherits_browserExports,Base=base$3,assert$d=utils$k.assert;function EdwardsCurve(o){this.twisted=(o.a|0)!==1,this.mOneA=this.twisted&&(o.a|0)===-1,this.extended=this.mOneA,Base.call(this,"edwards",o),this.a=new BN$6(o.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new BN$6(o.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new BN$6(o.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),assert$d(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(o.c|0)===1}inherits$2(EdwardsCurve,Base);var edwards=EdwardsCurve;EdwardsCurve.prototype._mulA=function(a){return this.mOneA?a.redNeg():this.a.redMul(a)};EdwardsCurve.prototype._mulC=function(a){return this.oneC?a:this.c.redMul(a)};EdwardsCurve.prototype.jpoint=function(a,c,d,tt){return this.point(a,c,d,tt)};EdwardsCurve.prototype.pointFromX=function(a,c){a=new BN$6(a,16),a.red||(a=a.toRed(this.red));var d=a.redSqr(),tt=this.c2.redSub(this.a.redMul(d)),nt=this.one.redSub(this.c2.redMul(this.d).redMul(d)),$a=tt.redMul(nt.redInvm()),Ws=$a.redSqrt();if(Ws.redSqr().redSub($a).cmp(this.zero)!==0)throw new Error("invalid point");var gu=Ws.fromRed().isOdd();return(c&&!gu||!c&&gu)&&(Ws=Ws.redNeg()),this.point(a,Ws)};EdwardsCurve.prototype.pointFromY=function(a,c){a=new BN$6(a,16),a.red||(a=a.toRed(this.red));var d=a.redSqr(),tt=d.redSub(this.c2),nt=d.redMul(this.d).redMul(this.c2).redSub(this.a),$a=tt.redMul(nt.redInvm());if($a.cmp(this.zero)===0){if(c)throw new Error("invalid point");return this.point(this.zero,a)}var Ws=$a.redSqrt();if(Ws.redSqr().redSub($a).cmp(this.zero)!==0)throw new Error("invalid point");return Ws.fromRed().isOdd()!==c&&(Ws=Ws.redNeg()),this.point(Ws,a)};EdwardsCurve.prototype.validate=function(a){if(a.isInfinity())return!0;a.normalize();var c=a.x.redSqr(),d=a.y.redSqr(),tt=c.redMul(this.a).redAdd(d),nt=this.c2.redMul(this.one.redAdd(this.d.redMul(c).redMul(d)));return tt.cmp(nt)===0};function Point(o,a,c,d,tt){Base.BasePoint.call(this,o,"projective"),a===null&&c===null&&d===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new BN$6(a,16),this.y=new BN$6(c,16),this.z=d?new BN$6(d,16):this.curve.one,this.t=tt&&new BN$6(tt,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}inherits$2(Point,Base.BasePoint);EdwardsCurve.prototype.pointFromJSON=function(a){return Point.fromJSON(this,a)};EdwardsCurve.prototype.point=function(a,c,d,tt){return new Point(this,a,c,d,tt)};Point.fromJSON=function(a,c){return new Point(a,c[0],c[1],c[2])};Point.prototype.inspect=function(){return this.isInfinity()?"":""};Point.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)};Point.prototype._extDbl=function(){var a=this.x.redSqr(),c=this.y.redSqr(),d=this.z.redSqr();d=d.redIAdd(d);var tt=this.curve._mulA(a),nt=this.x.redAdd(this.y).redSqr().redISub(a).redISub(c),$a=tt.redAdd(c),Ws=$a.redSub(d),gu=tt.redSub(c),Su=nt.redMul(Ws),$u=$a.redMul(gu),Iu=nt.redMul(gu),Xu=Ws.redMul($a);return this.curve.point(Su,$u,Xu,Iu)};Point.prototype._projDbl=function(){var a=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),d=this.y.redSqr(),tt,nt,$a,Ws,gu,Su;if(this.curve.twisted){Ws=this.curve._mulA(c);var $u=Ws.redAdd(d);this.zOne?(tt=a.redSub(c).redSub(d).redMul($u.redSub(this.curve.two)),nt=$u.redMul(Ws.redSub(d)),$a=$u.redSqr().redSub($u).redSub($u)):(gu=this.z.redSqr(),Su=$u.redSub(gu).redISub(gu),tt=a.redSub(c).redISub(d).redMul(Su),nt=$u.redMul(Ws.redSub(d)),$a=$u.redMul(Su))}else Ws=c.redAdd(d),gu=this.curve._mulC(this.z).redSqr(),Su=Ws.redSub(gu).redSub(gu),tt=this.curve._mulC(a.redISub(Ws)).redMul(Su),nt=this.curve._mulC(Ws).redMul(c.redISub(d)),$a=Ws.redMul(Su);return this.curve.point(tt,nt,$a)};Point.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()};Point.prototype._extAdd=function(a){var c=this.y.redSub(this.x).redMul(a.y.redSub(a.x)),d=this.y.redAdd(this.x).redMul(a.y.redAdd(a.x)),tt=this.t.redMul(this.curve.dd).redMul(a.t),nt=this.z.redMul(a.z.redAdd(a.z)),$a=d.redSub(c),Ws=nt.redSub(tt),gu=nt.redAdd(tt),Su=d.redAdd(c),$u=$a.redMul(Ws),Iu=gu.redMul(Su),Xu=$a.redMul(Su),r0=Ws.redMul(gu);return this.curve.point($u,Iu,r0,Xu)};Point.prototype._projAdd=function(a){var c=this.z.redMul(a.z),d=c.redSqr(),tt=this.x.redMul(a.x),nt=this.y.redMul(a.y),$a=this.curve.d.redMul(tt).redMul(nt),Ws=d.redSub($a),gu=d.redAdd($a),Su=this.x.redAdd(this.y).redMul(a.x.redAdd(a.y)).redISub(tt).redISub(nt),$u=c.redMul(Ws).redMul(Su),Iu,Xu;return this.curve.twisted?(Iu=c.redMul(gu).redMul(nt.redSub(this.curve._mulA(tt))),Xu=Ws.redMul(gu)):(Iu=c.redMul(gu).redMul(nt.redSub(tt)),Xu=this.curve._mulC(Ws).redMul(gu)),this.curve.point($u,Iu,Xu)};Point.prototype.add=function(a){return this.isInfinity()?a:a.isInfinity()?this:this.curve.extended?this._extAdd(a):this._projAdd(a)};Point.prototype.mul=function(a){return this._hasDoubles(a)?this.curve._fixedNafMul(this,a):this.curve._wnafMul(this,a)};Point.prototype.mulAdd=function(a,c,d){return this.curve._wnafMulAdd(1,[this,c],[a,d],2,!1)};Point.prototype.jmulAdd=function(a,c,d){return this.curve._wnafMulAdd(1,[this,c],[a,d],2,!0)};Point.prototype.normalize=function(){if(this.zOne)return this;var a=this.z.redInvm();return this.x=this.x.redMul(a),this.y=this.y.redMul(a),this.t&&(this.t=this.t.redMul(a)),this.z=this.curve.one,this.zOne=!0,this};Point.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())};Point.prototype.getX=function(){return this.normalize(),this.x.fromRed()};Point.prototype.getY=function(){return this.normalize(),this.y.fromRed()};Point.prototype.eq=function(a){return this===a||this.getX().cmp(a.getX())===0&&this.getY().cmp(a.getY())===0};Point.prototype.eqXToP=function(a){var c=a.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(c)===0)return!0;for(var d=a.clone(),tt=this.curve.redN.redMul(this.z);;){if(d.iadd(this.curve.n),d.cmp(this.curve.p)>=0)return!1;if(c.redIAdd(tt),this.x.cmp(c)===0)return!0}};Point.prototype.toP=Point.prototype.normalize;Point.prototype.mixedAdd=Point.prototype.add;(function(o){var a=o;a.base=base$3,a.short=short,a.mont=mont,a.edwards=edwards})(curve$1);var curves$1={},hash$3={},utils$j={},assert$c=minimalisticAssert,inherits$1=inherits_browserExports;utils$j.inherits=inherits$1;function isSurrogatePair(o,a){return(o.charCodeAt(a)&64512)!==55296||a<0||a+1>=o.length?!1:(o.charCodeAt(a+1)&64512)===56320}function toArray(o,a){if(Array.isArray(o))return o.slice();if(!o)return[];var c=[];if(typeof o=="string")if(a){if(a==="hex")for(o=o.replace(/[^a-z0-9]+/ig,""),o.length%2!==0&&(o="0"+o),tt=0;tt>6|192,c[d++]=nt&63|128):isSurrogatePair(o,tt)?(nt=65536+((nt&1023)<<10)+(o.charCodeAt(++tt)&1023),c[d++]=nt>>18|240,c[d++]=nt>>12&63|128,c[d++]=nt>>6&63|128,c[d++]=nt&63|128):(c[d++]=nt>>12|224,c[d++]=nt>>6&63|128,c[d++]=nt&63|128)}else for(tt=0;tt>>24|o>>>8&65280|o<<8&16711680|(o&255)<<24;return a>>>0}utils$j.htonl=htonl;function toHex32(o,a){for(var c="",d=0;d>>0}return nt}utils$j.join32=join32;function split32(o,a){for(var c=new Array(o.length*4),d=0,tt=0;d>>24,c[tt+1]=nt>>>16&255,c[tt+2]=nt>>>8&255,c[tt+3]=nt&255):(c[tt+3]=nt>>>24,c[tt+2]=nt>>>16&255,c[tt+1]=nt>>>8&255,c[tt]=nt&255)}return c}utils$j.split32=split32;function rotr32$1(o,a){return o>>>a|o<<32-a}utils$j.rotr32=rotr32$1;function rotl32$2(o,a){return o<>>32-a}utils$j.rotl32=rotl32$2;function sum32$3(o,a){return o+a>>>0}utils$j.sum32=sum32$3;function sum32_3$1(o,a,c){return o+a+c>>>0}utils$j.sum32_3=sum32_3$1;function sum32_4$2(o,a,c,d){return o+a+c+d>>>0}utils$j.sum32_4=sum32_4$2;function sum32_5$2(o,a,c,d,tt){return o+a+c+d+tt>>>0}utils$j.sum32_5=sum32_5$2;function sum64$1(o,a,c,d){var tt=o[a],nt=o[a+1],$a=d+nt>>>0,Ws=($a>>0,o[a+1]=$a}utils$j.sum64=sum64$1;function sum64_hi$1(o,a,c,d){var tt=a+d>>>0,nt=(tt>>0}utils$j.sum64_hi=sum64_hi$1;function sum64_lo$1(o,a,c,d){var tt=a+d;return tt>>>0}utils$j.sum64_lo=sum64_lo$1;function sum64_4_hi$1(o,a,c,d,tt,nt,$a,Ws){var gu=0,Su=a;Su=Su+d>>>0,gu+=Su>>0,gu+=Su>>0,gu+=Su>>0}utils$j.sum64_4_hi=sum64_4_hi$1;function sum64_4_lo$1(o,a,c,d,tt,nt,$a,Ws){var gu=a+d+nt+Ws;return gu>>>0}utils$j.sum64_4_lo=sum64_4_lo$1;function sum64_5_hi$1(o,a,c,d,tt,nt,$a,Ws,gu,Su){var $u=0,Iu=a;Iu=Iu+d>>>0,$u+=Iu>>0,$u+=Iu>>0,$u+=Iu>>0,$u+=Iu>>0}utils$j.sum64_5_hi=sum64_5_hi$1;function sum64_5_lo$1(o,a,c,d,tt,nt,$a,Ws,gu,Su){var $u=a+d+nt+Ws+Su;return $u>>>0}utils$j.sum64_5_lo=sum64_5_lo$1;function rotr64_hi$1(o,a,c){var d=a<<32-c|o>>>c;return d>>>0}utils$j.rotr64_hi=rotr64_hi$1;function rotr64_lo$1(o,a,c){var d=o<<32-c|a>>>c;return d>>>0}utils$j.rotr64_lo=rotr64_lo$1;function shr64_hi$1(o,a,c){return o>>>c}utils$j.shr64_hi=shr64_hi$1;function shr64_lo$1(o,a,c){var d=o<<32-c|a>>>c;return d>>>0}utils$j.shr64_lo=shr64_lo$1;var common$6={},utils$i=utils$j,assert$b=minimalisticAssert;function BlockHash$4(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}common$6.BlockHash=BlockHash$4;BlockHash$4.prototype.update=function(a,c){if(a=utils$i.toArray(a,c),this.pending?this.pending=this.pending.concat(a):this.pending=a,this.pendingTotal+=a.length,this.pending.length>=this._delta8){a=this.pending;var d=a.length%this._delta8;this.pending=a.slice(a.length-d,a.length),this.pending.length===0&&(this.pending=null),a=utils$i.join32(a,0,a.length-d,this.endian);for(var tt=0;tt>>24&255,tt[nt++]=a>>>16&255,tt[nt++]=a>>>8&255,tt[nt++]=a&255}else for(tt[nt++]=a&255,tt[nt++]=a>>>8&255,tt[nt++]=a>>>16&255,tt[nt++]=a>>>24&255,tt[nt++]=0,tt[nt++]=0,tt[nt++]=0,tt[nt++]=0,$a=8;$a>>3}common$5.g0_256=g0_256$1;function g1_256$1(o){return rotr32(o,17)^rotr32(o,19)^o>>>10}common$5.g1_256=g1_256$1;var utils$g=utils$j,common$4=common$6,shaCommon$1=common$5,rotl32$1=utils$g.rotl32,sum32$2=utils$g.sum32,sum32_5$1=utils$g.sum32_5,ft_1=shaCommon$1.ft_1,BlockHash$3=common$4.BlockHash,sha1_K=[1518500249,1859775393,2400959708,3395469782];function SHA1(){if(!(this instanceof SHA1))return new SHA1;BlockHash$3.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}utils$g.inherits(SHA1,BlockHash$3);var _1=SHA1;SHA1.blockSize=512;SHA1.outSize=160;SHA1.hmacStrength=80;SHA1.padLength=64;SHA1.prototype._update=function(a,c){for(var d=this.W,tt=0;tt<16;tt++)d[tt]=a[c+tt];for(;ttthis.blockSize&&(a=new this.Hash().update(a).digest()),assert$8(a.length<=this.blockSize);for(var c=a.length;c=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(a,c,d)}var hmacDrbg=HmacDRBG;HmacDRBG.prototype._init=function(a,c,d){var tt=a.concat(c).concat(d);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var nt=0;nt=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(a.concat(d||[])),this._reseed=1};HmacDRBG.prototype.generate=function(a,c,d,tt){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof c!="string"&&(tt=d,d=c,c=null),d&&(d=utils$9.toArray(d,tt||"hex"),this._update(d));for(var nt=[];nt.length"};var BN$4=bnExports,utils$7=utils$p,assert$5=utils$7.assert;function Signature$3(o,a){if(o instanceof Signature$3)return o;this._importDER(o,a)||(assert$5(o.r&&o.s,"Signature without r or s"),this.r=new BN$4(o.r,16),this.s=new BN$4(o.s,16),o.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=o.recoveryParam)}var signature$1=Signature$3;function Position(){this.place=0}function getLength(o,a){var c=o[a.place++];if(!(c&128))return c;var d=c&15;if(d===0||d>4)return!1;for(var tt=0,nt=0,$a=a.place;nt>>=0;return tt<=127?!1:(a.place=$a,tt)}function rmPadding(o){for(var a=0,c=o.length-1;!o[a]&&!(o[a+1]&128)&&a>>3);for(o.push(c|128);--c;)o.push(a>>>(c<<3)&255);o.push(a)}Signature$3.prototype.toDER=function(a){var c=this.r.toArray(),d=this.s.toArray();for(c[0]&128&&(c=[0].concat(c)),d[0]&128&&(d=[0].concat(d)),c=rmPadding(c),d=rmPadding(d);!d[0]&&!(d[1]&128);)d=d.slice(1);var tt=[2];constructLength(tt,c.length),tt=tt.concat(c),tt.push(2),constructLength(tt,d.length);var nt=tt.concat(d),$a=[48];return constructLength($a,nt.length),$a=$a.concat(nt),utils$7.encode($a,a)};var ec,hasRequiredEc;function requireEc(){if(hasRequiredEc)return ec;hasRequiredEc=1;var o=bnExports,a=hmacDrbg,c=utils$p,d=curves$1,tt=requireBrorand(),nt=c.assert,$a=key$2,Ws=signature$1;function gu(Su){if(!(this instanceof gu))return new gu(Su);typeof Su=="string"&&(nt(Object.prototype.hasOwnProperty.call(d,Su),"Unknown curve "+Su),Su=d[Su]),Su instanceof d.PresetCurve&&(Su={curve:Su}),this.curve=Su.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=Su.curve.g,this.g.precompute(Su.curve.n.bitLength()+1),this.hash=Su.hash||Su.curve.hash}return ec=gu,gu.prototype.keyPair=function($u){return new $a(this,$u)},gu.prototype.keyFromPrivate=function($u,Iu){return $a.fromPrivate(this,$u,Iu)},gu.prototype.keyFromPublic=function($u,Iu){return $a.fromPublic(this,$u,Iu)},gu.prototype.genKeyPair=function($u){$u||($u={});for(var Iu=new a({hash:this.hash,pers:$u.pers,persEnc:$u.persEnc||"utf8",entropy:$u.entropy||tt(this.hash.hmacStrength),entropyEnc:$u.entropy&&$u.entropyEnc||"utf8",nonce:this.n.toArray()}),Xu=this.n.byteLength(),r0=this.n.sub(new o(2));;){var p0=new o(Iu.generate(Xu));if(!(p0.cmp(r0)>0))return p0.iaddn(1),this.keyFromPrivate(p0)}},gu.prototype._truncateToN=function($u,Iu){var Xu=$u.byteLength()*8-this.n.bitLength();return Xu>0&&($u=$u.ushrn(Xu)),!Iu&&$u.cmp(this.n)>=0?$u.sub(this.n):$u},gu.prototype.sign=function($u,Iu,Xu,r0){typeof Xu=="object"&&(r0=Xu,Xu=null),r0||(r0={}),Iu=this.keyFromPrivate(Iu,Xu),$u=this._truncateToN(new o($u,16));for(var p0=this.n.byteLength(),y0=Iu.getPrivate().toArray("be",p0),A0=$u.toArray("be",p0),$0=new a({hash:this.hash,entropy:y0,nonce:A0,pers:r0.pers,persEnc:r0.persEnc||"utf8"}),O0=this.n.sub(new o(1)),L0=0;;L0++){var V0=r0.k?r0.k(L0):new o($0.generate(this.n.byteLength()));if(V0=this._truncateToN(V0,!0),!(V0.cmpn(1)<=0||V0.cmp(O0)>=0)){var F0=this.g.mul(V0);if(!F0.isInfinity()){var u1=F0.getX(),g1=u1.umod(this.n);if(g1.cmpn(0)!==0){var E1=V0.invm(this.n).mul(g1.mul(Iu.getPrivate()).iadd($u));if(E1=E1.umod(this.n),E1.cmpn(0)!==0){var B1=(F0.getY().isOdd()?1:0)|(u1.cmp(g1)!==0?2:0);return r0.canonical&&E1.cmp(this.nh)>0&&(E1=this.n.sub(E1),B1^=1),new Ws({r:g1,s:E1,recoveryParam:B1})}}}}}},gu.prototype.verify=function($u,Iu,Xu,r0){$u=this._truncateToN(new o($u,16)),Xu=this.keyFromPublic(Xu,r0),Iu=new Ws(Iu,"hex");var p0=Iu.r,y0=Iu.s;if(p0.cmpn(1)<0||p0.cmp(this.n)>=0||y0.cmpn(1)<0||y0.cmp(this.n)>=0)return!1;var A0=y0.invm(this.n),$0=A0.mul($u).umod(this.n),O0=A0.mul(p0).umod(this.n),L0;return this.curve._maxwellTrick?(L0=this.g.jmulAdd($0,Xu.getPublic(),O0),L0.isInfinity()?!1:L0.eqXToP(p0)):(L0=this.g.mulAdd($0,Xu.getPublic(),O0),L0.isInfinity()?!1:L0.getX().umod(this.n).cmp(p0)===0)},gu.prototype.recoverPubKey=function(Su,$u,Iu,Xu){nt((3&Iu)===Iu,"The recovery param is more than two bits"),$u=new Ws($u,Xu);var r0=this.n,p0=new o(Su),y0=$u.r,A0=$u.s,$0=Iu&1,O0=Iu>>1;if(y0.cmp(this.curve.p.umod(this.curve.n))>=0&&O0)throw new Error("Unable to find sencond key candinate");O0?y0=this.curve.pointFromX(y0.add(this.curve.n),$0):y0=this.curve.pointFromX(y0,$0);var L0=$u.r.invm(r0),V0=r0.sub(p0).mul(L0).umod(r0),F0=A0.mul(L0).umod(r0);return this.g.mulAdd(V0,y0,F0)},gu.prototype.getKeyRecoveryParam=function(Su,$u,Iu,Xu){if($u=new Ws($u,Xu),$u.recoveryParam!==null)return $u.recoveryParam;for(var r0=0;r0<4;r0++){var p0;try{p0=this.recoverPubKey(Su,$u,r0)}catch{continue}if(p0.eq(Iu))return r0}throw new Error("Unable to find valid recovery factor")},ec}var utils$6=utils$p,assert$4=utils$6.assert,parseBytes$2=utils$6.parseBytes,cachedProperty$1=utils$6.cachedProperty;function KeyPair$1(o,a){this.eddsa=o,this._secret=parseBytes$2(a.secret),o.isPoint(a.pub)?this._pub=a.pub:this._pubBytes=parseBytes$2(a.pub)}KeyPair$1.fromPublic=function(a,c){return c instanceof KeyPair$1?c:new KeyPair$1(a,{pub:c})};KeyPair$1.fromSecret=function(a,c){return c instanceof KeyPair$1?c:new KeyPair$1(a,{secret:c})};KeyPair$1.prototype.secret=function(){return this._secret};cachedProperty$1(KeyPair$1,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())});cachedProperty$1(KeyPair$1,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())});cachedProperty$1(KeyPair$1,"privBytes",function(){var a=this.eddsa,c=this.hash(),d=a.encodingLength-1,tt=c.slice(0,a.encodingLength);return tt[0]&=248,tt[d]&=127,tt[d]|=64,tt});cachedProperty$1(KeyPair$1,"priv",function(){return this.eddsa.decodeInt(this.privBytes())});cachedProperty$1(KeyPair$1,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()});cachedProperty$1(KeyPair$1,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)});KeyPair$1.prototype.sign=function(a){return assert$4(this._secret,"KeyPair can only verify"),this.eddsa.sign(a,this)};KeyPair$1.prototype.verify=function(a,c){return this.eddsa.verify(a,c,this)};KeyPair$1.prototype.getSecret=function(a){return assert$4(this._secret,"KeyPair is public only"),utils$6.encode(this.secret(),a)};KeyPair$1.prototype.getPublic=function(a){return utils$6.encode(this.pubBytes(),a)};var key$1=KeyPair$1,BN$3=bnExports,utils$5=utils$p,assert$3=utils$5.assert,cachedProperty=utils$5.cachedProperty,parseBytes$1=utils$5.parseBytes;function Signature$2(o,a){this.eddsa=o,typeof a!="object"&&(a=parseBytes$1(a)),Array.isArray(a)&&(a={R:a.slice(0,o.encodingLength),S:a.slice(o.encodingLength)}),assert$3(a.R&&a.S,"Signature without R or S"),o.isPoint(a.R)&&(this._R=a.R),a.S instanceof BN$3&&(this._S=a.S),this._Rencoded=Array.isArray(a.R)?a.R:a.Rencoded,this._Sencoded=Array.isArray(a.S)?a.S:a.Sencoded}cachedProperty(Signature$2,"S",function(){return this.eddsa.decodeInt(this.Sencoded())});cachedProperty(Signature$2,"R",function(){return this.eddsa.decodePoint(this.Rencoded())});cachedProperty(Signature$2,"Rencoded",function(){return this.eddsa.encodePoint(this.R())});cachedProperty(Signature$2,"Sencoded",function(){return this.eddsa.encodeInt(this.S())});Signature$2.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())};Signature$2.prototype.toHex=function(){return utils$5.encode(this.toBytes(),"hex").toUpperCase()};var signature=Signature$2,hash$1=hash$3,curves=curves$1,utils$4=utils$p,assert$2=utils$4.assert,parseBytes=utils$4.parseBytes,KeyPair=key$1,Signature$1=signature;function EDDSA(o){if(assert$2(o==="ed25519","only tested with ed25519 so far"),!(this instanceof EDDSA))return new EDDSA(o);o=curves[o].curve,this.curve=o,this.g=o.g,this.g.precompute(o.n.bitLength()+1),this.pointClass=o.point().constructor,this.encodingLength=Math.ceil(o.n.bitLength()/8),this.hash=hash$1.sha512}var eddsa=EDDSA;EDDSA.prototype.sign=function(a,c){a=parseBytes(a);var d=this.keyFromSecret(c),tt=this.hashInt(d.messagePrefix(),a),nt=this.g.mul(tt),$a=this.encodePoint(nt),Ws=this.hashInt($a,d.pubBytes(),a).mul(d.priv()),gu=tt.add(Ws).umod(this.curve.n);return this.makeSignature({R:nt,S:gu,Rencoded:$a})};EDDSA.prototype.verify=function(a,c,d){a=parseBytes(a),c=this.makeSignature(c);var tt=this.keyFromPublic(d),nt=this.hashInt(c.Rencoded(),tt.pubBytes(),a),$a=this.g.mul(c.S()),Ws=c.R().add(tt.pub().mul(nt));return Ws.eq($a)};EDDSA.prototype.hashInt=function(){for(var a=this.hash(),c=0;c>6],i0=(Iu&32)===0;if((Iu&31)===31){var p0=Iu;for(Iu=0;(p0&128)===128;){if(p0=xu.readUInt8($u),xu.isError(p0))return p0;Iu<<=7,Iu|=p0&127}}else Iu&=31;var w0=tt.tag[Iu];return{cls:Xu,primitive:i0,tag:Iu,tagStr:w0}}function gu(xu,$u,Iu){var Xu=xu.readUInt8(Iu);if(xu.isError(Xu))return Xu;if(!$u&&Xu===128)return null;if(!(Xu&128))return Xu;var i0=Xu&127;if(i0>4)return xu.error("length octect is too long");Xu=0;for(var p0=0;p0=256;A0>>=8)w0++;var $0=new a(2+w0);$0[0]=p0,$0[1]=128|w0;for(var A0=1+w0,O0=i0.length;O0>0;A0--,O0>>=8)$0[A0]=O0&255;return this._createEncoderBuffer([$0,i0])},$a.prototype._encodeStr=function($u,Iu){if(Iu==="bitstr")return this._createEncoderBuffer([$u.unused|0,$u.data]);if(Iu==="bmpstr"){for(var Xu=new a($u.length*2),i0=0;i0<$u.length;i0++)Xu.writeUInt16BE($u.charCodeAt(i0),i0*2);return this._createEncoderBuffer(Xu)}else return Iu==="numstr"?this._isNumstr($u)?this._createEncoderBuffer($u):this.reporter.error("Encoding of string type: numstr supports only digits and space"):Iu==="printstr"?this._isPrintstr($u)?this._createEncoderBuffer($u):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(Iu)?this._createEncoderBuffer($u):Iu==="objDesc"?this._createEncoderBuffer($u):this.reporter.error("Encoding of string type: "+Iu+" unsupported")},$a.prototype._encodeObjid=function($u,Iu,Xu){if(typeof $u=="string"){if(!Iu)return this.reporter.error("string objid given, but no values map found");if(!Iu.hasOwnProperty($u))return this.reporter.error("objid not found in values map");$u=Iu[$u].split(/[\s\.]+/g);for(var i0=0;i0<$u.length;i0++)$u[i0]|=0}else if(Array.isArray($u)){$u=$u.slice();for(var i0=0;i0<$u.length;i0++)$u[i0]|=0}if(!Array.isArray($u))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify($u));if(!Xu){if($u[1]>=40)return this.reporter.error("Second objid identifier OOB");$u.splice(0,2,$u[0]*40+$u[1])}for(var p0=0,i0=0;i0<$u.length;i0++){var w0=$u[i0];for(p0++;w0>=128;w0>>=7)p0++}for(var A0=new a(p0),$0=A0.length-1,i0=$u.length-1;i0>=0;i0--){var w0=$u[i0];for(A0[$0--]=w0&127;(w0>>=7)>0;)A0[$0--]=128|w0&127}return this._createEncoderBuffer(A0)};function Ys(xu){return xu<10?"0"+xu:xu}$a.prototype._encodeTime=function($u,Iu){var Xu,i0=new Date($u);return Iu==="gentime"?Xu=[Ys(i0.getFullYear()),Ys(i0.getUTCMonth()+1),Ys(i0.getUTCDate()),Ys(i0.getUTCHours()),Ys(i0.getUTCMinutes()),Ys(i0.getUTCSeconds()),"Z"].join(""):Iu==="utctime"?Xu=[Ys(i0.getFullYear()%100),Ys(i0.getUTCMonth()+1),Ys(i0.getUTCDate()),Ys(i0.getUTCHours()),Ys(i0.getUTCMinutes()),Ys(i0.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+Iu+" time is not supported yet"),this._encodeStr(Xu,"octstr")},$a.prototype._encodeNull=function(){return this._createEncoderBuffer("")},$a.prototype._encodeInt=function($u,Iu){if(typeof $u=="string"){if(!Iu)return this.reporter.error("String int or enum given, but no values map");if(!Iu.hasOwnProperty($u))return this.reporter.error("Values map doesn't contain: "+JSON.stringify($u));$u=Iu[$u]}if(typeof $u!="number"&&!a.isBuffer($u)){var Xu=$u.toArray();!$u.sign&&Xu[0]&128&&Xu.unshift(0),$u=new a(Xu)}if(a.isBuffer($u)){var i0=$u.length;$u.length===0&&i0++;var w0=new a(i0);return $u.copy(w0),$u.length===0&&(w0[0]=0),this._createEncoderBuffer(w0)}if($u<128)return this._createEncoderBuffer($u);if($u<256)return this._createEncoderBuffer([0,$u]);for(var i0=1,p0=$u;p0>=256;p0>>=8)i0++;for(var w0=new Array(i0),p0=w0.length-1;p0>=0;p0--)w0[p0]=$u&255,$u>>=8;return w0[0]&128&&w0.unshift(0),this._createEncoderBuffer(new a(w0))},$a.prototype._encodeBool=function($u){return this._createEncoderBuffer($u?255:0)},$a.prototype._use=function($u,Iu){return typeof $u=="function"&&($u=$u(Iu)),$u._getEncoder("der").tree},$a.prototype._skipDefault=function($u,Iu,Xu){var i0=this._baseState,p0;if(i0.default===null)return!1;var w0=$u.join();if(i0.defaultBuffer===void 0&&(i0.defaultBuffer=this._encodeValue(i0.default,Iu,Xu).join()),w0.length!==i0.defaultBuffer.length)return!1;for(p0=0;p0=31?Xu.error("Multi-octet tag encoding unsupported"):($u||(i0|=32),i0|=tt.tagClassByName[Iu||"universal"]<<6,i0)}return der_1}var pem,hasRequiredPem;function requirePem(){if(hasRequiredPem)return pem;hasRequiredPem=1;var o=inherits_browserExports,a=requireDer();function c(d){a.call(this,d),this.enc="pem"}return o(c,a),pem=c,c.prototype.encode=function(tt,nt){for(var $a=a.prototype.encode.call(this,tt),Ys=$a.toString("base64"),gu=["-----BEGIN "+nt.label+"-----"],xu=0;xu0&&L0.ishrn(q0),L0}function p0($0,O0){$0=i0($0,O0),$0=$0.mod(O0);var L0=o.from($0.toArray());if(L0.length=0)throw new Error("invalid sig")}return verify_1=nt,verify_1}var browser$4,hasRequiredBrowser$1;function requireBrowser$1(){if(hasRequiredBrowser$1)return browser$4;hasRequiredBrowser$1=1;var o=safeBufferExports$1.Buffer,a=browser$a,c=readableBrowserExports,d=inherits_browserExports,tt=requireSign(),nt=requireVerify(),$a=require$$6;Object.keys($a).forEach(function(Iu){$a[Iu].id=o.from($a[Iu].id,"hex"),$a[Iu.toLowerCase()]=$a[Iu]});function Ys(Iu){c.Writable.call(this);var Xu=$a[Iu];if(!Xu)throw new Error("Unknown message digest");this._hashType=Xu.hash,this._hash=a(Xu.hash),this._tag=Xu.id,this._signType=Xu.sign}d(Ys,c.Writable),Ys.prototype._write=function(Xu,i0,p0){this._hash.update(Xu),p0()},Ys.prototype.update=function(Xu,i0){return this._hash.update(typeof Xu=="string"?o.from(Xu,i0):Xu),this},Ys.prototype.sign=function(Xu,i0){this.end();var p0=this._hash.digest(),w0=tt(p0,Xu,this._hashType,this._signType,this._tag);return i0?w0.toString(i0):w0};function gu(Iu){c.Writable.call(this);var Xu=$a[Iu];if(!Xu)throw new Error("Unknown message digest");this._hash=a(Xu.hash),this._tag=Xu.id,this._signType=Xu.sign}d(gu,c.Writable),gu.prototype._write=function(Xu,i0,p0){this._hash.update(Xu),p0()},gu.prototype.update=function(Xu,i0){return this._hash.update(typeof Xu=="string"?o.from(Xu,i0):Xu),this},gu.prototype.verify=function(Xu,i0,p0){var w0=typeof i0=="string"?o.from(i0,p0):i0;this.end();var A0=this._hash.digest();return nt(w0,A0,Xu,this._signType,this._tag)};function xu(Iu){return new Ys(Iu)}function $u(Iu){return new gu(Iu)}return browser$4={Sign:xu,Verify:$u,createSign:xu,createVerify:$u},browser$4}var browser$3,hasRequiredBrowser;function requireBrowser(){if(hasRequiredBrowser)return browser$3;hasRequiredBrowser=1;var o=requireElliptic(),a=bnExports;browser$3=function($a){return new d($a)};var c={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};c.p224=c.secp224r1,c.p256=c.secp256r1=c.prime256v1,c.p192=c.secp192r1=c.prime192v1,c.p384=c.secp384r1,c.p521=c.secp521r1;function d(nt){this.curveType=c[nt],this.curveType||(this.curveType={name:nt}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}d.prototype.generateKeys=function(nt,$a){return this.keys=this.curve.genKeyPair(),this.getPublicKey(nt,$a)},d.prototype.computeSecret=function(nt,$a,Ys){$a=$a||"utf8",Buffer$C.isBuffer(nt)||(nt=new Buffer$C(nt,$a));var gu=this.curve.keyFromPublic(nt).getPublic(),xu=gu.mul(this.keys.getPrivate()).getX();return tt(xu,Ys,this.curveType.byteLength)},d.prototype.getPublicKey=function(nt,$a){var Ys=this.keys.getPublic($a==="compressed",!0);return $a==="hybrid"&&(Ys[Ys.length-1]%2?Ys[0]=7:Ys[0]=6),tt(Ys,nt)},d.prototype.getPrivateKey=function(nt){return tt(this.keys.getPrivate(),nt)},d.prototype.setPublicKey=function(nt,$a){return $a=$a||"utf8",Buffer$C.isBuffer(nt)||(nt=new Buffer$C(nt,$a)),this.keys._importPublic(nt),this},d.prototype.setPrivateKey=function(nt,$a){$a=$a||"utf8",Buffer$C.isBuffer(nt)||(nt=new Buffer$C(nt,$a));var Ys=new a(nt);return Ys=Ys.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(Ys),this};function tt(nt,$a,Ys){Array.isArray(nt)||(nt=nt.toArray());var gu=new Buffer$C(nt);if(Ys&&gu.length=0)throw new Error("data too long for modulus")}else throw new Error("unknown padding");return d?crt$1($a,nt):withPublic$1($a,nt)};function oaep$1(o,a){var c=o.modulus.byteLength(),d=a.length,tt=createHash$1("sha1").update(Buffer$2.alloc(0)).digest(),nt=tt.length,$a=2*nt;if(d>c-$a-2)throw new Error("message too long");var Ys=Buffer$2.alloc(c-d-$a-2),gu=c-nt-1,xu=randomBytes$1(nt),$u=xor$1(Buffer$2.concat([tt,Ys,Buffer$2.alloc(1,1),a],gu),mgf$1(xu,gu)),Iu=xor$1(xu,mgf$1($u,nt));return new BN$1(Buffer$2.concat([Buffer$2.alloc(1),Iu,$u],c))}function pkcs1$1(o,a,c){var d=a.length,tt=o.modulus.byteLength();if(d>tt-11)throw new Error("message too long");var nt;return c?nt=Buffer$2.alloc(tt-d-3,255):nt=nonZero(tt-d-3),new BN$1(Buffer$2.concat([Buffer$2.from([0,c?1:2]),nt,Buffer$2.alloc(1),a],tt))}function nonZero(o){for(var a=Buffer$2.allocUnsafe(o),c=0,d=randomBytes$1(o*2),tt=0,nt;c$a||new BN(c).cmp(nt.modulus)>=0)throw new Error("decryption error");var Ys;d?Ys=withPublic(new BN(c),nt):Ys=crt(c,nt);var gu=Buffer$1.alloc($a-Ys.length);if(Ys=Buffer$1.concat([gu,Ys],$a),tt===4)return oaep(nt,Ys);if(tt===1)return pkcs1(nt,Ys,d);if(tt===3)return Ys;throw new Error("unknown padding")};function oaep(o,a){var c=o.modulus.byteLength(),d=createHash("sha1").update(Buffer$1.alloc(0)).digest(),tt=d.length;if(a[0]!==0)throw new Error("decryption error");var nt=a.slice(1,tt+1),$a=a.slice(tt+1),Ys=xor(nt,mgf($a,tt)),gu=xor($a,mgf(Ys,c-tt-1));if(compare$1(d,gu.slice(0,tt)))throw new Error("decryption error");for(var xu=tt;gu[xu]===0;)xu++;if(gu[xu++]!==1)throw new Error("decryption error");return gu.slice(xu)}function pkcs1(o,a,c){for(var d=a.slice(0,2),tt=2,nt=0;a[tt++]!==0;)if(tt>=a.length){nt++;break}var $a=a.slice(2,tt-1);if((d.toString("hex")!=="0002"&&!c||d.toString("hex")!=="0001"&&c)&&nt++,$a.length<8&&nt++,nt)throw new Error("decryption error");return a.slice(tt)}function compare$1(o,a){o=Buffer$1.from(o),a=Buffer$1.from(a);var c=0,d=o.length;o.length!==a.length&&(c++,d=Math.min(o.length,a.length));for(var tt=-1;++ttkMaxUint32||o<0)throw new TypeError("offset must be a uint32");if(o>kBufferMaxLength||o>a)throw new RangeError("offset out of range")}function assertSize(o,a,c){if(typeof o!="number"||o!==o)throw new TypeError("size must be a number");if(o>kMaxUint32||o<0)throw new TypeError("size must be a uint32");if(o+a>c||o>kBufferMaxLength)throw new RangeError("buffer too small")}crypto$2&&crypto$2.getRandomValues||!process$1$4.browser?(browser$1.randomFill=randomFill,browser$1.randomFillSync=randomFillSync):(browser$1.randomFill=oldBrowser,browser$1.randomFillSync=oldBrowser);function randomFill(o,a,c,d){if(!Buffer.isBuffer(o)&&!(o instanceof commonjsGlobal$4.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof a=="function")d=a,a=0,c=o.length;else if(typeof c=="function")d=c,c=o.length-a;else if(typeof d!="function")throw new TypeError('"cb" argument must be a function');return assertOffset(a,o.length),assertSize(c,a,o.length),actualFill(o,a,c,d)}function actualFill(o,a,c,d){if(process$1$4.browser){var tt=o.buffer,nt=new Uint8Array(tt,a,c);if(crypto$2.getRandomValues(nt),d){process$1$4.nextTick(function(){d(null,o)});return}return o}if(d){randombytes(c,function(Ys,gu){if(Ys)return d(Ys);gu.copy(o,a),d(null,o)});return}var $a=randombytes(c);return $a.copy(o,a),o}function randomFillSync(o,a,c){if(typeof a>"u"&&(a=0),!Buffer.isBuffer(o)&&!(o instanceof commonjsGlobal$4.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return assertOffset(a,o.length),c===void 0&&(c=o.length-a),assertSize(c,a,o.length),actualFill(o,a,c)}var hasRequiredCryptoBrowserify;function requireCryptoBrowserify(){if(hasRequiredCryptoBrowserify)return cryptoBrowserify;hasRequiredCryptoBrowserify=1,cryptoBrowserify.randomBytes=cryptoBrowserify.rng=cryptoBrowserify.pseudoRandomBytes=cryptoBrowserify.prng=browserExports,cryptoBrowserify.createHash=cryptoBrowserify.Hash=browser$a,cryptoBrowserify.createHmac=cryptoBrowserify.Hmac=browser$9;var o=algos,a=Object.keys(o),c=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(a);cryptoBrowserify.getHashes=function(){return c};var d=browser$8;cryptoBrowserify.pbkdf2=d.pbkdf2,cryptoBrowserify.pbkdf2Sync=d.pbkdf2Sync;var tt=browser$7;cryptoBrowserify.Cipher=tt.Cipher,cryptoBrowserify.createCipher=tt.createCipher,cryptoBrowserify.Cipheriv=tt.Cipheriv,cryptoBrowserify.createCipheriv=tt.createCipheriv,cryptoBrowserify.Decipher=tt.Decipher,cryptoBrowserify.createDecipher=tt.createDecipher,cryptoBrowserify.Decipheriv=tt.Decipheriv,cryptoBrowserify.createDecipheriv=tt.createDecipheriv,cryptoBrowserify.getCiphers=tt.getCiphers,cryptoBrowserify.listCiphers=tt.listCiphers;var nt=requireBrowser$2();cryptoBrowserify.DiffieHellmanGroup=nt.DiffieHellmanGroup,cryptoBrowserify.createDiffieHellmanGroup=nt.createDiffieHellmanGroup,cryptoBrowserify.getDiffieHellman=nt.getDiffieHellman,cryptoBrowserify.createDiffieHellman=nt.createDiffieHellman,cryptoBrowserify.DiffieHellman=nt.DiffieHellman;var $a=requireBrowser$1();cryptoBrowserify.createSign=$a.createSign,cryptoBrowserify.Sign=$a.Sign,cryptoBrowserify.createVerify=$a.createVerify,cryptoBrowserify.Verify=$a.Verify,cryptoBrowserify.createECDH=requireBrowser();var Ys=browser$2;cryptoBrowserify.publicEncrypt=Ys.publicEncrypt,cryptoBrowserify.privateEncrypt=Ys.privateEncrypt,cryptoBrowserify.publicDecrypt=Ys.publicDecrypt,cryptoBrowserify.privateDecrypt=Ys.privateDecrypt;var gu=browser$1;return cryptoBrowserify.randomFill=gu.randomFill,cryptoBrowserify.randomFillSync=gu.randomFillSync,cryptoBrowserify.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join(` -`))},cryptoBrowserify.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6},cryptoBrowserify}var __awaiter$8=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__rest$1=commonjsGlobal$4&&commonjsGlobal$4.__rest||function(o,a){var c={};for(var d in o)Object.prototype.hasOwnProperty.call(o,d)&&a.indexOf(d)<0&&(c[d]=o[d]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var tt=0,d=Object.getOwnPropertySymbols(o);tt()=>{throw new Error("method not implemented: "+o)},prohibitedInView=o=>()=>{throw new Error("method not available for view calls: "+o)};class Runtime{constructor(a){var{contractCode:c}=a,d=__rest$1(a,["contractCode"]);this.context=d,this.wasm=this.prepareWASM(Buffer$C.from(c,"base64")),this.memory=new WebAssembly.Memory({initial:1024,maximum:2048}),this.registers={},this.logs=[],this.result=Buffer$C.from([])}readUTF16CStr(a){const c=[],d=new Uint16Array(this.memory.buffer);let tt=Number(a)/2;for(;d[tt]!=0;)c.push(d[tt]),tt++;return Buffer$C.from(Uint16Array.from(c).buffer).toString("ucs2")}readUTF8CStr(a,c){const d=[],tt=new Uint8Array(this.memory.buffer);let nt=Number(c);for(let $a=0;$aBuffer$C.compare(nt.key,d)===0).map(nt=>nt.value);return tt.length===0?null:tt.length>1?tt:tt[0]}prepareWASM(a){const c=[];if(a.subarray(0,4).toString("utf8")!=="\0asm")throw new Error("Invalid magic number");const tt=a.readUInt32LE(4);if(tt!=1)throw new Error("Invalid version: "+tt);let nt=8;c.push(a.subarray(0,nt));function $a(){let Iu=0,Xu=0,i0;do i0=a[nt++],Iu|=(i0&127)<>=7,Iu!==0&&(i0|=128),Xu.push(i0)}while(Iu!==0);return Buffer$C.from(Xu)}function $u(Iu){const Xu=Buffer$C.from(Iu,"utf8");return Buffer$C.concat([xu(Xu.length),Xu])}do{const Iu=nt,Xu=a.readUInt8(nt);nt++;const i0=$a(),p0=nt+i0;if(Xu==5)c.push(Buffer$C.from([5,1,0]));else if(Xu==2){const w0=[],A0=$a();for(let L0=0;L0this.panic("explicit guest panic"),panic_utf8:(a,c)=>this.panic(this.readUTF8CStr(a,c)),epoch_height:notImplemented("epoch_height"),storage_usage:notImplemented("storage_usage"),account_balance:notImplemented("account_balance"),account_locked_balance:notImplemented("account_locked_balance"),random_seed:notImplemented("random_seed"),ripemd160:notImplemented("ripemd160"),keccak256:notImplemented("keccak256"),keccak512:notImplemented("keccak512"),ecrecover:notImplemented("ecrecover"),validator_stake:notImplemented("validator_stake"),validator_total_stake:notImplemented("validator_total_stake"),write_register:prohibitedInView("write_register"),signer_account_id:prohibitedInView("signer_account_id"),signer_account_pk:prohibitedInView("signer_account_pk"),predecessor_account_id:prohibitedInView("predecessor_account_id"),attached_deposit:prohibitedInView("attached_deposit"),prepaid_gas:prohibitedInView("prepaid_gas"),used_gas:prohibitedInView("used_gas"),promise_create:prohibitedInView("promise_create"),promise_then:prohibitedInView("promise_then"),promise_and:prohibitedInView("promise_and"),promise_batch_create:prohibitedInView("promise_batch_create"),promise_batch_then:prohibitedInView("promise_batch_then"),promise_batch_action_create_account:prohibitedInView("promise_batch_action_create_account"),promise_batch_action_deploy_contract:prohibitedInView("promise_batch_action_deploy_contract"),promise_batch_action_function_call:prohibitedInView("promise_batch_action_function_call"),promise_batch_action_function_call_weight:prohibitedInView("promise_batch_action_function_call_weight"),promise_batch_action_transfer:prohibitedInView("promise_batch_action_transfer"),promise_batch_action_stake:prohibitedInView("promise_batch_action_stake"),promise_batch_action_add_key_with_full_access:prohibitedInView("promise_batch_action_add_key_with_full_access"),promise_batch_action_add_key_with_function_call:prohibitedInView("promise_batch_action_add_key_with_function_call"),promise_batch_action_delete_key:prohibitedInView("promise_batch_action_delete_key"),promise_batch_action_delete_account:prohibitedInView("promise_batch_action_delete_account"),promise_results_count:prohibitedInView("promise_results_count"),promise_result:prohibitedInView("promise_result"),promise_return:prohibitedInView("promise_return"),storage_write:prohibitedInView("storage_write"),storage_remove:prohibitedInView("storage_remove")}}execute(a){return __awaiter$8(this,void 0,void 0,function*(){const c=yield WebAssembly.compile(this.wasm),tt=(yield WebAssembly.instantiate(c,{env:Object.assign(Object.assign({},this.getHostImports()),{memory:this.memory})})).exports[a];if(tt==null)throw new Error(`Contract method '${a}' does not exists in contract ${this.context.contractId} for block id ${this.context.blockHeight}`);return tt(),{result:this.result,logs:this.logs}})}}runtime.Runtime=Runtime;var __awaiter$7=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__rest=commonjsGlobal$4&&commonjsGlobal$4.__rest||function(o,a){var c={};for(var d in o)Object.prototype.hasOwnProperty.call(o,d)&&a.indexOf(d)<0&&(c[d]=o[d]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var tt=0,d=Object.getOwnPropertySymbols(o);tt1)return!1;const O0=this._items[0];return O0===""||O0==='""'}get str(){var O0;return(O0=this._str)!==null&&O0!==void 0?O0:this._str=this._items.reduce((L0,q0)=>`${L0}${q0}`,"")}get names(){var O0;return(O0=this._names)!==null&&O0!==void 0?O0:this._names=this._items.reduce((L0,q0)=>(q0 instanceof c&&(L0[q0.str]=(L0[q0.str]||0)+1),L0),{})}}o._Code=d,o.nil=new d("");function tt($0,...O0){const L0=[$0[0]];let q0=0;for(;q0{if(Iu.scopePath===void 0)throw new Error(`CodeGen: name "${Iu}" has no value`);return(0,a._)`${xu}${Iu.scopePath}`})}scopeCode(xu=this._values,$u,Iu){return this._reduceValues(xu,Xu=>{if(Xu.value===void 0)throw new Error(`CodeGen: name "${Xu}" has no value`);return Xu.value.code},$u,Iu)}_reduceValues(xu,$u,Iu={},Xu){let i0=a.nil;for(const p0 in xu){const w0=xu[p0];if(!w0)continue;const A0=Iu[p0]=Iu[p0]||new Map;w0.forEach($0=>{if(A0.has($0))return;A0.set($0,d.Started);let O0=$u($0);if(O0){const L0=this.opts.es5?o.varKinds.var:o.varKinds.const;i0=(0,a._)`${i0}${L0} ${$0} = ${O0};${this.opts._n}`}else if(O0=Xu==null?void 0:Xu($0))i0=(0,a._)`${i0}${O0}${this.opts._n}`;else throw new c($0);A0.set($0,d.Completed)})}return i0}}o.ValueScope=Ys})(scope);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.or=o.and=o.not=o.CodeGen=o.operators=o.varKinds=o.ValueScopeName=o.ValueScope=o.Scope=o.Name=o.regexpCode=o.stringify=o.getProperty=o.nil=o.strConcat=o.str=o._=void 0;const a=code$1,c=scope;var d=code$1;Object.defineProperty(o,"_",{enumerable:!0,get:function(){return d._}}),Object.defineProperty(o,"str",{enumerable:!0,get:function(){return d.str}}),Object.defineProperty(o,"strConcat",{enumerable:!0,get:function(){return d.strConcat}}),Object.defineProperty(o,"nil",{enumerable:!0,get:function(){return d.nil}}),Object.defineProperty(o,"getProperty",{enumerable:!0,get:function(){return d.getProperty}}),Object.defineProperty(o,"stringify",{enumerable:!0,get:function(){return d.stringify}}),Object.defineProperty(o,"regexpCode",{enumerable:!0,get:function(){return d.regexpCode}}),Object.defineProperty(o,"Name",{enumerable:!0,get:function(){return d.Name}});var tt=scope;Object.defineProperty(o,"Scope",{enumerable:!0,get:function(){return tt.Scope}}),Object.defineProperty(o,"ValueScope",{enumerable:!0,get:function(){return tt.ValueScope}}),Object.defineProperty(o,"ValueScopeName",{enumerable:!0,get:function(){return tt.ValueScopeName}}),Object.defineProperty(o,"varKinds",{enumerable:!0,get:function(){return tt.varKinds}}),o.operators={GT:new a._Code(">"),GTE:new a._Code(">="),LT:new a._Code("<"),LTE:new a._Code("<="),EQ:new a._Code("==="),NEQ:new a._Code("!=="),NOT:new a._Code("!"),OR:new a._Code("||"),AND:new a._Code("&&"),ADD:new a._Code("+")};class nt{optimizeNodes(){return this}optimizeNames(O1,Q1){return this}}class $a extends nt{constructor(O1,Q1,rv){super(),this.varKind=O1,this.name=Q1,this.rhs=rv}render({es5:O1,_n:Q1}){const rv=O1?c.varKinds.var:this.varKind,D1=this.rhs===void 0?"":` = ${this.rhs}`;return`${rv} ${this.name}${D1};`+Q1}optimizeNames(O1,Q1){if(O1[this.name.str])return this.rhs&&(this.rhs=D0(this.rhs,O1,Q1)),this}get names(){return this.rhs instanceof a._CodeOrName?this.rhs.names:{}}}class Ys extends nt{constructor(O1,Q1,rv){super(),this.lhs=O1,this.rhs=Q1,this.sideEffects=rv}render({_n:O1}){return`${this.lhs} = ${this.rhs};`+O1}optimizeNames(O1,Q1){if(!(this.lhs instanceof a.Name&&!O1[this.lhs.str]&&!this.sideEffects))return this.rhs=D0(this.rhs,O1,Q1),this}get names(){const O1=this.lhs instanceof a.Name?{}:{...this.lhs.names};return t1(O1,this.rhs)}}class gu extends Ys{constructor(O1,Q1,rv,D1){super(O1,rv,D1),this.op=Q1}render({_n:O1}){return`${this.lhs} ${this.op}= ${this.rhs};`+O1}}class xu extends nt{constructor(O1){super(),this.label=O1,this.names={}}render({_n:O1}){return`${this.label}:`+O1}}class $u extends nt{constructor(O1){super(),this.label=O1,this.names={}}render({_n:O1}){return`break${this.label?` ${this.label}`:""};`+O1}}class Iu extends nt{constructor(O1){super(),this.error=O1}render({_n:O1}){return`throw ${this.error};`+O1}get names(){return this.error.names}}class Xu extends nt{constructor(O1){super(),this.code=O1}render({_n:O1}){return`${this.code};`+O1}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(O1,Q1){return this.code=D0(this.code,O1,Q1),this}get names(){return this.code instanceof a._CodeOrName?this.code.names:{}}}class i0 extends nt{constructor(O1=[]){super(),this.nodes=O1}render(O1){return this.nodes.reduce((Q1,rv)=>Q1+rv.render(O1),"")}optimizeNodes(){const{nodes:O1}=this;let Q1=O1.length;for(;Q1--;){const rv=O1[Q1].optimizeNodes();Array.isArray(rv)?O1.splice(Q1,1,...rv):rv?O1[Q1]=rv:O1.splice(Q1,1)}return O1.length>0?this:void 0}optimizeNames(O1,Q1){const{nodes:rv}=this;let D1=rv.length;for(;D1--;){const ev=rv[D1];ev.optimizeNames(O1,Q1)||(Z0(O1,ev.names),rv.splice(D1,1))}return rv.length>0?this:void 0}get names(){return this.nodes.reduce((O1,Q1)=>r1(O1,Q1.names),{})}}class p0 extends i0{render(O1){return"{"+O1._n+super.render(O1)+"}"+O1._n}}class w0 extends i0{}class A0 extends p0{}A0.kind="else";class $0 extends p0{constructor(O1,Q1){super(Q1),this.condition=O1}render(O1){let Q1=`if(${this.condition})`+super.render(O1);return this.else&&(Q1+="else "+this.else.render(O1)),Q1}optimizeNodes(){super.optimizeNodes();const O1=this.condition;if(O1===!0)return this.nodes;let Q1=this.else;if(Q1){const rv=Q1.optimizeNodes();Q1=this.else=Array.isArray(rv)?new A0(rv):rv}if(Q1)return O1===!1?Q1 instanceof $0?Q1:Q1.nodes:this.nodes.length?this:new $0(f1(O1),Q1 instanceof $0?[Q1]:Q1.nodes);if(!(O1===!1||!this.nodes.length))return this}optimizeNames(O1,Q1){var rv;if(this.else=(rv=this.else)===null||rv===void 0?void 0:rv.optimizeNames(O1,Q1),!!(super.optimizeNames(O1,Q1)||this.else))return this.condition=D0(this.condition,O1,Q1),this}get names(){const O1=super.names;return t1(O1,this.condition),this.else&&r1(O1,this.else.names),O1}}$0.kind="if";class O0 extends p0{}O0.kind="for";class L0 extends O0{constructor(O1){super(),this.iteration=O1}render(O1){return`for(${this.iteration})`+super.render(O1)}optimizeNames(O1,Q1){if(super.optimizeNames(O1,Q1))return this.iteration=D0(this.iteration,O1,Q1),this}get names(){return r1(super.names,this.iteration.names)}}class q0 extends O0{constructor(O1,Q1,rv,D1){super(),this.varKind=O1,this.name=Q1,this.from=rv,this.to=D1}render(O1){const Q1=O1.es5?c.varKinds.var:this.varKind,{name:rv,from:D1,to:ev}=this;return`for(${Q1} ${rv}=${D1}; ${rv}<${ev}; ${rv}++)`+super.render(O1)}get names(){const O1=t1(super.names,this.from);return t1(O1,this.to)}}class F0 extends O0{constructor(O1,Q1,rv,D1){super(),this.loop=O1,this.varKind=Q1,this.name=rv,this.iterable=D1}render(O1){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(O1)}optimizeNames(O1,Q1){if(super.optimizeNames(O1,Q1))return this.iterable=D0(this.iterable,O1,Q1),this}get names(){return r1(super.names,this.iterable.names)}}class u1 extends p0{constructor(O1,Q1,rv){super(),this.name=O1,this.args=Q1,this.async=rv}render(O1){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(O1)}}u1.kind="func";class g1 extends i0{render(O1){return"return "+super.render(O1)}}g1.kind="return";class E1 extends p0{render(O1){let Q1="try"+super.render(O1);return this.catch&&(Q1+=this.catch.render(O1)),this.finally&&(Q1+=this.finally.render(O1)),Q1}optimizeNodes(){var O1,Q1;return super.optimizeNodes(),(O1=this.catch)===null||O1===void 0||O1.optimizeNodes(),(Q1=this.finally)===null||Q1===void 0||Q1.optimizeNodes(),this}optimizeNames(O1,Q1){var rv,D1;return super.optimizeNames(O1,Q1),(rv=this.catch)===null||rv===void 0||rv.optimizeNames(O1,Q1),(D1=this.finally)===null||D1===void 0||D1.optimizeNames(O1,Q1),this}get names(){const O1=super.names;return this.catch&&r1(O1,this.catch.names),this.finally&&r1(O1,this.finally.names),O1}}class B1 extends p0{constructor(O1){super(),this.error=O1}render(O1){return`catch(${this.error})`+super.render(O1)}}B1.kind="catch";class lv extends p0{render(O1){return"finally"+super.render(O1)}}lv.kind="finally";class j1{constructor(O1,Q1={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...Q1,_n:Q1.lines?` -`:""},this._extScope=O1,this._scope=new c.Scope({parent:O1}),this._nodes=[new w0]}toString(){return this._root.render(this.opts)}name(O1){return this._scope.name(O1)}scopeName(O1){return this._extScope.name(O1)}scopeValue(O1,Q1){const rv=this._extScope.value(O1,Q1);return(this._values[rv.prefix]||(this._values[rv.prefix]=new Set)).add(rv),rv}getScopeValue(O1,Q1){return this._extScope.getValue(O1,Q1)}scopeRefs(O1){return this._extScope.scopeRefs(O1,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(O1,Q1,rv,D1){const ev=this._scope.toName(Q1);return rv!==void 0&&D1&&(this._constants[ev.str]=rv),this._leafNode(new $a(O1,ev,rv)),ev}const(O1,Q1,rv){return this._def(c.varKinds.const,O1,Q1,rv)}let(O1,Q1,rv){return this._def(c.varKinds.let,O1,Q1,rv)}var(O1,Q1,rv){return this._def(c.varKinds.var,O1,Q1,rv)}assign(O1,Q1,rv){return this._leafNode(new Ys(O1,Q1,rv))}add(O1,Q1){return this._leafNode(new gu(O1,o.operators.ADD,Q1))}code(O1){return typeof O1=="function"?O1():O1!==a.nil&&this._leafNode(new Xu(O1)),this}object(...O1){const Q1=["{"];for(const[rv,D1]of O1)Q1.length>1&&Q1.push(","),Q1.push(rv),(rv!==D1||this.opts.es5)&&(Q1.push(":"),(0,a.addCodeArg)(Q1,D1));return Q1.push("}"),new a._Code(Q1)}if(O1,Q1,rv){if(this._blockNode(new $0(O1)),Q1&&rv)this.code(Q1).else().code(rv).endIf();else if(Q1)this.code(Q1).endIf();else if(rv)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(O1){return this._elseNode(new $0(O1))}else(){return this._elseNode(new A0)}endIf(){return this._endBlockNode($0,A0)}_for(O1,Q1){return this._blockNode(O1),Q1&&this.code(Q1).endFor(),this}for(O1,Q1){return this._for(new L0(O1),Q1)}forRange(O1,Q1,rv,D1,ev=this.opts.es5?c.varKinds.var:c.varKinds.let){const Mv=this._scope.toName(O1);return this._for(new q0(ev,Mv,Q1,rv),()=>D1(Mv))}forOf(O1,Q1,rv,D1=c.varKinds.const){const ev=this._scope.toName(O1);if(this.opts.es5){const Mv=Q1 instanceof a.Name?Q1:this.var("_arr",Q1);return this.forRange("_i",0,(0,a._)`${Mv}.length`,Zv=>{this.var(ev,(0,a._)`${Mv}[${Zv}]`),rv(ev)})}return this._for(new F0("of",D1,ev,Q1),()=>rv(ev))}forIn(O1,Q1,rv,D1=this.opts.es5?c.varKinds.var:c.varKinds.const){if(this.opts.ownProperties)return this.forOf(O1,(0,a._)`Object.keys(${Q1})`,rv);const ev=this._scope.toName(O1);return this._for(new F0("in",D1,ev,Q1),()=>rv(ev))}endFor(){return this._endBlockNode(O0)}label(O1){return this._leafNode(new xu(O1))}break(O1){return this._leafNode(new $u(O1))}return(O1){const Q1=new g1;if(this._blockNode(Q1),this.code(O1),Q1.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(g1)}try(O1,Q1,rv){if(!Q1&&!rv)throw new Error('CodeGen: "try" without "catch" and "finally"');const D1=new E1;if(this._blockNode(D1),this.code(O1),Q1){const ev=this.name("e");this._currNode=D1.catch=new B1(ev),Q1(ev)}return rv&&(this._currNode=D1.finally=new lv,this.code(rv)),this._endBlockNode(B1,lv)}throw(O1){return this._leafNode(new Iu(O1))}block(O1,Q1){return this._blockStarts.push(this._nodes.length),O1&&this.code(O1).endBlock(Q1),this}endBlock(O1){const Q1=this._blockStarts.pop();if(Q1===void 0)throw new Error("CodeGen: not in self-balancing block");const rv=this._nodes.length-Q1;if(rv<0||O1!==void 0&&rv!==O1)throw new Error(`CodeGen: wrong number of nodes: ${rv} vs ${O1} expected`);return this._nodes.length=Q1,this}func(O1,Q1=a.nil,rv,D1){return this._blockNode(new u1(O1,Q1,rv)),D1&&this.code(D1).endFunc(),this}endFunc(){return this._endBlockNode(u1)}optimize(O1=1){for(;O1-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(O1){return this._currNode.nodes.push(O1),this}_blockNode(O1){this._currNode.nodes.push(O1),this._nodes.push(O1)}_endBlockNode(O1,Q1){const rv=this._currNode;if(rv instanceof O1||Q1&&rv instanceof Q1)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${Q1?`${O1.kind}/${Q1.kind}`:O1.kind}"`)}_elseNode(O1){const Q1=this._currNode;if(!(Q1 instanceof $0))throw new Error('CodeGen: "else" without "if"');return this._currNode=Q1.else=O1,this}get _root(){return this._nodes[0]}get _currNode(){const O1=this._nodes;return O1[O1.length-1]}set _currNode(O1){const Q1=this._nodes;Q1[Q1.length-1]=O1}}o.CodeGen=j1;function r1(R1,O1){for(const Q1 in O1)R1[Q1]=(R1[Q1]||0)+(O1[Q1]||0);return R1}function t1(R1,O1){return O1 instanceof a._CodeOrName?r1(R1,O1.names):R1}function D0(R1,O1,Q1){if(R1 instanceof a.Name)return rv(R1);if(!D1(R1))return R1;return new a._Code(R1._items.reduce((ev,Mv)=>(Mv instanceof a.Name&&(Mv=rv(Mv)),Mv instanceof a._Code?ev.push(...Mv._items):ev.push(Mv),ev),[]));function rv(ev){const Mv=Q1[ev.str];return Mv===void 0||O1[ev.str]!==1?ev:(delete O1[ev.str],Mv)}function D1(ev){return ev instanceof a._Code&&ev._items.some(Mv=>Mv instanceof a.Name&&O1[Mv.str]===1&&Q1[Mv.str]!==void 0)}}function Z0(R1,O1){for(const Q1 in O1)R1[Q1]=(R1[Q1]||0)-(O1[Q1]||0)}function f1(R1){return typeof R1=="boolean"||typeof R1=="number"||R1===null?!R1:(0,a._)`!${d1(R1)}`}o.not=f1;const w1=o1(o.operators.AND);function m1(...R1){return R1.reduce(w1)}o.and=m1;const c1=o1(o.operators.OR);function G0(...R1){return R1.reduce(c1)}o.or=G0;function o1(R1){return(O1,Q1)=>O1===a.nil?Q1:Q1===a.nil?O1:(0,a._)`${d1(O1)} ${R1} ${d1(Q1)}`}function d1(R1){return R1 instanceof a.Name?R1:(0,a._)`(${R1})`}})(codegen);var util={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.checkStrictMode=o.getErrorPath=o.Type=o.useFunc=o.setEvaluated=o.evaluatedPropsToName=o.mergeEvaluated=o.eachItem=o.unescapeJsonPointer=o.escapeJsonPointer=o.escapeFragment=o.unescapeFragment=o.schemaRefOrVal=o.schemaHasRulesButRef=o.schemaHasRules=o.checkUnknownRules=o.alwaysValidSchema=o.toHash=void 0;const a=codegen,c=code$1;function d(u1){const g1={};for(const E1 of u1)g1[E1]=!0;return g1}o.toHash=d;function tt(u1,g1){return typeof g1=="boolean"?g1:Object.keys(g1).length===0?!0:(nt(u1,g1),!$a(g1,u1.self.RULES.all))}o.alwaysValidSchema=tt;function nt(u1,g1=u1.schema){const{opts:E1,self:B1}=u1;if(!E1.strictSchema||typeof g1=="boolean")return;const lv=B1.RULES.keywords;for(const j1 in g1)lv[j1]||F0(u1,`unknown keyword: "${j1}"`)}o.checkUnknownRules=nt;function $a(u1,g1){if(typeof u1=="boolean")return!u1;for(const E1 in u1)if(g1[E1])return!0;return!1}o.schemaHasRules=$a;function Ys(u1,g1){if(typeof u1=="boolean")return!u1;for(const E1 in u1)if(E1!=="$ref"&&g1.all[E1])return!0;return!1}o.schemaHasRulesButRef=Ys;function gu({topSchemaRef:u1,schemaPath:g1},E1,B1,lv){if(!lv){if(typeof E1=="number"||typeof E1=="boolean")return E1;if(typeof E1=="string")return(0,a._)`${E1}`}return(0,a._)`${u1}${g1}${(0,a.getProperty)(B1)}`}o.schemaRefOrVal=gu;function xu(u1){return Xu(decodeURIComponent(u1))}o.unescapeFragment=xu;function $u(u1){return encodeURIComponent(Iu(u1))}o.escapeFragment=$u;function Iu(u1){return typeof u1=="number"?`${u1}`:u1.replace(/~/g,"~0").replace(/\//g,"~1")}o.escapeJsonPointer=Iu;function Xu(u1){return u1.replace(/~1/g,"/").replace(/~0/g,"~")}o.unescapeJsonPointer=Xu;function i0(u1,g1){if(Array.isArray(u1))for(const E1 of u1)g1(E1);else g1(u1)}o.eachItem=i0;function p0({mergeNames:u1,mergeToName:g1,mergeValues:E1,resultToName:B1}){return(lv,j1,r1,t1)=>{const D0=r1===void 0?j1:r1 instanceof a.Name?(j1 instanceof a.Name?u1(lv,j1,r1):g1(lv,j1,r1),r1):j1 instanceof a.Name?(g1(lv,r1,j1),j1):E1(j1,r1);return t1===a.Name&&!(D0 instanceof a.Name)?B1(lv,D0):D0}}o.mergeEvaluated={props:p0({mergeNames:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true && ${g1} !== undefined`,()=>{u1.if((0,a._)`${g1} === true`,()=>u1.assign(E1,!0),()=>u1.assign(E1,(0,a._)`${E1} || {}`).code((0,a._)`Object.assign(${E1}, ${g1})`))}),mergeToName:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true`,()=>{g1===!0?u1.assign(E1,!0):(u1.assign(E1,(0,a._)`${E1} || {}`),A0(u1,E1,g1))}),mergeValues:(u1,g1)=>u1===!0?!0:{...u1,...g1},resultToName:w0}),items:p0({mergeNames:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true && ${g1} !== undefined`,()=>u1.assign(E1,(0,a._)`${g1} === true ? true : ${E1} > ${g1} ? ${E1} : ${g1}`)),mergeToName:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true`,()=>u1.assign(E1,g1===!0?!0:(0,a._)`${E1} > ${g1} ? ${E1} : ${g1}`)),mergeValues:(u1,g1)=>u1===!0?!0:Math.max(u1,g1),resultToName:(u1,g1)=>u1.var("items",g1)})};function w0(u1,g1){if(g1===!0)return u1.var("props",!0);const E1=u1.var("props",(0,a._)`{}`);return g1!==void 0&&A0(u1,E1,g1),E1}o.evaluatedPropsToName=w0;function A0(u1,g1,E1){Object.keys(E1).forEach(B1=>u1.assign((0,a._)`${g1}${(0,a.getProperty)(B1)}`,!0))}o.setEvaluated=A0;const $0={};function O0(u1,g1){return u1.scopeValue("func",{ref:g1,code:$0[g1.code]||($0[g1.code]=new c._Code(g1.code))})}o.useFunc=O0;var L0;(function(u1){u1[u1.Num=0]="Num",u1[u1.Str=1]="Str"})(L0=o.Type||(o.Type={}));function q0(u1,g1,E1){if(u1 instanceof a.Name){const B1=g1===L0.Num;return E1?B1?(0,a._)`"[" + ${u1} + "]"`:(0,a._)`"['" + ${u1} + "']"`:B1?(0,a._)`"/" + ${u1}`:(0,a._)`"/" + ${u1}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return E1?(0,a.getProperty)(u1).toString():"/"+Iu(u1)}o.getErrorPath=q0;function F0(u1,g1,E1=u1.opts.strictSchema){if(E1){if(g1=`strict mode: ${g1}`,E1===!0)throw new Error(g1);u1.self.logger.warn(g1)}}o.checkStrictMode=F0})(util);var names$1={};Object.defineProperty(names$1,"__esModule",{value:!0});const codegen_1$t=codegen,names={data:new codegen_1$t.Name("data"),valCxt:new codegen_1$t.Name("valCxt"),instancePath:new codegen_1$t.Name("instancePath"),parentData:new codegen_1$t.Name("parentData"),parentDataProperty:new codegen_1$t.Name("parentDataProperty"),rootData:new codegen_1$t.Name("rootData"),dynamicAnchors:new codegen_1$t.Name("dynamicAnchors"),vErrors:new codegen_1$t.Name("vErrors"),errors:new codegen_1$t.Name("errors"),this:new codegen_1$t.Name("this"),self:new codegen_1$t.Name("self"),scope:new codegen_1$t.Name("scope"),json:new codegen_1$t.Name("json"),jsonPos:new codegen_1$t.Name("jsonPos"),jsonLen:new codegen_1$t.Name("jsonLen"),jsonPart:new codegen_1$t.Name("jsonPart")};names$1.default=names;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.extendErrors=o.resetErrorsCount=o.reportExtraError=o.reportError=o.keyword$DataError=o.keywordError=void 0;const a=codegen,c=util,d=names$1;o.keywordError={message:({keyword:A0})=>(0,a.str)`must pass "${A0}" keyword validation`},o.keyword$DataError={message:({keyword:A0,schemaType:$0})=>$0?(0,a.str)`"${A0}" keyword must be ${$0} ($data)`:(0,a.str)`"${A0}" keyword is invalid ($data)`};function tt(A0,$0=o.keywordError,O0,L0){const{it:q0}=A0,{gen:F0,compositeRule:u1,allErrors:g1}=q0,E1=Iu(A0,$0,O0);L0??(u1||g1)?gu(F0,E1):xu(q0,(0,a._)`[${E1}]`)}o.reportError=tt;function nt(A0,$0=o.keywordError,O0){const{it:L0}=A0,{gen:q0,compositeRule:F0,allErrors:u1}=L0,g1=Iu(A0,$0,O0);gu(q0,g1),F0||u1||xu(L0,d.default.vErrors)}o.reportExtraError=nt;function $a(A0,$0){A0.assign(d.default.errors,$0),A0.if((0,a._)`${d.default.vErrors} !== null`,()=>A0.if($0,()=>A0.assign((0,a._)`${d.default.vErrors}.length`,$0),()=>A0.assign(d.default.vErrors,null)))}o.resetErrorsCount=$a;function Ys({gen:A0,keyword:$0,schemaValue:O0,data:L0,errsCount:q0,it:F0}){if(q0===void 0)throw new Error("ajv implementation error");const u1=A0.name("err");A0.forRange("i",q0,d.default.errors,g1=>{A0.const(u1,(0,a._)`${d.default.vErrors}[${g1}]`),A0.if((0,a._)`${u1}.instancePath === undefined`,()=>A0.assign((0,a._)`${u1}.instancePath`,(0,a.strConcat)(d.default.instancePath,F0.errorPath))),A0.assign((0,a._)`${u1}.schemaPath`,(0,a.str)`${F0.errSchemaPath}/${$0}`),F0.opts.verbose&&(A0.assign((0,a._)`${u1}.schema`,O0),A0.assign((0,a._)`${u1}.data`,L0))})}o.extendErrors=Ys;function gu(A0,$0){const O0=A0.const("err",$0);A0.if((0,a._)`${d.default.vErrors} === null`,()=>A0.assign(d.default.vErrors,(0,a._)`[${O0}]`),(0,a._)`${d.default.vErrors}.push(${O0})`),A0.code((0,a._)`${d.default.errors}++`)}function xu(A0,$0){const{gen:O0,validateName:L0,schemaEnv:q0}=A0;q0.$async?O0.throw((0,a._)`new ${A0.ValidationError}(${$0})`):(O0.assign((0,a._)`${L0}.errors`,$0),O0.return(!1))}const $u={keyword:new a.Name("keyword"),schemaPath:new a.Name("schemaPath"),params:new a.Name("params"),propertyName:new a.Name("propertyName"),message:new a.Name("message"),schema:new a.Name("schema"),parentSchema:new a.Name("parentSchema")};function Iu(A0,$0,O0){const{createErrors:L0}=A0.it;return L0===!1?(0,a._)`{}`:Xu(A0,$0,O0)}function Xu(A0,$0,O0={}){const{gen:L0,it:q0}=A0,F0=[i0(q0,O0),p0(A0,O0)];return w0(A0,$0,F0),L0.object(...F0)}function i0({errorPath:A0},{instancePath:$0}){const O0=$0?(0,a.str)`${A0}${(0,c.getErrorPath)($0,c.Type.Str)}`:A0;return[d.default.instancePath,(0,a.strConcat)(d.default.instancePath,O0)]}function p0({keyword:A0,it:{errSchemaPath:$0}},{schemaPath:O0,parentSchema:L0}){let q0=L0?$0:(0,a.str)`${$0}/${A0}`;return O0&&(q0=(0,a.str)`${q0}${(0,c.getErrorPath)(O0,c.Type.Str)}`),[$u.schemaPath,q0]}function w0(A0,{params:$0,message:O0},L0){const{keyword:q0,data:F0,schemaValue:u1,it:g1}=A0,{opts:E1,propertyName:B1,topSchemaRef:lv,schemaPath:j1}=g1;L0.push([$u.keyword,q0],[$u.params,typeof $0=="function"?$0(A0):$0||(0,a._)`{}`]),E1.messages&&L0.push([$u.message,typeof O0=="function"?O0(A0):O0]),E1.verbose&&L0.push([$u.schema,u1],[$u.parentSchema,(0,a._)`${lv}${j1}`],[d.default.data,F0]),B1&&L0.push([$u.propertyName,B1])}})(errors$2);Object.defineProperty(boolSchema,"__esModule",{value:!0});boolSchema.boolOrEmptySchema=boolSchema.topBoolOrEmptySchema=void 0;const errors_1$3=errors$2,codegen_1$s=codegen,names_1$6=names$1,boolError={message:"boolean schema is false"};function topBoolOrEmptySchema(o){const{gen:a,schema:c,validateName:d}=o;c===!1?falseSchemaError(o,!1):typeof c=="object"&&c.$async===!0?a.return(names_1$6.default.data):(a.assign((0,codegen_1$s._)`${d}.errors`,null),a.return(!0))}boolSchema.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(o,a){const{gen:c,schema:d}=o;d===!1?(c.var(a,!1),falseSchemaError(o)):c.var(a,!0)}boolSchema.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(o,a){const{gen:c,data:d}=o,tt={gen:c,keyword:"false schema",data:d,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:o};(0,errors_1$3.reportError)(tt,boolError,void 0,a)}var dataType={},rules$1={};Object.defineProperty(rules$1,"__esModule",{value:!0});rules$1.getRules=rules$1.isJSONType=void 0;const _jsonTypes=["string","number","integer","boolean","null","object","array"],jsonTypes=new Set(_jsonTypes);function isJSONType(o){return typeof o=="string"&&jsonTypes.has(o)}rules$1.isJSONType=isJSONType;function getRules(){const o={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...o,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},o.number,o.string,o.array,o.object],post:{rules:[]},all:{},keywords:{}}}rules$1.getRules=getRules;var applicability={};Object.defineProperty(applicability,"__esModule",{value:!0});applicability.shouldUseRule=applicability.shouldUseGroup=applicability.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema:o,self:a},c){const d=a.RULES.types[c];return d&&d!==!0&&shouldUseGroup(o,d)}applicability.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(o,a){return a.rules.some(c=>shouldUseRule(o,c))}applicability.shouldUseGroup=shouldUseGroup;function shouldUseRule(o,a){var c;return o[a.keyword]!==void 0||((c=a.definition.implements)===null||c===void 0?void 0:c.some(d=>o[d]!==void 0))}applicability.shouldUseRule=shouldUseRule;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.reportTypeError=o.checkDataTypes=o.checkDataType=o.coerceAndCheckDataType=o.getJSONTypes=o.getSchemaTypes=o.DataType=void 0;const a=rules$1,c=applicability,d=errors$2,tt=codegen,nt=util;var $a;(function(L0){L0[L0.Correct=0]="Correct",L0[L0.Wrong=1]="Wrong"})($a=o.DataType||(o.DataType={}));function Ys(L0){const q0=gu(L0.type);if(q0.includes("null")){if(L0.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!q0.length&&L0.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');L0.nullable===!0&&q0.push("null")}return q0}o.getSchemaTypes=Ys;function gu(L0){const q0=Array.isArray(L0)?L0:L0?[L0]:[];if(q0.every(a.isJSONType))return q0;throw new Error("type must be JSONType or JSONType[]: "+q0.join(","))}o.getJSONTypes=gu;function xu(L0,q0){const{gen:F0,data:u1,opts:g1}=L0,E1=Iu(q0,g1.coerceTypes),B1=q0.length>0&&!(E1.length===0&&q0.length===1&&(0,c.schemaHasRulesForType)(L0,q0[0]));if(B1){const lv=w0(q0,u1,g1.strictNumbers,$a.Wrong);F0.if(lv,()=>{E1.length?Xu(L0,q0,E1):$0(L0)})}return B1}o.coerceAndCheckDataType=xu;const $u=new Set(["string","number","integer","boolean","null"]);function Iu(L0,q0){return q0?L0.filter(F0=>$u.has(F0)||q0==="array"&&F0==="array"):[]}function Xu(L0,q0,F0){const{gen:u1,data:g1,opts:E1}=L0,B1=u1.let("dataType",(0,tt._)`typeof ${g1}`),lv=u1.let("coerced",(0,tt._)`undefined`);E1.coerceTypes==="array"&&u1.if((0,tt._)`${B1} == 'object' && Array.isArray(${g1}) && ${g1}.length == 1`,()=>u1.assign(g1,(0,tt._)`${g1}[0]`).assign(B1,(0,tt._)`typeof ${g1}`).if(w0(q0,g1,E1.strictNumbers),()=>u1.assign(lv,g1))),u1.if((0,tt._)`${lv} !== undefined`);for(const r1 of F0)($u.has(r1)||r1==="array"&&E1.coerceTypes==="array")&&j1(r1);u1.else(),$0(L0),u1.endIf(),u1.if((0,tt._)`${lv} !== undefined`,()=>{u1.assign(g1,lv),i0(L0,lv)});function j1(r1){switch(r1){case"string":u1.elseIf((0,tt._)`${B1} == "number" || ${B1} == "boolean"`).assign(lv,(0,tt._)`"" + ${g1}`).elseIf((0,tt._)`${g1} === null`).assign(lv,(0,tt._)`""`);return;case"number":u1.elseIf((0,tt._)`${B1} == "boolean" || ${g1} === null +})`)}catch{Ws=function(Su){this._initNamed(Su)}}return c(Ws,$a),Ws.prototype._initNamed=function(Su){$a.call(this,Su)},new Ws(this)},tt.prototype._getDecoder=function($a){return $a=$a||"der",this.decoders.hasOwnProperty($a)||(this.decoders[$a]=this._createNamed(a.decoders[$a])),this.decoders[$a]},tt.prototype.decode=function($a,Ws,gu){return this._getDecoder(Ws).decode($a,gu)},tt.prototype._getEncoder=function($a){return $a=$a||"der",this.encoders.hasOwnProperty($a)||(this.encoders[$a]=this._createNamed(a.encoders[$a])),this.encoders[$a]},tt.prototype.encode=function($a,Ws,gu){return this._getEncoder(Ws).encode($a,gu)}}(api)),api}var base$2={},reporter={},inherits=inherits_browserExports;function Reporter(o){this._reporterState={obj:null,path:[],options:o||{},errors:[]}}reporter.Reporter=Reporter;Reporter.prototype.isError=function o(a){return a instanceof ReporterError};Reporter.prototype.save=function o(){var a=this._reporterState;return{obj:a.obj,pathLen:a.path.length}};Reporter.prototype.restore=function o(a){var c=this._reporterState;c.obj=a.obj,c.path=c.path.slice(0,a.pathLen)};Reporter.prototype.enterKey=function o(a){return this._reporterState.path.push(a)};Reporter.prototype.exitKey=function o(a){var c=this._reporterState;c.path=c.path.slice(0,a-1)};Reporter.prototype.leaveKey=function o(a,c,d){var tt=this._reporterState;this.exitKey(a),tt.obj!==null&&(tt.obj[c]=d)};Reporter.prototype.path=function o(){return this._reporterState.path.join("/")};Reporter.prototype.enterObject=function o(){var a=this._reporterState,c=a.obj;return a.obj={},c};Reporter.prototype.leaveObject=function o(a){var c=this._reporterState,d=c.obj;return c.obj=a,d};Reporter.prototype.error=function o(a){var c,d=this._reporterState,tt=a instanceof ReporterError;if(tt?c=a:c=new ReporterError(d.path.map(function(nt){return"["+JSON.stringify(nt)+"]"}).join(""),a.message||a,a.stack),!d.options.partial)throw c;return tt||d.errors.push(c),c};Reporter.prototype.wrapResult=function o(a){var c=this._reporterState;return c.options.partial?{result:this.isError(a)?null:a,errors:c.errors}:a};function ReporterError(o,a){this.path=o,this.rethrow(a)}inherits(ReporterError,Error);ReporterError.prototype.rethrow=function o(a){if(this.message=a+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,ReporterError),!this.stack)try{throw new Error(this.message)}catch(c){this.stack=c.stack}return this};var buffer={},hasRequiredBuffer;function requireBuffer(){if(hasRequiredBuffer)return buffer;hasRequiredBuffer=1;var o=inherits_browserExports,a=requireBase().Reporter,c=require$$1$4.Buffer;function d(nt,$a){if(a.call(this,$a),!c.isBuffer(nt)){this.error("Input not Buffer");return}this.base=nt,this.offset=0,this.length=nt.length}o(d,a),buffer.DecoderBuffer=d,d.prototype.save=function(){return{offset:this.offset,reporter:a.prototype.save.call(this)}},d.prototype.restore=function($a){var Ws=new d(this.base);return Ws.offset=$a.offset,Ws.length=this.offset,this.offset=$a.offset,a.prototype.restore.call(this,$a.reporter),Ws},d.prototype.isEmpty=function(){return this.offset===this.length},d.prototype.readUInt8=function($a){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error($a||"DecoderBuffer overrun")},d.prototype.skip=function($a,Ws){if(!(this.offset+$a<=this.length))return this.error(Ws||"DecoderBuffer overrun");var gu=new d(this.base);return gu._reporterState=this._reporterState,gu.offset=this.offset,gu.length=this.offset+$a,this.offset+=$a,gu},d.prototype.raw=function($a){return this.base.slice($a?$a.offset:this.offset,this.length)};function tt(nt,$a){if(Array.isArray(nt))this.length=0,this.value=nt.map(function(Ws){return Ws instanceof tt||(Ws=new tt(Ws,$a)),this.length+=Ws.length,Ws},this);else if(typeof nt=="number"){if(!(0<=nt&&nt<=255))return $a.error("non-byte EncoderBuffer value");this.value=nt,this.length=1}else if(typeof nt=="string")this.value=nt,this.length=c.byteLength(nt);else if(c.isBuffer(nt))this.value=nt,this.length=nt.length;else return $a.error("Unsupported type: "+typeof nt)}return buffer.EncoderBuffer=tt,tt.prototype.join=function($a,Ws){return $a||($a=new c(this.length)),Ws||(Ws=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(gu){gu.join($a,Ws),Ws+=gu.length}):(typeof this.value=="number"?$a[Ws]=this.value:typeof this.value=="string"?$a.write(this.value,Ws):c.isBuffer(this.value)&&this.value.copy($a,Ws),Ws+=this.length)),$a},buffer}var node$4,hasRequiredNode;function requireNode(){if(hasRequiredNode)return node$4;hasRequiredNode=1;var o=requireBase().Reporter,a=requireBase().EncoderBuffer,c=requireBase().DecoderBuffer,d=minimalisticAssert,tt=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],nt=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(tt),$a=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];function Ws(Su,$u){var Iu={};this._baseState=Iu,Iu.enc=Su,Iu.parent=$u||null,Iu.children=null,Iu.tag=null,Iu.args=null,Iu.reverseArgs=null,Iu.choice=null,Iu.optional=!1,Iu.any=!1,Iu.obj=!1,Iu.use=null,Iu.useDecoder=null,Iu.key=null,Iu.default=null,Iu.explicit=null,Iu.implicit=null,Iu.contains=null,Iu.parent||(Iu.children=[],this._wrap())}node$4=Ws;var gu=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];return Ws.prototype.clone=function(){var $u=this._baseState,Iu={};gu.forEach(function(r0){Iu[r0]=$u[r0]});var Xu=new this.constructor(Iu.parent);return Xu._baseState=Iu,Xu},Ws.prototype._wrap=function(){var $u=this._baseState;nt.forEach(function(Iu){this[Iu]=function(){var r0=new this.constructor(this);return $u.children.push(r0),r0[Iu].apply(r0,arguments)}},this)},Ws.prototype._init=function($u){var Iu=this._baseState;d(Iu.parent===null),$u.call(this),Iu.children=Iu.children.filter(function(Xu){return Xu._baseState.parent===this},this),d.equal(Iu.children.length,1,"Root node can have only one child")},Ws.prototype._useArgs=function($u){var Iu=this._baseState,Xu=$u.filter(function(r0){return r0 instanceof this.constructor},this);$u=$u.filter(function(r0){return!(r0 instanceof this.constructor)},this),Xu.length!==0&&(d(Iu.children===null),Iu.children=Xu,Xu.forEach(function(r0){r0._baseState.parent=this},this)),$u.length!==0&&(d(Iu.args===null),Iu.args=$u,Iu.reverseArgs=$u.map(function(r0){if(typeof r0!="object"||r0.constructor!==Object)return r0;var p0={};return Object.keys(r0).forEach(function(y0){y0==(y0|0)&&(y0|=0);var A0=r0[y0];p0[A0]=y0}),p0}))},$a.forEach(function(Su){Ws.prototype[Su]=function(){var Iu=this._baseState;throw new Error(Su+" not implemented for encoding: "+Iu.enc)}}),tt.forEach(function(Su){Ws.prototype[Su]=function(){var Iu=this._baseState,Xu=Array.prototype.slice.call(arguments);return d(Iu.tag===null),Iu.tag=Su,this._useArgs(Xu),this}}),Ws.prototype.use=function($u){d($u);var Iu=this._baseState;return d(Iu.use===null),Iu.use=$u,this},Ws.prototype.optional=function(){var $u=this._baseState;return $u.optional=!0,this},Ws.prototype.def=function($u){var Iu=this._baseState;return d(Iu.default===null),Iu.default=$u,Iu.optional=!0,this},Ws.prototype.explicit=function($u){var Iu=this._baseState;return d(Iu.explicit===null&&Iu.implicit===null),Iu.explicit=$u,this},Ws.prototype.implicit=function($u){var Iu=this._baseState;return d(Iu.explicit===null&&Iu.implicit===null),Iu.implicit=$u,this},Ws.prototype.obj=function(){var $u=this._baseState,Iu=Array.prototype.slice.call(arguments);return $u.obj=!0,Iu.length!==0&&this._useArgs(Iu),this},Ws.prototype.key=function($u){var Iu=this._baseState;return d(Iu.key===null),Iu.key=$u,this},Ws.prototype.any=function(){var $u=this._baseState;return $u.any=!0,this},Ws.prototype.choice=function($u){var Iu=this._baseState;return d(Iu.choice===null),Iu.choice=$u,this._useArgs(Object.keys($u).map(function(Xu){return $u[Xu]})),this},Ws.prototype.contains=function($u){var Iu=this._baseState;return d(Iu.use===null),Iu.contains=$u,this},Ws.prototype._decode=function($u,Iu){var Xu=this._baseState;if(Xu.parent===null)return $u.wrapResult(Xu.children[0]._decode($u,Iu));var r0=Xu.default,p0=!0,y0=null;if(Xu.key!==null&&(y0=$u.enterKey(Xu.key)),Xu.optional){var A0=null;if(Xu.explicit!==null?A0=Xu.explicit:Xu.implicit!==null?A0=Xu.implicit:Xu.tag!==null&&(A0=Xu.tag),A0===null&&!Xu.any){var $0=$u.save();try{Xu.choice===null?this._decodeGeneric(Xu.tag,$u,Iu):this._decodeChoice($u,Iu),p0=!0}catch{p0=!1}$u.restore($0)}else if(p0=this._peekTag($u,A0,Xu.any),$u.isError(p0))return p0}var O0;if(Xu.obj&&p0&&(O0=$u.enterObject()),p0){if(Xu.explicit!==null){var L0=this._decodeTag($u,Xu.explicit);if($u.isError(L0))return L0;$u=L0}var V0=$u.offset;if(Xu.use===null&&Xu.choice===null){if(Xu.any)var $0=$u.save();var F0=this._decodeTag($u,Xu.implicit!==null?Xu.implicit:Xu.tag,Xu.any);if($u.isError(F0))return F0;Xu.any?r0=$u.raw($0):$u=F0}if(Iu&&Iu.track&&Xu.tag!==null&&Iu.track($u.path(),V0,$u.length,"tagged"),Iu&&Iu.track&&Xu.tag!==null&&Iu.track($u.path(),$u.offset,$u.length,"content"),Xu.any?r0=r0:Xu.choice===null?r0=this._decodeGeneric(Xu.tag,$u,Iu):r0=this._decodeChoice($u,Iu),$u.isError(r0))return r0;if(!Xu.any&&Xu.choice===null&&Xu.children!==null&&Xu.children.forEach(function(E1){E1._decode($u,Iu)}),Xu.contains&&(Xu.tag==="octstr"||Xu.tag==="bitstr")){var u1=new c(r0);r0=this._getUse(Xu.contains,$u._reporterState.obj)._decode(u1,Iu)}}return Xu.obj&&p0&&(r0=$u.leaveObject(O0)),Xu.key!==null&&(r0!==null||p0===!0)?$u.leaveKey(y0,Xu.key,r0):y0!==null&&$u.exitKey(y0),r0},Ws.prototype._decodeGeneric=function($u,Iu,Xu){var r0=this._baseState;return $u==="seq"||$u==="set"?null:$u==="seqof"||$u==="setof"?this._decodeList(Iu,$u,r0.args[0],Xu):/str$/.test($u)?this._decodeStr(Iu,$u,Xu):$u==="objid"&&r0.args?this._decodeObjid(Iu,r0.args[0],r0.args[1],Xu):$u==="objid"?this._decodeObjid(Iu,null,null,Xu):$u==="gentime"||$u==="utctime"?this._decodeTime(Iu,$u,Xu):$u==="null_"?this._decodeNull(Iu,Xu):$u==="bool"?this._decodeBool(Iu,Xu):$u==="objDesc"?this._decodeStr(Iu,$u,Xu):$u==="int"||$u==="enum"?this._decodeInt(Iu,r0.args&&r0.args[0],Xu):r0.use!==null?this._getUse(r0.use,Iu._reporterState.obj)._decode(Iu,Xu):Iu.error("unknown tag: "+$u)},Ws.prototype._getUse=function($u,Iu){var Xu=this._baseState;return Xu.useDecoder=this._use($u,Iu),d(Xu.useDecoder._baseState.parent===null),Xu.useDecoder=Xu.useDecoder._baseState.children[0],Xu.implicit!==Xu.useDecoder._baseState.implicit&&(Xu.useDecoder=Xu.useDecoder.clone(),Xu.useDecoder._baseState.implicit=Xu.implicit),Xu.useDecoder},Ws.prototype._decodeChoice=function($u,Iu){var Xu=this._baseState,r0=null,p0=!1;return Object.keys(Xu.choice).some(function(y0){var A0=$u.save(),$0=Xu.choice[y0];try{var O0=$0._decode($u,Iu);if($u.isError(O0))return!1;r0={type:y0,value:O0},p0=!0}catch{return $u.restore(A0),!1}return!0},this),p0?r0:$u.error("Choice not matched")},Ws.prototype._createEncoderBuffer=function($u){return new a($u,this.reporter)},Ws.prototype._encode=function($u,Iu,Xu){var r0=this._baseState;if(!(r0.default!==null&&r0.default===$u)){var p0=this._encodeValue($u,Iu,Xu);if(p0!==void 0&&!this._skipDefault(p0,Iu,Xu))return p0}},Ws.prototype._encodeValue=function($u,Iu,Xu){var r0=this._baseState;if(r0.parent===null)return r0.children[0]._encode($u,Iu||new o);var $0=null;if(this.reporter=Iu,r0.optional&&$u===void 0)if(r0.default!==null)$u=r0.default;else return;var p0=null,y0=!1;if(r0.any)$0=this._createEncoderBuffer($u);else if(r0.choice)$0=this._encodeChoice($u,Iu);else if(r0.contains)p0=this._getUse(r0.contains,Xu)._encode($u,Iu),y0=!0;else if(r0.children)p0=r0.children.map(function(V0){if(V0._baseState.tag==="null_")return V0._encode(null,Iu,$u);if(V0._baseState.key===null)return Iu.error("Child should have a key");var F0=Iu.enterKey(V0._baseState.key);if(typeof $u!="object")return Iu.error("Child expected, but input is not object");var u1=V0._encode($u[V0._baseState.key],Iu,$u);return Iu.leaveKey(F0),u1},this).filter(function(V0){return V0}),p0=this._createEncoderBuffer(p0);else if(r0.tag==="seqof"||r0.tag==="setof"){if(!(r0.args&&r0.args.length===1))return Iu.error("Too many args for : "+r0.tag);if(!Array.isArray($u))return Iu.error("seqof/setof, but data is not Array");var A0=this.clone();A0._baseState.implicit=null,p0=this._createEncoderBuffer($u.map(function(V0){var F0=this._baseState;return this._getUse(F0.args[0],$u)._encode(V0,Iu)},A0))}else r0.use!==null?$0=this._getUse(r0.use,Xu)._encode($u,Iu):(p0=this._encodePrimitive(r0.tag,$u),y0=!0);var $0;if(!r0.any&&r0.choice===null){var O0=r0.implicit!==null?r0.implicit:r0.tag,L0=r0.implicit===null?"universal":"context";O0===null?r0.use===null&&Iu.error("Tag could be omitted only for .use()"):r0.use===null&&($0=this._encodeComposite(O0,y0,L0,p0))}return r0.explicit!==null&&($0=this._encodeComposite(r0.explicit,!1,"context",$0)),$0},Ws.prototype._encodeChoice=function($u,Iu){var Xu=this._baseState,r0=Xu.choice[$u.type];return r0||d(!1,$u.type+" not found in "+JSON.stringify(Object.keys(Xu.choice))),r0._encode($u.value,Iu)},Ws.prototype._encodePrimitive=function($u,Iu){var Xu=this._baseState;if(/str$/.test($u))return this._encodeStr(Iu,$u);if($u==="objid"&&Xu.args)return this._encodeObjid(Iu,Xu.reverseArgs[0],Xu.args[1]);if($u==="objid")return this._encodeObjid(Iu,null,null);if($u==="gentime"||$u==="utctime")return this._encodeTime(Iu,$u);if($u==="null_")return this._encodeNull();if($u==="int"||$u==="enum")return this._encodeInt(Iu,Xu.args&&Xu.reverseArgs[0]);if($u==="bool")return this._encodeBool(Iu);if($u==="objDesc")return this._encodeStr(Iu,$u);throw new Error("Unsupported tag: "+$u)},Ws.prototype._isNumstr=function($u){return/^[0-9 ]*$/.test($u)},Ws.prototype._isPrintstr=function($u){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test($u)},node$4}var hasRequiredBase;function requireBase(){return hasRequiredBase||(hasRequiredBase=1,function(o){var a=o;a.Reporter=reporter.Reporter,a.DecoderBuffer=requireBuffer().DecoderBuffer,a.EncoderBuffer=requireBuffer().EncoderBuffer,a.Node=requireNode()}(base$2)),base$2}var constants$3={},der={},hasRequiredDer$2;function requireDer$2(){return hasRequiredDer$2||(hasRequiredDer$2=1,function(o){var a=requireConstants();o.tagClass={0:"universal",1:"application",2:"context",3:"private"},o.tagClassByName=a._reverse(o.tagClass),o.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},o.tagByName=a._reverse(o.tag)}(der)),der}var hasRequiredConstants;function requireConstants(){return hasRequiredConstants||(hasRequiredConstants=1,function(o){var a=o;a._reverse=function(d){var tt={};return Object.keys(d).forEach(function(nt){(nt|0)==nt&&(nt=nt|0);var $a=d[nt];tt[$a]=nt}),tt},a.der=requireDer$2()}(constants$3)),constants$3}var decoders={},der_1$1,hasRequiredDer$1;function requireDer$1(){if(hasRequiredDer$1)return der_1$1;hasRequiredDer$1=1;var o=inherits_browserExports,a=requireAsn1(),c=a.base,d=a.bignum,tt=a.constants.der;function nt(Su){this.enc="der",this.name=Su.name,this.entity=Su,this.tree=new $a,this.tree._init(Su.body)}der_1$1=nt,nt.prototype.decode=function($u,Iu){return $u instanceof c.DecoderBuffer||($u=new c.DecoderBuffer($u,Iu)),this.tree._decode($u,Iu)};function $a(Su){c.Node.call(this,"der",Su)}o($a,c.Node),$a.prototype._peekTag=function($u,Iu,Xu){if($u.isEmpty())return!1;var r0=$u.save(),p0=Ws($u,'Failed to peek tag: "'+Iu+'"');return $u.isError(p0)?p0:($u.restore(r0),p0.tag===Iu||p0.tagStr===Iu||p0.tagStr+"of"===Iu||Xu)},$a.prototype._decodeTag=function($u,Iu,Xu){var r0=Ws($u,'Failed to decode tag of "'+Iu+'"');if($u.isError(r0))return r0;var p0=gu($u,r0.primitive,'Failed to get length of "'+Iu+'"');if($u.isError(p0))return p0;if(!Xu&&r0.tag!==Iu&&r0.tagStr!==Iu&&r0.tagStr+"of"!==Iu)return $u.error('Failed to match tag: "'+Iu+'"');if(r0.primitive||p0!==null)return $u.skip(p0,'Failed to match body of: "'+Iu+'"');var y0=$u.save(),A0=this._skipUntilEnd($u,'Failed to skip indefinite length body: "'+this.tag+'"');return $u.isError(A0)?A0:(p0=$u.offset-y0.offset,$u.restore(y0),$u.skip(p0,'Failed to match body of: "'+Iu+'"'))},$a.prototype._skipUntilEnd=function($u,Iu){for(;;){var Xu=Ws($u,Iu);if($u.isError(Xu))return Xu;var r0=gu($u,Xu.primitive,Iu);if($u.isError(r0))return r0;var p0;if(Xu.primitive||r0!==null?p0=$u.skip(r0):p0=this._skipUntilEnd($u,Iu),$u.isError(p0))return p0;if(Xu.tagStr==="end")break}},$a.prototype._decodeList=function($u,Iu,Xu,r0){for(var p0=[];!$u.isEmpty();){var y0=this._peekTag($u,"end");if($u.isError(y0))return y0;var A0=Xu.decode($u,"der",r0);if($u.isError(A0)&&y0)break;p0.push(A0)}return p0},$a.prototype._decodeStr=function($u,Iu){if(Iu==="bitstr"){var Xu=$u.readUInt8();return $u.isError(Xu)?Xu:{unused:Xu,data:$u.raw()}}else if(Iu==="bmpstr"){var r0=$u.raw();if(r0.length%2===1)return $u.error("Decoding of string type: bmpstr length mismatch");for(var p0="",y0=0;y0>6],r0=(Iu&32)===0;if((Iu&31)===31){var p0=Iu;for(Iu=0;(p0&128)===128;){if(p0=Su.readUInt8($u),Su.isError(p0))return p0;Iu<<=7,Iu|=p0&127}}else Iu&=31;var y0=tt.tag[Iu];return{cls:Xu,primitive:r0,tag:Iu,tagStr:y0}}function gu(Su,$u,Iu){var Xu=Su.readUInt8(Iu);if(Su.isError(Xu))return Xu;if(!$u&&Xu===128)return null;if(!(Xu&128))return Xu;var r0=Xu&127;if(r0>4)return Su.error("length octect is too long");Xu=0;for(var p0=0;p0=256;A0>>=8)y0++;var $0=new a(2+y0);$0[0]=p0,$0[1]=128|y0;for(var A0=1+y0,O0=r0.length;O0>0;A0--,O0>>=8)$0[A0]=O0&255;return this._createEncoderBuffer([$0,r0])},$a.prototype._encodeStr=function($u,Iu){if(Iu==="bitstr")return this._createEncoderBuffer([$u.unused|0,$u.data]);if(Iu==="bmpstr"){for(var Xu=new a($u.length*2),r0=0;r0<$u.length;r0++)Xu.writeUInt16BE($u.charCodeAt(r0),r0*2);return this._createEncoderBuffer(Xu)}else return Iu==="numstr"?this._isNumstr($u)?this._createEncoderBuffer($u):this.reporter.error("Encoding of string type: numstr supports only digits and space"):Iu==="printstr"?this._isPrintstr($u)?this._createEncoderBuffer($u):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(Iu)?this._createEncoderBuffer($u):Iu==="objDesc"?this._createEncoderBuffer($u):this.reporter.error("Encoding of string type: "+Iu+" unsupported")},$a.prototype._encodeObjid=function($u,Iu,Xu){if(typeof $u=="string"){if(!Iu)return this.reporter.error("string objid given, but no values map found");if(!Iu.hasOwnProperty($u))return this.reporter.error("objid not found in values map");$u=Iu[$u].split(/[\s\.]+/g);for(var r0=0;r0<$u.length;r0++)$u[r0]|=0}else if(Array.isArray($u)){$u=$u.slice();for(var r0=0;r0<$u.length;r0++)$u[r0]|=0}if(!Array.isArray($u))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify($u));if(!Xu){if($u[1]>=40)return this.reporter.error("Second objid identifier OOB");$u.splice(0,2,$u[0]*40+$u[1])}for(var p0=0,r0=0;r0<$u.length;r0++){var y0=$u[r0];for(p0++;y0>=128;y0>>=7)p0++}for(var A0=new a(p0),$0=A0.length-1,r0=$u.length-1;r0>=0;r0--){var y0=$u[r0];for(A0[$0--]=y0&127;(y0>>=7)>0;)A0[$0--]=128|y0&127}return this._createEncoderBuffer(A0)};function Ws(Su){return Su<10?"0"+Su:Su}$a.prototype._encodeTime=function($u,Iu){var Xu,r0=new Date($u);return Iu==="gentime"?Xu=[Ws(r0.getFullYear()),Ws(r0.getUTCMonth()+1),Ws(r0.getUTCDate()),Ws(r0.getUTCHours()),Ws(r0.getUTCMinutes()),Ws(r0.getUTCSeconds()),"Z"].join(""):Iu==="utctime"?Xu=[Ws(r0.getFullYear()%100),Ws(r0.getUTCMonth()+1),Ws(r0.getUTCDate()),Ws(r0.getUTCHours()),Ws(r0.getUTCMinutes()),Ws(r0.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+Iu+" time is not supported yet"),this._encodeStr(Xu,"octstr")},$a.prototype._encodeNull=function(){return this._createEncoderBuffer("")},$a.prototype._encodeInt=function($u,Iu){if(typeof $u=="string"){if(!Iu)return this.reporter.error("String int or enum given, but no values map");if(!Iu.hasOwnProperty($u))return this.reporter.error("Values map doesn't contain: "+JSON.stringify($u));$u=Iu[$u]}if(typeof $u!="number"&&!a.isBuffer($u)){var Xu=$u.toArray();!$u.sign&&Xu[0]&128&&Xu.unshift(0),$u=new a(Xu)}if(a.isBuffer($u)){var r0=$u.length;$u.length===0&&r0++;var y0=new a(r0);return $u.copy(y0),$u.length===0&&(y0[0]=0),this._createEncoderBuffer(y0)}if($u<128)return this._createEncoderBuffer($u);if($u<256)return this._createEncoderBuffer([0,$u]);for(var r0=1,p0=$u;p0>=256;p0>>=8)r0++;for(var y0=new Array(r0),p0=y0.length-1;p0>=0;p0--)y0[p0]=$u&255,$u>>=8;return y0[0]&128&&y0.unshift(0),this._createEncoderBuffer(new a(y0))},$a.prototype._encodeBool=function($u){return this._createEncoderBuffer($u?255:0)},$a.prototype._use=function($u,Iu){return typeof $u=="function"&&($u=$u(Iu)),$u._getEncoder("der").tree},$a.prototype._skipDefault=function($u,Iu,Xu){var r0=this._baseState,p0;if(r0.default===null)return!1;var y0=$u.join();if(r0.defaultBuffer===void 0&&(r0.defaultBuffer=this._encodeValue(r0.default,Iu,Xu).join()),y0.length!==r0.defaultBuffer.length)return!1;for(p0=0;p0=31?Xu.error("Multi-octet tag encoding unsupported"):($u||(r0|=32),r0|=tt.tagClassByName[Iu||"universal"]<<6,r0)}return der_1}var pem,hasRequiredPem;function requirePem(){if(hasRequiredPem)return pem;hasRequiredPem=1;var o=inherits_browserExports,a=requireDer();function c(d){a.call(this,d),this.enc="pem"}return o(c,a),pem=c,c.prototype.encode=function(tt,nt){for(var $a=a.prototype.encode.call(this,tt),Ws=$a.toString("base64"),gu=["-----BEGIN "+nt.label+"-----"],Su=0;Su0&&L0.ishrn(V0),L0}function p0($0,O0){$0=r0($0,O0),$0=$0.mod(O0);var L0=o.from($0.toArray());if(L0.length=0)throw new Error("invalid sig")}return verify_1=nt,verify_1}var browser$4,hasRequiredBrowser$1;function requireBrowser$1(){if(hasRequiredBrowser$1)return browser$4;hasRequiredBrowser$1=1;var o=safeBufferExports$1.Buffer,a=browser$a,c=readableBrowserExports,d=inherits_browserExports,tt=requireSign(),nt=requireVerify(),$a=require$$6;Object.keys($a).forEach(function(Iu){$a[Iu].id=o.from($a[Iu].id,"hex"),$a[Iu.toLowerCase()]=$a[Iu]});function Ws(Iu){c.Writable.call(this);var Xu=$a[Iu];if(!Xu)throw new Error("Unknown message digest");this._hashType=Xu.hash,this._hash=a(Xu.hash),this._tag=Xu.id,this._signType=Xu.sign}d(Ws,c.Writable),Ws.prototype._write=function(Xu,r0,p0){this._hash.update(Xu),p0()},Ws.prototype.update=function(Xu,r0){return this._hash.update(typeof Xu=="string"?o.from(Xu,r0):Xu),this},Ws.prototype.sign=function(Xu,r0){this.end();var p0=this._hash.digest(),y0=tt(p0,Xu,this._hashType,this._signType,this._tag);return r0?y0.toString(r0):y0};function gu(Iu){c.Writable.call(this);var Xu=$a[Iu];if(!Xu)throw new Error("Unknown message digest");this._hash=a(Xu.hash),this._tag=Xu.id,this._signType=Xu.sign}d(gu,c.Writable),gu.prototype._write=function(Xu,r0,p0){this._hash.update(Xu),p0()},gu.prototype.update=function(Xu,r0){return this._hash.update(typeof Xu=="string"?o.from(Xu,r0):Xu),this},gu.prototype.verify=function(Xu,r0,p0){var y0=typeof r0=="string"?o.from(r0,p0):r0;this.end();var A0=this._hash.digest();return nt(y0,A0,Xu,this._signType,this._tag)};function Su(Iu){return new Ws(Iu)}function $u(Iu){return new gu(Iu)}return browser$4={Sign:Su,Verify:$u,createSign:Su,createVerify:$u},browser$4}var browser$3,hasRequiredBrowser;function requireBrowser(){if(hasRequiredBrowser)return browser$3;hasRequiredBrowser=1;var o=requireElliptic(),a=bnExports;browser$3=function($a){return new d($a)};var c={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};c.p224=c.secp224r1,c.p256=c.secp256r1=c.prime256v1,c.p192=c.secp192r1=c.prime192v1,c.p384=c.secp384r1,c.p521=c.secp521r1;function d(nt){this.curveType=c[nt],this.curveType||(this.curveType={name:nt}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}d.prototype.generateKeys=function(nt,$a){return this.keys=this.curve.genKeyPair(),this.getPublicKey(nt,$a)},d.prototype.computeSecret=function(nt,$a,Ws){$a=$a||"utf8",Buffer$C.isBuffer(nt)||(nt=new Buffer$C(nt,$a));var gu=this.curve.keyFromPublic(nt).getPublic(),Su=gu.mul(this.keys.getPrivate()).getX();return tt(Su,Ws,this.curveType.byteLength)},d.prototype.getPublicKey=function(nt,$a){var Ws=this.keys.getPublic($a==="compressed",!0);return $a==="hybrid"&&(Ws[Ws.length-1]%2?Ws[0]=7:Ws[0]=6),tt(Ws,nt)},d.prototype.getPrivateKey=function(nt){return tt(this.keys.getPrivate(),nt)},d.prototype.setPublicKey=function(nt,$a){return $a=$a||"utf8",Buffer$C.isBuffer(nt)||(nt=new Buffer$C(nt,$a)),this.keys._importPublic(nt),this},d.prototype.setPrivateKey=function(nt,$a){$a=$a||"utf8",Buffer$C.isBuffer(nt)||(nt=new Buffer$C(nt,$a));var Ws=new a(nt);return Ws=Ws.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(Ws),this};function tt(nt,$a,Ws){Array.isArray(nt)||(nt=nt.toArray());var gu=new Buffer$C(nt);if(Ws&&gu.length=0)throw new Error("data too long for modulus")}else throw new Error("unknown padding");return d?crt$1($a,nt):withPublic$1($a,nt)};function oaep$1(o,a){var c=o.modulus.byteLength(),d=a.length,tt=createHash$1("sha1").update(Buffer$2.alloc(0)).digest(),nt=tt.length,$a=2*nt;if(d>c-$a-2)throw new Error("message too long");var Ws=Buffer$2.alloc(c-d-$a-2),gu=c-nt-1,Su=randomBytes$1(nt),$u=xor$1(Buffer$2.concat([tt,Ws,Buffer$2.alloc(1,1),a],gu),mgf$1(Su,gu)),Iu=xor$1(Su,mgf$1($u,nt));return new BN$1(Buffer$2.concat([Buffer$2.alloc(1),Iu,$u],c))}function pkcs1$1(o,a,c){var d=a.length,tt=o.modulus.byteLength();if(d>tt-11)throw new Error("message too long");var nt;return c?nt=Buffer$2.alloc(tt-d-3,255):nt=nonZero(tt-d-3),new BN$1(Buffer$2.concat([Buffer$2.from([0,c?1:2]),nt,Buffer$2.alloc(1),a],tt))}function nonZero(o){for(var a=Buffer$2.allocUnsafe(o),c=0,d=randomBytes$1(o*2),tt=0,nt;c$a||new BN(c).cmp(nt.modulus)>=0)throw new Error("decryption error");var Ws;d?Ws=withPublic(new BN(c),nt):Ws=crt(c,nt);var gu=Buffer$1.alloc($a-Ws.length);if(Ws=Buffer$1.concat([gu,Ws],$a),tt===4)return oaep(nt,Ws);if(tt===1)return pkcs1(nt,Ws,d);if(tt===3)return Ws;throw new Error("unknown padding")};function oaep(o,a){var c=o.modulus.byteLength(),d=createHash("sha1").update(Buffer$1.alloc(0)).digest(),tt=d.length;if(a[0]!==0)throw new Error("decryption error");var nt=a.slice(1,tt+1),$a=a.slice(tt+1),Ws=xor(nt,mgf($a,tt)),gu=xor($a,mgf(Ws,c-tt-1));if(compare$1(d,gu.slice(0,tt)))throw new Error("decryption error");for(var Su=tt;gu[Su]===0;)Su++;if(gu[Su++]!==1)throw new Error("decryption error");return gu.slice(Su)}function pkcs1(o,a,c){for(var d=a.slice(0,2),tt=2,nt=0;a[tt++]!==0;)if(tt>=a.length){nt++;break}var $a=a.slice(2,tt-1);if((d.toString("hex")!=="0002"&&!c||d.toString("hex")!=="0001"&&c)&&nt++,$a.length<8&&nt++,nt)throw new Error("decryption error");return a.slice(tt)}function compare$1(o,a){o=Buffer$1.from(o),a=Buffer$1.from(a);var c=0,d=o.length;o.length!==a.length&&(c++,d=Math.min(o.length,a.length));for(var tt=-1;++ttkMaxUint32||o<0)throw new TypeError("offset must be a uint32");if(o>kBufferMaxLength||o>a)throw new RangeError("offset out of range")}function assertSize(o,a,c){if(typeof o!="number"||o!==o)throw new TypeError("size must be a number");if(o>kMaxUint32||o<0)throw new TypeError("size must be a uint32");if(o+a>c||o>kBufferMaxLength)throw new RangeError("buffer too small")}crypto$2&&crypto$2.getRandomValues||!process$1$4.browser?(browser$1.randomFill=randomFill,browser$1.randomFillSync=randomFillSync):(browser$1.randomFill=oldBrowser,browser$1.randomFillSync=oldBrowser);function randomFill(o,a,c,d){if(!Buffer.isBuffer(o)&&!(o instanceof commonjsGlobal$4.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof a=="function")d=a,a=0,c=o.length;else if(typeof c=="function")d=c,c=o.length-a;else if(typeof d!="function")throw new TypeError('"cb" argument must be a function');return assertOffset(a,o.length),assertSize(c,a,o.length),actualFill(o,a,c,d)}function actualFill(o,a,c,d){if(process$1$4.browser){var tt=o.buffer,nt=new Uint8Array(tt,a,c);if(crypto$2.getRandomValues(nt),d){process$1$4.nextTick(function(){d(null,o)});return}return o}if(d){randombytes(c,function(Ws,gu){if(Ws)return d(Ws);gu.copy(o,a),d(null,o)});return}var $a=randombytes(c);return $a.copy(o,a),o}function randomFillSync(o,a,c){if(typeof a>"u"&&(a=0),!Buffer.isBuffer(o)&&!(o instanceof commonjsGlobal$4.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return assertOffset(a,o.length),c===void 0&&(c=o.length-a),assertSize(c,a,o.length),actualFill(o,a,c)}var hasRequiredCryptoBrowserify;function requireCryptoBrowserify(){if(hasRequiredCryptoBrowserify)return cryptoBrowserify;hasRequiredCryptoBrowserify=1,cryptoBrowserify.randomBytes=cryptoBrowserify.rng=cryptoBrowserify.pseudoRandomBytes=cryptoBrowserify.prng=browserExports,cryptoBrowserify.createHash=cryptoBrowserify.Hash=browser$a,cryptoBrowserify.createHmac=cryptoBrowserify.Hmac=browser$9;var o=algos,a=Object.keys(o),c=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(a);cryptoBrowserify.getHashes=function(){return c};var d=browser$8;cryptoBrowserify.pbkdf2=d.pbkdf2,cryptoBrowserify.pbkdf2Sync=d.pbkdf2Sync;var tt=browser$7;cryptoBrowserify.Cipher=tt.Cipher,cryptoBrowserify.createCipher=tt.createCipher,cryptoBrowserify.Cipheriv=tt.Cipheriv,cryptoBrowserify.createCipheriv=tt.createCipheriv,cryptoBrowserify.Decipher=tt.Decipher,cryptoBrowserify.createDecipher=tt.createDecipher,cryptoBrowserify.Decipheriv=tt.Decipheriv,cryptoBrowserify.createDecipheriv=tt.createDecipheriv,cryptoBrowserify.getCiphers=tt.getCiphers,cryptoBrowserify.listCiphers=tt.listCiphers;var nt=requireBrowser$2();cryptoBrowserify.DiffieHellmanGroup=nt.DiffieHellmanGroup,cryptoBrowserify.createDiffieHellmanGroup=nt.createDiffieHellmanGroup,cryptoBrowserify.getDiffieHellman=nt.getDiffieHellman,cryptoBrowserify.createDiffieHellman=nt.createDiffieHellman,cryptoBrowserify.DiffieHellman=nt.DiffieHellman;var $a=requireBrowser$1();cryptoBrowserify.createSign=$a.createSign,cryptoBrowserify.Sign=$a.Sign,cryptoBrowserify.createVerify=$a.createVerify,cryptoBrowserify.Verify=$a.Verify,cryptoBrowserify.createECDH=requireBrowser();var Ws=browser$2;cryptoBrowserify.publicEncrypt=Ws.publicEncrypt,cryptoBrowserify.privateEncrypt=Ws.privateEncrypt,cryptoBrowserify.publicDecrypt=Ws.publicDecrypt,cryptoBrowserify.privateDecrypt=Ws.privateDecrypt;var gu=browser$1;return cryptoBrowserify.randomFill=gu.randomFill,cryptoBrowserify.randomFillSync=gu.randomFillSync,cryptoBrowserify.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join(` +`))},cryptoBrowserify.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6},cryptoBrowserify}var __awaiter$8=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__rest$1=commonjsGlobal$4&&commonjsGlobal$4.__rest||function(o,a){var c={};for(var d in o)Object.prototype.hasOwnProperty.call(o,d)&&a.indexOf(d)<0&&(c[d]=o[d]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var tt=0,d=Object.getOwnPropertySymbols(o);tt()=>{throw new Error("method not implemented: "+o)},prohibitedInView=o=>()=>{throw new Error("method not available for view calls: "+o)};class Runtime{constructor(a){var{contractCode:c}=a,d=__rest$1(a,["contractCode"]);this.context=d,this.wasm=this.prepareWASM(Buffer$C.from(c,"base64")),this.memory=new WebAssembly.Memory({initial:1024,maximum:2048}),this.registers={},this.logs=[],this.result=Buffer$C.from([])}readUTF16CStr(a){const c=[],d=new Uint16Array(this.memory.buffer);let tt=Number(a)/2;for(;d[tt]!=0;)c.push(d[tt]),tt++;return Buffer$C.from(Uint16Array.from(c).buffer).toString("ucs2")}readUTF8CStr(a,c){const d=[],tt=new Uint8Array(this.memory.buffer);let nt=Number(c);for(let $a=0;$aBuffer$C.compare(nt.key,d)===0).map(nt=>nt.value);return tt.length===0?null:tt.length>1?tt:tt[0]}prepareWASM(a){const c=[];if(a.subarray(0,4).toString("utf8")!=="\0asm")throw new Error("Invalid magic number");const tt=a.readUInt32LE(4);if(tt!=1)throw new Error("Invalid version: "+tt);let nt=8;c.push(a.subarray(0,nt));function $a(){let Iu=0,Xu=0,r0;do r0=a[nt++],Iu|=(r0&127)<>=7,Iu!==0&&(r0|=128),Xu.push(r0)}while(Iu!==0);return Buffer$C.from(Xu)}function $u(Iu){const Xu=Buffer$C.from(Iu,"utf8");return Buffer$C.concat([Su(Xu.length),Xu])}do{const Iu=nt,Xu=a.readUInt8(nt);nt++;const r0=$a(),p0=nt+r0;if(Xu==5)c.push(Buffer$C.from([5,1,0]));else if(Xu==2){const y0=[],A0=$a();for(let L0=0;L0this.panic("explicit guest panic"),panic_utf8:(a,c)=>this.panic(this.readUTF8CStr(a,c)),epoch_height:notImplemented("epoch_height"),storage_usage:notImplemented("storage_usage"),account_balance:notImplemented("account_balance"),account_locked_balance:notImplemented("account_locked_balance"),random_seed:notImplemented("random_seed"),ripemd160:notImplemented("ripemd160"),keccak256:notImplemented("keccak256"),keccak512:notImplemented("keccak512"),ecrecover:notImplemented("ecrecover"),validator_stake:notImplemented("validator_stake"),validator_total_stake:notImplemented("validator_total_stake"),write_register:prohibitedInView("write_register"),signer_account_id:prohibitedInView("signer_account_id"),signer_account_pk:prohibitedInView("signer_account_pk"),predecessor_account_id:prohibitedInView("predecessor_account_id"),attached_deposit:prohibitedInView("attached_deposit"),prepaid_gas:prohibitedInView("prepaid_gas"),used_gas:prohibitedInView("used_gas"),promise_create:prohibitedInView("promise_create"),promise_then:prohibitedInView("promise_then"),promise_and:prohibitedInView("promise_and"),promise_batch_create:prohibitedInView("promise_batch_create"),promise_batch_then:prohibitedInView("promise_batch_then"),promise_batch_action_create_account:prohibitedInView("promise_batch_action_create_account"),promise_batch_action_deploy_contract:prohibitedInView("promise_batch_action_deploy_contract"),promise_batch_action_function_call:prohibitedInView("promise_batch_action_function_call"),promise_batch_action_function_call_weight:prohibitedInView("promise_batch_action_function_call_weight"),promise_batch_action_transfer:prohibitedInView("promise_batch_action_transfer"),promise_batch_action_stake:prohibitedInView("promise_batch_action_stake"),promise_batch_action_add_key_with_full_access:prohibitedInView("promise_batch_action_add_key_with_full_access"),promise_batch_action_add_key_with_function_call:prohibitedInView("promise_batch_action_add_key_with_function_call"),promise_batch_action_delete_key:prohibitedInView("promise_batch_action_delete_key"),promise_batch_action_delete_account:prohibitedInView("promise_batch_action_delete_account"),promise_results_count:prohibitedInView("promise_results_count"),promise_result:prohibitedInView("promise_result"),promise_return:prohibitedInView("promise_return"),storage_write:prohibitedInView("storage_write"),storage_remove:prohibitedInView("storage_remove")}}execute(a){return __awaiter$8(this,void 0,void 0,function*(){const c=yield WebAssembly.compile(this.wasm),tt=(yield WebAssembly.instantiate(c,{env:Object.assign(Object.assign({},this.getHostImports()),{memory:this.memory})})).exports[a];if(tt==null)throw new Error(`Contract method '${a}' does not exists in contract ${this.context.contractId} for block id ${this.context.blockHeight}`);return tt(),{result:this.result,logs:this.logs}})}}runtime.Runtime=Runtime;var __awaiter$7=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__rest=commonjsGlobal$4&&commonjsGlobal$4.__rest||function(o,a){var c={};for(var d in o)Object.prototype.hasOwnProperty.call(o,d)&&a.indexOf(d)<0&&(c[d]=o[d]);if(o!=null&&typeof Object.getOwnPropertySymbols=="function")for(var tt=0,d=Object.getOwnPropertySymbols(o);tt1)return!1;const O0=this._items[0];return O0===""||O0==='""'}get str(){var O0;return(O0=this._str)!==null&&O0!==void 0?O0:this._str=this._items.reduce((L0,V0)=>`${L0}${V0}`,"")}get names(){var O0;return(O0=this._names)!==null&&O0!==void 0?O0:this._names=this._items.reduce((L0,V0)=>(V0 instanceof c&&(L0[V0.str]=(L0[V0.str]||0)+1),L0),{})}}o._Code=d,o.nil=new d("");function tt($0,...O0){const L0=[$0[0]];let V0=0;for(;V0{if(Iu.scopePath===void 0)throw new Error(`CodeGen: name "${Iu}" has no value`);return(0,a._)`${Su}${Iu.scopePath}`})}scopeCode(Su=this._values,$u,Iu){return this._reduceValues(Su,Xu=>{if(Xu.value===void 0)throw new Error(`CodeGen: name "${Xu}" has no value`);return Xu.value.code},$u,Iu)}_reduceValues(Su,$u,Iu={},Xu){let r0=a.nil;for(const p0 in Su){const y0=Su[p0];if(!y0)continue;const A0=Iu[p0]=Iu[p0]||new Map;y0.forEach($0=>{if(A0.has($0))return;A0.set($0,d.Started);let O0=$u($0);if(O0){const L0=this.opts.es5?o.varKinds.var:o.varKinds.const;r0=(0,a._)`${r0}${L0} ${$0} = ${O0};${this.opts._n}`}else if(O0=Xu==null?void 0:Xu($0))r0=(0,a._)`${r0}${O0}${this.opts._n}`;else throw new c($0);A0.set($0,d.Completed)})}return r0}}o.ValueScope=Ws})(scope);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.or=o.and=o.not=o.CodeGen=o.operators=o.varKinds=o.ValueScopeName=o.ValueScope=o.Scope=o.Name=o.regexpCode=o.stringify=o.getProperty=o.nil=o.strConcat=o.str=o._=void 0;const a=code$1,c=scope;var d=code$1;Object.defineProperty(o,"_",{enumerable:!0,get:function(){return d._}}),Object.defineProperty(o,"str",{enumerable:!0,get:function(){return d.str}}),Object.defineProperty(o,"strConcat",{enumerable:!0,get:function(){return d.strConcat}}),Object.defineProperty(o,"nil",{enumerable:!0,get:function(){return d.nil}}),Object.defineProperty(o,"getProperty",{enumerable:!0,get:function(){return d.getProperty}}),Object.defineProperty(o,"stringify",{enumerable:!0,get:function(){return d.stringify}}),Object.defineProperty(o,"regexpCode",{enumerable:!0,get:function(){return d.regexpCode}}),Object.defineProperty(o,"Name",{enumerable:!0,get:function(){return d.Name}});var tt=scope;Object.defineProperty(o,"Scope",{enumerable:!0,get:function(){return tt.Scope}}),Object.defineProperty(o,"ValueScope",{enumerable:!0,get:function(){return tt.ValueScope}}),Object.defineProperty(o,"ValueScopeName",{enumerable:!0,get:function(){return tt.ValueScopeName}}),Object.defineProperty(o,"varKinds",{enumerable:!0,get:function(){return tt.varKinds}}),o.operators={GT:new a._Code(">"),GTE:new a._Code(">="),LT:new a._Code("<"),LTE:new a._Code("<="),EQ:new a._Code("==="),NEQ:new a._Code("!=="),NOT:new a._Code("!"),OR:new a._Code("||"),AND:new a._Code("&&"),ADD:new a._Code("+")};class nt{optimizeNodes(){return this}optimizeNames(O1,Q1){return this}}class $a extends nt{constructor(O1,Q1,rv){super(),this.varKind=O1,this.name=Q1,this.rhs=rv}render({es5:O1,_n:Q1}){const rv=O1?c.varKinds.var:this.varKind,D1=this.rhs===void 0?"":` = ${this.rhs}`;return`${rv} ${this.name}${D1};`+Q1}optimizeNames(O1,Q1){if(O1[this.name.str])return this.rhs&&(this.rhs=D0(this.rhs,O1,Q1)),this}get names(){return this.rhs instanceof a._CodeOrName?this.rhs.names:{}}}class Ws extends nt{constructor(O1,Q1,rv){super(),this.lhs=O1,this.rhs=Q1,this.sideEffects=rv}render({_n:O1}){return`${this.lhs} = ${this.rhs};`+O1}optimizeNames(O1,Q1){if(!(this.lhs instanceof a.Name&&!O1[this.lhs.str]&&!this.sideEffects))return this.rhs=D0(this.rhs,O1,Q1),this}get names(){const O1=this.lhs instanceof a.Name?{}:{...this.lhs.names};return t1(O1,this.rhs)}}class gu extends Ws{constructor(O1,Q1,rv,D1){super(O1,rv,D1),this.op=Q1}render({_n:O1}){return`${this.lhs} ${this.op}= ${this.rhs};`+O1}}class Su extends nt{constructor(O1){super(),this.label=O1,this.names={}}render({_n:O1}){return`${this.label}:`+O1}}class $u extends nt{constructor(O1){super(),this.label=O1,this.names={}}render({_n:O1}){return`break${this.label?` ${this.label}`:""};`+O1}}class Iu extends nt{constructor(O1){super(),this.error=O1}render({_n:O1}){return`throw ${this.error};`+O1}get names(){return this.error.names}}class Xu extends nt{constructor(O1){super(),this.code=O1}render({_n:O1}){return`${this.code};`+O1}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(O1,Q1){return this.code=D0(this.code,O1,Q1),this}get names(){return this.code instanceof a._CodeOrName?this.code.names:{}}}class r0 extends nt{constructor(O1=[]){super(),this.nodes=O1}render(O1){return this.nodes.reduce((Q1,rv)=>Q1+rv.render(O1),"")}optimizeNodes(){const{nodes:O1}=this;let Q1=O1.length;for(;Q1--;){const rv=O1[Q1].optimizeNodes();Array.isArray(rv)?O1.splice(Q1,1,...rv):rv?O1[Q1]=rv:O1.splice(Q1,1)}return O1.length>0?this:void 0}optimizeNames(O1,Q1){const{nodes:rv}=this;let D1=rv.length;for(;D1--;){const ev=rv[D1];ev.optimizeNames(O1,Q1)||(Z0(O1,ev.names),rv.splice(D1,1))}return rv.length>0?this:void 0}get names(){return this.nodes.reduce((O1,Q1)=>r1(O1,Q1.names),{})}}class p0 extends r0{render(O1){return"{"+O1._n+super.render(O1)+"}"+O1._n}}class y0 extends r0{}class A0 extends p0{}A0.kind="else";class $0 extends p0{constructor(O1,Q1){super(Q1),this.condition=O1}render(O1){let Q1=`if(${this.condition})`+super.render(O1);return this.else&&(Q1+="else "+this.else.render(O1)),Q1}optimizeNodes(){super.optimizeNodes();const O1=this.condition;if(O1===!0)return this.nodes;let Q1=this.else;if(Q1){const rv=Q1.optimizeNodes();Q1=this.else=Array.isArray(rv)?new A0(rv):rv}if(Q1)return O1===!1?Q1 instanceof $0?Q1:Q1.nodes:this.nodes.length?this:new $0(f1(O1),Q1 instanceof $0?[Q1]:Q1.nodes);if(!(O1===!1||!this.nodes.length))return this}optimizeNames(O1,Q1){var rv;if(this.else=(rv=this.else)===null||rv===void 0?void 0:rv.optimizeNames(O1,Q1),!!(super.optimizeNames(O1,Q1)||this.else))return this.condition=D0(this.condition,O1,Q1),this}get names(){const O1=super.names;return t1(O1,this.condition),this.else&&r1(O1,this.else.names),O1}}$0.kind="if";class O0 extends p0{}O0.kind="for";class L0 extends O0{constructor(O1){super(),this.iteration=O1}render(O1){return`for(${this.iteration})`+super.render(O1)}optimizeNames(O1,Q1){if(super.optimizeNames(O1,Q1))return this.iteration=D0(this.iteration,O1,Q1),this}get names(){return r1(super.names,this.iteration.names)}}class V0 extends O0{constructor(O1,Q1,rv,D1){super(),this.varKind=O1,this.name=Q1,this.from=rv,this.to=D1}render(O1){const Q1=O1.es5?c.varKinds.var:this.varKind,{name:rv,from:D1,to:ev}=this;return`for(${Q1} ${rv}=${D1}; ${rv}<${ev}; ${rv}++)`+super.render(O1)}get names(){const O1=t1(super.names,this.from);return t1(O1,this.to)}}class F0 extends O0{constructor(O1,Q1,rv,D1){super(),this.loop=O1,this.varKind=Q1,this.name=rv,this.iterable=D1}render(O1){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(O1)}optimizeNames(O1,Q1){if(super.optimizeNames(O1,Q1))return this.iterable=D0(this.iterable,O1,Q1),this}get names(){return r1(super.names,this.iterable.names)}}class u1 extends p0{constructor(O1,Q1,rv){super(),this.name=O1,this.args=Q1,this.async=rv}render(O1){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(O1)}}u1.kind="func";class g1 extends r0{render(O1){return"return "+super.render(O1)}}g1.kind="return";class E1 extends p0{render(O1){let Q1="try"+super.render(O1);return this.catch&&(Q1+=this.catch.render(O1)),this.finally&&(Q1+=this.finally.render(O1)),Q1}optimizeNodes(){var O1,Q1;return super.optimizeNodes(),(O1=this.catch)===null||O1===void 0||O1.optimizeNodes(),(Q1=this.finally)===null||Q1===void 0||Q1.optimizeNodes(),this}optimizeNames(O1,Q1){var rv,D1;return super.optimizeNames(O1,Q1),(rv=this.catch)===null||rv===void 0||rv.optimizeNames(O1,Q1),(D1=this.finally)===null||D1===void 0||D1.optimizeNames(O1,Q1),this}get names(){const O1=super.names;return this.catch&&r1(O1,this.catch.names),this.finally&&r1(O1,this.finally.names),O1}}class B1 extends p0{constructor(O1){super(),this.error=O1}render(O1){return`catch(${this.error})`+super.render(O1)}}B1.kind="catch";class lv extends p0{render(O1){return"finally"+super.render(O1)}}lv.kind="finally";class j1{constructor(O1,Q1={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...Q1,_n:Q1.lines?` +`:""},this._extScope=O1,this._scope=new c.Scope({parent:O1}),this._nodes=[new y0]}toString(){return this._root.render(this.opts)}name(O1){return this._scope.name(O1)}scopeName(O1){return this._extScope.name(O1)}scopeValue(O1,Q1){const rv=this._extScope.value(O1,Q1);return(this._values[rv.prefix]||(this._values[rv.prefix]=new Set)).add(rv),rv}getScopeValue(O1,Q1){return this._extScope.getValue(O1,Q1)}scopeRefs(O1){return this._extScope.scopeRefs(O1,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(O1,Q1,rv,D1){const ev=this._scope.toName(Q1);return rv!==void 0&&D1&&(this._constants[ev.str]=rv),this._leafNode(new $a(O1,ev,rv)),ev}const(O1,Q1,rv){return this._def(c.varKinds.const,O1,Q1,rv)}let(O1,Q1,rv){return this._def(c.varKinds.let,O1,Q1,rv)}var(O1,Q1,rv){return this._def(c.varKinds.var,O1,Q1,rv)}assign(O1,Q1,rv){return this._leafNode(new Ws(O1,Q1,rv))}add(O1,Q1){return this._leafNode(new gu(O1,o.operators.ADD,Q1))}code(O1){return typeof O1=="function"?O1():O1!==a.nil&&this._leafNode(new Xu(O1)),this}object(...O1){const Q1=["{"];for(const[rv,D1]of O1)Q1.length>1&&Q1.push(","),Q1.push(rv),(rv!==D1||this.opts.es5)&&(Q1.push(":"),(0,a.addCodeArg)(Q1,D1));return Q1.push("}"),new a._Code(Q1)}if(O1,Q1,rv){if(this._blockNode(new $0(O1)),Q1&&rv)this.code(Q1).else().code(rv).endIf();else if(Q1)this.code(Q1).endIf();else if(rv)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(O1){return this._elseNode(new $0(O1))}else(){return this._elseNode(new A0)}endIf(){return this._endBlockNode($0,A0)}_for(O1,Q1){return this._blockNode(O1),Q1&&this.code(Q1).endFor(),this}for(O1,Q1){return this._for(new L0(O1),Q1)}forRange(O1,Q1,rv,D1,ev=this.opts.es5?c.varKinds.var:c.varKinds.let){const Mv=this._scope.toName(O1);return this._for(new V0(ev,Mv,Q1,rv),()=>D1(Mv))}forOf(O1,Q1,rv,D1=c.varKinds.const){const ev=this._scope.toName(O1);if(this.opts.es5){const Mv=Q1 instanceof a.Name?Q1:this.var("_arr",Q1);return this.forRange("_i",0,(0,a._)`${Mv}.length`,Zv=>{this.var(ev,(0,a._)`${Mv}[${Zv}]`),rv(ev)})}return this._for(new F0("of",D1,ev,Q1),()=>rv(ev))}forIn(O1,Q1,rv,D1=this.opts.es5?c.varKinds.var:c.varKinds.const){if(this.opts.ownProperties)return this.forOf(O1,(0,a._)`Object.keys(${Q1})`,rv);const ev=this._scope.toName(O1);return this._for(new F0("in",D1,ev,Q1),()=>rv(ev))}endFor(){return this._endBlockNode(O0)}label(O1){return this._leafNode(new Su(O1))}break(O1){return this._leafNode(new $u(O1))}return(O1){const Q1=new g1;if(this._blockNode(Q1),this.code(O1),Q1.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(g1)}try(O1,Q1,rv){if(!Q1&&!rv)throw new Error('CodeGen: "try" without "catch" and "finally"');const D1=new E1;if(this._blockNode(D1),this.code(O1),Q1){const ev=this.name("e");this._currNode=D1.catch=new B1(ev),Q1(ev)}return rv&&(this._currNode=D1.finally=new lv,this.code(rv)),this._endBlockNode(B1,lv)}throw(O1){return this._leafNode(new Iu(O1))}block(O1,Q1){return this._blockStarts.push(this._nodes.length),O1&&this.code(O1).endBlock(Q1),this}endBlock(O1){const Q1=this._blockStarts.pop();if(Q1===void 0)throw new Error("CodeGen: not in self-balancing block");const rv=this._nodes.length-Q1;if(rv<0||O1!==void 0&&rv!==O1)throw new Error(`CodeGen: wrong number of nodes: ${rv} vs ${O1} expected`);return this._nodes.length=Q1,this}func(O1,Q1=a.nil,rv,D1){return this._blockNode(new u1(O1,Q1,rv)),D1&&this.code(D1).endFunc(),this}endFunc(){return this._endBlockNode(u1)}optimize(O1=1){for(;O1-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(O1){return this._currNode.nodes.push(O1),this}_blockNode(O1){this._currNode.nodes.push(O1),this._nodes.push(O1)}_endBlockNode(O1,Q1){const rv=this._currNode;if(rv instanceof O1||Q1&&rv instanceof Q1)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${Q1?`${O1.kind}/${Q1.kind}`:O1.kind}"`)}_elseNode(O1){const Q1=this._currNode;if(!(Q1 instanceof $0))throw new Error('CodeGen: "else" without "if"');return this._currNode=Q1.else=O1,this}get _root(){return this._nodes[0]}get _currNode(){const O1=this._nodes;return O1[O1.length-1]}set _currNode(O1){const Q1=this._nodes;Q1[Q1.length-1]=O1}}o.CodeGen=j1;function r1(R1,O1){for(const Q1 in O1)R1[Q1]=(R1[Q1]||0)+(O1[Q1]||0);return R1}function t1(R1,O1){return O1 instanceof a._CodeOrName?r1(R1,O1.names):R1}function D0(R1,O1,Q1){if(R1 instanceof a.Name)return rv(R1);if(!D1(R1))return R1;return new a._Code(R1._items.reduce((ev,Mv)=>(Mv instanceof a.Name&&(Mv=rv(Mv)),Mv instanceof a._Code?ev.push(...Mv._items):ev.push(Mv),ev),[]));function rv(ev){const Mv=Q1[ev.str];return Mv===void 0||O1[ev.str]!==1?ev:(delete O1[ev.str],Mv)}function D1(ev){return ev instanceof a._Code&&ev._items.some(Mv=>Mv instanceof a.Name&&O1[Mv.str]===1&&Q1[Mv.str]!==void 0)}}function Z0(R1,O1){for(const Q1 in O1)R1[Q1]=(R1[Q1]||0)-(O1[Q1]||0)}function f1(R1){return typeof R1=="boolean"||typeof R1=="number"||R1===null?!R1:(0,a._)`!${d1(R1)}`}o.not=f1;const w1=o1(o.operators.AND);function m1(...R1){return R1.reduce(w1)}o.and=m1;const c1=o1(o.operators.OR);function G0(...R1){return R1.reduce(c1)}o.or=G0;function o1(R1){return(O1,Q1)=>O1===a.nil?Q1:Q1===a.nil?O1:(0,a._)`${d1(O1)} ${R1} ${d1(Q1)}`}function d1(R1){return R1 instanceof a.Name?R1:(0,a._)`(${R1})`}})(codegen);var util={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.checkStrictMode=o.getErrorPath=o.Type=o.useFunc=o.setEvaluated=o.evaluatedPropsToName=o.mergeEvaluated=o.eachItem=o.unescapeJsonPointer=o.escapeJsonPointer=o.escapeFragment=o.unescapeFragment=o.schemaRefOrVal=o.schemaHasRulesButRef=o.schemaHasRules=o.checkUnknownRules=o.alwaysValidSchema=o.toHash=void 0;const a=codegen,c=code$1;function d(u1){const g1={};for(const E1 of u1)g1[E1]=!0;return g1}o.toHash=d;function tt(u1,g1){return typeof g1=="boolean"?g1:Object.keys(g1).length===0?!0:(nt(u1,g1),!$a(g1,u1.self.RULES.all))}o.alwaysValidSchema=tt;function nt(u1,g1=u1.schema){const{opts:E1,self:B1}=u1;if(!E1.strictSchema||typeof g1=="boolean")return;const lv=B1.RULES.keywords;for(const j1 in g1)lv[j1]||F0(u1,`unknown keyword: "${j1}"`)}o.checkUnknownRules=nt;function $a(u1,g1){if(typeof u1=="boolean")return!u1;for(const E1 in u1)if(g1[E1])return!0;return!1}o.schemaHasRules=$a;function Ws(u1,g1){if(typeof u1=="boolean")return!u1;for(const E1 in u1)if(E1!=="$ref"&&g1.all[E1])return!0;return!1}o.schemaHasRulesButRef=Ws;function gu({topSchemaRef:u1,schemaPath:g1},E1,B1,lv){if(!lv){if(typeof E1=="number"||typeof E1=="boolean")return E1;if(typeof E1=="string")return(0,a._)`${E1}`}return(0,a._)`${u1}${g1}${(0,a.getProperty)(B1)}`}o.schemaRefOrVal=gu;function Su(u1){return Xu(decodeURIComponent(u1))}o.unescapeFragment=Su;function $u(u1){return encodeURIComponent(Iu(u1))}o.escapeFragment=$u;function Iu(u1){return typeof u1=="number"?`${u1}`:u1.replace(/~/g,"~0").replace(/\//g,"~1")}o.escapeJsonPointer=Iu;function Xu(u1){return u1.replace(/~1/g,"/").replace(/~0/g,"~")}o.unescapeJsonPointer=Xu;function r0(u1,g1){if(Array.isArray(u1))for(const E1 of u1)g1(E1);else g1(u1)}o.eachItem=r0;function p0({mergeNames:u1,mergeToName:g1,mergeValues:E1,resultToName:B1}){return(lv,j1,r1,t1)=>{const D0=r1===void 0?j1:r1 instanceof a.Name?(j1 instanceof a.Name?u1(lv,j1,r1):g1(lv,j1,r1),r1):j1 instanceof a.Name?(g1(lv,r1,j1),j1):E1(j1,r1);return t1===a.Name&&!(D0 instanceof a.Name)?B1(lv,D0):D0}}o.mergeEvaluated={props:p0({mergeNames:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true && ${g1} !== undefined`,()=>{u1.if((0,a._)`${g1} === true`,()=>u1.assign(E1,!0),()=>u1.assign(E1,(0,a._)`${E1} || {}`).code((0,a._)`Object.assign(${E1}, ${g1})`))}),mergeToName:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true`,()=>{g1===!0?u1.assign(E1,!0):(u1.assign(E1,(0,a._)`${E1} || {}`),A0(u1,E1,g1))}),mergeValues:(u1,g1)=>u1===!0?!0:{...u1,...g1},resultToName:y0}),items:p0({mergeNames:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true && ${g1} !== undefined`,()=>u1.assign(E1,(0,a._)`${g1} === true ? true : ${E1} > ${g1} ? ${E1} : ${g1}`)),mergeToName:(u1,g1,E1)=>u1.if((0,a._)`${E1} !== true`,()=>u1.assign(E1,g1===!0?!0:(0,a._)`${E1} > ${g1} ? ${E1} : ${g1}`)),mergeValues:(u1,g1)=>u1===!0?!0:Math.max(u1,g1),resultToName:(u1,g1)=>u1.var("items",g1)})};function y0(u1,g1){if(g1===!0)return u1.var("props",!0);const E1=u1.var("props",(0,a._)`{}`);return g1!==void 0&&A0(u1,E1,g1),E1}o.evaluatedPropsToName=y0;function A0(u1,g1,E1){Object.keys(E1).forEach(B1=>u1.assign((0,a._)`${g1}${(0,a.getProperty)(B1)}`,!0))}o.setEvaluated=A0;const $0={};function O0(u1,g1){return u1.scopeValue("func",{ref:g1,code:$0[g1.code]||($0[g1.code]=new c._Code(g1.code))})}o.useFunc=O0;var L0;(function(u1){u1[u1.Num=0]="Num",u1[u1.Str=1]="Str"})(L0=o.Type||(o.Type={}));function V0(u1,g1,E1){if(u1 instanceof a.Name){const B1=g1===L0.Num;return E1?B1?(0,a._)`"[" + ${u1} + "]"`:(0,a._)`"['" + ${u1} + "']"`:B1?(0,a._)`"/" + ${u1}`:(0,a._)`"/" + ${u1}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return E1?(0,a.getProperty)(u1).toString():"/"+Iu(u1)}o.getErrorPath=V0;function F0(u1,g1,E1=u1.opts.strictSchema){if(E1){if(g1=`strict mode: ${g1}`,E1===!0)throw new Error(g1);u1.self.logger.warn(g1)}}o.checkStrictMode=F0})(util);var names$1={};Object.defineProperty(names$1,"__esModule",{value:!0});const codegen_1$t=codegen,names={data:new codegen_1$t.Name("data"),valCxt:new codegen_1$t.Name("valCxt"),instancePath:new codegen_1$t.Name("instancePath"),parentData:new codegen_1$t.Name("parentData"),parentDataProperty:new codegen_1$t.Name("parentDataProperty"),rootData:new codegen_1$t.Name("rootData"),dynamicAnchors:new codegen_1$t.Name("dynamicAnchors"),vErrors:new codegen_1$t.Name("vErrors"),errors:new codegen_1$t.Name("errors"),this:new codegen_1$t.Name("this"),self:new codegen_1$t.Name("self"),scope:new codegen_1$t.Name("scope"),json:new codegen_1$t.Name("json"),jsonPos:new codegen_1$t.Name("jsonPos"),jsonLen:new codegen_1$t.Name("jsonLen"),jsonPart:new codegen_1$t.Name("jsonPart")};names$1.default=names;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.extendErrors=o.resetErrorsCount=o.reportExtraError=o.reportError=o.keyword$DataError=o.keywordError=void 0;const a=codegen,c=util,d=names$1;o.keywordError={message:({keyword:A0})=>(0,a.str)`must pass "${A0}" keyword validation`},o.keyword$DataError={message:({keyword:A0,schemaType:$0})=>$0?(0,a.str)`"${A0}" keyword must be ${$0} ($data)`:(0,a.str)`"${A0}" keyword is invalid ($data)`};function tt(A0,$0=o.keywordError,O0,L0){const{it:V0}=A0,{gen:F0,compositeRule:u1,allErrors:g1}=V0,E1=Iu(A0,$0,O0);L0??(u1||g1)?gu(F0,E1):Su(V0,(0,a._)`[${E1}]`)}o.reportError=tt;function nt(A0,$0=o.keywordError,O0){const{it:L0}=A0,{gen:V0,compositeRule:F0,allErrors:u1}=L0,g1=Iu(A0,$0,O0);gu(V0,g1),F0||u1||Su(L0,d.default.vErrors)}o.reportExtraError=nt;function $a(A0,$0){A0.assign(d.default.errors,$0),A0.if((0,a._)`${d.default.vErrors} !== null`,()=>A0.if($0,()=>A0.assign((0,a._)`${d.default.vErrors}.length`,$0),()=>A0.assign(d.default.vErrors,null)))}o.resetErrorsCount=$a;function Ws({gen:A0,keyword:$0,schemaValue:O0,data:L0,errsCount:V0,it:F0}){if(V0===void 0)throw new Error("ajv implementation error");const u1=A0.name("err");A0.forRange("i",V0,d.default.errors,g1=>{A0.const(u1,(0,a._)`${d.default.vErrors}[${g1}]`),A0.if((0,a._)`${u1}.instancePath === undefined`,()=>A0.assign((0,a._)`${u1}.instancePath`,(0,a.strConcat)(d.default.instancePath,F0.errorPath))),A0.assign((0,a._)`${u1}.schemaPath`,(0,a.str)`${F0.errSchemaPath}/${$0}`),F0.opts.verbose&&(A0.assign((0,a._)`${u1}.schema`,O0),A0.assign((0,a._)`${u1}.data`,L0))})}o.extendErrors=Ws;function gu(A0,$0){const O0=A0.const("err",$0);A0.if((0,a._)`${d.default.vErrors} === null`,()=>A0.assign(d.default.vErrors,(0,a._)`[${O0}]`),(0,a._)`${d.default.vErrors}.push(${O0})`),A0.code((0,a._)`${d.default.errors}++`)}function Su(A0,$0){const{gen:O0,validateName:L0,schemaEnv:V0}=A0;V0.$async?O0.throw((0,a._)`new ${A0.ValidationError}(${$0})`):(O0.assign((0,a._)`${L0}.errors`,$0),O0.return(!1))}const $u={keyword:new a.Name("keyword"),schemaPath:new a.Name("schemaPath"),params:new a.Name("params"),propertyName:new a.Name("propertyName"),message:new a.Name("message"),schema:new a.Name("schema"),parentSchema:new a.Name("parentSchema")};function Iu(A0,$0,O0){const{createErrors:L0}=A0.it;return L0===!1?(0,a._)`{}`:Xu(A0,$0,O0)}function Xu(A0,$0,O0={}){const{gen:L0,it:V0}=A0,F0=[r0(V0,O0),p0(A0,O0)];return y0(A0,$0,F0),L0.object(...F0)}function r0({errorPath:A0},{instancePath:$0}){const O0=$0?(0,a.str)`${A0}${(0,c.getErrorPath)($0,c.Type.Str)}`:A0;return[d.default.instancePath,(0,a.strConcat)(d.default.instancePath,O0)]}function p0({keyword:A0,it:{errSchemaPath:$0}},{schemaPath:O0,parentSchema:L0}){let V0=L0?$0:(0,a.str)`${$0}/${A0}`;return O0&&(V0=(0,a.str)`${V0}${(0,c.getErrorPath)(O0,c.Type.Str)}`),[$u.schemaPath,V0]}function y0(A0,{params:$0,message:O0},L0){const{keyword:V0,data:F0,schemaValue:u1,it:g1}=A0,{opts:E1,propertyName:B1,topSchemaRef:lv,schemaPath:j1}=g1;L0.push([$u.keyword,V0],[$u.params,typeof $0=="function"?$0(A0):$0||(0,a._)`{}`]),E1.messages&&L0.push([$u.message,typeof O0=="function"?O0(A0):O0]),E1.verbose&&L0.push([$u.schema,u1],[$u.parentSchema,(0,a._)`${lv}${j1}`],[d.default.data,F0]),B1&&L0.push([$u.propertyName,B1])}})(errors$2);Object.defineProperty(boolSchema,"__esModule",{value:!0});boolSchema.boolOrEmptySchema=boolSchema.topBoolOrEmptySchema=void 0;const errors_1$3=errors$2,codegen_1$s=codegen,names_1$6=names$1,boolError={message:"boolean schema is false"};function topBoolOrEmptySchema(o){const{gen:a,schema:c,validateName:d}=o;c===!1?falseSchemaError(o,!1):typeof c=="object"&&c.$async===!0?a.return(names_1$6.default.data):(a.assign((0,codegen_1$s._)`${d}.errors`,null),a.return(!0))}boolSchema.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(o,a){const{gen:c,schema:d}=o;d===!1?(c.var(a,!1),falseSchemaError(o)):c.var(a,!0)}boolSchema.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(o,a){const{gen:c,data:d}=o,tt={gen:c,keyword:"false schema",data:d,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:o};(0,errors_1$3.reportError)(tt,boolError,void 0,a)}var dataType={},rules$1={};Object.defineProperty(rules$1,"__esModule",{value:!0});rules$1.getRules=rules$1.isJSONType=void 0;const _jsonTypes=["string","number","integer","boolean","null","object","array"],jsonTypes=new Set(_jsonTypes);function isJSONType(o){return typeof o=="string"&&jsonTypes.has(o)}rules$1.isJSONType=isJSONType;function getRules(){const o={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...o,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},o.number,o.string,o.array,o.object],post:{rules:[]},all:{},keywords:{}}}rules$1.getRules=getRules;var applicability={};Object.defineProperty(applicability,"__esModule",{value:!0});applicability.shouldUseRule=applicability.shouldUseGroup=applicability.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema:o,self:a},c){const d=a.RULES.types[c];return d&&d!==!0&&shouldUseGroup(o,d)}applicability.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(o,a){return a.rules.some(c=>shouldUseRule(o,c))}applicability.shouldUseGroup=shouldUseGroup;function shouldUseRule(o,a){var c;return o[a.keyword]!==void 0||((c=a.definition.implements)===null||c===void 0?void 0:c.some(d=>o[d]!==void 0))}applicability.shouldUseRule=shouldUseRule;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.reportTypeError=o.checkDataTypes=o.checkDataType=o.coerceAndCheckDataType=o.getJSONTypes=o.getSchemaTypes=o.DataType=void 0;const a=rules$1,c=applicability,d=errors$2,tt=codegen,nt=util;var $a;(function(L0){L0[L0.Correct=0]="Correct",L0[L0.Wrong=1]="Wrong"})($a=o.DataType||(o.DataType={}));function Ws(L0){const V0=gu(L0.type);if(V0.includes("null")){if(L0.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!V0.length&&L0.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');L0.nullable===!0&&V0.push("null")}return V0}o.getSchemaTypes=Ws;function gu(L0){const V0=Array.isArray(L0)?L0:L0?[L0]:[];if(V0.every(a.isJSONType))return V0;throw new Error("type must be JSONType or JSONType[]: "+V0.join(","))}o.getJSONTypes=gu;function Su(L0,V0){const{gen:F0,data:u1,opts:g1}=L0,E1=Iu(V0,g1.coerceTypes),B1=V0.length>0&&!(E1.length===0&&V0.length===1&&(0,c.schemaHasRulesForType)(L0,V0[0]));if(B1){const lv=y0(V0,u1,g1.strictNumbers,$a.Wrong);F0.if(lv,()=>{E1.length?Xu(L0,V0,E1):$0(L0)})}return B1}o.coerceAndCheckDataType=Su;const $u=new Set(["string","number","integer","boolean","null"]);function Iu(L0,V0){return V0?L0.filter(F0=>$u.has(F0)||V0==="array"&&F0==="array"):[]}function Xu(L0,V0,F0){const{gen:u1,data:g1,opts:E1}=L0,B1=u1.let("dataType",(0,tt._)`typeof ${g1}`),lv=u1.let("coerced",(0,tt._)`undefined`);E1.coerceTypes==="array"&&u1.if((0,tt._)`${B1} == 'object' && Array.isArray(${g1}) && ${g1}.length == 1`,()=>u1.assign(g1,(0,tt._)`${g1}[0]`).assign(B1,(0,tt._)`typeof ${g1}`).if(y0(V0,g1,E1.strictNumbers),()=>u1.assign(lv,g1))),u1.if((0,tt._)`${lv} !== undefined`);for(const r1 of F0)($u.has(r1)||r1==="array"&&E1.coerceTypes==="array")&&j1(r1);u1.else(),$0(L0),u1.endIf(),u1.if((0,tt._)`${lv} !== undefined`,()=>{u1.assign(g1,lv),r0(L0,lv)});function j1(r1){switch(r1){case"string":u1.elseIf((0,tt._)`${B1} == "number" || ${B1} == "boolean"`).assign(lv,(0,tt._)`"" + ${g1}`).elseIf((0,tt._)`${g1} === null`).assign(lv,(0,tt._)`""`);return;case"number":u1.elseIf((0,tt._)`${B1} == "boolean" || ${g1} === null || (${B1} == "string" && ${g1} && ${g1} == +${g1})`).assign(lv,(0,tt._)`+${g1}`);return;case"integer":u1.elseIf((0,tt._)`${B1} === "boolean" || ${g1} === null || (${B1} === "string" && ${g1} && ${g1} == +${g1} && !(${g1} % 1))`).assign(lv,(0,tt._)`+${g1}`);return;case"boolean":u1.elseIf((0,tt._)`${g1} === "false" || ${g1} === 0 || ${g1} === null`).assign(lv,!1).elseIf((0,tt._)`${g1} === "true" || ${g1} === 1`).assign(lv,!0);return;case"null":u1.elseIf((0,tt._)`${g1} === "" || ${g1} === 0 || ${g1} === false`),u1.assign(lv,null);return;case"array":u1.elseIf((0,tt._)`${B1} === "string" || ${B1} === "number" - || ${B1} === "boolean" || ${g1} === null`).assign(lv,(0,tt._)`[${g1}]`)}}}function i0({gen:L0,parentData:q0,parentDataProperty:F0},u1){L0.if((0,tt._)`${q0} !== undefined`,()=>L0.assign((0,tt._)`${q0}[${F0}]`,u1))}function p0(L0,q0,F0,u1=$a.Correct){const g1=u1===$a.Correct?tt.operators.EQ:tt.operators.NEQ;let E1;switch(L0){case"null":return(0,tt._)`${q0} ${g1} null`;case"array":E1=(0,tt._)`Array.isArray(${q0})`;break;case"object":E1=(0,tt._)`${q0} && typeof ${q0} == "object" && !Array.isArray(${q0})`;break;case"integer":E1=B1((0,tt._)`!(${q0} % 1) && !isNaN(${q0})`);break;case"number":E1=B1();break;default:return(0,tt._)`typeof ${q0} ${g1} ${L0}`}return u1===$a.Correct?E1:(0,tt.not)(E1);function B1(lv=tt.nil){return(0,tt.and)((0,tt._)`typeof ${q0} == "number"`,lv,F0?(0,tt._)`isFinite(${q0})`:tt.nil)}}o.checkDataType=p0;function w0(L0,q0,F0,u1){if(L0.length===1)return p0(L0[0],q0,F0,u1);let g1;const E1=(0,nt.toHash)(L0);if(E1.array&&E1.object){const B1=(0,tt._)`typeof ${q0} != "object"`;g1=E1.null?B1:(0,tt._)`!${q0} || ${B1}`,delete E1.null,delete E1.array,delete E1.object}else g1=tt.nil;E1.number&&delete E1.integer;for(const B1 in E1)g1=(0,tt.and)(g1,p0(B1,q0,F0,u1));return g1}o.checkDataTypes=w0;const A0={message:({schema:L0})=>`must be ${L0}`,params:({schema:L0,schemaValue:q0})=>typeof L0=="string"?(0,tt._)`{type: ${L0}}`:(0,tt._)`{type: ${q0}}`};function $0(L0){const q0=O0(L0);(0,d.reportError)(q0,A0)}o.reportTypeError=$0;function O0(L0){const{gen:q0,data:F0,schema:u1}=L0,g1=(0,nt.schemaRefOrVal)(L0,u1,"type");return{gen:q0,keyword:"type",data:F0,schema:u1.type,schemaCode:g1,schemaValue:g1,parentSchema:u1,params:{},it:L0}}})(dataType);var defaults={};Object.defineProperty(defaults,"__esModule",{value:!0});defaults.assignDefaults=void 0;const codegen_1$r=codegen,util_1$p=util;function assignDefaults(o,a){const{properties:c,items:d}=o.schema;if(a==="object"&&c)for(const tt in c)assignDefault(o,tt,c[tt].default);else a==="array"&&Array.isArray(d)&&d.forEach((tt,nt)=>assignDefault(o,nt,tt.default))}defaults.assignDefaults=assignDefaults;function assignDefault(o,a,c){const{gen:d,compositeRule:tt,data:nt,opts:$a}=o;if(c===void 0)return;const Ys=(0,codegen_1$r._)`${nt}${(0,codegen_1$r.getProperty)(a)}`;if(tt){(0,util_1$p.checkStrictMode)(o,`default is ignored for: ${Ys}`);return}let gu=(0,codegen_1$r._)`${Ys} === undefined`;$a.useDefaults==="empty"&&(gu=(0,codegen_1$r._)`${gu} || ${Ys} === null || ${Ys} === ""`),d.if(gu,(0,codegen_1$r._)`${Ys} = ${(0,codegen_1$r.stringify)(c)}`)}var keyword={},code={};Object.defineProperty(code,"__esModule",{value:!0});code.validateUnion=code.validateArray=code.usePattern=code.callValidateCode=code.schemaProperties=code.allSchemaProperties=code.noPropertyInData=code.propertyInData=code.isOwnProperty=code.hasPropFunc=code.reportMissingProp=code.checkMissingProp=code.checkReportMissingProp=void 0;const codegen_1$q=codegen,util_1$o=util,names_1$5=names$1,util_2$1=util;function checkReportMissingProp(o,a){const{gen:c,data:d,it:tt}=o;c.if(noPropertyInData(c,d,a,tt.opts.ownProperties),()=>{o.setParams({missingProperty:(0,codegen_1$q._)`${a}`},!0),o.error()})}code.checkReportMissingProp=checkReportMissingProp;function checkMissingProp({gen:o,data:a,it:{opts:c}},d,tt){return(0,codegen_1$q.or)(...d.map(nt=>(0,codegen_1$q.and)(noPropertyInData(o,a,nt,c.ownProperties),(0,codegen_1$q._)`${tt} = ${nt}`)))}code.checkMissingProp=checkMissingProp;function reportMissingProp(o,a){o.setParams({missingProperty:a},!0),o.error()}code.reportMissingProp=reportMissingProp;function hasPropFunc(o){return o.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,codegen_1$q._)`Object.prototype.hasOwnProperty`})}code.hasPropFunc=hasPropFunc;function isOwnProperty(o,a,c){return(0,codegen_1$q._)`${hasPropFunc(o)}.call(${a}, ${c})`}code.isOwnProperty=isOwnProperty;function propertyInData(o,a,c,d){const tt=(0,codegen_1$q._)`${a}${(0,codegen_1$q.getProperty)(c)} !== undefined`;return d?(0,codegen_1$q._)`${tt} && ${isOwnProperty(o,a,c)}`:tt}code.propertyInData=propertyInData;function noPropertyInData(o,a,c,d){const tt=(0,codegen_1$q._)`${a}${(0,codegen_1$q.getProperty)(c)} === undefined`;return d?(0,codegen_1$q.or)(tt,(0,codegen_1$q.not)(isOwnProperty(o,a,c))):tt}code.noPropertyInData=noPropertyInData;function allSchemaProperties(o){return o?Object.keys(o).filter(a=>a!=="__proto__"):[]}code.allSchemaProperties=allSchemaProperties;function schemaProperties(o,a){return allSchemaProperties(a).filter(c=>!(0,util_1$o.alwaysValidSchema)(o,a[c]))}code.schemaProperties=schemaProperties;function callValidateCode({schemaCode:o,data:a,it:{gen:c,topSchemaRef:d,schemaPath:tt,errorPath:nt},it:$a},Ys,gu,xu){const $u=xu?(0,codegen_1$q._)`${o}, ${a}, ${d}${tt}`:a,Iu=[[names_1$5.default.instancePath,(0,codegen_1$q.strConcat)(names_1$5.default.instancePath,nt)],[names_1$5.default.parentData,$a.parentData],[names_1$5.default.parentDataProperty,$a.parentDataProperty],[names_1$5.default.rootData,names_1$5.default.rootData]];$a.opts.dynamicRef&&Iu.push([names_1$5.default.dynamicAnchors,names_1$5.default.dynamicAnchors]);const Xu=(0,codegen_1$q._)`${$u}, ${c.object(...Iu)}`;return gu!==codegen_1$q.nil?(0,codegen_1$q._)`${Ys}.call(${gu}, ${Xu})`:(0,codegen_1$q._)`${Ys}(${Xu})`}code.callValidateCode=callValidateCode;const newRegExp=(0,codegen_1$q._)`new RegExp`;function usePattern({gen:o,it:{opts:a}},c){const d=a.unicodeRegExp?"u":"",{regExp:tt}=a.code,nt=tt(c,d);return o.scopeValue("pattern",{key:nt.toString(),ref:nt,code:(0,codegen_1$q._)`${tt.code==="new RegExp"?newRegExp:(0,util_2$1.useFunc)(o,tt)}(${c}, ${d})`})}code.usePattern=usePattern;function validateArray$1(o){const{gen:a,data:c,keyword:d,it:tt}=o,nt=a.name("valid");if(tt.allErrors){const Ys=a.let("valid",!0);return $a(()=>a.assign(Ys,!1)),Ys}return a.var(nt,!0),$a(()=>a.break()),nt;function $a(Ys){const gu=a.const("len",(0,codegen_1$q._)`${c}.length`);a.forRange("i",0,gu,xu=>{o.subschema({keyword:d,dataProp:xu,dataPropType:util_1$o.Type.Num},nt),a.if((0,codegen_1$q.not)(nt),Ys)})}}code.validateArray=validateArray$1;function validateUnion(o){const{gen:a,schema:c,keyword:d,it:tt}=o;if(!Array.isArray(c))throw new Error("ajv implementation error");if(c.some(gu=>(0,util_1$o.alwaysValidSchema)(tt,gu))&&!tt.opts.unevaluated)return;const $a=a.let("valid",!1),Ys=a.name("_valid");a.block(()=>c.forEach((gu,xu)=>{const $u=o.subschema({keyword:d,schemaProp:xu,compositeRule:!0},Ys);a.assign($a,(0,codegen_1$q._)`${$a} || ${Ys}`),o.mergeValidEvaluated($u,Ys)||a.if((0,codegen_1$q.not)($a))})),o.result($a,()=>o.reset(),()=>o.error(!0))}code.validateUnion=validateUnion;Object.defineProperty(keyword,"__esModule",{value:!0});keyword.validateKeywordUsage=keyword.validSchemaType=keyword.funcKeywordCode=keyword.macroKeywordCode=void 0;const codegen_1$p=codegen,names_1$4=names$1,code_1$9=code,errors_1$2=errors$2;function macroKeywordCode(o,a){const{gen:c,keyword:d,schema:tt,parentSchema:nt,it:$a}=o,Ys=a.macro.call($a.self,tt,nt,$a),gu=useKeyword(c,d,Ys);$a.opts.validateSchema!==!1&&$a.self.validateSchema(Ys,!0);const xu=c.name("valid");o.subschema({schema:Ys,schemaPath:codegen_1$p.nil,errSchemaPath:`${$a.errSchemaPath}/${d}`,topSchemaRef:gu,compositeRule:!0},xu),o.pass(xu,()=>o.error(!0))}keyword.macroKeywordCode=macroKeywordCode;function funcKeywordCode(o,a){var c;const{gen:d,keyword:tt,schema:nt,parentSchema:$a,$data:Ys,it:gu}=o;checkAsyncKeyword(gu,a);const xu=!Ys&&a.compile?a.compile.call(gu.self,nt,$a,gu):a.validate,$u=useKeyword(d,tt,xu),Iu=d.let("valid");o.block$data(Iu,Xu),o.ok((c=a.valid)!==null&&c!==void 0?c:Iu);function Xu(){if(a.errors===!1)w0(),a.modifying&&modifyData(o),A0(()=>o.error());else{const $0=a.async?i0():p0();a.modifying&&modifyData(o),A0(()=>addErrs(o,$0))}}function i0(){const $0=d.let("ruleErrs",null);return d.try(()=>w0((0,codegen_1$p._)`await `),O0=>d.assign(Iu,!1).if((0,codegen_1$p._)`${O0} instanceof ${gu.ValidationError}`,()=>d.assign($0,(0,codegen_1$p._)`${O0}.errors`),()=>d.throw(O0))),$0}function p0(){const $0=(0,codegen_1$p._)`${$u}.errors`;return d.assign($0,null),w0(codegen_1$p.nil),$0}function w0($0=a.async?(0,codegen_1$p._)`await `:codegen_1$p.nil){const O0=gu.opts.passContext?names_1$4.default.this:names_1$4.default.self,L0=!("compile"in a&&!Ys||a.schema===!1);d.assign(Iu,(0,codegen_1$p._)`${$0}${(0,code_1$9.callValidateCode)(o,$u,O0,L0)}`,a.modifying)}function A0($0){var O0;d.if((0,codegen_1$p.not)((O0=a.valid)!==null&&O0!==void 0?O0:Iu),$0)}}keyword.funcKeywordCode=funcKeywordCode;function modifyData(o){const{gen:a,data:c,it:d}=o;a.if(d.parentData,()=>a.assign(c,(0,codegen_1$p._)`${d.parentData}[${d.parentDataProperty}]`))}function addErrs(o,a){const{gen:c}=o;c.if((0,codegen_1$p._)`Array.isArray(${a})`,()=>{c.assign(names_1$4.default.vErrors,(0,codegen_1$p._)`${names_1$4.default.vErrors} === null ? ${a} : ${names_1$4.default.vErrors}.concat(${a})`).assign(names_1$4.default.errors,(0,codegen_1$p._)`${names_1$4.default.vErrors}.length`),(0,errors_1$2.extendErrors)(o)},()=>o.error())}function checkAsyncKeyword({schemaEnv:o},a){if(a.async&&!o.$async)throw new Error("async keyword in sync schema")}function useKeyword(o,a,c){if(c===void 0)throw new Error(`keyword "${a}" failed to compile`);return o.scopeValue("keyword",typeof c=="function"?{ref:c}:{ref:c,code:(0,codegen_1$p.stringify)(c)})}function validSchemaType(o,a,c=!1){return!a.length||a.some(d=>d==="array"?Array.isArray(o):d==="object"?o&&typeof o=="object"&&!Array.isArray(o):typeof o==d||c&&typeof o>"u")}keyword.validSchemaType=validSchemaType;function validateKeywordUsage({schema:o,opts:a,self:c,errSchemaPath:d},tt,nt){if(Array.isArray(tt.keyword)?!tt.keyword.includes(nt):tt.keyword!==nt)throw new Error("ajv implementation error");const $a=tt.dependencies;if($a!=null&&$a.some(Ys=>!Object.prototype.hasOwnProperty.call(o,Ys)))throw new Error(`parent schema must have dependencies of ${nt}: ${$a.join(",")}`);if(tt.validateSchema&&!tt.validateSchema(o[nt])){const gu=`keyword "${nt}" value is invalid at path "${d}": `+c.errorsText(tt.validateSchema.errors);if(a.validateSchema==="log")c.logger.error(gu);else throw new Error(gu)}}keyword.validateKeywordUsage=validateKeywordUsage;var subschema={};Object.defineProperty(subschema,"__esModule",{value:!0});subschema.extendSubschemaMode=subschema.extendSubschemaData=subschema.getSubschema=void 0;const codegen_1$o=codegen,util_1$n=util;function getSubschema(o,{keyword:a,schemaProp:c,schema:d,schemaPath:tt,errSchemaPath:nt,topSchemaRef:$a}){if(a!==void 0&&d!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(a!==void 0){const Ys=o.schema[a];return c===void 0?{schema:Ys,schemaPath:(0,codegen_1$o._)`${o.schemaPath}${(0,codegen_1$o.getProperty)(a)}`,errSchemaPath:`${o.errSchemaPath}/${a}`}:{schema:Ys[c],schemaPath:(0,codegen_1$o._)`${o.schemaPath}${(0,codegen_1$o.getProperty)(a)}${(0,codegen_1$o.getProperty)(c)}`,errSchemaPath:`${o.errSchemaPath}/${a}/${(0,util_1$n.escapeFragment)(c)}`}}if(d!==void 0){if(tt===void 0||nt===void 0||$a===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:d,schemaPath:tt,topSchemaRef:$a,errSchemaPath:nt}}throw new Error('either "keyword" or "schema" must be passed')}subschema.getSubschema=getSubschema;function extendSubschemaData(o,a,{dataProp:c,dataPropType:d,data:tt,dataTypes:nt,propertyName:$a}){if(tt!==void 0&&c!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:Ys}=a;if(c!==void 0){const{errorPath:xu,dataPathArr:$u,opts:Iu}=a,Xu=Ys.let("data",(0,codegen_1$o._)`${a.data}${(0,codegen_1$o.getProperty)(c)}`,!0);gu(Xu),o.errorPath=(0,codegen_1$o.str)`${xu}${(0,util_1$n.getErrorPath)(c,d,Iu.jsPropertySyntax)}`,o.parentDataProperty=(0,codegen_1$o._)`${c}`,o.dataPathArr=[...$u,o.parentDataProperty]}if(tt!==void 0){const xu=tt instanceof codegen_1$o.Name?tt:Ys.let("data",tt,!0);gu(xu),$a!==void 0&&(o.propertyName=$a)}nt&&(o.dataTypes=nt);function gu(xu){o.data=xu,o.dataLevel=a.dataLevel+1,o.dataTypes=[],a.definedProperties=new Set,o.parentData=a.data,o.dataNames=[...a.dataNames,xu]}}subschema.extendSubschemaData=extendSubschemaData;function extendSubschemaMode(o,{jtdDiscriminator:a,jtdMetadata:c,compositeRule:d,createErrors:tt,allErrors:nt}){d!==void 0&&(o.compositeRule=d),tt!==void 0&&(o.createErrors=tt),nt!==void 0&&(o.allErrors=nt),o.jtdDiscriminator=a,o.jtdMetadata=c}subschema.extendSubschemaMode=extendSubschemaMode;var resolve$2={},fastDeepEqual=function o(a,c){if(a===c)return!0;if(a&&c&&typeof a=="object"&&typeof c=="object"){if(a.constructor!==c.constructor)return!1;var d,tt,nt;if(Array.isArray(a)){if(d=a.length,d!=c.length)return!1;for(tt=d;tt--!==0;)if(!o(a[tt],c[tt]))return!1;return!0}if(a.constructor===RegExp)return a.source===c.source&&a.flags===c.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===c.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===c.toString();if(nt=Object.keys(a),d=nt.length,d!==Object.keys(c).length)return!1;for(tt=d;tt--!==0;)if(!Object.prototype.hasOwnProperty.call(c,nt[tt]))return!1;for(tt=d;tt--!==0;){var $a=nt[tt];if(!o(a[$a],c[$a]))return!1}return!0}return a!==a&&c!==c},jsonSchemaTraverse={exports:{}},traverse$1=jsonSchemaTraverse.exports=function(o,a,c){typeof a=="function"&&(c=a,a={}),c=a.cb||c;var d=typeof c=="function"?c:c.pre||function(){},tt=c.post||function(){};_traverse(a,d,tt,o,"",o)};traverse$1.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};traverse$1.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};traverse$1.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};traverse$1.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function _traverse(o,a,c,d,tt,nt,$a,Ys,gu,xu){if(d&&typeof d=="object"&&!Array.isArray(d)){a(d,tt,nt,$a,Ys,gu,xu);for(var $u in d){var Iu=d[$u];if(Array.isArray(Iu)){if($u in traverse$1.arrayKeywords)for(var Xu=0;Xua+=countKeys(d)),a===1/0))return 1/0}return a}function getFullPath(o,a="",c){c!==!1&&(a=normalizeId(a));const d=o.parse(a);return _getFullPath(o,d)}resolve$2.getFullPath=getFullPath;function _getFullPath(o,a){return o.serialize(a).split("#")[0]+"#"}resolve$2._getFullPath=_getFullPath;const TRAILING_SLASH_HASH=/#\/?$/;function normalizeId(o){return o?o.replace(TRAILING_SLASH_HASH,""):""}resolve$2.normalizeId=normalizeId;function resolveUrl(o,a,c){return c=normalizeId(c),o.resolve(a,c)}resolve$2.resolveUrl=resolveUrl;const ANCHOR=/^[a-z_][-a-z0-9._]*$/i;function getSchemaRefs(o,a){if(typeof o=="boolean")return{};const{schemaId:c,uriResolver:d}=this.opts,tt=normalizeId(o[c]||a),nt={"":tt},$a=getFullPath(d,tt,!1),Ys={},gu=new Set;return traverse(o,{allKeys:!0},(Iu,Xu,i0,p0)=>{if(p0===void 0)return;const w0=$a+Xu;let A0=nt[p0];typeof Iu[c]=="string"&&(A0=$0.call(this,Iu[c])),O0.call(this,Iu.$anchor),O0.call(this,Iu.$dynamicAnchor),nt[Xu]=A0;function $0(L0){const q0=this.opts.uriResolver.resolve;if(L0=normalizeId(A0?q0(A0,L0):L0),gu.has(L0))throw $u(L0);gu.add(L0);let F0=this.refs[L0];return typeof F0=="string"&&(F0=this.refs[F0]),typeof F0=="object"?xu(Iu,F0.schema,L0):L0!==normalizeId(w0)&&(L0[0]==="#"?(xu(Iu,Ys[L0],L0),Ys[L0]=Iu):this.refs[L0]=w0),L0}function O0(L0){if(typeof L0=="string"){if(!ANCHOR.test(L0))throw new Error(`invalid anchor "${L0}"`);$0.call(this,`#${L0}`)}}}),Ys;function xu(Iu,Xu,i0){if(Xu!==void 0&&!equal$2(Iu,Xu))throw $u(i0)}function $u(Iu){return new Error(`reference "${Iu}" resolves to more than one schema`)}}resolve$2.getSchemaRefs=getSchemaRefs;Object.defineProperty(validate$1,"__esModule",{value:!0});validate$1.getData=validate$1.KeywordCxt=validate$1.validateFunctionCode=void 0;const boolSchema_1=boolSchema,dataType_1$1=dataType,applicability_1=applicability,dataType_2=dataType,defaults_1=defaults,keyword_1=keyword,subschema_1=subschema,codegen_1$n=codegen,names_1$3=names$1,resolve_1$2=resolve$2,util_1$l=util,errors_1$1=errors$2;function validateFunctionCode(o){if(isSchemaObj(o)&&(checkKeywords(o),schemaCxtHasRules(o))){topSchemaObjCode(o);return}validateFunction(o,()=>(0,boolSchema_1.topBoolOrEmptySchema)(o))}validate$1.validateFunctionCode=validateFunctionCode;function validateFunction({gen:o,validateName:a,schema:c,schemaEnv:d,opts:tt},nt){tt.code.es5?o.func(a,(0,codegen_1$n._)`${names_1$3.default.data}, ${names_1$3.default.valCxt}`,d.$async,()=>{o.code((0,codegen_1$n._)`"use strict"; ${funcSourceUrl(c,tt)}`),destructureValCxtES5(o,tt),o.code(nt)}):o.func(a,(0,codegen_1$n._)`${names_1$3.default.data}, ${destructureValCxt(tt)}`,d.$async,()=>o.code(funcSourceUrl(c,tt)).code(nt))}function destructureValCxt(o){return(0,codegen_1$n._)`{${names_1$3.default.instancePath}="", ${names_1$3.default.parentData}, ${names_1$3.default.parentDataProperty}, ${names_1$3.default.rootData}=${names_1$3.default.data}${o.dynamicRef?(0,codegen_1$n._)`, ${names_1$3.default.dynamicAnchors}={}`:codegen_1$n.nil}}={}`}function destructureValCxtES5(o,a){o.if(names_1$3.default.valCxt,()=>{o.var(names_1$3.default.instancePath,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.instancePath}`),o.var(names_1$3.default.parentData,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.parentData}`),o.var(names_1$3.default.parentDataProperty,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.parentDataProperty}`),o.var(names_1$3.default.rootData,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.rootData}`),a.dynamicRef&&o.var(names_1$3.default.dynamicAnchors,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.dynamicAnchors}`)},()=>{o.var(names_1$3.default.instancePath,(0,codegen_1$n._)`""`),o.var(names_1$3.default.parentData,(0,codegen_1$n._)`undefined`),o.var(names_1$3.default.parentDataProperty,(0,codegen_1$n._)`undefined`),o.var(names_1$3.default.rootData,names_1$3.default.data),a.dynamicRef&&o.var(names_1$3.default.dynamicAnchors,(0,codegen_1$n._)`{}`)})}function topSchemaObjCode(o){const{schema:a,opts:c,gen:d}=o;validateFunction(o,()=>{c.$comment&&a.$comment&&commentKeyword(o),checkNoDefault(o),d.let(names_1$3.default.vErrors,null),d.let(names_1$3.default.errors,0),c.unevaluated&&resetEvaluated(o),typeAndKeywords(o),returnResults(o)})}function resetEvaluated(o){const{gen:a,validateName:c}=o;o.evaluated=a.const("evaluated",(0,codegen_1$n._)`${c}.evaluated`),a.if((0,codegen_1$n._)`${o.evaluated}.dynamicProps`,()=>a.assign((0,codegen_1$n._)`${o.evaluated}.props`,(0,codegen_1$n._)`undefined`)),a.if((0,codegen_1$n._)`${o.evaluated}.dynamicItems`,()=>a.assign((0,codegen_1$n._)`${o.evaluated}.items`,(0,codegen_1$n._)`undefined`))}function funcSourceUrl(o,a){const c=typeof o=="object"&&o[a.schemaId];return c&&(a.code.source||a.code.process)?(0,codegen_1$n._)`/*# sourceURL=${c} */`:codegen_1$n.nil}function subschemaCode(o,a){if(isSchemaObj(o)&&(checkKeywords(o),schemaCxtHasRules(o))){subSchemaObjCode(o,a);return}(0,boolSchema_1.boolOrEmptySchema)(o,a)}function schemaCxtHasRules({schema:o,self:a}){if(typeof o=="boolean")return!o;for(const c in o)if(a.RULES.all[c])return!0;return!1}function isSchemaObj(o){return typeof o.schema!="boolean"}function subSchemaObjCode(o,a){const{schema:c,gen:d,opts:tt}=o;tt.$comment&&c.$comment&&commentKeyword(o),updateContext(o),checkAsyncSchema(o);const nt=d.const("_errs",names_1$3.default.errors);typeAndKeywords(o,nt),d.var(a,(0,codegen_1$n._)`${nt} === ${names_1$3.default.errors}`)}function checkKeywords(o){(0,util_1$l.checkUnknownRules)(o),checkRefsAndKeywords(o)}function typeAndKeywords(o,a){if(o.opts.jtd)return schemaKeywords(o,[],!1,a);const c=(0,dataType_1$1.getSchemaTypes)(o.schema),d=(0,dataType_1$1.coerceAndCheckDataType)(o,c);schemaKeywords(o,c,!d,a)}function checkRefsAndKeywords(o){const{schema:a,errSchemaPath:c,opts:d,self:tt}=o;a.$ref&&d.ignoreKeywordsWithRef&&(0,util_1$l.schemaHasRulesButRef)(a,tt.RULES)&&tt.logger.warn(`$ref: keywords ignored in schema at path "${c}"`)}function checkNoDefault(o){const{schema:a,opts:c}=o;a.default!==void 0&&c.useDefaults&&c.strictSchema&&(0,util_1$l.checkStrictMode)(o,"default is ignored in the schema root")}function updateContext(o){const a=o.schema[o.opts.schemaId];a&&(o.baseId=(0,resolve_1$2.resolveUrl)(o.opts.uriResolver,o.baseId,a))}function checkAsyncSchema(o){if(o.schema.$async&&!o.schemaEnv.$async)throw new Error("async schema in sync schema")}function commentKeyword({gen:o,schemaEnv:a,schema:c,errSchemaPath:d,opts:tt}){const nt=c.$comment;if(tt.$comment===!0)o.code((0,codegen_1$n._)`${names_1$3.default.self}.logger.log(${nt})`);else if(typeof tt.$comment=="function"){const $a=(0,codegen_1$n.str)`${d}/$comment`,Ys=o.scopeValue("root",{ref:a.root});o.code((0,codegen_1$n._)`${names_1$3.default.self}.opts.$comment(${nt}, ${$a}, ${Ys}.schema)`)}}function returnResults(o){const{gen:a,schemaEnv:c,validateName:d,ValidationError:tt,opts:nt}=o;c.$async?a.if((0,codegen_1$n._)`${names_1$3.default.errors} === 0`,()=>a.return(names_1$3.default.data),()=>a.throw((0,codegen_1$n._)`new ${tt}(${names_1$3.default.vErrors})`)):(a.assign((0,codegen_1$n._)`${d}.errors`,names_1$3.default.vErrors),nt.unevaluated&&assignEvaluated(o),a.return((0,codegen_1$n._)`${names_1$3.default.errors} === 0`))}function assignEvaluated({gen:o,evaluated:a,props:c,items:d}){c instanceof codegen_1$n.Name&&o.assign((0,codegen_1$n._)`${a}.props`,c),d instanceof codegen_1$n.Name&&o.assign((0,codegen_1$n._)`${a}.items`,d)}function schemaKeywords(o,a,c,d){const{gen:tt,schema:nt,data:$a,allErrors:Ys,opts:gu,self:xu}=o,{RULES:$u}=xu;if(nt.$ref&&(gu.ignoreKeywordsWithRef||!(0,util_1$l.schemaHasRulesButRef)(nt,$u))){tt.block(()=>keywordCode(o,"$ref",$u.all.$ref.definition));return}gu.jtd||checkStrictTypes(o,a),tt.block(()=>{for(const Xu of $u.rules)Iu(Xu);Iu($u.post)});function Iu(Xu){(0,applicability_1.shouldUseGroup)(nt,Xu)&&(Xu.type?(tt.if((0,dataType_2.checkDataType)(Xu.type,$a,gu.strictNumbers)),iterateKeywords(o,Xu),a.length===1&&a[0]===Xu.type&&c&&(tt.else(),(0,dataType_2.reportTypeError)(o)),tt.endIf()):iterateKeywords(o,Xu),Ys||tt.if((0,codegen_1$n._)`${names_1$3.default.errors} === ${d||0}`))}}function iterateKeywords(o,a){const{gen:c,schema:d,opts:{useDefaults:tt}}=o;tt&&(0,defaults_1.assignDefaults)(o,a.type),c.block(()=>{for(const nt of a.rules)(0,applicability_1.shouldUseRule)(d,nt)&&keywordCode(o,nt.keyword,nt.definition,a.type)})}function checkStrictTypes(o,a){o.schemaEnv.meta||!o.opts.strictTypes||(checkContextTypes(o,a),o.opts.allowUnionTypes||checkMultipleTypes(o,a),checkKeywordTypes(o,o.dataTypes))}function checkContextTypes(o,a){if(a.length){if(!o.dataTypes.length){o.dataTypes=a;return}a.forEach(c=>{includesType(o.dataTypes,c)||strictTypesError(o,`type "${c}" not allowed by context "${o.dataTypes.join(",")}"`)}),o.dataTypes=o.dataTypes.filter(c=>includesType(a,c))}}function checkMultipleTypes(o,a){a.length>1&&!(a.length===2&&a.includes("null"))&&strictTypesError(o,"use allowUnionTypes to allow union type keyword")}function checkKeywordTypes(o,a){const c=o.self.RULES.all;for(const d in c){const tt=c[d];if(typeof tt=="object"&&(0,applicability_1.shouldUseRule)(o.schema,tt)){const{type:nt}=tt.definition;nt.length&&!nt.some($a=>hasApplicableType(a,$a))&&strictTypesError(o,`missing type "${nt.join(",")}" for keyword "${d}"`)}}}function hasApplicableType(o,a){return o.includes(a)||a==="number"&&o.includes("integer")}function includesType(o,a){return o.includes(a)||a==="integer"&&o.includes("number")}function strictTypesError(o,a){const c=o.schemaEnv.baseId+o.errSchemaPath;a+=` at "${c}" (strictTypes)`,(0,util_1$l.checkStrictMode)(o,a,o.opts.strictTypes)}class KeywordCxt{constructor(a,c,d){if((0,keyword_1.validateKeywordUsage)(a,c,d),this.gen=a.gen,this.allErrors=a.allErrors,this.keyword=d,this.data=a.data,this.schema=a.schema[d],this.$data=c.$data&&a.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,util_1$l.schemaRefOrVal)(a,this.schema,d,this.$data),this.schemaType=c.schemaType,this.parentSchema=a.schema,this.params={},this.it=a,this.def=c,this.$data)this.schemaCode=a.gen.const("vSchema",getData(this.$data,a));else if(this.schemaCode=this.schemaValue,!(0,keyword_1.validSchemaType)(this.schema,c.schemaType,c.allowUndefined))throw new Error(`${d} value must be ${JSON.stringify(c.schemaType)}`);("code"in c?c.trackErrors:c.errors!==!1)&&(this.errsCount=a.gen.const("_errs",names_1$3.default.errors))}result(a,c,d){this.failResult((0,codegen_1$n.not)(a),c,d)}failResult(a,c,d){this.gen.if(a),d?d():this.error(),c?(this.gen.else(),c(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(a,c){this.failResult((0,codegen_1$n.not)(a),void 0,c)}fail(a){if(a===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(a),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(a){if(!this.$data)return this.fail(a);const{schemaCode:c}=this;this.fail((0,codegen_1$n._)`${c} !== undefined && (${(0,codegen_1$n.or)(this.invalid$data(),a)})`)}error(a,c,d){if(c){this.setParams(c),this._error(a,d),this.setParams({});return}this._error(a,d)}_error(a,c){(a?errors_1$1.reportExtraError:errors_1$1.reportError)(this,this.def.error,c)}$dataError(){(0,errors_1$1.reportError)(this,this.def.$dataError||errors_1$1.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,errors_1$1.resetErrorsCount)(this.gen,this.errsCount)}ok(a){this.allErrors||this.gen.if(a)}setParams(a,c){c?Object.assign(this.params,a):this.params=a}block$data(a,c,d=codegen_1$n.nil){this.gen.block(()=>{this.check$data(a,d),c()})}check$data(a=codegen_1$n.nil,c=codegen_1$n.nil){if(!this.$data)return;const{gen:d,schemaCode:tt,schemaType:nt,def:$a}=this;d.if((0,codegen_1$n.or)((0,codegen_1$n._)`${tt} === undefined`,c)),a!==codegen_1$n.nil&&d.assign(a,!0),(nt.length||$a.validateSchema)&&(d.elseIf(this.invalid$data()),this.$dataError(),a!==codegen_1$n.nil&&d.assign(a,!1)),d.else()}invalid$data(){const{gen:a,schemaCode:c,schemaType:d,def:tt,it:nt}=this;return(0,codegen_1$n.or)($a(),Ys());function $a(){if(d.length){if(!(c instanceof codegen_1$n.Name))throw new Error("ajv implementation error");const gu=Array.isArray(d)?d:[d];return(0,codegen_1$n._)`${(0,dataType_2.checkDataTypes)(gu,c,nt.opts.strictNumbers,dataType_2.DataType.Wrong)}`}return codegen_1$n.nil}function Ys(){if(tt.validateSchema){const gu=a.scopeValue("validate$data",{ref:tt.validateSchema});return(0,codegen_1$n._)`!${gu}(${c})`}return codegen_1$n.nil}}subschema(a,c){const d=(0,subschema_1.getSubschema)(this.it,a);(0,subschema_1.extendSubschemaData)(d,this.it,a),(0,subschema_1.extendSubschemaMode)(d,a);const tt={...this.it,...d,items:void 0,props:void 0};return subschemaCode(tt,c),tt}mergeEvaluated(a,c){const{it:d,gen:tt}=this;d.opts.unevaluated&&(d.props!==!0&&a.props!==void 0&&(d.props=util_1$l.mergeEvaluated.props(tt,a.props,d.props,c)),d.items!==!0&&a.items!==void 0&&(d.items=util_1$l.mergeEvaluated.items(tt,a.items,d.items,c)))}mergeValidEvaluated(a,c){const{it:d,gen:tt}=this;if(d.opts.unevaluated&&(d.props!==!0||d.items!==!0))return tt.if(c,()=>this.mergeEvaluated(a,codegen_1$n.Name)),!0}}validate$1.KeywordCxt=KeywordCxt;function keywordCode(o,a,c,d){const tt=new KeywordCxt(o,c,a);"code"in c?c.code(tt,d):tt.$data&&c.validate?(0,keyword_1.funcKeywordCode)(tt,c):"macro"in c?(0,keyword_1.macroKeywordCode)(tt,c):(c.compile||c.validate)&&(0,keyword_1.funcKeywordCode)(tt,c)}const JSON_POINTER=/^\/(?:[^~]|~0|~1)*$/,RELATIVE_JSON_POINTER=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function getData(o,{dataLevel:a,dataNames:c,dataPathArr:d}){let tt,nt;if(o==="")return names_1$3.default.rootData;if(o[0]==="/"){if(!JSON_POINTER.test(o))throw new Error(`Invalid JSON-pointer: ${o}`);tt=o,nt=names_1$3.default.rootData}else{const xu=RELATIVE_JSON_POINTER.exec(o);if(!xu)throw new Error(`Invalid JSON-pointer: ${o}`);const $u=+xu[1];if(tt=xu[2],tt==="#"){if($u>=a)throw new Error(gu("property/index",$u));return d[a-$u]}if($u>a)throw new Error(gu("data",$u));if(nt=c[a-$u],!tt)return nt}let $a=nt;const Ys=tt.split("/");for(const xu of Ys)xu&&(nt=(0,codegen_1$n._)`${nt}${(0,codegen_1$n.getProperty)((0,util_1$l.unescapeJsonPointer)(xu))}`,$a=(0,codegen_1$n._)`${$a} && ${nt}`);return $a;function gu(xu,$u){return`Cannot access ${xu} ${$u} levels up, current level is ${a}`}}validate$1.getData=getData;var validation_error={};Object.defineProperty(validation_error,"__esModule",{value:!0});class ValidationError extends Error{constructor(a){super("validation failed"),this.errors=a,this.ajv=this.validation=!0}}validation_error.default=ValidationError;var ref_error={};Object.defineProperty(ref_error,"__esModule",{value:!0});const resolve_1$1=resolve$2;class MissingRefError extends Error{constructor(a,c,d,tt){super(tt||`can't resolve reference ${d} from id ${c}`),this.missingRef=(0,resolve_1$1.resolveUrl)(a,c,d),this.missingSchema=(0,resolve_1$1.normalizeId)((0,resolve_1$1.getFullPath)(a,this.missingRef))}}ref_error.default=MissingRefError;var compile={};Object.defineProperty(compile,"__esModule",{value:!0});compile.resolveSchema=compile.getCompilingSchema=compile.resolveRef=compile.compileSchema=compile.SchemaEnv=void 0;const codegen_1$m=codegen,validation_error_1=validation_error,names_1$2=names$1,resolve_1=resolve$2,util_1$k=util,validate_1$1=validate$1;class SchemaEnv{constructor(a){var c;this.refs={},this.dynamicAnchors={};let d;typeof a.schema=="object"&&(d=a.schema),this.schema=a.schema,this.schemaId=a.schemaId,this.root=a.root||this,this.baseId=(c=a.baseId)!==null&&c!==void 0?c:(0,resolve_1.normalizeId)(d==null?void 0:d[a.schemaId||"$id"]),this.schemaPath=a.schemaPath,this.localRefs=a.localRefs,this.meta=a.meta,this.$async=d==null?void 0:d.$async,this.refs={}}}compile.SchemaEnv=SchemaEnv;function compileSchema(o){const a=getCompilingSchema.call(this,o);if(a)return a;const c=(0,resolve_1.getFullPath)(this.opts.uriResolver,o.root.baseId),{es5:d,lines:tt}=this.opts.code,{ownProperties:nt}=this.opts,$a=new codegen_1$m.CodeGen(this.scope,{es5:d,lines:tt,ownProperties:nt});let Ys;o.$async&&(Ys=$a.scopeValue("Error",{ref:validation_error_1.default,code:(0,codegen_1$m._)`require("ajv/dist/runtime/validation_error").default`}));const gu=$a.scopeName("validate");o.validateName=gu;const xu={gen:$a,allErrors:this.opts.allErrors,data:names_1$2.default.data,parentData:names_1$2.default.parentData,parentDataProperty:names_1$2.default.parentDataProperty,dataNames:[names_1$2.default.data],dataPathArr:[codegen_1$m.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:$a.scopeValue("schema",this.opts.code.source===!0?{ref:o.schema,code:(0,codegen_1$m.stringify)(o.schema)}:{ref:o.schema}),validateName:gu,ValidationError:Ys,schema:o.schema,schemaEnv:o,rootId:c,baseId:o.baseId||c,schemaPath:codegen_1$m.nil,errSchemaPath:o.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,codegen_1$m._)`""`,opts:this.opts,self:this};let $u;try{this._compilations.add(o),(0,validate_1$1.validateFunctionCode)(xu),$a.optimize(this.opts.code.optimize);const Iu=$a.toString();$u=`${$a.scopeRefs(names_1$2.default.scope)}return ${Iu}`,this.opts.code.process&&($u=this.opts.code.process($u,o));const i0=new Function(`${names_1$2.default.self}`,`${names_1$2.default.scope}`,$u)(this,this.scope.get());if(this.scope.value(gu,{ref:i0}),i0.errors=null,i0.schema=o.schema,i0.schemaEnv=o,o.$async&&(i0.$async=!0),this.opts.code.source===!0&&(i0.source={validateName:gu,validateCode:Iu,scopeValues:$a._values}),this.opts.unevaluated){const{props:p0,items:w0}=xu;i0.evaluated={props:p0 instanceof codegen_1$m.Name?void 0:p0,items:w0 instanceof codegen_1$m.Name?void 0:w0,dynamicProps:p0 instanceof codegen_1$m.Name,dynamicItems:w0 instanceof codegen_1$m.Name},i0.source&&(i0.source.evaluated=(0,codegen_1$m.stringify)(i0.evaluated))}return o.validate=i0,o}catch(Iu){throw delete o.validate,delete o.validateName,$u&&this.logger.error("Error compiling schema, function code:",$u),Iu}finally{this._compilations.delete(o)}}compile.compileSchema=compileSchema;function resolveRef(o,a,c){var d;c=(0,resolve_1.resolveUrl)(this.opts.uriResolver,a,c);const tt=o.refs[c];if(tt)return tt;let nt=resolve$1.call(this,o,c);if(nt===void 0){const $a=(d=o.localRefs)===null||d===void 0?void 0:d[c],{schemaId:Ys}=this.opts;$a&&(nt=new SchemaEnv({schema:$a,schemaId:Ys,root:o,baseId:a}))}if(nt!==void 0)return o.refs[c]=inlineOrCompile.call(this,nt)}compile.resolveRef=resolveRef;function inlineOrCompile(o){return(0,resolve_1.inlineRef)(o.schema,this.opts.inlineRefs)?o.schema:o.validate?o:compileSchema.call(this,o)}function getCompilingSchema(o){for(const a of this._compilations)if(sameSchemaEnv(a,o))return a}compile.getCompilingSchema=getCompilingSchema;function sameSchemaEnv(o,a){return o.schema===a.schema&&o.root===a.root&&o.baseId===a.baseId}function resolve$1(o,a){let c;for(;typeof(c=this.refs[a])=="string";)a=c;return c||this.schemas[a]||resolveSchema.call(this,o,a)}function resolveSchema(o,a){const c=this.opts.uriResolver.parse(a),d=(0,resolve_1._getFullPath)(this.opts.uriResolver,c);let tt=(0,resolve_1.getFullPath)(this.opts.uriResolver,o.baseId,void 0);if(Object.keys(o.schema).length>0&&d===tt)return getJsonPointer.call(this,c,o);const nt=(0,resolve_1.normalizeId)(d),$a=this.refs[nt]||this.schemas[nt];if(typeof $a=="string"){const Ys=resolveSchema.call(this,o,$a);return typeof(Ys==null?void 0:Ys.schema)!="object"?void 0:getJsonPointer.call(this,c,Ys)}if(typeof($a==null?void 0:$a.schema)=="object"){if($a.validate||compileSchema.call(this,$a),nt===(0,resolve_1.normalizeId)(a)){const{schema:Ys}=$a,{schemaId:gu}=this.opts,xu=Ys[gu];return xu&&(tt=(0,resolve_1.resolveUrl)(this.opts.uriResolver,tt,xu)),new SchemaEnv({schema:Ys,schemaId:gu,root:o,baseId:tt})}return getJsonPointer.call(this,c,$a)}}compile.resolveSchema=resolveSchema;const PREVENT_SCOPE_CHANGE=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function getJsonPointer(o,{baseId:a,schema:c,root:d}){var tt;if(((tt=o.fragment)===null||tt===void 0?void 0:tt[0])!=="/")return;for(const Ys of o.fragment.slice(1).split("/")){if(typeof c=="boolean")return;const gu=c[(0,util_1$k.unescapeFragment)(Ys)];if(gu===void 0)return;c=gu;const xu=typeof c=="object"&&c[this.opts.schemaId];!PREVENT_SCOPE_CHANGE.has(Ys)&&xu&&(a=(0,resolve_1.resolveUrl)(this.opts.uriResolver,a,xu))}let nt;if(typeof c!="boolean"&&c.$ref&&!(0,util_1$k.schemaHasRulesButRef)(c,this.RULES)){const Ys=(0,resolve_1.resolveUrl)(this.opts.uriResolver,a,c.$ref);nt=resolveSchema.call(this,d,Ys)}const{schemaId:$a}=this.opts;if(nt=nt||new SchemaEnv({schema:c,schemaId:$a,root:d,baseId:a}),nt.schema!==nt.root.schema)return nt}const $id$1="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description="Meta-schema for $data reference (JSON AnySchema extension proposal)",type$1="object",required$2=["$data"],properties$2={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties$1=!1,require$$9={$id:$id$1,description,type:type$1,required:required$2,properties:properties$2,additionalProperties:additionalProperties$1};var uri$1={},uri_all={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(o,a){(function(c,d){d(a)})(commonjsGlobal$4,function(c){function d(){for(var $y=arguments.length,Kv=Array($y),Ny=0;Ny<$y;Ny++)Kv[Ny]=arguments[Ny];if(Kv.length>1){Kv[0]=Kv[0].slice(0,-1);for(var Vy=Kv.length-1,Sy=1;Sy= 0x80 (not a basic code point)","invalid-input":"Invalid input"},j1=w0-A0,r1=Math.floor,t1=String.fromCharCode;function D0($y){throw new RangeError(lv[$y])}function Z0($y,Kv){for(var Ny=[],Vy=$y.length;Vy--;)Ny[Vy]=Kv($y[Vy]);return Ny}function f1($y,Kv){var Ny=$y.split("@"),Vy="";Ny.length>1&&(Vy=Ny[0]+"@",$y=Ny[1]),$y=$y.replace(B1,".");var Sy=$y.split("."),fw=Z0(Sy,Kv).join(".");return Vy+fw}function w1($y){for(var Kv=[],Ny=0,Vy=$y.length;Ny=55296&&Sy<=56319&&Ny>1,Kv+=r1(Kv/Ny);Kv>j1*$0>>1;Sy+=w0)Kv=r1(Kv/j1);return r1(Sy+(j1+1)*Kv/(Kv+O0))},d1=function(Kv){var Ny=[],Vy=Kv.length,Sy=0,fw=F0,xw=q0,V3=Kv.lastIndexOf(u1);V3<0&&(V3=0);for(var i$=0;i$=128&&D0("not-basic"),Ny.push(Kv.charCodeAt(i$));for(var y$=V3>0?V3+1:0;y$=Vy&&D0("invalid-input");var $w=c1(Kv.charCodeAt(y$++));($w>=w0||$w>r1((p0-Sy)/g3))&&D0("overflow"),Sy+=$w*g3;var w3=j3<=xw?A0:j3>=xw+$0?$0:j3-xw;if($wr1(p0/yE)&&D0("overflow"),g3*=yE}var bE=Ny.length+1;xw=o1(Sy-Gw,bE,Gw==0),r1(Sy/bE)>p0-fw&&D0("overflow"),fw+=r1(Sy/bE),Sy%=bE,Ny.splice(Sy++,0,fw)}return String.fromCodePoint.apply(String,Ny)},R1=function(Kv){var Ny=[];Kv=w1(Kv);var Vy=Kv.length,Sy=F0,fw=0,xw=q0,V3=!0,i$=!1,y$=void 0;try{for(var Gw=Kv[Symbol.iterator](),g3;!(V3=(g3=Gw.next()).done);V3=!0){var j3=g3.value;j3<128&&Ny.push(t1(j3))}}catch(VI){i$=!0,y$=VI}finally{try{!V3&&Gw.return&&Gw.return()}finally{if(i$)throw y$}}var $w=Ny.length,w3=$w;for($w&&Ny.push(u1);w3=Sy&&D_r1((p0-fw)/FA)&&D0("overflow"),fw+=(yE-Sy)*FA,Sy=yE;var g8=!0,y8=!1,X_=void 0;try{for(var FS=Kv[Symbol.iterator](),sR;!(g8=(sR=FS.next()).done);g8=!0){var I6=sR.value;if(I6p0&&D0("overflow"),I6==Sy){for(var Yx=fw,Tz=w0;;Tz+=w0){var oN=Tz<=xw?A0:Tz>=xw+$0?$0:Tz-xw;if(Yx>6|192).toString(16).toUpperCase()+"%"+(Kv&63|128).toString(16).toUpperCase():Ny="%"+(Kv>>12|224).toString(16).toUpperCase()+"%"+(Kv>>6&63|128).toString(16).toUpperCase()+"%"+(Kv&63|128).toString(16).toUpperCase(),Ny}function Mv($y){for(var Kv="",Ny=0,Vy=$y.length;Ny=194&&Sy<224){if(Vy-Ny>=6){var fw=parseInt($y.substr(Ny+4,2),16);Kv+=String.fromCharCode((Sy&31)<<6|fw&63)}else Kv+=$y.substr(Ny,6);Ny+=6}else if(Sy>=224){if(Vy-Ny>=9){var xw=parseInt($y.substr(Ny+4,2),16),V3=parseInt($y.substr(Ny+7,2),16);Kv+=String.fromCharCode((Sy&15)<<12|(xw&63)<<6|V3&63)}else Kv+=$y.substr(Ny,9);Ny+=9}else Kv+=$y.substr(Ny,3),Ny+=3}return Kv}function Zv($y,Kv){function Ny(Vy){var Sy=Mv(Vy);return Sy.match(Kv.UNRESERVED)?Sy:Vy}return $y.scheme&&($y.scheme=String($y.scheme).replace(Kv.PCT_ENCODED,Ny).toLowerCase().replace(Kv.NOT_SCHEME,"")),$y.userinfo!==void 0&&($y.userinfo=String($y.userinfo).replace(Kv.PCT_ENCODED,Ny).replace(Kv.NOT_USERINFO,ev).replace(Kv.PCT_ENCODED,$a)),$y.host!==void 0&&($y.host=String($y.host).replace(Kv.PCT_ENCODED,Ny).toLowerCase().replace(Kv.NOT_HOST,ev).replace(Kv.PCT_ENCODED,$a)),$y.path!==void 0&&($y.path=String($y.path).replace(Kv.PCT_ENCODED,Ny).replace($y.scheme?Kv.NOT_PATH:Kv.NOT_PATH_NOSCHEME,ev).replace(Kv.PCT_ENCODED,$a)),$y.query!==void 0&&($y.query=String($y.query).replace(Kv.PCT_ENCODED,Ny).replace(Kv.NOT_QUERY,ev).replace(Kv.PCT_ENCODED,$a)),$y.fragment!==void 0&&($y.fragment=String($y.fragment).replace(Kv.PCT_ENCODED,Ny).replace(Kv.NOT_FRAGMENT,ev).replace(Kv.PCT_ENCODED,$a)),$y}function fv($y){return $y.replace(/^0*(.*)/,"$1")||"0"}function cv($y,Kv){var Ny=$y.match(Kv.IPV4ADDRESS)||[],Vy=Xu(Ny,2),Sy=Vy[1];return Sy?Sy.split(".").map(fv).join("."):$y}function ly($y,Kv){var Ny=$y.match(Kv.IPV6ADDRESS)||[],Vy=Xu(Ny,3),Sy=Vy[1],fw=Vy[2];if(Sy){for(var xw=Sy.toLowerCase().split("::").reverse(),V3=Xu(xw,2),i$=V3[0],y$=V3[1],Gw=y$?y$.split(":").map(fv):[],g3=i$.split(":").map(fv),j3=Kv.IPV4ADDRESS.test(g3[g3.length-1]),$w=j3?7:8,w3=g3.length-$w,yE=Array($w),bE=0;bE<$w;++bE)yE[bE]=Gw[bE]||g3[w3+bE]||"";j3&&(yE[$w-1]=cv(yE[$w-1],Kv));var J_=yE.reduce(function(FA,g8,y8){if(!g8||g8==="0"){var X_=FA[FA.length-1];X_&&X_.index+X_.length===y8?X_.length++:FA.push({index:y8,length:1})}return FA},[]),B_=J_.sort(function(FA,g8){return g8.length-FA.length})[0],$_=void 0;if(B_&&B_.length>1){var M6=yE.slice(0,B_.index),D_=yE.slice(B_.index+B_.length);$_=M6.join(":")+"::"+D_.join(":")}else $_=yE.join(":");return fw&&($_+="%"+fw),$_}else return $y}var Cy=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Ly="".match(/(){0}/)[1]===void 0;function Hy($y){var Kv=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ny={},Vy=Kv.iri!==!1?Iu:$u;Kv.reference==="suffix"&&($y=(Kv.scheme?Kv.scheme+":":"")+"//"+$y);var Sy=$y.match(Cy);if(Sy){Ly?(Ny.scheme=Sy[1],Ny.userinfo=Sy[3],Ny.host=Sy[4],Ny.port=parseInt(Sy[5],10),Ny.path=Sy[6]||"",Ny.query=Sy[7],Ny.fragment=Sy[8],isNaN(Ny.port)&&(Ny.port=Sy[5])):(Ny.scheme=Sy[1]||void 0,Ny.userinfo=$y.indexOf("@")!==-1?Sy[3]:void 0,Ny.host=$y.indexOf("//")!==-1?Sy[4]:void 0,Ny.port=parseInt(Sy[5],10),Ny.path=Sy[6]||"",Ny.query=$y.indexOf("?")!==-1?Sy[7]:void 0,Ny.fragment=$y.indexOf("#")!==-1?Sy[8]:void 0,isNaN(Ny.port)&&(Ny.port=$y.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?Sy[4]:void 0)),Ny.host&&(Ny.host=ly(cv(Ny.host,Vy),Vy)),Ny.scheme===void 0&&Ny.userinfo===void 0&&Ny.host===void 0&&Ny.port===void 0&&!Ny.path&&Ny.query===void 0?Ny.reference="same-document":Ny.scheme===void 0?Ny.reference="relative":Ny.fragment===void 0?Ny.reference="absolute":Ny.reference="uri",Kv.reference&&Kv.reference!=="suffix"&&Kv.reference!==Ny.reference&&(Ny.error=Ny.error||"URI is not a "+Kv.reference+" reference.");var fw=D1[(Kv.scheme||Ny.scheme||"").toLowerCase()];if(!Kv.unicodeSupport&&(!fw||!fw.unicodeSupport)){if(Ny.host&&(Kv.domainHost||fw&&fw.domainHost))try{Ny.host=rv.toASCII(Ny.host.replace(Vy.PCT_ENCODED,Mv).toLowerCase())}catch(xw){Ny.error=Ny.error||"Host's domain name can not be converted to ASCII via punycode: "+xw}Zv(Ny,$u)}else Zv(Ny,Vy);fw&&fw.parse&&fw.parse(Ny,Kv)}else Ny.error=Ny.error||"URI can not be parsed.";return Ny}function t2($y,Kv){var Ny=Kv.iri!==!1?Iu:$u,Vy=[];return $y.userinfo!==void 0&&(Vy.push($y.userinfo),Vy.push("@")),$y.host!==void 0&&Vy.push(ly(cv(String($y.host),Ny),Ny).replace(Ny.IPV6ADDRESS,function(Sy,fw,xw){return"["+fw+(xw?"%25"+xw:"")+"]"})),(typeof $y.port=="number"||typeof $y.port=="string")&&(Vy.push(":"),Vy.push(String($y.port))),Vy.length?Vy.join(""):void 0}var C2=/^\.\.?\//,Dy=/^\/\.(\/|$)/,jw=/^\/\.\.(\/|$)/,pw=/^\/?(?:.|\n)*?(?=\/|$)/;function vw($y){for(var Kv=[];$y.length;)if($y.match(C2))$y=$y.replace(C2,"");else if($y.match(Dy))$y=$y.replace(Dy,"/");else if($y.match(jw))$y=$y.replace(jw,"/"),Kv.pop();else if($y==="."||$y==="..")$y="";else{var Ny=$y.match(pw);if(Ny){var Vy=Ny[0];$y=$y.slice(Vy.length),Kv.push(Vy)}else throw new Error("Unexpected dot segment condition")}return Kv.join("")}function Hw($y){var Kv=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ny=Kv.iri?Iu:$u,Vy=[],Sy=D1[(Kv.scheme||$y.scheme||"").toLowerCase()];if(Sy&&Sy.serialize&&Sy.serialize($y,Kv),$y.host&&!Ny.IPV6ADDRESS.test($y.host)){if(Kv.domainHost||Sy&&Sy.domainHost)try{$y.host=Kv.iri?rv.toUnicode($y.host):rv.toASCII($y.host.replace(Ny.PCT_ENCODED,Mv).toLowerCase())}catch(V3){$y.error=$y.error||"Host's domain name can not be converted to "+(Kv.iri?"Unicode":"ASCII")+" via punycode: "+V3}}Zv($y,Ny),Kv.reference!=="suffix"&&$y.scheme&&(Vy.push($y.scheme),Vy.push(":"));var fw=t2($y,Kv);if(fw!==void 0&&(Kv.reference!=="suffix"&&Vy.push("//"),Vy.push(fw),$y.path&&$y.path.charAt(0)!=="/"&&Vy.push("/")),$y.path!==void 0){var xw=$y.path;!Kv.absolutePath&&(!Sy||!Sy.absolutePath)&&(xw=vw(xw)),fw===void 0&&(xw=xw.replace(/^\/\//,"/%2F")),Vy.push(xw)}return $y.query!==void 0&&(Vy.push("?"),Vy.push($y.query)),$y.fragment!==void 0&&(Vy.push("#"),Vy.push($y.fragment)),Vy.join("")}function uw($y,Kv){var Ny=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Vy=arguments[3],Sy={};return Vy||($y=Hy(Hw($y,Ny),Ny),Kv=Hy(Hw(Kv,Ny),Ny)),Ny=Ny||{},!Ny.tolerant&&Kv.scheme?(Sy.scheme=Kv.scheme,Sy.userinfo=Kv.userinfo,Sy.host=Kv.host,Sy.port=Kv.port,Sy.path=vw(Kv.path||""),Sy.query=Kv.query):(Kv.userinfo!==void 0||Kv.host!==void 0||Kv.port!==void 0?(Sy.userinfo=Kv.userinfo,Sy.host=Kv.host,Sy.port=Kv.port,Sy.path=vw(Kv.path||""),Sy.query=Kv.query):(Kv.path?(Kv.path.charAt(0)==="/"?Sy.path=vw(Kv.path):(($y.userinfo!==void 0||$y.host!==void 0||$y.port!==void 0)&&!$y.path?Sy.path="/"+Kv.path:$y.path?Sy.path=$y.path.slice(0,$y.path.lastIndexOf("/")+1)+Kv.path:Sy.path=Kv.path,Sy.path=vw(Sy.path)),Sy.query=Kv.query):(Sy.path=$y.path,Kv.query!==void 0?Sy.query=Kv.query:Sy.query=$y.query),Sy.userinfo=$y.userinfo,Sy.host=$y.host,Sy.port=$y.port),Sy.scheme=$y.scheme),Sy.fragment=Kv.fragment,Sy}function Nw($y,Kv,Ny){var Vy=gu({scheme:"null"},Ny);return Hw(uw(Hy($y,Vy),Hy(Kv,Vy),Vy,!0),Vy)}function lw($y,Kv){return typeof $y=="string"?$y=Hw(Hy($y,Kv),Kv):nt($y)==="object"&&($y=Hy(Hw($y,Kv),Kv)),$y}function Lw($y,Kv,Ny){return typeof $y=="string"?$y=Hw(Hy($y,Ny),Ny):nt($y)==="object"&&($y=Hw($y,Ny)),typeof Kv=="string"?Kv=Hw(Hy(Kv,Ny),Ny):nt(Kv)==="object"&&(Kv=Hw(Kv,Ny)),$y===Kv}function zw($y,Kv){return $y&&$y.toString().replace(!Kv||!Kv.iri?$u.ESCAPE:Iu.ESCAPE,ev)}function A2($y,Kv){return $y&&$y.toString().replace(!Kv||!Kv.iri?$u.PCT_ENCODED:Iu.PCT_ENCODED,Mv)}var kv={scheme:"http",domainHost:!0,parse:function(Kv,Ny){return Kv.host||(Kv.error=Kv.error||"HTTP URIs must have a host."),Kv},serialize:function(Kv,Ny){var Vy=String(Kv.scheme).toLowerCase()==="https";return(Kv.port===(Vy?443:80)||Kv.port==="")&&(Kv.port=void 0),Kv.path||(Kv.path="/"),Kv}},Y1={scheme:"https",domainHost:kv.domainHost,parse:kv.parse,serialize:kv.serialize};function tv($y){return typeof $y.secure=="boolean"?$y.secure:String($y.scheme).toLowerCase()==="wss"}var Yv={scheme:"ws",domainHost:!0,parse:function(Kv,Ny){var Vy=Kv;return Vy.secure=tv(Vy),Vy.resourceName=(Vy.path||"/")+(Vy.query?"?"+Vy.query:""),Vy.path=void 0,Vy.query=void 0,Vy},serialize:function(Kv,Ny){if((Kv.port===(tv(Kv)?443:80)||Kv.port==="")&&(Kv.port=void 0),typeof Kv.secure=="boolean"&&(Kv.scheme=Kv.secure?"wss":"ws",Kv.secure=void 0),Kv.resourceName){var Vy=Kv.resourceName.split("?"),Sy=Xu(Vy,2),fw=Sy[0],xw=Sy[1];Kv.path=fw&&fw!=="/"?fw:void 0,Kv.query=xw,Kv.resourceName=void 0}return Kv.fragment=void 0,Kv}},By={scheme:"wss",domainHost:Yv.domainHost,parse:Yv.parse,serialize:Yv.serialize},Qy={},e2="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",Kw="[0-9A-Fa-f]",r$=tt(tt("%[EFef]"+Kw+"%"+Kw+Kw+"%"+Kw+Kw)+"|"+tt("%[89A-Fa-f]"+Kw+"%"+Kw+Kw)+"|"+tt("%"+Kw+Kw)),v3="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",d$="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",$2=d(d$,'[\\"\\\\]'),_$="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Q$=new RegExp(e2,"g"),S$=new RegExp(r$,"g"),m$=new RegExp(d("[^]",v3,"[\\.]",'[\\"]',$2),"g"),m3=new RegExp(d("[^]",e2,_$),"g"),n$=m3;function a$($y){var Kv=Mv($y);return Kv.match(Q$)?Kv:$y}var OE={scheme:"mailto",parse:function(Kv,Ny){var Vy=Kv,Sy=Vy.to=Vy.path?Vy.path.split(","):[];if(Vy.path=void 0,Vy.query){for(var fw=!1,xw={},V3=Vy.query.split("&"),i$=0,y$=V3.length;i$new RegExp(G0,o1);i0.code="new RegExp";const p0=["removeAdditional","useDefaults","coerceTypes"],w0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),A0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},$0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},O0=200;function L0(G0){var o1,d1,R1,O1,Q1,rv,D1,ev,Mv,Zv,fv,cv,ly,Cy,Ly,Hy,t2,C2,Dy,jw,pw,vw,Hw,uw,Nw;const lw=G0.strict,Lw=(o1=G0.code)===null||o1===void 0?void 0:o1.optimize,zw=Lw===!0||Lw===void 0?1:Lw||0,A2=(R1=(d1=G0.code)===null||d1===void 0?void 0:d1.regExp)!==null&&R1!==void 0?R1:i0,kv=(O1=G0.uriResolver)!==null&&O1!==void 0?O1:Xu.default;return{strictSchema:(rv=(Q1=G0.strictSchema)!==null&&Q1!==void 0?Q1:lw)!==null&&rv!==void 0?rv:!0,strictNumbers:(ev=(D1=G0.strictNumbers)!==null&&D1!==void 0?D1:lw)!==null&&ev!==void 0?ev:!0,strictTypes:(Zv=(Mv=G0.strictTypes)!==null&&Mv!==void 0?Mv:lw)!==null&&Zv!==void 0?Zv:"log",strictTuples:(cv=(fv=G0.strictTuples)!==null&&fv!==void 0?fv:lw)!==null&&cv!==void 0?cv:"log",strictRequired:(Cy=(ly=G0.strictRequired)!==null&&ly!==void 0?ly:lw)!==null&&Cy!==void 0?Cy:!1,code:G0.code?{...G0.code,optimize:zw,regExp:A2}:{optimize:zw,regExp:A2},loopRequired:(Ly=G0.loopRequired)!==null&&Ly!==void 0?Ly:O0,loopEnum:(Hy=G0.loopEnum)!==null&&Hy!==void 0?Hy:O0,meta:(t2=G0.meta)!==null&&t2!==void 0?t2:!0,messages:(C2=G0.messages)!==null&&C2!==void 0?C2:!0,inlineRefs:(Dy=G0.inlineRefs)!==null&&Dy!==void 0?Dy:!0,schemaId:(jw=G0.schemaId)!==null&&jw!==void 0?jw:"$id",addUsedSchema:(pw=G0.addUsedSchema)!==null&&pw!==void 0?pw:!0,validateSchema:(vw=G0.validateSchema)!==null&&vw!==void 0?vw:!0,validateFormats:(Hw=G0.validateFormats)!==null&&Hw!==void 0?Hw:!0,unicodeRegExp:(uw=G0.unicodeRegExp)!==null&&uw!==void 0?uw:!0,int32range:(Nw=G0.int32range)!==null&&Nw!==void 0?Nw:!0,uriResolver:kv}}class q0{constructor(o1={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,o1=this.opts={...o1,...L0(o1)};const{es5:d1,lines:R1}=this.opts.code;this.scope=new Ys.ValueScope({scope:{},prefixes:w0,es5:d1,lines:R1}),this.logger=r1(o1.logger);const O1=o1.validateFormats;o1.validateFormats=!1,this.RULES=(0,nt.getRules)(),F0.call(this,A0,o1,"NOT SUPPORTED"),F0.call(this,$0,o1,"DEPRECATED","warn"),this._metaOpts=lv.call(this),o1.formats&&E1.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),o1.keywords&&B1.call(this,o1.keywords),typeof o1.meta=="object"&&this.addMetaSchema(o1.meta),g1.call(this),o1.validateFormats=O1}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:o1,meta:d1,schemaId:R1}=this.opts;let O1=Iu;R1==="id"&&(O1={...Iu},O1.id=O1.$id,delete O1.$id),d1&&o1&&this.addMetaSchema(O1,O1[R1],!1)}defaultMeta(){const{meta:o1,schemaId:d1}=this.opts;return this.opts.defaultMeta=typeof o1=="object"?o1[d1]||o1:void 0}validate(o1,d1){let R1;if(typeof o1=="string"){if(R1=this.getSchema(o1),!R1)throw new Error(`no schema with key or ref "${o1}"`)}else R1=this.compile(o1);const O1=R1(d1);return"$async"in R1||(this.errors=R1.errors),O1}compile(o1,d1){const R1=this._addSchema(o1,d1);return R1.validate||this._compileSchemaEnv(R1)}compileAsync(o1,d1){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:R1}=this.opts;return O1.call(this,o1,d1);async function O1(Zv,fv){await Q1.call(this,Zv.$schema);const cv=this._addSchema(Zv,fv);return cv.validate||rv.call(this,cv)}async function Q1(Zv){Zv&&!this.getSchema(Zv)&&await O1.call(this,{$ref:Zv},!0)}async function rv(Zv){try{return this._compileSchemaEnv(Zv)}catch(fv){if(!(fv instanceof tt.default))throw fv;return D1.call(this,fv),await ev.call(this,fv.missingSchema),rv.call(this,Zv)}}function D1({missingSchema:Zv,missingRef:fv}){if(this.refs[Zv])throw new Error(`AnySchema ${Zv} is loaded but ${fv} cannot be resolved`)}async function ev(Zv){const fv=await Mv.call(this,Zv);this.refs[Zv]||await Q1.call(this,fv.$schema),this.refs[Zv]||this.addSchema(fv,Zv,d1)}async function Mv(Zv){const fv=this._loading[Zv];if(fv)return fv;try{return await(this._loading[Zv]=R1(Zv))}finally{delete this._loading[Zv]}}}addSchema(o1,d1,R1,O1=this.opts.validateSchema){if(Array.isArray(o1)){for(const rv of o1)this.addSchema(rv,void 0,R1,O1);return this}let Q1;if(typeof o1=="object"){const{schemaId:rv}=this.opts;if(Q1=o1[rv],Q1!==void 0&&typeof Q1!="string")throw new Error(`schema ${rv} must be string`)}return d1=(0,gu.normalizeId)(d1||Q1),this._checkUnique(d1),this.schemas[d1]=this._addSchema(o1,R1,d1,O1,!0),this}addMetaSchema(o1,d1,R1=this.opts.validateSchema){return this.addSchema(o1,d1,!0,R1),this}validateSchema(o1,d1){if(typeof o1=="boolean")return!0;let R1;if(R1=o1.$schema,R1!==void 0&&typeof R1!="string")throw new Error("$schema must be a string");if(R1=R1||this.opts.defaultMeta||this.defaultMeta(),!R1)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const O1=this.validate(R1,o1);if(!O1&&d1){const Q1="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(Q1);else throw new Error(Q1)}return O1}getSchema(o1){let d1;for(;typeof(d1=u1.call(this,o1))=="string";)o1=d1;if(d1===void 0){const{schemaId:R1}=this.opts,O1=new $a.SchemaEnv({schema:{},schemaId:R1});if(d1=$a.resolveSchema.call(this,O1,o1),!d1)return;this.refs[o1]=d1}return d1.validate||this._compileSchemaEnv(d1)}removeSchema(o1){if(o1 instanceof RegExp)return this._removeAllSchemas(this.schemas,o1),this._removeAllSchemas(this.refs,o1),this;switch(typeof o1){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const d1=u1.call(this,o1);return typeof d1=="object"&&this._cache.delete(d1.schema),delete this.schemas[o1],delete this.refs[o1],this}case"object":{const d1=o1;this._cache.delete(d1);let R1=o1[this.opts.schemaId];return R1&&(R1=(0,gu.normalizeId)(R1),delete this.schemas[R1],delete this.refs[R1]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(o1){for(const d1 of o1)this.addKeyword(d1);return this}addKeyword(o1,d1){let R1;if(typeof o1=="string")R1=o1,typeof d1=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),d1.keyword=R1);else if(typeof o1=="object"&&d1===void 0){if(d1=o1,R1=d1.keyword,Array.isArray(R1)&&!R1.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(D0.call(this,R1,d1),!d1)return(0,$u.eachItem)(R1,Q1=>Z0.call(this,Q1)),this;w1.call(this,d1);const O1={...d1,type:(0,xu.getJSONTypes)(d1.type),schemaType:(0,xu.getJSONTypes)(d1.schemaType)};return(0,$u.eachItem)(R1,O1.type.length===0?Q1=>Z0.call(this,Q1,O1):Q1=>O1.type.forEach(rv=>Z0.call(this,Q1,O1,rv))),this}getKeyword(o1){const d1=this.RULES.all[o1];return typeof d1=="object"?d1.definition:!!d1}removeKeyword(o1){const{RULES:d1}=this;delete d1.keywords[o1],delete d1.all[o1];for(const R1 of d1.rules){const O1=R1.rules.findIndex(Q1=>Q1.keyword===o1);O1>=0&&R1.rules.splice(O1,1)}return this}addFormat(o1,d1){return typeof d1=="string"&&(d1=new RegExp(d1)),this.formats[o1]=d1,this}errorsText(o1=this.errors,{separator:d1=", ",dataVar:R1="data"}={}){return!o1||o1.length===0?"No errors":o1.map(O1=>`${R1}${O1.instancePath} ${O1.message}`).reduce((O1,Q1)=>O1+d1+Q1)}$dataMetaSchema(o1,d1){const R1=this.RULES.all;o1=JSON.parse(JSON.stringify(o1));for(const O1 of d1){const Q1=O1.split("/").slice(1);let rv=o1;for(const D1 of Q1)rv=rv[D1];for(const D1 in R1){const ev=R1[D1];if(typeof ev!="object")continue;const{$data:Mv}=ev.definition,Zv=rv[D1];Mv&&Zv&&(rv[D1]=c1(Zv))}}return o1}_removeAllSchemas(o1,d1){for(const R1 in o1){const O1=o1[R1];(!d1||d1.test(R1))&&(typeof O1=="string"?delete o1[R1]:O1&&!O1.meta&&(this._cache.delete(O1.schema),delete o1[R1]))}}_addSchema(o1,d1,R1,O1=this.opts.validateSchema,Q1=this.opts.addUsedSchema){let rv;const{schemaId:D1}=this.opts;if(typeof o1=="object")rv=o1[D1];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof o1!="boolean")throw new Error("schema must be object or boolean")}let ev=this._cache.get(o1);if(ev!==void 0)return ev;R1=(0,gu.normalizeId)(rv||R1);const Mv=gu.getSchemaRefs.call(this,o1,R1);return ev=new $a.SchemaEnv({schema:o1,schemaId:D1,meta:d1,baseId:R1,localRefs:Mv}),this._cache.set(ev.schema,ev),Q1&&!R1.startsWith("#")&&(R1&&this._checkUnique(R1),this.refs[R1]=ev),O1&&this.validateSchema(o1,!0),ev}_checkUnique(o1){if(this.schemas[o1]||this.refs[o1])throw new Error(`schema with key or id "${o1}" already exists`)}_compileSchemaEnv(o1){if(o1.meta?this._compileMetaSchema(o1):$a.compileSchema.call(this,o1),!o1.validate)throw new Error("ajv implementation error");return o1.validate}_compileMetaSchema(o1){const d1=this.opts;this.opts=this._metaOpts;try{$a.compileSchema.call(this,o1)}finally{this.opts=d1}}}o.default=q0,q0.ValidationError=d.default,q0.MissingRefError=tt.default;function F0(G0,o1,d1,R1="error"){for(const O1 in G0){const Q1=O1;Q1 in o1&&this.logger[R1](`${d1}: option ${O1}. ${G0[Q1]}`)}}function u1(G0){return G0=(0,gu.normalizeId)(G0),this.schemas[G0]||this.refs[G0]}function g1(){const G0=this.opts.schemas;if(G0)if(Array.isArray(G0))this.addSchema(G0);else for(const o1 in G0)this.addSchema(G0[o1],o1)}function E1(){for(const G0 in this.opts.formats){const o1=this.opts.formats[G0];o1&&this.addFormat(G0,o1)}}function B1(G0){if(Array.isArray(G0)){this.addVocabulary(G0);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const o1 in G0){const d1=G0[o1];d1.keyword||(d1.keyword=o1),this.addKeyword(d1)}}function lv(){const G0={...this.opts};for(const o1 of p0)delete G0[o1];return G0}const j1={log(){},warn(){},error(){}};function r1(G0){if(G0===!1)return j1;if(G0===void 0)return console;if(G0.log&&G0.warn&&G0.error)return G0;throw new Error("logger must implement log, warn and error methods")}const t1=/^[a-z_$][a-z0-9_$:-]*$/i;function D0(G0,o1){const{RULES:d1}=this;if((0,$u.eachItem)(G0,R1=>{if(d1.keywords[R1])throw new Error(`Keyword ${R1} is already defined`);if(!t1.test(R1))throw new Error(`Keyword ${R1} has invalid name`)}),!!o1&&o1.$data&&!("code"in o1||"validate"in o1))throw new Error('$data keyword must have "code" or "validate" function')}function Z0(G0,o1,d1){var R1;const O1=o1==null?void 0:o1.post;if(d1&&O1)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:Q1}=this;let rv=O1?Q1.post:Q1.rules.find(({type:ev})=>ev===d1);if(rv||(rv={type:d1,rules:[]},Q1.rules.push(rv)),Q1.keywords[G0]=!0,!o1)return;const D1={keyword:G0,definition:{...o1,type:(0,xu.getJSONTypes)(o1.type),schemaType:(0,xu.getJSONTypes)(o1.schemaType)}};o1.before?f1.call(this,rv,D1,o1.before):rv.rules.push(D1),Q1.all[G0]=D1,(R1=o1.implements)===null||R1===void 0||R1.forEach(ev=>this.addKeyword(ev))}function f1(G0,o1,d1){const R1=G0.rules.findIndex(O1=>O1.keyword===d1);R1>=0?G0.rules.splice(R1,0,o1):(G0.rules.push(o1),this.logger.warn(`rule ${d1} is not defined`))}function w1(G0){let{metaSchema:o1}=G0;o1!==void 0&&(G0.$data&&this.opts.$data&&(o1=c1(o1)),G0.validateSchema=this.compile(o1,!0))}const m1={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function c1(G0){return{anyOf:[G0,m1]}}})(core$2);var draft7={},core$1={},id$5={};Object.defineProperty(id$5,"__esModule",{value:!0});const def$s={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};id$5.default=def$s;var ref={};Object.defineProperty(ref,"__esModule",{value:!0});ref.callRef=ref.getValidate=void 0;const ref_error_1=ref_error,code_1$8=code,codegen_1$l=codegen,names_1$1=names$1,compile_1$1=compile,util_1$j=util,def$r={keyword:"$ref",schemaType:"string",code(o){const{gen:a,schema:c,it:d}=o,{baseId:tt,schemaEnv:nt,validateName:$a,opts:Ys,self:gu}=d,{root:xu}=nt;if((c==="#"||c==="#/")&&tt===xu.baseId)return Iu();const $u=compile_1$1.resolveRef.call(gu,xu,tt,c);if($u===void 0)throw new ref_error_1.default(d.opts.uriResolver,tt,c);if($u instanceof compile_1$1.SchemaEnv)return Xu($u);return i0($u);function Iu(){if(nt===xu)return callRef(o,$a,nt,nt.$async);const p0=a.scopeValue("root",{ref:xu});return callRef(o,(0,codegen_1$l._)`${p0}.validate`,xu,xu.$async)}function Xu(p0){const w0=getValidate(o,p0);callRef(o,w0,p0,p0.$async)}function i0(p0){const w0=a.scopeValue("schema",Ys.code.source===!0?{ref:p0,code:(0,codegen_1$l.stringify)(p0)}:{ref:p0}),A0=a.name("valid"),$0=o.subschema({schema:p0,dataTypes:[],schemaPath:codegen_1$l.nil,topSchemaRef:w0,errSchemaPath:c},A0);o.mergeEvaluated($0),o.ok(A0)}}};function getValidate(o,a){const{gen:c}=o;return a.validate?c.scopeValue("validate",{ref:a.validate}):(0,codegen_1$l._)`${c.scopeValue("wrapper",{ref:a})}.validate`}ref.getValidate=getValidate;function callRef(o,a,c,d){const{gen:tt,it:nt}=o,{allErrors:$a,schemaEnv:Ys,opts:gu}=nt,xu=gu.passContext?names_1$1.default.this:codegen_1$l.nil;d?$u():Iu();function $u(){if(!Ys.$async)throw new Error("async schema referenced by sync schema");const p0=tt.let("valid");tt.try(()=>{tt.code((0,codegen_1$l._)`await ${(0,code_1$8.callValidateCode)(o,a,xu)}`),i0(a),$a||tt.assign(p0,!0)},w0=>{tt.if((0,codegen_1$l._)`!(${w0} instanceof ${nt.ValidationError})`,()=>tt.throw(w0)),Xu(w0),$a||tt.assign(p0,!1)}),o.ok(p0)}function Iu(){o.result((0,code_1$8.callValidateCode)(o,a,xu),()=>i0(a),()=>Xu(a))}function Xu(p0){const w0=(0,codegen_1$l._)`${p0}.errors`;tt.assign(names_1$1.default.vErrors,(0,codegen_1$l._)`${names_1$1.default.vErrors} === null ? ${w0} : ${names_1$1.default.vErrors}.concat(${w0})`),tt.assign(names_1$1.default.errors,(0,codegen_1$l._)`${names_1$1.default.vErrors}.length`)}function i0(p0){var w0;if(!nt.opts.unevaluated)return;const A0=(w0=c==null?void 0:c.validate)===null||w0===void 0?void 0:w0.evaluated;if(nt.props!==!0)if(A0&&!A0.dynamicProps)A0.props!==void 0&&(nt.props=util_1$j.mergeEvaluated.props(tt,A0.props,nt.props));else{const $0=tt.var("props",(0,codegen_1$l._)`${p0}.evaluated.props`);nt.props=util_1$j.mergeEvaluated.props(tt,$0,nt.props,codegen_1$l.Name)}if(nt.items!==!0)if(A0&&!A0.dynamicItems)A0.items!==void 0&&(nt.items=util_1$j.mergeEvaluated.items(tt,A0.items,nt.items));else{const $0=tt.var("items",(0,codegen_1$l._)`${p0}.evaluated.items`);nt.items=util_1$j.mergeEvaluated.items(tt,$0,nt.items,codegen_1$l.Name)}}}ref.callRef=callRef;ref.default=def$r;Object.defineProperty(core$1,"__esModule",{value:!0});const id_1=id$5,ref_1=ref,core=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",id_1.default,ref_1.default];core$1.default=core;var validation$1={},limitNumber={};Object.defineProperty(limitNumber,"__esModule",{value:!0});const codegen_1$k=codegen,ops=codegen_1$k.operators,KWDs={maximum:{okStr:"<=",ok:ops.LTE,fail:ops.GT},minimum:{okStr:">=",ok:ops.GTE,fail:ops.LT},exclusiveMaximum:{okStr:"<",ok:ops.LT,fail:ops.GTE},exclusiveMinimum:{okStr:">",ok:ops.GT,fail:ops.LTE}},error$j={message:({keyword:o,schemaCode:a})=>(0,codegen_1$k.str)`must be ${KWDs[o].okStr} ${a}`,params:({keyword:o,schemaCode:a})=>(0,codegen_1$k._)`{comparison: ${KWDs[o].okStr}, limit: ${a}}`},def$q={keyword:Object.keys(KWDs),type:"number",schemaType:"number",$data:!0,error:error$j,code(o){const{keyword:a,data:c,schemaCode:d}=o;o.fail$data((0,codegen_1$k._)`${c} ${KWDs[a].fail} ${d} || isNaN(${c})`)}};limitNumber.default=def$q;var multipleOf={};Object.defineProperty(multipleOf,"__esModule",{value:!0});const codegen_1$j=codegen,error$i={message:({schemaCode:o})=>(0,codegen_1$j.str)`must be multiple of ${o}`,params:({schemaCode:o})=>(0,codegen_1$j._)`{multipleOf: ${o}}`},def$p={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:error$i,code(o){const{gen:a,data:c,schemaCode:d,it:tt}=o,nt=tt.opts.multipleOfPrecision,$a=a.let("res"),Ys=nt?(0,codegen_1$j._)`Math.abs(Math.round(${$a}) - ${$a}) > 1e-${nt}`:(0,codegen_1$j._)`${$a} !== parseInt(${$a})`;o.fail$data((0,codegen_1$j._)`(${d} === 0 || (${$a} = ${c}/${d}, ${Ys}))`)}};multipleOf.default=def$p;var limitLength={},ucs2length$1={};Object.defineProperty(ucs2length$1,"__esModule",{value:!0});function ucs2length(o){const a=o.length;let c=0,d=0,tt;for(;d=55296&&tt<=56319&&d(0,codegen_1$i._)`{limit: ${o}}`},def$o={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:error$h,code(o){const{keyword:a,data:c,schemaCode:d,it:tt}=o,nt=a==="maxLength"?codegen_1$i.operators.GT:codegen_1$i.operators.LT,$a=tt.opts.unicode===!1?(0,codegen_1$i._)`${c}.length`:(0,codegen_1$i._)`${(0,util_1$i.useFunc)(o.gen,ucs2length_1.default)}(${c})`;o.fail$data((0,codegen_1$i._)`${$a} ${nt} ${d}`)}};limitLength.default=def$o;var pattern={};Object.defineProperty(pattern,"__esModule",{value:!0});const code_1$7=code,codegen_1$h=codegen,error$g={message:({schemaCode:o})=>(0,codegen_1$h.str)`must match pattern "${o}"`,params:({schemaCode:o})=>(0,codegen_1$h._)`{pattern: ${o}}`},def$n={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:error$g,code(o){const{data:a,$data:c,schema:d,schemaCode:tt,it:nt}=o,$a=nt.opts.unicodeRegExp?"u":"",Ys=c?(0,codegen_1$h._)`(new RegExp(${tt}, ${$a}))`:(0,code_1$7.usePattern)(o,d);o.fail$data((0,codegen_1$h._)`!${Ys}.test(${a})`)}};pattern.default=def$n;var limitProperties={};Object.defineProperty(limitProperties,"__esModule",{value:!0});const codegen_1$g=codegen,error$f={message({keyword:o,schemaCode:a}){const c=o==="maxProperties"?"more":"fewer";return(0,codegen_1$g.str)`must NOT have ${c} than ${a} properties`},params:({schemaCode:o})=>(0,codegen_1$g._)`{limit: ${o}}`},def$m={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:error$f,code(o){const{keyword:a,data:c,schemaCode:d}=o,tt=a==="maxProperties"?codegen_1$g.operators.GT:codegen_1$g.operators.LT;o.fail$data((0,codegen_1$g._)`Object.keys(${c}).length ${tt} ${d}`)}};limitProperties.default=def$m;var required$1={};Object.defineProperty(required$1,"__esModule",{value:!0});const code_1$6=code,codegen_1$f=codegen,util_1$h=util,error$e={message:({params:{missingProperty:o}})=>(0,codegen_1$f.str)`must have required property '${o}'`,params:({params:{missingProperty:o}})=>(0,codegen_1$f._)`{missingProperty: ${o}}`},def$l={keyword:"required",type:"object",schemaType:"array",$data:!0,error:error$e,code(o){const{gen:a,schema:c,schemaCode:d,data:tt,$data:nt,it:$a}=o,{opts:Ys}=$a;if(!nt&&c.length===0)return;const gu=c.length>=Ys.loopRequired;if($a.allErrors?xu():$u(),Ys.strictRequired){const i0=o.parentSchema.properties,{definedProperties:p0}=o.it;for(const w0 of c)if((i0==null?void 0:i0[w0])===void 0&&!p0.has(w0)){const A0=$a.schemaEnv.baseId+$a.errSchemaPath,$0=`required property "${w0}" is not defined at "${A0}" (strictRequired)`;(0,util_1$h.checkStrictMode)($a,$0,$a.opts.strictRequired)}}function xu(){if(gu||nt)o.block$data(codegen_1$f.nil,Iu);else for(const i0 of c)(0,code_1$6.checkReportMissingProp)(o,i0)}function $u(){const i0=a.let("missing");if(gu||nt){const p0=a.let("valid",!0);o.block$data(p0,()=>Xu(i0,p0)),o.ok(p0)}else a.if((0,code_1$6.checkMissingProp)(o,c,i0)),(0,code_1$6.reportMissingProp)(o,i0),a.else()}function Iu(){a.forOf("prop",d,i0=>{o.setParams({missingProperty:i0}),a.if((0,code_1$6.noPropertyInData)(a,tt,i0,Ys.ownProperties),()=>o.error())})}function Xu(i0,p0){o.setParams({missingProperty:i0}),a.forOf(i0,d,()=>{a.assign(p0,(0,code_1$6.propertyInData)(a,tt,i0,Ys.ownProperties)),a.if((0,codegen_1$f.not)(p0),()=>{o.error(),a.break()})},codegen_1$f.nil)}}};required$1.default=def$l;var limitItems={};Object.defineProperty(limitItems,"__esModule",{value:!0});const codegen_1$e=codegen,error$d={message({keyword:o,schemaCode:a}){const c=o==="maxItems"?"more":"fewer";return(0,codegen_1$e.str)`must NOT have ${c} than ${a} items`},params:({schemaCode:o})=>(0,codegen_1$e._)`{limit: ${o}}`},def$k={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:error$d,code(o){const{keyword:a,data:c,schemaCode:d}=o,tt=a==="maxItems"?codegen_1$e.operators.GT:codegen_1$e.operators.LT;o.fail$data((0,codegen_1$e._)`${c}.length ${tt} ${d}`)}};limitItems.default=def$k;var uniqueItems={},equal$1={};Object.defineProperty(equal$1,"__esModule",{value:!0});const equal=fastDeepEqual;equal.code='require("ajv/dist/runtime/equal").default';equal$1.default=equal;Object.defineProperty(uniqueItems,"__esModule",{value:!0});const dataType_1=dataType,codegen_1$d=codegen,util_1$g=util,equal_1$2=equal$1,error$c={message:({params:{i:o,j:a}})=>(0,codegen_1$d.str)`must NOT have duplicate items (items ## ${a} and ${o} are identical)`,params:({params:{i:o,j:a}})=>(0,codegen_1$d._)`{i: ${o}, j: ${a}}`},def$j={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:error$c,code(o){const{gen:a,data:c,$data:d,schema:tt,parentSchema:nt,schemaCode:$a,it:Ys}=o;if(!d&&!tt)return;const gu=a.let("valid"),xu=nt.items?(0,dataType_1.getSchemaTypes)(nt.items):[];o.block$data(gu,$u,(0,codegen_1$d._)`${$a} === false`),o.ok(gu);function $u(){const p0=a.let("i",(0,codegen_1$d._)`${c}.length`),w0=a.let("j");o.setParams({i:p0,j:w0}),a.assign(gu,!0),a.if((0,codegen_1$d._)`${p0} > 1`,()=>(Iu()?Xu:i0)(p0,w0))}function Iu(){return xu.length>0&&!xu.some(p0=>p0==="object"||p0==="array")}function Xu(p0,w0){const A0=a.name("item"),$0=(0,dataType_1.checkDataTypes)(xu,A0,Ys.opts.strictNumbers,dataType_1.DataType.Wrong),O0=a.const("indices",(0,codegen_1$d._)`{}`);a.for((0,codegen_1$d._)`;${p0}--;`,()=>{a.let(A0,(0,codegen_1$d._)`${c}[${p0}]`),a.if($0,(0,codegen_1$d._)`continue`),xu.length>1&&a.if((0,codegen_1$d._)`typeof ${A0} == "string"`,(0,codegen_1$d._)`${A0} += "_"`),a.if((0,codegen_1$d._)`typeof ${O0}[${A0}] == "number"`,()=>{a.assign(w0,(0,codegen_1$d._)`${O0}[${A0}]`),o.error(),a.assign(gu,!1).break()}).code((0,codegen_1$d._)`${O0}[${A0}] = ${p0}`)})}function i0(p0,w0){const A0=(0,util_1$g.useFunc)(a,equal_1$2.default),$0=a.name("outer");a.label($0).for((0,codegen_1$d._)`;${p0}--;`,()=>a.for((0,codegen_1$d._)`${w0} = ${p0}; ${w0}--;`,()=>a.if((0,codegen_1$d._)`${A0}(${c}[${p0}], ${c}[${w0}])`,()=>{o.error(),a.assign(gu,!1).break($0)})))}}};uniqueItems.default=def$j;var _const={};Object.defineProperty(_const,"__esModule",{value:!0});const codegen_1$c=codegen,util_1$f=util,equal_1$1=equal$1,error$b={message:"must be equal to constant",params:({schemaCode:o})=>(0,codegen_1$c._)`{allowedValue: ${o}}`},def$i={keyword:"const",$data:!0,error:error$b,code(o){const{gen:a,data:c,$data:d,schemaCode:tt,schema:nt}=o;d||nt&&typeof nt=="object"?o.fail$data((0,codegen_1$c._)`!${(0,util_1$f.useFunc)(a,equal_1$1.default)}(${c}, ${tt})`):o.fail((0,codegen_1$c._)`${nt} !== ${c}`)}};_const.default=def$i;var _enum={};Object.defineProperty(_enum,"__esModule",{value:!0});const codegen_1$b=codegen,util_1$e=util,equal_1=equal$1,error$a={message:"must be equal to one of the allowed values",params:({schemaCode:o})=>(0,codegen_1$b._)`{allowedValues: ${o}}`},def$h={keyword:"enum",schemaType:"array",$data:!0,error:error$a,code(o){const{gen:a,data:c,$data:d,schema:tt,schemaCode:nt,it:$a}=o;if(!d&&tt.length===0)throw new Error("enum must have non-empty array");const Ys=tt.length>=$a.opts.loopEnum;let gu;const xu=()=>gu??(gu=(0,util_1$e.useFunc)(a,equal_1.default));let $u;if(Ys||d)$u=a.let("valid"),o.block$data($u,Iu);else{if(!Array.isArray(tt))throw new Error("ajv implementation error");const i0=a.const("vSchema",nt);$u=(0,codegen_1$b.or)(...tt.map((p0,w0)=>Xu(i0,w0)))}o.pass($u);function Iu(){a.assign($u,!1),a.forOf("v",nt,i0=>a.if((0,codegen_1$b._)`${xu()}(${c}, ${i0})`,()=>a.assign($u,!0).break()))}function Xu(i0,p0){const w0=tt[p0];return typeof w0=="object"&&w0!==null?(0,codegen_1$b._)`${xu()}(${c}, ${i0}[${p0}])`:(0,codegen_1$b._)`${c} === ${w0}`}}};_enum.default=def$h;Object.defineProperty(validation$1,"__esModule",{value:!0});const limitNumber_1=limitNumber,multipleOf_1=multipleOf,limitLength_1=limitLength,pattern_1=pattern,limitProperties_1=limitProperties,required_1=required$1,limitItems_1=limitItems,uniqueItems_1=uniqueItems,const_1=_const,enum_1=_enum,validation=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},const_1.default,enum_1.default];validation$1.default=validation;var applicator={},additionalItems={};Object.defineProperty(additionalItems,"__esModule",{value:!0});additionalItems.validateAdditionalItems=void 0;const codegen_1$a=codegen,util_1$d=util,error$9={message:({params:{len:o}})=>(0,codegen_1$a.str)`must NOT have more than ${o} items`,params:({params:{len:o}})=>(0,codegen_1$a._)`{limit: ${o}}`},def$g={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:error$9,code(o){const{parentSchema:a,it:c}=o,{items:d}=a;if(!Array.isArray(d)){(0,util_1$d.checkStrictMode)(c,'"additionalItems" is ignored when "items" is not an array of schemas');return}validateAdditionalItems(o,d)}};function validateAdditionalItems(o,a){const{gen:c,schema:d,data:tt,keyword:nt,it:$a}=o;$a.items=!0;const Ys=c.const("len",(0,codegen_1$a._)`${tt}.length`);if(d===!1)o.setParams({len:a.length}),o.pass((0,codegen_1$a._)`${Ys} <= ${a.length}`);else if(typeof d=="object"&&!(0,util_1$d.alwaysValidSchema)($a,d)){const xu=c.var("valid",(0,codegen_1$a._)`${Ys} <= ${a.length}`);c.if((0,codegen_1$a.not)(xu),()=>gu(xu)),o.ok(xu)}function gu(xu){c.forRange("i",a.length,Ys,$u=>{o.subschema({keyword:nt,dataProp:$u,dataPropType:util_1$d.Type.Num},xu),$a.allErrors||c.if((0,codegen_1$a.not)(xu),()=>c.break())})}}additionalItems.validateAdditionalItems=validateAdditionalItems;additionalItems.default=def$g;var prefixItems={},items={};Object.defineProperty(items,"__esModule",{value:!0});items.validateTuple=void 0;const codegen_1$9=codegen,util_1$c=util,code_1$5=code,def$f={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(o){const{schema:a,it:c}=o;if(Array.isArray(a))return validateTuple$1(o,"additionalItems",a);c.items=!0,!(0,util_1$c.alwaysValidSchema)(c,a)&&o.ok((0,code_1$5.validateArray)(o))}};function validateTuple$1(o,a,c=o.schema){const{gen:d,parentSchema:tt,data:nt,keyword:$a,it:Ys}=o;$u(tt),Ys.opts.unevaluated&&c.length&&Ys.items!==!0&&(Ys.items=util_1$c.mergeEvaluated.items(d,c.length,Ys.items));const gu=d.name("valid"),xu=d.const("len",(0,codegen_1$9._)`${nt}.length`);c.forEach((Iu,Xu)=>{(0,util_1$c.alwaysValidSchema)(Ys,Iu)||(d.if((0,codegen_1$9._)`${xu} > ${Xu}`,()=>o.subschema({keyword:$a,schemaProp:Xu,dataProp:Xu},gu)),o.ok(gu))});function $u(Iu){const{opts:Xu,errSchemaPath:i0}=Ys,p0=c.length,w0=p0===Iu.minItems&&(p0===Iu.maxItems||Iu[a]===!1);if(Xu.strictTuples&&!w0){const A0=`"${$a}" is ${p0}-tuple, but minItems or maxItems/${a} are not specified or different at path "${i0}"`;(0,util_1$c.checkStrictMode)(Ys,A0,Xu.strictTuples)}}}items.validateTuple=validateTuple$1;items.default=def$f;Object.defineProperty(prefixItems,"__esModule",{value:!0});const items_1$1=items,def$e={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:o=>(0,items_1$1.validateTuple)(o,"items")};prefixItems.default=def$e;var items2020={};Object.defineProperty(items2020,"__esModule",{value:!0});const codegen_1$8=codegen,util_1$b=util,code_1$4=code,additionalItems_1$1=additionalItems,error$8={message:({params:{len:o}})=>(0,codegen_1$8.str)`must NOT have more than ${o} items`,params:({params:{len:o}})=>(0,codegen_1$8._)`{limit: ${o}}`},def$d={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:error$8,code(o){const{schema:a,parentSchema:c,it:d}=o,{prefixItems:tt}=c;d.items=!0,!(0,util_1$b.alwaysValidSchema)(d,a)&&(tt?(0,additionalItems_1$1.validateAdditionalItems)(o,tt):o.ok((0,code_1$4.validateArray)(o)))}};items2020.default=def$d;var contains={};Object.defineProperty(contains,"__esModule",{value:!0});const codegen_1$7=codegen,util_1$a=util,error$7={message:({params:{min:o,max:a}})=>a===void 0?(0,codegen_1$7.str)`must contain at least ${o} valid item(s)`:(0,codegen_1$7.str)`must contain at least ${o} and no more than ${a} valid item(s)`,params:({params:{min:o,max:a}})=>a===void 0?(0,codegen_1$7._)`{minContains: ${o}}`:(0,codegen_1$7._)`{minContains: ${o}, maxContains: ${a}}`},def$c={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:error$7,code(o){const{gen:a,schema:c,parentSchema:d,data:tt,it:nt}=o;let $a,Ys;const{minContains:gu,maxContains:xu}=d;nt.opts.next?($a=gu===void 0?1:gu,Ys=xu):$a=1;const $u=a.const("len",(0,codegen_1$7._)`${tt}.length`);if(o.setParams({min:$a,max:Ys}),Ys===void 0&&$a===0){(0,util_1$a.checkStrictMode)(nt,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(Ys!==void 0&&$a>Ys){(0,util_1$a.checkStrictMode)(nt,'"minContains" > "maxContains" is always invalid'),o.fail();return}if((0,util_1$a.alwaysValidSchema)(nt,c)){let w0=(0,codegen_1$7._)`${$u} >= ${$a}`;Ys!==void 0&&(w0=(0,codegen_1$7._)`${w0} && ${$u} <= ${Ys}`),o.pass(w0);return}nt.items=!0;const Iu=a.name("valid");Ys===void 0&&$a===1?i0(Iu,()=>a.if(Iu,()=>a.break())):$a===0?(a.let(Iu,!0),Ys!==void 0&&a.if((0,codegen_1$7._)`${tt}.length > 0`,Xu)):(a.let(Iu,!1),Xu()),o.result(Iu,()=>o.reset());function Xu(){const w0=a.name("_valid"),A0=a.let("count",0);i0(w0,()=>a.if(w0,()=>p0(A0)))}function i0(w0,A0){a.forRange("i",0,$u,$0=>{o.subschema({keyword:"contains",dataProp:$0,dataPropType:util_1$a.Type.Num,compositeRule:!0},w0),A0()})}function p0(w0){a.code((0,codegen_1$7._)`${w0}++`),Ys===void 0?a.if((0,codegen_1$7._)`${w0} >= ${$a}`,()=>a.assign(Iu,!0).break()):(a.if((0,codegen_1$7._)`${w0} > ${Ys}`,()=>a.assign(Iu,!1).break()),$a===1?a.assign(Iu,!0):a.if((0,codegen_1$7._)`${w0} >= ${$a}`,()=>a.assign(Iu,!0)))}}};contains.default=def$c;var dependencies={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.validateSchemaDeps=o.validatePropertyDeps=o.error=void 0;const a=codegen,c=util,d=code;o.error={message:({params:{property:gu,depsCount:xu,deps:$u}})=>{const Iu=xu===1?"property":"properties";return(0,a.str)`must have ${Iu} ${$u} when property ${gu} is present`},params:({params:{property:gu,depsCount:xu,deps:$u,missingProperty:Iu}})=>(0,a._)`{property: ${gu}, + || ${B1} === "boolean" || ${g1} === null`).assign(lv,(0,tt._)`[${g1}]`)}}}function r0({gen:L0,parentData:V0,parentDataProperty:F0},u1){L0.if((0,tt._)`${V0} !== undefined`,()=>L0.assign((0,tt._)`${V0}[${F0}]`,u1))}function p0(L0,V0,F0,u1=$a.Correct){const g1=u1===$a.Correct?tt.operators.EQ:tt.operators.NEQ;let E1;switch(L0){case"null":return(0,tt._)`${V0} ${g1} null`;case"array":E1=(0,tt._)`Array.isArray(${V0})`;break;case"object":E1=(0,tt._)`${V0} && typeof ${V0} == "object" && !Array.isArray(${V0})`;break;case"integer":E1=B1((0,tt._)`!(${V0} % 1) && !isNaN(${V0})`);break;case"number":E1=B1();break;default:return(0,tt._)`typeof ${V0} ${g1} ${L0}`}return u1===$a.Correct?E1:(0,tt.not)(E1);function B1(lv=tt.nil){return(0,tt.and)((0,tt._)`typeof ${V0} == "number"`,lv,F0?(0,tt._)`isFinite(${V0})`:tt.nil)}}o.checkDataType=p0;function y0(L0,V0,F0,u1){if(L0.length===1)return p0(L0[0],V0,F0,u1);let g1;const E1=(0,nt.toHash)(L0);if(E1.array&&E1.object){const B1=(0,tt._)`typeof ${V0} != "object"`;g1=E1.null?B1:(0,tt._)`!${V0} || ${B1}`,delete E1.null,delete E1.array,delete E1.object}else g1=tt.nil;E1.number&&delete E1.integer;for(const B1 in E1)g1=(0,tt.and)(g1,p0(B1,V0,F0,u1));return g1}o.checkDataTypes=y0;const A0={message:({schema:L0})=>`must be ${L0}`,params:({schema:L0,schemaValue:V0})=>typeof L0=="string"?(0,tt._)`{type: ${L0}}`:(0,tt._)`{type: ${V0}}`};function $0(L0){const V0=O0(L0);(0,d.reportError)(V0,A0)}o.reportTypeError=$0;function O0(L0){const{gen:V0,data:F0,schema:u1}=L0,g1=(0,nt.schemaRefOrVal)(L0,u1,"type");return{gen:V0,keyword:"type",data:F0,schema:u1.type,schemaCode:g1,schemaValue:g1,parentSchema:u1,params:{},it:L0}}})(dataType);var defaults={};Object.defineProperty(defaults,"__esModule",{value:!0});defaults.assignDefaults=void 0;const codegen_1$r=codegen,util_1$p=util;function assignDefaults(o,a){const{properties:c,items:d}=o.schema;if(a==="object"&&c)for(const tt in c)assignDefault(o,tt,c[tt].default);else a==="array"&&Array.isArray(d)&&d.forEach((tt,nt)=>assignDefault(o,nt,tt.default))}defaults.assignDefaults=assignDefaults;function assignDefault(o,a,c){const{gen:d,compositeRule:tt,data:nt,opts:$a}=o;if(c===void 0)return;const Ws=(0,codegen_1$r._)`${nt}${(0,codegen_1$r.getProperty)(a)}`;if(tt){(0,util_1$p.checkStrictMode)(o,`default is ignored for: ${Ws}`);return}let gu=(0,codegen_1$r._)`${Ws} === undefined`;$a.useDefaults==="empty"&&(gu=(0,codegen_1$r._)`${gu} || ${Ws} === null || ${Ws} === ""`),d.if(gu,(0,codegen_1$r._)`${Ws} = ${(0,codegen_1$r.stringify)(c)}`)}var keyword={},code={};Object.defineProperty(code,"__esModule",{value:!0});code.validateUnion=code.validateArray=code.usePattern=code.callValidateCode=code.schemaProperties=code.allSchemaProperties=code.noPropertyInData=code.propertyInData=code.isOwnProperty=code.hasPropFunc=code.reportMissingProp=code.checkMissingProp=code.checkReportMissingProp=void 0;const codegen_1$q=codegen,util_1$o=util,names_1$5=names$1,util_2$1=util;function checkReportMissingProp(o,a){const{gen:c,data:d,it:tt}=o;c.if(noPropertyInData(c,d,a,tt.opts.ownProperties),()=>{o.setParams({missingProperty:(0,codegen_1$q._)`${a}`},!0),o.error()})}code.checkReportMissingProp=checkReportMissingProp;function checkMissingProp({gen:o,data:a,it:{opts:c}},d,tt){return(0,codegen_1$q.or)(...d.map(nt=>(0,codegen_1$q.and)(noPropertyInData(o,a,nt,c.ownProperties),(0,codegen_1$q._)`${tt} = ${nt}`)))}code.checkMissingProp=checkMissingProp;function reportMissingProp(o,a){o.setParams({missingProperty:a},!0),o.error()}code.reportMissingProp=reportMissingProp;function hasPropFunc(o){return o.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,codegen_1$q._)`Object.prototype.hasOwnProperty`})}code.hasPropFunc=hasPropFunc;function isOwnProperty(o,a,c){return(0,codegen_1$q._)`${hasPropFunc(o)}.call(${a}, ${c})`}code.isOwnProperty=isOwnProperty;function propertyInData(o,a,c,d){const tt=(0,codegen_1$q._)`${a}${(0,codegen_1$q.getProperty)(c)} !== undefined`;return d?(0,codegen_1$q._)`${tt} && ${isOwnProperty(o,a,c)}`:tt}code.propertyInData=propertyInData;function noPropertyInData(o,a,c,d){const tt=(0,codegen_1$q._)`${a}${(0,codegen_1$q.getProperty)(c)} === undefined`;return d?(0,codegen_1$q.or)(tt,(0,codegen_1$q.not)(isOwnProperty(o,a,c))):tt}code.noPropertyInData=noPropertyInData;function allSchemaProperties(o){return o?Object.keys(o).filter(a=>a!=="__proto__"):[]}code.allSchemaProperties=allSchemaProperties;function schemaProperties(o,a){return allSchemaProperties(a).filter(c=>!(0,util_1$o.alwaysValidSchema)(o,a[c]))}code.schemaProperties=schemaProperties;function callValidateCode({schemaCode:o,data:a,it:{gen:c,topSchemaRef:d,schemaPath:tt,errorPath:nt},it:$a},Ws,gu,Su){const $u=Su?(0,codegen_1$q._)`${o}, ${a}, ${d}${tt}`:a,Iu=[[names_1$5.default.instancePath,(0,codegen_1$q.strConcat)(names_1$5.default.instancePath,nt)],[names_1$5.default.parentData,$a.parentData],[names_1$5.default.parentDataProperty,$a.parentDataProperty],[names_1$5.default.rootData,names_1$5.default.rootData]];$a.opts.dynamicRef&&Iu.push([names_1$5.default.dynamicAnchors,names_1$5.default.dynamicAnchors]);const Xu=(0,codegen_1$q._)`${$u}, ${c.object(...Iu)}`;return gu!==codegen_1$q.nil?(0,codegen_1$q._)`${Ws}.call(${gu}, ${Xu})`:(0,codegen_1$q._)`${Ws}(${Xu})`}code.callValidateCode=callValidateCode;const newRegExp=(0,codegen_1$q._)`new RegExp`;function usePattern({gen:o,it:{opts:a}},c){const d=a.unicodeRegExp?"u":"",{regExp:tt}=a.code,nt=tt(c,d);return o.scopeValue("pattern",{key:nt.toString(),ref:nt,code:(0,codegen_1$q._)`${tt.code==="new RegExp"?newRegExp:(0,util_2$1.useFunc)(o,tt)}(${c}, ${d})`})}code.usePattern=usePattern;function validateArray$1(o){const{gen:a,data:c,keyword:d,it:tt}=o,nt=a.name("valid");if(tt.allErrors){const Ws=a.let("valid",!0);return $a(()=>a.assign(Ws,!1)),Ws}return a.var(nt,!0),$a(()=>a.break()),nt;function $a(Ws){const gu=a.const("len",(0,codegen_1$q._)`${c}.length`);a.forRange("i",0,gu,Su=>{o.subschema({keyword:d,dataProp:Su,dataPropType:util_1$o.Type.Num},nt),a.if((0,codegen_1$q.not)(nt),Ws)})}}code.validateArray=validateArray$1;function validateUnion(o){const{gen:a,schema:c,keyword:d,it:tt}=o;if(!Array.isArray(c))throw new Error("ajv implementation error");if(c.some(gu=>(0,util_1$o.alwaysValidSchema)(tt,gu))&&!tt.opts.unevaluated)return;const $a=a.let("valid",!1),Ws=a.name("_valid");a.block(()=>c.forEach((gu,Su)=>{const $u=o.subschema({keyword:d,schemaProp:Su,compositeRule:!0},Ws);a.assign($a,(0,codegen_1$q._)`${$a} || ${Ws}`),o.mergeValidEvaluated($u,Ws)||a.if((0,codegen_1$q.not)($a))})),o.result($a,()=>o.reset(),()=>o.error(!0))}code.validateUnion=validateUnion;Object.defineProperty(keyword,"__esModule",{value:!0});keyword.validateKeywordUsage=keyword.validSchemaType=keyword.funcKeywordCode=keyword.macroKeywordCode=void 0;const codegen_1$p=codegen,names_1$4=names$1,code_1$9=code,errors_1$2=errors$2;function macroKeywordCode(o,a){const{gen:c,keyword:d,schema:tt,parentSchema:nt,it:$a}=o,Ws=a.macro.call($a.self,tt,nt,$a),gu=useKeyword(c,d,Ws);$a.opts.validateSchema!==!1&&$a.self.validateSchema(Ws,!0);const Su=c.name("valid");o.subschema({schema:Ws,schemaPath:codegen_1$p.nil,errSchemaPath:`${$a.errSchemaPath}/${d}`,topSchemaRef:gu,compositeRule:!0},Su),o.pass(Su,()=>o.error(!0))}keyword.macroKeywordCode=macroKeywordCode;function funcKeywordCode(o,a){var c;const{gen:d,keyword:tt,schema:nt,parentSchema:$a,$data:Ws,it:gu}=o;checkAsyncKeyword(gu,a);const Su=!Ws&&a.compile?a.compile.call(gu.self,nt,$a,gu):a.validate,$u=useKeyword(d,tt,Su),Iu=d.let("valid");o.block$data(Iu,Xu),o.ok((c=a.valid)!==null&&c!==void 0?c:Iu);function Xu(){if(a.errors===!1)y0(),a.modifying&&modifyData(o),A0(()=>o.error());else{const $0=a.async?r0():p0();a.modifying&&modifyData(o),A0(()=>addErrs(o,$0))}}function r0(){const $0=d.let("ruleErrs",null);return d.try(()=>y0((0,codegen_1$p._)`await `),O0=>d.assign(Iu,!1).if((0,codegen_1$p._)`${O0} instanceof ${gu.ValidationError}`,()=>d.assign($0,(0,codegen_1$p._)`${O0}.errors`),()=>d.throw(O0))),$0}function p0(){const $0=(0,codegen_1$p._)`${$u}.errors`;return d.assign($0,null),y0(codegen_1$p.nil),$0}function y0($0=a.async?(0,codegen_1$p._)`await `:codegen_1$p.nil){const O0=gu.opts.passContext?names_1$4.default.this:names_1$4.default.self,L0=!("compile"in a&&!Ws||a.schema===!1);d.assign(Iu,(0,codegen_1$p._)`${$0}${(0,code_1$9.callValidateCode)(o,$u,O0,L0)}`,a.modifying)}function A0($0){var O0;d.if((0,codegen_1$p.not)((O0=a.valid)!==null&&O0!==void 0?O0:Iu),$0)}}keyword.funcKeywordCode=funcKeywordCode;function modifyData(o){const{gen:a,data:c,it:d}=o;a.if(d.parentData,()=>a.assign(c,(0,codegen_1$p._)`${d.parentData}[${d.parentDataProperty}]`))}function addErrs(o,a){const{gen:c}=o;c.if((0,codegen_1$p._)`Array.isArray(${a})`,()=>{c.assign(names_1$4.default.vErrors,(0,codegen_1$p._)`${names_1$4.default.vErrors} === null ? ${a} : ${names_1$4.default.vErrors}.concat(${a})`).assign(names_1$4.default.errors,(0,codegen_1$p._)`${names_1$4.default.vErrors}.length`),(0,errors_1$2.extendErrors)(o)},()=>o.error())}function checkAsyncKeyword({schemaEnv:o},a){if(a.async&&!o.$async)throw new Error("async keyword in sync schema")}function useKeyword(o,a,c){if(c===void 0)throw new Error(`keyword "${a}" failed to compile`);return o.scopeValue("keyword",typeof c=="function"?{ref:c}:{ref:c,code:(0,codegen_1$p.stringify)(c)})}function validSchemaType(o,a,c=!1){return!a.length||a.some(d=>d==="array"?Array.isArray(o):d==="object"?o&&typeof o=="object"&&!Array.isArray(o):typeof o==d||c&&typeof o>"u")}keyword.validSchemaType=validSchemaType;function validateKeywordUsage({schema:o,opts:a,self:c,errSchemaPath:d},tt,nt){if(Array.isArray(tt.keyword)?!tt.keyword.includes(nt):tt.keyword!==nt)throw new Error("ajv implementation error");const $a=tt.dependencies;if($a!=null&&$a.some(Ws=>!Object.prototype.hasOwnProperty.call(o,Ws)))throw new Error(`parent schema must have dependencies of ${nt}: ${$a.join(",")}`);if(tt.validateSchema&&!tt.validateSchema(o[nt])){const gu=`keyword "${nt}" value is invalid at path "${d}": `+c.errorsText(tt.validateSchema.errors);if(a.validateSchema==="log")c.logger.error(gu);else throw new Error(gu)}}keyword.validateKeywordUsage=validateKeywordUsage;var subschema={};Object.defineProperty(subschema,"__esModule",{value:!0});subschema.extendSubschemaMode=subschema.extendSubschemaData=subschema.getSubschema=void 0;const codegen_1$o=codegen,util_1$n=util;function getSubschema(o,{keyword:a,schemaProp:c,schema:d,schemaPath:tt,errSchemaPath:nt,topSchemaRef:$a}){if(a!==void 0&&d!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(a!==void 0){const Ws=o.schema[a];return c===void 0?{schema:Ws,schemaPath:(0,codegen_1$o._)`${o.schemaPath}${(0,codegen_1$o.getProperty)(a)}`,errSchemaPath:`${o.errSchemaPath}/${a}`}:{schema:Ws[c],schemaPath:(0,codegen_1$o._)`${o.schemaPath}${(0,codegen_1$o.getProperty)(a)}${(0,codegen_1$o.getProperty)(c)}`,errSchemaPath:`${o.errSchemaPath}/${a}/${(0,util_1$n.escapeFragment)(c)}`}}if(d!==void 0){if(tt===void 0||nt===void 0||$a===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:d,schemaPath:tt,topSchemaRef:$a,errSchemaPath:nt}}throw new Error('either "keyword" or "schema" must be passed')}subschema.getSubschema=getSubschema;function extendSubschemaData(o,a,{dataProp:c,dataPropType:d,data:tt,dataTypes:nt,propertyName:$a}){if(tt!==void 0&&c!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:Ws}=a;if(c!==void 0){const{errorPath:Su,dataPathArr:$u,opts:Iu}=a,Xu=Ws.let("data",(0,codegen_1$o._)`${a.data}${(0,codegen_1$o.getProperty)(c)}`,!0);gu(Xu),o.errorPath=(0,codegen_1$o.str)`${Su}${(0,util_1$n.getErrorPath)(c,d,Iu.jsPropertySyntax)}`,o.parentDataProperty=(0,codegen_1$o._)`${c}`,o.dataPathArr=[...$u,o.parentDataProperty]}if(tt!==void 0){const Su=tt instanceof codegen_1$o.Name?tt:Ws.let("data",tt,!0);gu(Su),$a!==void 0&&(o.propertyName=$a)}nt&&(o.dataTypes=nt);function gu(Su){o.data=Su,o.dataLevel=a.dataLevel+1,o.dataTypes=[],a.definedProperties=new Set,o.parentData=a.data,o.dataNames=[...a.dataNames,Su]}}subschema.extendSubschemaData=extendSubschemaData;function extendSubschemaMode(o,{jtdDiscriminator:a,jtdMetadata:c,compositeRule:d,createErrors:tt,allErrors:nt}){d!==void 0&&(o.compositeRule=d),tt!==void 0&&(o.createErrors=tt),nt!==void 0&&(o.allErrors=nt),o.jtdDiscriminator=a,o.jtdMetadata=c}subschema.extendSubschemaMode=extendSubschemaMode;var resolve$2={},fastDeepEqual=function o(a,c){if(a===c)return!0;if(a&&c&&typeof a=="object"&&typeof c=="object"){if(a.constructor!==c.constructor)return!1;var d,tt,nt;if(Array.isArray(a)){if(d=a.length,d!=c.length)return!1;for(tt=d;tt--!==0;)if(!o(a[tt],c[tt]))return!1;return!0}if(a.constructor===RegExp)return a.source===c.source&&a.flags===c.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===c.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===c.toString();if(nt=Object.keys(a),d=nt.length,d!==Object.keys(c).length)return!1;for(tt=d;tt--!==0;)if(!Object.prototype.hasOwnProperty.call(c,nt[tt]))return!1;for(tt=d;tt--!==0;){var $a=nt[tt];if(!o(a[$a],c[$a]))return!1}return!0}return a!==a&&c!==c},jsonSchemaTraverse={exports:{}},traverse$1=jsonSchemaTraverse.exports=function(o,a,c){typeof a=="function"&&(c=a,a={}),c=a.cb||c;var d=typeof c=="function"?c:c.pre||function(){},tt=c.post||function(){};_traverse(a,d,tt,o,"",o)};traverse$1.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};traverse$1.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};traverse$1.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};traverse$1.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function _traverse(o,a,c,d,tt,nt,$a,Ws,gu,Su){if(d&&typeof d=="object"&&!Array.isArray(d)){a(d,tt,nt,$a,Ws,gu,Su);for(var $u in d){var Iu=d[$u];if(Array.isArray(Iu)){if($u in traverse$1.arrayKeywords)for(var Xu=0;Xua+=countKeys(d)),a===1/0))return 1/0}return a}function getFullPath(o,a="",c){c!==!1&&(a=normalizeId(a));const d=o.parse(a);return _getFullPath(o,d)}resolve$2.getFullPath=getFullPath;function _getFullPath(o,a){return o.serialize(a).split("#")[0]+"#"}resolve$2._getFullPath=_getFullPath;const TRAILING_SLASH_HASH=/#\/?$/;function normalizeId(o){return o?o.replace(TRAILING_SLASH_HASH,""):""}resolve$2.normalizeId=normalizeId;function resolveUrl(o,a,c){return c=normalizeId(c),o.resolve(a,c)}resolve$2.resolveUrl=resolveUrl;const ANCHOR=/^[a-z_][-a-z0-9._]*$/i;function getSchemaRefs(o,a){if(typeof o=="boolean")return{};const{schemaId:c,uriResolver:d}=this.opts,tt=normalizeId(o[c]||a),nt={"":tt},$a=getFullPath(d,tt,!1),Ws={},gu=new Set;return traverse(o,{allKeys:!0},(Iu,Xu,r0,p0)=>{if(p0===void 0)return;const y0=$a+Xu;let A0=nt[p0];typeof Iu[c]=="string"&&(A0=$0.call(this,Iu[c])),O0.call(this,Iu.$anchor),O0.call(this,Iu.$dynamicAnchor),nt[Xu]=A0;function $0(L0){const V0=this.opts.uriResolver.resolve;if(L0=normalizeId(A0?V0(A0,L0):L0),gu.has(L0))throw $u(L0);gu.add(L0);let F0=this.refs[L0];return typeof F0=="string"&&(F0=this.refs[F0]),typeof F0=="object"?Su(Iu,F0.schema,L0):L0!==normalizeId(y0)&&(L0[0]==="#"?(Su(Iu,Ws[L0],L0),Ws[L0]=Iu):this.refs[L0]=y0),L0}function O0(L0){if(typeof L0=="string"){if(!ANCHOR.test(L0))throw new Error(`invalid anchor "${L0}"`);$0.call(this,`#${L0}`)}}}),Ws;function Su(Iu,Xu,r0){if(Xu!==void 0&&!equal$2(Iu,Xu))throw $u(r0)}function $u(Iu){return new Error(`reference "${Iu}" resolves to more than one schema`)}}resolve$2.getSchemaRefs=getSchemaRefs;Object.defineProperty(validate$1,"__esModule",{value:!0});validate$1.getData=validate$1.KeywordCxt=validate$1.validateFunctionCode=void 0;const boolSchema_1=boolSchema,dataType_1$1=dataType,applicability_1=applicability,dataType_2=dataType,defaults_1=defaults,keyword_1=keyword,subschema_1=subschema,codegen_1$n=codegen,names_1$3=names$1,resolve_1$2=resolve$2,util_1$l=util,errors_1$1=errors$2;function validateFunctionCode(o){if(isSchemaObj(o)&&(checkKeywords(o),schemaCxtHasRules(o))){topSchemaObjCode(o);return}validateFunction(o,()=>(0,boolSchema_1.topBoolOrEmptySchema)(o))}validate$1.validateFunctionCode=validateFunctionCode;function validateFunction({gen:o,validateName:a,schema:c,schemaEnv:d,opts:tt},nt){tt.code.es5?o.func(a,(0,codegen_1$n._)`${names_1$3.default.data}, ${names_1$3.default.valCxt}`,d.$async,()=>{o.code((0,codegen_1$n._)`"use strict"; ${funcSourceUrl(c,tt)}`),destructureValCxtES5(o,tt),o.code(nt)}):o.func(a,(0,codegen_1$n._)`${names_1$3.default.data}, ${destructureValCxt(tt)}`,d.$async,()=>o.code(funcSourceUrl(c,tt)).code(nt))}function destructureValCxt(o){return(0,codegen_1$n._)`{${names_1$3.default.instancePath}="", ${names_1$3.default.parentData}, ${names_1$3.default.parentDataProperty}, ${names_1$3.default.rootData}=${names_1$3.default.data}${o.dynamicRef?(0,codegen_1$n._)`, ${names_1$3.default.dynamicAnchors}={}`:codegen_1$n.nil}}={}`}function destructureValCxtES5(o,a){o.if(names_1$3.default.valCxt,()=>{o.var(names_1$3.default.instancePath,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.instancePath}`),o.var(names_1$3.default.parentData,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.parentData}`),o.var(names_1$3.default.parentDataProperty,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.parentDataProperty}`),o.var(names_1$3.default.rootData,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.rootData}`),a.dynamicRef&&o.var(names_1$3.default.dynamicAnchors,(0,codegen_1$n._)`${names_1$3.default.valCxt}.${names_1$3.default.dynamicAnchors}`)},()=>{o.var(names_1$3.default.instancePath,(0,codegen_1$n._)`""`),o.var(names_1$3.default.parentData,(0,codegen_1$n._)`undefined`),o.var(names_1$3.default.parentDataProperty,(0,codegen_1$n._)`undefined`),o.var(names_1$3.default.rootData,names_1$3.default.data),a.dynamicRef&&o.var(names_1$3.default.dynamicAnchors,(0,codegen_1$n._)`{}`)})}function topSchemaObjCode(o){const{schema:a,opts:c,gen:d}=o;validateFunction(o,()=>{c.$comment&&a.$comment&&commentKeyword(o),checkNoDefault(o),d.let(names_1$3.default.vErrors,null),d.let(names_1$3.default.errors,0),c.unevaluated&&resetEvaluated(o),typeAndKeywords(o),returnResults(o)})}function resetEvaluated(o){const{gen:a,validateName:c}=o;o.evaluated=a.const("evaluated",(0,codegen_1$n._)`${c}.evaluated`),a.if((0,codegen_1$n._)`${o.evaluated}.dynamicProps`,()=>a.assign((0,codegen_1$n._)`${o.evaluated}.props`,(0,codegen_1$n._)`undefined`)),a.if((0,codegen_1$n._)`${o.evaluated}.dynamicItems`,()=>a.assign((0,codegen_1$n._)`${o.evaluated}.items`,(0,codegen_1$n._)`undefined`))}function funcSourceUrl(o,a){const c=typeof o=="object"&&o[a.schemaId];return c&&(a.code.source||a.code.process)?(0,codegen_1$n._)`/*# sourceURL=${c} */`:codegen_1$n.nil}function subschemaCode(o,a){if(isSchemaObj(o)&&(checkKeywords(o),schemaCxtHasRules(o))){subSchemaObjCode(o,a);return}(0,boolSchema_1.boolOrEmptySchema)(o,a)}function schemaCxtHasRules({schema:o,self:a}){if(typeof o=="boolean")return!o;for(const c in o)if(a.RULES.all[c])return!0;return!1}function isSchemaObj(o){return typeof o.schema!="boolean"}function subSchemaObjCode(o,a){const{schema:c,gen:d,opts:tt}=o;tt.$comment&&c.$comment&&commentKeyword(o),updateContext(o),checkAsyncSchema(o);const nt=d.const("_errs",names_1$3.default.errors);typeAndKeywords(o,nt),d.var(a,(0,codegen_1$n._)`${nt} === ${names_1$3.default.errors}`)}function checkKeywords(o){(0,util_1$l.checkUnknownRules)(o),checkRefsAndKeywords(o)}function typeAndKeywords(o,a){if(o.opts.jtd)return schemaKeywords(o,[],!1,a);const c=(0,dataType_1$1.getSchemaTypes)(o.schema),d=(0,dataType_1$1.coerceAndCheckDataType)(o,c);schemaKeywords(o,c,!d,a)}function checkRefsAndKeywords(o){const{schema:a,errSchemaPath:c,opts:d,self:tt}=o;a.$ref&&d.ignoreKeywordsWithRef&&(0,util_1$l.schemaHasRulesButRef)(a,tt.RULES)&&tt.logger.warn(`$ref: keywords ignored in schema at path "${c}"`)}function checkNoDefault(o){const{schema:a,opts:c}=o;a.default!==void 0&&c.useDefaults&&c.strictSchema&&(0,util_1$l.checkStrictMode)(o,"default is ignored in the schema root")}function updateContext(o){const a=o.schema[o.opts.schemaId];a&&(o.baseId=(0,resolve_1$2.resolveUrl)(o.opts.uriResolver,o.baseId,a))}function checkAsyncSchema(o){if(o.schema.$async&&!o.schemaEnv.$async)throw new Error("async schema in sync schema")}function commentKeyword({gen:o,schemaEnv:a,schema:c,errSchemaPath:d,opts:tt}){const nt=c.$comment;if(tt.$comment===!0)o.code((0,codegen_1$n._)`${names_1$3.default.self}.logger.log(${nt})`);else if(typeof tt.$comment=="function"){const $a=(0,codegen_1$n.str)`${d}/$comment`,Ws=o.scopeValue("root",{ref:a.root});o.code((0,codegen_1$n._)`${names_1$3.default.self}.opts.$comment(${nt}, ${$a}, ${Ws}.schema)`)}}function returnResults(o){const{gen:a,schemaEnv:c,validateName:d,ValidationError:tt,opts:nt}=o;c.$async?a.if((0,codegen_1$n._)`${names_1$3.default.errors} === 0`,()=>a.return(names_1$3.default.data),()=>a.throw((0,codegen_1$n._)`new ${tt}(${names_1$3.default.vErrors})`)):(a.assign((0,codegen_1$n._)`${d}.errors`,names_1$3.default.vErrors),nt.unevaluated&&assignEvaluated(o),a.return((0,codegen_1$n._)`${names_1$3.default.errors} === 0`))}function assignEvaluated({gen:o,evaluated:a,props:c,items:d}){c instanceof codegen_1$n.Name&&o.assign((0,codegen_1$n._)`${a}.props`,c),d instanceof codegen_1$n.Name&&o.assign((0,codegen_1$n._)`${a}.items`,d)}function schemaKeywords(o,a,c,d){const{gen:tt,schema:nt,data:$a,allErrors:Ws,opts:gu,self:Su}=o,{RULES:$u}=Su;if(nt.$ref&&(gu.ignoreKeywordsWithRef||!(0,util_1$l.schemaHasRulesButRef)(nt,$u))){tt.block(()=>keywordCode(o,"$ref",$u.all.$ref.definition));return}gu.jtd||checkStrictTypes(o,a),tt.block(()=>{for(const Xu of $u.rules)Iu(Xu);Iu($u.post)});function Iu(Xu){(0,applicability_1.shouldUseGroup)(nt,Xu)&&(Xu.type?(tt.if((0,dataType_2.checkDataType)(Xu.type,$a,gu.strictNumbers)),iterateKeywords(o,Xu),a.length===1&&a[0]===Xu.type&&c&&(tt.else(),(0,dataType_2.reportTypeError)(o)),tt.endIf()):iterateKeywords(o,Xu),Ws||tt.if((0,codegen_1$n._)`${names_1$3.default.errors} === ${d||0}`))}}function iterateKeywords(o,a){const{gen:c,schema:d,opts:{useDefaults:tt}}=o;tt&&(0,defaults_1.assignDefaults)(o,a.type),c.block(()=>{for(const nt of a.rules)(0,applicability_1.shouldUseRule)(d,nt)&&keywordCode(o,nt.keyword,nt.definition,a.type)})}function checkStrictTypes(o,a){o.schemaEnv.meta||!o.opts.strictTypes||(checkContextTypes(o,a),o.opts.allowUnionTypes||checkMultipleTypes(o,a),checkKeywordTypes(o,o.dataTypes))}function checkContextTypes(o,a){if(a.length){if(!o.dataTypes.length){o.dataTypes=a;return}a.forEach(c=>{includesType(o.dataTypes,c)||strictTypesError(o,`type "${c}" not allowed by context "${o.dataTypes.join(",")}"`)}),o.dataTypes=o.dataTypes.filter(c=>includesType(a,c))}}function checkMultipleTypes(o,a){a.length>1&&!(a.length===2&&a.includes("null"))&&strictTypesError(o,"use allowUnionTypes to allow union type keyword")}function checkKeywordTypes(o,a){const c=o.self.RULES.all;for(const d in c){const tt=c[d];if(typeof tt=="object"&&(0,applicability_1.shouldUseRule)(o.schema,tt)){const{type:nt}=tt.definition;nt.length&&!nt.some($a=>hasApplicableType(a,$a))&&strictTypesError(o,`missing type "${nt.join(",")}" for keyword "${d}"`)}}}function hasApplicableType(o,a){return o.includes(a)||a==="number"&&o.includes("integer")}function includesType(o,a){return o.includes(a)||a==="integer"&&o.includes("number")}function strictTypesError(o,a){const c=o.schemaEnv.baseId+o.errSchemaPath;a+=` at "${c}" (strictTypes)`,(0,util_1$l.checkStrictMode)(o,a,o.opts.strictTypes)}class KeywordCxt{constructor(a,c,d){if((0,keyword_1.validateKeywordUsage)(a,c,d),this.gen=a.gen,this.allErrors=a.allErrors,this.keyword=d,this.data=a.data,this.schema=a.schema[d],this.$data=c.$data&&a.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,util_1$l.schemaRefOrVal)(a,this.schema,d,this.$data),this.schemaType=c.schemaType,this.parentSchema=a.schema,this.params={},this.it=a,this.def=c,this.$data)this.schemaCode=a.gen.const("vSchema",getData(this.$data,a));else if(this.schemaCode=this.schemaValue,!(0,keyword_1.validSchemaType)(this.schema,c.schemaType,c.allowUndefined))throw new Error(`${d} value must be ${JSON.stringify(c.schemaType)}`);("code"in c?c.trackErrors:c.errors!==!1)&&(this.errsCount=a.gen.const("_errs",names_1$3.default.errors))}result(a,c,d){this.failResult((0,codegen_1$n.not)(a),c,d)}failResult(a,c,d){this.gen.if(a),d?d():this.error(),c?(this.gen.else(),c(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(a,c){this.failResult((0,codegen_1$n.not)(a),void 0,c)}fail(a){if(a===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(a),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(a){if(!this.$data)return this.fail(a);const{schemaCode:c}=this;this.fail((0,codegen_1$n._)`${c} !== undefined && (${(0,codegen_1$n.or)(this.invalid$data(),a)})`)}error(a,c,d){if(c){this.setParams(c),this._error(a,d),this.setParams({});return}this._error(a,d)}_error(a,c){(a?errors_1$1.reportExtraError:errors_1$1.reportError)(this,this.def.error,c)}$dataError(){(0,errors_1$1.reportError)(this,this.def.$dataError||errors_1$1.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,errors_1$1.resetErrorsCount)(this.gen,this.errsCount)}ok(a){this.allErrors||this.gen.if(a)}setParams(a,c){c?Object.assign(this.params,a):this.params=a}block$data(a,c,d=codegen_1$n.nil){this.gen.block(()=>{this.check$data(a,d),c()})}check$data(a=codegen_1$n.nil,c=codegen_1$n.nil){if(!this.$data)return;const{gen:d,schemaCode:tt,schemaType:nt,def:$a}=this;d.if((0,codegen_1$n.or)((0,codegen_1$n._)`${tt} === undefined`,c)),a!==codegen_1$n.nil&&d.assign(a,!0),(nt.length||$a.validateSchema)&&(d.elseIf(this.invalid$data()),this.$dataError(),a!==codegen_1$n.nil&&d.assign(a,!1)),d.else()}invalid$data(){const{gen:a,schemaCode:c,schemaType:d,def:tt,it:nt}=this;return(0,codegen_1$n.or)($a(),Ws());function $a(){if(d.length){if(!(c instanceof codegen_1$n.Name))throw new Error("ajv implementation error");const gu=Array.isArray(d)?d:[d];return(0,codegen_1$n._)`${(0,dataType_2.checkDataTypes)(gu,c,nt.opts.strictNumbers,dataType_2.DataType.Wrong)}`}return codegen_1$n.nil}function Ws(){if(tt.validateSchema){const gu=a.scopeValue("validate$data",{ref:tt.validateSchema});return(0,codegen_1$n._)`!${gu}(${c})`}return codegen_1$n.nil}}subschema(a,c){const d=(0,subschema_1.getSubschema)(this.it,a);(0,subschema_1.extendSubschemaData)(d,this.it,a),(0,subschema_1.extendSubschemaMode)(d,a);const tt={...this.it,...d,items:void 0,props:void 0};return subschemaCode(tt,c),tt}mergeEvaluated(a,c){const{it:d,gen:tt}=this;d.opts.unevaluated&&(d.props!==!0&&a.props!==void 0&&(d.props=util_1$l.mergeEvaluated.props(tt,a.props,d.props,c)),d.items!==!0&&a.items!==void 0&&(d.items=util_1$l.mergeEvaluated.items(tt,a.items,d.items,c)))}mergeValidEvaluated(a,c){const{it:d,gen:tt}=this;if(d.opts.unevaluated&&(d.props!==!0||d.items!==!0))return tt.if(c,()=>this.mergeEvaluated(a,codegen_1$n.Name)),!0}}validate$1.KeywordCxt=KeywordCxt;function keywordCode(o,a,c,d){const tt=new KeywordCxt(o,c,a);"code"in c?c.code(tt,d):tt.$data&&c.validate?(0,keyword_1.funcKeywordCode)(tt,c):"macro"in c?(0,keyword_1.macroKeywordCode)(tt,c):(c.compile||c.validate)&&(0,keyword_1.funcKeywordCode)(tt,c)}const JSON_POINTER=/^\/(?:[^~]|~0|~1)*$/,RELATIVE_JSON_POINTER=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function getData(o,{dataLevel:a,dataNames:c,dataPathArr:d}){let tt,nt;if(o==="")return names_1$3.default.rootData;if(o[0]==="/"){if(!JSON_POINTER.test(o))throw new Error(`Invalid JSON-pointer: ${o}`);tt=o,nt=names_1$3.default.rootData}else{const Su=RELATIVE_JSON_POINTER.exec(o);if(!Su)throw new Error(`Invalid JSON-pointer: ${o}`);const $u=+Su[1];if(tt=Su[2],tt==="#"){if($u>=a)throw new Error(gu("property/index",$u));return d[a-$u]}if($u>a)throw new Error(gu("data",$u));if(nt=c[a-$u],!tt)return nt}let $a=nt;const Ws=tt.split("/");for(const Su of Ws)Su&&(nt=(0,codegen_1$n._)`${nt}${(0,codegen_1$n.getProperty)((0,util_1$l.unescapeJsonPointer)(Su))}`,$a=(0,codegen_1$n._)`${$a} && ${nt}`);return $a;function gu(Su,$u){return`Cannot access ${Su} ${$u} levels up, current level is ${a}`}}validate$1.getData=getData;var validation_error={};Object.defineProperty(validation_error,"__esModule",{value:!0});class ValidationError extends Error{constructor(a){super("validation failed"),this.errors=a,this.ajv=this.validation=!0}}validation_error.default=ValidationError;var ref_error={};Object.defineProperty(ref_error,"__esModule",{value:!0});const resolve_1$1=resolve$2;class MissingRefError extends Error{constructor(a,c,d,tt){super(tt||`can't resolve reference ${d} from id ${c}`),this.missingRef=(0,resolve_1$1.resolveUrl)(a,c,d),this.missingSchema=(0,resolve_1$1.normalizeId)((0,resolve_1$1.getFullPath)(a,this.missingRef))}}ref_error.default=MissingRefError;var compile={};Object.defineProperty(compile,"__esModule",{value:!0});compile.resolveSchema=compile.getCompilingSchema=compile.resolveRef=compile.compileSchema=compile.SchemaEnv=void 0;const codegen_1$m=codegen,validation_error_1=validation_error,names_1$2=names$1,resolve_1=resolve$2,util_1$k=util,validate_1$1=validate$1;class SchemaEnv{constructor(a){var c;this.refs={},this.dynamicAnchors={};let d;typeof a.schema=="object"&&(d=a.schema),this.schema=a.schema,this.schemaId=a.schemaId,this.root=a.root||this,this.baseId=(c=a.baseId)!==null&&c!==void 0?c:(0,resolve_1.normalizeId)(d==null?void 0:d[a.schemaId||"$id"]),this.schemaPath=a.schemaPath,this.localRefs=a.localRefs,this.meta=a.meta,this.$async=d==null?void 0:d.$async,this.refs={}}}compile.SchemaEnv=SchemaEnv;function compileSchema(o){const a=getCompilingSchema.call(this,o);if(a)return a;const c=(0,resolve_1.getFullPath)(this.opts.uriResolver,o.root.baseId),{es5:d,lines:tt}=this.opts.code,{ownProperties:nt}=this.opts,$a=new codegen_1$m.CodeGen(this.scope,{es5:d,lines:tt,ownProperties:nt});let Ws;o.$async&&(Ws=$a.scopeValue("Error",{ref:validation_error_1.default,code:(0,codegen_1$m._)`require("ajv/dist/runtime/validation_error").default`}));const gu=$a.scopeName("validate");o.validateName=gu;const Su={gen:$a,allErrors:this.opts.allErrors,data:names_1$2.default.data,parentData:names_1$2.default.parentData,parentDataProperty:names_1$2.default.parentDataProperty,dataNames:[names_1$2.default.data],dataPathArr:[codegen_1$m.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:$a.scopeValue("schema",this.opts.code.source===!0?{ref:o.schema,code:(0,codegen_1$m.stringify)(o.schema)}:{ref:o.schema}),validateName:gu,ValidationError:Ws,schema:o.schema,schemaEnv:o,rootId:c,baseId:o.baseId||c,schemaPath:codegen_1$m.nil,errSchemaPath:o.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,codegen_1$m._)`""`,opts:this.opts,self:this};let $u;try{this._compilations.add(o),(0,validate_1$1.validateFunctionCode)(Su),$a.optimize(this.opts.code.optimize);const Iu=$a.toString();$u=`${$a.scopeRefs(names_1$2.default.scope)}return ${Iu}`,this.opts.code.process&&($u=this.opts.code.process($u,o));const r0=new Function(`${names_1$2.default.self}`,`${names_1$2.default.scope}`,$u)(this,this.scope.get());if(this.scope.value(gu,{ref:r0}),r0.errors=null,r0.schema=o.schema,r0.schemaEnv=o,o.$async&&(r0.$async=!0),this.opts.code.source===!0&&(r0.source={validateName:gu,validateCode:Iu,scopeValues:$a._values}),this.opts.unevaluated){const{props:p0,items:y0}=Su;r0.evaluated={props:p0 instanceof codegen_1$m.Name?void 0:p0,items:y0 instanceof codegen_1$m.Name?void 0:y0,dynamicProps:p0 instanceof codegen_1$m.Name,dynamicItems:y0 instanceof codegen_1$m.Name},r0.source&&(r0.source.evaluated=(0,codegen_1$m.stringify)(r0.evaluated))}return o.validate=r0,o}catch(Iu){throw delete o.validate,delete o.validateName,$u&&this.logger.error("Error compiling schema, function code:",$u),Iu}finally{this._compilations.delete(o)}}compile.compileSchema=compileSchema;function resolveRef(o,a,c){var d;c=(0,resolve_1.resolveUrl)(this.opts.uriResolver,a,c);const tt=o.refs[c];if(tt)return tt;let nt=resolve$1.call(this,o,c);if(nt===void 0){const $a=(d=o.localRefs)===null||d===void 0?void 0:d[c],{schemaId:Ws}=this.opts;$a&&(nt=new SchemaEnv({schema:$a,schemaId:Ws,root:o,baseId:a}))}if(nt!==void 0)return o.refs[c]=inlineOrCompile.call(this,nt)}compile.resolveRef=resolveRef;function inlineOrCompile(o){return(0,resolve_1.inlineRef)(o.schema,this.opts.inlineRefs)?o.schema:o.validate?o:compileSchema.call(this,o)}function getCompilingSchema(o){for(const a of this._compilations)if(sameSchemaEnv(a,o))return a}compile.getCompilingSchema=getCompilingSchema;function sameSchemaEnv(o,a){return o.schema===a.schema&&o.root===a.root&&o.baseId===a.baseId}function resolve$1(o,a){let c;for(;typeof(c=this.refs[a])=="string";)a=c;return c||this.schemas[a]||resolveSchema.call(this,o,a)}function resolveSchema(o,a){const c=this.opts.uriResolver.parse(a),d=(0,resolve_1._getFullPath)(this.opts.uriResolver,c);let tt=(0,resolve_1.getFullPath)(this.opts.uriResolver,o.baseId,void 0);if(Object.keys(o.schema).length>0&&d===tt)return getJsonPointer.call(this,c,o);const nt=(0,resolve_1.normalizeId)(d),$a=this.refs[nt]||this.schemas[nt];if(typeof $a=="string"){const Ws=resolveSchema.call(this,o,$a);return typeof(Ws==null?void 0:Ws.schema)!="object"?void 0:getJsonPointer.call(this,c,Ws)}if(typeof($a==null?void 0:$a.schema)=="object"){if($a.validate||compileSchema.call(this,$a),nt===(0,resolve_1.normalizeId)(a)){const{schema:Ws}=$a,{schemaId:gu}=this.opts,Su=Ws[gu];return Su&&(tt=(0,resolve_1.resolveUrl)(this.opts.uriResolver,tt,Su)),new SchemaEnv({schema:Ws,schemaId:gu,root:o,baseId:tt})}return getJsonPointer.call(this,c,$a)}}compile.resolveSchema=resolveSchema;const PREVENT_SCOPE_CHANGE=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function getJsonPointer(o,{baseId:a,schema:c,root:d}){var tt;if(((tt=o.fragment)===null||tt===void 0?void 0:tt[0])!=="/")return;for(const Ws of o.fragment.slice(1).split("/")){if(typeof c=="boolean")return;const gu=c[(0,util_1$k.unescapeFragment)(Ws)];if(gu===void 0)return;c=gu;const Su=typeof c=="object"&&c[this.opts.schemaId];!PREVENT_SCOPE_CHANGE.has(Ws)&&Su&&(a=(0,resolve_1.resolveUrl)(this.opts.uriResolver,a,Su))}let nt;if(typeof c!="boolean"&&c.$ref&&!(0,util_1$k.schemaHasRulesButRef)(c,this.RULES)){const Ws=(0,resolve_1.resolveUrl)(this.opts.uriResolver,a,c.$ref);nt=resolveSchema.call(this,d,Ws)}const{schemaId:$a}=this.opts;if(nt=nt||new SchemaEnv({schema:c,schemaId:$a,root:d,baseId:a}),nt.schema!==nt.root.schema)return nt}const $id$1="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description="Meta-schema for $data reference (JSON AnySchema extension proposal)",type$1="object",required$2=["$data"],properties$2={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties$1=!1,require$$9={$id:$id$1,description,type:type$1,required:required$2,properties:properties$2,additionalProperties:additionalProperties$1};var uri$1={},uri_all={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(o,a){(function(c,d){d(a)})(commonjsGlobal$4,function(c){function d(){for(var $y=arguments.length,Kv=Array($y),Ny=0;Ny<$y;Ny++)Kv[Ny]=arguments[Ny];if(Kv.length>1){Kv[0]=Kv[0].slice(0,-1);for(var Vy=Kv.length-1,Sy=1;Sy= 0x80 (not a basic code point)","invalid-input":"Invalid input"},j1=y0-A0,r1=Math.floor,t1=String.fromCharCode;function D0($y){throw new RangeError(lv[$y])}function Z0($y,Kv){for(var Ny=[],Vy=$y.length;Vy--;)Ny[Vy]=Kv($y[Vy]);return Ny}function f1($y,Kv){var Ny=$y.split("@"),Vy="";Ny.length>1&&(Vy=Ny[0]+"@",$y=Ny[1]),$y=$y.replace(B1,".");var Sy=$y.split("."),fw=Z0(Sy,Kv).join(".");return Vy+fw}function w1($y){for(var Kv=[],Ny=0,Vy=$y.length;Ny=55296&&Sy<=56319&&Ny>1,Kv+=r1(Kv/Ny);Kv>j1*$0>>1;Sy+=y0)Kv=r1(Kv/j1);return r1(Sy+(j1+1)*Kv/(Kv+O0))},d1=function(Kv){var Ny=[],Vy=Kv.length,Sy=0,fw=F0,xw=V0,V3=Kv.lastIndexOf(u1);V3<0&&(V3=0);for(var i$=0;i$=128&&D0("not-basic"),Ny.push(Kv.charCodeAt(i$));for(var y$=V3>0?V3+1:0;y$=Vy&&D0("invalid-input");var $w=c1(Kv.charCodeAt(y$++));($w>=y0||$w>r1((p0-Sy)/g3))&&D0("overflow"),Sy+=$w*g3;var w3=j3<=xw?A0:j3>=xw+$0?$0:j3-xw;if($wr1(p0/yE)&&D0("overflow"),g3*=yE}var bE=Ny.length+1;xw=o1(Sy-Gw,bE,Gw==0),r1(Sy/bE)>p0-fw&&D0("overflow"),fw+=r1(Sy/bE),Sy%=bE,Ny.splice(Sy++,0,fw)}return String.fromCodePoint.apply(String,Ny)},R1=function(Kv){var Ny=[];Kv=w1(Kv);var Vy=Kv.length,Sy=F0,fw=0,xw=V0,V3=!0,i$=!1,y$=void 0;try{for(var Gw=Kv[Symbol.iterator](),g3;!(V3=(g3=Gw.next()).done);V3=!0){var j3=g3.value;j3<128&&Ny.push(t1(j3))}}catch(VI){i$=!0,y$=VI}finally{try{!V3&&Gw.return&&Gw.return()}finally{if(i$)throw y$}}var $w=Ny.length,w3=$w;for($w&&Ny.push(u1);w3=Sy&&D_r1((p0-fw)/FA)&&D0("overflow"),fw+=(yE-Sy)*FA,Sy=yE;var g8=!0,y8=!1,X_=void 0;try{for(var FS=Kv[Symbol.iterator](),sR;!(g8=(sR=FS.next()).done);g8=!0){var I6=sR.value;if(I6p0&&D0("overflow"),I6==Sy){for(var Yx=fw,Tz=y0;;Tz+=y0){var oN=Tz<=xw?A0:Tz>=xw+$0?$0:Tz-xw;if(Yx>6|192).toString(16).toUpperCase()+"%"+(Kv&63|128).toString(16).toUpperCase():Ny="%"+(Kv>>12|224).toString(16).toUpperCase()+"%"+(Kv>>6&63|128).toString(16).toUpperCase()+"%"+(Kv&63|128).toString(16).toUpperCase(),Ny}function Mv($y){for(var Kv="",Ny=0,Vy=$y.length;Ny=194&&Sy<224){if(Vy-Ny>=6){var fw=parseInt($y.substr(Ny+4,2),16);Kv+=String.fromCharCode((Sy&31)<<6|fw&63)}else Kv+=$y.substr(Ny,6);Ny+=6}else if(Sy>=224){if(Vy-Ny>=9){var xw=parseInt($y.substr(Ny+4,2),16),V3=parseInt($y.substr(Ny+7,2),16);Kv+=String.fromCharCode((Sy&15)<<12|(xw&63)<<6|V3&63)}else Kv+=$y.substr(Ny,9);Ny+=9}else Kv+=$y.substr(Ny,3),Ny+=3}return Kv}function Zv($y,Kv){function Ny(Vy){var Sy=Mv(Vy);return Sy.match(Kv.UNRESERVED)?Sy:Vy}return $y.scheme&&($y.scheme=String($y.scheme).replace(Kv.PCT_ENCODED,Ny).toLowerCase().replace(Kv.NOT_SCHEME,"")),$y.userinfo!==void 0&&($y.userinfo=String($y.userinfo).replace(Kv.PCT_ENCODED,Ny).replace(Kv.NOT_USERINFO,ev).replace(Kv.PCT_ENCODED,$a)),$y.host!==void 0&&($y.host=String($y.host).replace(Kv.PCT_ENCODED,Ny).toLowerCase().replace(Kv.NOT_HOST,ev).replace(Kv.PCT_ENCODED,$a)),$y.path!==void 0&&($y.path=String($y.path).replace(Kv.PCT_ENCODED,Ny).replace($y.scheme?Kv.NOT_PATH:Kv.NOT_PATH_NOSCHEME,ev).replace(Kv.PCT_ENCODED,$a)),$y.query!==void 0&&($y.query=String($y.query).replace(Kv.PCT_ENCODED,Ny).replace(Kv.NOT_QUERY,ev).replace(Kv.PCT_ENCODED,$a)),$y.fragment!==void 0&&($y.fragment=String($y.fragment).replace(Kv.PCT_ENCODED,Ny).replace(Kv.NOT_FRAGMENT,ev).replace(Kv.PCT_ENCODED,$a)),$y}function fv($y){return $y.replace(/^0*(.*)/,"$1")||"0"}function cv($y,Kv){var Ny=$y.match(Kv.IPV4ADDRESS)||[],Vy=Xu(Ny,2),Sy=Vy[1];return Sy?Sy.split(".").map(fv).join("."):$y}function ly($y,Kv){var Ny=$y.match(Kv.IPV6ADDRESS)||[],Vy=Xu(Ny,3),Sy=Vy[1],fw=Vy[2];if(Sy){for(var xw=Sy.toLowerCase().split("::").reverse(),V3=Xu(xw,2),i$=V3[0],y$=V3[1],Gw=y$?y$.split(":").map(fv):[],g3=i$.split(":").map(fv),j3=Kv.IPV4ADDRESS.test(g3[g3.length-1]),$w=j3?7:8,w3=g3.length-$w,yE=Array($w),bE=0;bE<$w;++bE)yE[bE]=Gw[bE]||g3[w3+bE]||"";j3&&(yE[$w-1]=cv(yE[$w-1],Kv));var J_=yE.reduce(function(FA,g8,y8){if(!g8||g8==="0"){var X_=FA[FA.length-1];X_&&X_.index+X_.length===y8?X_.length++:FA.push({index:y8,length:1})}return FA},[]),B_=J_.sort(function(FA,g8){return g8.length-FA.length})[0],$_=void 0;if(B_&&B_.length>1){var M6=yE.slice(0,B_.index),D_=yE.slice(B_.index+B_.length);$_=M6.join(":")+"::"+D_.join(":")}else $_=yE.join(":");return fw&&($_+="%"+fw),$_}else return $y}var Cy=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Ly="".match(/(){0}/)[1]===void 0;function Hy($y){var Kv=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ny={},Vy=Kv.iri!==!1?Iu:$u;Kv.reference==="suffix"&&($y=(Kv.scheme?Kv.scheme+":":"")+"//"+$y);var Sy=$y.match(Cy);if(Sy){Ly?(Ny.scheme=Sy[1],Ny.userinfo=Sy[3],Ny.host=Sy[4],Ny.port=parseInt(Sy[5],10),Ny.path=Sy[6]||"",Ny.query=Sy[7],Ny.fragment=Sy[8],isNaN(Ny.port)&&(Ny.port=Sy[5])):(Ny.scheme=Sy[1]||void 0,Ny.userinfo=$y.indexOf("@")!==-1?Sy[3]:void 0,Ny.host=$y.indexOf("//")!==-1?Sy[4]:void 0,Ny.port=parseInt(Sy[5],10),Ny.path=Sy[6]||"",Ny.query=$y.indexOf("?")!==-1?Sy[7]:void 0,Ny.fragment=$y.indexOf("#")!==-1?Sy[8]:void 0,isNaN(Ny.port)&&(Ny.port=$y.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?Sy[4]:void 0)),Ny.host&&(Ny.host=ly(cv(Ny.host,Vy),Vy)),Ny.scheme===void 0&&Ny.userinfo===void 0&&Ny.host===void 0&&Ny.port===void 0&&!Ny.path&&Ny.query===void 0?Ny.reference="same-document":Ny.scheme===void 0?Ny.reference="relative":Ny.fragment===void 0?Ny.reference="absolute":Ny.reference="uri",Kv.reference&&Kv.reference!=="suffix"&&Kv.reference!==Ny.reference&&(Ny.error=Ny.error||"URI is not a "+Kv.reference+" reference.");var fw=D1[(Kv.scheme||Ny.scheme||"").toLowerCase()];if(!Kv.unicodeSupport&&(!fw||!fw.unicodeSupport)){if(Ny.host&&(Kv.domainHost||fw&&fw.domainHost))try{Ny.host=rv.toASCII(Ny.host.replace(Vy.PCT_ENCODED,Mv).toLowerCase())}catch(xw){Ny.error=Ny.error||"Host's domain name can not be converted to ASCII via punycode: "+xw}Zv(Ny,$u)}else Zv(Ny,Vy);fw&&fw.parse&&fw.parse(Ny,Kv)}else Ny.error=Ny.error||"URI can not be parsed.";return Ny}function t2($y,Kv){var Ny=Kv.iri!==!1?Iu:$u,Vy=[];return $y.userinfo!==void 0&&(Vy.push($y.userinfo),Vy.push("@")),$y.host!==void 0&&Vy.push(ly(cv(String($y.host),Ny),Ny).replace(Ny.IPV6ADDRESS,function(Sy,fw,xw){return"["+fw+(xw?"%25"+xw:"")+"]"})),(typeof $y.port=="number"||typeof $y.port=="string")&&(Vy.push(":"),Vy.push(String($y.port))),Vy.length?Vy.join(""):void 0}var C2=/^\.\.?\//,Dy=/^\/\.(\/|$)/,jw=/^\/\.\.(\/|$)/,pw=/^\/?(?:.|\n)*?(?=\/|$)/;function vw($y){for(var Kv=[];$y.length;)if($y.match(C2))$y=$y.replace(C2,"");else if($y.match(Dy))$y=$y.replace(Dy,"/");else if($y.match(jw))$y=$y.replace(jw,"/"),Kv.pop();else if($y==="."||$y==="..")$y="";else{var Ny=$y.match(pw);if(Ny){var Vy=Ny[0];$y=$y.slice(Vy.length),Kv.push(Vy)}else throw new Error("Unexpected dot segment condition")}return Kv.join("")}function Hw($y){var Kv=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ny=Kv.iri?Iu:$u,Vy=[],Sy=D1[(Kv.scheme||$y.scheme||"").toLowerCase()];if(Sy&&Sy.serialize&&Sy.serialize($y,Kv),$y.host&&!Ny.IPV6ADDRESS.test($y.host)){if(Kv.domainHost||Sy&&Sy.domainHost)try{$y.host=Kv.iri?rv.toUnicode($y.host):rv.toASCII($y.host.replace(Ny.PCT_ENCODED,Mv).toLowerCase())}catch(V3){$y.error=$y.error||"Host's domain name can not be converted to "+(Kv.iri?"Unicode":"ASCII")+" via punycode: "+V3}}Zv($y,Ny),Kv.reference!=="suffix"&&$y.scheme&&(Vy.push($y.scheme),Vy.push(":"));var fw=t2($y,Kv);if(fw!==void 0&&(Kv.reference!=="suffix"&&Vy.push("//"),Vy.push(fw),$y.path&&$y.path.charAt(0)!=="/"&&Vy.push("/")),$y.path!==void 0){var xw=$y.path;!Kv.absolutePath&&(!Sy||!Sy.absolutePath)&&(xw=vw(xw)),fw===void 0&&(xw=xw.replace(/^\/\//,"/%2F")),Vy.push(xw)}return $y.query!==void 0&&(Vy.push("?"),Vy.push($y.query)),$y.fragment!==void 0&&(Vy.push("#"),Vy.push($y.fragment)),Vy.join("")}function uw($y,Kv){var Ny=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Vy=arguments[3],Sy={};return Vy||($y=Hy(Hw($y,Ny),Ny),Kv=Hy(Hw(Kv,Ny),Ny)),Ny=Ny||{},!Ny.tolerant&&Kv.scheme?(Sy.scheme=Kv.scheme,Sy.userinfo=Kv.userinfo,Sy.host=Kv.host,Sy.port=Kv.port,Sy.path=vw(Kv.path||""),Sy.query=Kv.query):(Kv.userinfo!==void 0||Kv.host!==void 0||Kv.port!==void 0?(Sy.userinfo=Kv.userinfo,Sy.host=Kv.host,Sy.port=Kv.port,Sy.path=vw(Kv.path||""),Sy.query=Kv.query):(Kv.path?(Kv.path.charAt(0)==="/"?Sy.path=vw(Kv.path):(($y.userinfo!==void 0||$y.host!==void 0||$y.port!==void 0)&&!$y.path?Sy.path="/"+Kv.path:$y.path?Sy.path=$y.path.slice(0,$y.path.lastIndexOf("/")+1)+Kv.path:Sy.path=Kv.path,Sy.path=vw(Sy.path)),Sy.query=Kv.query):(Sy.path=$y.path,Kv.query!==void 0?Sy.query=Kv.query:Sy.query=$y.query),Sy.userinfo=$y.userinfo,Sy.host=$y.host,Sy.port=$y.port),Sy.scheme=$y.scheme),Sy.fragment=Kv.fragment,Sy}function Nw($y,Kv,Ny){var Vy=gu({scheme:"null"},Ny);return Hw(uw(Hy($y,Vy),Hy(Kv,Vy),Vy,!0),Vy)}function lw($y,Kv){return typeof $y=="string"?$y=Hw(Hy($y,Kv),Kv):nt($y)==="object"&&($y=Hy(Hw($y,Kv),Kv)),$y}function Lw($y,Kv,Ny){return typeof $y=="string"?$y=Hw(Hy($y,Ny),Ny):nt($y)==="object"&&($y=Hw($y,Ny)),typeof Kv=="string"?Kv=Hw(Hy(Kv,Ny),Ny):nt(Kv)==="object"&&(Kv=Hw(Kv,Ny)),$y===Kv}function zw($y,Kv){return $y&&$y.toString().replace(!Kv||!Kv.iri?$u.ESCAPE:Iu.ESCAPE,ev)}function A2($y,Kv){return $y&&$y.toString().replace(!Kv||!Kv.iri?$u.PCT_ENCODED:Iu.PCT_ENCODED,Mv)}var kv={scheme:"http",domainHost:!0,parse:function(Kv,Ny){return Kv.host||(Kv.error=Kv.error||"HTTP URIs must have a host."),Kv},serialize:function(Kv,Ny){var Vy=String(Kv.scheme).toLowerCase()==="https";return(Kv.port===(Vy?443:80)||Kv.port==="")&&(Kv.port=void 0),Kv.path||(Kv.path="/"),Kv}},Y1={scheme:"https",domainHost:kv.domainHost,parse:kv.parse,serialize:kv.serialize};function tv($y){return typeof $y.secure=="boolean"?$y.secure:String($y.scheme).toLowerCase()==="wss"}var Yv={scheme:"ws",domainHost:!0,parse:function(Kv,Ny){var Vy=Kv;return Vy.secure=tv(Vy),Vy.resourceName=(Vy.path||"/")+(Vy.query?"?"+Vy.query:""),Vy.path=void 0,Vy.query=void 0,Vy},serialize:function(Kv,Ny){if((Kv.port===(tv(Kv)?443:80)||Kv.port==="")&&(Kv.port=void 0),typeof Kv.secure=="boolean"&&(Kv.scheme=Kv.secure?"wss":"ws",Kv.secure=void 0),Kv.resourceName){var Vy=Kv.resourceName.split("?"),Sy=Xu(Vy,2),fw=Sy[0],xw=Sy[1];Kv.path=fw&&fw!=="/"?fw:void 0,Kv.query=xw,Kv.resourceName=void 0}return Kv.fragment=void 0,Kv}},By={scheme:"wss",domainHost:Yv.domainHost,parse:Yv.parse,serialize:Yv.serialize},Qy={},e2="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",Kw="[0-9A-Fa-f]",r$=tt(tt("%[EFef]"+Kw+"%"+Kw+Kw+"%"+Kw+Kw)+"|"+tt("%[89A-Fa-f]"+Kw+"%"+Kw+Kw)+"|"+tt("%"+Kw+Kw)),v3="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",d$="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",$2=d(d$,'[\\"\\\\]'),_$="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",Q$=new RegExp(e2,"g"),S$=new RegExp(r$,"g"),m$=new RegExp(d("[^]",v3,"[\\.]",'[\\"]',$2),"g"),m3=new RegExp(d("[^]",e2,_$),"g"),n$=m3;function a$($y){var Kv=Mv($y);return Kv.match(Q$)?Kv:$y}var OE={scheme:"mailto",parse:function(Kv,Ny){var Vy=Kv,Sy=Vy.to=Vy.path?Vy.path.split(","):[];if(Vy.path=void 0,Vy.query){for(var fw=!1,xw={},V3=Vy.query.split("&"),i$=0,y$=V3.length;i$new RegExp(G0,o1);r0.code="new RegExp";const p0=["removeAdditional","useDefaults","coerceTypes"],y0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),A0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},$0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},O0=200;function L0(G0){var o1,d1,R1,O1,Q1,rv,D1,ev,Mv,Zv,fv,cv,ly,Cy,Ly,Hy,t2,C2,Dy,jw,pw,vw,Hw,uw,Nw;const lw=G0.strict,Lw=(o1=G0.code)===null||o1===void 0?void 0:o1.optimize,zw=Lw===!0||Lw===void 0?1:Lw||0,A2=(R1=(d1=G0.code)===null||d1===void 0?void 0:d1.regExp)!==null&&R1!==void 0?R1:r0,kv=(O1=G0.uriResolver)!==null&&O1!==void 0?O1:Xu.default;return{strictSchema:(rv=(Q1=G0.strictSchema)!==null&&Q1!==void 0?Q1:lw)!==null&&rv!==void 0?rv:!0,strictNumbers:(ev=(D1=G0.strictNumbers)!==null&&D1!==void 0?D1:lw)!==null&&ev!==void 0?ev:!0,strictTypes:(Zv=(Mv=G0.strictTypes)!==null&&Mv!==void 0?Mv:lw)!==null&&Zv!==void 0?Zv:"log",strictTuples:(cv=(fv=G0.strictTuples)!==null&&fv!==void 0?fv:lw)!==null&&cv!==void 0?cv:"log",strictRequired:(Cy=(ly=G0.strictRequired)!==null&&ly!==void 0?ly:lw)!==null&&Cy!==void 0?Cy:!1,code:G0.code?{...G0.code,optimize:zw,regExp:A2}:{optimize:zw,regExp:A2},loopRequired:(Ly=G0.loopRequired)!==null&&Ly!==void 0?Ly:O0,loopEnum:(Hy=G0.loopEnum)!==null&&Hy!==void 0?Hy:O0,meta:(t2=G0.meta)!==null&&t2!==void 0?t2:!0,messages:(C2=G0.messages)!==null&&C2!==void 0?C2:!0,inlineRefs:(Dy=G0.inlineRefs)!==null&&Dy!==void 0?Dy:!0,schemaId:(jw=G0.schemaId)!==null&&jw!==void 0?jw:"$id",addUsedSchema:(pw=G0.addUsedSchema)!==null&&pw!==void 0?pw:!0,validateSchema:(vw=G0.validateSchema)!==null&&vw!==void 0?vw:!0,validateFormats:(Hw=G0.validateFormats)!==null&&Hw!==void 0?Hw:!0,unicodeRegExp:(uw=G0.unicodeRegExp)!==null&&uw!==void 0?uw:!0,int32range:(Nw=G0.int32range)!==null&&Nw!==void 0?Nw:!0,uriResolver:kv}}class V0{constructor(o1={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,o1=this.opts={...o1,...L0(o1)};const{es5:d1,lines:R1}=this.opts.code;this.scope=new Ws.ValueScope({scope:{},prefixes:y0,es5:d1,lines:R1}),this.logger=r1(o1.logger);const O1=o1.validateFormats;o1.validateFormats=!1,this.RULES=(0,nt.getRules)(),F0.call(this,A0,o1,"NOT SUPPORTED"),F0.call(this,$0,o1,"DEPRECATED","warn"),this._metaOpts=lv.call(this),o1.formats&&E1.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),o1.keywords&&B1.call(this,o1.keywords),typeof o1.meta=="object"&&this.addMetaSchema(o1.meta),g1.call(this),o1.validateFormats=O1}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:o1,meta:d1,schemaId:R1}=this.opts;let O1=Iu;R1==="id"&&(O1={...Iu},O1.id=O1.$id,delete O1.$id),d1&&o1&&this.addMetaSchema(O1,O1[R1],!1)}defaultMeta(){const{meta:o1,schemaId:d1}=this.opts;return this.opts.defaultMeta=typeof o1=="object"?o1[d1]||o1:void 0}validate(o1,d1){let R1;if(typeof o1=="string"){if(R1=this.getSchema(o1),!R1)throw new Error(`no schema with key or ref "${o1}"`)}else R1=this.compile(o1);const O1=R1(d1);return"$async"in R1||(this.errors=R1.errors),O1}compile(o1,d1){const R1=this._addSchema(o1,d1);return R1.validate||this._compileSchemaEnv(R1)}compileAsync(o1,d1){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:R1}=this.opts;return O1.call(this,o1,d1);async function O1(Zv,fv){await Q1.call(this,Zv.$schema);const cv=this._addSchema(Zv,fv);return cv.validate||rv.call(this,cv)}async function Q1(Zv){Zv&&!this.getSchema(Zv)&&await O1.call(this,{$ref:Zv},!0)}async function rv(Zv){try{return this._compileSchemaEnv(Zv)}catch(fv){if(!(fv instanceof tt.default))throw fv;return D1.call(this,fv),await ev.call(this,fv.missingSchema),rv.call(this,Zv)}}function D1({missingSchema:Zv,missingRef:fv}){if(this.refs[Zv])throw new Error(`AnySchema ${Zv} is loaded but ${fv} cannot be resolved`)}async function ev(Zv){const fv=await Mv.call(this,Zv);this.refs[Zv]||await Q1.call(this,fv.$schema),this.refs[Zv]||this.addSchema(fv,Zv,d1)}async function Mv(Zv){const fv=this._loading[Zv];if(fv)return fv;try{return await(this._loading[Zv]=R1(Zv))}finally{delete this._loading[Zv]}}}addSchema(o1,d1,R1,O1=this.opts.validateSchema){if(Array.isArray(o1)){for(const rv of o1)this.addSchema(rv,void 0,R1,O1);return this}let Q1;if(typeof o1=="object"){const{schemaId:rv}=this.opts;if(Q1=o1[rv],Q1!==void 0&&typeof Q1!="string")throw new Error(`schema ${rv} must be string`)}return d1=(0,gu.normalizeId)(d1||Q1),this._checkUnique(d1),this.schemas[d1]=this._addSchema(o1,R1,d1,O1,!0),this}addMetaSchema(o1,d1,R1=this.opts.validateSchema){return this.addSchema(o1,d1,!0,R1),this}validateSchema(o1,d1){if(typeof o1=="boolean")return!0;let R1;if(R1=o1.$schema,R1!==void 0&&typeof R1!="string")throw new Error("$schema must be a string");if(R1=R1||this.opts.defaultMeta||this.defaultMeta(),!R1)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const O1=this.validate(R1,o1);if(!O1&&d1){const Q1="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(Q1);else throw new Error(Q1)}return O1}getSchema(o1){let d1;for(;typeof(d1=u1.call(this,o1))=="string";)o1=d1;if(d1===void 0){const{schemaId:R1}=this.opts,O1=new $a.SchemaEnv({schema:{},schemaId:R1});if(d1=$a.resolveSchema.call(this,O1,o1),!d1)return;this.refs[o1]=d1}return d1.validate||this._compileSchemaEnv(d1)}removeSchema(o1){if(o1 instanceof RegExp)return this._removeAllSchemas(this.schemas,o1),this._removeAllSchemas(this.refs,o1),this;switch(typeof o1){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const d1=u1.call(this,o1);return typeof d1=="object"&&this._cache.delete(d1.schema),delete this.schemas[o1],delete this.refs[o1],this}case"object":{const d1=o1;this._cache.delete(d1);let R1=o1[this.opts.schemaId];return R1&&(R1=(0,gu.normalizeId)(R1),delete this.schemas[R1],delete this.refs[R1]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(o1){for(const d1 of o1)this.addKeyword(d1);return this}addKeyword(o1,d1){let R1;if(typeof o1=="string")R1=o1,typeof d1=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),d1.keyword=R1);else if(typeof o1=="object"&&d1===void 0){if(d1=o1,R1=d1.keyword,Array.isArray(R1)&&!R1.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(D0.call(this,R1,d1),!d1)return(0,$u.eachItem)(R1,Q1=>Z0.call(this,Q1)),this;w1.call(this,d1);const O1={...d1,type:(0,Su.getJSONTypes)(d1.type),schemaType:(0,Su.getJSONTypes)(d1.schemaType)};return(0,$u.eachItem)(R1,O1.type.length===0?Q1=>Z0.call(this,Q1,O1):Q1=>O1.type.forEach(rv=>Z0.call(this,Q1,O1,rv))),this}getKeyword(o1){const d1=this.RULES.all[o1];return typeof d1=="object"?d1.definition:!!d1}removeKeyword(o1){const{RULES:d1}=this;delete d1.keywords[o1],delete d1.all[o1];for(const R1 of d1.rules){const O1=R1.rules.findIndex(Q1=>Q1.keyword===o1);O1>=0&&R1.rules.splice(O1,1)}return this}addFormat(o1,d1){return typeof d1=="string"&&(d1=new RegExp(d1)),this.formats[o1]=d1,this}errorsText(o1=this.errors,{separator:d1=", ",dataVar:R1="data"}={}){return!o1||o1.length===0?"No errors":o1.map(O1=>`${R1}${O1.instancePath} ${O1.message}`).reduce((O1,Q1)=>O1+d1+Q1)}$dataMetaSchema(o1,d1){const R1=this.RULES.all;o1=JSON.parse(JSON.stringify(o1));for(const O1 of d1){const Q1=O1.split("/").slice(1);let rv=o1;for(const D1 of Q1)rv=rv[D1];for(const D1 in R1){const ev=R1[D1];if(typeof ev!="object")continue;const{$data:Mv}=ev.definition,Zv=rv[D1];Mv&&Zv&&(rv[D1]=c1(Zv))}}return o1}_removeAllSchemas(o1,d1){for(const R1 in o1){const O1=o1[R1];(!d1||d1.test(R1))&&(typeof O1=="string"?delete o1[R1]:O1&&!O1.meta&&(this._cache.delete(O1.schema),delete o1[R1]))}}_addSchema(o1,d1,R1,O1=this.opts.validateSchema,Q1=this.opts.addUsedSchema){let rv;const{schemaId:D1}=this.opts;if(typeof o1=="object")rv=o1[D1];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof o1!="boolean")throw new Error("schema must be object or boolean")}let ev=this._cache.get(o1);if(ev!==void 0)return ev;R1=(0,gu.normalizeId)(rv||R1);const Mv=gu.getSchemaRefs.call(this,o1,R1);return ev=new $a.SchemaEnv({schema:o1,schemaId:D1,meta:d1,baseId:R1,localRefs:Mv}),this._cache.set(ev.schema,ev),Q1&&!R1.startsWith("#")&&(R1&&this._checkUnique(R1),this.refs[R1]=ev),O1&&this.validateSchema(o1,!0),ev}_checkUnique(o1){if(this.schemas[o1]||this.refs[o1])throw new Error(`schema with key or id "${o1}" already exists`)}_compileSchemaEnv(o1){if(o1.meta?this._compileMetaSchema(o1):$a.compileSchema.call(this,o1),!o1.validate)throw new Error("ajv implementation error");return o1.validate}_compileMetaSchema(o1){const d1=this.opts;this.opts=this._metaOpts;try{$a.compileSchema.call(this,o1)}finally{this.opts=d1}}}o.default=V0,V0.ValidationError=d.default,V0.MissingRefError=tt.default;function F0(G0,o1,d1,R1="error"){for(const O1 in G0){const Q1=O1;Q1 in o1&&this.logger[R1](`${d1}: option ${O1}. ${G0[Q1]}`)}}function u1(G0){return G0=(0,gu.normalizeId)(G0),this.schemas[G0]||this.refs[G0]}function g1(){const G0=this.opts.schemas;if(G0)if(Array.isArray(G0))this.addSchema(G0);else for(const o1 in G0)this.addSchema(G0[o1],o1)}function E1(){for(const G0 in this.opts.formats){const o1=this.opts.formats[G0];o1&&this.addFormat(G0,o1)}}function B1(G0){if(Array.isArray(G0)){this.addVocabulary(G0);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const o1 in G0){const d1=G0[o1];d1.keyword||(d1.keyword=o1),this.addKeyword(d1)}}function lv(){const G0={...this.opts};for(const o1 of p0)delete G0[o1];return G0}const j1={log(){},warn(){},error(){}};function r1(G0){if(G0===!1)return j1;if(G0===void 0)return console;if(G0.log&&G0.warn&&G0.error)return G0;throw new Error("logger must implement log, warn and error methods")}const t1=/^[a-z_$][a-z0-9_$:-]*$/i;function D0(G0,o1){const{RULES:d1}=this;if((0,$u.eachItem)(G0,R1=>{if(d1.keywords[R1])throw new Error(`Keyword ${R1} is already defined`);if(!t1.test(R1))throw new Error(`Keyword ${R1} has invalid name`)}),!!o1&&o1.$data&&!("code"in o1||"validate"in o1))throw new Error('$data keyword must have "code" or "validate" function')}function Z0(G0,o1,d1){var R1;const O1=o1==null?void 0:o1.post;if(d1&&O1)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:Q1}=this;let rv=O1?Q1.post:Q1.rules.find(({type:ev})=>ev===d1);if(rv||(rv={type:d1,rules:[]},Q1.rules.push(rv)),Q1.keywords[G0]=!0,!o1)return;const D1={keyword:G0,definition:{...o1,type:(0,Su.getJSONTypes)(o1.type),schemaType:(0,Su.getJSONTypes)(o1.schemaType)}};o1.before?f1.call(this,rv,D1,o1.before):rv.rules.push(D1),Q1.all[G0]=D1,(R1=o1.implements)===null||R1===void 0||R1.forEach(ev=>this.addKeyword(ev))}function f1(G0,o1,d1){const R1=G0.rules.findIndex(O1=>O1.keyword===d1);R1>=0?G0.rules.splice(R1,0,o1):(G0.rules.push(o1),this.logger.warn(`rule ${d1} is not defined`))}function w1(G0){let{metaSchema:o1}=G0;o1!==void 0&&(G0.$data&&this.opts.$data&&(o1=c1(o1)),G0.validateSchema=this.compile(o1,!0))}const m1={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function c1(G0){return{anyOf:[G0,m1]}}})(core$2);var draft7={},core$1={},id$5={};Object.defineProperty(id$5,"__esModule",{value:!0});const def$s={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};id$5.default=def$s;var ref={};Object.defineProperty(ref,"__esModule",{value:!0});ref.callRef=ref.getValidate=void 0;const ref_error_1=ref_error,code_1$8=code,codegen_1$l=codegen,names_1$1=names$1,compile_1$1=compile,util_1$j=util,def$r={keyword:"$ref",schemaType:"string",code(o){const{gen:a,schema:c,it:d}=o,{baseId:tt,schemaEnv:nt,validateName:$a,opts:Ws,self:gu}=d,{root:Su}=nt;if((c==="#"||c==="#/")&&tt===Su.baseId)return Iu();const $u=compile_1$1.resolveRef.call(gu,Su,tt,c);if($u===void 0)throw new ref_error_1.default(d.opts.uriResolver,tt,c);if($u instanceof compile_1$1.SchemaEnv)return Xu($u);return r0($u);function Iu(){if(nt===Su)return callRef(o,$a,nt,nt.$async);const p0=a.scopeValue("root",{ref:Su});return callRef(o,(0,codegen_1$l._)`${p0}.validate`,Su,Su.$async)}function Xu(p0){const y0=getValidate(o,p0);callRef(o,y0,p0,p0.$async)}function r0(p0){const y0=a.scopeValue("schema",Ws.code.source===!0?{ref:p0,code:(0,codegen_1$l.stringify)(p0)}:{ref:p0}),A0=a.name("valid"),$0=o.subschema({schema:p0,dataTypes:[],schemaPath:codegen_1$l.nil,topSchemaRef:y0,errSchemaPath:c},A0);o.mergeEvaluated($0),o.ok(A0)}}};function getValidate(o,a){const{gen:c}=o;return a.validate?c.scopeValue("validate",{ref:a.validate}):(0,codegen_1$l._)`${c.scopeValue("wrapper",{ref:a})}.validate`}ref.getValidate=getValidate;function callRef(o,a,c,d){const{gen:tt,it:nt}=o,{allErrors:$a,schemaEnv:Ws,opts:gu}=nt,Su=gu.passContext?names_1$1.default.this:codegen_1$l.nil;d?$u():Iu();function $u(){if(!Ws.$async)throw new Error("async schema referenced by sync schema");const p0=tt.let("valid");tt.try(()=>{tt.code((0,codegen_1$l._)`await ${(0,code_1$8.callValidateCode)(o,a,Su)}`),r0(a),$a||tt.assign(p0,!0)},y0=>{tt.if((0,codegen_1$l._)`!(${y0} instanceof ${nt.ValidationError})`,()=>tt.throw(y0)),Xu(y0),$a||tt.assign(p0,!1)}),o.ok(p0)}function Iu(){o.result((0,code_1$8.callValidateCode)(o,a,Su),()=>r0(a),()=>Xu(a))}function Xu(p0){const y0=(0,codegen_1$l._)`${p0}.errors`;tt.assign(names_1$1.default.vErrors,(0,codegen_1$l._)`${names_1$1.default.vErrors} === null ? ${y0} : ${names_1$1.default.vErrors}.concat(${y0})`),tt.assign(names_1$1.default.errors,(0,codegen_1$l._)`${names_1$1.default.vErrors}.length`)}function r0(p0){var y0;if(!nt.opts.unevaluated)return;const A0=(y0=c==null?void 0:c.validate)===null||y0===void 0?void 0:y0.evaluated;if(nt.props!==!0)if(A0&&!A0.dynamicProps)A0.props!==void 0&&(nt.props=util_1$j.mergeEvaluated.props(tt,A0.props,nt.props));else{const $0=tt.var("props",(0,codegen_1$l._)`${p0}.evaluated.props`);nt.props=util_1$j.mergeEvaluated.props(tt,$0,nt.props,codegen_1$l.Name)}if(nt.items!==!0)if(A0&&!A0.dynamicItems)A0.items!==void 0&&(nt.items=util_1$j.mergeEvaluated.items(tt,A0.items,nt.items));else{const $0=tt.var("items",(0,codegen_1$l._)`${p0}.evaluated.items`);nt.items=util_1$j.mergeEvaluated.items(tt,$0,nt.items,codegen_1$l.Name)}}}ref.callRef=callRef;ref.default=def$r;Object.defineProperty(core$1,"__esModule",{value:!0});const id_1=id$5,ref_1=ref,core=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",id_1.default,ref_1.default];core$1.default=core;var validation$1={},limitNumber={};Object.defineProperty(limitNumber,"__esModule",{value:!0});const codegen_1$k=codegen,ops=codegen_1$k.operators,KWDs={maximum:{okStr:"<=",ok:ops.LTE,fail:ops.GT},minimum:{okStr:">=",ok:ops.GTE,fail:ops.LT},exclusiveMaximum:{okStr:"<",ok:ops.LT,fail:ops.GTE},exclusiveMinimum:{okStr:">",ok:ops.GT,fail:ops.LTE}},error$j={message:({keyword:o,schemaCode:a})=>(0,codegen_1$k.str)`must be ${KWDs[o].okStr} ${a}`,params:({keyword:o,schemaCode:a})=>(0,codegen_1$k._)`{comparison: ${KWDs[o].okStr}, limit: ${a}}`},def$q={keyword:Object.keys(KWDs),type:"number",schemaType:"number",$data:!0,error:error$j,code(o){const{keyword:a,data:c,schemaCode:d}=o;o.fail$data((0,codegen_1$k._)`${c} ${KWDs[a].fail} ${d} || isNaN(${c})`)}};limitNumber.default=def$q;var multipleOf={};Object.defineProperty(multipleOf,"__esModule",{value:!0});const codegen_1$j=codegen,error$i={message:({schemaCode:o})=>(0,codegen_1$j.str)`must be multiple of ${o}`,params:({schemaCode:o})=>(0,codegen_1$j._)`{multipleOf: ${o}}`},def$p={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:error$i,code(o){const{gen:a,data:c,schemaCode:d,it:tt}=o,nt=tt.opts.multipleOfPrecision,$a=a.let("res"),Ws=nt?(0,codegen_1$j._)`Math.abs(Math.round(${$a}) - ${$a}) > 1e-${nt}`:(0,codegen_1$j._)`${$a} !== parseInt(${$a})`;o.fail$data((0,codegen_1$j._)`(${d} === 0 || (${$a} = ${c}/${d}, ${Ws}))`)}};multipleOf.default=def$p;var limitLength={},ucs2length$1={};Object.defineProperty(ucs2length$1,"__esModule",{value:!0});function ucs2length(o){const a=o.length;let c=0,d=0,tt;for(;d=55296&&tt<=56319&&d(0,codegen_1$i._)`{limit: ${o}}`},def$o={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:error$h,code(o){const{keyword:a,data:c,schemaCode:d,it:tt}=o,nt=a==="maxLength"?codegen_1$i.operators.GT:codegen_1$i.operators.LT,$a=tt.opts.unicode===!1?(0,codegen_1$i._)`${c}.length`:(0,codegen_1$i._)`${(0,util_1$i.useFunc)(o.gen,ucs2length_1.default)}(${c})`;o.fail$data((0,codegen_1$i._)`${$a} ${nt} ${d}`)}};limitLength.default=def$o;var pattern={};Object.defineProperty(pattern,"__esModule",{value:!0});const code_1$7=code,codegen_1$h=codegen,error$g={message:({schemaCode:o})=>(0,codegen_1$h.str)`must match pattern "${o}"`,params:({schemaCode:o})=>(0,codegen_1$h._)`{pattern: ${o}}`},def$n={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:error$g,code(o){const{data:a,$data:c,schema:d,schemaCode:tt,it:nt}=o,$a=nt.opts.unicodeRegExp?"u":"",Ws=c?(0,codegen_1$h._)`(new RegExp(${tt}, ${$a}))`:(0,code_1$7.usePattern)(o,d);o.fail$data((0,codegen_1$h._)`!${Ws}.test(${a})`)}};pattern.default=def$n;var limitProperties={};Object.defineProperty(limitProperties,"__esModule",{value:!0});const codegen_1$g=codegen,error$f={message({keyword:o,schemaCode:a}){const c=o==="maxProperties"?"more":"fewer";return(0,codegen_1$g.str)`must NOT have ${c} than ${a} properties`},params:({schemaCode:o})=>(0,codegen_1$g._)`{limit: ${o}}`},def$m={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:error$f,code(o){const{keyword:a,data:c,schemaCode:d}=o,tt=a==="maxProperties"?codegen_1$g.operators.GT:codegen_1$g.operators.LT;o.fail$data((0,codegen_1$g._)`Object.keys(${c}).length ${tt} ${d}`)}};limitProperties.default=def$m;var required$1={};Object.defineProperty(required$1,"__esModule",{value:!0});const code_1$6=code,codegen_1$f=codegen,util_1$h=util,error$e={message:({params:{missingProperty:o}})=>(0,codegen_1$f.str)`must have required property '${o}'`,params:({params:{missingProperty:o}})=>(0,codegen_1$f._)`{missingProperty: ${o}}`},def$l={keyword:"required",type:"object",schemaType:"array",$data:!0,error:error$e,code(o){const{gen:a,schema:c,schemaCode:d,data:tt,$data:nt,it:$a}=o,{opts:Ws}=$a;if(!nt&&c.length===0)return;const gu=c.length>=Ws.loopRequired;if($a.allErrors?Su():$u(),Ws.strictRequired){const r0=o.parentSchema.properties,{definedProperties:p0}=o.it;for(const y0 of c)if((r0==null?void 0:r0[y0])===void 0&&!p0.has(y0)){const A0=$a.schemaEnv.baseId+$a.errSchemaPath,$0=`required property "${y0}" is not defined at "${A0}" (strictRequired)`;(0,util_1$h.checkStrictMode)($a,$0,$a.opts.strictRequired)}}function Su(){if(gu||nt)o.block$data(codegen_1$f.nil,Iu);else for(const r0 of c)(0,code_1$6.checkReportMissingProp)(o,r0)}function $u(){const r0=a.let("missing");if(gu||nt){const p0=a.let("valid",!0);o.block$data(p0,()=>Xu(r0,p0)),o.ok(p0)}else a.if((0,code_1$6.checkMissingProp)(o,c,r0)),(0,code_1$6.reportMissingProp)(o,r0),a.else()}function Iu(){a.forOf("prop",d,r0=>{o.setParams({missingProperty:r0}),a.if((0,code_1$6.noPropertyInData)(a,tt,r0,Ws.ownProperties),()=>o.error())})}function Xu(r0,p0){o.setParams({missingProperty:r0}),a.forOf(r0,d,()=>{a.assign(p0,(0,code_1$6.propertyInData)(a,tt,r0,Ws.ownProperties)),a.if((0,codegen_1$f.not)(p0),()=>{o.error(),a.break()})},codegen_1$f.nil)}}};required$1.default=def$l;var limitItems={};Object.defineProperty(limitItems,"__esModule",{value:!0});const codegen_1$e=codegen,error$d={message({keyword:o,schemaCode:a}){const c=o==="maxItems"?"more":"fewer";return(0,codegen_1$e.str)`must NOT have ${c} than ${a} items`},params:({schemaCode:o})=>(0,codegen_1$e._)`{limit: ${o}}`},def$k={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:error$d,code(o){const{keyword:a,data:c,schemaCode:d}=o,tt=a==="maxItems"?codegen_1$e.operators.GT:codegen_1$e.operators.LT;o.fail$data((0,codegen_1$e._)`${c}.length ${tt} ${d}`)}};limitItems.default=def$k;var uniqueItems={},equal$1={};Object.defineProperty(equal$1,"__esModule",{value:!0});const equal=fastDeepEqual;equal.code='require("ajv/dist/runtime/equal").default';equal$1.default=equal;Object.defineProperty(uniqueItems,"__esModule",{value:!0});const dataType_1=dataType,codegen_1$d=codegen,util_1$g=util,equal_1$2=equal$1,error$c={message:({params:{i:o,j:a}})=>(0,codegen_1$d.str)`must NOT have duplicate items (items ## ${a} and ${o} are identical)`,params:({params:{i:o,j:a}})=>(0,codegen_1$d._)`{i: ${o}, j: ${a}}`},def$j={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:error$c,code(o){const{gen:a,data:c,$data:d,schema:tt,parentSchema:nt,schemaCode:$a,it:Ws}=o;if(!d&&!tt)return;const gu=a.let("valid"),Su=nt.items?(0,dataType_1.getSchemaTypes)(nt.items):[];o.block$data(gu,$u,(0,codegen_1$d._)`${$a} === false`),o.ok(gu);function $u(){const p0=a.let("i",(0,codegen_1$d._)`${c}.length`),y0=a.let("j");o.setParams({i:p0,j:y0}),a.assign(gu,!0),a.if((0,codegen_1$d._)`${p0} > 1`,()=>(Iu()?Xu:r0)(p0,y0))}function Iu(){return Su.length>0&&!Su.some(p0=>p0==="object"||p0==="array")}function Xu(p0,y0){const A0=a.name("item"),$0=(0,dataType_1.checkDataTypes)(Su,A0,Ws.opts.strictNumbers,dataType_1.DataType.Wrong),O0=a.const("indices",(0,codegen_1$d._)`{}`);a.for((0,codegen_1$d._)`;${p0}--;`,()=>{a.let(A0,(0,codegen_1$d._)`${c}[${p0}]`),a.if($0,(0,codegen_1$d._)`continue`),Su.length>1&&a.if((0,codegen_1$d._)`typeof ${A0} == "string"`,(0,codegen_1$d._)`${A0} += "_"`),a.if((0,codegen_1$d._)`typeof ${O0}[${A0}] == "number"`,()=>{a.assign(y0,(0,codegen_1$d._)`${O0}[${A0}]`),o.error(),a.assign(gu,!1).break()}).code((0,codegen_1$d._)`${O0}[${A0}] = ${p0}`)})}function r0(p0,y0){const A0=(0,util_1$g.useFunc)(a,equal_1$2.default),$0=a.name("outer");a.label($0).for((0,codegen_1$d._)`;${p0}--;`,()=>a.for((0,codegen_1$d._)`${y0} = ${p0}; ${y0}--;`,()=>a.if((0,codegen_1$d._)`${A0}(${c}[${p0}], ${c}[${y0}])`,()=>{o.error(),a.assign(gu,!1).break($0)})))}}};uniqueItems.default=def$j;var _const={};Object.defineProperty(_const,"__esModule",{value:!0});const codegen_1$c=codegen,util_1$f=util,equal_1$1=equal$1,error$b={message:"must be equal to constant",params:({schemaCode:o})=>(0,codegen_1$c._)`{allowedValue: ${o}}`},def$i={keyword:"const",$data:!0,error:error$b,code(o){const{gen:a,data:c,$data:d,schemaCode:tt,schema:nt}=o;d||nt&&typeof nt=="object"?o.fail$data((0,codegen_1$c._)`!${(0,util_1$f.useFunc)(a,equal_1$1.default)}(${c}, ${tt})`):o.fail((0,codegen_1$c._)`${nt} !== ${c}`)}};_const.default=def$i;var _enum={};Object.defineProperty(_enum,"__esModule",{value:!0});const codegen_1$b=codegen,util_1$e=util,equal_1=equal$1,error$a={message:"must be equal to one of the allowed values",params:({schemaCode:o})=>(0,codegen_1$b._)`{allowedValues: ${o}}`},def$h={keyword:"enum",schemaType:"array",$data:!0,error:error$a,code(o){const{gen:a,data:c,$data:d,schema:tt,schemaCode:nt,it:$a}=o;if(!d&&tt.length===0)throw new Error("enum must have non-empty array");const Ws=tt.length>=$a.opts.loopEnum;let gu;const Su=()=>gu??(gu=(0,util_1$e.useFunc)(a,equal_1.default));let $u;if(Ws||d)$u=a.let("valid"),o.block$data($u,Iu);else{if(!Array.isArray(tt))throw new Error("ajv implementation error");const r0=a.const("vSchema",nt);$u=(0,codegen_1$b.or)(...tt.map((p0,y0)=>Xu(r0,y0)))}o.pass($u);function Iu(){a.assign($u,!1),a.forOf("v",nt,r0=>a.if((0,codegen_1$b._)`${Su()}(${c}, ${r0})`,()=>a.assign($u,!0).break()))}function Xu(r0,p0){const y0=tt[p0];return typeof y0=="object"&&y0!==null?(0,codegen_1$b._)`${Su()}(${c}, ${r0}[${p0}])`:(0,codegen_1$b._)`${c} === ${y0}`}}};_enum.default=def$h;Object.defineProperty(validation$1,"__esModule",{value:!0});const limitNumber_1=limitNumber,multipleOf_1=multipleOf,limitLength_1=limitLength,pattern_1=pattern,limitProperties_1=limitProperties,required_1=required$1,limitItems_1=limitItems,uniqueItems_1=uniqueItems,const_1=_const,enum_1=_enum,validation=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},const_1.default,enum_1.default];validation$1.default=validation;var applicator={},additionalItems={};Object.defineProperty(additionalItems,"__esModule",{value:!0});additionalItems.validateAdditionalItems=void 0;const codegen_1$a=codegen,util_1$d=util,error$9={message:({params:{len:o}})=>(0,codegen_1$a.str)`must NOT have more than ${o} items`,params:({params:{len:o}})=>(0,codegen_1$a._)`{limit: ${o}}`},def$g={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:error$9,code(o){const{parentSchema:a,it:c}=o,{items:d}=a;if(!Array.isArray(d)){(0,util_1$d.checkStrictMode)(c,'"additionalItems" is ignored when "items" is not an array of schemas');return}validateAdditionalItems(o,d)}};function validateAdditionalItems(o,a){const{gen:c,schema:d,data:tt,keyword:nt,it:$a}=o;$a.items=!0;const Ws=c.const("len",(0,codegen_1$a._)`${tt}.length`);if(d===!1)o.setParams({len:a.length}),o.pass((0,codegen_1$a._)`${Ws} <= ${a.length}`);else if(typeof d=="object"&&!(0,util_1$d.alwaysValidSchema)($a,d)){const Su=c.var("valid",(0,codegen_1$a._)`${Ws} <= ${a.length}`);c.if((0,codegen_1$a.not)(Su),()=>gu(Su)),o.ok(Su)}function gu(Su){c.forRange("i",a.length,Ws,$u=>{o.subschema({keyword:nt,dataProp:$u,dataPropType:util_1$d.Type.Num},Su),$a.allErrors||c.if((0,codegen_1$a.not)(Su),()=>c.break())})}}additionalItems.validateAdditionalItems=validateAdditionalItems;additionalItems.default=def$g;var prefixItems={},items={};Object.defineProperty(items,"__esModule",{value:!0});items.validateTuple=void 0;const codegen_1$9=codegen,util_1$c=util,code_1$5=code,def$f={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(o){const{schema:a,it:c}=o;if(Array.isArray(a))return validateTuple$1(o,"additionalItems",a);c.items=!0,!(0,util_1$c.alwaysValidSchema)(c,a)&&o.ok((0,code_1$5.validateArray)(o))}};function validateTuple$1(o,a,c=o.schema){const{gen:d,parentSchema:tt,data:nt,keyword:$a,it:Ws}=o;$u(tt),Ws.opts.unevaluated&&c.length&&Ws.items!==!0&&(Ws.items=util_1$c.mergeEvaluated.items(d,c.length,Ws.items));const gu=d.name("valid"),Su=d.const("len",(0,codegen_1$9._)`${nt}.length`);c.forEach((Iu,Xu)=>{(0,util_1$c.alwaysValidSchema)(Ws,Iu)||(d.if((0,codegen_1$9._)`${Su} > ${Xu}`,()=>o.subschema({keyword:$a,schemaProp:Xu,dataProp:Xu},gu)),o.ok(gu))});function $u(Iu){const{opts:Xu,errSchemaPath:r0}=Ws,p0=c.length,y0=p0===Iu.minItems&&(p0===Iu.maxItems||Iu[a]===!1);if(Xu.strictTuples&&!y0){const A0=`"${$a}" is ${p0}-tuple, but minItems or maxItems/${a} are not specified or different at path "${r0}"`;(0,util_1$c.checkStrictMode)(Ws,A0,Xu.strictTuples)}}}items.validateTuple=validateTuple$1;items.default=def$f;Object.defineProperty(prefixItems,"__esModule",{value:!0});const items_1$1=items,def$e={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:o=>(0,items_1$1.validateTuple)(o,"items")};prefixItems.default=def$e;var items2020={};Object.defineProperty(items2020,"__esModule",{value:!0});const codegen_1$8=codegen,util_1$b=util,code_1$4=code,additionalItems_1$1=additionalItems,error$8={message:({params:{len:o}})=>(0,codegen_1$8.str)`must NOT have more than ${o} items`,params:({params:{len:o}})=>(0,codegen_1$8._)`{limit: ${o}}`},def$d={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:error$8,code(o){const{schema:a,parentSchema:c,it:d}=o,{prefixItems:tt}=c;d.items=!0,!(0,util_1$b.alwaysValidSchema)(d,a)&&(tt?(0,additionalItems_1$1.validateAdditionalItems)(o,tt):o.ok((0,code_1$4.validateArray)(o)))}};items2020.default=def$d;var contains={};Object.defineProperty(contains,"__esModule",{value:!0});const codegen_1$7=codegen,util_1$a=util,error$7={message:({params:{min:o,max:a}})=>a===void 0?(0,codegen_1$7.str)`must contain at least ${o} valid item(s)`:(0,codegen_1$7.str)`must contain at least ${o} and no more than ${a} valid item(s)`,params:({params:{min:o,max:a}})=>a===void 0?(0,codegen_1$7._)`{minContains: ${o}}`:(0,codegen_1$7._)`{minContains: ${o}, maxContains: ${a}}`},def$c={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:error$7,code(o){const{gen:a,schema:c,parentSchema:d,data:tt,it:nt}=o;let $a,Ws;const{minContains:gu,maxContains:Su}=d;nt.opts.next?($a=gu===void 0?1:gu,Ws=Su):$a=1;const $u=a.const("len",(0,codegen_1$7._)`${tt}.length`);if(o.setParams({min:$a,max:Ws}),Ws===void 0&&$a===0){(0,util_1$a.checkStrictMode)(nt,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(Ws!==void 0&&$a>Ws){(0,util_1$a.checkStrictMode)(nt,'"minContains" > "maxContains" is always invalid'),o.fail();return}if((0,util_1$a.alwaysValidSchema)(nt,c)){let y0=(0,codegen_1$7._)`${$u} >= ${$a}`;Ws!==void 0&&(y0=(0,codegen_1$7._)`${y0} && ${$u} <= ${Ws}`),o.pass(y0);return}nt.items=!0;const Iu=a.name("valid");Ws===void 0&&$a===1?r0(Iu,()=>a.if(Iu,()=>a.break())):$a===0?(a.let(Iu,!0),Ws!==void 0&&a.if((0,codegen_1$7._)`${tt}.length > 0`,Xu)):(a.let(Iu,!1),Xu()),o.result(Iu,()=>o.reset());function Xu(){const y0=a.name("_valid"),A0=a.let("count",0);r0(y0,()=>a.if(y0,()=>p0(A0)))}function r0(y0,A0){a.forRange("i",0,$u,$0=>{o.subschema({keyword:"contains",dataProp:$0,dataPropType:util_1$a.Type.Num,compositeRule:!0},y0),A0()})}function p0(y0){a.code((0,codegen_1$7._)`${y0}++`),Ws===void 0?a.if((0,codegen_1$7._)`${y0} >= ${$a}`,()=>a.assign(Iu,!0).break()):(a.if((0,codegen_1$7._)`${y0} > ${Ws}`,()=>a.assign(Iu,!1).break()),$a===1?a.assign(Iu,!0):a.if((0,codegen_1$7._)`${y0} >= ${$a}`,()=>a.assign(Iu,!0)))}}};contains.default=def$c;var dependencies={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.validateSchemaDeps=o.validatePropertyDeps=o.error=void 0;const a=codegen,c=util,d=code;o.error={message:({params:{property:gu,depsCount:Su,deps:$u}})=>{const Iu=Su===1?"property":"properties";return(0,a.str)`must have ${Iu} ${$u} when property ${gu} is present`},params:({params:{property:gu,depsCount:Su,deps:$u,missingProperty:Iu}})=>(0,a._)`{property: ${gu}, missingProperty: ${Iu}, - depsCount: ${xu}, - deps: ${$u}}`};const tt={keyword:"dependencies",type:"object",schemaType:"object",error:o.error,code(gu){const[xu,$u]=nt(gu);$a(gu,xu),Ys(gu,$u)}};function nt({schema:gu}){const xu={},$u={};for(const Iu in gu){if(Iu==="__proto__")continue;const Xu=Array.isArray(gu[Iu])?xu:$u;Xu[Iu]=gu[Iu]}return[xu,$u]}function $a(gu,xu=gu.schema){const{gen:$u,data:Iu,it:Xu}=gu;if(Object.keys(xu).length===0)return;const i0=$u.let("missing");for(const p0 in xu){const w0=xu[p0];if(w0.length===0)continue;const A0=(0,d.propertyInData)($u,Iu,p0,Xu.opts.ownProperties);gu.setParams({property:p0,depsCount:w0.length,deps:w0.join(", ")}),Xu.allErrors?$u.if(A0,()=>{for(const $0 of w0)(0,d.checkReportMissingProp)(gu,$0)}):($u.if((0,a._)`${A0} && (${(0,d.checkMissingProp)(gu,w0,i0)})`),(0,d.reportMissingProp)(gu,i0),$u.else())}}o.validatePropertyDeps=$a;function Ys(gu,xu=gu.schema){const{gen:$u,data:Iu,keyword:Xu,it:i0}=gu,p0=$u.name("valid");for(const w0 in xu)(0,c.alwaysValidSchema)(i0,xu[w0])||($u.if((0,d.propertyInData)($u,Iu,w0,i0.opts.ownProperties),()=>{const A0=gu.subschema({keyword:Xu,schemaProp:w0},p0);gu.mergeValidEvaluated(A0,p0)},()=>$u.var(p0,!0)),gu.ok(p0))}o.validateSchemaDeps=Ys,o.default=tt})(dependencies);var propertyNames={};Object.defineProperty(propertyNames,"__esModule",{value:!0});const codegen_1$6=codegen,util_1$9=util,error$6={message:"property name must be valid",params:({params:o})=>(0,codegen_1$6._)`{propertyName: ${o.propertyName}}`},def$b={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:error$6,code(o){const{gen:a,schema:c,data:d,it:tt}=o;if((0,util_1$9.alwaysValidSchema)(tt,c))return;const nt=a.name("valid");a.forIn("key",d,$a=>{o.setParams({propertyName:$a}),o.subschema({keyword:"propertyNames",data:$a,dataTypes:["string"],propertyName:$a,compositeRule:!0},nt),a.if((0,codegen_1$6.not)(nt),()=>{o.error(!0),tt.allErrors||a.break()})}),o.ok(nt)}};propertyNames.default=def$b;var additionalProperties={};Object.defineProperty(additionalProperties,"__esModule",{value:!0});const code_1$3=code,codegen_1$5=codegen,names_1=names$1,util_1$8=util,error$5={message:"must NOT have additional properties",params:({params:o})=>(0,codegen_1$5._)`{additionalProperty: ${o.additionalProperty}}`},def$a={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:error$5,code(o){const{gen:a,schema:c,parentSchema:d,data:tt,errsCount:nt,it:$a}=o;if(!nt)throw new Error("ajv implementation error");const{allErrors:Ys,opts:gu}=$a;if($a.props=!0,gu.removeAdditional!=="all"&&(0,util_1$8.alwaysValidSchema)($a,c))return;const xu=(0,code_1$3.allSchemaProperties)(d.properties),$u=(0,code_1$3.allSchemaProperties)(d.patternProperties);Iu(),o.ok((0,codegen_1$5._)`${nt} === ${names_1.default.errors}`);function Iu(){a.forIn("key",tt,A0=>{!xu.length&&!$u.length?p0(A0):a.if(Xu(A0),()=>p0(A0))})}function Xu(A0){let $0;if(xu.length>8){const O0=(0,util_1$8.schemaRefOrVal)($a,d.properties,"properties");$0=(0,code_1$3.isOwnProperty)(a,O0,A0)}else xu.length?$0=(0,codegen_1$5.or)(...xu.map(O0=>(0,codegen_1$5._)`${A0} === ${O0}`)):$0=codegen_1$5.nil;return $u.length&&($0=(0,codegen_1$5.or)($0,...$u.map(O0=>(0,codegen_1$5._)`${(0,code_1$3.usePattern)(o,O0)}.test(${A0})`))),(0,codegen_1$5.not)($0)}function i0(A0){a.code((0,codegen_1$5._)`delete ${tt}[${A0}]`)}function p0(A0){if(gu.removeAdditional==="all"||gu.removeAdditional&&c===!1){i0(A0);return}if(c===!1){o.setParams({additionalProperty:A0}),o.error(),Ys||a.break();return}if(typeof c=="object"&&!(0,util_1$8.alwaysValidSchema)($a,c)){const $0=a.name("valid");gu.removeAdditional==="failing"?(w0(A0,$0,!1),a.if((0,codegen_1$5.not)($0),()=>{o.reset(),i0(A0)})):(w0(A0,$0),Ys||a.if((0,codegen_1$5.not)($0),()=>a.break()))}}function w0(A0,$0,O0){const L0={keyword:"additionalProperties",dataProp:A0,dataPropType:util_1$8.Type.Str};O0===!1&&Object.assign(L0,{compositeRule:!0,createErrors:!1,allErrors:!1}),o.subschema(L0,$0)}}};additionalProperties.default=def$a;var properties$1={};Object.defineProperty(properties$1,"__esModule",{value:!0});const validate_1=validate$1,code_1$2=code,util_1$7=util,additionalProperties_1$1=additionalProperties,def$9={keyword:"properties",type:"object",schemaType:"object",code(o){const{gen:a,schema:c,parentSchema:d,data:tt,it:nt}=o;nt.opts.removeAdditional==="all"&&d.additionalProperties===void 0&&additionalProperties_1$1.default.code(new validate_1.KeywordCxt(nt,additionalProperties_1$1.default,"additionalProperties"));const $a=(0,code_1$2.allSchemaProperties)(c);for(const Iu of $a)nt.definedProperties.add(Iu);nt.opts.unevaluated&&$a.length&&nt.props!==!0&&(nt.props=util_1$7.mergeEvaluated.props(a,(0,util_1$7.toHash)($a),nt.props));const Ys=$a.filter(Iu=>!(0,util_1$7.alwaysValidSchema)(nt,c[Iu]));if(Ys.length===0)return;const gu=a.name("valid");for(const Iu of Ys)xu(Iu)?$u(Iu):(a.if((0,code_1$2.propertyInData)(a,tt,Iu,nt.opts.ownProperties)),$u(Iu),nt.allErrors||a.else().var(gu,!0),a.endIf()),o.it.definedProperties.add(Iu),o.ok(gu);function xu(Iu){return nt.opts.useDefaults&&!nt.compositeRule&&c[Iu].default!==void 0}function $u(Iu){o.subschema({keyword:"properties",schemaProp:Iu,dataProp:Iu},gu)}}};properties$1.default=def$9;var patternProperties={};Object.defineProperty(patternProperties,"__esModule",{value:!0});const code_1$1=code,codegen_1$4=codegen,util_1$6=util,util_2=util,def$8={keyword:"patternProperties",type:"object",schemaType:"object",code(o){const{gen:a,schema:c,data:d,parentSchema:tt,it:nt}=o,{opts:$a}=nt,Ys=(0,code_1$1.allSchemaProperties)(c),gu=Ys.filter(w0=>(0,util_1$6.alwaysValidSchema)(nt,c[w0]));if(Ys.length===0||gu.length===Ys.length&&(!nt.opts.unevaluated||nt.props===!0))return;const xu=$a.strictSchema&&!$a.allowMatchingProperties&&tt.properties,$u=a.name("valid");nt.props!==!0&&!(nt.props instanceof codegen_1$4.Name)&&(nt.props=(0,util_2.evaluatedPropsToName)(a,nt.props));const{props:Iu}=nt;Xu();function Xu(){for(const w0 of Ys)xu&&i0(w0),nt.allErrors?p0(w0):(a.var($u,!0),p0(w0),a.if($u))}function i0(w0){for(const A0 in xu)new RegExp(w0).test(A0)&&(0,util_1$6.checkStrictMode)(nt,`property ${A0} matches pattern ${w0} (use allowMatchingProperties)`)}function p0(w0){a.forIn("key",d,A0=>{a.if((0,codegen_1$4._)`${(0,code_1$1.usePattern)(o,w0)}.test(${A0})`,()=>{const $0=gu.includes(w0);$0||o.subschema({keyword:"patternProperties",schemaProp:w0,dataProp:A0,dataPropType:util_2.Type.Str},$u),nt.opts.unevaluated&&Iu!==!0?a.assign((0,codegen_1$4._)`${Iu}[${A0}]`,!0):!$0&&!nt.allErrors&&a.if((0,codegen_1$4.not)($u),()=>a.break())})})}}};patternProperties.default=def$8;var not={};Object.defineProperty(not,"__esModule",{value:!0});const util_1$5=util,def$7={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(o){const{gen:a,schema:c,it:d}=o;if((0,util_1$5.alwaysValidSchema)(d,c)){o.fail();return}const tt=a.name("valid");o.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},tt),o.failResult(tt,()=>o.reset(),()=>o.error())},error:{message:"must NOT be valid"}};not.default=def$7;var anyOf={};Object.defineProperty(anyOf,"__esModule",{value:!0});const code_1=code,def$6={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:code_1.validateUnion,error:{message:"must match a schema in anyOf"}};anyOf.default=def$6;var oneOf={};Object.defineProperty(oneOf,"__esModule",{value:!0});const codegen_1$3=codegen,util_1$4=util,error$4={message:"must match exactly one schema in oneOf",params:({params:o})=>(0,codegen_1$3._)`{passingSchemas: ${o.passing}}`},def$5={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:error$4,code(o){const{gen:a,schema:c,parentSchema:d,it:tt}=o;if(!Array.isArray(c))throw new Error("ajv implementation error");if(tt.opts.discriminator&&d.discriminator)return;const nt=c,$a=a.let("valid",!1),Ys=a.let("passing",null),gu=a.name("_valid");o.setParams({passing:Ys}),a.block(xu),o.result($a,()=>o.reset(),()=>o.error(!0));function xu(){nt.forEach(($u,Iu)=>{let Xu;(0,util_1$4.alwaysValidSchema)(tt,$u)?a.var(gu,!0):Xu=o.subschema({keyword:"oneOf",schemaProp:Iu,compositeRule:!0},gu),Iu>0&&a.if((0,codegen_1$3._)`${gu} && ${$a}`).assign($a,!1).assign(Ys,(0,codegen_1$3._)`[${Ys}, ${Iu}]`).else(),a.if(gu,()=>{a.assign($a,!0),a.assign(Ys,Iu),Xu&&o.mergeEvaluated(Xu,codegen_1$3.Name)})})}}};oneOf.default=def$5;var allOf={};Object.defineProperty(allOf,"__esModule",{value:!0});const util_1$3=util,def$4={keyword:"allOf",schemaType:"array",code(o){const{gen:a,schema:c,it:d}=o;if(!Array.isArray(c))throw new Error("ajv implementation error");const tt=a.name("valid");c.forEach((nt,$a)=>{if((0,util_1$3.alwaysValidSchema)(d,nt))return;const Ys=o.subschema({keyword:"allOf",schemaProp:$a},tt);o.ok(tt),o.mergeEvaluated(Ys)})}};allOf.default=def$4;var _if={};Object.defineProperty(_if,"__esModule",{value:!0});const codegen_1$2=codegen,util_1$2=util,error$3={message:({params:o})=>(0,codegen_1$2.str)`must match "${o.ifClause}" schema`,params:({params:o})=>(0,codegen_1$2._)`{failingKeyword: ${o.ifClause}}`},def$3={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:error$3,code(o){const{gen:a,parentSchema:c,it:d}=o;c.then===void 0&&c.else===void 0&&(0,util_1$2.checkStrictMode)(d,'"if" without "then" and "else" is ignored');const tt=hasSchema(d,"then"),nt=hasSchema(d,"else");if(!tt&&!nt)return;const $a=a.let("valid",!0),Ys=a.name("_valid");if(gu(),o.reset(),tt&&nt){const $u=a.let("ifClause");o.setParams({ifClause:$u}),a.if(Ys,xu("then",$u),xu("else",$u))}else tt?a.if(Ys,xu("then")):a.if((0,codegen_1$2.not)(Ys),xu("else"));o.pass($a,()=>o.error(!0));function gu(){const $u=o.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},Ys);o.mergeEvaluated($u)}function xu($u,Iu){return()=>{const Xu=o.subschema({keyword:$u},Ys);a.assign($a,Ys),o.mergeValidEvaluated(Xu,$a),Iu?a.assign(Iu,(0,codegen_1$2._)`${$u}`):o.setParams({ifClause:$u})}}}};function hasSchema(o,a){const c=o.schema[a];return c!==void 0&&!(0,util_1$2.alwaysValidSchema)(o,c)}_if.default=def$3;var thenElse={};Object.defineProperty(thenElse,"__esModule",{value:!0});const util_1$1=util,def$2={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:o,parentSchema:a,it:c}){a.if===void 0&&(0,util_1$1.checkStrictMode)(c,`"${o}" without "if" is ignored`)}};thenElse.default=def$2;Object.defineProperty(applicator,"__esModule",{value:!0});const additionalItems_1=additionalItems,prefixItems_1=prefixItems,items_1=items,items2020_1=items2020,contains_1=contains,dependencies_1=dependencies,propertyNames_1=propertyNames,additionalProperties_1=additionalProperties,properties_1=properties$1,patternProperties_1=patternProperties,not_1=not,anyOf_1=anyOf,oneOf_1=oneOf,allOf_1=allOf,if_1=_if,thenElse_1=thenElse;function getApplicator(o=!1){const a=[not_1.default,anyOf_1.default,oneOf_1.default,allOf_1.default,if_1.default,thenElse_1.default,propertyNames_1.default,additionalProperties_1.default,dependencies_1.default,properties_1.default,patternProperties_1.default];return o?a.push(prefixItems_1.default,items2020_1.default):a.push(additionalItems_1.default,items_1.default),a.push(contains_1.default),a}applicator.default=getApplicator;var format$3={},format$2={};Object.defineProperty(format$2,"__esModule",{value:!0});const codegen_1$1=codegen,error$2={message:({schemaCode:o})=>(0,codegen_1$1.str)`must match format "${o}"`,params:({schemaCode:o})=>(0,codegen_1$1._)`{format: ${o}}`},def$1={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:error$2,code(o,a){const{gen:c,data:d,$data:tt,schema:nt,schemaCode:$a,it:Ys}=o,{opts:gu,errSchemaPath:xu,schemaEnv:$u,self:Iu}=Ys;if(!gu.validateFormats)return;tt?Xu():i0();function Xu(){const p0=c.scopeValue("formats",{ref:Iu.formats,code:gu.code.formats}),w0=c.const("fDef",(0,codegen_1$1._)`${p0}[${$a}]`),A0=c.let("fType"),$0=c.let("format");c.if((0,codegen_1$1._)`typeof ${w0} == "object" && !(${w0} instanceof RegExp)`,()=>c.assign(A0,(0,codegen_1$1._)`${w0}.type || "string"`).assign($0,(0,codegen_1$1._)`${w0}.validate`),()=>c.assign(A0,(0,codegen_1$1._)`"string"`).assign($0,w0)),o.fail$data((0,codegen_1$1.or)(O0(),L0()));function O0(){return gu.strictSchema===!1?codegen_1$1.nil:(0,codegen_1$1._)`${$a} && !${$0}`}function L0(){const q0=$u.$async?(0,codegen_1$1._)`(${w0}.async ? await ${$0}(${d}) : ${$0}(${d}))`:(0,codegen_1$1._)`${$0}(${d})`,F0=(0,codegen_1$1._)`(typeof ${$0} == "function" ? ${q0} : ${$0}.test(${d}))`;return(0,codegen_1$1._)`${$0} && ${$0} !== true && ${A0} === ${a} && !${F0}`}}function i0(){const p0=Iu.formats[nt];if(!p0){O0();return}if(p0===!0)return;const[w0,A0,$0]=L0(p0);w0===a&&o.pass(q0());function O0(){if(gu.strictSchema===!1){Iu.logger.warn(F0());return}throw new Error(F0());function F0(){return`unknown format "${nt}" ignored in schema at path "${xu}"`}}function L0(F0){const u1=F0 instanceof RegExp?(0,codegen_1$1.regexpCode)(F0):gu.code.formats?(0,codegen_1$1._)`${gu.code.formats}${(0,codegen_1$1.getProperty)(nt)}`:void 0,g1=c.scopeValue("formats",{key:nt,ref:F0,code:u1});return typeof F0=="object"&&!(F0 instanceof RegExp)?[F0.type||"string",F0.validate,(0,codegen_1$1._)`${g1}.validate`]:["string",F0,g1]}function q0(){if(typeof p0=="object"&&!(p0 instanceof RegExp)&&p0.async){if(!$u.$async)throw new Error("async format in sync schema");return(0,codegen_1$1._)`await ${$0}(${d})`}return typeof A0=="function"?(0,codegen_1$1._)`${$0}(${d})`:(0,codegen_1$1._)`${$0}.test(${d})`}}}};format$2.default=def$1;Object.defineProperty(format$3,"__esModule",{value:!0});const format_1$1=format$2,format$1=[format_1$1.default];format$3.default=format$1;var metadata={};Object.defineProperty(metadata,"__esModule",{value:!0});metadata.contentVocabulary=metadata.metadataVocabulary=void 0;metadata.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];metadata.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"];Object.defineProperty(draft7,"__esModule",{value:!0});const core_1=core$1,validation_1=validation$1,applicator_1=applicator,format_1=format$3,metadata_1=metadata,draft7Vocabularies=[core_1.default,validation_1.default,(0,applicator_1.default)(),format_1.default,metadata_1.metadataVocabulary,metadata_1.contentVocabulary];draft7.default=draft7Vocabularies;var discriminator={},types={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.DiscrError=void 0,function(a){a.Tag="tag",a.Mapping="mapping"}(o.DiscrError||(o.DiscrError={}))})(types);Object.defineProperty(discriminator,"__esModule",{value:!0});const codegen_1=codegen,types_1$1=types,compile_1=compile,util_1=util,error$1={message:({params:{discrError:o,tagName:a}})=>o===types_1$1.DiscrError.Tag?`tag "${a}" must be string`:`value of tag "${a}" must be in oneOf`,params:({params:{discrError:o,tag:a,tagName:c}})=>(0,codegen_1._)`{error: ${o}, tag: ${c}, tagValue: ${a}}`},def={keyword:"discriminator",type:"object",schemaType:"object",error:error$1,code(o){const{gen:a,data:c,schema:d,parentSchema:tt,it:nt}=o,{oneOf:$a}=tt;if(!nt.opts.discriminator)throw new Error("discriminator: requires discriminator option");const Ys=d.propertyName;if(typeof Ys!="string")throw new Error("discriminator: requires propertyName");if(d.mapping)throw new Error("discriminator: mapping is not supported");if(!$a)throw new Error("discriminator: requires oneOf keyword");const gu=a.let("valid",!1),xu=a.const("tag",(0,codegen_1._)`${c}${(0,codegen_1.getProperty)(Ys)}`);a.if((0,codegen_1._)`typeof ${xu} == "string"`,()=>$u(),()=>o.error(!1,{discrError:types_1$1.DiscrError.Tag,tag:xu,tagName:Ys})),o.ok(gu);function $u(){const i0=Xu();a.if(!1);for(const p0 in i0)a.elseIf((0,codegen_1._)`${xu} === ${p0}`),a.assign(gu,Iu(i0[p0]));a.else(),o.error(!1,{discrError:types_1$1.DiscrError.Mapping,tag:xu,tagName:Ys}),a.endIf()}function Iu(i0){const p0=a.name("valid"),w0=o.subschema({keyword:"oneOf",schemaProp:i0},p0);return o.mergeEvaluated(w0,codegen_1.Name),p0}function Xu(){var i0;const p0={},w0=$0(tt);let A0=!0;for(let q0=0;q0<$a.length;q0++){let F0=$a[q0];F0!=null&&F0.$ref&&!(0,util_1.schemaHasRulesButRef)(F0,nt.self.RULES)&&(F0=compile_1.resolveRef.call(nt.self,nt.schemaEnv.root,nt.baseId,F0==null?void 0:F0.$ref),F0 instanceof compile_1.SchemaEnv&&(F0=F0.schema));const u1=(i0=F0==null?void 0:F0.properties)===null||i0===void 0?void 0:i0[Ys];if(typeof u1!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${Ys}"`);A0=A0&&(w0||$0(F0)),O0(u1,q0)}if(!A0)throw new Error(`discriminator: "${Ys}" must be required`);return p0;function $0({required:q0}){return Array.isArray(q0)&&q0.includes(Ys)}function O0(q0,F0){if(q0.const)L0(q0.const,F0);else if(q0.enum)for(const u1 of q0.enum)L0(u1,F0);else throw new Error(`discriminator: "properties/${Ys}" must have "const" or "enum"`)}function L0(q0,F0){if(typeof q0!="string"||q0 in p0)throw new Error(`discriminator: "${Ys}" values must be unique strings`);p0[q0]=F0}}}};discriminator.default=def;const $schema="http://json-schema.org/draft-07/schema#",$id="http://json-schema.org/draft-07/schema#",title="Core schema meta-schema",definitions={schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type=["object","boolean"],properties={$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},require$$3={$schema,$id,title,definitions,type,properties,default:!0};(function(o,a){Object.defineProperty(a,"__esModule",{value:!0}),a.MissingRefError=a.ValidationError=a.CodeGen=a.Name=a.nil=a.stringify=a.str=a._=a.KeywordCxt=void 0;const c=core$2,d=draft7,tt=discriminator,nt=require$$3,$a=["/properties"],Ys="http://json-schema.org/draft-07/schema";class gu extends c.default{_addVocabularies(){super._addVocabularies(),d.default.forEach(p0=>this.addVocabulary(p0)),this.opts.discriminator&&this.addKeyword(tt.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const p0=this.opts.$data?this.$dataMetaSchema(nt,$a):nt;this.addMetaSchema(p0,Ys,!1),this.refs["http://json-schema.org/schema"]=Ys}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Ys)?Ys:void 0)}}o.exports=a=gu,Object.defineProperty(a,"__esModule",{value:!0}),a.default=gu;var xu=validate$1;Object.defineProperty(a,"KeywordCxt",{enumerable:!0,get:function(){return xu.KeywordCxt}});var $u=codegen;Object.defineProperty(a,"_",{enumerable:!0,get:function(){return $u._}}),Object.defineProperty(a,"str",{enumerable:!0,get:function(){return $u.str}}),Object.defineProperty(a,"stringify",{enumerable:!0,get:function(){return $u.stringify}}),Object.defineProperty(a,"nil",{enumerable:!0,get:function(){return $u.nil}}),Object.defineProperty(a,"Name",{enumerable:!0,get:function(){return $u.Name}}),Object.defineProperty(a,"CodeGen",{enumerable:!0,get:function(){return $u.CodeGen}});var Iu=validation_error;Object.defineProperty(a,"ValidationError",{enumerable:!0,get:function(){return Iu.default}});var Xu=ref_error;Object.defineProperty(a,"MissingRefError",{enumerable:!0,get:function(){return Xu.default}})})(ajv,ajv.exports);var ajvExports=ajv.exports,dist={exports:{}},formats={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.formatNames=o.fastFormats=o.fullFormats=void 0;function a(B1,lv){return{validate:B1,compare:lv}}o.fullFormats={date:a(nt,$a),time:a(gu,xu),"date-time":a(Iu,Xu),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:w0,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:E1,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:$0,int32:{type:"number",validate:q0},int64:{type:"number",validate:F0},float:{type:"number",validate:u1},double:{type:"number",validate:u1},password:!0,binary:!0},o.fastFormats={...o.fullFormats,date:a(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,$a),time:a(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,xu),"date-time":a(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,Xu),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},o.formatNames=Object.keys(o.fullFormats);function c(B1){return B1%4===0&&(B1%100!==0||B1%400===0)}const d=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,tt=[0,31,28,31,30,31,30,31,31,30,31,30,31];function nt(B1){const lv=d.exec(B1);if(!lv)return!1;const j1=+lv[1],r1=+lv[2],t1=+lv[3];return r1>=1&&r1<=12&&t1>=1&&t1<=(r1===2&&c(j1)?29:tt[r1])}function $a(B1,lv){if(B1&&lv)return B1>lv?1:B1lv?1:B1=O0}function F0(B1){return Number.isInteger(B1)}function u1(){return!0}const g1=/[^\\]\\Z/;function E1(B1){if(g1.test(B1))return!1;try{return new RegExp(B1),!0}catch{return!1}}})(formats);var limit={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.formatLimitDefinition=void 0;const a=ajvExports,c=codegen,d=c.operators,tt={formatMaximum:{okStr:"<=",ok:d.LTE,fail:d.GT},formatMinimum:{okStr:">=",ok:d.GTE,fail:d.LT},formatExclusiveMaximum:{okStr:"<",ok:d.LT,fail:d.GTE},formatExclusiveMinimum:{okStr:">",ok:d.GT,fail:d.LTE}},nt={message:({keyword:Ys,schemaCode:gu})=>c.str`should be ${tt[Ys].okStr} ${gu}`,params:({keyword:Ys,schemaCode:gu})=>c._`{comparison: ${tt[Ys].okStr}, limit: ${gu}}`};o.formatLimitDefinition={keyword:Object.keys(tt),type:"string",schemaType:"string",$data:!0,error:nt,code(Ys){const{gen:gu,data:xu,schemaCode:$u,keyword:Iu,it:Xu}=Ys,{opts:i0,self:p0}=Xu;if(!i0.validateFormats)return;const w0=new a.KeywordCxt(Xu,p0.RULES.all.format.definition,"format");w0.$data?A0():$0();function A0(){const L0=gu.scopeValue("formats",{ref:p0.formats,code:i0.code.formats}),q0=gu.const("fmt",c._`${L0}[${w0.schemaCode}]`);Ys.fail$data(c.or(c._`typeof ${q0} != "object"`,c._`${q0} instanceof RegExp`,c._`typeof ${q0}.compare != "function"`,O0(q0)))}function $0(){const L0=w0.schema,q0=p0.formats[L0];if(!q0||q0===!0)return;if(typeof q0!="object"||q0 instanceof RegExp||typeof q0.compare!="function")throw new Error(`"${Iu}": format "${L0}" does not define "compare" function`);const F0=gu.scopeValue("formats",{key:L0,ref:q0,code:i0.code.formats?c._`${i0.code.formats}${c.getProperty(L0)}`:void 0});Ys.fail$data(O0(F0))}function O0(L0){return c._`${L0}.compare(${xu}, ${$u}) ${tt[Iu].fail} 0`}},dependencies:["format"]};const $a=Ys=>(Ys.addKeyword(o.formatLimitDefinition),Ys);o.default=$a})(limit);(function(o,a){Object.defineProperty(a,"__esModule",{value:!0});const c=formats,d=limit,tt=codegen,nt=new tt.Name("fullFormats"),$a=new tt.Name("fastFormats"),Ys=(xu,$u={keywords:!0})=>{if(Array.isArray($u))return gu(xu,$u,c.fullFormats,nt),xu;const[Iu,Xu]=$u.mode==="fast"?[c.fastFormats,$a]:[c.fullFormats,nt],i0=$u.formats||c.formatNames;return gu(xu,i0,Iu,Xu),$u.keywords&&d.default(xu),xu};Ys.get=(xu,$u="full")=>{const Xu=($u==="fast"?c.fastFormats:c.fullFormats)[xu];if(!Xu)throw new Error(`Unknown format "${xu}"`);return Xu};function gu(xu,$u,Iu,Xu){var i0,p0;(i0=(p0=xu.opts.code).formats)!==null&&i0!==void 0||(p0.formats=tt._`require("ajv-formats/dist/formats").${Xu}`);for(const w0 of $u)xu.addFormat(w0,Iu[w0])}o.exports=a=Ys,Object.defineProperty(a,"__esModule",{value:!0}),a.default=Ys})(dist,dist.exports);var distExports=dist.exports,lib$2={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.AbiSerializationType=o.AbiFunctionModifier=o.AbiFunctionKind=o.SCHEMA_VERSION=void 0,o.SCHEMA_VERSION="0.3.0",function(a){a.View="view",a.Call="call"}(o.AbiFunctionKind||(o.AbiFunctionKind={})),function(a){a.Init="init",a.Private="private",a.Payable="payable"}(o.AbiFunctionModifier||(o.AbiFunctionModifier={})),function(a){a.Json="json",a.Borsh="borsh"}(o.AbiSerializationType||(o.AbiSerializationType={}))})(lib$2);var errors$1={};Object.defineProperty(errors$1,"__esModule",{value:!0});errors$1.ConflictingOptions=errors$1.ArgumentSchemaError=errors$1.UnknownArgumentError=errors$1.UnsupportedSerializationError=void 0;class UnsupportedSerializationError extends Error{constructor(a,c){super(`Contract method '${a}' is using an unsupported serialization type ${c}`)}}errors$1.UnsupportedSerializationError=UnsupportedSerializationError;class UnknownArgumentError extends Error{constructor(a,c){super(`Unrecognized argument '${a}', expected '${JSON.stringify(c)}'`)}}errors$1.UnknownArgumentError=UnknownArgumentError;class ArgumentSchemaError extends Error{constructor(a,c){super(`Argument '${a}' does not conform to the specified ABI schema: '${JSON.stringify(c)}'`)}}errors$1.ArgumentSchemaError=ArgumentSchemaError;class ConflictingOptions extends Error{constructor(){super("Conflicting contract method options have been passed. You can either specify ABI or a list of view/call methods.")}}errors$1.ConflictingOptions=ConflictingOptions;var __awaiter$6=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__importDefault$3=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(contract$1,"__esModule",{value:!0});contract$1.Contract=void 0;const utils_1$1=lib$9,types_1=lib$8,local_view_execution_1=localViewExecution,ajv_1=__importDefault$3(ajvExports),ajv_formats_1=__importDefault$3(distExports),bn_js_1$3=__importDefault$3(bnExports$1),depd_1=__importDefault$3(browser$g),near_abi_1=lib$2,errors_1=errors$1;function nameFunction(o,a){return{[o](...c){return a(...c)}}[o]}function validateArguments(o,a,c,d){var tt;if(!isObject$f(o))return;if(a.params&&a.params.serialization_type!==near_abi_1.AbiSerializationType.Json)throw new errors_1.UnsupportedSerializationError(a.name,a.params.serialization_type);if(a.result&&a.result.serialization_type!==near_abi_1.AbiSerializationType.Json)throw new errors_1.UnsupportedSerializationError(a.name,a.result.serialization_type);const nt=((tt=a.params)===null||tt===void 0?void 0:tt.args)||[];for(const $a of nt){const Ys=o[$a.name],gu=$a.type_schema;gu.definitions=d.body.root_schema.definitions;const xu=c.compile(gu);if(!xu(Ys))throw new errors_1.ArgumentSchemaError($a.name,xu.errors)}for(const $a of Object.keys(o))if(!nt.find(gu=>gu.name===$a))throw new errors_1.UnknownArgumentError($a,nt.map(gu=>gu.name))}function createAjv(){const o=new ajv_1.default({strictSchema:!1,formats:{uint32:!0,uint64:!0}});return(0,ajv_formats_1.default)(o),o}const isUint8Array=o=>o&&o.byteLength!==void 0&&o.byteLength===o.length,isObject$f=o=>Object.prototype.toString.call(o)==="[object Object]";class Contract{constructor(a,c,d){this.account=a,this.contractId=c,this.lve=new local_view_execution_1.LocalViewExecution(a);const{viewMethods:tt=[],changeMethods:nt=[],abi:$a,useLocalViewExecution:Ys}=d;let gu=tt.map(Iu=>({name:Iu,abi:null})),xu=nt.map(Iu=>({name:Iu,abi:null}));if($a){if(gu.length>0||xu.length>0)throw new errors_1.ConflictingOptions;gu=$a.body.functions.filter(Iu=>Iu.kind===near_abi_1.AbiFunctionKind.View).map(Iu=>({name:Iu.name,abi:Iu})),xu=$a.body.functions.filter(Iu=>Iu.kind===near_abi_1.AbiFunctionKind.Call).map(Iu=>({name:Iu.name,abi:Iu}))}const $u=createAjv();gu.forEach(({name:Iu,abi:Xu})=>{Object.defineProperty(this,Iu,{writable:!1,enumerable:!0,value:nameFunction(Iu,(i0={},p0={},...w0)=>__awaiter$6(this,void 0,void 0,function*(){if(w0.length||!(isObject$f(i0)||isUint8Array(i0))||!isObject$f(p0))throw new types_1.PositionalArgsError;if(Xu&&validateArguments(i0,Xu,$u,$a),Ys)try{return yield this.lve.viewFunction(Object.assign({contractId:this.contractId,methodName:Iu,args:i0},p0))}catch(A0){utils_1$1.Logger.warn(`Local view execution failed with: "${A0.message}"`),utils_1$1.Logger.warn("Fallback to normal RPC call")}return this.account.viewFunction(Object.assign({contractId:this.contractId,methodName:Iu,args:i0},p0))}))})}),xu.forEach(({name:Iu,abi:Xu})=>{Object.defineProperty(this,Iu,{writable:!1,enumerable:!0,value:nameFunction(Iu,(...i0)=>__awaiter$6(this,void 0,void 0,function*(){if(i0.length&&(i0.length>3||!(isObject$f(i0[0])||isUint8Array(i0[0]))))throw new types_1.PositionalArgsError;return(i0.length>1||!(i0[0]&&i0[0].args))&&((0,depd_1.default)("contract.methodName(args, gas, amount)")("use `contract.methodName({ args, gas?, amount?, callbackUrl?, meta? })` instead"),i0[0]={args:i0[0],gas:i0[1],amount:i0[2]}),Xu&&validateArguments(i0[0].args,Xu,$u,$a),this._changeMethod(Object.assign({methodName:Iu},i0[0]))}))})})}_changeMethod({args:a,methodName:c,gas:d,amount:tt,meta:nt,callbackUrl:$a}){return __awaiter$6(this,void 0,void 0,function*(){validateBNLike({gas:d,amount:tt});const Ys=yield this.account.functionCall({contractId:this.contractId,methodName:c,args:a,gas:d,attachedDeposit:tt,walletMeta:nt,walletCallbackUrl:$a});return(0,utils_1$1.getTransactionLastResult)(Ys)})}}contract$1.Contract=Contract;function validateBNLike(o){const a="number, decimal string or BN";for(const c of Object.keys(o)){const d=o[c];if(d&&!bn_js_1$3.default.isBN(d)&&isNaN(d))throw new types_1.ArgumentTypeError(c,a,d)}}(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MultisigStateStatus=o.MultisigDeleteRequestRejectionError=o.UnsupportedSerializationError=o.UnknownArgumentError=o.ConflictingOptions=o.ArgumentSchemaError=o.Contract=o.MULTISIG_CONFIRM_METHODS=o.MULTISIG_CHANGE_METHODS=o.MULTISIG_DEPOSIT=o.MULTISIG_GAS=o.MULTISIG_ALLOWANCE=o.MULTISIG_STORAGE_KEY=o.Connection=o.AccountMultisig=o.UrlAccountCreator=o.LocalAccountCreator=o.AccountCreator=o.Account2FA=o.Account=void 0;var a=account$1;Object.defineProperty(o,"Account",{enumerable:!0,get:function(){return a.Account}});var c=account_2fa;Object.defineProperty(o,"Account2FA",{enumerable:!0,get:function(){return c.Account2FA}});var d=account_creator$1;Object.defineProperty(o,"AccountCreator",{enumerable:!0,get:function(){return d.AccountCreator}}),Object.defineProperty(o,"LocalAccountCreator",{enumerable:!0,get:function(){return d.LocalAccountCreator}}),Object.defineProperty(o,"UrlAccountCreator",{enumerable:!0,get:function(){return d.UrlAccountCreator}});var tt=account_multisig$1;Object.defineProperty(o,"AccountMultisig",{enumerable:!0,get:function(){return tt.AccountMultisig}});var nt=connection$1;Object.defineProperty(o,"Connection",{enumerable:!0,get:function(){return nt.Connection}});var $a=constants$4;Object.defineProperty(o,"MULTISIG_STORAGE_KEY",{enumerable:!0,get:function(){return $a.MULTISIG_STORAGE_KEY}}),Object.defineProperty(o,"MULTISIG_ALLOWANCE",{enumerable:!0,get:function(){return $a.MULTISIG_ALLOWANCE}}),Object.defineProperty(o,"MULTISIG_GAS",{enumerable:!0,get:function(){return $a.MULTISIG_GAS}}),Object.defineProperty(o,"MULTISIG_DEPOSIT",{enumerable:!0,get:function(){return $a.MULTISIG_DEPOSIT}}),Object.defineProperty(o,"MULTISIG_CHANGE_METHODS",{enumerable:!0,get:function(){return $a.MULTISIG_CHANGE_METHODS}}),Object.defineProperty(o,"MULTISIG_CONFIRM_METHODS",{enumerable:!0,get:function(){return $a.MULTISIG_CONFIRM_METHODS}});var Ys=contract$1;Object.defineProperty(o,"Contract",{enumerable:!0,get:function(){return Ys.Contract}});var gu=errors$1;Object.defineProperty(o,"ArgumentSchemaError",{enumerable:!0,get:function(){return gu.ArgumentSchemaError}}),Object.defineProperty(o,"ConflictingOptions",{enumerable:!0,get:function(){return gu.ConflictingOptions}}),Object.defineProperty(o,"UnknownArgumentError",{enumerable:!0,get:function(){return gu.UnknownArgumentError}}),Object.defineProperty(o,"UnsupportedSerializationError",{enumerable:!0,get:function(){return gu.UnsupportedSerializationError}});var xu=types$1;Object.defineProperty(o,"MultisigDeleteRequestRejectionError",{enumerable:!0,get:function(){return xu.MultisigDeleteRequestRejectionError}}),Object.defineProperty(o,"MultisigStateStatus",{enumerable:!0,get:function(){return xu.MultisigStateStatus}})})(lib$4);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.logWarning=o.TypedError=o.PositionalArgsError=o.ErrorContext=o.ArgumentTypeError=o.UnsupportedSerializationError=o.UnknownArgumentError=o.ConflictingOptions=o.ArgumentSchemaError=void 0;var a=lib$4;Object.defineProperty(o,"ArgumentSchemaError",{enumerable:!0,get:function(){return a.ArgumentSchemaError}}),Object.defineProperty(o,"ConflictingOptions",{enumerable:!0,get:function(){return a.ConflictingOptions}}),Object.defineProperty(o,"UnknownArgumentError",{enumerable:!0,get:function(){return a.UnknownArgumentError}}),Object.defineProperty(o,"UnsupportedSerializationError",{enumerable:!0,get:function(){return a.UnsupportedSerializationError}});var c=lib$8;Object.defineProperty(o,"ArgumentTypeError",{enumerable:!0,get:function(){return c.ArgumentTypeError}}),Object.defineProperty(o,"ErrorContext",{enumerable:!0,get:function(){return c.ErrorContext}}),Object.defineProperty(o,"PositionalArgsError",{enumerable:!0,get:function(){return c.PositionalArgsError}}),Object.defineProperty(o,"TypedError",{enumerable:!0,get:function(){return c.TypedError}});var d=lib$9;Object.defineProperty(o,"logWarning",{enumerable:!0,get:function(){return d.logWarning}})})(errors$3);var logger$1={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Logger=void 0;var a=lib$9;Object.defineProperty(o,"Logger",{enumerable:!0,get:function(){return a.Logger}})})(logger$1);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(i0,p0,w0,A0){A0===void 0&&(A0=w0);var $0=Object.getOwnPropertyDescriptor(p0,w0);(!$0||("get"in $0?!p0.__esModule:$0.writable||$0.configurable))&&($0={enumerable:!0,get:function(){return p0[w0]}}),Object.defineProperty(i0,A0,$0)}:function(i0,p0,w0,A0){A0===void 0&&(A0=w0),i0[A0]=p0[w0]}),c=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(i0,p0){Object.defineProperty(i0,"default",{enumerable:!0,value:p0})}:function(i0,p0){i0.default=p0}),d=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(i0){if(i0&&i0.__esModule)return i0;var p0={};if(i0!=null)for(var w0 in i0)w0!=="default"&&Object.prototype.hasOwnProperty.call(i0,w0)&&a(p0,i0,w0);return c(p0,i0),p0};Object.defineProperty(o,"__esModule",{value:!0}),o.Logger=o.logWarning=o.rpc_errors=o.KeyPairEd25519=o.KeyPair=o.PublicKey=o.format=o.enums=o.web=o.serialize=o.key_pair=void 0;const tt=d(key_pair);o.key_pair=tt;const nt=d(serialize$2);o.serialize=nt;const $a=d(web);o.web=$a;const Ys=d(enums);o.enums=Ys;const gu=d(format$4);o.format=gu;const xu=d(rpc_errors);o.rpc_errors=xu;const $u=key_pair;Object.defineProperty(o,"PublicKey",{enumerable:!0,get:function(){return $u.PublicKey}}),Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return $u.KeyPair}}),Object.defineProperty(o,"KeyPairEd25519",{enumerable:!0,get:function(){return $u.KeyPairEd25519}});const Iu=errors$3;Object.defineProperty(o,"logWarning",{enumerable:!0,get:function(){return Iu.logWarning}});const Xu=logger$1;Object.defineProperty(o,"Logger",{enumerable:!0,get:function(){return Xu.Logger}})})(utils$s);var transaction={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.transfer=o.stake=o.functionCallAccessKey=o.functionCall=o.fullAccessKey=o.deployContract=o.deleteKey=o.deleteAccount=o.createAccount=o.addKey=o.encodeDelegateAction=o.encodeSignedDelegate=o.Transaction=o.SignedTransaction=o.Signature=o.signTransaction=o.createTransaction=o.SCHEMA=o.Transfer=o.Stake=o.FunctionCallPermission=o.FunctionCall=o.FullAccessPermission=o.DeployContract=o.DeleteKey=o.DeleteAccount=o.CreateAccount=o.AddKey=o.AccessKeyPermission=o.AccessKey=o.Action=o.stringifyJsonOrBytes=void 0;var a=lib$5;Object.defineProperty(o,"stringifyJsonOrBytes",{enumerable:!0,get:function(){return a.stringifyJsonOrBytes}}),Object.defineProperty(o,"Action",{enumerable:!0,get:function(){return a.Action}}),Object.defineProperty(o,"AccessKey",{enumerable:!0,get:function(){return a.AccessKey}}),Object.defineProperty(o,"AccessKeyPermission",{enumerable:!0,get:function(){return a.AccessKeyPermission}}),Object.defineProperty(o,"AddKey",{enumerable:!0,get:function(){return a.AddKey}}),Object.defineProperty(o,"CreateAccount",{enumerable:!0,get:function(){return a.CreateAccount}}),Object.defineProperty(o,"DeleteAccount",{enumerable:!0,get:function(){return a.DeleteAccount}}),Object.defineProperty(o,"DeleteKey",{enumerable:!0,get:function(){return a.DeleteKey}}),Object.defineProperty(o,"DeployContract",{enumerable:!0,get:function(){return a.DeployContract}}),Object.defineProperty(o,"FullAccessPermission",{enumerable:!0,get:function(){return a.FullAccessPermission}}),Object.defineProperty(o,"FunctionCall",{enumerable:!0,get:function(){return a.FunctionCall}}),Object.defineProperty(o,"FunctionCallPermission",{enumerable:!0,get:function(){return a.FunctionCallPermission}}),Object.defineProperty(o,"Stake",{enumerable:!0,get:function(){return a.Stake}}),Object.defineProperty(o,"Transfer",{enumerable:!0,get:function(){return a.Transfer}}),Object.defineProperty(o,"SCHEMA",{enumerable:!0,get:function(){return a.SCHEMA}}),Object.defineProperty(o,"createTransaction",{enumerable:!0,get:function(){return a.createTransaction}}),Object.defineProperty(o,"signTransaction",{enumerable:!0,get:function(){return a.signTransaction}}),Object.defineProperty(o,"Signature",{enumerable:!0,get:function(){return a.Signature}}),Object.defineProperty(o,"SignedTransaction",{enumerable:!0,get:function(){return a.SignedTransaction}}),Object.defineProperty(o,"Transaction",{enumerable:!0,get:function(){return a.Transaction}}),Object.defineProperty(o,"encodeSignedDelegate",{enumerable:!0,get:function(){return a.encodeSignedDelegate}}),Object.defineProperty(o,"encodeDelegateAction",{enumerable:!0,get:function(){return a.encodeDelegateAction}});const c=lib$5,d=(i0,p0)=>c.actionCreators.addKey(i0,p0);o.addKey=d;const tt=()=>c.actionCreators.createAccount();o.createAccount=tt;const nt=i0=>c.actionCreators.deleteAccount(i0);o.deleteAccount=nt;const $a=i0=>c.actionCreators.deleteKey(i0);o.deleteKey=$a;const Ys=i0=>c.actionCreators.deployContract(i0);o.deployContract=Ys;const gu=()=>c.actionCreators.fullAccessKey();o.fullAccessKey=gu;const xu=(i0,p0,w0,A0,$0,O0)=>c.actionCreators.functionCall(i0,p0,w0,A0,$0,O0);o.functionCall=xu;const $u=(i0,p0,w0)=>c.actionCreators.functionCallAccessKey(i0,p0,w0);o.functionCallAccessKey=$u;const Iu=(i0,p0)=>c.actionCreators.stake(i0,p0);o.stake=Iu;const Xu=i0=>c.actionCreators.transfer(i0);o.transfer=Xu})(transaction);var validators$2={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.findSeatPrice=o.diffEpochValidators=void 0;var a=lib$9;Object.defineProperty(o,"diffEpochValidators",{enumerable:!0,get:function(){return a.diffEpochValidators}}),Object.defineProperty(o,"findSeatPrice",{enumerable:!0,get:function(){return a.findSeatPrice}})})(validators$2);var account={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Account=void 0;var a=lib$4;Object.defineProperty(o,"Account",{enumerable:!0,get:function(){return a.Account}})})(account);var account_multisig={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MultisigStateStatus=o.MultisigDeleteRequestRejectionError=o.MULTISIG_CONFIRM_METHODS=o.MULTISIG_CHANGE_METHODS=o.MULTISIG_DEPOSIT=o.MULTISIG_GAS=o.MULTISIG_ALLOWANCE=o.MULTISIG_STORAGE_KEY=o.AccountMultisig=o.Account2FA=void 0;var a=lib$4;Object.defineProperty(o,"Account2FA",{enumerable:!0,get:function(){return a.Account2FA}}),Object.defineProperty(o,"AccountMultisig",{enumerable:!0,get:function(){return a.AccountMultisig}}),Object.defineProperty(o,"MULTISIG_STORAGE_KEY",{enumerable:!0,get:function(){return a.MULTISIG_STORAGE_KEY}}),Object.defineProperty(o,"MULTISIG_ALLOWANCE",{enumerable:!0,get:function(){return a.MULTISIG_ALLOWANCE}}),Object.defineProperty(o,"MULTISIG_GAS",{enumerable:!0,get:function(){return a.MULTISIG_GAS}}),Object.defineProperty(o,"MULTISIG_DEPOSIT",{enumerable:!0,get:function(){return a.MULTISIG_DEPOSIT}}),Object.defineProperty(o,"MULTISIG_CHANGE_METHODS",{enumerable:!0,get:function(){return a.MULTISIG_CHANGE_METHODS}}),Object.defineProperty(o,"MULTISIG_CONFIRM_METHODS",{enumerable:!0,get:function(){return a.MULTISIG_CONFIRM_METHODS}}),Object.defineProperty(o,"MultisigDeleteRequestRejectionError",{enumerable:!0,get:function(){return a.MultisigDeleteRequestRejectionError}}),Object.defineProperty(o,"MultisigStateStatus",{enumerable:!0,get:function(){return a.MultisigStateStatus}})})(account_multisig);var account_creator={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.UrlAccountCreator=o.LocalAccountCreator=o.AccountCreator=void 0;var a=lib$4;Object.defineProperty(o,"AccountCreator",{enumerable:!0,get:function(){return a.AccountCreator}}),Object.defineProperty(o,"LocalAccountCreator",{enumerable:!0,get:function(){return a.LocalAccountCreator}}),Object.defineProperty(o,"UrlAccountCreator",{enumerable:!0,get:function(){return a.UrlAccountCreator}})})(account_creator);var connection={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Connection=void 0;var a=lib$4;Object.defineProperty(o,"Connection",{enumerable:!0,get:function(){return a.Connection}})})(connection);var signer={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Signer=o.InMemorySigner=void 0;var a=lib$3;Object.defineProperty(o,"InMemorySigner",{enumerable:!0,get:function(){return a.InMemorySigner}}),Object.defineProperty(o,"Signer",{enumerable:!0,get:function(){return a.Signer}})})(signer);var contract={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Contract=void 0;var a=lib$4;Object.defineProperty(o,"Contract",{enumerable:!0,get:function(){return a.Contract}})})(contract);var near$1={},lib$1={},near={},__awaiter$5=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__importDefault$2=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(near,"__esModule",{value:!0});near.Near=void 0;const accounts_1$1=lib$4,bn_js_1$2=__importDefault$2(bnExports$1);class Near{constructor(a){var c;if(this.config=a,this.connection=accounts_1$1.Connection.fromConfig({networkId:a.networkId,provider:{type:"JsonRpcProvider",args:{url:a.nodeUrl,headers:a.headers}},signer:a.signer||{type:"InMemorySigner",keyStore:a.keyStore||((c=a.deps)===null||c===void 0?void 0:c.keyStore)},jsvmAccountId:a.jsvmAccountId||`jsvm.${a.networkId}`}),a.masterAccount){const d=a.initialBalance?new bn_js_1$2.default(a.initialBalance):new bn_js_1$2.default("500000000000000000000000000");this.accountCreator=new accounts_1$1.LocalAccountCreator(new accounts_1$1.Account(this.connection,a.masterAccount),d)}else a.helperUrl?this.accountCreator=new accounts_1$1.UrlAccountCreator(this.connection,a.helperUrl):this.accountCreator=null}account(a){return __awaiter$5(this,void 0,void 0,function*(){return new accounts_1$1.Account(this.connection,a)})}createAccount(a,c){return __awaiter$5(this,void 0,void 0,function*(){if(!this.accountCreator)throw new Error("Must specify account creator, either via masterAccount or helperUrl configuration settings.");return yield this.accountCreator.createAccount(a,c),new accounts_1$1.Account(this.connection,a)})}}near.Near=Near;var wallet_account={},__awaiter$4=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})},__importDefault$1=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(wallet_account,"__esModule",{value:!0});wallet_account.ConnectedWalletAccount=wallet_account.WalletConnection=void 0;const accounts_1=lib$4,crypto_1=lib$a,utils_1=lib$9,transactions_1=lib$5,bn_js_1$1=__importDefault$1(bnExports$1),borsh_1=cjs,LOGIN_WALLET_URL_SUFFIX="/login/",MULTISIG_HAS_METHOD="add_request_and_confirm",LOCAL_STORAGE_KEY_SUFFIX="_wallet_auth_key",PENDING_ACCESS_KEY_PREFIX="pending_key";class WalletConnection{constructor(a,c){if(typeof c!="string")throw new Error("Please define a clear appKeyPrefix for this WalletConnection instance as the second argument to the constructor");if(typeof window>"u")return new Proxy(this,{get(nt,$a){return $a==="isSignedIn"?()=>!1:$a==="getAccountId"?()=>"":nt[$a]&&typeof nt[$a]=="function"?()=>{throw new Error("No window found in context, please ensure you are using WalletConnection on the browser")}:nt[$a]}});this._near=a;const d=c+LOCAL_STORAGE_KEY_SUFFIX,tt=JSON.parse(window.localStorage.getItem(d));this._networkId=a.config.networkId,this._walletBaseUrl=a.config.walletUrl,c=c||a.config.contractName||"default",this._keyStore=a.connection.signer.keyStore,this._authData=tt||{allKeys:[]},this._authDataKey=d,this.isSignedIn()||(this._completeSignInPromise=this._completeSignInWithAccessKey())}isSignedIn(){return!!this._authData.accountId}isSignedInAsync(){return __awaiter$4(this,void 0,void 0,function*(){return this._completeSignInPromise?(yield this._completeSignInPromise,this.isSignedIn()):this.isSignedIn()})}getAccountId(){return this._authData.accountId||""}requestSignInUrl({contractId:a,methodNames:c,successUrl:d,failureUrl:tt}){return __awaiter$4(this,void 0,void 0,function*(){const nt=new URL(window.location.href),$a=new URL(this._walletBaseUrl+LOGIN_WALLET_URL_SUFFIX);if($a.searchParams.set("success_url",d||nt.href),$a.searchParams.set("failure_url",tt||nt.href),a){yield(yield this._near.account(a)).state(),$a.searchParams.set("contract_id",a);const gu=crypto_1.KeyPair.fromRandom("ed25519");$a.searchParams.set("public_key",gu.getPublicKey().toString()),yield this._keyStore.setKey(this._networkId,PENDING_ACCESS_KEY_PREFIX+gu.getPublicKey(),gu)}return c&&c.forEach(Ys=>{$a.searchParams.append("methodNames",Ys)}),$a.toString()})}requestSignIn(a){return __awaiter$4(this,void 0,void 0,function*(){const c=yield this.requestSignInUrl(a);window.location.assign(c)})}requestSignTransactionsUrl({transactions:a,meta:c,callbackUrl:d}){const tt=new URL(window.location.href),nt=new URL("sign",this._walletBaseUrl);return nt.searchParams.set("transactions",a.map($a=>(0,borsh_1.serialize)(transactions_1.SCHEMA.Transaction,$a)).map($a=>Buffer$C.from($a).toString("base64")).join(",")),nt.searchParams.set("callbackUrl",d||tt.href),c&&nt.searchParams.set("meta",c),nt.toString()}requestSignTransactions(a){const c=this.requestSignTransactionsUrl(a);window.location.assign(c)}_completeSignInWithAccessKey(){return __awaiter$4(this,void 0,void 0,function*(){const a=new URL(window.location.href),c=a.searchParams.get("public_key")||"",d=(a.searchParams.get("all_keys")||"").split(","),tt=a.searchParams.get("account_id")||"";if(tt){const nt={accountId:tt,allKeys:d};window.localStorage.setItem(this._authDataKey,JSON.stringify(nt)),c&&(yield this._moveKeyFromTempToPermanent(tt,c)),this._authData=nt}a.searchParams.delete("public_key"),a.searchParams.delete("all_keys"),a.searchParams.delete("account_id"),a.searchParams.delete("meta"),a.searchParams.delete("transactionHashes"),window.history.replaceState({},document.title,a.toString())})}_moveKeyFromTempToPermanent(a,c){return __awaiter$4(this,void 0,void 0,function*(){const d=yield this._keyStore.getKey(this._networkId,PENDING_ACCESS_KEY_PREFIX+c);yield this._keyStore.setKey(this._networkId,a,d),yield this._keyStore.removeKey(this._networkId,PENDING_ACCESS_KEY_PREFIX+c)})}signOut(){this._authData={},window.localStorage.removeItem(this._authDataKey)}account(){return this._connectedAccount||(this._connectedAccount=new ConnectedWalletAccount(this,this._near.connection,this._authData.accountId)),this._connectedAccount}}wallet_account.WalletConnection=WalletConnection;class ConnectedWalletAccount extends accounts_1.Account{constructor(a,c,d){super(c,d),this.walletConnection=a}signAndSendTransaction({receiverId:a,actions:c,walletMeta:d,walletCallbackUrl:tt=window.location.href}){const nt=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$4(this,void 0,void 0,function*(){const $a=yield this.connection.signer.getPublicKey(this.accountId,this.connection.networkId);let Ys=yield this.accessKeyForTransaction(a,c,$a);if(!Ys)throw new Error(`Cannot find matching key for transaction sent to ${a}`);if($a&&$a.toString()===Ys.public_key)try{return yield nt.signAndSendTransaction.call(this,{receiverId:a,actions:c})}catch(i0){if(i0.type==="NotEnoughAllowance")Ys=yield this.accessKeyForTransaction(a,c);else throw i0}const gu=yield this.connection.provider.block({finality:"final"}),xu=(0,utils_1.baseDecode)(gu.header.hash),$u=crypto_1.PublicKey.from(Ys.public_key),Iu=Ys.access_key.nonce.add(new bn_js_1$1.default(1)),Xu=(0,transactions_1.createTransaction)(this.accountId,$u,a,Iu,c,xu);return yield this.walletConnection.requestSignTransactions({transactions:[Xu],meta:d,callbackUrl:tt}),new Promise((i0,p0)=>{setTimeout(()=>{p0(new Error("Failed to redirect to sign transaction"))},1e3)})})}accessKeyMatchesTransaction(a,c,d){return __awaiter$4(this,void 0,void 0,function*(){const{access_key:{permission:tt}}=a;if(tt==="FullAccess")return!0;if(tt.FunctionCall){const{receiver_id:nt,method_names:$a}=tt.FunctionCall;if(nt===this.accountId&&$a.includes(MULTISIG_HAS_METHOD))return!0;if(nt===c){if(d.length!==1)return!1;const[{functionCall:Ys}]=d;return Ys&&(!Ys.deposit||Ys.deposit.toString()==="0")&&($a.length===0||$a.includes(Ys.methodName))}}return!1})}accessKeyForTransaction(a,c,d){return __awaiter$4(this,void 0,void 0,function*(){const tt=yield this.getAccessKeys();if(d){const $a=tt.find(Ys=>Ys.public_key.toString()===d.toString());if($a&&(yield this.accessKeyMatchesTransaction($a,a,c)))return $a}const nt=this.walletConnection._authData.allKeys;for(const $a of tt)if(nt.indexOf($a.public_key)!==-1&&(yield this.accessKeyMatchesTransaction($a,a,c)))return $a;return null})}}wallet_account.ConnectedWalletAccount=ConnectedWalletAccount;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.WalletConnection=o.ConnectedWalletAccount=o.Near=void 0;var a=near;Object.defineProperty(o,"Near",{enumerable:!0,get:function(){return a.Near}});var c=wallet_account;Object.defineProperty(o,"ConnectedWalletAccount",{enumerable:!0,get:function(){return c.ConnectedWalletAccount}}),Object.defineProperty(o,"WalletConnection",{enumerable:!0,get:function(){return c.WalletConnection}})})(lib$1);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Near=void 0;var a=lib$1;Object.defineProperty(o,"Near",{enumerable:!0,get:function(){return a.Near}})})(near$1);var walletAccount={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.WalletConnection=o.ConnectedWalletAccount=void 0;var a=lib$1;Object.defineProperty(o,"ConnectedWalletAccount",{enumerable:!0,get:function(){return a.ConnectedWalletAccount}}),Object.defineProperty(o,"WalletConnection",{enumerable:!0,get:function(){return a.WalletConnection}})})(walletAccount);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function($0,O0,L0,q0){q0===void 0&&(q0=L0);var F0=Object.getOwnPropertyDescriptor(O0,L0);(!F0||("get"in F0?!O0.__esModule:F0.writable||F0.configurable))&&(F0={enumerable:!0,get:function(){return O0[L0]}}),Object.defineProperty($0,q0,F0)}:function($0,O0,L0,q0){q0===void 0&&(q0=L0),$0[q0]=O0[L0]}),c=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function($0,O0){Object.defineProperty($0,"default",{enumerable:!0,value:O0})}:function($0,O0){$0.default=O0}),d=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function($0){if($0&&$0.__esModule)return $0;var O0={};if($0!=null)for(var L0 in $0)L0!=="default"&&Object.prototype.hasOwnProperty.call($0,L0)&&a(O0,$0,L0);return c(O0,$0),O0};Object.defineProperty(o,"__esModule",{value:!0}),o.WalletConnection=o.ConnectedWalletAccount=o.Near=o.KeyPair=o.Signer=o.InMemorySigner=o.Contract=o.Connection=o.Account=o.multisig=o.validators=o.transactions=o.utils=o.providers=o.accountCreator=void 0;const tt=d(providers);o.providers=tt;const nt=d(utils$s);o.utils=nt;const $a=d(transaction);o.transactions=$a;const Ys=d(validators$2);o.validators=Ys;const gu=account;Object.defineProperty(o,"Account",{enumerable:!0,get:function(){return gu.Account}});const xu=d(account_multisig);o.multisig=xu;const $u=d(account_creator);o.accountCreator=$u;const Iu=connection;Object.defineProperty(o,"Connection",{enumerable:!0,get:function(){return Iu.Connection}});const Xu=signer;Object.defineProperty(o,"Signer",{enumerable:!0,get:function(){return Xu.Signer}}),Object.defineProperty(o,"InMemorySigner",{enumerable:!0,get:function(){return Xu.InMemorySigner}});const i0=contract;Object.defineProperty(o,"Contract",{enumerable:!0,get:function(){return i0.Contract}});const p0=key_pair;Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return p0.KeyPair}});const w0=near$1;Object.defineProperty(o,"Near",{enumerable:!0,get:function(){return w0.Near}});const A0=walletAccount;Object.defineProperty(o,"ConnectedWalletAccount",{enumerable:!0,get:function(){return A0.ConnectedWalletAccount}}),Object.defineProperty(o,"WalletConnection",{enumerable:!0,get:function(){return A0.WalletConnection}})})(commonIndex);var browserConnect={},__awaiter$3=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,a||[])).next())})};Object.defineProperty(browserConnect,"__esModule",{value:!0});browserConnect.connect=void 0;const near_1=near$1;function connect(o){return __awaiter$3(this,void 0,void 0,function*(){return new near_1.Near(o)})}browserConnect.connect=connect;(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(nt,$a,Ys,gu){gu===void 0&&(gu=Ys);var xu=Object.getOwnPropertyDescriptor($a,Ys);(!xu||("get"in xu?!$a.__esModule:xu.writable||xu.configurable))&&(xu={enumerable:!0,get:function(){return $a[Ys]}}),Object.defineProperty(nt,gu,xu)}:function(nt,$a,Ys,gu){gu===void 0&&(gu=Ys),nt[gu]=$a[Ys]}),c=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(nt,$a){Object.defineProperty(nt,"default",{enumerable:!0,value:$a})}:function(nt,$a){nt.default=$a}),d=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(nt){if(nt&&nt.__esModule)return nt;var $a={};if(nt!=null)for(var Ys in nt)Ys!=="default"&&Object.prototype.hasOwnProperty.call(nt,Ys)&&a($a,nt,Ys);return c($a,nt),$a},tt=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(nt,$a){for(var Ys in nt)Ys!=="default"&&!Object.prototype.hasOwnProperty.call($a,Ys)&&a($a,nt,Ys)};Object.defineProperty(o,"__esModule",{value:!0}),o.keyStores=void 0,o.keyStores=d(browserIndex$1),tt(commonIndex,o),tt(browserConnect,o)})(browserIndex$2);const browserIndex=getDefaultExportFromCjs$1(browserIndex$2),nearAPI=_mergeNamespaces({__proto__:null,default:browserIndex},[browserIndex$2]);function isFunction$1(o){return typeof o=="function"}function createErrorClass(o){var a=function(d){Error.call(d),d.stack=new Error().stack},c=o(a);return c.prototype=Object.create(Error.prototype),c.prototype.constructor=c,c}var UnsubscriptionError=createErrorClass(function(o){return function(c){o(this),this.message=c?c.length+` errors occurred during unsubscription: + depsCount: ${Su}, + deps: ${$u}}`};const tt={keyword:"dependencies",type:"object",schemaType:"object",error:o.error,code(gu){const[Su,$u]=nt(gu);$a(gu,Su),Ws(gu,$u)}};function nt({schema:gu}){const Su={},$u={};for(const Iu in gu){if(Iu==="__proto__")continue;const Xu=Array.isArray(gu[Iu])?Su:$u;Xu[Iu]=gu[Iu]}return[Su,$u]}function $a(gu,Su=gu.schema){const{gen:$u,data:Iu,it:Xu}=gu;if(Object.keys(Su).length===0)return;const r0=$u.let("missing");for(const p0 in Su){const y0=Su[p0];if(y0.length===0)continue;const A0=(0,d.propertyInData)($u,Iu,p0,Xu.opts.ownProperties);gu.setParams({property:p0,depsCount:y0.length,deps:y0.join(", ")}),Xu.allErrors?$u.if(A0,()=>{for(const $0 of y0)(0,d.checkReportMissingProp)(gu,$0)}):($u.if((0,a._)`${A0} && (${(0,d.checkMissingProp)(gu,y0,r0)})`),(0,d.reportMissingProp)(gu,r0),$u.else())}}o.validatePropertyDeps=$a;function Ws(gu,Su=gu.schema){const{gen:$u,data:Iu,keyword:Xu,it:r0}=gu,p0=$u.name("valid");for(const y0 in Su)(0,c.alwaysValidSchema)(r0,Su[y0])||($u.if((0,d.propertyInData)($u,Iu,y0,r0.opts.ownProperties),()=>{const A0=gu.subschema({keyword:Xu,schemaProp:y0},p0);gu.mergeValidEvaluated(A0,p0)},()=>$u.var(p0,!0)),gu.ok(p0))}o.validateSchemaDeps=Ws,o.default=tt})(dependencies);var propertyNames={};Object.defineProperty(propertyNames,"__esModule",{value:!0});const codegen_1$6=codegen,util_1$9=util,error$6={message:"property name must be valid",params:({params:o})=>(0,codegen_1$6._)`{propertyName: ${o.propertyName}}`},def$b={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:error$6,code(o){const{gen:a,schema:c,data:d,it:tt}=o;if((0,util_1$9.alwaysValidSchema)(tt,c))return;const nt=a.name("valid");a.forIn("key",d,$a=>{o.setParams({propertyName:$a}),o.subschema({keyword:"propertyNames",data:$a,dataTypes:["string"],propertyName:$a,compositeRule:!0},nt),a.if((0,codegen_1$6.not)(nt),()=>{o.error(!0),tt.allErrors||a.break()})}),o.ok(nt)}};propertyNames.default=def$b;var additionalProperties={};Object.defineProperty(additionalProperties,"__esModule",{value:!0});const code_1$3=code,codegen_1$5=codegen,names_1=names$1,util_1$8=util,error$5={message:"must NOT have additional properties",params:({params:o})=>(0,codegen_1$5._)`{additionalProperty: ${o.additionalProperty}}`},def$a={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:error$5,code(o){const{gen:a,schema:c,parentSchema:d,data:tt,errsCount:nt,it:$a}=o;if(!nt)throw new Error("ajv implementation error");const{allErrors:Ws,opts:gu}=$a;if($a.props=!0,gu.removeAdditional!=="all"&&(0,util_1$8.alwaysValidSchema)($a,c))return;const Su=(0,code_1$3.allSchemaProperties)(d.properties),$u=(0,code_1$3.allSchemaProperties)(d.patternProperties);Iu(),o.ok((0,codegen_1$5._)`${nt} === ${names_1.default.errors}`);function Iu(){a.forIn("key",tt,A0=>{!Su.length&&!$u.length?p0(A0):a.if(Xu(A0),()=>p0(A0))})}function Xu(A0){let $0;if(Su.length>8){const O0=(0,util_1$8.schemaRefOrVal)($a,d.properties,"properties");$0=(0,code_1$3.isOwnProperty)(a,O0,A0)}else Su.length?$0=(0,codegen_1$5.or)(...Su.map(O0=>(0,codegen_1$5._)`${A0} === ${O0}`)):$0=codegen_1$5.nil;return $u.length&&($0=(0,codegen_1$5.or)($0,...$u.map(O0=>(0,codegen_1$5._)`${(0,code_1$3.usePattern)(o,O0)}.test(${A0})`))),(0,codegen_1$5.not)($0)}function r0(A0){a.code((0,codegen_1$5._)`delete ${tt}[${A0}]`)}function p0(A0){if(gu.removeAdditional==="all"||gu.removeAdditional&&c===!1){r0(A0);return}if(c===!1){o.setParams({additionalProperty:A0}),o.error(),Ws||a.break();return}if(typeof c=="object"&&!(0,util_1$8.alwaysValidSchema)($a,c)){const $0=a.name("valid");gu.removeAdditional==="failing"?(y0(A0,$0,!1),a.if((0,codegen_1$5.not)($0),()=>{o.reset(),r0(A0)})):(y0(A0,$0),Ws||a.if((0,codegen_1$5.not)($0),()=>a.break()))}}function y0(A0,$0,O0){const L0={keyword:"additionalProperties",dataProp:A0,dataPropType:util_1$8.Type.Str};O0===!1&&Object.assign(L0,{compositeRule:!0,createErrors:!1,allErrors:!1}),o.subschema(L0,$0)}}};additionalProperties.default=def$a;var properties$1={};Object.defineProperty(properties$1,"__esModule",{value:!0});const validate_1=validate$1,code_1$2=code,util_1$7=util,additionalProperties_1$1=additionalProperties,def$9={keyword:"properties",type:"object",schemaType:"object",code(o){const{gen:a,schema:c,parentSchema:d,data:tt,it:nt}=o;nt.opts.removeAdditional==="all"&&d.additionalProperties===void 0&&additionalProperties_1$1.default.code(new validate_1.KeywordCxt(nt,additionalProperties_1$1.default,"additionalProperties"));const $a=(0,code_1$2.allSchemaProperties)(c);for(const Iu of $a)nt.definedProperties.add(Iu);nt.opts.unevaluated&&$a.length&&nt.props!==!0&&(nt.props=util_1$7.mergeEvaluated.props(a,(0,util_1$7.toHash)($a),nt.props));const Ws=$a.filter(Iu=>!(0,util_1$7.alwaysValidSchema)(nt,c[Iu]));if(Ws.length===0)return;const gu=a.name("valid");for(const Iu of Ws)Su(Iu)?$u(Iu):(a.if((0,code_1$2.propertyInData)(a,tt,Iu,nt.opts.ownProperties)),$u(Iu),nt.allErrors||a.else().var(gu,!0),a.endIf()),o.it.definedProperties.add(Iu),o.ok(gu);function Su(Iu){return nt.opts.useDefaults&&!nt.compositeRule&&c[Iu].default!==void 0}function $u(Iu){o.subschema({keyword:"properties",schemaProp:Iu,dataProp:Iu},gu)}}};properties$1.default=def$9;var patternProperties={};Object.defineProperty(patternProperties,"__esModule",{value:!0});const code_1$1=code,codegen_1$4=codegen,util_1$6=util,util_2=util,def$8={keyword:"patternProperties",type:"object",schemaType:"object",code(o){const{gen:a,schema:c,data:d,parentSchema:tt,it:nt}=o,{opts:$a}=nt,Ws=(0,code_1$1.allSchemaProperties)(c),gu=Ws.filter(y0=>(0,util_1$6.alwaysValidSchema)(nt,c[y0]));if(Ws.length===0||gu.length===Ws.length&&(!nt.opts.unevaluated||nt.props===!0))return;const Su=$a.strictSchema&&!$a.allowMatchingProperties&&tt.properties,$u=a.name("valid");nt.props!==!0&&!(nt.props instanceof codegen_1$4.Name)&&(nt.props=(0,util_2.evaluatedPropsToName)(a,nt.props));const{props:Iu}=nt;Xu();function Xu(){for(const y0 of Ws)Su&&r0(y0),nt.allErrors?p0(y0):(a.var($u,!0),p0(y0),a.if($u))}function r0(y0){for(const A0 in Su)new RegExp(y0).test(A0)&&(0,util_1$6.checkStrictMode)(nt,`property ${A0} matches pattern ${y0} (use allowMatchingProperties)`)}function p0(y0){a.forIn("key",d,A0=>{a.if((0,codegen_1$4._)`${(0,code_1$1.usePattern)(o,y0)}.test(${A0})`,()=>{const $0=gu.includes(y0);$0||o.subschema({keyword:"patternProperties",schemaProp:y0,dataProp:A0,dataPropType:util_2.Type.Str},$u),nt.opts.unevaluated&&Iu!==!0?a.assign((0,codegen_1$4._)`${Iu}[${A0}]`,!0):!$0&&!nt.allErrors&&a.if((0,codegen_1$4.not)($u),()=>a.break())})})}}};patternProperties.default=def$8;var not={};Object.defineProperty(not,"__esModule",{value:!0});const util_1$5=util,def$7={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(o){const{gen:a,schema:c,it:d}=o;if((0,util_1$5.alwaysValidSchema)(d,c)){o.fail();return}const tt=a.name("valid");o.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},tt),o.failResult(tt,()=>o.reset(),()=>o.error())},error:{message:"must NOT be valid"}};not.default=def$7;var anyOf={};Object.defineProperty(anyOf,"__esModule",{value:!0});const code_1=code,def$6={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:code_1.validateUnion,error:{message:"must match a schema in anyOf"}};anyOf.default=def$6;var oneOf={};Object.defineProperty(oneOf,"__esModule",{value:!0});const codegen_1$3=codegen,util_1$4=util,error$4={message:"must match exactly one schema in oneOf",params:({params:o})=>(0,codegen_1$3._)`{passingSchemas: ${o.passing}}`},def$5={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:error$4,code(o){const{gen:a,schema:c,parentSchema:d,it:tt}=o;if(!Array.isArray(c))throw new Error("ajv implementation error");if(tt.opts.discriminator&&d.discriminator)return;const nt=c,$a=a.let("valid",!1),Ws=a.let("passing",null),gu=a.name("_valid");o.setParams({passing:Ws}),a.block(Su),o.result($a,()=>o.reset(),()=>o.error(!0));function Su(){nt.forEach(($u,Iu)=>{let Xu;(0,util_1$4.alwaysValidSchema)(tt,$u)?a.var(gu,!0):Xu=o.subschema({keyword:"oneOf",schemaProp:Iu,compositeRule:!0},gu),Iu>0&&a.if((0,codegen_1$3._)`${gu} && ${$a}`).assign($a,!1).assign(Ws,(0,codegen_1$3._)`[${Ws}, ${Iu}]`).else(),a.if(gu,()=>{a.assign($a,!0),a.assign(Ws,Iu),Xu&&o.mergeEvaluated(Xu,codegen_1$3.Name)})})}}};oneOf.default=def$5;var allOf={};Object.defineProperty(allOf,"__esModule",{value:!0});const util_1$3=util,def$4={keyword:"allOf",schemaType:"array",code(o){const{gen:a,schema:c,it:d}=o;if(!Array.isArray(c))throw new Error("ajv implementation error");const tt=a.name("valid");c.forEach((nt,$a)=>{if((0,util_1$3.alwaysValidSchema)(d,nt))return;const Ws=o.subschema({keyword:"allOf",schemaProp:$a},tt);o.ok(tt),o.mergeEvaluated(Ws)})}};allOf.default=def$4;var _if={};Object.defineProperty(_if,"__esModule",{value:!0});const codegen_1$2=codegen,util_1$2=util,error$3={message:({params:o})=>(0,codegen_1$2.str)`must match "${o.ifClause}" schema`,params:({params:o})=>(0,codegen_1$2._)`{failingKeyword: ${o.ifClause}}`},def$3={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:error$3,code(o){const{gen:a,parentSchema:c,it:d}=o;c.then===void 0&&c.else===void 0&&(0,util_1$2.checkStrictMode)(d,'"if" without "then" and "else" is ignored');const tt=hasSchema(d,"then"),nt=hasSchema(d,"else");if(!tt&&!nt)return;const $a=a.let("valid",!0),Ws=a.name("_valid");if(gu(),o.reset(),tt&&nt){const $u=a.let("ifClause");o.setParams({ifClause:$u}),a.if(Ws,Su("then",$u),Su("else",$u))}else tt?a.if(Ws,Su("then")):a.if((0,codegen_1$2.not)(Ws),Su("else"));o.pass($a,()=>o.error(!0));function gu(){const $u=o.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},Ws);o.mergeEvaluated($u)}function Su($u,Iu){return()=>{const Xu=o.subschema({keyword:$u},Ws);a.assign($a,Ws),o.mergeValidEvaluated(Xu,$a),Iu?a.assign(Iu,(0,codegen_1$2._)`${$u}`):o.setParams({ifClause:$u})}}}};function hasSchema(o,a){const c=o.schema[a];return c!==void 0&&!(0,util_1$2.alwaysValidSchema)(o,c)}_if.default=def$3;var thenElse={};Object.defineProperty(thenElse,"__esModule",{value:!0});const util_1$1=util,def$2={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:o,parentSchema:a,it:c}){a.if===void 0&&(0,util_1$1.checkStrictMode)(c,`"${o}" without "if" is ignored`)}};thenElse.default=def$2;Object.defineProperty(applicator,"__esModule",{value:!0});const additionalItems_1=additionalItems,prefixItems_1=prefixItems,items_1=items,items2020_1=items2020,contains_1=contains,dependencies_1=dependencies,propertyNames_1=propertyNames,additionalProperties_1=additionalProperties,properties_1=properties$1,patternProperties_1=patternProperties,not_1=not,anyOf_1=anyOf,oneOf_1=oneOf,allOf_1=allOf,if_1=_if,thenElse_1=thenElse;function getApplicator(o=!1){const a=[not_1.default,anyOf_1.default,oneOf_1.default,allOf_1.default,if_1.default,thenElse_1.default,propertyNames_1.default,additionalProperties_1.default,dependencies_1.default,properties_1.default,patternProperties_1.default];return o?a.push(prefixItems_1.default,items2020_1.default):a.push(additionalItems_1.default,items_1.default),a.push(contains_1.default),a}applicator.default=getApplicator;var format$3={},format$2={};Object.defineProperty(format$2,"__esModule",{value:!0});const codegen_1$1=codegen,error$2={message:({schemaCode:o})=>(0,codegen_1$1.str)`must match format "${o}"`,params:({schemaCode:o})=>(0,codegen_1$1._)`{format: ${o}}`},def$1={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:error$2,code(o,a){const{gen:c,data:d,$data:tt,schema:nt,schemaCode:$a,it:Ws}=o,{opts:gu,errSchemaPath:Su,schemaEnv:$u,self:Iu}=Ws;if(!gu.validateFormats)return;tt?Xu():r0();function Xu(){const p0=c.scopeValue("formats",{ref:Iu.formats,code:gu.code.formats}),y0=c.const("fDef",(0,codegen_1$1._)`${p0}[${$a}]`),A0=c.let("fType"),$0=c.let("format");c.if((0,codegen_1$1._)`typeof ${y0} == "object" && !(${y0} instanceof RegExp)`,()=>c.assign(A0,(0,codegen_1$1._)`${y0}.type || "string"`).assign($0,(0,codegen_1$1._)`${y0}.validate`),()=>c.assign(A0,(0,codegen_1$1._)`"string"`).assign($0,y0)),o.fail$data((0,codegen_1$1.or)(O0(),L0()));function O0(){return gu.strictSchema===!1?codegen_1$1.nil:(0,codegen_1$1._)`${$a} && !${$0}`}function L0(){const V0=$u.$async?(0,codegen_1$1._)`(${y0}.async ? await ${$0}(${d}) : ${$0}(${d}))`:(0,codegen_1$1._)`${$0}(${d})`,F0=(0,codegen_1$1._)`(typeof ${$0} == "function" ? ${V0} : ${$0}.test(${d}))`;return(0,codegen_1$1._)`${$0} && ${$0} !== true && ${A0} === ${a} && !${F0}`}}function r0(){const p0=Iu.formats[nt];if(!p0){O0();return}if(p0===!0)return;const[y0,A0,$0]=L0(p0);y0===a&&o.pass(V0());function O0(){if(gu.strictSchema===!1){Iu.logger.warn(F0());return}throw new Error(F0());function F0(){return`unknown format "${nt}" ignored in schema at path "${Su}"`}}function L0(F0){const u1=F0 instanceof RegExp?(0,codegen_1$1.regexpCode)(F0):gu.code.formats?(0,codegen_1$1._)`${gu.code.formats}${(0,codegen_1$1.getProperty)(nt)}`:void 0,g1=c.scopeValue("formats",{key:nt,ref:F0,code:u1});return typeof F0=="object"&&!(F0 instanceof RegExp)?[F0.type||"string",F0.validate,(0,codegen_1$1._)`${g1}.validate`]:["string",F0,g1]}function V0(){if(typeof p0=="object"&&!(p0 instanceof RegExp)&&p0.async){if(!$u.$async)throw new Error("async format in sync schema");return(0,codegen_1$1._)`await ${$0}(${d})`}return typeof A0=="function"?(0,codegen_1$1._)`${$0}(${d})`:(0,codegen_1$1._)`${$0}.test(${d})`}}}};format$2.default=def$1;Object.defineProperty(format$3,"__esModule",{value:!0});const format_1$1=format$2,format$1=[format_1$1.default];format$3.default=format$1;var metadata={};Object.defineProperty(metadata,"__esModule",{value:!0});metadata.contentVocabulary=metadata.metadataVocabulary=void 0;metadata.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];metadata.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"];Object.defineProperty(draft7,"__esModule",{value:!0});const core_1=core$1,validation_1=validation$1,applicator_1=applicator,format_1=format$3,metadata_1=metadata,draft7Vocabularies=[core_1.default,validation_1.default,(0,applicator_1.default)(),format_1.default,metadata_1.metadataVocabulary,metadata_1.contentVocabulary];draft7.default=draft7Vocabularies;var discriminator={},types={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.DiscrError=void 0,function(a){a.Tag="tag",a.Mapping="mapping"}(o.DiscrError||(o.DiscrError={}))})(types);Object.defineProperty(discriminator,"__esModule",{value:!0});const codegen_1=codegen,types_1$1=types,compile_1=compile,util_1=util,error$1={message:({params:{discrError:o,tagName:a}})=>o===types_1$1.DiscrError.Tag?`tag "${a}" must be string`:`value of tag "${a}" must be in oneOf`,params:({params:{discrError:o,tag:a,tagName:c}})=>(0,codegen_1._)`{error: ${o}, tag: ${c}, tagValue: ${a}}`},def={keyword:"discriminator",type:"object",schemaType:"object",error:error$1,code(o){const{gen:a,data:c,schema:d,parentSchema:tt,it:nt}=o,{oneOf:$a}=tt;if(!nt.opts.discriminator)throw new Error("discriminator: requires discriminator option");const Ws=d.propertyName;if(typeof Ws!="string")throw new Error("discriminator: requires propertyName");if(d.mapping)throw new Error("discriminator: mapping is not supported");if(!$a)throw new Error("discriminator: requires oneOf keyword");const gu=a.let("valid",!1),Su=a.const("tag",(0,codegen_1._)`${c}${(0,codegen_1.getProperty)(Ws)}`);a.if((0,codegen_1._)`typeof ${Su} == "string"`,()=>$u(),()=>o.error(!1,{discrError:types_1$1.DiscrError.Tag,tag:Su,tagName:Ws})),o.ok(gu);function $u(){const r0=Xu();a.if(!1);for(const p0 in r0)a.elseIf((0,codegen_1._)`${Su} === ${p0}`),a.assign(gu,Iu(r0[p0]));a.else(),o.error(!1,{discrError:types_1$1.DiscrError.Mapping,tag:Su,tagName:Ws}),a.endIf()}function Iu(r0){const p0=a.name("valid"),y0=o.subschema({keyword:"oneOf",schemaProp:r0},p0);return o.mergeEvaluated(y0,codegen_1.Name),p0}function Xu(){var r0;const p0={},y0=$0(tt);let A0=!0;for(let V0=0;V0<$a.length;V0++){let F0=$a[V0];F0!=null&&F0.$ref&&!(0,util_1.schemaHasRulesButRef)(F0,nt.self.RULES)&&(F0=compile_1.resolveRef.call(nt.self,nt.schemaEnv.root,nt.baseId,F0==null?void 0:F0.$ref),F0 instanceof compile_1.SchemaEnv&&(F0=F0.schema));const u1=(r0=F0==null?void 0:F0.properties)===null||r0===void 0?void 0:r0[Ws];if(typeof u1!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${Ws}"`);A0=A0&&(y0||$0(F0)),O0(u1,V0)}if(!A0)throw new Error(`discriminator: "${Ws}" must be required`);return p0;function $0({required:V0}){return Array.isArray(V0)&&V0.includes(Ws)}function O0(V0,F0){if(V0.const)L0(V0.const,F0);else if(V0.enum)for(const u1 of V0.enum)L0(u1,F0);else throw new Error(`discriminator: "properties/${Ws}" must have "const" or "enum"`)}function L0(V0,F0){if(typeof V0!="string"||V0 in p0)throw new Error(`discriminator: "${Ws}" values must be unique strings`);p0[V0]=F0}}}};discriminator.default=def;const $schema="http://json-schema.org/draft-07/schema#",$id="http://json-schema.org/draft-07/schema#",title="Core schema meta-schema",definitions={schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type=["object","boolean"],properties={$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},require$$3={$schema,$id,title,definitions,type,properties,default:!0};(function(o,a){Object.defineProperty(a,"__esModule",{value:!0}),a.MissingRefError=a.ValidationError=a.CodeGen=a.Name=a.nil=a.stringify=a.str=a._=a.KeywordCxt=void 0;const c=core$2,d=draft7,tt=discriminator,nt=require$$3,$a=["/properties"],Ws="http://json-schema.org/draft-07/schema";class gu extends c.default{_addVocabularies(){super._addVocabularies(),d.default.forEach(p0=>this.addVocabulary(p0)),this.opts.discriminator&&this.addKeyword(tt.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const p0=this.opts.$data?this.$dataMetaSchema(nt,$a):nt;this.addMetaSchema(p0,Ws,!1),this.refs["http://json-schema.org/schema"]=Ws}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Ws)?Ws:void 0)}}o.exports=a=gu,Object.defineProperty(a,"__esModule",{value:!0}),a.default=gu;var Su=validate$1;Object.defineProperty(a,"KeywordCxt",{enumerable:!0,get:function(){return Su.KeywordCxt}});var $u=codegen;Object.defineProperty(a,"_",{enumerable:!0,get:function(){return $u._}}),Object.defineProperty(a,"str",{enumerable:!0,get:function(){return $u.str}}),Object.defineProperty(a,"stringify",{enumerable:!0,get:function(){return $u.stringify}}),Object.defineProperty(a,"nil",{enumerable:!0,get:function(){return $u.nil}}),Object.defineProperty(a,"Name",{enumerable:!0,get:function(){return $u.Name}}),Object.defineProperty(a,"CodeGen",{enumerable:!0,get:function(){return $u.CodeGen}});var Iu=validation_error;Object.defineProperty(a,"ValidationError",{enumerable:!0,get:function(){return Iu.default}});var Xu=ref_error;Object.defineProperty(a,"MissingRefError",{enumerable:!0,get:function(){return Xu.default}})})(ajv,ajv.exports);var ajvExports=ajv.exports,dist={exports:{}},formats={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.formatNames=o.fastFormats=o.fullFormats=void 0;function a(B1,lv){return{validate:B1,compare:lv}}o.fullFormats={date:a(nt,$a),time:a(gu,Su),"date-time":a(Iu,Xu),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:y0,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:E1,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:$0,int32:{type:"number",validate:V0},int64:{type:"number",validate:F0},float:{type:"number",validate:u1},double:{type:"number",validate:u1},password:!0,binary:!0},o.fastFormats={...o.fullFormats,date:a(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,$a),time:a(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,Su),"date-time":a(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,Xu),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},o.formatNames=Object.keys(o.fullFormats);function c(B1){return B1%4===0&&(B1%100!==0||B1%400===0)}const d=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,tt=[0,31,28,31,30,31,30,31,31,30,31,30,31];function nt(B1){const lv=d.exec(B1);if(!lv)return!1;const j1=+lv[1],r1=+lv[2],t1=+lv[3];return r1>=1&&r1<=12&&t1>=1&&t1<=(r1===2&&c(j1)?29:tt[r1])}function $a(B1,lv){if(B1&&lv)return B1>lv?1:B1lv?1:B1=O0}function F0(B1){return Number.isInteger(B1)}function u1(){return!0}const g1=/[^\\]\\Z/;function E1(B1){if(g1.test(B1))return!1;try{return new RegExp(B1),!0}catch{return!1}}})(formats);var limit={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.formatLimitDefinition=void 0;const a=ajvExports,c=codegen,d=c.operators,tt={formatMaximum:{okStr:"<=",ok:d.LTE,fail:d.GT},formatMinimum:{okStr:">=",ok:d.GTE,fail:d.LT},formatExclusiveMaximum:{okStr:"<",ok:d.LT,fail:d.GTE},formatExclusiveMinimum:{okStr:">",ok:d.GT,fail:d.LTE}},nt={message:({keyword:Ws,schemaCode:gu})=>c.str`should be ${tt[Ws].okStr} ${gu}`,params:({keyword:Ws,schemaCode:gu})=>c._`{comparison: ${tt[Ws].okStr}, limit: ${gu}}`};o.formatLimitDefinition={keyword:Object.keys(tt),type:"string",schemaType:"string",$data:!0,error:nt,code(Ws){const{gen:gu,data:Su,schemaCode:$u,keyword:Iu,it:Xu}=Ws,{opts:r0,self:p0}=Xu;if(!r0.validateFormats)return;const y0=new a.KeywordCxt(Xu,p0.RULES.all.format.definition,"format");y0.$data?A0():$0();function A0(){const L0=gu.scopeValue("formats",{ref:p0.formats,code:r0.code.formats}),V0=gu.const("fmt",c._`${L0}[${y0.schemaCode}]`);Ws.fail$data(c.or(c._`typeof ${V0} != "object"`,c._`${V0} instanceof RegExp`,c._`typeof ${V0}.compare != "function"`,O0(V0)))}function $0(){const L0=y0.schema,V0=p0.formats[L0];if(!V0||V0===!0)return;if(typeof V0!="object"||V0 instanceof RegExp||typeof V0.compare!="function")throw new Error(`"${Iu}": format "${L0}" does not define "compare" function`);const F0=gu.scopeValue("formats",{key:L0,ref:V0,code:r0.code.formats?c._`${r0.code.formats}${c.getProperty(L0)}`:void 0});Ws.fail$data(O0(F0))}function O0(L0){return c._`${L0}.compare(${Su}, ${$u}) ${tt[Iu].fail} 0`}},dependencies:["format"]};const $a=Ws=>(Ws.addKeyword(o.formatLimitDefinition),Ws);o.default=$a})(limit);(function(o,a){Object.defineProperty(a,"__esModule",{value:!0});const c=formats,d=limit,tt=codegen,nt=new tt.Name("fullFormats"),$a=new tt.Name("fastFormats"),Ws=(Su,$u={keywords:!0})=>{if(Array.isArray($u))return gu(Su,$u,c.fullFormats,nt),Su;const[Iu,Xu]=$u.mode==="fast"?[c.fastFormats,$a]:[c.fullFormats,nt],r0=$u.formats||c.formatNames;return gu(Su,r0,Iu,Xu),$u.keywords&&d.default(Su),Su};Ws.get=(Su,$u="full")=>{const Xu=($u==="fast"?c.fastFormats:c.fullFormats)[Su];if(!Xu)throw new Error(`Unknown format "${Su}"`);return Xu};function gu(Su,$u,Iu,Xu){var r0,p0;(r0=(p0=Su.opts.code).formats)!==null&&r0!==void 0||(p0.formats=tt._`require("ajv-formats/dist/formats").${Xu}`);for(const y0 of $u)Su.addFormat(y0,Iu[y0])}o.exports=a=Ws,Object.defineProperty(a,"__esModule",{value:!0}),a.default=Ws})(dist,dist.exports);var distExports=dist.exports,lib$2={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.AbiSerializationType=o.AbiFunctionModifier=o.AbiFunctionKind=o.SCHEMA_VERSION=void 0,o.SCHEMA_VERSION="0.3.0",function(a){a.View="view",a.Call="call"}(o.AbiFunctionKind||(o.AbiFunctionKind={})),function(a){a.Init="init",a.Private="private",a.Payable="payable"}(o.AbiFunctionModifier||(o.AbiFunctionModifier={})),function(a){a.Json="json",a.Borsh="borsh"}(o.AbiSerializationType||(o.AbiSerializationType={}))})(lib$2);var errors$1={};Object.defineProperty(errors$1,"__esModule",{value:!0});errors$1.ConflictingOptions=errors$1.ArgumentSchemaError=errors$1.UnknownArgumentError=errors$1.UnsupportedSerializationError=void 0;class UnsupportedSerializationError extends Error{constructor(a,c){super(`Contract method '${a}' is using an unsupported serialization type ${c}`)}}errors$1.UnsupportedSerializationError=UnsupportedSerializationError;class UnknownArgumentError extends Error{constructor(a,c){super(`Unrecognized argument '${a}', expected '${JSON.stringify(c)}'`)}}errors$1.UnknownArgumentError=UnknownArgumentError;class ArgumentSchemaError extends Error{constructor(a,c){super(`Argument '${a}' does not conform to the specified ABI schema: '${JSON.stringify(c)}'`)}}errors$1.ArgumentSchemaError=ArgumentSchemaError;class ConflictingOptions extends Error{constructor(){super("Conflicting contract method options have been passed. You can either specify ABI or a list of view/call methods.")}}errors$1.ConflictingOptions=ConflictingOptions;var __awaiter$6=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__importDefault$3=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(contract$1,"__esModule",{value:!0});contract$1.Contract=void 0;const utils_1$1=lib$9,types_1=lib$8,local_view_execution_1=localViewExecution,ajv_1=__importDefault$3(ajvExports),ajv_formats_1=__importDefault$3(distExports),bn_js_1$3=__importDefault$3(bnExports$1),depd_1=__importDefault$3(browser$g),near_abi_1=lib$2,errors_1=errors$1;function nameFunction(o,a){return{[o](...c){return a(...c)}}[o]}function validateArguments(o,a,c,d){var tt;if(!isObject$f(o))return;if(a.params&&a.params.serialization_type!==near_abi_1.AbiSerializationType.Json)throw new errors_1.UnsupportedSerializationError(a.name,a.params.serialization_type);if(a.result&&a.result.serialization_type!==near_abi_1.AbiSerializationType.Json)throw new errors_1.UnsupportedSerializationError(a.name,a.result.serialization_type);const nt=((tt=a.params)===null||tt===void 0?void 0:tt.args)||[];for(const $a of nt){const Ws=o[$a.name],gu=$a.type_schema;gu.definitions=d.body.root_schema.definitions;const Su=c.compile(gu);if(!Su(Ws))throw new errors_1.ArgumentSchemaError($a.name,Su.errors)}for(const $a of Object.keys(o))if(!nt.find(gu=>gu.name===$a))throw new errors_1.UnknownArgumentError($a,nt.map(gu=>gu.name))}function createAjv(){const o=new ajv_1.default({strictSchema:!1,formats:{uint32:!0,uint64:!0}});return(0,ajv_formats_1.default)(o),o}const isUint8Array=o=>o&&o.byteLength!==void 0&&o.byteLength===o.length,isObject$f=o=>Object.prototype.toString.call(o)==="[object Object]";class Contract{constructor(a,c,d){this.account=a,this.contractId=c,this.lve=new local_view_execution_1.LocalViewExecution(a);const{viewMethods:tt=[],changeMethods:nt=[],abi:$a,useLocalViewExecution:Ws}=d;let gu=tt.map(Iu=>({name:Iu,abi:null})),Su=nt.map(Iu=>({name:Iu,abi:null}));if($a){if(gu.length>0||Su.length>0)throw new errors_1.ConflictingOptions;gu=$a.body.functions.filter(Iu=>Iu.kind===near_abi_1.AbiFunctionKind.View).map(Iu=>({name:Iu.name,abi:Iu})),Su=$a.body.functions.filter(Iu=>Iu.kind===near_abi_1.AbiFunctionKind.Call).map(Iu=>({name:Iu.name,abi:Iu}))}const $u=createAjv();gu.forEach(({name:Iu,abi:Xu})=>{Object.defineProperty(this,Iu,{writable:!1,enumerable:!0,value:nameFunction(Iu,(r0={},p0={},...y0)=>__awaiter$6(this,void 0,void 0,function*(){if(y0.length||!(isObject$f(r0)||isUint8Array(r0))||!isObject$f(p0))throw new types_1.PositionalArgsError;if(Xu&&validateArguments(r0,Xu,$u,$a),Ws)try{return yield this.lve.viewFunction(Object.assign({contractId:this.contractId,methodName:Iu,args:r0},p0))}catch(A0){utils_1$1.Logger.warn(`Local view execution failed with: "${A0.message}"`),utils_1$1.Logger.warn("Fallback to normal RPC call")}return this.account.viewFunction(Object.assign({contractId:this.contractId,methodName:Iu,args:r0},p0))}))})}),Su.forEach(({name:Iu,abi:Xu})=>{Object.defineProperty(this,Iu,{writable:!1,enumerable:!0,value:nameFunction(Iu,(...r0)=>__awaiter$6(this,void 0,void 0,function*(){if(r0.length&&(r0.length>3||!(isObject$f(r0[0])||isUint8Array(r0[0]))))throw new types_1.PositionalArgsError;return(r0.length>1||!(r0[0]&&r0[0].args))&&((0,depd_1.default)("contract.methodName(args, gas, amount)")("use `contract.methodName({ args, gas?, amount?, callbackUrl?, meta? })` instead"),r0[0]={args:r0[0],gas:r0[1],amount:r0[2]}),Xu&&validateArguments(r0[0].args,Xu,$u,$a),this._changeMethod(Object.assign({methodName:Iu},r0[0]))}))})})}_changeMethod({args:a,methodName:c,gas:d,amount:tt,meta:nt,callbackUrl:$a}){return __awaiter$6(this,void 0,void 0,function*(){validateBNLike({gas:d,amount:tt});const Ws=yield this.account.functionCall({contractId:this.contractId,methodName:c,args:a,gas:d,attachedDeposit:tt,walletMeta:nt,walletCallbackUrl:$a});return(0,utils_1$1.getTransactionLastResult)(Ws)})}}contract$1.Contract=Contract;function validateBNLike(o){const a="number, decimal string or BN";for(const c of Object.keys(o)){const d=o[c];if(d&&!bn_js_1$3.default.isBN(d)&&isNaN(d))throw new types_1.ArgumentTypeError(c,a,d)}}(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MultisigStateStatus=o.MultisigDeleteRequestRejectionError=o.UnsupportedSerializationError=o.UnknownArgumentError=o.ConflictingOptions=o.ArgumentSchemaError=o.Contract=o.MULTISIG_CONFIRM_METHODS=o.MULTISIG_CHANGE_METHODS=o.MULTISIG_DEPOSIT=o.MULTISIG_GAS=o.MULTISIG_ALLOWANCE=o.MULTISIG_STORAGE_KEY=o.Connection=o.AccountMultisig=o.UrlAccountCreator=o.LocalAccountCreator=o.AccountCreator=o.Account2FA=o.Account=void 0;var a=account$1;Object.defineProperty(o,"Account",{enumerable:!0,get:function(){return a.Account}});var c=account_2fa;Object.defineProperty(o,"Account2FA",{enumerable:!0,get:function(){return c.Account2FA}});var d=account_creator$1;Object.defineProperty(o,"AccountCreator",{enumerable:!0,get:function(){return d.AccountCreator}}),Object.defineProperty(o,"LocalAccountCreator",{enumerable:!0,get:function(){return d.LocalAccountCreator}}),Object.defineProperty(o,"UrlAccountCreator",{enumerable:!0,get:function(){return d.UrlAccountCreator}});var tt=account_multisig$1;Object.defineProperty(o,"AccountMultisig",{enumerable:!0,get:function(){return tt.AccountMultisig}});var nt=connection$1;Object.defineProperty(o,"Connection",{enumerable:!0,get:function(){return nt.Connection}});var $a=constants$4;Object.defineProperty(o,"MULTISIG_STORAGE_KEY",{enumerable:!0,get:function(){return $a.MULTISIG_STORAGE_KEY}}),Object.defineProperty(o,"MULTISIG_ALLOWANCE",{enumerable:!0,get:function(){return $a.MULTISIG_ALLOWANCE}}),Object.defineProperty(o,"MULTISIG_GAS",{enumerable:!0,get:function(){return $a.MULTISIG_GAS}}),Object.defineProperty(o,"MULTISIG_DEPOSIT",{enumerable:!0,get:function(){return $a.MULTISIG_DEPOSIT}}),Object.defineProperty(o,"MULTISIG_CHANGE_METHODS",{enumerable:!0,get:function(){return $a.MULTISIG_CHANGE_METHODS}}),Object.defineProperty(o,"MULTISIG_CONFIRM_METHODS",{enumerable:!0,get:function(){return $a.MULTISIG_CONFIRM_METHODS}});var Ws=contract$1;Object.defineProperty(o,"Contract",{enumerable:!0,get:function(){return Ws.Contract}});var gu=errors$1;Object.defineProperty(o,"ArgumentSchemaError",{enumerable:!0,get:function(){return gu.ArgumentSchemaError}}),Object.defineProperty(o,"ConflictingOptions",{enumerable:!0,get:function(){return gu.ConflictingOptions}}),Object.defineProperty(o,"UnknownArgumentError",{enumerable:!0,get:function(){return gu.UnknownArgumentError}}),Object.defineProperty(o,"UnsupportedSerializationError",{enumerable:!0,get:function(){return gu.UnsupportedSerializationError}});var Su=types$1;Object.defineProperty(o,"MultisigDeleteRequestRejectionError",{enumerable:!0,get:function(){return Su.MultisigDeleteRequestRejectionError}}),Object.defineProperty(o,"MultisigStateStatus",{enumerable:!0,get:function(){return Su.MultisigStateStatus}})})(lib$4);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.logWarning=o.TypedError=o.PositionalArgsError=o.ErrorContext=o.ArgumentTypeError=o.UnsupportedSerializationError=o.UnknownArgumentError=o.ConflictingOptions=o.ArgumentSchemaError=void 0;var a=lib$4;Object.defineProperty(o,"ArgumentSchemaError",{enumerable:!0,get:function(){return a.ArgumentSchemaError}}),Object.defineProperty(o,"ConflictingOptions",{enumerable:!0,get:function(){return a.ConflictingOptions}}),Object.defineProperty(o,"UnknownArgumentError",{enumerable:!0,get:function(){return a.UnknownArgumentError}}),Object.defineProperty(o,"UnsupportedSerializationError",{enumerable:!0,get:function(){return a.UnsupportedSerializationError}});var c=lib$8;Object.defineProperty(o,"ArgumentTypeError",{enumerable:!0,get:function(){return c.ArgumentTypeError}}),Object.defineProperty(o,"ErrorContext",{enumerable:!0,get:function(){return c.ErrorContext}}),Object.defineProperty(o,"PositionalArgsError",{enumerable:!0,get:function(){return c.PositionalArgsError}}),Object.defineProperty(o,"TypedError",{enumerable:!0,get:function(){return c.TypedError}});var d=lib$9;Object.defineProperty(o,"logWarning",{enumerable:!0,get:function(){return d.logWarning}})})(errors$3);var logger$1={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Logger=void 0;var a=lib$9;Object.defineProperty(o,"Logger",{enumerable:!0,get:function(){return a.Logger}})})(logger$1);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(r0,p0,y0,A0){A0===void 0&&(A0=y0);var $0=Object.getOwnPropertyDescriptor(p0,y0);(!$0||("get"in $0?!p0.__esModule:$0.writable||$0.configurable))&&($0={enumerable:!0,get:function(){return p0[y0]}}),Object.defineProperty(r0,A0,$0)}:function(r0,p0,y0,A0){A0===void 0&&(A0=y0),r0[A0]=p0[y0]}),c=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(r0,p0){Object.defineProperty(r0,"default",{enumerable:!0,value:p0})}:function(r0,p0){r0.default=p0}),d=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(r0){if(r0&&r0.__esModule)return r0;var p0={};if(r0!=null)for(var y0 in r0)y0!=="default"&&Object.prototype.hasOwnProperty.call(r0,y0)&&a(p0,r0,y0);return c(p0,r0),p0};Object.defineProperty(o,"__esModule",{value:!0}),o.Logger=o.logWarning=o.rpc_errors=o.KeyPairEd25519=o.KeyPair=o.PublicKey=o.format=o.enums=o.web=o.serialize=o.key_pair=void 0;const tt=d(key_pair);o.key_pair=tt;const nt=d(serialize$2);o.serialize=nt;const $a=d(web);o.web=$a;const Ws=d(enums);o.enums=Ws;const gu=d(format$4);o.format=gu;const Su=d(rpc_errors);o.rpc_errors=Su;const $u=key_pair;Object.defineProperty(o,"PublicKey",{enumerable:!0,get:function(){return $u.PublicKey}}),Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return $u.KeyPair}}),Object.defineProperty(o,"KeyPairEd25519",{enumerable:!0,get:function(){return $u.KeyPairEd25519}});const Iu=errors$3;Object.defineProperty(o,"logWarning",{enumerable:!0,get:function(){return Iu.logWarning}});const Xu=logger$1;Object.defineProperty(o,"Logger",{enumerable:!0,get:function(){return Xu.Logger}})})(utils$s);var transaction={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.transfer=o.stake=o.functionCallAccessKey=o.functionCall=o.fullAccessKey=o.deployContract=o.deleteKey=o.deleteAccount=o.createAccount=o.addKey=o.encodeDelegateAction=o.encodeSignedDelegate=o.Transaction=o.SignedTransaction=o.Signature=o.signTransaction=o.createTransaction=o.SCHEMA=o.Transfer=o.Stake=o.FunctionCallPermission=o.FunctionCall=o.FullAccessPermission=o.DeployContract=o.DeleteKey=o.DeleteAccount=o.CreateAccount=o.AddKey=o.AccessKeyPermission=o.AccessKey=o.Action=o.stringifyJsonOrBytes=void 0;var a=lib$5;Object.defineProperty(o,"stringifyJsonOrBytes",{enumerable:!0,get:function(){return a.stringifyJsonOrBytes}}),Object.defineProperty(o,"Action",{enumerable:!0,get:function(){return a.Action}}),Object.defineProperty(o,"AccessKey",{enumerable:!0,get:function(){return a.AccessKey}}),Object.defineProperty(o,"AccessKeyPermission",{enumerable:!0,get:function(){return a.AccessKeyPermission}}),Object.defineProperty(o,"AddKey",{enumerable:!0,get:function(){return a.AddKey}}),Object.defineProperty(o,"CreateAccount",{enumerable:!0,get:function(){return a.CreateAccount}}),Object.defineProperty(o,"DeleteAccount",{enumerable:!0,get:function(){return a.DeleteAccount}}),Object.defineProperty(o,"DeleteKey",{enumerable:!0,get:function(){return a.DeleteKey}}),Object.defineProperty(o,"DeployContract",{enumerable:!0,get:function(){return a.DeployContract}}),Object.defineProperty(o,"FullAccessPermission",{enumerable:!0,get:function(){return a.FullAccessPermission}}),Object.defineProperty(o,"FunctionCall",{enumerable:!0,get:function(){return a.FunctionCall}}),Object.defineProperty(o,"FunctionCallPermission",{enumerable:!0,get:function(){return a.FunctionCallPermission}}),Object.defineProperty(o,"Stake",{enumerable:!0,get:function(){return a.Stake}}),Object.defineProperty(o,"Transfer",{enumerable:!0,get:function(){return a.Transfer}}),Object.defineProperty(o,"SCHEMA",{enumerable:!0,get:function(){return a.SCHEMA}}),Object.defineProperty(o,"createTransaction",{enumerable:!0,get:function(){return a.createTransaction}}),Object.defineProperty(o,"signTransaction",{enumerable:!0,get:function(){return a.signTransaction}}),Object.defineProperty(o,"Signature",{enumerable:!0,get:function(){return a.Signature}}),Object.defineProperty(o,"SignedTransaction",{enumerable:!0,get:function(){return a.SignedTransaction}}),Object.defineProperty(o,"Transaction",{enumerable:!0,get:function(){return a.Transaction}}),Object.defineProperty(o,"encodeSignedDelegate",{enumerable:!0,get:function(){return a.encodeSignedDelegate}}),Object.defineProperty(o,"encodeDelegateAction",{enumerable:!0,get:function(){return a.encodeDelegateAction}});const c=lib$5,d=(r0,p0)=>c.actionCreators.addKey(r0,p0);o.addKey=d;const tt=()=>c.actionCreators.createAccount();o.createAccount=tt;const nt=r0=>c.actionCreators.deleteAccount(r0);o.deleteAccount=nt;const $a=r0=>c.actionCreators.deleteKey(r0);o.deleteKey=$a;const Ws=r0=>c.actionCreators.deployContract(r0);o.deployContract=Ws;const gu=()=>c.actionCreators.fullAccessKey();o.fullAccessKey=gu;const Su=(r0,p0,y0,A0,$0,O0)=>c.actionCreators.functionCall(r0,p0,y0,A0,$0,O0);o.functionCall=Su;const $u=(r0,p0,y0)=>c.actionCreators.functionCallAccessKey(r0,p0,y0);o.functionCallAccessKey=$u;const Iu=(r0,p0)=>c.actionCreators.stake(r0,p0);o.stake=Iu;const Xu=r0=>c.actionCreators.transfer(r0);o.transfer=Xu})(transaction);var validators$2={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.findSeatPrice=o.diffEpochValidators=void 0;var a=lib$9;Object.defineProperty(o,"diffEpochValidators",{enumerable:!0,get:function(){return a.diffEpochValidators}}),Object.defineProperty(o,"findSeatPrice",{enumerable:!0,get:function(){return a.findSeatPrice}})})(validators$2);var account={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Account=void 0;var a=lib$4;Object.defineProperty(o,"Account",{enumerable:!0,get:function(){return a.Account}})})(account);var account_multisig={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.MultisigStateStatus=o.MultisigDeleteRequestRejectionError=o.MULTISIG_CONFIRM_METHODS=o.MULTISIG_CHANGE_METHODS=o.MULTISIG_DEPOSIT=o.MULTISIG_GAS=o.MULTISIG_ALLOWANCE=o.MULTISIG_STORAGE_KEY=o.AccountMultisig=o.Account2FA=void 0;var a=lib$4;Object.defineProperty(o,"Account2FA",{enumerable:!0,get:function(){return a.Account2FA}}),Object.defineProperty(o,"AccountMultisig",{enumerable:!0,get:function(){return a.AccountMultisig}}),Object.defineProperty(o,"MULTISIG_STORAGE_KEY",{enumerable:!0,get:function(){return a.MULTISIG_STORAGE_KEY}}),Object.defineProperty(o,"MULTISIG_ALLOWANCE",{enumerable:!0,get:function(){return a.MULTISIG_ALLOWANCE}}),Object.defineProperty(o,"MULTISIG_GAS",{enumerable:!0,get:function(){return a.MULTISIG_GAS}}),Object.defineProperty(o,"MULTISIG_DEPOSIT",{enumerable:!0,get:function(){return a.MULTISIG_DEPOSIT}}),Object.defineProperty(o,"MULTISIG_CHANGE_METHODS",{enumerable:!0,get:function(){return a.MULTISIG_CHANGE_METHODS}}),Object.defineProperty(o,"MULTISIG_CONFIRM_METHODS",{enumerable:!0,get:function(){return a.MULTISIG_CONFIRM_METHODS}}),Object.defineProperty(o,"MultisigDeleteRequestRejectionError",{enumerable:!0,get:function(){return a.MultisigDeleteRequestRejectionError}}),Object.defineProperty(o,"MultisigStateStatus",{enumerable:!0,get:function(){return a.MultisigStateStatus}})})(account_multisig);var account_creator={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.UrlAccountCreator=o.LocalAccountCreator=o.AccountCreator=void 0;var a=lib$4;Object.defineProperty(o,"AccountCreator",{enumerable:!0,get:function(){return a.AccountCreator}}),Object.defineProperty(o,"LocalAccountCreator",{enumerable:!0,get:function(){return a.LocalAccountCreator}}),Object.defineProperty(o,"UrlAccountCreator",{enumerable:!0,get:function(){return a.UrlAccountCreator}})})(account_creator);var connection={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Connection=void 0;var a=lib$4;Object.defineProperty(o,"Connection",{enumerable:!0,get:function(){return a.Connection}})})(connection);var signer={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Signer=o.InMemorySigner=void 0;var a=lib$3;Object.defineProperty(o,"InMemorySigner",{enumerable:!0,get:function(){return a.InMemorySigner}}),Object.defineProperty(o,"Signer",{enumerable:!0,get:function(){return a.Signer}})})(signer);var contract={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Contract=void 0;var a=lib$4;Object.defineProperty(o,"Contract",{enumerable:!0,get:function(){return a.Contract}})})(contract);var near$1={},lib$1={},near={},__awaiter$5=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__importDefault$2=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(near,"__esModule",{value:!0});near.Near=void 0;const accounts_1$1=lib$4,bn_js_1$2=__importDefault$2(bnExports$1);class Near{constructor(a){var c;if(this.config=a,this.connection=accounts_1$1.Connection.fromConfig({networkId:a.networkId,provider:{type:"JsonRpcProvider",args:{url:a.nodeUrl,headers:a.headers}},signer:a.signer||{type:"InMemorySigner",keyStore:a.keyStore||((c=a.deps)===null||c===void 0?void 0:c.keyStore)},jsvmAccountId:a.jsvmAccountId||`jsvm.${a.networkId}`}),a.masterAccount){const d=a.initialBalance?new bn_js_1$2.default(a.initialBalance):new bn_js_1$2.default("500000000000000000000000000");this.accountCreator=new accounts_1$1.LocalAccountCreator(new accounts_1$1.Account(this.connection,a.masterAccount),d)}else a.helperUrl?this.accountCreator=new accounts_1$1.UrlAccountCreator(this.connection,a.helperUrl):this.accountCreator=null}account(a){return __awaiter$5(this,void 0,void 0,function*(){return new accounts_1$1.Account(this.connection,a)})}createAccount(a,c){return __awaiter$5(this,void 0,void 0,function*(){if(!this.accountCreator)throw new Error("Must specify account creator, either via masterAccount or helperUrl configuration settings.");return yield this.accountCreator.createAccount(a,c),new accounts_1$1.Account(this.connection,a)})}}near.Near=Near;var wallet_account={},__awaiter$4=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})},__importDefault$1=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(wallet_account,"__esModule",{value:!0});wallet_account.ConnectedWalletAccount=wallet_account.WalletConnection=void 0;const accounts_1=lib$4,crypto_1=lib$a,utils_1=lib$9,transactions_1=lib$5,bn_js_1$1=__importDefault$1(bnExports$1),borsh_1=cjs,LOGIN_WALLET_URL_SUFFIX="/login/",MULTISIG_HAS_METHOD="add_request_and_confirm",LOCAL_STORAGE_KEY_SUFFIX="_wallet_auth_key",PENDING_ACCESS_KEY_PREFIX="pending_key";class WalletConnection{constructor(a,c){if(typeof c!="string")throw new Error("Please define a clear appKeyPrefix for this WalletConnection instance as the second argument to the constructor");if(typeof window>"u")return new Proxy(this,{get(nt,$a){return $a==="isSignedIn"?()=>!1:$a==="getAccountId"?()=>"":nt[$a]&&typeof nt[$a]=="function"?()=>{throw new Error("No window found in context, please ensure you are using WalletConnection on the browser")}:nt[$a]}});this._near=a;const d=c+LOCAL_STORAGE_KEY_SUFFIX,tt=JSON.parse(window.localStorage.getItem(d));this._networkId=a.config.networkId,this._walletBaseUrl=a.config.walletUrl,c=c||a.config.contractName||"default",this._keyStore=a.connection.signer.keyStore,this._authData=tt||{allKeys:[]},this._authDataKey=d,this.isSignedIn()||(this._completeSignInPromise=this._completeSignInWithAccessKey())}isSignedIn(){return!!this._authData.accountId}isSignedInAsync(){return __awaiter$4(this,void 0,void 0,function*(){return this._completeSignInPromise?(yield this._completeSignInPromise,this.isSignedIn()):this.isSignedIn()})}getAccountId(){return this._authData.accountId||""}requestSignInUrl({contractId:a,methodNames:c,successUrl:d,failureUrl:tt}){return __awaiter$4(this,void 0,void 0,function*(){const nt=new URL(window.location.href),$a=new URL(this._walletBaseUrl+LOGIN_WALLET_URL_SUFFIX);if($a.searchParams.set("success_url",d||nt.href),$a.searchParams.set("failure_url",tt||nt.href),a){yield(yield this._near.account(a)).state(),$a.searchParams.set("contract_id",a);const gu=crypto_1.KeyPair.fromRandom("ed25519");$a.searchParams.set("public_key",gu.getPublicKey().toString()),yield this._keyStore.setKey(this._networkId,PENDING_ACCESS_KEY_PREFIX+gu.getPublicKey(),gu)}return c&&c.forEach(Ws=>{$a.searchParams.append("methodNames",Ws)}),$a.toString()})}requestSignIn(a){return __awaiter$4(this,void 0,void 0,function*(){const c=yield this.requestSignInUrl(a);window.location.assign(c)})}requestSignTransactionsUrl({transactions:a,meta:c,callbackUrl:d}){const tt=new URL(window.location.href),nt=new URL("sign",this._walletBaseUrl);return nt.searchParams.set("transactions",a.map($a=>(0,borsh_1.serialize)(transactions_1.SCHEMA.Transaction,$a)).map($a=>Buffer$C.from($a).toString("base64")).join(",")),nt.searchParams.set("callbackUrl",d||tt.href),c&&nt.searchParams.set("meta",c),nt.toString()}requestSignTransactions(a){const c=this.requestSignTransactionsUrl(a);window.location.assign(c)}_completeSignInWithAccessKey(){return __awaiter$4(this,void 0,void 0,function*(){const a=new URL(window.location.href),c=a.searchParams.get("public_key")||"",d=(a.searchParams.get("all_keys")||"").split(","),tt=a.searchParams.get("account_id")||"";if(tt){const nt={accountId:tt,allKeys:d};window.localStorage.setItem(this._authDataKey,JSON.stringify(nt)),c&&(yield this._moveKeyFromTempToPermanent(tt,c)),this._authData=nt}a.searchParams.delete("public_key"),a.searchParams.delete("all_keys"),a.searchParams.delete("account_id"),a.searchParams.delete("meta"),a.searchParams.delete("transactionHashes"),window.history.replaceState({},document.title,a.toString())})}_moveKeyFromTempToPermanent(a,c){return __awaiter$4(this,void 0,void 0,function*(){const d=yield this._keyStore.getKey(this._networkId,PENDING_ACCESS_KEY_PREFIX+c);yield this._keyStore.setKey(this._networkId,a,d),yield this._keyStore.removeKey(this._networkId,PENDING_ACCESS_KEY_PREFIX+c)})}signOut(){this._authData={},window.localStorage.removeItem(this._authDataKey)}account(){return this._connectedAccount||(this._connectedAccount=new ConnectedWalletAccount(this,this._near.connection,this._authData.accountId)),this._connectedAccount}}wallet_account.WalletConnection=WalletConnection;class ConnectedWalletAccount extends accounts_1.Account{constructor(a,c,d){super(c,d),this.walletConnection=a}signAndSendTransaction({receiverId:a,actions:c,walletMeta:d,walletCallbackUrl:tt=window.location.href}){const nt=Object.create(null,{signAndSendTransaction:{get:()=>super.signAndSendTransaction}});return __awaiter$4(this,void 0,void 0,function*(){const $a=yield this.connection.signer.getPublicKey(this.accountId,this.connection.networkId);let Ws=yield this.accessKeyForTransaction(a,c,$a);if(!Ws)throw new Error(`Cannot find matching key for transaction sent to ${a}`);if($a&&$a.toString()===Ws.public_key)try{return yield nt.signAndSendTransaction.call(this,{receiverId:a,actions:c})}catch(r0){if(r0.type==="NotEnoughAllowance")Ws=yield this.accessKeyForTransaction(a,c);else throw r0}const gu=yield this.connection.provider.block({finality:"final"}),Su=(0,utils_1.baseDecode)(gu.header.hash),$u=crypto_1.PublicKey.from(Ws.public_key),Iu=Ws.access_key.nonce.add(new bn_js_1$1.default(1)),Xu=(0,transactions_1.createTransaction)(this.accountId,$u,a,Iu,c,Su);return yield this.walletConnection.requestSignTransactions({transactions:[Xu],meta:d,callbackUrl:tt}),new Promise((r0,p0)=>{setTimeout(()=>{p0(new Error("Failed to redirect to sign transaction"))},1e3)})})}accessKeyMatchesTransaction(a,c,d){return __awaiter$4(this,void 0,void 0,function*(){const{access_key:{permission:tt}}=a;if(tt==="FullAccess")return!0;if(tt.FunctionCall){const{receiver_id:nt,method_names:$a}=tt.FunctionCall;if(nt===this.accountId&&$a.includes(MULTISIG_HAS_METHOD))return!0;if(nt===c){if(d.length!==1)return!1;const[{functionCall:Ws}]=d;return Ws&&(!Ws.deposit||Ws.deposit.toString()==="0")&&($a.length===0||$a.includes(Ws.methodName))}}return!1})}accessKeyForTransaction(a,c,d){return __awaiter$4(this,void 0,void 0,function*(){const tt=yield this.getAccessKeys();if(d){const $a=tt.find(Ws=>Ws.public_key.toString()===d.toString());if($a&&(yield this.accessKeyMatchesTransaction($a,a,c)))return $a}const nt=this.walletConnection._authData.allKeys;for(const $a of tt)if(nt.indexOf($a.public_key)!==-1&&(yield this.accessKeyMatchesTransaction($a,a,c)))return $a;return null})}}wallet_account.ConnectedWalletAccount=ConnectedWalletAccount;(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.WalletConnection=o.ConnectedWalletAccount=o.Near=void 0;var a=near;Object.defineProperty(o,"Near",{enumerable:!0,get:function(){return a.Near}});var c=wallet_account;Object.defineProperty(o,"ConnectedWalletAccount",{enumerable:!0,get:function(){return c.ConnectedWalletAccount}}),Object.defineProperty(o,"WalletConnection",{enumerable:!0,get:function(){return c.WalletConnection}})})(lib$1);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.Near=void 0;var a=lib$1;Object.defineProperty(o,"Near",{enumerable:!0,get:function(){return a.Near}})})(near$1);var walletAccount={};(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.WalletConnection=o.ConnectedWalletAccount=void 0;var a=lib$1;Object.defineProperty(o,"ConnectedWalletAccount",{enumerable:!0,get:function(){return a.ConnectedWalletAccount}}),Object.defineProperty(o,"WalletConnection",{enumerable:!0,get:function(){return a.WalletConnection}})})(walletAccount);(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function($0,O0,L0,V0){V0===void 0&&(V0=L0);var F0=Object.getOwnPropertyDescriptor(O0,L0);(!F0||("get"in F0?!O0.__esModule:F0.writable||F0.configurable))&&(F0={enumerable:!0,get:function(){return O0[L0]}}),Object.defineProperty($0,V0,F0)}:function($0,O0,L0,V0){V0===void 0&&(V0=L0),$0[V0]=O0[L0]}),c=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function($0,O0){Object.defineProperty($0,"default",{enumerable:!0,value:O0})}:function($0,O0){$0.default=O0}),d=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function($0){if($0&&$0.__esModule)return $0;var O0={};if($0!=null)for(var L0 in $0)L0!=="default"&&Object.prototype.hasOwnProperty.call($0,L0)&&a(O0,$0,L0);return c(O0,$0),O0};Object.defineProperty(o,"__esModule",{value:!0}),o.WalletConnection=o.ConnectedWalletAccount=o.Near=o.KeyPair=o.Signer=o.InMemorySigner=o.Contract=o.Connection=o.Account=o.multisig=o.validators=o.transactions=o.utils=o.providers=o.accountCreator=void 0;const tt=d(providers);o.providers=tt;const nt=d(utils$s);o.utils=nt;const $a=d(transaction);o.transactions=$a;const Ws=d(validators$2);o.validators=Ws;const gu=account;Object.defineProperty(o,"Account",{enumerable:!0,get:function(){return gu.Account}});const Su=d(account_multisig);o.multisig=Su;const $u=d(account_creator);o.accountCreator=$u;const Iu=connection;Object.defineProperty(o,"Connection",{enumerable:!0,get:function(){return Iu.Connection}});const Xu=signer;Object.defineProperty(o,"Signer",{enumerable:!0,get:function(){return Xu.Signer}}),Object.defineProperty(o,"InMemorySigner",{enumerable:!0,get:function(){return Xu.InMemorySigner}});const r0=contract;Object.defineProperty(o,"Contract",{enumerable:!0,get:function(){return r0.Contract}});const p0=key_pair;Object.defineProperty(o,"KeyPair",{enumerable:!0,get:function(){return p0.KeyPair}});const y0=near$1;Object.defineProperty(o,"Near",{enumerable:!0,get:function(){return y0.Near}});const A0=walletAccount;Object.defineProperty(o,"ConnectedWalletAccount",{enumerable:!0,get:function(){return A0.ConnectedWalletAccount}}),Object.defineProperty(o,"WalletConnection",{enumerable:!0,get:function(){return A0.WalletConnection}})})(commonIndex);var browserConnect={},__awaiter$3=commonjsGlobal$4&&commonjsGlobal$4.__awaiter||function(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,a||[])).next())})};Object.defineProperty(browserConnect,"__esModule",{value:!0});browserConnect.connect=void 0;const near_1=near$1;function connect(o){return __awaiter$3(this,void 0,void 0,function*(){return new near_1.Near(o)})}browserConnect.connect=connect;(function(o){var a=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(nt,$a,Ws,gu){gu===void 0&&(gu=Ws);var Su=Object.getOwnPropertyDescriptor($a,Ws);(!Su||("get"in Su?!$a.__esModule:Su.writable||Su.configurable))&&(Su={enumerable:!0,get:function(){return $a[Ws]}}),Object.defineProperty(nt,gu,Su)}:function(nt,$a,Ws,gu){gu===void 0&&(gu=Ws),nt[gu]=$a[Ws]}),c=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(nt,$a){Object.defineProperty(nt,"default",{enumerable:!0,value:$a})}:function(nt,$a){nt.default=$a}),d=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(nt){if(nt&&nt.__esModule)return nt;var $a={};if(nt!=null)for(var Ws in nt)Ws!=="default"&&Object.prototype.hasOwnProperty.call(nt,Ws)&&a($a,nt,Ws);return c($a,nt),$a},tt=commonjsGlobal$4&&commonjsGlobal$4.__exportStar||function(nt,$a){for(var Ws in nt)Ws!=="default"&&!Object.prototype.hasOwnProperty.call($a,Ws)&&a($a,nt,Ws)};Object.defineProperty(o,"__esModule",{value:!0}),o.keyStores=void 0,o.keyStores=d(browserIndex$1),tt(commonIndex,o),tt(browserConnect,o)})(browserIndex$2);const browserIndex=getDefaultExportFromCjs$1(browserIndex$2),nearAPI=_mergeNamespaces({__proto__:null,default:browserIndex},[browserIndex$2]);function isFunction$1(o){return typeof o=="function"}function createErrorClass(o){var a=function(d){Error.call(d),d.stack=new Error().stack},c=o(a);return c.prototype=Object.create(Error.prototype),c.prototype.constructor=c,c}var UnsubscriptionError=createErrorClass(function(o){return function(c){o(this),this.message=c?c.length+` errors occurred during unsubscription: `+c.map(function(d,tt){return tt+1+") "+d.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=c}});function arrRemove(o,a){if(o){var c=o.indexOf(a);0<=c&&o.splice(c,1)}}var Subscription=function(){function o(a){this.initialTeardown=a,this.closed=!1,this._parentage=null,this._finalizers=null}return o.prototype.unsubscribe=function(){var a,c,d,tt,nt;if(!this.closed){this.closed=!0;var $a=this._parentage;if($a)if(this._parentage=null,Array.isArray($a))try{for(var Ys=__values($a),gu=Ys.next();!gu.done;gu=Ys.next()){var xu=gu.value;xu.remove(this)}}catch(w0){a={error:w0}}finally{try{gu&&!gu.done&&(c=Ys.return)&&c.call(Ys)}finally{if(a)throw a.error}}else $a.remove(this);var $u=this.initialTeardown;if(isFunction$1($u))try{$u()}catch(w0){nt=w0 instanceof UnsubscriptionError?w0.errors:[w0]}var Iu=this._finalizers;if(Iu){this._finalizers=null;try{for(var Xu=__values(Iu),i0=Xu.next();!i0.done;i0=Xu.next()){var p0=i0.value;try{execFinalizer(p0)}catch(w0){nt=nt??[],w0 instanceof UnsubscriptionError?nt=__spreadArray(__spreadArray([],__read(nt)),__read(w0.errors)):nt.push(w0)}}}catch(w0){d={error:w0}}finally{try{i0&&!i0.done&&(tt=Xu.return)&&tt.call(Xu)}finally{if(d)throw d.error}}}if(nt)throw new UnsubscriptionError(nt)}},o.prototype.add=function(a){var c;if(a&&a!==this)if(this.closed)execFinalizer(a);else{if(a instanceof o){if(a.closed||a._hasParent(this))return;a._addParent(this)}(this._finalizers=(c=this._finalizers)!==null&&c!==void 0?c:[]).push(a)}},o.prototype._hasParent=function(a){var c=this._parentage;return c===a||Array.isArray(c)&&c.includes(a)},o.prototype._addParent=function(a){var c=this._parentage;this._parentage=Array.isArray(c)?(c.push(a),c):c?[c,a]:a},o.prototype._removeParent=function(a){var c=this._parentage;c===a?this._parentage=null:Array.isArray(c)&&arrRemove(c,a)},o.prototype.remove=function(a){var c=this._finalizers;c&&arrRemove(c,a),a instanceof o&&a._removeParent(this)},o.EMPTY=function(){var a=new o;return a.closed=!0,a}(),o}(),EMPTY_SUBSCRIPTION=Subscription.EMPTY;function isSubscription(o){return o instanceof Subscription||o&&"closed"in o&&isFunction$1(o.remove)&&isFunction$1(o.add)&&isFunction$1(o.unsubscribe)}function execFinalizer(o){isFunction$1(o)?o():o.unsubscribe()}var config={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},timeoutProvider={setTimeout:function(o,a){for(var c=[],d=2;d0},enumerable:!1,configurable:!0}),a.prototype._trySubscribe=function(c){return this._throwIfClosed(),o.prototype._trySubscribe.call(this,c)},a.prototype._subscribe=function(c){return this._throwIfClosed(),this._checkFinalizedStatuses(c),this._innerSubscribe(c)},a.prototype._innerSubscribe=function(c){var d=this,tt=this,nt=tt.hasError,$a=tt.isStopped,Ys=tt.observers;return nt||$a?EMPTY_SUBSCRIPTION:(this.currentObservers=null,Ys.push(c),new Subscription(function(){d.currentObservers=null,arrRemove(Ys,c)}))},a.prototype._checkFinalizedStatuses=function(c){var d=this,tt=d.hasError,nt=d.thrownError,$a=d.isStopped;tt?c.error(nt):$a&&c.complete()},a.prototype.asObservable=function(){var c=new Observable;return c.source=this,c},a.create=function(c,d){return new AnonymousSubject(c,d)},a}(Observable),AnonymousSubject=function(o){__extends$1(a,o);function a(c,d){var tt=o.call(this)||this;return tt.destination=c,tt.source=d,tt}return a.prototype.next=function(c){var d,tt;(tt=(d=this.destination)===null||d===void 0?void 0:d.next)===null||tt===void 0||tt.call(d,c)},a.prototype.error=function(c){var d,tt;(tt=(d=this.destination)===null||d===void 0?void 0:d.error)===null||tt===void 0||tt.call(d,c)},a.prototype.complete=function(){var c,d;(d=(c=this.destination)===null||c===void 0?void 0:c.complete)===null||d===void 0||d.call(c)},a.prototype._subscribe=function(c){var d,tt;return(tt=(d=this.source)===null||d===void 0?void 0:d.subscribe(c))!==null&&tt!==void 0?tt:EMPTY_SUBSCRIPTION},a}(Subject),BehaviorSubject=function(o){__extends$1(a,o);function a(c){var d=o.call(this)||this;return d._value=c,d}return Object.defineProperty(a.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),a.prototype._subscribe=function(c){var d=o.prototype._subscribe.call(this,c);return!d.closed&&c.next(this._value),d},a.prototype.getValue=function(){var c=this,d=c.hasError,tt=c.thrownError,nt=c._value;if(d)throw tt;return this._throwIfClosed(),nt},a.prototype.next=function(c){o.prototype.next.call(this,this._value=c)},a}(Subject);function scanInternals(o,a,c,d,tt){return function(nt,$a){var Ys=c,gu=a,xu=0;nt.subscribe(createOperatorSubscriber($a,function($u){var Iu=xu++;gu=Ys?o(gu,$u,Iu):(Ys=!0,$u),$a.next(gu)},tt))}}function scan(o,a){return operate(scanInternals(o,a,arguments.length>=2,!0))}var lib={},_Buffer=safeBufferExports$1.Buffer;function base$1(o){if(o.length>=255)throw new TypeError("Alphabet too long");for(var a=new Uint8Array(256),c=0;c>>0,L0=new Uint8Array(O0);A0!==$0;){for(var q0=i0[A0],F0=0,u1=O0-1;(q0!==0||F0>>0,L0[u1]=q0%$a>>>0,q0=q0/$a>>>0;if(q0!==0)throw new Error("Non-zero carry");w0=F0,A0++}for(var g1=O0-w0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=Ys.repeat(p0);g1>>0,O0=new Uint8Array($0);i0[p0];){var L0=a[i0.charCodeAt(p0)];if(L0===255)return;for(var q0=0,F0=$0-1;(L0!==0||q0>>0,O0[F0]=L0%256>>>0,L0=L0/256>>>0;if(L0!==0)throw new Error("Non-zero carry");A0=q0,p0++}for(var u1=$0-A0;u1!==$0&&O0[u1]===0;)u1++;var g1=_Buffer.allocUnsafe(w0+($0-u1));g1.fill(0,0,w0);for(var E1=w0;u1!==$0;)g1[E1++]=O0[u1++];return g1}function Xu(i0){var p0=Iu(i0);if(p0)return p0;throw new Error("Non-base"+$a+" character")}return{encode:$u,decodeUnsafe:Iu,decode:Xu}}var src=base$1,basex=src,ALPHABET="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",bs58=basex(ALPHABET);function inRange(o,a,c){return a<=o&&o<=c}function ToDictionary(o){if(o===void 0)return{};if(o===Object(o))return o;throw TypeError("Could not convert argument to dictionary")}function stringToCodePoints(o){for(var a=String(o),c=a.length,d=0,tt=[];d57343)tt.push(nt);else if(56320<=nt&&nt<=57343)tt.push(65533);else if(55296<=nt&&nt<=56319)if(d===c-1)tt.push(65533);else{var $a=o.charCodeAt(d+1);if(56320<=$a&&$a<=57343){var Ys=nt&1023,gu=$a&1023;tt.push(65536+(Ys<<10)+gu),d+=1}else tt.push(65533)}d+=1}return tt}function codePointsToString(o){for(var a="",c=0;c>10)+55296,(d&1023)+56320))}return a}var end_of_stream=-1;function Stream(o){this.tokens=[].slice.call(o)}Stream.prototype={endOfStream:function(){return!this.tokens.length},read:function(){return this.tokens.length?this.tokens.shift():end_of_stream},prepend:function(o){if(Array.isArray(o))for(var a=o;a.length;)this.tokens.unshift(a.pop());else this.tokens.unshift(o)},push:function(o){if(Array.isArray(o))for(var a=o;a.length;)this.tokens.push(a.shift());else this.tokens.push(o)}};var finished=-1;function decoderError(o,a){if(o)throw TypeError("Decoder error");return a||65533}var DEFAULT_ENCODING="utf-8";function TextDecoder$1(o,a){if(!(this instanceof TextDecoder$1))return new TextDecoder$1(o,a);if(o=o!==void 0?String(o).toLowerCase():DEFAULT_ENCODING,o!==DEFAULT_ENCODING)throw new Error("Encoding not supported. Only utf-8 is supported");a=ToDictionary(a),this._streaming=!1,this._BOMseen=!1,this._decoder=null,this._fatal=!!a.fatal,this._ignoreBOM=!!a.ignoreBOM,Object.defineProperty(this,"encoding",{value:"utf-8"}),Object.defineProperty(this,"fatal",{value:this._fatal}),Object.defineProperty(this,"ignoreBOM",{value:this._ignoreBOM})}TextDecoder$1.prototype={decode:function o(a,c){var d;typeof a=="object"&&a instanceof ArrayBuffer?d=new Uint8Array(a):typeof a=="object"&&"buffer"in a&&a.buffer instanceof ArrayBuffer?d=new Uint8Array(a.buffer,a.byteOffset,a.byteLength):d=new Uint8Array(0),c=ToDictionary(c),this._streaming||(this._decoder=new UTF8Decoder({fatal:this._fatal}),this._BOMseen=!1),this._streaming=!!c.stream;for(var tt=new Stream(d),nt=[],$a;!tt.endOfStream()&&($a=this._decoder.handler(tt,tt.read()),$a!==finished);)$a!==null&&(Array.isArray($a)?nt.push.apply(nt,$a):nt.push($a));if(!this._streaming){do{if($a=this._decoder.handler(tt,tt.read()),$a===finished)break;$a!==null&&(Array.isArray($a)?nt.push.apply(nt,$a):nt.push($a))}while(!tt.endOfStream());this._decoder=null}return nt.length&&["utf-8"].indexOf(this.encoding)!==-1&&!this._ignoreBOM&&!this._BOMseen&&(nt[0]===65279?(this._BOMseen=!0,nt.shift()):this._BOMseen=!0),codePointsToString(nt)}};function TextEncoder$1(o,a){if(!(this instanceof TextEncoder$1))return new TextEncoder$1(o,a);if(o=o!==void 0?String(o).toLowerCase():DEFAULT_ENCODING,o!==DEFAULT_ENCODING)throw new Error("Encoding not supported. Only utf-8 is supported");a=ToDictionary(a),this._streaming=!1,this._encoder=null,this._options={fatal:!!a.fatal},Object.defineProperty(this,"encoding",{value:"utf-8"})}TextEncoder$1.prototype={encode:function o(a,c){a=a?String(a):"",c=ToDictionary(c),this._streaming||(this._encoder=new UTF8Encoder(this._options)),this._streaming=!!c.stream;for(var d=[],tt=new Stream(stringToCodePoints(a)),nt;!tt.endOfStream()&&(nt=this._encoder.handler(tt,tt.read()),nt!==finished);)Array.isArray(nt)?d.push.apply(d,nt):d.push(nt);if(!this._streaming){for(;nt=this._encoder.handler(tt,tt.read()),nt!==finished;)Array.isArray(nt)?d.push.apply(d,nt):d.push(nt);this._encoder=null}return new Uint8Array(d)}};function UTF8Decoder(o){var a=o.fatal,c=0,d=0,tt=0,nt=128,$a=191;this.handler=function(Ys,gu){if(gu===end_of_stream&&tt!==0)return tt=0,decoderError(a);if(gu===end_of_stream)return finished;if(tt===0){if(inRange(gu,0,127))return gu;if(inRange(gu,194,223))tt=1,c=gu-192;else if(inRange(gu,224,239))gu===224&&(nt=160),gu===237&&($a=159),tt=2,c=gu-224;else if(inRange(gu,240,244))gu===240&&(nt=144),gu===244&&($a=143),tt=3,c=gu-240;else return decoderError(a);return c=c<<6*tt,null}if(!inRange(gu,nt,$a))return c=tt=d=0,nt=128,$a=191,Ys.prepend(gu),decoderError(a);if(nt=128,$a=191,d+=1,c+=gu-128<<6*(tt-d),d!==tt)return null;var xu=c;return c=tt=d=0,xu}}function UTF8Encoder(o){o.fatal,this.handler=function(a,c){if(c===end_of_stream)return finished;if(inRange(c,0,127))return c;var d,tt;inRange(c,128,2047)?(d=1,tt=192):inRange(c,2048,65535)?(d=2,tt=224):inRange(c,65536,1114111)&&(d=3,tt=240);for(var nt=[(c>>6*d)+tt];d>0;){var $a=c>>6*(d-1);nt.push(128|$a&63),d-=1}return nt}}const encoding$1=Object.freeze(Object.defineProperty({__proto__:null,TextDecoder:TextDecoder$1,TextEncoder:TextEncoder$1},Symbol.toStringTag,{value:"Module"})),require$$2=getAugmentedNamespace(encoding$1);var __createBinding=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(o,a,c,d){d===void 0&&(d=c),Object.defineProperty(o,d,{enumerable:!0,get:function(){return a[c]}})}:function(o,a,c,d){d===void 0&&(d=c),o[d]=a[c]}),__setModuleDefault=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(o,a){Object.defineProperty(o,"default",{enumerable:!0,value:a})}:function(o,a){o.default=a}),__decorate=commonjsGlobal$4&&commonjsGlobal$4.__decorate||function(o,a,c,d){var tt=arguments.length,nt=tt<3?a:d===null?d=Object.getOwnPropertyDescriptor(a,c):d,$a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")nt=Reflect.decorate(o,a,c,d);else for(var Ys=o.length-1;Ys>=0;Ys--)($a=o[Ys])&&(nt=(tt<3?$a(nt):tt>3?$a(a,c,nt):$a(a,c))||nt);return tt>3&&nt&&Object.defineProperty(a,c,nt),nt},__importStar=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var c in o)c!=="default"&&Object.hasOwnProperty.call(o,c)&&__createBinding(a,o,c);return __setModuleDefault(a,o),a},__importDefault=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(lib,"__esModule",{value:!0});lib.deserializeUnchecked=lib.deserialize=serialize_1=lib.serialize=lib.BinaryReader=lib.BinaryWriter=lib.BorshError=lib.baseDecode=lib.baseEncode=void 0;const bn_js_1=__importDefault(bnExports$1),bs58_1=__importDefault(bs58),encoding=__importStar(require$$2),ResolvedTextDecoder=typeof TextDecoder!="function"?encoding.TextDecoder:TextDecoder,textDecoder=new ResolvedTextDecoder("utf-8",{fatal:!0});function baseEncode(o){return typeof o=="string"&&(o=Buffer$C.from(o,"utf8")),bs58_1.default.encode(Buffer$C.from(o))}lib.baseEncode=baseEncode;function baseDecode(o){return Buffer$C.from(bs58_1.default.decode(o))}lib.baseDecode=baseDecode;const INITIAL_LENGTH=1024;class BorshError extends Error{constructor(a){super(a),this.fieldPath=[],this.originalMessage=a}addToFieldPath(a){this.fieldPath.splice(0,0,a),this.message=this.originalMessage+": "+this.fieldPath.join(".")}}lib.BorshError=BorshError;class BinaryWriter{constructor(){this.buf=Buffer$C.alloc(INITIAL_LENGTH),this.length=0}maybeResize(){this.buf.length<16+this.length&&(this.buf=Buffer$C.concat([this.buf,Buffer$C.alloc(INITIAL_LENGTH)]))}writeU8(a){this.maybeResize(),this.buf.writeUInt8(a,this.length),this.length+=1}writeU16(a){this.maybeResize(),this.buf.writeUInt16LE(a,this.length),this.length+=2}writeU32(a){this.maybeResize(),this.buf.writeUInt32LE(a,this.length),this.length+=4}writeU64(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",8)))}writeU128(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",16)))}writeU256(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",32)))}writeU512(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",64)))}writeBuffer(a){this.buf=Buffer$C.concat([Buffer$C.from(this.buf.subarray(0,this.length)),a,Buffer$C.alloc(INITIAL_LENGTH)]),this.length+=a.length}writeString(a){this.maybeResize();const c=Buffer$C.from(a,"utf8");this.writeU32(c.length),this.writeBuffer(c)}writeFixedArray(a){this.writeBuffer(Buffer$C.from(a))}writeArray(a,c){this.maybeResize(),this.writeU32(a.length);for(const d of a)this.maybeResize(),c(d)}toArray(){return this.buf.subarray(0,this.length)}}lib.BinaryWriter=BinaryWriter;function handlingRangeError(o,a,c){const d=c.value;c.value=function(...tt){try{return d.apply(this,tt)}catch(nt){if(nt instanceof RangeError){const $a=nt.code;if(["ERR_BUFFER_OUT_OF_BOUNDS","ERR_OUT_OF_RANGE"].indexOf($a)>=0)throw new BorshError("Reached the end of buffer when deserializing")}throw nt}}}class BinaryReader{constructor(a){this.buf=a,this.offset=0}readU8(){const a=this.buf.readUInt8(this.offset);return this.offset+=1,a}readU16(){const a=this.buf.readUInt16LE(this.offset);return this.offset+=2,a}readU32(){const a=this.buf.readUInt32LE(this.offset);return this.offset+=4,a}readU64(){const a=this.readBuffer(8);return new bn_js_1.default(a,"le")}readU128(){const a=this.readBuffer(16);return new bn_js_1.default(a,"le")}readU256(){const a=this.readBuffer(32);return new bn_js_1.default(a,"le")}readU512(){const a=this.readBuffer(64);return new bn_js_1.default(a,"le")}readBuffer(a){if(this.offset+a>this.buf.length)throw new BorshError(`Expected buffer length ${a} isn't within bounds`);const c=this.buf.slice(this.offset,this.offset+a);return this.offset+=a,c}readString(){const a=this.readU32(),c=this.readBuffer(a);try{return textDecoder.decode(c)}catch(d){throw new BorshError(`Error decoding UTF-8 string: ${d}`)}}readFixedArray(a){return new Uint8Array(this.readBuffer(a))}readArray(a){const c=this.readU32(),d=Array();for(let tt=0;tt{serializeField(o,a,nt,d[0],tt)});else if(d.kind!==void 0)switch(d.kind){case"option":{c==null?tt.writeU8(0):(tt.writeU8(1),serializeField(o,a,c,d.type,tt));break}case"map":{tt.writeU32(c.size),c.forEach((nt,$a)=>{serializeField(o,a,$a,d.key,tt),serializeField(o,a,nt,d.value,tt)});break}default:throw new BorshError(`FieldType ${d} unrecognized`)}else serializeStruct(o,c,tt)}catch(nt){throw nt instanceof BorshError&&nt.addToFieldPath(a),nt}}function serializeStruct(o,a,c){if(typeof a.borshSerialize=="function"){a.borshSerialize(c);return}const d=o.get(a.constructor);if(!d)throw new BorshError(`Class ${a.constructor.name} is missing in schema`);if(d.kind==="struct")d.fields.map(([tt,nt])=>{serializeField(o,tt,a[tt],nt,c)});else if(d.kind==="enum"){const tt=a[d.field];for(let nt=0;ntdeserializeField(o,a,c[0],d))}if(c.kind==="option")return d.readU8()?deserializeField(o,a,c.type,d):void 0;if(c.kind==="map"){let tt=new Map;const nt=d.readU32();for(let $a=0;$a=d.values.length)throw new BorshError(`Enum index: ${tt} is out of range`);const[nt,$a]=d.values[tt],Ys=deserializeField(o,nt,$a,c);return new a({[nt]:Ys})}throw new BorshError(`Unexpected schema kind: ${d.kind} for ${a.constructor.name}`)}function deserialize$1(o,a,c,d=BinaryReader){const tt=new d(c),nt=deserializeStruct(o,a,tt);if(tt.offset>2]|=o[tt]<>2]|=d<>2]|=(192|d>>6)<>2]|=(128|d&63)<=57344?(Ys[nt>>2]|=(224|d>>12)<>2]|=(128|d>>6&63)<>2]|=(128|d&63)<>2]|=(240|d>>18)<>2]|=(128|d>>12&63)<>2]|=(128|d>>6&63)<>2]|=(128|d&63)<=64?(this.block=Ys[16],this.start=nt-64,this.hash(),this.hashed=!0):this.start=nt}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha256.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var o=this.blocks,a=this.lastByteIndex;o[16]=this.block,o[a>>2]|=EXTRA[a&3],this.block=o[16],a>=56&&(this.hashed||this.hash(),o[0]=this.block,o[16]=o[1]=o[2]=o[3]=o[4]=o[5]=o[6]=o[7]=o[8]=o[9]=o[10]=o[11]=o[12]=o[13]=o[14]=o[15]=0),o[14]=this.hBytes<<3|this.bytes>>>29,o[15]=this.bytes<<3,this.hash()}},Sha256.prototype.hash=function(){var o=this.h0,a=this.h1,c=this.h2,d=this.h3,tt=this.h4,nt=this.h5,$a=this.h6,Ys=this.h7,gu=this.blocks,xu,$u,Iu,Xu,i0,p0,w0,A0,$0,O0,L0;for(xu=16;xu<64;++xu)i0=gu[xu-15],$u=(i0>>>7|i0<<25)^(i0>>>18|i0<<14)^i0>>>3,i0=gu[xu-2],Iu=(i0>>>17|i0<<15)^(i0>>>19|i0<<13)^i0>>>10,gu[xu]=gu[xu-16]+$u+gu[xu-7]+Iu<<0;for(L0=a&c,xu=0;xu<64;xu+=4)this.first?(this.is224?(A0=300032,i0=gu[0]-1413257819,Ys=i0-150054599<<0,d=i0+24177077<<0):(A0=704751109,i0=gu[0]-210244248,Ys=i0-1521486534<<0,d=i0+143694565<<0),this.first=!1):($u=(o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10),Iu=(tt>>>6|tt<<26)^(tt>>>11|tt<<21)^(tt>>>25|tt<<7),A0=o&a,Xu=A0^o&c^L0,w0=tt&nt^~tt&$a,i0=Ys+Iu+w0+K[xu]+gu[xu],p0=$u+Xu,Ys=d+i0<<0,d=i0+p0<<0),$u=(d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),Iu=(Ys>>>6|Ys<<26)^(Ys>>>11|Ys<<21)^(Ys>>>25|Ys<<7),$0=d&o,Xu=$0^d&a^A0,w0=Ys&tt^~Ys&nt,i0=$a+Iu+w0+K[xu+1]+gu[xu+1],p0=$u+Xu,$a=c+i0<<0,c=i0+p0<<0,$u=(c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),Iu=($a>>>6|$a<<26)^($a>>>11|$a<<21)^($a>>>25|$a<<7),O0=c&d,Xu=O0^c&o^$0,w0=$a&Ys^~$a&tt,i0=nt+Iu+w0+K[xu+2]+gu[xu+2],p0=$u+Xu,nt=a+i0<<0,a=i0+p0<<0,$u=(a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10),Iu=(nt>>>6|nt<<26)^(nt>>>11|nt<<21)^(nt>>>25|nt<<7),L0=a&c,Xu=L0^a&d^O0,w0=nt&$a^~nt&Ys,i0=tt+Iu+w0+K[xu+3]+gu[xu+3],p0=$u+Xu,tt=o+i0<<0,o=i0+p0<<0;this.h0=this.h0+o<<0,this.h1=this.h1+a<<0,this.h2=this.h2+c<<0,this.h3=this.h3+d<<0,this.h4=this.h4+tt<<0,this.h5=this.h5+nt<<0,this.h6=this.h6+$a<<0,this.h7=this.h7+Ys<<0},Sha256.prototype.hex=function(){this.finalize();var o=this.h0,a=this.h1,c=this.h2,d=this.h3,tt=this.h4,nt=this.h5,$a=this.h6,Ys=this.h7,gu=HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[o&15]+HEX_CHARS[a>>28&15]+HEX_CHARS[a>>24&15]+HEX_CHARS[a>>20&15]+HEX_CHARS[a>>16&15]+HEX_CHARS[a>>12&15]+HEX_CHARS[a>>8&15]+HEX_CHARS[a>>4&15]+HEX_CHARS[a&15]+HEX_CHARS[c>>28&15]+HEX_CHARS[c>>24&15]+HEX_CHARS[c>>20&15]+HEX_CHARS[c>>16&15]+HEX_CHARS[c>>12&15]+HEX_CHARS[c>>8&15]+HEX_CHARS[c>>4&15]+HEX_CHARS[c&15]+HEX_CHARS[d>>28&15]+HEX_CHARS[d>>24&15]+HEX_CHARS[d>>20&15]+HEX_CHARS[d>>16&15]+HEX_CHARS[d>>12&15]+HEX_CHARS[d>>8&15]+HEX_CHARS[d>>4&15]+HEX_CHARS[d&15]+HEX_CHARS[tt>>28&15]+HEX_CHARS[tt>>24&15]+HEX_CHARS[tt>>20&15]+HEX_CHARS[tt>>16&15]+HEX_CHARS[tt>>12&15]+HEX_CHARS[tt>>8&15]+HEX_CHARS[tt>>4&15]+HEX_CHARS[tt&15]+HEX_CHARS[nt>>28&15]+HEX_CHARS[nt>>24&15]+HEX_CHARS[nt>>20&15]+HEX_CHARS[nt>>16&15]+HEX_CHARS[nt>>12&15]+HEX_CHARS[nt>>8&15]+HEX_CHARS[nt>>4&15]+HEX_CHARS[nt&15]+HEX_CHARS[$a>>28&15]+HEX_CHARS[$a>>24&15]+HEX_CHARS[$a>>20&15]+HEX_CHARS[$a>>16&15]+HEX_CHARS[$a>>12&15]+HEX_CHARS[$a>>8&15]+HEX_CHARS[$a>>4&15]+HEX_CHARS[$a&15];return this.is224||(gu+=HEX_CHARS[Ys>>28&15]+HEX_CHARS[Ys>>24&15]+HEX_CHARS[Ys>>20&15]+HEX_CHARS[Ys>>16&15]+HEX_CHARS[Ys>>12&15]+HEX_CHARS[Ys>>8&15]+HEX_CHARS[Ys>>4&15]+HEX_CHARS[Ys&15]),gu},Sha256.prototype.toString=Sha256.prototype.hex,Sha256.prototype.digest=function(){this.finalize();var o=this.h0,a=this.h1,c=this.h2,d=this.h3,tt=this.h4,nt=this.h5,$a=this.h6,Ys=this.h7,gu=[o>>24&255,o>>16&255,o>>8&255,o&255,a>>24&255,a>>16&255,a>>8&255,a&255,c>>24&255,c>>16&255,c>>8&255,c&255,d>>24&255,d>>16&255,d>>8&255,d&255,tt>>24&255,tt>>16&255,tt>>8&255,tt&255,nt>>24&255,nt>>16&255,nt>>8&255,nt&255,$a>>24&255,$a>>16&255,$a>>8&255,$a&255];return this.is224||gu.push(Ys>>24&255,Ys>>16&255,Ys>>8&255,Ys&255),gu},Sha256.prototype.array=Sha256.prototype.digest,Sha256.prototype.arrayBuffer=function(){this.finalize();var o=new ArrayBuffer(this.is224?28:32),a=new DataView(o);return a.setUint32(0,this.h0),a.setUint32(4,this.h1),a.setUint32(8,this.h2),a.setUint32(12,this.h3),a.setUint32(16,this.h4),a.setUint32(20,this.h5),a.setUint32(24,this.h6),this.is224||a.setUint32(28,this.h7),o};function HmacSha256(o,a,c){var d,tt=typeof o;if(tt==="string"){var nt=[],$a=o.length,Ys=0,gu;for(d=0;d<$a;++d)gu=o.charCodeAt(d),gu<128?nt[Ys++]=gu:gu<2048?(nt[Ys++]=192|gu>>6,nt[Ys++]=128|gu&63):gu<55296||gu>=57344?(nt[Ys++]=224|gu>>12,nt[Ys++]=128|gu>>6&63,nt[Ys++]=128|gu&63):(gu=65536+((gu&1023)<<10|o.charCodeAt(++d)&1023),nt[Ys++]=240|gu>>18,nt[Ys++]=128|gu>>12&63,nt[Ys++]=128|gu>>6&63,nt[Ys++]=128|gu&63);o=nt}else if(tt==="object"){if(o===null)throw new Error(ERROR);if(ARRAY_BUFFER&&o.constructor===ArrayBuffer)o=new Uint8Array(o);else if(!Array.isArray(o)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(o)))throw new Error(ERROR)}else throw new Error(ERROR);o.length>64&&(o=new Sha256(a,!0).update(o).array());var xu=[],$u=[];for(d=0;d<64;++d){var Iu=o[d]||0;xu[d]=92^Iu,$u[d]=54^Iu}Sha256.call(this,a,c),this.update($u),this.oKeyPad=xu,this.inner=!0,this.sharedMemory=c}HmacSha256.prototype=new Sha256,HmacSha256.prototype.finalize=function(){if(Sha256.prototype.finalize.call(this),this.inner){this.inner=!1;var o=this.array();Sha256.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(o),Sha256.prototype.finalize.call(this)}};var exports=createMethod();exports.sha256=exports,exports.sha224=createMethod(!0),exports.sha256.hmac=createHmacMethod(),exports.sha224.hmac=createHmacMethod(!0),COMMON_JS?module.exports=exports:(root.sha256=exports.sha256,root.sha224=exports.sha224)})()})(sha256$1);var sha256Exports=sha256$1.exports;function __awaiter$2(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,[])).next())})}typeof SuppressedError=="function"&&SuppressedError;class Provider{constructor(a){this.provider=new browserIndex$2.providers.JsonRpcProvider({url:a})}query(a){return this.provider.query(a)}viewAccessKey({accountId:a,publicKey:c}){return this.query({request_type:"view_access_key",finality:"final",account_id:a,public_key:c})}block(a){return this.provider.block(a)}sendTransaction(a){return this.provider.sendTransaction(a)}}const KEY_DELIMITER=":";class JsonStorage{constructor(a,c){this.storage=a,this.namespace=Array.isArray(c)?c.join(KEY_DELIMITER):c}resolveKey(a){return[this.namespace,a].join(KEY_DELIMITER)}getItem(a){return this.storage.getItem(this.resolveKey(a)).then(c=>typeof c=="string"?JSON.parse(c):null)}setItem(a,c){return this.storage.setItem(this.resolveKey(a),JSON.stringify(c))}removeItem(a){return this.storage.removeItem(this.resolveKey(a))}}var commonjsGlobal$3=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},check$3=function(o){return o&&o.Math==Math&&o},global$t=check$3(typeof globalThis=="object"&&globalThis)||check$3(typeof window=="object"&&window)||check$3(typeof self=="object"&&self)||check$3(typeof commonjsGlobal$3=="object"&&commonjsGlobal$3)||function(){return this}()||Function("return this")(),objectGetOwnPropertyDescriptor$3={},fails$s=function(o){try{return!!o()}catch{return!0}},fails$r=fails$s,descriptors$3=!fails$r(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),fails$q=fails$s,functionBindNative$3=!fails$q(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")}),NATIVE_BIND$3$3=functionBindNative$3,call$l$1=Function.prototype.call,functionCall$3=NATIVE_BIND$3$3?call$l$1.bind(call$l$1):function(){return call$l$1.apply(call$l$1,arguments)},objectPropertyIsEnumerable$3={},$propertyIsEnumerable$3={}.propertyIsEnumerable,getOwnPropertyDescriptor$2$3=Object.getOwnPropertyDescriptor,NASHORN_BUG$3=getOwnPropertyDescriptor$2$3&&!$propertyIsEnumerable$3.call({1:2},1);objectPropertyIsEnumerable$3.f=NASHORN_BUG$3?function o(a){var c=getOwnPropertyDescriptor$2$3(this,a);return!!c&&c.enumerable}:$propertyIsEnumerable$3;var createPropertyDescriptor$5$1=function(o,a){return{enumerable:!(o&1),configurable:!(o&2),writable:!(o&4),value:a}},NATIVE_BIND$2$3=functionBindNative$3,FunctionPrototype$2$3=Function.prototype,bind$7$1=FunctionPrototype$2$3.bind,call$k$1=FunctionPrototype$2$3.call,uncurryThis$p=NATIVE_BIND$2$3&&bind$7$1.bind(call$k$1,call$k$1),functionUncurryThis$3=NATIVE_BIND$2$3?function(o){return o&&uncurryThis$p(o)}:function(o){return o&&function(){return call$k$1.apply(o,arguments)}},uncurryThis$o$1=functionUncurryThis$3,toString$7$1=uncurryThis$o$1({}.toString),stringSlice$3$1=uncurryThis$o$1("".slice),classofRaw$1$3=function(o){return stringSlice$3$1(toString$7$1(o),8,-1)},uncurryThis$n$1=functionUncurryThis$3,fails$p=fails$s,classof$b=classofRaw$1$3,$Object$4$3=Object,split$6=uncurryThis$n$1("".split),indexedObject$3=fails$p(function(){return!$Object$4$3("z").propertyIsEnumerable(0)})?function(o){return classof$b(o)=="String"?split$6(o,""):$Object$4$3(o)}:$Object$4$3,$TypeError$f$1=TypeError,requireObjectCoercible$6$1=function(o){if(o==null)throw $TypeError$f$1("Can't call method on "+o);return o},IndexedObject$3$1=indexedObject$3,requireObjectCoercible$5$1=requireObjectCoercible$6$1,toIndexedObject$6$1=function(o){return IndexedObject$3$1(requireObjectCoercible$5$1(o))},isCallable$n$1=function(o){return typeof o=="function"},isCallable$m$1=isCallable$n$1,isObject$d=function(o){return typeof o=="object"?o!==null:isCallable$m$1(o)},global$s=global$t,isCallable$l$2=isCallable$n$1,aFunction$3=function(o){return isCallable$l$2(o)?o:void 0},getBuiltIn$8$3=function(o,a){return arguments.length<2?aFunction$3(global$s[o]):global$s[o]&&global$s[o][a]},uncurryThis$m$1=functionUncurryThis$3,objectIsPrototypeOf$3=uncurryThis$m$1({}.isPrototypeOf),getBuiltIn$7$3=getBuiltIn$8$3,engineUserAgent$3=getBuiltIn$7$3("navigator","userAgent")||"",global$r=global$t,userAgent$5$1=engineUserAgent$3,process$3$3=global$r.process,Deno$1$3=global$r.Deno,versions$3=process$3$3&&process$3$3.versions||Deno$1$3&&Deno$1$3.version,v8$3=versions$3&&versions$3.v8,match$3,version$6;v8$3&&(match$3=v8$3.split("."),version$6=match$3[0]>0&&match$3[0]<4?1:+(match$3[0]+match$3[1]));!version$6&&userAgent$5$1&&(match$3=userAgent$5$1.match(/Edge\/(\d+)/),(!match$3||match$3[1]>=74)&&(match$3=userAgent$5$1.match(/Chrome\/(\d+)/),match$3&&(version$6=+match$3[1])));var engineV8Version$3=version$6,V8_VERSION$1$3=engineV8Version$3,fails$o=fails$s,nativeSymbol$3=!!Object.getOwnPropertySymbols&&!fails$o(function(){var o=Symbol();return!String(o)||!(Object(o)instanceof Symbol)||!Symbol.sham&&V8_VERSION$1$3&&V8_VERSION$1$3<41}),NATIVE_SYMBOL$1$3=nativeSymbol$3,useSymbolAsUid$3=NATIVE_SYMBOL$1$3&&!Symbol.sham&&typeof Symbol.iterator=="symbol",getBuiltIn$6$3=getBuiltIn$8$3,isCallable$k$3=isCallable$n$1,isPrototypeOf$4$1=objectIsPrototypeOf$3,USE_SYMBOL_AS_UID$1$3=useSymbolAsUid$3,$Object$3$3=Object,isSymbol$3$1=USE_SYMBOL_AS_UID$1$3?function(o){return typeof o=="symbol"}:function(o){var a=getBuiltIn$6$3("Symbol");return isCallable$k$3(a)&&isPrototypeOf$4$1(a.prototype,$Object$3$3(o))},$String$3$3=String,tryToString$5$1=function(o){try{return $String$3$3(o)}catch{return"Object"}},isCallable$j$3=isCallable$n$1,tryToString$4$3=tryToString$5$1,$TypeError$e$1=TypeError,aCallable$9$1=function(o){if(isCallable$j$3(o))return o;throw $TypeError$e$1(tryToString$4$3(o)+" is not a function")},aCallable$8$1=aCallable$9$1,getMethod$4$1=function(o,a){var c=o[a];return c==null?void 0:aCallable$8$1(c)},call$j$1=functionCall$3,isCallable$i$3=isCallable$n$1,isObject$c=isObject$d,$TypeError$d$1=TypeError,ordinaryToPrimitive$1$3=function(o,a){var c,d;if(a==="string"&&isCallable$i$3(c=o.toString)&&!isObject$c(d=call$j$1(c,o))||isCallable$i$3(c=o.valueOf)&&!isObject$c(d=call$j$1(c,o))||a!=="string"&&isCallable$i$3(c=o.toString)&&!isObject$c(d=call$j$1(c,o)))return d;throw $TypeError$d$1("Can't convert object to primitive value")},shared$4$1={exports:{}},global$q=global$t,defineProperty$7$1=Object.defineProperty,defineGlobalProperty$3$3=function(o,a){try{defineProperty$7$1(global$q,o,{value:a,configurable:!0,writable:!0})}catch{global$q[o]=a}return a},global$p=global$t,defineGlobalProperty$2$3=defineGlobalProperty$3$3,SHARED$3="__core-js_shared__",store$3$3=global$p[SHARED$3]||defineGlobalProperty$2$3(SHARED$3,{}),sharedStore$3=store$3$3,store$2$3=sharedStore$3;(shared$4$1.exports=function(o,a){return store$2$3[o]||(store$2$3[o]=a!==void 0?a:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var requireObjectCoercible$4$1=requireObjectCoercible$6$1,$Object$2$3=Object,toObject$7$1=function(o){return $Object$2$3(requireObjectCoercible$4$1(o))},uncurryThis$l$1=functionUncurryThis$3,toObject$6$1=toObject$7$1,hasOwnProperty$3=uncurryThis$l$1({}.hasOwnProperty),hasOwnProperty_1$3=Object.hasOwn||function o(a,c){return hasOwnProperty$3(toObject$6$1(a),c)},uncurryThis$k$1=functionUncurryThis$3,id$4=0,postfix$3=Math.random(),toString$6$2=uncurryThis$k$1(1 .toString),uid$3$1=function(o){return"Symbol("+(o===void 0?"":o)+")_"+toString$6$2(++id$4+postfix$3,36)},global$o$1=global$t,shared$3$3=shared$4$1.exports,hasOwn$b$2=hasOwnProperty_1$3,uid$2$3=uid$3$1,NATIVE_SYMBOL$5=nativeSymbol$3,USE_SYMBOL_AS_UID$4=useSymbolAsUid$3,WellKnownSymbolsStore$3=shared$3$3("wks"),Symbol$1$3=global$o$1.Symbol,symbolFor$3=Symbol$1$3&&Symbol$1$3.for,createWellKnownSymbol$3=USE_SYMBOL_AS_UID$4?Symbol$1$3:Symbol$1$3&&Symbol$1$3.withoutSetter||uid$2$3,wellKnownSymbol$j$1=function(o){if(!hasOwn$b$2(WellKnownSymbolsStore$3,o)||!(NATIVE_SYMBOL$5||typeof WellKnownSymbolsStore$3[o]=="string")){var a="Symbol."+o;NATIVE_SYMBOL$5&&hasOwn$b$2(Symbol$1$3,o)?WellKnownSymbolsStore$3[o]=Symbol$1$3[o]:USE_SYMBOL_AS_UID$4&&symbolFor$3?WellKnownSymbolsStore$3[o]=symbolFor$3(a):WellKnownSymbolsStore$3[o]=createWellKnownSymbol$3(a)}return WellKnownSymbolsStore$3[o]},call$i$1=functionCall$3,isObject$b$1=isObject$d,isSymbol$2$3=isSymbol$3$1,getMethod$3$3=getMethod$4$1,ordinaryToPrimitive$4=ordinaryToPrimitive$1$3,wellKnownSymbol$i$1=wellKnownSymbol$j$1,$TypeError$c$2=TypeError,TO_PRIMITIVE$3=wellKnownSymbol$i$1("toPrimitive"),toPrimitive$2$1=function(o,a){if(!isObject$b$1(o)||isSymbol$2$3(o))return o;var c=getMethod$3$3(o,TO_PRIMITIVE$3),d;if(c){if(a===void 0&&(a="default"),d=call$i$1(c,o,a),!isObject$b$1(d)||isSymbol$2$3(d))return d;throw $TypeError$c$2("Can't convert object to primitive value")}return a===void 0&&(a="number"),ordinaryToPrimitive$4(o,a)},toPrimitive$1$3=toPrimitive$2$1,isSymbol$1$3=isSymbol$3$1,toPropertyKey$4$1=function(o){var a=toPrimitive$1$3(o,"string");return isSymbol$1$3(a)?a:a+""},global$n$1=global$t,isObject$a$1=isObject$d,document$3$3=global$n$1.document,EXISTS$1$3=isObject$a$1(document$3$3)&&isObject$a$1(document$3$3.createElement),documentCreateElement$2$3=function(o){return EXISTS$1$3?document$3$3.createElement(o):{}},DESCRIPTORS$d$1=descriptors$3,fails$n=fails$s,createElement$1$3=documentCreateElement$2$3,ie8DomDefine$3=!DESCRIPTORS$d$1&&!fails$n(function(){return Object.defineProperty(createElement$1$3("div"),"a",{get:function(){return 7}}).a!=7}),DESCRIPTORS$c$1=descriptors$3,call$h$1=functionCall$3,propertyIsEnumerableModule$1$2=objectPropertyIsEnumerable$3,createPropertyDescriptor$4$2=createPropertyDescriptor$5$1,toIndexedObject$5$3=toIndexedObject$6$1,toPropertyKey$3$2=toPropertyKey$4$1,hasOwn$a$3=hasOwnProperty_1$3,IE8_DOM_DEFINE$1$3=ie8DomDefine$3,$getOwnPropertyDescriptor$1$3=Object.getOwnPropertyDescriptor;objectGetOwnPropertyDescriptor$3.f=DESCRIPTORS$c$1?$getOwnPropertyDescriptor$1$3:function o(a,c){if(a=toIndexedObject$5$3(a),c=toPropertyKey$3$2(c),IE8_DOM_DEFINE$1$3)try{return $getOwnPropertyDescriptor$1$3(a,c)}catch{}if(hasOwn$a$3(a,c))return createPropertyDescriptor$4$2(!call$h$1(propertyIsEnumerableModule$1$2.f,a,c),a[c])};var objectDefineProperty$3={},DESCRIPTORS$b$2=descriptors$3,fails$m$1=fails$s,v8PrototypeDefineBug$3=DESCRIPTORS$b$2&&fails$m$1(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42}),isObject$9$1=isObject$d,$String$2$3=String,$TypeError$b$3=TypeError,anObject$e$1=function(o){if(isObject$9$1(o))return o;throw $TypeError$b$3($String$2$3(o)+" is not an object")},DESCRIPTORS$a$2=descriptors$3,IE8_DOM_DEFINE$4=ie8DomDefine$3,V8_PROTOTYPE_DEFINE_BUG$1$3=v8PrototypeDefineBug$3,anObject$d$1=anObject$e$1,toPropertyKey$2$3=toPropertyKey$4$1,$TypeError$a$3=TypeError,$defineProperty$3=Object.defineProperty,$getOwnPropertyDescriptor$4=Object.getOwnPropertyDescriptor,ENUMERABLE$3="enumerable",CONFIGURABLE$1$3="configurable",WRITABLE$3="writable";objectDefineProperty$3.f=DESCRIPTORS$a$2?V8_PROTOTYPE_DEFINE_BUG$1$3?function o(a,c,d){if(anObject$d$1(a),c=toPropertyKey$2$3(c),anObject$d$1(d),typeof a=="function"&&c==="prototype"&&"value"in d&&WRITABLE$3 in d&&!d[WRITABLE$3]){var tt=$getOwnPropertyDescriptor$4(a,c);tt&&tt[WRITABLE$3]&&(a[c]=d.value,d={configurable:CONFIGURABLE$1$3 in d?d[CONFIGURABLE$1$3]:tt[CONFIGURABLE$1$3],enumerable:ENUMERABLE$3 in d?d[ENUMERABLE$3]:tt[ENUMERABLE$3],writable:!1})}return $defineProperty$3(a,c,d)}:$defineProperty$3:function o(a,c,d){if(anObject$d$1(a),c=toPropertyKey$2$3(c),anObject$d$1(d),IE8_DOM_DEFINE$4)try{return $defineProperty$3(a,c,d)}catch{}if("get"in d||"set"in d)throw $TypeError$a$3("Accessors not supported");return"value"in d&&(a[c]=d.value),a};var DESCRIPTORS$9$3=descriptors$3,definePropertyModule$6$1=objectDefineProperty$3,createPropertyDescriptor$3$3=createPropertyDescriptor$5$1,createNonEnumerableProperty$8=DESCRIPTORS$9$3?function(o,a,c){return definePropertyModule$6$1.f(o,a,createPropertyDescriptor$3$3(1,c))}:function(o,a,c){return o[a]=c,o},makeBuiltIn$2$3={exports:{}},DESCRIPTORS$8$3=descriptors$3,hasOwn$9$3=hasOwnProperty_1$3,FunctionPrototype$1$3=Function.prototype,getDescriptor$3=DESCRIPTORS$8$3&&Object.getOwnPropertyDescriptor,EXISTS$4=hasOwn$9$3(FunctionPrototype$1$3,"name"),PROPER$3=EXISTS$4&&(function o(){}).name==="something",CONFIGURABLE$4=EXISTS$4&&(!DESCRIPTORS$8$3||DESCRIPTORS$8$3&&getDescriptor$3(FunctionPrototype$1$3,"name").configurable),functionName$3={EXISTS:EXISTS$4,PROPER:PROPER$3,CONFIGURABLE:CONFIGURABLE$4},uncurryThis$j$1=functionUncurryThis$3,isCallable$h$3=isCallable$n$1,store$1$3=sharedStore$3,functionToString$3=uncurryThis$j$1(Function.toString);isCallable$h$3(store$1$3.inspectSource)||(store$1$3.inspectSource=function(o){return functionToString$3(o)});var inspectSource$4$3=store$1$3.inspectSource,global$m$1=global$t,isCallable$g$3=isCallable$n$1,inspectSource$3$3=inspectSource$4$3,WeakMap$1$3=global$m$1.WeakMap,nativeWeakMap$3=isCallable$g$3(WeakMap$1$3)&&/native code/.test(inspectSource$3$3(WeakMap$1$3)),shared$2$3=shared$4$1.exports,uid$1$3=uid$3$1,keys$1$1=shared$2$3("keys"),sharedKey$3$3=function(o){return keys$1$1[o]||(keys$1$1[o]=uid$1$3(o))},hiddenKeys$4$3={},NATIVE_WEAK_MAP$3=nativeWeakMap$3,global$l$1=global$t,uncurryThis$i$1=functionUncurryThis$3,isObject$8$2=isObject$d,createNonEnumerableProperty$7$1=createNonEnumerableProperty$8,hasOwn$8$3=hasOwnProperty_1$3,shared$1$3=sharedStore$3,sharedKey$2$3=sharedKey$3$3,hiddenKeys$3$3=hiddenKeys$4$3,OBJECT_ALREADY_INITIALIZED$3="Object already initialized",TypeError$3$1=global$l$1.TypeError,WeakMap$5=global$l$1.WeakMap,set$2$1,get$1$1,has$4,enforce$3=function(o){return has$4(o)?get$1$1(o):set$2$1(o,{})},getterFor$3=function(o){return function(a){var c;if(!isObject$8$2(a)||(c=get$1$1(a)).type!==o)throw TypeError$3$1("Incompatible receiver, "+o+" required");return c}};if(NATIVE_WEAK_MAP$3||shared$1$3.state){var store$7=shared$1$3.state||(shared$1$3.state=new WeakMap$5),wmget$3=uncurryThis$i$1(store$7.get),wmhas$3=uncurryThis$i$1(store$7.has),wmset$3=uncurryThis$i$1(store$7.set);set$2$1=function(o,a){if(wmhas$3(store$7,o))throw new TypeError$3$1(OBJECT_ALREADY_INITIALIZED$3);return a.facade=o,wmset$3(store$7,o,a),a},get$1$1=function(o){return wmget$3(store$7,o)||{}},has$4=function(o){return wmhas$3(store$7,o)}}else{var STATE$3=sharedKey$2$3("state");hiddenKeys$3$3[STATE$3]=!0,set$2$1=function(o,a){if(hasOwn$8$3(o,STATE$3))throw new TypeError$3$1(OBJECT_ALREADY_INITIALIZED$3);return a.facade=o,createNonEnumerableProperty$7$1(o,STATE$3,a),a},get$1$1=function(o){return hasOwn$8$3(o,STATE$3)?o[STATE$3]:{}},has$4=function(o){return hasOwn$8$3(o,STATE$3)}}var internalState$3={set:set$2$1,get:get$1$1,has:has$4,enforce:enforce$3,getterFor:getterFor$3},fails$l$1=fails$s,isCallable$f$3=isCallable$n$1,hasOwn$7$3=hasOwnProperty_1$3,DESCRIPTORS$7$3=descriptors$3,CONFIGURABLE_FUNCTION_NAME$2$1=functionName$3.CONFIGURABLE,inspectSource$2$3=inspectSource$4$3,InternalStateModule$5$1=internalState$3,enforceInternalState$2$1=InternalStateModule$5$1.enforce,getInternalState$5$1=InternalStateModule$5$1.get,defineProperty$6$2=Object.defineProperty,CONFIGURABLE_LENGTH$3=DESCRIPTORS$7$3&&!fails$l$1(function(){return defineProperty$6$2(function(){},"length",{value:8}).length!==8}),TEMPLATE$3=String(String).split("String"),makeBuiltIn$1$3=makeBuiltIn$2$3.exports=function(o,a,c){String(a).slice(0,7)==="Symbol("&&(a="["+String(a).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),c&&c.getter&&(a="get "+a),c&&c.setter&&(a="set "+a),(!hasOwn$7$3(o,"name")||CONFIGURABLE_FUNCTION_NAME$2$1&&o.name!==a)&&(DESCRIPTORS$7$3?defineProperty$6$2(o,"name",{value:a,configurable:!0}):o.name=a),CONFIGURABLE_LENGTH$3&&c&&hasOwn$7$3(c,"arity")&&o.length!==c.arity&&defineProperty$6$2(o,"length",{value:c.arity});try{c&&hasOwn$7$3(c,"constructor")&&c.constructor?DESCRIPTORS$7$3&&defineProperty$6$2(o,"prototype",{writable:!1}):o.prototype&&(o.prototype=void 0)}catch{}var d=enforceInternalState$2$1(o);return hasOwn$7$3(d,"source")||(d.source=TEMPLATE$3.join(typeof a=="string"?a:"")),o};Function.prototype.toString=makeBuiltIn$1$3(function o(){return isCallable$f$3(this)&&getInternalState$5$1(this).source||inspectSource$2$3(this)},"toString");var isCallable$e$3=isCallable$n$1,definePropertyModule$5$2=objectDefineProperty$3,makeBuiltIn$6=makeBuiltIn$2$3.exports,defineGlobalProperty$1$3=defineGlobalProperty$3$3,defineBuiltIn$8$1=function(o,a,c,d){d||(d={});var tt=d.enumerable,nt=d.name!==void 0?d.name:a;if(isCallable$e$3(c)&&makeBuiltIn$6(c,nt,d),d.global)tt?o[a]=c:defineGlobalProperty$1$3(a,c);else{try{d.unsafe?o[a]&&(tt=!0):delete o[a]}catch{}tt?o[a]=c:definePropertyModule$5$2.f(o,a,{value:c,enumerable:!1,configurable:!d.nonConfigurable,writable:!d.nonWritable})}return o},objectGetOwnPropertyNames$3={},ceil$3=Math.ceil,floor$3$1=Math.floor,mathTrunc$3=Math.trunc||function o(a){var c=+a;return(c>0?floor$3$1:ceil$3)(c)},trunc$3=mathTrunc$3,toIntegerOrInfinity$6$1=function(o){var a=+o;return a!==a||a===0?0:trunc$3(a)},toIntegerOrInfinity$5$1=toIntegerOrInfinity$6$1,max$1$2=Math.max,min$2$2=Math.min,toAbsoluteIndex$4$1=function(o,a){var c=toIntegerOrInfinity$5$1(o);return c<0?max$1$2(c+a,0):min$2$2(c,a)},toIntegerOrInfinity$4$1=toIntegerOrInfinity$6$1,min$1$3=Math.min,toLength$6=function(o){return o>0?min$1$3(toIntegerOrInfinity$4$1(o),9007199254740991):0},toLength$5=toLength$6,lengthOfArrayLike$8=function(o){return toLength$5(o.length)},toIndexedObject$4$3=toIndexedObject$6$1,toAbsoluteIndex$3$1=toAbsoluteIndex$4$1,lengthOfArrayLike$7$1=lengthOfArrayLike$8,createMethod$4=function(o){return function(a,c,d){var tt=toIndexedObject$4$3(a),nt=lengthOfArrayLike$7$1(tt),$a=toAbsoluteIndex$3$1(d,nt),Ys;if(o&&c!=c){for(;nt>$a;)if(Ys=tt[$a++],Ys!=Ys)return!0}else for(;nt>$a;$a++)if((o||$a in tt)&&tt[$a]===c)return o||$a||0;return!o&&-1}},arrayIncludes$3={includes:createMethod$4(!0),indexOf:createMethod$4(!1)},uncurryThis$h$2=functionUncurryThis$3,hasOwn$6$3=hasOwnProperty_1$3,toIndexedObject$3$3=toIndexedObject$6$1,indexOf$1$1=arrayIncludes$3.indexOf,hiddenKeys$2$3=hiddenKeys$4$3,push$2$1=uncurryThis$h$2([].push),objectKeysInternal$3=function(o,a){var c=toIndexedObject$3$3(o),d=0,tt=[],nt;for(nt in c)!hasOwn$6$3(hiddenKeys$2$3,nt)&&hasOwn$6$3(c,nt)&&push$2$1(tt,nt);for(;a.length>d;)hasOwn$6$3(c,nt=a[d++])&&(~indexOf$1$1(tt,nt)||push$2$1(tt,nt));return tt},enumBugKeys$3$3=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],internalObjectKeys$1$3=objectKeysInternal$3,enumBugKeys$2$3=enumBugKeys$3$3,hiddenKeys$1$3=enumBugKeys$2$3.concat("length","prototype");objectGetOwnPropertyNames$3.f=Object.getOwnPropertyNames||function o(a){return internalObjectKeys$1$3(a,hiddenKeys$1$3)};var objectGetOwnPropertySymbols$3={};objectGetOwnPropertySymbols$3.f=Object.getOwnPropertySymbols;var getBuiltIn$5$3=getBuiltIn$8$3,uncurryThis$g$2=functionUncurryThis$3,getOwnPropertyNamesModule$3=objectGetOwnPropertyNames$3,getOwnPropertySymbolsModule$1$2=objectGetOwnPropertySymbols$3,anObject$c$3=anObject$e$1,concat$1$2=uncurryThis$g$2([].concat),ownKeys$1$3=getBuiltIn$5$3("Reflect","ownKeys")||function o(a){var c=getOwnPropertyNamesModule$3.f(anObject$c$3(a)),d=getOwnPropertySymbolsModule$1$2.f;return d?concat$1$2(c,d(a)):c},hasOwn$5$3=hasOwnProperty_1$3,ownKeys$5=ownKeys$1$3,getOwnPropertyDescriptorModule$1$1=objectGetOwnPropertyDescriptor$3,definePropertyModule$4$3=objectDefineProperty$3,copyConstructorProperties$1$3=function(o,a,c){for(var d=ownKeys$5(a),tt=definePropertyModule$4$3.f,nt=getOwnPropertyDescriptorModule$1$1.f,$a=0;$a=51&&/native code/.test(o))return!1;var c=new NativePromiseConstructor$3$3(function(nt){nt(1)}),d=function(nt){nt(function(){},function(){})},tt=c.constructor={};return tt[SPECIES$2$3]=d,SUBCLASSING$3=c.then(function(){})instanceof d,SUBCLASSING$3?!a&&IS_BROWSER$4&&!NATIVE_PROMISE_REJECTION_EVENT$1$3:!0}),promiseConstructorDetection$3={CONSTRUCTOR:FORCED_PROMISE_CONSTRUCTOR$5$3,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT$1$3,SUBCLASSING:SUBCLASSING$3},newPromiseCapability$2$3={},aCallable$6$3=aCallable$9$1,PromiseCapability$3=function(o){var a,c;this.promise=new o(function(d,tt){if(a!==void 0||c!==void 0)throw TypeError("Bad Promise constructor");a=d,c=tt}),this.resolve=aCallable$6$3(a),this.reject=aCallable$6$3(c)};newPromiseCapability$2$3.f=function(o){return new PromiseCapability$3(o)};var $$e$1=_export$3,IS_NODE$1$3=engineIsNode$3,global$c$3=global$t,call$f$2=functionCall$3,defineBuiltIn$6$3=defineBuiltIn$8$1,setPrototypeOf$5=objectSetPrototypeOf$3,setToStringTag$3$3=setToStringTag$4$1,setSpecies$1$3=setSpecies$2$1,aCallable$5$3=aCallable$9$1,isCallable$7$3=isCallable$n$1,isObject$7$3=isObject$d,anInstance$2$1=anInstance$3$1,speciesConstructor$2$1=speciesConstructor$3$1,task$4=task$1$3.set,microtask$4=microtask$1$3,hostReportErrors$4=hostReportErrors$1$3,perform$2$3=perform$3$3,Queue$4=queue$4,InternalStateModule$4$1=internalState$3,NativePromiseConstructor$2$3=promiseNativeConstructor$3,PromiseConstructorDetection$3=promiseConstructorDetection$3,newPromiseCapabilityModule$3$3=newPromiseCapability$2$3,PROMISE$3="Promise",FORCED_PROMISE_CONSTRUCTOR$4$3=PromiseConstructorDetection$3.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT$4=PromiseConstructorDetection$3.REJECTION_EVENT,NATIVE_PROMISE_SUBCLASSING$3=PromiseConstructorDetection$3.SUBCLASSING,getInternalPromiseState$3=InternalStateModule$4$1.getterFor(PROMISE$3),setInternalState$3$1=InternalStateModule$4$1.set,NativePromisePrototype$1$3=NativePromiseConstructor$2$3&&NativePromiseConstructor$2$3.prototype,PromiseConstructor$3=NativePromiseConstructor$2$3,PromisePrototype$3=NativePromisePrototype$1$3,TypeError$2$3=global$c$3.TypeError,document$1$3=global$c$3.document,process$6=global$c$3.process,newPromiseCapability$1$3=newPromiseCapabilityModule$3$3.f,newGenericPromiseCapability$3=newPromiseCapability$1$3,DISPATCH_EVENT$3=!!(document$1$3&&document$1$3.createEvent&&global$c$3.dispatchEvent),UNHANDLED_REJECTION$3="unhandledrejection",REJECTION_HANDLED$3="rejectionhandled",PENDING$3=0,FULFILLED$3=1,REJECTED$3=2,HANDLED$3=1,UNHANDLED$3=2,Internal$3,OwnPromiseCapability$3,PromiseWrapper$3,nativeThen$3,isThenable$3=function(o){var a;return isObject$7$3(o)&&isCallable$7$3(a=o.then)?a:!1},callReaction$3=function(o,a){var c=a.value,d=a.state==FULFILLED$3,tt=d?o.ok:o.fail,nt=o.resolve,$a=o.reject,Ys=o.domain,gu,xu,$u;try{tt?(d||(a.rejection===UNHANDLED$3&&onHandleUnhandled$3(a),a.rejection=HANDLED$3),tt===!0?gu=c:(Ys&&Ys.enter(),gu=tt(c),Ys&&(Ys.exit(),$u=!0)),gu===o.promise?$a(TypeError$2$3("Promise-chain cycle")):(xu=isThenable$3(gu))?call$f$2(xu,gu,nt,$a):nt(gu)):$a(c)}catch(Iu){Ys&&!$u&&Ys.exit(),$a(Iu)}},notify$4=function(o,a){o.notified||(o.notified=!0,microtask$4(function(){for(var c=o.reactions,d;d=c.get();)callReaction$3(d,o);o.notified=!1,a&&!o.rejection&&onUnhandled$3(o)}))},dispatchEvent$3=function(o,a,c){var d,tt;DISPATCH_EVENT$3?(d=document$1$3.createEvent("Event"),d.promise=a,d.reason=c,d.initEvent(o,!1,!0),global$c$3.dispatchEvent(d)):d={promise:a,reason:c},!NATIVE_PROMISE_REJECTION_EVENT$4&&(tt=global$c$3["on"+o])?tt(d):o===UNHANDLED_REJECTION$3&&hostReportErrors$4("Unhandled promise rejection",c)},onUnhandled$3=function(o){call$f$2(task$4,global$c$3,function(){var a=o.facade,c=o.value,d=isUnhandled$3(o),tt;if(d&&(tt=perform$2$3(function(){IS_NODE$1$3?process$6.emit("unhandledRejection",c,a):dispatchEvent$3(UNHANDLED_REJECTION$3,a,c)}),o.rejection=IS_NODE$1$3||isUnhandled$3(o)?UNHANDLED$3:HANDLED$3,tt.error))throw tt.value})},isUnhandled$3=function(o){return o.rejection!==HANDLED$3&&!o.parent},onHandleUnhandled$3=function(o){call$f$2(task$4,global$c$3,function(){var a=o.facade;IS_NODE$1$3?process$6.emit("rejectionHandled",a):dispatchEvent$3(REJECTION_HANDLED$3,a,o.value)})},bind$3$3=function(o,a,c){return function(d){o(a,d,c)}},internalReject$3=function(o,a,c){o.done||(o.done=!0,c&&(o=c),o.value=a,o.state=REJECTED$3,notify$4(o,!0))},internalResolve$3=function(o,a,c){if(!o.done){o.done=!0,c&&(o=c);try{if(o.facade===a)throw TypeError$2$3("Promise can't be resolved itself");var d=isThenable$3(a);d?microtask$4(function(){var tt={done:!1};try{call$f$2(d,a,bind$3$3(internalResolve$3,tt,o),bind$3$3(internalReject$3,tt,o))}catch(nt){internalReject$3(tt,nt,o)}}):(o.value=a,o.state=FULFILLED$3,notify$4(o,!1))}catch(tt){internalReject$3({done:!1},tt,o)}}};if(FORCED_PROMISE_CONSTRUCTOR$4$3&&(PromiseConstructor$3=function(a){anInstance$2$1(this,PromisePrototype$3),aCallable$5$3(a),call$f$2(Internal$3,this);var c=getInternalPromiseState$3(this);try{a(bind$3$3(internalResolve$3,c),bind$3$3(internalReject$3,c))}catch(d){internalReject$3(c,d)}},PromisePrototype$3=PromiseConstructor$3.prototype,Internal$3=function(a){setInternalState$3$1(this,{type:PROMISE$3,done:!1,notified:!1,parent:!1,reactions:new Queue$4,rejection:!1,state:PENDING$3,value:void 0})},Internal$3.prototype=defineBuiltIn$6$3(PromisePrototype$3,"then",function(a,c){var d=getInternalPromiseState$3(this),tt=newPromiseCapability$1$3(speciesConstructor$2$1(this,PromiseConstructor$3));return d.parent=!0,tt.ok=isCallable$7$3(a)?a:!0,tt.fail=isCallable$7$3(c)&&c,tt.domain=IS_NODE$1$3?process$6.domain:void 0,d.state==PENDING$3?d.reactions.add(tt):microtask$4(function(){callReaction$3(tt,d)}),tt.promise}),OwnPromiseCapability$3=function(){var o=new Internal$3,a=getInternalPromiseState$3(o);this.promise=o,this.resolve=bind$3$3(internalResolve$3,a),this.reject=bind$3$3(internalReject$3,a)},newPromiseCapabilityModule$3$3.f=newPromiseCapability$1$3=function(o){return o===PromiseConstructor$3||o===PromiseWrapper$3?new OwnPromiseCapability$3(o):newGenericPromiseCapability$3(o)},isCallable$7$3(NativePromiseConstructor$2$3)&&NativePromisePrototype$1$3!==Object.prototype)){nativeThen$3=NativePromisePrototype$1$3.then,NATIVE_PROMISE_SUBCLASSING$3||defineBuiltIn$6$3(NativePromisePrototype$1$3,"then",function(a,c){var d=this;return new PromiseConstructor$3(function(tt,nt){call$f$2(nativeThen$3,d,tt,nt)}).then(a,c)},{unsafe:!0});try{delete NativePromisePrototype$1$3.constructor}catch{}setPrototypeOf$5&&setPrototypeOf$5(NativePromisePrototype$1$3,PromisePrototype$3)}$$e$1({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR$4$3},{Promise:PromiseConstructor$3});setToStringTag$3$3(PromiseConstructor$3,PROMISE$3,!1);setSpecies$1$3(PROMISE$3);var iterators$3={},wellKnownSymbol$b$3=wellKnownSymbol$j$1,Iterators$4$3=iterators$3,ITERATOR$5$3=wellKnownSymbol$b$3("iterator"),ArrayPrototype$1$3=Array.prototype,isArrayIteratorMethod$2$1=function(o){return o!==void 0&&(Iterators$4$3.Array===o||ArrayPrototype$1$3[ITERATOR$5$3]===o)},classof$7$1=classof$9$1,getMethod$2$3=getMethod$4$1,Iterators$3$3=iterators$3,wellKnownSymbol$a$3=wellKnownSymbol$j$1,ITERATOR$4$3=wellKnownSymbol$a$3("iterator"),getIteratorMethod$3$1=function(o){if(o!=null)return getMethod$2$3(o,ITERATOR$4$3)||getMethod$2$3(o,"@@iterator")||Iterators$3$3[classof$7$1(o)]},call$e$3=functionCall$3,aCallable$4$3=aCallable$9$1,anObject$9$3=anObject$e$1,tryToString$2$3=tryToString$5$1,getIteratorMethod$2$3=getIteratorMethod$3$1,$TypeError$5$3=TypeError,getIterator$2$1=function(o,a){var c=arguments.length<2?getIteratorMethod$2$3(o):a;if(aCallable$4$3(c))return anObject$9$3(call$e$3(c,o));throw $TypeError$5$3(tryToString$2$3(o)+" is not iterable")},call$d$3=functionCall$3,anObject$8$3=anObject$e$1,getMethod$1$3=getMethod$4$1,iteratorClose$1$3=function(o,a,c){var d,tt;anObject$8$3(o);try{if(d=getMethod$1$3(o,"return"),!d){if(a==="throw")throw c;return c}d=call$d$3(d,o)}catch(nt){tt=!0,d=nt}if(a==="throw")throw c;if(tt)throw d;return anObject$8$3(d),c},bind$2$3=functionBindContext$3,call$c$3=functionCall$3,anObject$7$3=anObject$e$1,tryToString$1$3=tryToString$5$1,isArrayIteratorMethod$1$3=isArrayIteratorMethod$2$1,lengthOfArrayLike$6$1=lengthOfArrayLike$8,isPrototypeOf$2$3=objectIsPrototypeOf$3,getIterator$1$3=getIterator$2$1,getIteratorMethod$1$3=getIteratorMethod$3$1,iteratorClose$5=iteratorClose$1$3,$TypeError$4$3=TypeError,Result$3=function(o,a){this.stopped=o,this.result=a},ResultPrototype$3=Result$3.prototype,iterate$2$3=function(o,a,c){var d=c&&c.that,tt=!!(c&&c.AS_ENTRIES),nt=!!(c&&c.IS_ITERATOR),$a=!!(c&&c.INTERRUPTED),Ys=bind$2$3(a,d),gu,xu,$u,Iu,Xu,i0,p0,w0=function($0){return gu&&iteratorClose$5(gu,"normal",$0),new Result$3(!0,$0)},A0=function($0){return tt?(anObject$7$3($0),$a?Ys($0[0],$0[1],w0):Ys($0[0],$0[1])):$a?Ys($0,w0):Ys($0)};if(nt)gu=o;else{if(xu=getIteratorMethod$1$3(o),!xu)throw $TypeError$4$3(tryToString$1$3(o)+" is not iterable");if(isArrayIteratorMethod$1$3(xu)){for($u=0,Iu=lengthOfArrayLike$6$1(o);Iu>$u;$u++)if(Xu=A0(o[$u]),Xu&&isPrototypeOf$2$3(ResultPrototype$3,Xu))return Xu;return new Result$3(!1)}gu=getIterator$1$3(o,xu)}for(i0=gu.next;!(p0=call$c$3(i0,gu)).done;){try{Xu=A0(p0.value)}catch($0){iteratorClose$5(gu,"throw",$0)}if(typeof Xu=="object"&&Xu&&isPrototypeOf$2$3(ResultPrototype$3,Xu))return Xu}return new Result$3(!1)},wellKnownSymbol$9$3=wellKnownSymbol$j$1,ITERATOR$3$3=wellKnownSymbol$9$3("iterator"),SAFE_CLOSING$3=!1;try{var called$3=0,iteratorWithReturn$3={next:function(){return{done:!!called$3++}},return:function(){SAFE_CLOSING$3=!0}};iteratorWithReturn$3[ITERATOR$3$3]=function(){return this},Array.from(iteratorWithReturn$3,function(){throw 2})}catch(o){}var checkCorrectnessOfIteration$2$1=function(o,a){if(!a&&!SAFE_CLOSING$3)return!1;var c=!1;try{var d={};d[ITERATOR$3$3]=function(){return{next:function(){return{done:c=!0}}}},o(d)}catch{}return c},NativePromiseConstructor$1$3=promiseNativeConstructor$3,checkCorrectnessOfIteration$1$3=checkCorrectnessOfIteration$2$1,FORCED_PROMISE_CONSTRUCTOR$3$3=promiseConstructorDetection$3.CONSTRUCTOR,promiseStaticsIncorrectIteration$3=FORCED_PROMISE_CONSTRUCTOR$3$3||!checkCorrectnessOfIteration$1$3(function(o){NativePromiseConstructor$1$3.all(o).then(void 0,function(){})}),$$d$1=_export$3,call$b$3=functionCall$3,aCallable$3$3=aCallable$9$1,newPromiseCapabilityModule$2$3=newPromiseCapability$2$3,perform$1$3=perform$3$3,iterate$1$3=iterate$2$3,PROMISE_STATICS_INCORRECT_ITERATION$1$3=promiseStaticsIncorrectIteration$3;$$d$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$1$3},{all:function o(a){var c=this,d=newPromiseCapabilityModule$2$3.f(c),tt=d.resolve,nt=d.reject,$a=perform$1$3(function(){var Ys=aCallable$3$3(c.resolve),gu=[],xu=0,$u=1;iterate$1$3(a,function(Iu){var Xu=xu++,i0=!1;$u++,call$b$3(Ys,c,Iu).then(function(p0){i0||(i0=!0,gu[Xu]=p0,--$u||tt(gu))},nt)}),--$u||tt(gu)});return $a.error&&nt($a.value),d.promise}});var $$c$1=_export$3,FORCED_PROMISE_CONSTRUCTOR$2$3=promiseConstructorDetection$3.CONSTRUCTOR,NativePromiseConstructor$6=promiseNativeConstructor$3,getBuiltIn$1$3=getBuiltIn$8$3,isCallable$6$3=isCallable$n$1,defineBuiltIn$5$3=defineBuiltIn$8$1,NativePromisePrototype$4=NativePromiseConstructor$6&&NativePromiseConstructor$6.prototype;$$c$1({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR$2$3,real:!0},{catch:function(o){return this.then(void 0,o)}});if(isCallable$6$3(NativePromiseConstructor$6)){var method$3=getBuiltIn$1$3("Promise").prototype.catch;NativePromisePrototype$4.catch!==method$3&&defineBuiltIn$5$3(NativePromisePrototype$4,"catch",method$3,{unsafe:!0})}var $$b$1=_export$3,call$a$3=functionCall$3,aCallable$2$3=aCallable$9$1,newPromiseCapabilityModule$1$3=newPromiseCapability$2$3,perform$6=perform$3$3,iterate$5=iterate$2$3,PROMISE_STATICS_INCORRECT_ITERATION$4=promiseStaticsIncorrectIteration$3;$$b$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$4},{race:function o(a){var c=this,d=newPromiseCapabilityModule$1$3.f(c),tt=d.reject,nt=perform$6(function(){var $a=aCallable$2$3(c.resolve);iterate$5(a,function(Ys){call$a$3($a,c,Ys).then(d.resolve,tt)})});return nt.error&&tt(nt.value),d.promise}});var $$a$2=_export$3,call$9$3=functionCall$3,newPromiseCapabilityModule$6=newPromiseCapability$2$3,FORCED_PROMISE_CONSTRUCTOR$1$3=promiseConstructorDetection$3.CONSTRUCTOR;$$a$2({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$1$3},{reject:function o(a){var c=newPromiseCapabilityModule$6.f(this);return call$9$3(c.reject,void 0,a),c.promise}});var anObject$6$3=anObject$e$1,isObject$6$3=isObject$d,newPromiseCapability$5=newPromiseCapability$2$3,promiseResolve$1$3=function(o,a){if(anObject$6$3(o),isObject$6$3(a)&&a.constructor===o)return a;var c=newPromiseCapability$5.f(o),d=c.resolve;return d(a),c.promise},$$9$2=_export$3,getBuiltIn$b=getBuiltIn$8$3,FORCED_PROMISE_CONSTRUCTOR$8=promiseConstructorDetection$3.CONSTRUCTOR,promiseResolve$4=promiseResolve$1$3;getBuiltIn$b("Promise");$$9$2({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$8},{resolve:function o(a){return promiseResolve$4(this,a)}});class WebStorageService{getItem(a){return new Promise(c=>{const d=localStorage.getItem(a);c(d)})}setItem(a,c){return new Promise(d=>{localStorage.setItem(a,c),d()})}removeItem(a){return new Promise(c=>{localStorage.removeItem(a),c()})}}var objectDefineProperties$3={},internalObjectKeys$4=objectKeysInternal$3,enumBugKeys$1$3=enumBugKeys$3$3,objectKeys$2$2=Object.keys||function o(a){return internalObjectKeys$4(a,enumBugKeys$1$3)},DESCRIPTORS$5$3=descriptors$3,V8_PROTOTYPE_DEFINE_BUG$4=v8PrototypeDefineBug$3,definePropertyModule$2$3=objectDefineProperty$3,anObject$5$3=anObject$e$1,toIndexedObject$2$3=toIndexedObject$6$1,objectKeys$1$3=objectKeys$2$2;objectDefineProperties$3.f=DESCRIPTORS$5$3&&!V8_PROTOTYPE_DEFINE_BUG$4?Object.defineProperties:function o(a,c){anObject$5$3(a);for(var d=toIndexedObject$2$3(c),tt=objectKeys$1$3(c),nt=tt.length,$a=0,Ys;nt>$a;)definePropertyModule$2$3.f(a,Ys=tt[$a++],d[Ys]);return a};var anObject$4$3=anObject$e$1,definePropertiesModule$3=objectDefineProperties$3,enumBugKeys$6=enumBugKeys$3$3,hiddenKeys$7=hiddenKeys$4$3,html$5=html$2$3,documentCreateElement$1$3=documentCreateElement$2$3,sharedKey$1$3=sharedKey$3$3,GT$3=">",LT$3="<",PROTOTYPE$1$1="prototype",SCRIPT$3="script",IE_PROTO$1$3=sharedKey$1$3("IE_PROTO"),EmptyConstructor$3=function(){},scriptTag$3=function(o){return LT$3+SCRIPT$3+GT$3+o+LT$3+"/"+SCRIPT$3+GT$3},NullProtoObjectViaActiveX$3=function(o){o.write(scriptTag$3("")),o.close();var a=o.parentWindow.Object;return o=null,a},NullProtoObjectViaIFrame$3=function(){var o=documentCreateElement$1$3("iframe"),a="java"+SCRIPT$3+":",c;return o.style.display="none",html$5.appendChild(o),o.src=String(a),c=o.contentWindow.document,c.open(),c.write(scriptTag$3("document.F=Object")),c.close(),c.F},activeXDocument$3,NullProtoObject$3=function(){try{activeXDocument$3=new ActiveXObject("htmlfile")}catch{}NullProtoObject$3=typeof document<"u"?document.domain&&activeXDocument$3?NullProtoObjectViaActiveX$3(activeXDocument$3):NullProtoObjectViaIFrame$3():NullProtoObjectViaActiveX$3(activeXDocument$3);for(var o=enumBugKeys$6.length;o--;)delete NullProtoObject$3[PROTOTYPE$1$1][enumBugKeys$6[o]];return NullProtoObject$3()};hiddenKeys$7[IE_PROTO$1$3]=!0;var objectCreate$3=Object.create||function o(a,c){var d;return a!==null?(EmptyConstructor$3[PROTOTYPE$1$1]=anObject$4$3(a),d=new EmptyConstructor$3,EmptyConstructor$3[PROTOTYPE$1$1]=null,d[IE_PROTO$1$3]=a):d=NullProtoObject$3(),c===void 0?d:definePropertiesModule$3.f(d,c)},wellKnownSymbol$8$3=wellKnownSymbol$j$1,create$3$1=objectCreate$3,defineProperty$4$3=objectDefineProperty$3.f,UNSCOPABLES$3=wellKnownSymbol$8$3("unscopables"),ArrayPrototype$4=Array.prototype;ArrayPrototype$4[UNSCOPABLES$3]==null&&defineProperty$4$3(ArrayPrototype$4,UNSCOPABLES$3,{configurable:!0,value:create$3$1(null)});var addToUnscopables$2$1=function(o){ArrayPrototype$4[UNSCOPABLES$3][o]=!0},fails$h$2=fails$s,correctPrototypeGetter$3=!fails$h$2(function(){function o(){}return o.prototype.constructor=null,Object.getPrototypeOf(new o)!==o.prototype}),hasOwn$2$3=hasOwnProperty_1$3,isCallable$5$3=isCallable$n$1,toObject$5$2=toObject$7$1,sharedKey$6=sharedKey$3$3,CORRECT_PROTOTYPE_GETTER$3=correctPrototypeGetter$3,IE_PROTO$4=sharedKey$6("IE_PROTO"),$Object$7=Object,ObjectPrototype$2$1=$Object$7.prototype,objectGetPrototypeOf$3=CORRECT_PROTOTYPE_GETTER$3?$Object$7.getPrototypeOf:function(o){var a=toObject$5$2(o);if(hasOwn$2$3(a,IE_PROTO$4))return a[IE_PROTO$4];var c=a.constructor;return isCallable$5$3(c)&&a instanceof c?c.prototype:a instanceof $Object$7?ObjectPrototype$2$1:null},fails$g$2=fails$s,isCallable$4$3=isCallable$n$1,getPrototypeOf$3$1=objectGetPrototypeOf$3,defineBuiltIn$4$3=defineBuiltIn$8$1,wellKnownSymbol$7$3=wellKnownSymbol$j$1,ITERATOR$2$3=wellKnownSymbol$7$3("iterator"),BUGGY_SAFARI_ITERATORS$1$3=!1,IteratorPrototype$2$3,PrototypeOfArrayIteratorPrototype$3,arrayIterator$3;[].keys&&(arrayIterator$3=[].keys(),"next"in arrayIterator$3?(PrototypeOfArrayIteratorPrototype$3=getPrototypeOf$3$1(getPrototypeOf$3$1(arrayIterator$3)),PrototypeOfArrayIteratorPrototype$3!==Object.prototype&&(IteratorPrototype$2$3=PrototypeOfArrayIteratorPrototype$3)):BUGGY_SAFARI_ITERATORS$1$3=!0);var NEW_ITERATOR_PROTOTYPE$3=IteratorPrototype$2$3==null||fails$g$2(function(){var o={};return IteratorPrototype$2$3[ITERATOR$2$3].call(o)!==o});NEW_ITERATOR_PROTOTYPE$3&&(IteratorPrototype$2$3={});isCallable$4$3(IteratorPrototype$2$3[ITERATOR$2$3])||defineBuiltIn$4$3(IteratorPrototype$2$3,ITERATOR$2$3,function(){return this});var iteratorsCore$3={IteratorPrototype:IteratorPrototype$2$3,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS$1$3},IteratorPrototype$1$3=iteratorsCore$3.IteratorPrototype,create$2$1=objectCreate$3,createPropertyDescriptor$2$3=createPropertyDescriptor$5$1,setToStringTag$2$3=setToStringTag$4$1,Iterators$2$3=iterators$3,returnThis$1$3=function(){return this},createIteratorConstructor$1$3=function(o,a,c,d){var tt=a+" Iterator";return o.prototype=create$2$1(IteratorPrototype$1$3,{next:createPropertyDescriptor$2$3(+!d,c)}),setToStringTag$2$3(o,tt,!1),Iterators$2$3[tt]=returnThis$1$3,o},$$8$2=_export$3,call$8$3=functionCall$3,FunctionName$1$1=functionName$3,isCallable$3$3=isCallable$n$1,createIteratorConstructor$5=createIteratorConstructor$1$3,getPrototypeOf$2$1=objectGetPrototypeOf$3,setPrototypeOf$4=objectSetPrototypeOf$3,setToStringTag$1$3=setToStringTag$4$1,createNonEnumerableProperty$5$1=createNonEnumerableProperty$8,defineBuiltIn$3$3=defineBuiltIn$8$1,wellKnownSymbol$6$3=wellKnownSymbol$j$1,Iterators$1$3=iterators$3,IteratorsCore$3=iteratorsCore$3,PROPER_FUNCTION_NAME$2$1=FunctionName$1$1.PROPER,CONFIGURABLE_FUNCTION_NAME$1$3=FunctionName$1$1.CONFIGURABLE,IteratorPrototype$5=IteratorsCore$3.IteratorPrototype,BUGGY_SAFARI_ITERATORS$4=IteratorsCore$3.BUGGY_SAFARI_ITERATORS,ITERATOR$1$3=wellKnownSymbol$6$3("iterator"),KEYS$3="keys",VALUES$3="values",ENTRIES$3="entries",returnThis$4=function(){return this},defineIterator$1$3=function(o,a,c,d,tt,nt,$a){createIteratorConstructor$5(c,a,d);var Ys=function($0){if($0===tt&&Xu)return Xu;if(!BUGGY_SAFARI_ITERATORS$4&&$0 in $u)return $u[$0];switch($0){case KEYS$3:return function(){return new c(this,$0)};case VALUES$3:return function(){return new c(this,$0)};case ENTRIES$3:return function(){return new c(this,$0)}}return function(){return new c(this)}},gu=a+" Iterator",xu=!1,$u=o.prototype,Iu=$u[ITERATOR$1$3]||$u["@@iterator"]||tt&&$u[tt],Xu=!BUGGY_SAFARI_ITERATORS$4&&Iu||Ys(tt),i0=a=="Array"&&$u.entries||Iu,p0,w0,A0;if(i0&&(p0=getPrototypeOf$2$1(i0.call(new o)),p0!==Object.prototype&&p0.next&&(getPrototypeOf$2$1(p0)!==IteratorPrototype$5&&(setPrototypeOf$4?setPrototypeOf$4(p0,IteratorPrototype$5):isCallable$3$3(p0[ITERATOR$1$3])||defineBuiltIn$3$3(p0,ITERATOR$1$3,returnThis$4)),setToStringTag$1$3(p0,gu,!0))),PROPER_FUNCTION_NAME$2$1&&tt==VALUES$3&&Iu&&Iu.name!==VALUES$3&&(CONFIGURABLE_FUNCTION_NAME$1$3?createNonEnumerableProperty$5$1($u,"name",VALUES$3):(xu=!0,Xu=function(){return call$8$3(Iu,this)})),tt)if(w0={values:Ys(VALUES$3),keys:nt?Xu:Ys(KEYS$3),entries:Ys(ENTRIES$3)},$a)for(A0 in w0)(BUGGY_SAFARI_ITERATORS$4||xu||!(A0 in $u))&&defineBuiltIn$3$3($u,A0,w0[A0]);else $$8$2({target:a,proto:!0,forced:BUGGY_SAFARI_ITERATORS$4||xu},w0);return $u[ITERATOR$1$3]!==Xu&&defineBuiltIn$3$3($u,ITERATOR$1$3,Xu,{name:tt}),Iterators$1$3[a]=Xu,w0},toIndexedObject$1$3=toIndexedObject$6$1,addToUnscopables$1$3=addToUnscopables$2$1,Iterators$7=iterators$3,InternalStateModule$3$1=internalState$3,defineProperty$3$3=objectDefineProperty$3.f,defineIterator$5=defineIterator$1$3,DESCRIPTORS$4$3=descriptors$3,ARRAY_ITERATOR$3="Array Iterator",setInternalState$2$1=InternalStateModule$3$1.set,getInternalState$4$1=InternalStateModule$3$1.getterFor(ARRAY_ITERATOR$3),es_array_iterator$3=defineIterator$5(Array,"Array",function(o,a){setInternalState$2$1(this,{type:ARRAY_ITERATOR$3,target:toIndexedObject$1$3(o),index:0,kind:a})},function(){var o=getInternalState$4$1(this),a=o.target,c=o.kind,d=o.index++;return!a||d>=a.length?(o.target=void 0,{value:void 0,done:!0}):c=="keys"?{value:d,done:!1}:c=="values"?{value:a[d],done:!1}:{value:[d,a[d]],done:!1}},"values"),values$3=Iterators$7.Arguments=Iterators$7.Array;addToUnscopables$1$3("keys");addToUnscopables$1$3("values");addToUnscopables$1$3("entries");if(DESCRIPTORS$4$3&&values$3.name!=="values")try{defineProperty$3$3(values$3,"name",{value:"values"})}catch(o){}var domIterables$3={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},documentCreateElement$5=documentCreateElement$2$3,classList$3=documentCreateElement$5("span").classList,DOMTokenListPrototype$1$3=classList$3&&classList$3.constructor&&classList$3.constructor.prototype,domTokenListPrototype$3=DOMTokenListPrototype$1$3===Object.prototype?void 0:DOMTokenListPrototype$1$3,global$b$3=global$t,DOMIterables$3=domIterables$3,DOMTokenListPrototype$4=domTokenListPrototype$3,ArrayIteratorMethods$3=es_array_iterator$3,createNonEnumerableProperty$4$3=createNonEnumerableProperty$8,wellKnownSymbol$5$3=wellKnownSymbol$j$1,ITERATOR$a=wellKnownSymbol$5$3("iterator"),TO_STRING_TAG$1$3=wellKnownSymbol$5$3("toStringTag"),ArrayValues$3=ArrayIteratorMethods$3.values,handlePrototype$3=function(o,a){if(o){if(o[ITERATOR$a]!==ArrayValues$3)try{createNonEnumerableProperty$4$3(o,ITERATOR$a,ArrayValues$3)}catch{o[ITERATOR$a]=ArrayValues$3}if(o[TO_STRING_TAG$1$3]||createNonEnumerableProperty$4$3(o,TO_STRING_TAG$1$3,a),DOMIterables$3[a]){for(var c in ArrayIteratorMethods$3)if(o[c]!==ArrayIteratorMethods$3[c])try{createNonEnumerableProperty$4$3(o,c,ArrayIteratorMethods$3[c])}catch{o[c]=ArrayIteratorMethods$3[c]}}}};for(var COLLECTION_NAME$3 in DOMIterables$3)handlePrototype$3(global$b$3[COLLECTION_NAME$3]&&global$b$3[COLLECTION_NAME$3].prototype,COLLECTION_NAME$3);handlePrototype$3(DOMTokenListPrototype$4,"DOMTokenList");let Logger$1=class Ove{constructor(a){this.namespace=a}emit(a,...c){if(Ove.debug){if(this.namespace&&a!=="error"){console[a](this.namespace,...c);return}console[a](...c)}}log(...a){this.emit("log",...a)}info(...a){this.emit("info",...a)}warn(...a){this.emit("warn",...a)}error(...a){this.emit("error",...a)}};Logger$1.debug=!1;const logger=new Logger$1;var $$7$2=_export$3,$includes$1=arrayIncludes$3.includes,fails$f$2=fails$s,addToUnscopables$5=addToUnscopables$2$1,BROKEN_ON_SPARSE$1=fails$f$2(function(){return!Array(1).includes()});$$7$2({target:"Array",proto:!0,forced:BROKEN_ON_SPARSE$1},{includes:function o(a){return $includes$1(this,a,arguments.length>1?arguments[1]:void 0)}});addToUnscopables$5("includes");var isObject$5$3=isObject$d,classof$6$2=classofRaw$1$3,wellKnownSymbol$4$3=wellKnownSymbol$j$1,MATCH$1$1=wellKnownSymbol$4$3("match"),isRegexp$1=function(o){var a;return isObject$5$3(o)&&((a=o[MATCH$1$1])!==void 0?!!a:classof$6$2(o)=="RegExp")},isRegExp$1=isRegexp$1,$TypeError$3$3=TypeError,notARegexp$1=function(o){if(isRegExp$1(o))throw $TypeError$3$3("The method doesn't accept regular expressions");return o},classof$5$3=classof$9$1,$String$6=String,toString$5$2=function(o){if(classof$5$3(o)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return $String$6(o)},wellKnownSymbol$3$3=wellKnownSymbol$j$1,MATCH$3=wellKnownSymbol$3$3("match"),correctIsRegexpLogic$1=function(o){var a=/./;try{"/./"[o](a)}catch{try{return a[MATCH$3]=!1,"/./"[o](a)}catch{}}return!1},$$6$3=_export$3,uncurryThis$b$3=functionUncurryThis$3,notARegExp$1=notARegexp$1,requireObjectCoercible$3$2=requireObjectCoercible$6$1,toString$4$2=toString$5$2,correctIsRegExpLogic$1=correctIsRegexpLogic$1,stringIndexOf$2=uncurryThis$b$3("".indexOf);$$6$3({target:"String",proto:!0,forced:!correctIsRegExpLogic$1("includes")},{includes:function o(a){return!!~stringIndexOf$2(toString$4$2(requireObjectCoercible$3$2(this)),toString$4$2(notARegExp$1(a)),arguments.length>1?arguments[1]:void 0)}});var whitespaces$2=` -\v\f\r                 \u2028\u2029\uFEFF`,uncurryThis$a$3=functionUncurryThis$3,requireObjectCoercible$2$3=requireObjectCoercible$6$1,toString$3$2=toString$5$2,whitespaces$1=whitespaces$2,replace$1$1=uncurryThis$a$3("".replace),whitespace="["+whitespaces$1+"]",ltrim=RegExp("^"+whitespace+whitespace+"*"),rtrim=RegExp(whitespace+whitespace+"*$"),createMethod$3$1=function(o){return function(a){var c=toString$3$2(requireObjectCoercible$2$3(a));return o&1&&(c=replace$1$1(c,ltrim,"")),o&2&&(c=replace$1$1(c,rtrim,"")),c}},stringTrim={start:createMethod$3$1(1),end:createMethod$3$1(2),trim:createMethod$3$1(3)},PROPER_FUNCTION_NAME$1$3=functionName$3.PROPER,fails$e$2=fails$s,whitespaces=whitespaces$2,non="​…᠎",stringTrimForced=function(o){return fails$e$2(function(){return!!whitespaces[o]()||non[o]()!==non||PROPER_FUNCTION_NAME$1$3&&whitespaces[o].name!==o})},$$5$3=_export$3,$trim=stringTrim.trim,forcedStringTrimMethod=stringTrimForced;$$5$3({target:"String",proto:!0,forced:forcedStringTrimMethod("trim")},{trim:function o(){return $trim(this)}});var DESCRIPTORS$3$3=descriptors$3,uncurryThis$9$3=functionUncurryThis$3,call$7$3=functionCall$3,fails$d$3=fails$s,objectKeys$5=objectKeys$2$2,getOwnPropertySymbolsModule$4=objectGetOwnPropertySymbols$3,propertyIsEnumerableModule$4=objectPropertyIsEnumerable$3,toObject$4$2=toObject$7$1,IndexedObject$2$1=indexedObject$3,$assign$2=Object.assign,defineProperty$2$3=Object.defineProperty,concat$5=uncurryThis$9$3([].concat),objectAssign$2=!$assign$2||fails$d$3(function(){if(DESCRIPTORS$3$3&&$assign$2({b:1},$assign$2(defineProperty$2$3({},"a",{enumerable:!0,get:function(){defineProperty$2$3(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var o={},a={},c=Symbol(),d="abcdefghijklmnopqrst";return o[c]=7,d.split("").forEach(function(tt){a[tt]=tt}),$assign$2({},o)[c]!=7||objectKeys$5($assign$2({},a)).join("")!=d})?function o(a,c){for(var d=toObject$4$2(a),tt=arguments.length,nt=1,$a=getOwnPropertySymbolsModule$4.f,Ys=propertyIsEnumerableModule$4.f;tt>nt;)for(var gu=IndexedObject$2$1(arguments[nt++]),xu=$a?concat$5(objectKeys$5(gu),$a(gu)):objectKeys$5(gu),$u=xu.length,Iu=0,Xu;$u>Iu;)Xu=xu[Iu++],(!DESCRIPTORS$3$3||call$7$3(Ys,gu,Xu))&&(d[Xu]=gu[Xu]);return d}:$assign$2,$$4$3=_export$3,assign$3=objectAssign$2;$$4$3({target:"Object",stat:!0,arity:2,forced:Object.assign!==assign$3},{assign:assign$3});class EventEmitter{constructor(){this.emitter=new eventsExports.EventEmitter}on(a,c){return this.emitter.on(a,c),{remove:()=>this.emitter.off(a,c)}}off(a,c){this.emitter.off(a,c)}emit(a,c){this.emitter.emit(a,c)}}const PACKAGE_NAME="near-wallet-selector",RECENTLY_SIGNED_IN_WALLETS="recentlySignedInWallets",CONTRACT="contract",PENDING_CONTRACT="contract:pending",SELECTED_WALLET_ID="selectedWalletId",PENDING_SELECTED_WALLET_ID="selectedWalletId:pending";class WalletModules{constructor({factories:a,storage:c,options:d,store:tt,emitter:nt,provider:$a}){this.factories=a,this.storage=c,this.options=d,this.store=tt,this.emitter=nt,this.provider=$a,this.modules=[],this.instances={}}validateWallet(a){return __awaiter$2(this,void 0,void 0,function*(){let c=[];const d=yield this.getWallet(a);return d&&(c=yield d.getAccounts().catch(tt=>(logger.log(`Failed to validate ${d.id} during setup`),logger.error(tt),[]))),c})}resolveStorageState(){return __awaiter$2(this,void 0,void 0,function*(){const a=new JsonStorage(this.storage,PACKAGE_NAME),c=yield a.getItem(PENDING_SELECTED_WALLET_ID),d=yield a.getItem(PENDING_CONTRACT);if(c&&d){const gu=yield this.validateWallet(c);if(yield a.removeItem(PENDING_SELECTED_WALLET_ID),yield a.removeItem(PENDING_CONTRACT),gu.length){const{selectedWalletId:xu}=this.store.getState(),$u=yield this.getWallet(xu);$u&&c!==xu&&(yield $u.signOut().catch(Xu=>{logger.log("Failed to sign out existing wallet"),logger.error(Xu)}));const Iu=yield this.setWalletAsRecentlySignedIn(c);return{accounts:gu,contract:d,selectedWalletId:c,recentlySignedInWallets:Iu}}}const{contract:tt,selectedWalletId:nt}=this.store.getState(),$a=yield this.validateWallet(nt),Ys=yield a.getItem(RECENTLY_SIGNED_IN_WALLETS);return $a.length?{accounts:$a,contract:tt,selectedWalletId:nt,recentlySignedInWallets:Ys||[]}:{accounts:[],contract:null,selectedWalletId:null,recentlySignedInWallets:Ys||[]}})}setWalletAsRecentlySignedIn(a){return __awaiter$2(this,void 0,void 0,function*(){const c=new JsonStorage(this.storage,PACKAGE_NAME);let d=yield c.getItem(RECENTLY_SIGNED_IN_WALLETS);return d||(d=[]),d.includes(a)||(d.unshift(a),d=d.slice(0,5),yield c.setItem(RECENTLY_SIGNED_IN_WALLETS,d)),d})}signOutWallet(a){return __awaiter$2(this,void 0,void 0,function*(){const c=yield this.getWallet(a);yield c.signOut().catch(d=>{logger.log(`Failed to sign out ${c.id}`),logger.error(d),this.onWalletSignedOut(c.id)})})}onWalletSignedIn(a,{accounts:c,contractId:d,methodNames:tt}){return __awaiter$2(this,void 0,void 0,function*(){const{selectedWalletId:nt}=this.store.getState(),$a=new JsonStorage(this.storage,PACKAGE_NAME),Ys={contractId:d,methodNames:tt};if(!c.length){this.getModule(a).type==="browser"&&(yield $a.setItem(PENDING_SELECTED_WALLET_ID,a),yield $a.setItem(PENDING_CONTRACT,Ys));return}nt&&nt!==a&&(yield this.signOutWallet(nt));const gu=yield this.setWalletAsRecentlySignedIn(a);this.store.dispatch({type:"WALLET_CONNECTED",payload:{walletId:a,contract:Ys,accounts:c,recentlySignedInWallets:gu}}),this.emitter.emit("signedIn",{walletId:a,contractId:d,methodNames:tt,accounts:c})})}onWalletSignedOut(a){this.store.dispatch({type:"WALLET_DISCONNECTED",payload:{walletId:a}}),this.emitter.emit("signedOut",{walletId:a})}setupWalletEmitter(a){const c=new EventEmitter;return c.on("signedOut",()=>{this.onWalletSignedOut(a.id)}),c.on("signedIn",d=>{this.onWalletSignedIn(a.id,d)}),c.on("accountsChanged",({accounts:d})=>__awaiter$2(this,void 0,void 0,function*(){if(this.emitter.emit("accountsChanged",{walletId:a.id,accounts:d}),!d.length)return this.signOutWallet(a.id);this.store.dispatch({type:"ACCOUNTS_CHANGED",payload:{walletId:a.id,accounts:d}})})),c.on("networkChanged",({networkId:d})=>{this.emitter.emit("networkChanged",{walletId:a.id,networkId:d})}),c.on("uriChanged",({uri:d})=>{this.emitter.emit("uriChanged",{walletId:a.id,uri:d})}),c}validateSignMessageParams({message:a,nonce:c,recipient:d}){if(!a||a.trim()==="")throw new Error("Invalid message. It must be a non-empty string.");if(!Buffer$C.isBuffer(c)||c.length!==32)throw new Error("Invalid nonce. It must be a Buffer with a length of 32 bytes.");if(!d||d.trim()==="")throw new Error("Invalid recipient. It must be a non-empty string.")}decorateWallet(a){const c=a.signIn,d=a.signOut,tt=a.signMessage;return a.signIn=nt=>__awaiter$2(this,void 0,void 0,function*(){const $a=yield c(nt),{contractId:Ys,methodNames:gu=[]}=nt;return yield this.onWalletSignedIn(a.id,{accounts:$a,contractId:Ys,methodNames:gu}),$a}),a.signOut=()=>__awaiter$2(this,void 0,void 0,function*(){yield d(),this.onWalletSignedOut(a.id)}),a.signMessage=nt=>__awaiter$2(this,void 0,void 0,function*(){if(tt===void 0)throw Error(`The signMessage method is not supported by ${a.metadata.name}`);return this.validateSignMessageParams(nt),yield tt(nt)}),a}setupInstance(a){return __awaiter$2(this,void 0,void 0,function*(){if(!a.metadata.available){const d=a.type==="injected"?"not installed":"not available";throw Error(`${a.metadata.name} is ${d}`)}const c=Object.assign({id:a.id,type:a.type,metadata:a.metadata},yield a.init({id:a.id,type:a.type,metadata:a.metadata,options:this.options,store:this.store.toReadOnly(),provider:this.provider,emitter:this.setupWalletEmitter(a),logger:new Logger$1(a.id),storage:new JsonStorage(this.storage,[PACKAGE_NAME,a.id])}));return this.decorateWallet(c)})}getModule(a){return this.modules.find(c=>c.id===a)}getWallet(a){return __awaiter$2(this,void 0,void 0,function*(){const c=this.getModule(a);if(!c)return null;const{selectedWalletId:d}=this.store.getState();return!c.metadata.available&&d?(this.onWalletSignedOut(d),null):yield c.wallet()})}setup(){return __awaiter$2(this,void 0,void 0,function*(){const a=[];for(let $a=0;$a(logger.log("Failed to setup module"),logger.error(gu),null));Ys&&(a.some(gu=>gu.id===Ys.id)||a.push({id:Ys.id,type:Ys.type,metadata:Ys.metadata,wallet:()=>__awaiter$2(this,void 0,void 0,function*(){let gu=this.instances[Ys.id];return gu||(gu=yield this.setupInstance(Ys),this.instances[Ys.id]=gu,gu)})}))}this.modules=a;const{accounts:c,contract:d,selectedWalletId:tt,recentlySignedInWallets:nt}=yield this.resolveStorageState();this.store.dispatch({type:"SETUP_WALLET_MODULES",payload:{modules:a,accounts:c,contract:d,selectedWalletId:tt,recentlySignedInWallets:nt}});for(let $a=0;$a{switch(o){case"mainnet":return{networkId:o,nodeUrl:"https://rpc.mainnet.near.org",helperUrl:"https://helper.mainnet.near.org",explorerUrl:"https://nearblocks.io",indexerUrl:"https://api.kitwallet.app"};case"testnet":return{networkId:o,nodeUrl:"https://rpc.testnet.near.org",helperUrl:"https://helper.testnet.near.org",explorerUrl:"https://testnet.nearblocks.io",indexerUrl:"https://testnet-api.kitwallet.app"};default:throw Error(`Failed to find config for: '${o}'`)}},resolveNetwork=o=>typeof o=="string"?getNetworkPreset(o):o,resolveOptions=o=>({options:{languageCode:o.languageCode||void 0,network:resolveNetwork(o.network),debug:o.debug||!1,optimizeWalletOrder:o.optimizeWalletOrder!==!1,randomizeWalletOrder:o.randomizeWalletOrder||!1,relayerUrl:o.relayerUrl||void 0},storage:o.storage||new WebStorageService}),reducer=(o,a)=>{switch(logger.log("Store Action",a),a.type){case"SETUP_WALLET_MODULES":{const{modules:c,accounts:d,contract:tt,selectedWalletId:nt,recentlySignedInWallets:$a}=a.payload,Ys=d.map((gu,xu)=>Object.assign(Object.assign({},gu),{active:xu===0}));return Object.assign(Object.assign({},o),{modules:c,accounts:Ys,contract:tt,selectedWalletId:nt,recentlySignedInWallets:$a})}case"WALLET_CONNECTED":{const{walletId:c,contract:d,accounts:tt,recentlySignedInWallets:nt}=a.payload;if(!tt.length)return o;const $a=o.accounts.findIndex(gu=>gu.active),Ys=tt.map((gu,xu)=>Object.assign(Object.assign({},gu),{active:xu===($a>-1?$a:0)}));return Object.assign(Object.assign({},o),{contract:d,accounts:Ys,selectedWalletId:c,recentlySignedInWallets:nt})}case"WALLET_DISCONNECTED":{const{walletId:c}=a.payload;return c!==o.selectedWalletId?o:Object.assign(Object.assign({},o),{contract:null,accounts:[],selectedWalletId:null})}case"ACCOUNTS_CHANGED":{const{walletId:c,accounts:d}=a.payload;if(c!==o.selectedWalletId)return o;const tt=o.accounts.find(Ys=>Ys.active),nt=!d.some(Ys=>Ys.accountId===(tt==null?void 0:tt.accountId)),$a=d.map((Ys,gu)=>Object.assign(Object.assign({},Ys),{active:nt?gu===0:Ys.accountId===(tt==null?void 0:tt.accountId)}));return Object.assign(Object.assign({},o),{accounts:$a})}case"SET_ACTIVE_ACCOUNT":{const{accountId:c}=a.payload,d=o.accounts.map(tt=>Object.assign(Object.assign({},tt),{active:tt.accountId===c}));return Object.assign(Object.assign({},o),{accounts:d})}default:return o}},createStore=o=>__awaiter$2(void 0,void 0,void 0,function*(){const a=new JsonStorage(o,PACKAGE_NAME),c={modules:[],accounts:[],contract:yield a.getItem(CONTRACT),selectedWalletId:yield a.getItem(SELECTED_WALLET_ID),recentlySignedInWallets:(yield a.getItem(RECENTLY_SIGNED_IN_WALLETS))||[]},d=new BehaviorSubject(c),tt=new Subject;tt.pipe(scan(reducer,c)).subscribe(d);const nt=(Ys,gu,xu,$u)=>__awaiter$2(void 0,void 0,void 0,function*(){if(gu[$u]!==Ys[$u]){if(gu[$u]){yield a.setItem(xu,gu[$u]);return}yield a.removeItem(xu)}});let $a=d.getValue();return d.subscribe(Ys=>{nt($a,Ys,SELECTED_WALLET_ID,"selectedWalletId"),nt($a,Ys,CONTRACT,"contract"),nt($a,Ys,RECENTLY_SIGNED_IN_WALLETS,"recentlySignedInWallets"),$a=Ys}),{observable:d,getState:()=>d.getValue(),dispatch:Ys=>tt.next(Ys),toReadOnly:()=>({getState:()=>d.getValue(),observable:d.asObservable()})}});let walletSelectorInstance=null;const createSelector=(o,a,c,d)=>({options:o,store:a.toReadOnly(),wallet:tt=>__awaiter$2(void 0,void 0,void 0,function*(){const{selectedWalletId:nt}=a.getState(),$a=yield c.getWallet(tt||nt);if(!$a)throw tt?new Error("Invalid wallet id"):new Error("No wallet selected");return $a}),setActiveAccount:tt=>{const{accounts:nt}=a.getState();if(!nt.some($a=>$a.accountId===tt))throw new Error("Invalid account id");a.dispatch({type:"SET_ACTIVE_ACCOUNT",payload:{accountId:tt}})},isSignedIn(){const{accounts:tt}=a.getState();return!!tt.length},on:(tt,nt)=>d.on(tt,nt),off:(tt,nt)=>{d.off(tt,nt)}}),setupWalletSelector=o=>__awaiter$2(void 0,void 0,void 0,function*(){const{options:a,storage:c}=resolveOptions(o);Logger$1.debug=a.debug;const d=new EventEmitter,tt=yield createStore(c),nt=new WalletModules({factories:o.modules,storage:c,options:a,store:tt,emitter:d,provider:new Provider(a.network.nodeUrl)});return yield nt.setup(),o.allowMultipleSelectors?createSelector(a,tt,nt,d):(walletSelectorInstance||(walletSelectorInstance=createSelector(a,tt,nt,d)),walletSelectorInstance)});var aCallable$1$3=aCallable$9$1,toObject$3$2=toObject$7$1,IndexedObject$1$2=indexedObject$3,lengthOfArrayLike$5$1=lengthOfArrayLike$8,$TypeError$2$3=TypeError,createMethod$2$1=function(o){return function(a,c,d,tt){aCallable$1$3(c);var nt=toObject$3$2(a),$a=IndexedObject$1$2(nt),Ys=lengthOfArrayLike$5$1(nt),gu=o?Ys-1:0,xu=o?-1:1;if(d<2)for(;;){if(gu in $a){tt=$a[gu],gu+=xu;break}if(gu+=xu,o?gu<0:Ys<=gu)throw $TypeError$2$3("Reduce of empty array with no initial value")}for(;o?gu>=0:Ys>gu;gu+=xu)gu in $a&&(tt=c(tt,$a[gu],gu,nt));return tt}},arrayReduce$1={left:createMethod$2$1(!1),right:createMethod$2$1(!0)},fails$c$3=fails$s,arrayMethodIsStrict$1$1=function(o,a){var c=[][o];return!!c&&fails$c$3(function(){c.call(null,a||function(){return 1},1)})},$$3$3=_export$3,$reduce$1=arrayReduce$1.left,arrayMethodIsStrict$3=arrayMethodIsStrict$1$1,CHROME_VERSION$1=engineV8Version$3,IS_NODE$6=engineIsNode$3,STRICT_METHOD$2=arrayMethodIsStrict$3("reduce"),CHROME_BUG$1=!IS_NODE$6&&CHROME_VERSION$1>79&&CHROME_VERSION$1<83;$$3$3({target:"Array",proto:!0,forced:!STRICT_METHOD$2||CHROME_BUG$1},{reduce:function o(a){var c=arguments.length;return $reduce$1(this,a,c,c>1?arguments[1]:void 0)}});var anObject$3$3=anObject$e$1,regexpFlags$1$1=function(){var o=anObject$3$3(this),a="";return o.hasIndices&&(a+="d"),o.global&&(a+="g"),o.ignoreCase&&(a+="i"),o.multiline&&(a+="m"),o.dotAll&&(a+="s"),o.unicode&&(a+="u"),o.unicodeSets&&(a+="v"),o.sticky&&(a+="y"),a},fails$b$3=fails$s,global$a$3=global$t,$RegExp$2$1=global$a$3.RegExp,UNSUPPORTED_Y$2=fails$b$3(function(){var o=$RegExp$2$1("a","y");return o.lastIndex=2,o.exec("abcd")!=null}),MISSED_STICKY$1=UNSUPPORTED_Y$2||fails$b$3(function(){return!$RegExp$2$1("a","y").sticky}),BROKEN_CARET$1=UNSUPPORTED_Y$2||fails$b$3(function(){var o=$RegExp$2$1("^r","gy");return o.lastIndex=2,o.exec("str")!=null}),regexpStickyHelpers$1={BROKEN_CARET:BROKEN_CARET$1,MISSED_STICKY:MISSED_STICKY$1,UNSUPPORTED_Y:UNSUPPORTED_Y$2},fails$a$3=fails$s,global$9$3=global$t,$RegExp$1$1=global$9$3.RegExp,regexpUnsupportedDotAll$1=fails$a$3(function(){var o=$RegExp$1$1(".","s");return!(o.dotAll&&o.exec(` -`)&&o.flags==="s")}),fails$9$3=fails$s,global$8$3=global$t,$RegExp$3=global$8$3.RegExp,regexpUnsupportedNcg$1=fails$9$3(function(){var o=$RegExp$3("(?b)","g");return o.exec("b").groups.a!=="b"||"b".replace(o,"$c")!=="bc"}),call$6$3=functionCall$3,uncurryThis$8$3=functionUncurryThis$3,toString$2$4=toString$5$2,regexpFlags$4=regexpFlags$1$1,stickyHelpers$1=regexpStickyHelpers$1,shared$7=shared$4$1.exports,create$1$3=objectCreate$3,getInternalState$3$1=internalState$3.get,UNSUPPORTED_DOT_ALL$1=regexpUnsupportedDotAll$1,UNSUPPORTED_NCG$1=regexpUnsupportedNcg$1,nativeReplace$1=shared$7("native-string-replace",String.prototype.replace),nativeExec$1=RegExp.prototype.exec,patchedExec$1=nativeExec$1,charAt$2$1=uncurryThis$8$3("".charAt),indexOf$4=uncurryThis$8$3("".indexOf),replace$6=uncurryThis$8$3("".replace),stringSlice$2$1=uncurryThis$8$3("".slice),UPDATES_LAST_INDEX_WRONG$1=function(){var o=/a/,a=/b*/g;return call$6$3(nativeExec$1,o,"a"),call$6$3(nativeExec$1,a,"a"),o.lastIndex!==0||a.lastIndex!==0}(),UNSUPPORTED_Y$1$1=stickyHelpers$1.BROKEN_CARET,NPCG_INCLUDED$1=/()??/.exec("")[1]!==void 0,PATCH$1=UPDATES_LAST_INDEX_WRONG$1||NPCG_INCLUDED$1||UNSUPPORTED_Y$1$1||UNSUPPORTED_DOT_ALL$1||UNSUPPORTED_NCG$1;PATCH$1&&(patchedExec$1=function(a){var c=this,d=getInternalState$3$1(c),tt=toString$2$4(a),nt=d.raw,$a,Ys,gu,xu,$u,Iu,Xu;if(nt)return nt.lastIndex=c.lastIndex,$a=call$6$3(patchedExec$1,nt,tt),c.lastIndex=nt.lastIndex,$a;var i0=d.groups,p0=UNSUPPORTED_Y$1$1&&c.sticky,w0=call$6$3(regexpFlags$4,c),A0=c.source,$0=0,O0=tt;if(p0&&(w0=replace$6(w0,"y",""),indexOf$4(w0,"g")===-1&&(w0+="g"),O0=stringSlice$2$1(tt,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&charAt$2$1(tt,c.lastIndex-1)!==` -`)&&(A0="(?: "+A0+")",O0=" "+O0,$0++),Ys=new RegExp("^(?:"+A0+")",w0)),NPCG_INCLUDED$1&&(Ys=new RegExp("^"+A0+"$(?!\\s)",w0)),UPDATES_LAST_INDEX_WRONG$1&&(gu=c.lastIndex),xu=call$6$3(nativeExec$1,p0?Ys:c,O0),p0?xu?(xu.input=stringSlice$2$1(xu.input,$0),xu[0]=stringSlice$2$1(xu[0],$0),xu.index=c.lastIndex,c.lastIndex+=xu[0].length):c.lastIndex=0:UPDATES_LAST_INDEX_WRONG$1&&xu&&(c.lastIndex=c.global?xu.index+xu[0].length:gu),NPCG_INCLUDED$1&&xu&&xu.length>1&&call$6$3(nativeReplace$1,xu[0],Ys,function(){for($u=1;$u1?arguments[1]:void 0,$a=nt!==void 0,Ys=getIteratorMethod$7(d),gu,xu,$u,Iu,Xu,i0;if(Ys&&!isArrayIteratorMethod$5(Ys))for(Xu=getIterator$6(d,Ys),i0=Xu.next,d=[];!(Iu=call$5$3(i0,Xu)).done;)d.push(Iu.value);for($a&&tt>2&&(nt=bind$1$3(nt,arguments[2])),xu=lengthOfArrayLike$4$2(d),$u=new(aTypedArrayConstructor$1(c))(xu),gu=0;xu>gu;gu++)$u[gu]=$a?nt(d[gu],gu):d[gu];return $u},TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1=typedArrayConstructorsRequireWrappers,exportTypedArrayStaticMethod=arrayBufferViewCore.exportTypedArrayStaticMethod,typedArrayFrom$1=typedArrayFrom$2;exportTypedArrayStaticMethod("from",typedArrayFrom$1,TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1);var defineBuiltIn$1$3=defineBuiltIn$8$1,defineBuiltIns$1$1=function(o,a,c){for(var d in a)defineBuiltIn$1$3(o,d,a[d],c);return o},toIntegerOrInfinity$3$1=toIntegerOrInfinity$6$1,toLength$4$1=toLength$6,$RangeError$2=RangeError,toIndex$2=function(o){if(o===void 0)return 0;var a=toIntegerOrInfinity$3$1(o),c=toLength$4$1(a);if(a!==c)throw $RangeError$2("Wrong length or index");return c},$Array$2$1=Array,abs=Math.abs,pow$2=Math.pow,floor$2$2=Math.floor,log=Math.log,LN2=Math.LN2,pack=function(o,a,c){var d=$Array$2$1(c),tt=c*8-a-1,nt=(1<>1,Ys=a===23?pow$2(2,-24)-pow$2(2,-77):0,gu=o<0||o===0&&1/o<0?1:0,xu=0,$u,Iu,Xu;for(o=abs(o),o!=o||o===1/0?(Iu=o!=o?1:0,$u=nt):($u=floor$2$2(log(o)/LN2),Xu=pow$2(2,-$u),o*Xu<1&&($u--,Xu*=2),$u+$a>=1?o+=Ys/Xu:o+=Ys*pow$2(2,1-$a),o*Xu>=2&&($u++,Xu/=2),$u+$a>=nt?(Iu=0,$u=nt):$u+$a>=1?(Iu=(o*Xu-1)*pow$2(2,a),$u=$u+$a):(Iu=o*pow$2(2,$a-1)*pow$2(2,a),$u=0));a>=8;)d[xu++]=Iu&255,Iu/=256,a-=8;for($u=$u<0;)d[xu++]=$u&255,$u/=256,tt-=8;return d[--xu]|=gu*128,d},unpack=function(o,a){var c=o.length,d=c*8-a-1,tt=(1<>1,$a=d-7,Ys=c-1,gu=o[Ys--],xu=gu&127,$u;for(gu>>=7;$a>0;)xu=xu*256+o[Ys--],$a-=8;for($u=xu&(1<<-$a)-1,xu>>=-$a,$a+=a;$a>0;)$u=$u*256+o[Ys--],$a-=8;if(xu===0)xu=1-nt;else{if(xu===tt)return $u?NaN:gu?-1/0:1/0;$u=$u+pow$2(2,a),xu=xu-nt}return(gu?-1:1)*$u*pow$2(2,xu-a)},ieee754={pack,unpack},toObject$1$3=toObject$7$1,toAbsoluteIndex$2$2=toAbsoluteIndex$4$1,lengthOfArrayLike$3$2=lengthOfArrayLike$8,arrayFill$1=function o(a){for(var c=toObject$1$3(this),d=lengthOfArrayLike$3$2(c),tt=arguments.length,nt=toAbsoluteIndex$2$2(tt>1?arguments[1]:void 0,d),$a=tt>2?arguments[2]:void 0,Ys=$a===void 0?d:toAbsoluteIndex$2$2($a,d);Ys>nt;)c[nt++]=a;return c},toPropertyKey$1$3=toPropertyKey$4$1,definePropertyModule$1$3=objectDefineProperty$3,createPropertyDescriptor$1$3=createPropertyDescriptor$5$1,createProperty$1$2=function(o,a,c){var d=toPropertyKey$1$3(a);d in o?definePropertyModule$1$3.f(o,d,createPropertyDescriptor$1$3(0,c)):o[d]=c},toAbsoluteIndex$1$3=toAbsoluteIndex$4$1,lengthOfArrayLike$2$3=lengthOfArrayLike$8,createProperty$4=createProperty$1$2,$Array$1$1=Array,max$5=Math.max,arraySliceSimple$2=function(o,a,c){for(var d=lengthOfArrayLike$2$3(o),tt=toAbsoluteIndex$1$3(a,d),nt=toAbsoluteIndex$1$3(c===void 0?d:c,d),$a=$Array$1$1(max$5(nt-tt,0)),Ys=0;tt>8&255]},packInt32=function(o){return[o&255,o>>8&255,o>>16&255,o>>24&255]},unpackInt32=function(o){return o[3]<<24|o[2]<<16|o[1]<<8|o[0]},packFloat32=function(o){return packIEEE754(o,23,4)},packFloat64=function(o){return packIEEE754(o,52,8)},addGetter$1=function(o,a){defineProperty$9(o[PROTOTYPE$3],a,{get:function(){return getInternalState$1$3(this)[a]}})},get$3=function(o,a,c,d){var tt=toIndex$1(c),nt=getInternalState$1$3(o);if(tt+a>nt.byteLength)throw RangeError$3(WRONG_INDEX);var $a=getInternalState$1$3(nt.buffer).bytes,Ys=tt+nt.byteOffset,gu=arraySlice$3$1($a,Ys,Ys+a);return d?gu:reverse(gu)},set$5=function(o,a,c,d,tt,nt){var $a=toIndex$1(c),Ys=getInternalState$1$3(o);if($a+a>Ys.byteLength)throw RangeError$3(WRONG_INDEX);for(var gu=getInternalState$1$3(Ys.buffer).bytes,xu=$a+Ys.byteOffset,$u=d(+tt),Iu=0;Iutt)throw RangeError$3("Wrong offset");if(d=d===void 0?tt-nt:toLength$3$1(d),nt+d>tt)throw RangeError$3(WRONG_LENGTH$1);setInternalState$1$3(this,{buffer:a,byteLength:d,byteOffset:nt}),DESCRIPTORS$1$3||(this.buffer=a,this.byteLength=d,this.byteOffset=nt)},DataViewPrototype$1=$DataView[PROTOTYPE$3],DESCRIPTORS$1$3&&(addGetter$1($ArrayBuffer,"byteLength"),addGetter$1($DataView,"buffer"),addGetter$1($DataView,"byteLength"),addGetter$1($DataView,"byteOffset")),defineBuiltIns$2(DataViewPrototype$1,{getInt8:function(a){return get$3(this,1,a)[0]<<24>>24},getUint8:function(a){return get$3(this,1,a)[0]},getInt16:function(a){var c=get$3(this,2,a,arguments.length>1?arguments[1]:void 0);return(c[1]<<8|c[0])<<16>>16},getUint16:function(a){var c=get$3(this,2,a,arguments.length>1?arguments[1]:void 0);return c[1]<<8|c[0]},getInt32:function(a){return unpackInt32(get$3(this,4,a,arguments.length>1?arguments[1]:void 0))},getUint32:function(a){return unpackInt32(get$3(this,4,a,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(a){return unpackIEEE754(get$3(this,4,a,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(a){return unpackIEEE754(get$3(this,8,a,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(a,c){set$5(this,1,a,packInt8,c)},setUint8:function(a,c){set$5(this,1,a,packInt8,c)},setInt16:function(a,c){set$5(this,2,a,packInt16,c,arguments.length>2?arguments[2]:void 0)},setUint16:function(a,c){set$5(this,2,a,packInt16,c,arguments.length>2?arguments[2]:void 0)},setInt32:function(a,c){set$5(this,4,a,packInt32,c,arguments.length>2?arguments[2]:void 0)},setUint32:function(a,c){set$5(this,4,a,packInt32,c,arguments.length>2?arguments[2]:void 0)},setFloat32:function(a,c){set$5(this,4,a,packFloat32,c,arguments.length>2?arguments[2]:void 0)},setFloat64:function(a,c){set$5(this,8,a,packFloat64,c,arguments.length>2?arguments[2]:void 0)}});else{var INCORRECT_ARRAY_BUFFER_NAME=PROPER_FUNCTION_NAME$4&&NativeArrayBuffer.name!==ARRAY_BUFFER;if(!fails$7$3(function(){NativeArrayBuffer(1)})||!fails$7$3(function(){new NativeArrayBuffer(-1)})||fails$7$3(function(){return new NativeArrayBuffer,new NativeArrayBuffer(1.5),new NativeArrayBuffer(NaN),INCORRECT_ARRAY_BUFFER_NAME&&!CONFIGURABLE_FUNCTION_NAME$4})){$ArrayBuffer=function(a){return anInstance$1$3(this,ArrayBufferPrototype$1),new NativeArrayBuffer(toIndex$1(a))},$ArrayBuffer[PROTOTYPE$3]=ArrayBufferPrototype$1;for(var keys$3=getOwnPropertyNames$1(NativeArrayBuffer),j$3=0,key;keys$3.length>j$3;)(key=keys$3[j$3++])in $ArrayBuffer||createNonEnumerableProperty$2$3($ArrayBuffer,key,NativeArrayBuffer[key]);ArrayBufferPrototype$1.constructor=$ArrayBuffer}else INCORRECT_ARRAY_BUFFER_NAME&&CONFIGURABLE_FUNCTION_NAME$4&&createNonEnumerableProperty$2$3(NativeArrayBuffer,"name",ARRAY_BUFFER);setPrototypeOf$2$1&&getPrototypeOf$4(DataViewPrototype$1)!==ObjectPrototype$3&&setPrototypeOf$2$1(DataViewPrototype$1,ObjectPrototype$3);var testView=new $DataView(new $ArrayBuffer(2)),$setInt8=uncurryThis$7$3(DataViewPrototype$1.setInt8);testView.setInt8(0,2147483648),testView.setInt8(1,2147483649),(testView.getInt8(0)||!testView.getInt8(1))&&defineBuiltIns$2(DataViewPrototype$1,{setInt8:function(a,c){$setInt8(this,a,c<<24>>24)},setUint8:function(a,c){$setInt8(this,a,c<<24>>24)}},{unsafe:!0})}setToStringTag$8($ArrayBuffer,ARRAY_BUFFER);setToStringTag$8($DataView,DATA_VIEW);var arrayBuffer={ArrayBuffer:$ArrayBuffer,DataView:$DataView},$$1$4=_export$3,uncurryThis$6$3=functionUncurryThis$3,fails$6$3=fails$s,ArrayBufferModule$1=arrayBuffer,anObject$2$3=anObject$e$1,toAbsoluteIndex$5=toAbsoluteIndex$4$1,toLength$2$1=toLength$6,speciesConstructor$1$3=speciesConstructor$3$1,ArrayBuffer$2=ArrayBufferModule$1.ArrayBuffer,DataView$2=ArrayBufferModule$1.DataView,DataViewPrototype=DataView$2.prototype,un$ArrayBufferSlice=uncurryThis$6$3(ArrayBuffer$2.prototype.slice),getUint8=uncurryThis$6$3(DataViewPrototype.getUint8),setUint8=uncurryThis$6$3(DataViewPrototype.setUint8),INCORRECT_SLICE=fails$6$3(function(){return!new ArrayBuffer$2(2).slice(1,void 0).byteLength});$$1$4({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:INCORRECT_SLICE},{slice:function o(a,c){if(un$ArrayBufferSlice&&c===void 0)return un$ArrayBufferSlice(anObject$2$3(this),a);for(var d=anObject$2$3(this).byteLength,tt=toAbsoluteIndex$5(a,d),nt=toAbsoluteIndex$5(c===void 0?d:c,d),$a=new(speciesConstructor$1$3(this,ArrayBuffer$2))(toLength$2$1(nt-tt)),Ys=new DataView$2(this),gu=new DataView$2($a),xu=0;ttA0;A0++)if((Ys||A0 in i0)&&(L0=i0[A0],q0=p0(L0,A0,Xu),o))if(a)O0[A0]=q0;else if(q0)switch(o){case 3:return!0;case 5:return L0;case 6:return A0;case 2:push$1$2(O0,L0)}else switch(o){case 4:return!1;case 7:push$1$2(O0,L0)}return nt?-1:d||tt?tt:O0}},arrayIteration={forEach:createMethod$1$2(0),map:createMethod$1$2(1),filter:createMethod$1$2(2),some:createMethod$1$2(3),every:createMethod$1$2(4),find:createMethod$1$2(5),findIndex:createMethod$1$2(6),filterReject:createMethod$1$2(7)},isCallable$1$3=isCallable$n$1,isObject$1$4=isObject$d,setPrototypeOf$1$3=objectSetPrototypeOf$3,inheritIfRequired$1=function(o,a,c){var d,tt;return setPrototypeOf$1$3&&isCallable$1$3(d=a.constructor)&&d!==c&&isObject$1$4(tt=d.prototype)&&tt!==c.prototype&&setPrototypeOf$1$3(o,tt),o},$$h=_export$3,global$4$3=global$t,call$4$3=functionCall$3,DESCRIPTORS$f=descriptors$3,TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS=typedArrayConstructorsRequireWrappers,ArrayBufferViewCore$4=arrayBufferViewCore,ArrayBufferModule=arrayBuffer,anInstance$6=anInstance$3$1,createPropertyDescriptor$8=createPropertyDescriptor$5$1,createNonEnumerableProperty$1$3=createNonEnumerableProperty$8,isIntegralNumber=isIntegralNumber$1,toLength$1$3=toLength$6,toIndex=toIndex$2,toOffset$1=toOffset$2,toPropertyKey$6=toPropertyKey$4$1,hasOwn$f=hasOwnProperty_1$3,classof$2$3=classof$9$1,isObject$e=isObject$d,isSymbol$5=isSymbol$3$1,create$6=objectCreate$3,isPrototypeOf$7=objectIsPrototypeOf$3,setPrototypeOf$6=objectSetPrototypeOf$3,getOwnPropertyNames=objectGetOwnPropertyNames$3.f,typedArrayFrom=typedArrayFrom$2,forEach=arrayIteration.forEach,setSpecies$4=setSpecies$2$1,definePropertyModule$8=objectDefineProperty$3,getOwnPropertyDescriptorModule$3=objectGetOwnPropertyDescriptor$3,InternalStateModule$8=internalState$3,inheritIfRequired=inheritIfRequired$1,getInternalState$6=InternalStateModule$8.get,setInternalState$7=InternalStateModule$8.set,enforceInternalState$3=InternalStateModule$8.enforce,nativeDefineProperty=definePropertyModule$8.f,nativeGetOwnPropertyDescriptor=getOwnPropertyDescriptorModule$3.f,round$1=Math.round,RangeError$2=global$4$3.RangeError,ArrayBuffer$1=ArrayBufferModule.ArrayBuffer,ArrayBufferPrototype=ArrayBuffer$1.prototype,DataView$1=ArrayBufferModule.DataView,NATIVE_ARRAY_BUFFER_VIEWS=ArrayBufferViewCore$4.NATIVE_ARRAY_BUFFER_VIEWS,TYPED_ARRAY_TAG=ArrayBufferViewCore$4.TYPED_ARRAY_TAG,TypedArray=ArrayBufferViewCore$4.TypedArray,TypedArrayPrototype=ArrayBufferViewCore$4.TypedArrayPrototype,aTypedArrayConstructor=ArrayBufferViewCore$4.aTypedArrayConstructor,isTypedArray=ArrayBufferViewCore$4.isTypedArray,BYTES_PER_ELEMENT="BYTES_PER_ELEMENT",WRONG_LENGTH="Wrong length",fromList=function(o,a){aTypedArrayConstructor(o);for(var c=0,d=a.length,tt=new o(d);d>c;)tt[c]=a[c++];return tt},addGetter=function(o,a){nativeDefineProperty(o,a,{get:function(){return getInternalState$6(this)[a]}})},isArrayBuffer=function(o){var a;return isPrototypeOf$7(ArrayBufferPrototype,o)||(a=classof$2$3(o))=="ArrayBuffer"||a=="SharedArrayBuffer"},isTypedArrayIndex=function(o,a){return isTypedArray(o)&&!isSymbol$5(a)&&a in o&&isIntegralNumber(+a)&&a>=0},wrappedGetOwnPropertyDescriptor=function o(a,c){return c=toPropertyKey$6(c),isTypedArrayIndex(a,c)?createPropertyDescriptor$8(2,a[c]):nativeGetOwnPropertyDescriptor(a,c)},wrappedDefineProperty=function o(a,c,d){return c=toPropertyKey$6(c),isTypedArrayIndex(a,c)&&isObject$e(d)&&hasOwn$f(d,"value")&&!hasOwn$f(d,"get")&&!hasOwn$f(d,"set")&&!d.configurable&&(!hasOwn$f(d,"writable")||d.writable)&&(!hasOwn$f(d,"enumerable")||d.enumerable)?(a[c]=d.value,a):nativeDefineProperty(a,c,d)};DESCRIPTORS$f?(NATIVE_ARRAY_BUFFER_VIEWS||(getOwnPropertyDescriptorModule$3.f=wrappedGetOwnPropertyDescriptor,definePropertyModule$8.f=wrappedDefineProperty,addGetter(TypedArrayPrototype,"buffer"),addGetter(TypedArrayPrototype,"byteOffset"),addGetter(TypedArrayPrototype,"byteLength"),addGetter(TypedArrayPrototype,"length")),$$h({target:"Object",stat:!0,forced:!NATIVE_ARRAY_BUFFER_VIEWS},{getOwnPropertyDescriptor:wrappedGetOwnPropertyDescriptor,defineProperty:wrappedDefineProperty}),typedArrayConstructor.exports=function(o,a,c){var d=o.match(/\d+$/)[0]/8,tt=o+(c?"Clamped":"")+"Array",nt="get"+o,$a="set"+o,Ys=global$4$3[tt],gu=Ys,xu=gu&&gu.prototype,$u={},Iu=function(w0,A0){var $0=getInternalState$6(w0);return $0.view[nt](A0*d+$0.byteOffset,!0)},Xu=function(w0,A0,$0){var O0=getInternalState$6(w0);c&&($0=($0=round$1($0))<0?0:$0>255?255:$0&255),O0.view[$a](A0*d+O0.byteOffset,$0,!0)},i0=function(w0,A0){nativeDefineProperty(w0,A0,{get:function(){return Iu(this,A0)},set:function($0){return Xu(this,A0,$0)},enumerable:!0})};NATIVE_ARRAY_BUFFER_VIEWS?TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS&&(gu=a(function(w0,A0,$0,O0){return anInstance$6(w0,xu),inheritIfRequired(function(){return isObject$e(A0)?isArrayBuffer(A0)?O0!==void 0?new Ys(A0,toOffset$1($0,d),O0):$0!==void 0?new Ys(A0,toOffset$1($0,d)):new Ys(A0):isTypedArray(A0)?fromList(gu,A0):call$4$3(typedArrayFrom,gu,A0):new Ys(toIndex(A0))}(),w0,gu)}),setPrototypeOf$6&&setPrototypeOf$6(gu,TypedArray),forEach(getOwnPropertyNames(Ys),function(w0){w0 in gu||createNonEnumerableProperty$1$3(gu,w0,Ys[w0])}),gu.prototype=xu):(gu=a(function(w0,A0,$0,O0){anInstance$6(w0,xu);var L0=0,q0=0,F0,u1,g1;if(!isObject$e(A0))g1=toIndex(A0),u1=g1*d,F0=new ArrayBuffer$1(u1);else if(isArrayBuffer(A0)){F0=A0,q0=toOffset$1($0,d);var E1=A0.byteLength;if(O0===void 0){if(E1%d||(u1=E1-q0,u1<0))throw RangeError$2(WRONG_LENGTH)}else if(u1=toLength$1$3(O0)*d,u1+q0>E1)throw RangeError$2(WRONG_LENGTH);g1=u1/d}else return isTypedArray(A0)?fromList(gu,A0):call$4$3(typedArrayFrom,gu,A0);for(setInternalState$7(w0,{buffer:F0,byteOffset:q0,byteLength:u1,length:g1,view:new DataView$1(F0)});L01?arguments[1]:void 0,c>2?arguments[2]:void 0)},CONVERSION_BUG);var global$3$3=global$t,call$2$3=functionCall$3,ArrayBufferViewCore$2=arrayBufferViewCore,lengthOfArrayLike$9=lengthOfArrayLike$8,toOffset=toOffset$2,toIndexedObject$8=toObject$7$1,fails$4$3=fails$s,RangeError$1=global$3$3.RangeError,Int8Array$2=global$3$3.Int8Array,Int8ArrayPrototype=Int8Array$2&&Int8Array$2.prototype,$set=Int8ArrayPrototype&&Int8ArrayPrototype.set,aTypedArray$2=ArrayBufferViewCore$2.aTypedArray,exportTypedArrayMethod$2=ArrayBufferViewCore$2.exportTypedArrayMethod,WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS=!fails$4$3(function(){var o=new Uint8ClampedArray(2);return call$2$3($set,o,{length:1,0:3},1),o[1]!==3}),TO_OBJECT_BUG=WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS&&ArrayBufferViewCore$2.NATIVE_ARRAY_BUFFER_VIEWS&&fails$4$3(function(){var o=new Int8Array$2(2);return o.set(1),o.set("2",1),o[0]!==0||o[1]!==2});exportTypedArrayMethod$2("set",function o(a){aTypedArray$2(this);var c=toOffset(arguments.length>1?arguments[1]:void 0,1),d=toIndexedObject$8(a);if(WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS)return call$2$3($set,this,d,c);var tt=this.length,nt=lengthOfArrayLike$9(d),$a=0;if(nt+c>tt)throw RangeError$1("Wrong length");for(;$a0;)o[nt]=o[--nt];nt!==d++&&(o[nt]=tt)}return o},merge$2=function(o,a,c,d){for(var tt=a.length,nt=c.length,$a=0,Ys=0;$a0&&1/c<0?1:-1:a>c}};exportTypedArrayMethod$1("sort",function o(a){return a!==void 0&&aCallable$c(a),STABLE_SORT$1?un$Sort$1(this,a):internalSort$1(aTypedArray$1(this),getSortCompare$1(a))},!STABLE_SORT$1||ACCEPT_INCORRECT_ARGUMENTS);var global$1$3=global$t,apply$1$3=functionApply$3,ArrayBufferViewCore=arrayBufferViewCore,fails$2$3=fails$s,arraySlice$1$3=arraySlice$5$1,Int8Array$1=global$1$3.Int8Array,aTypedArray=ArrayBufferViewCore.aTypedArray,exportTypedArrayMethod=ArrayBufferViewCore.exportTypedArrayMethod,$toLocaleString=[].toLocaleString,TO_LOCALE_STRING_BUG=!!Int8Array$1&&fails$2$3(function(){$toLocaleString.call(new Int8Array$1(1))}),FORCED$1=fails$2$3(function(){return[1,2].toLocaleString()!=new Int8Array$1([1,2]).toLocaleString()})||!fails$2$3(function(){Int8Array$1.prototype.toLocaleString.call([1,2])});exportTypedArrayMethod("toLocaleString",function o(){return apply$1$3($toLocaleString,TO_LOCALE_STRING_BUG?arraySlice$1$3(aTypedArray(this)):aTypedArray(this),arraySlice$1$3(arguments))},FORCED$1);class Payload{constructor(a){this.tag=2147484061,this.message=a.message,this.nonce=a.nonce,this.recipient=a.recipient,a.callbackUrl&&(this.callbackUrl=a.callbackUrl)}}const payloadSchema=new Map([[Payload,{kind:"struct",fields:[["tag","u32"],["message","string"],["nonce",[32]],["recipient","string"],["callbackUrl",{kind:"option",type:"string"}]]}]]),verifySignature=({publicKey:o,signature:a,message:c,nonce:d,recipient:tt,callbackUrl:nt})=>{const $a=new Payload({message:c,nonce:d,recipient:tt,callbackUrl:nt}),Ys=serialize_1(payloadSchema,$a),gu=Uint8Array.from(sha256Exports.sha256.array(Ys)),xu=Buffer$C.from(a,"base64");return browserIndex$2.utils.PublicKey.from(o).verify(gu,xu)},fetchAllUserKeys=({accountId:o,network:a,publicKey:c})=>__awaiter$2(void 0,void 0,void 0,function*(){return yield new browserIndex$2.providers.JsonRpcProvider({url:a.nodeUrl}).query({request_type:"view_access_key",account_id:o,finality:"final",public_key:c})}),verifyFullKeyBelongsToUser=({publicKey:o,accountId:a,network:c})=>__awaiter$2(void 0,void 0,void 0,function*(){const{permission:d}=yield fetchAllUserKeys({accountId:a,network:c,publicKey:o});return d==="FullAccess"});var uncurryThis$2$3=functionUncurryThis$3,defineBuiltIn$d=defineBuiltIn$8$1,regexpExec$2$1=regexpExec$3,fails$1$3=fails$s,wellKnownSymbol$l=wellKnownSymbol$j$1,createNonEnumerableProperty$9=createNonEnumerableProperty$8,SPECIES$6=wellKnownSymbol$l("species"),RegExpPrototype$5=RegExp.prototype,fixRegexpWellKnownSymbolLogic$1=function(o,a,c,d){var tt=wellKnownSymbol$l(o),nt=!fails$1$3(function(){var xu={};return xu[tt]=function(){return 7},""[o](xu)!=7}),$a=nt&&!fails$1$3(function(){var xu=!1,$u=/a/;return o==="split"&&($u={},$u.constructor={},$u.constructor[SPECIES$6]=function(){return $u},$u.flags="",$u[tt]=/./[tt]),$u.exec=function(){return xu=!0,null},$u[tt](""),!xu});if(!nt||!$a||c){var Ys=uncurryThis$2$3(/./[tt]),gu=a(tt,""[o],function(xu,$u,Iu,Xu,i0){var p0=uncurryThis$2$3(xu),w0=$u.exec;return w0===regexpExec$2$1||w0===RegExpPrototype$5.exec?nt&&!i0?{done:!0,value:Ys($u,Iu,Xu)}:{done:!0,value:p0(Iu,$u,Xu)}:{done:!1}});defineBuiltIn$d(String.prototype,o,gu[0]),defineBuiltIn$d(RegExpPrototype$5,tt,gu[1])}d&&createNonEnumerableProperty$9(RegExpPrototype$5[tt],"sham",!0)},uncurryThis$1$3=functionUncurryThis$3,toIntegerOrInfinity$7=toIntegerOrInfinity$6$1,toString$1$5=toString$5$2,requireObjectCoercible$1$3=requireObjectCoercible$6$1,charAt$1$1=uncurryThis$1$3("".charAt),charCodeAt$2=uncurryThis$1$3("".charCodeAt),stringSlice$1$2=uncurryThis$1$3("".slice),createMethod$5=function(o){return function(a,c){var d=toString$1$5(requireObjectCoercible$1$3(a)),tt=toIntegerOrInfinity$7(c),nt=d.length,$a,Ys;return tt<0||tt>=nt?o?"":void 0:($a=charCodeAt$2(d,tt),$a<55296||$a>56319||tt+1===nt||(Ys=charCodeAt$2(d,tt+1))<56320||Ys>57343?o?charAt$1$1(d,tt):$a:o?stringSlice$1$2(d,tt,tt+2):($a-55296<<10)+(Ys-56320)+65536)}},stringMultibyte$1={codeAt:createMethod$5(!1),charAt:createMethod$5(!0)},charAt$7=stringMultibyte$1.charAt,advanceStringIndex$1$1=function(o,a,c){return a+(c?charAt$7(o,a).length:1)},call$1$3=functionCall$3,anObject$1$3=anObject$e$1,isCallable$q=isCallable$n$1,classof$c=classofRaw$1$3,regexpExec$1$1=regexpExec$3,$TypeError$h=TypeError,regexpExecAbstract$1=function(o,a){var c=o.exec;if(isCallable$q(c)){var d=call$1$3(c,o,a);return d!==null&&anObject$1$3(d),d}if(classof$c(o)==="RegExp")return call$1$3(regexpExec$1$1,o,a);throw $TypeError$h("RegExp#exec called on incompatible receiver")},apply$5=functionApply$3,call$n=functionCall$3,uncurryThis$q=functionUncurryThis$3,fixRegExpWellKnownSymbolLogic$1=fixRegexpWellKnownSymbolLogic$1,isRegExp$2=isRegexp$1,anObject$j=anObject$e$1,requireObjectCoercible$7=requireObjectCoercible$6$1,speciesConstructor$4=speciesConstructor$3$1,advanceStringIndex$2=advanceStringIndex$1$1,toLength$7=toLength$6,toString$9=toString$5$2,getMethod$7=getMethod$4$1,arraySlice$6=arraySliceSimple$2,callRegExpExec=regexpExecAbstract$1,regexpExec$4=regexpExec$3,stickyHelpers$2=regexpStickyHelpers$1,fails$t=fails$s,UNSUPPORTED_Y$3=stickyHelpers$2.UNSUPPORTED_Y,MAX_UINT32=4294967295,min$5=Math.min,$push=[].push,exec$6=uncurryThis$q(/./.exec),push$7=uncurryThis$q($push),stringSlice$9=uncurryThis$q("".slice),SPLIT_WORKS_WITH_OVERWRITTEN_EXEC=!fails$t(function(){var o=/(?:)/,a=o.exec;o.exec=function(){return a.apply(this,arguments)};var c="ab".split(o);return c.length!==2||c[0]!=="a"||c[1]!=="b"});fixRegExpWellKnownSymbolLogic$1("split",function(o,a,c){var d;return"abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?d=function(tt,nt){var $a=toString$9(requireObjectCoercible$7(this)),Ys=nt===void 0?MAX_UINT32:nt>>>0;if(Ys===0)return[];if(tt===void 0)return[$a];if(!isRegExp$2(tt))return call$n(a,$a,tt,Ys);for(var gu=[],xu=(tt.ignoreCase?"i":"")+(tt.multiline?"m":"")+(tt.unicode?"u":"")+(tt.sticky?"y":""),$u=0,Iu=new RegExp(tt.source,xu+"g"),Xu,i0,p0;(Xu=call$n(regexpExec$4,Iu,$a))&&(i0=Iu.lastIndex,!(i0>$u&&(push$7(gu,stringSlice$9($a,$u,Xu.index)),Xu.length>1&&Xu.index<$a.length&&apply$5($push,gu,arraySlice$6(Xu,1)),p0=Xu[0].length,$u=i0,gu.length>=Ys)));)Iu.lastIndex===Xu.index&&Iu.lastIndex++;return $u===$a.length?(p0||!exec$6(Iu,""))&&push$7(gu,""):push$7(gu,stringSlice$9($a,$u)),gu.length>Ys?arraySlice$6(gu,0,Ys):gu}:"0".split(void 0,0).length?d=function(tt,nt){return tt===void 0&&nt===0?[]:call$n(a,this,tt,nt)}:d=a,[function(nt,$a){var Ys=requireObjectCoercible$7(this),gu=nt==null?void 0:getMethod$7(nt,o);return gu?call$n(gu,nt,Ys,$a):call$n(d,toString$9(Ys),nt,$a)},function(tt,nt){var $a=anObject$j(this),Ys=toString$9(tt),gu=c(d,$a,Ys,nt,d!==a);if(gu.done)return gu.value;var xu=speciesConstructor$4($a,RegExp),$u=$a.unicode,Iu=($a.ignoreCase?"i":"")+($a.multiline?"m":"")+($a.unicode?"u":"")+(UNSUPPORTED_Y$3?"g":"y"),Xu=new xu(UNSUPPORTED_Y$3?"^(?:"+$a.source+")":$a,Iu),i0=nt===void 0?MAX_UINT32:nt>>>0;if(i0===0)return[];if(Ys.length===0)return callRegExpExec(Xu,Ys)===null?[Ys]:[];for(var p0=0,w0=0,A0=[];w0{switch(o){case"en":return en$1;case"es":return es$1;case"zh":return zh$1;case"bg":return bg$1;case"ko":return ko$1;case"vi":return vi$1;case"hi":return hi$1;case"ar":return ar$1;case"hr":return hr$1;case"mk":return mk;case"sl":return sl$1;case"sr":return sr$1;default:return en$1}};let chosenLang;const allowOnlyLanguage=o=>{chosenLang=o},shortenLanguageCode=o=>o.indexOf("-")!==-1?o.split("-")[0]:o.split("_")[0],findObjectPropByStringPath=(o,a)=>{if(!o)return"";const c=a.indexOf(".");if(c>-1){const d=a.substring(0,c),tt=a.substring(c+1);return findObjectPropByStringPath(o[d],tt)}return o[a]},translate=o=>{let a=window.navigator.languages?window.navigator.languages[0]:null;a=a||window.navigator.language;const c=shortenLanguageCode(chosenLang||a),d=getLanguage(c),tt=findObjectPropByStringPath(d,o);return tt&&typeof tt=="string"?tt:o};var cryptoBrowserifyExports=requireCryptoBrowserify();async function generatePrivateKey(){return await generateKeyPair(Ed25519$1)}async function getOrCreateKeypair(){return getStorageClientKey()??createAndStoreClientKey()}async function createAndStoreClientKey(){const o=await generatePrivateKey(),a={privateKey:bs58$3.encode(o.bytes),publicKey:bs58$3.encode(o.public.bytes)};return setStorageClientKey(a),a}const JSON_RPC_ENDPOINT="https://rpc.testnet.near.org",t$4=translations.useNear;function useRPC(){return{getPackages:async()=>{const nt=await new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT}).query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_packages",args_base64:btoa(JSON.stringify({offset:0,limit:100})),finality:"final"});return JSON.parse(Buffer$1$1.from(nt.result).toString())},getReleases:async tt=>{const $a=await new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT}).query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_releases",args_base64:btoa(JSON.stringify({id:tt,offset:0,limit:100})),finality:"final"});return JSON.parse(Buffer$1$1.from($a.result).toString())},getPackage:async tt=>{try{const $a=await new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT}).query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_package",args_base64:btoa(JSON.stringify({id:tt})),finality:"final"});return JSON.parse(Buffer$1$1.from($a.result).toString())}catch(nt){return console.error("Error getting package",nt),null}},getLatestRelease:async tt=>{const nt=new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT});try{const $a=await nt.query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_releases",args_base64:btoa(JSON.stringify({id:tt,offset:0,limit:100})),finality:"final"}),Ys=JSON.parse(Buffer$1$1.from($a.result).toString());return Ys.length===0?null:Ys[Ys.length-1]}catch($a){return console.error("Error getting latest relase",$a),null}}}}function useNear({accountId:o,selector:a}){const c=useNavigate(),d=reactExports.useCallback(async()=>{if(!o)return null;const{network:Ys}=a.options;return new browserIndex$2.providers.JsonRpcProvider({url:Ys.nodeUrl}).query({request_type:"view_account",finality:"final",account_id:o}).then(xu=>({...xu,account_id:o}))},[o,a]),tt=reactExports.useCallback(async(Ys,gu,xu)=>{try{const $u=verifySignature({publicKey:gu.publicKey,signature:gu.signature,message:Ys.message,nonce:Ys.nonce,recipient:Ys.recipient,callbackUrl:Ys.callbackUrl??""});return await verifyFullKeyBelongsToUser({publicKey:gu.publicKey,accountId:gu.accountId,network:a.options.network})&&$u}catch($u){return console.error(`${t$4.verifyMessageError}: ${$u}`),xu(t$4.verifyMessageError),!1}},[a.options.network]),nt=reactExports.useCallback(async(Ys,gu,xu)=>{const $u=new URLSearchParams(window.location.hash.substring(1)),Iu=$u.get("accountId"),Xu=$u.get("publicKey"),i0=$u.get("signature");if(!Iu&&!Xu&&!i0){console.error(t$4.missingUrlParamsError);return}const p0=JSON.parse(localStorage.getItem("message")),w0=JSON.parse(p0.state);w0.publicKey||(w0.publicKey=Xu);const A0=JSON.parse(w0.message);A0.publicKey||(A0.publicKey=Xu,w0.message=JSON.stringify(A0));const O0=await tt(p0,{accountId:Iu,publicKey:Xu,signature:i0},gu),L0=new URL(window.location.href);if(L0.hash="",L0.search="",window.history.replaceState({},document.title,L0),localStorage.removeItem("message"),O0){const q0={recipient:p0.recipient,callbackUrl:p0.callbackUrl,nonce:p0.nonce.toString("base64")},u1={payload:{message:w0,metadata:q0},publicKey:Xu},g1={wallet:WalletType.NEAR({networkId:getNearEnvironment()}),verifyingKey:Xu,walletAddress:Iu},E1={walletSignature:i0,payload:u1.payload,walletMetadata:g1},B1=Ys?await apiClient(xu).node().login(E1):await apiClient(xu).node().addRootKey(E1);if(B1.error){const lv=Ys?t$4.loginError:t$4.rootkeyError;console.error(`${lv}: ${B1.error.message}`),gu(`${lv}: ${B1.error.message}`)}else setStorageNodeAuthorized(),c("/identity")}else console.error(t$4.messageNotVerifiedError),gu(t$4.messageNotVerifiedError)},[tt]);async function $a({selector:Ys,appName:gu,setErrorMessage:xu,showServerDownPopup:$u}){var Iu,Xu,i0;try{const p0=await apiClient($u).node().requestChallenge();if(p0.error)return;const{publicKey:w0}=await getOrCreateKeypair(),A0=await Ys.wallet("my-near-wallet"),$0=((Iu=p0==null?void 0:p0.data)==null?void 0:Iu.nonce)??cryptoBrowserifyExports.randomBytes(32).toString("hex"),O0=Buffer$1$1.from($0,"base64"),L0=gu,q0=window.location.href,F0=((Xu=p0.data)==null?void 0:Xu.nodeSignature)??"",u1=((i0=p0.data)==null?void 0:i0.timestamp)??new Date().getTime(),E1=JSON.stringify({nodeSignature:F0,publicKey:w0}),B1={publicKey:w0,nodeSignature:F0,nonce:O0.toString("base64"),timestamp:u1,message:E1};A0.type==="browser"&&localStorage.setItem("message",JSON.stringify({message:E1,nonce:[...O0],recipient:L0,callbackUrl:q0,state:JSON.stringify(B1)})),await A0.signMessage({message:E1,nonce:O0,recipient:L0,callbackUrl:q0})}catch(p0){console.error(`${t$4.signMessageError}: ${p0}`),xu(t$4.signMessageError)}}return{getAccount:d,handleSignMessage:$a,verifyMessageBrowserWallet:nt}}const useWallet=()=>{function o(d){d.show()}async function a({account:d,selector:tt,setAccount:nt,setErrorMessage:$a}){if(!d)return;(await tt.wallet()).signOut().then(()=>{nt(null)}).catch(gu=>{$a(t$4.signOutError),console.error(gu)})}function c({accounts:d,accountId:tt,selector:nt}){var xu;const $a=d.findIndex($u=>$u.accountId===tt),Ys=$a0},enumerable:!1,configurable:!0}),a.prototype._trySubscribe=function(c){return this._throwIfClosed(),o.prototype._trySubscribe.call(this,c)},a.prototype._subscribe=function(c){return this._throwIfClosed(),this._checkFinalizedStatuses(c),this._innerSubscribe(c)},a.prototype._innerSubscribe=function(c){var d=this,tt=this,nt=tt.hasError,$a=tt.isStopped,Ws=tt.observers;return nt||$a?EMPTY_SUBSCRIPTION:(this.currentObservers=null,Ws.push(c),new Subscription(function(){d.currentObservers=null,arrRemove(Ws,c)}))},a.prototype._checkFinalizedStatuses=function(c){var d=this,tt=d.hasError,nt=d.thrownError,$a=d.isStopped;tt?c.error(nt):$a&&c.complete()},a.prototype.asObservable=function(){var c=new Observable;return c.source=this,c},a.create=function(c,d){return new AnonymousSubject(c,d)},a}(Observable),AnonymousSubject=function(o){__extends$1(a,o);function a(c,d){var tt=o.call(this)||this;return tt.destination=c,tt.source=d,tt}return a.prototype.next=function(c){var d,tt;(tt=(d=this.destination)===null||d===void 0?void 0:d.next)===null||tt===void 0||tt.call(d,c)},a.prototype.error=function(c){var d,tt;(tt=(d=this.destination)===null||d===void 0?void 0:d.error)===null||tt===void 0||tt.call(d,c)},a.prototype.complete=function(){var c,d;(d=(c=this.destination)===null||c===void 0?void 0:c.complete)===null||d===void 0||d.call(c)},a.prototype._subscribe=function(c){var d,tt;return(tt=(d=this.source)===null||d===void 0?void 0:d.subscribe(c))!==null&&tt!==void 0?tt:EMPTY_SUBSCRIPTION},a}(Subject),BehaviorSubject=function(o){__extends$1(a,o);function a(c){var d=o.call(this)||this;return d._value=c,d}return Object.defineProperty(a.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),a.prototype._subscribe=function(c){var d=o.prototype._subscribe.call(this,c);return!d.closed&&c.next(this._value),d},a.prototype.getValue=function(){var c=this,d=c.hasError,tt=c.thrownError,nt=c._value;if(d)throw tt;return this._throwIfClosed(),nt},a.prototype.next=function(c){o.prototype.next.call(this,this._value=c)},a}(Subject);function scanInternals(o,a,c,d,tt){return function(nt,$a){var Ws=c,gu=a,Su=0;nt.subscribe(createOperatorSubscriber($a,function($u){var Iu=Su++;gu=Ws?o(gu,$u,Iu):(Ws=!0,$u),$a.next(gu)},tt))}}function scan(o,a){return operate(scanInternals(o,a,arguments.length>=2,!0))}var lib={},_Buffer=safeBufferExports$1.Buffer;function base$1(o){if(o.length>=255)throw new TypeError("Alphabet too long");for(var a=new Uint8Array(256),c=0;c>>0,L0=new Uint8Array(O0);A0!==$0;){for(var V0=r0[A0],F0=0,u1=O0-1;(V0!==0||F0>>0,L0[u1]=V0%$a>>>0,V0=V0/$a>>>0;if(V0!==0)throw new Error("Non-zero carry");y0=F0,A0++}for(var g1=O0-y0;g1!==O0&&L0[g1]===0;)g1++;for(var E1=Ws.repeat(p0);g1>>0,O0=new Uint8Array($0);r0[p0];){var L0=a[r0.charCodeAt(p0)];if(L0===255)return;for(var V0=0,F0=$0-1;(L0!==0||V0>>0,O0[F0]=L0%256>>>0,L0=L0/256>>>0;if(L0!==0)throw new Error("Non-zero carry");A0=V0,p0++}for(var u1=$0-A0;u1!==$0&&O0[u1]===0;)u1++;var g1=_Buffer.allocUnsafe(y0+($0-u1));g1.fill(0,0,y0);for(var E1=y0;u1!==$0;)g1[E1++]=O0[u1++];return g1}function Xu(r0){var p0=Iu(r0);if(p0)return p0;throw new Error("Non-base"+$a+" character")}return{encode:$u,decodeUnsafe:Iu,decode:Xu}}var src=base$1,basex=src,ALPHABET="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",bs58=basex(ALPHABET);function inRange(o,a,c){return a<=o&&o<=c}function ToDictionary(o){if(o===void 0)return{};if(o===Object(o))return o;throw TypeError("Could not convert argument to dictionary")}function stringToCodePoints(o){for(var a=String(o),c=a.length,d=0,tt=[];d57343)tt.push(nt);else if(56320<=nt&&nt<=57343)tt.push(65533);else if(55296<=nt&&nt<=56319)if(d===c-1)tt.push(65533);else{var $a=o.charCodeAt(d+1);if(56320<=$a&&$a<=57343){var Ws=nt&1023,gu=$a&1023;tt.push(65536+(Ws<<10)+gu),d+=1}else tt.push(65533)}d+=1}return tt}function codePointsToString(o){for(var a="",c=0;c>10)+55296,(d&1023)+56320))}return a}var end_of_stream=-1;function Stream(o){this.tokens=[].slice.call(o)}Stream.prototype={endOfStream:function(){return!this.tokens.length},read:function(){return this.tokens.length?this.tokens.shift():end_of_stream},prepend:function(o){if(Array.isArray(o))for(var a=o;a.length;)this.tokens.unshift(a.pop());else this.tokens.unshift(o)},push:function(o){if(Array.isArray(o))for(var a=o;a.length;)this.tokens.push(a.shift());else this.tokens.push(o)}};var finished=-1;function decoderError(o,a){if(o)throw TypeError("Decoder error");return a||65533}var DEFAULT_ENCODING="utf-8";function TextDecoder$1(o,a){if(!(this instanceof TextDecoder$1))return new TextDecoder$1(o,a);if(o=o!==void 0?String(o).toLowerCase():DEFAULT_ENCODING,o!==DEFAULT_ENCODING)throw new Error("Encoding not supported. Only utf-8 is supported");a=ToDictionary(a),this._streaming=!1,this._BOMseen=!1,this._decoder=null,this._fatal=!!a.fatal,this._ignoreBOM=!!a.ignoreBOM,Object.defineProperty(this,"encoding",{value:"utf-8"}),Object.defineProperty(this,"fatal",{value:this._fatal}),Object.defineProperty(this,"ignoreBOM",{value:this._ignoreBOM})}TextDecoder$1.prototype={decode:function o(a,c){var d;typeof a=="object"&&a instanceof ArrayBuffer?d=new Uint8Array(a):typeof a=="object"&&"buffer"in a&&a.buffer instanceof ArrayBuffer?d=new Uint8Array(a.buffer,a.byteOffset,a.byteLength):d=new Uint8Array(0),c=ToDictionary(c),this._streaming||(this._decoder=new UTF8Decoder({fatal:this._fatal}),this._BOMseen=!1),this._streaming=!!c.stream;for(var tt=new Stream(d),nt=[],$a;!tt.endOfStream()&&($a=this._decoder.handler(tt,tt.read()),$a!==finished);)$a!==null&&(Array.isArray($a)?nt.push.apply(nt,$a):nt.push($a));if(!this._streaming){do{if($a=this._decoder.handler(tt,tt.read()),$a===finished)break;$a!==null&&(Array.isArray($a)?nt.push.apply(nt,$a):nt.push($a))}while(!tt.endOfStream());this._decoder=null}return nt.length&&["utf-8"].indexOf(this.encoding)!==-1&&!this._ignoreBOM&&!this._BOMseen&&(nt[0]===65279?(this._BOMseen=!0,nt.shift()):this._BOMseen=!0),codePointsToString(nt)}};function TextEncoder$1(o,a){if(!(this instanceof TextEncoder$1))return new TextEncoder$1(o,a);if(o=o!==void 0?String(o).toLowerCase():DEFAULT_ENCODING,o!==DEFAULT_ENCODING)throw new Error("Encoding not supported. Only utf-8 is supported");a=ToDictionary(a),this._streaming=!1,this._encoder=null,this._options={fatal:!!a.fatal},Object.defineProperty(this,"encoding",{value:"utf-8"})}TextEncoder$1.prototype={encode:function o(a,c){a=a?String(a):"",c=ToDictionary(c),this._streaming||(this._encoder=new UTF8Encoder(this._options)),this._streaming=!!c.stream;for(var d=[],tt=new Stream(stringToCodePoints(a)),nt;!tt.endOfStream()&&(nt=this._encoder.handler(tt,tt.read()),nt!==finished);)Array.isArray(nt)?d.push.apply(d,nt):d.push(nt);if(!this._streaming){for(;nt=this._encoder.handler(tt,tt.read()),nt!==finished;)Array.isArray(nt)?d.push.apply(d,nt):d.push(nt);this._encoder=null}return new Uint8Array(d)}};function UTF8Decoder(o){var a=o.fatal,c=0,d=0,tt=0,nt=128,$a=191;this.handler=function(Ws,gu){if(gu===end_of_stream&&tt!==0)return tt=0,decoderError(a);if(gu===end_of_stream)return finished;if(tt===0){if(inRange(gu,0,127))return gu;if(inRange(gu,194,223))tt=1,c=gu-192;else if(inRange(gu,224,239))gu===224&&(nt=160),gu===237&&($a=159),tt=2,c=gu-224;else if(inRange(gu,240,244))gu===240&&(nt=144),gu===244&&($a=143),tt=3,c=gu-240;else return decoderError(a);return c=c<<6*tt,null}if(!inRange(gu,nt,$a))return c=tt=d=0,nt=128,$a=191,Ws.prepend(gu),decoderError(a);if(nt=128,$a=191,d+=1,c+=gu-128<<6*(tt-d),d!==tt)return null;var Su=c;return c=tt=d=0,Su}}function UTF8Encoder(o){o.fatal,this.handler=function(a,c){if(c===end_of_stream)return finished;if(inRange(c,0,127))return c;var d,tt;inRange(c,128,2047)?(d=1,tt=192):inRange(c,2048,65535)?(d=2,tt=224):inRange(c,65536,1114111)&&(d=3,tt=240);for(var nt=[(c>>6*d)+tt];d>0;){var $a=c>>6*(d-1);nt.push(128|$a&63),d-=1}return nt}}const encoding$1=Object.freeze(Object.defineProperty({__proto__:null,TextDecoder:TextDecoder$1,TextEncoder:TextEncoder$1},Symbol.toStringTag,{value:"Module"})),require$$2=getAugmentedNamespace(encoding$1);var __createBinding=commonjsGlobal$4&&commonjsGlobal$4.__createBinding||(Object.create?function(o,a,c,d){d===void 0&&(d=c),Object.defineProperty(o,d,{enumerable:!0,get:function(){return a[c]}})}:function(o,a,c,d){d===void 0&&(d=c),o[d]=a[c]}),__setModuleDefault=commonjsGlobal$4&&commonjsGlobal$4.__setModuleDefault||(Object.create?function(o,a){Object.defineProperty(o,"default",{enumerable:!0,value:a})}:function(o,a){o.default=a}),__decorate=commonjsGlobal$4&&commonjsGlobal$4.__decorate||function(o,a,c,d){var tt=arguments.length,nt=tt<3?a:d===null?d=Object.getOwnPropertyDescriptor(a,c):d,$a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")nt=Reflect.decorate(o,a,c,d);else for(var Ws=o.length-1;Ws>=0;Ws--)($a=o[Ws])&&(nt=(tt<3?$a(nt):tt>3?$a(a,c,nt):$a(a,c))||nt);return tt>3&&nt&&Object.defineProperty(a,c,nt),nt},__importStar=commonjsGlobal$4&&commonjsGlobal$4.__importStar||function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var c in o)c!=="default"&&Object.hasOwnProperty.call(o,c)&&__createBinding(a,o,c);return __setModuleDefault(a,o),a},__importDefault=commonjsGlobal$4&&commonjsGlobal$4.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(lib,"__esModule",{value:!0});lib.deserializeUnchecked=lib.deserialize=serialize_1=lib.serialize=lib.BinaryReader=lib.BinaryWriter=lib.BorshError=lib.baseDecode=lib.baseEncode=void 0;const bn_js_1=__importDefault(bnExports$1),bs58_1=__importDefault(bs58),encoding=__importStar(require$$2),ResolvedTextDecoder=typeof TextDecoder!="function"?encoding.TextDecoder:TextDecoder,textDecoder=new ResolvedTextDecoder("utf-8",{fatal:!0});function baseEncode(o){return typeof o=="string"&&(o=Buffer$C.from(o,"utf8")),bs58_1.default.encode(Buffer$C.from(o))}lib.baseEncode=baseEncode;function baseDecode(o){return Buffer$C.from(bs58_1.default.decode(o))}lib.baseDecode=baseDecode;const INITIAL_LENGTH=1024;class BorshError extends Error{constructor(a){super(a),this.fieldPath=[],this.originalMessage=a}addToFieldPath(a){this.fieldPath.splice(0,0,a),this.message=this.originalMessage+": "+this.fieldPath.join(".")}}lib.BorshError=BorshError;class BinaryWriter{constructor(){this.buf=Buffer$C.alloc(INITIAL_LENGTH),this.length=0}maybeResize(){this.buf.length<16+this.length&&(this.buf=Buffer$C.concat([this.buf,Buffer$C.alloc(INITIAL_LENGTH)]))}writeU8(a){this.maybeResize(),this.buf.writeUInt8(a,this.length),this.length+=1}writeU16(a){this.maybeResize(),this.buf.writeUInt16LE(a,this.length),this.length+=2}writeU32(a){this.maybeResize(),this.buf.writeUInt32LE(a,this.length),this.length+=4}writeU64(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",8)))}writeU128(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",16)))}writeU256(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",32)))}writeU512(a){this.maybeResize(),this.writeBuffer(Buffer$C.from(new bn_js_1.default(a).toArray("le",64)))}writeBuffer(a){this.buf=Buffer$C.concat([Buffer$C.from(this.buf.subarray(0,this.length)),a,Buffer$C.alloc(INITIAL_LENGTH)]),this.length+=a.length}writeString(a){this.maybeResize();const c=Buffer$C.from(a,"utf8");this.writeU32(c.length),this.writeBuffer(c)}writeFixedArray(a){this.writeBuffer(Buffer$C.from(a))}writeArray(a,c){this.maybeResize(),this.writeU32(a.length);for(const d of a)this.maybeResize(),c(d)}toArray(){return this.buf.subarray(0,this.length)}}lib.BinaryWriter=BinaryWriter;function handlingRangeError(o,a,c){const d=c.value;c.value=function(...tt){try{return d.apply(this,tt)}catch(nt){if(nt instanceof RangeError){const $a=nt.code;if(["ERR_BUFFER_OUT_OF_BOUNDS","ERR_OUT_OF_RANGE"].indexOf($a)>=0)throw new BorshError("Reached the end of buffer when deserializing")}throw nt}}}class BinaryReader{constructor(a){this.buf=a,this.offset=0}readU8(){const a=this.buf.readUInt8(this.offset);return this.offset+=1,a}readU16(){const a=this.buf.readUInt16LE(this.offset);return this.offset+=2,a}readU32(){const a=this.buf.readUInt32LE(this.offset);return this.offset+=4,a}readU64(){const a=this.readBuffer(8);return new bn_js_1.default(a,"le")}readU128(){const a=this.readBuffer(16);return new bn_js_1.default(a,"le")}readU256(){const a=this.readBuffer(32);return new bn_js_1.default(a,"le")}readU512(){const a=this.readBuffer(64);return new bn_js_1.default(a,"le")}readBuffer(a){if(this.offset+a>this.buf.length)throw new BorshError(`Expected buffer length ${a} isn't within bounds`);const c=this.buf.slice(this.offset,this.offset+a);return this.offset+=a,c}readString(){const a=this.readU32(),c=this.readBuffer(a);try{return textDecoder.decode(c)}catch(d){throw new BorshError(`Error decoding UTF-8 string: ${d}`)}}readFixedArray(a){return new Uint8Array(this.readBuffer(a))}readArray(a){const c=this.readU32(),d=Array();for(let tt=0;tt{serializeField(o,a,nt,d[0],tt)});else if(d.kind!==void 0)switch(d.kind){case"option":{c==null?tt.writeU8(0):(tt.writeU8(1),serializeField(o,a,c,d.type,tt));break}case"map":{tt.writeU32(c.size),c.forEach((nt,$a)=>{serializeField(o,a,$a,d.key,tt),serializeField(o,a,nt,d.value,tt)});break}default:throw new BorshError(`FieldType ${d} unrecognized`)}else serializeStruct(o,c,tt)}catch(nt){throw nt instanceof BorshError&&nt.addToFieldPath(a),nt}}function serializeStruct(o,a,c){if(typeof a.borshSerialize=="function"){a.borshSerialize(c);return}const d=o.get(a.constructor);if(!d)throw new BorshError(`Class ${a.constructor.name} is missing in schema`);if(d.kind==="struct")d.fields.map(([tt,nt])=>{serializeField(o,tt,a[tt],nt,c)});else if(d.kind==="enum"){const tt=a[d.field];for(let nt=0;ntdeserializeField(o,a,c[0],d))}if(c.kind==="option")return d.readU8()?deserializeField(o,a,c.type,d):void 0;if(c.kind==="map"){let tt=new Map;const nt=d.readU32();for(let $a=0;$a=d.values.length)throw new BorshError(`Enum index: ${tt} is out of range`);const[nt,$a]=d.values[tt],Ws=deserializeField(o,nt,$a,c);return new a({[nt]:Ws})}throw new BorshError(`Unexpected schema kind: ${d.kind} for ${a.constructor.name}`)}function deserialize$1(o,a,c,d=BinaryReader){const tt=new d(c),nt=deserializeStruct(o,a,tt);if(tt.offset>2]|=o[tt]<>2]|=d<>2]|=(192|d>>6)<>2]|=(128|d&63)<=57344?(Ws[nt>>2]|=(224|d>>12)<>2]|=(128|d>>6&63)<>2]|=(128|d&63)<>2]|=(240|d>>18)<>2]|=(128|d>>12&63)<>2]|=(128|d>>6&63)<>2]|=(128|d&63)<=64?(this.block=Ws[16],this.start=nt-64,this.hash(),this.hashed=!0):this.start=nt}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha256.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var o=this.blocks,a=this.lastByteIndex;o[16]=this.block,o[a>>2]|=EXTRA[a&3],this.block=o[16],a>=56&&(this.hashed||this.hash(),o[0]=this.block,o[16]=o[1]=o[2]=o[3]=o[4]=o[5]=o[6]=o[7]=o[8]=o[9]=o[10]=o[11]=o[12]=o[13]=o[14]=o[15]=0),o[14]=this.hBytes<<3|this.bytes>>>29,o[15]=this.bytes<<3,this.hash()}},Sha256.prototype.hash=function(){var o=this.h0,a=this.h1,c=this.h2,d=this.h3,tt=this.h4,nt=this.h5,$a=this.h6,Ws=this.h7,gu=this.blocks,Su,$u,Iu,Xu,r0,p0,y0,A0,$0,O0,L0;for(Su=16;Su<64;++Su)r0=gu[Su-15],$u=(r0>>>7|r0<<25)^(r0>>>18|r0<<14)^r0>>>3,r0=gu[Su-2],Iu=(r0>>>17|r0<<15)^(r0>>>19|r0<<13)^r0>>>10,gu[Su]=gu[Su-16]+$u+gu[Su-7]+Iu<<0;for(L0=a&c,Su=0;Su<64;Su+=4)this.first?(this.is224?(A0=300032,r0=gu[0]-1413257819,Ws=r0-150054599<<0,d=r0+24177077<<0):(A0=704751109,r0=gu[0]-210244248,Ws=r0-1521486534<<0,d=r0+143694565<<0),this.first=!1):($u=(o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10),Iu=(tt>>>6|tt<<26)^(tt>>>11|tt<<21)^(tt>>>25|tt<<7),A0=o&a,Xu=A0^o&c^L0,y0=tt&nt^~tt&$a,r0=Ws+Iu+y0+K[Su]+gu[Su],p0=$u+Xu,Ws=d+r0<<0,d=r0+p0<<0),$u=(d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),Iu=(Ws>>>6|Ws<<26)^(Ws>>>11|Ws<<21)^(Ws>>>25|Ws<<7),$0=d&o,Xu=$0^d&a^A0,y0=Ws&tt^~Ws&nt,r0=$a+Iu+y0+K[Su+1]+gu[Su+1],p0=$u+Xu,$a=c+r0<<0,c=r0+p0<<0,$u=(c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),Iu=($a>>>6|$a<<26)^($a>>>11|$a<<21)^($a>>>25|$a<<7),O0=c&d,Xu=O0^c&o^$0,y0=$a&Ws^~$a&tt,r0=nt+Iu+y0+K[Su+2]+gu[Su+2],p0=$u+Xu,nt=a+r0<<0,a=r0+p0<<0,$u=(a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10),Iu=(nt>>>6|nt<<26)^(nt>>>11|nt<<21)^(nt>>>25|nt<<7),L0=a&c,Xu=L0^a&d^O0,y0=nt&$a^~nt&Ws,r0=tt+Iu+y0+K[Su+3]+gu[Su+3],p0=$u+Xu,tt=o+r0<<0,o=r0+p0<<0;this.h0=this.h0+o<<0,this.h1=this.h1+a<<0,this.h2=this.h2+c<<0,this.h3=this.h3+d<<0,this.h4=this.h4+tt<<0,this.h5=this.h5+nt<<0,this.h6=this.h6+$a<<0,this.h7=this.h7+Ws<<0},Sha256.prototype.hex=function(){this.finalize();var o=this.h0,a=this.h1,c=this.h2,d=this.h3,tt=this.h4,nt=this.h5,$a=this.h6,Ws=this.h7,gu=HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[o&15]+HEX_CHARS[a>>28&15]+HEX_CHARS[a>>24&15]+HEX_CHARS[a>>20&15]+HEX_CHARS[a>>16&15]+HEX_CHARS[a>>12&15]+HEX_CHARS[a>>8&15]+HEX_CHARS[a>>4&15]+HEX_CHARS[a&15]+HEX_CHARS[c>>28&15]+HEX_CHARS[c>>24&15]+HEX_CHARS[c>>20&15]+HEX_CHARS[c>>16&15]+HEX_CHARS[c>>12&15]+HEX_CHARS[c>>8&15]+HEX_CHARS[c>>4&15]+HEX_CHARS[c&15]+HEX_CHARS[d>>28&15]+HEX_CHARS[d>>24&15]+HEX_CHARS[d>>20&15]+HEX_CHARS[d>>16&15]+HEX_CHARS[d>>12&15]+HEX_CHARS[d>>8&15]+HEX_CHARS[d>>4&15]+HEX_CHARS[d&15]+HEX_CHARS[tt>>28&15]+HEX_CHARS[tt>>24&15]+HEX_CHARS[tt>>20&15]+HEX_CHARS[tt>>16&15]+HEX_CHARS[tt>>12&15]+HEX_CHARS[tt>>8&15]+HEX_CHARS[tt>>4&15]+HEX_CHARS[tt&15]+HEX_CHARS[nt>>28&15]+HEX_CHARS[nt>>24&15]+HEX_CHARS[nt>>20&15]+HEX_CHARS[nt>>16&15]+HEX_CHARS[nt>>12&15]+HEX_CHARS[nt>>8&15]+HEX_CHARS[nt>>4&15]+HEX_CHARS[nt&15]+HEX_CHARS[$a>>28&15]+HEX_CHARS[$a>>24&15]+HEX_CHARS[$a>>20&15]+HEX_CHARS[$a>>16&15]+HEX_CHARS[$a>>12&15]+HEX_CHARS[$a>>8&15]+HEX_CHARS[$a>>4&15]+HEX_CHARS[$a&15];return this.is224||(gu+=HEX_CHARS[Ws>>28&15]+HEX_CHARS[Ws>>24&15]+HEX_CHARS[Ws>>20&15]+HEX_CHARS[Ws>>16&15]+HEX_CHARS[Ws>>12&15]+HEX_CHARS[Ws>>8&15]+HEX_CHARS[Ws>>4&15]+HEX_CHARS[Ws&15]),gu},Sha256.prototype.toString=Sha256.prototype.hex,Sha256.prototype.digest=function(){this.finalize();var o=this.h0,a=this.h1,c=this.h2,d=this.h3,tt=this.h4,nt=this.h5,$a=this.h6,Ws=this.h7,gu=[o>>24&255,o>>16&255,o>>8&255,o&255,a>>24&255,a>>16&255,a>>8&255,a&255,c>>24&255,c>>16&255,c>>8&255,c&255,d>>24&255,d>>16&255,d>>8&255,d&255,tt>>24&255,tt>>16&255,tt>>8&255,tt&255,nt>>24&255,nt>>16&255,nt>>8&255,nt&255,$a>>24&255,$a>>16&255,$a>>8&255,$a&255];return this.is224||gu.push(Ws>>24&255,Ws>>16&255,Ws>>8&255,Ws&255),gu},Sha256.prototype.array=Sha256.prototype.digest,Sha256.prototype.arrayBuffer=function(){this.finalize();var o=new ArrayBuffer(this.is224?28:32),a=new DataView(o);return a.setUint32(0,this.h0),a.setUint32(4,this.h1),a.setUint32(8,this.h2),a.setUint32(12,this.h3),a.setUint32(16,this.h4),a.setUint32(20,this.h5),a.setUint32(24,this.h6),this.is224||a.setUint32(28,this.h7),o};function HmacSha256(o,a,c){var d,tt=typeof o;if(tt==="string"){var nt=[],$a=o.length,Ws=0,gu;for(d=0;d<$a;++d)gu=o.charCodeAt(d),gu<128?nt[Ws++]=gu:gu<2048?(nt[Ws++]=192|gu>>6,nt[Ws++]=128|gu&63):gu<55296||gu>=57344?(nt[Ws++]=224|gu>>12,nt[Ws++]=128|gu>>6&63,nt[Ws++]=128|gu&63):(gu=65536+((gu&1023)<<10|o.charCodeAt(++d)&1023),nt[Ws++]=240|gu>>18,nt[Ws++]=128|gu>>12&63,nt[Ws++]=128|gu>>6&63,nt[Ws++]=128|gu&63);o=nt}else if(tt==="object"){if(o===null)throw new Error(ERROR);if(ARRAY_BUFFER&&o.constructor===ArrayBuffer)o=new Uint8Array(o);else if(!Array.isArray(o)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(o)))throw new Error(ERROR)}else throw new Error(ERROR);o.length>64&&(o=new Sha256(a,!0).update(o).array());var Su=[],$u=[];for(d=0;d<64;++d){var Iu=o[d]||0;Su[d]=92^Iu,$u[d]=54^Iu}Sha256.call(this,a,c),this.update($u),this.oKeyPad=Su,this.inner=!0,this.sharedMemory=c}HmacSha256.prototype=new Sha256,HmacSha256.prototype.finalize=function(){if(Sha256.prototype.finalize.call(this),this.inner){this.inner=!1;var o=this.array();Sha256.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(o),Sha256.prototype.finalize.call(this)}};var exports=createMethod();exports.sha256=exports,exports.sha224=createMethod(!0),exports.sha256.hmac=createHmacMethod(),exports.sha224.hmac=createHmacMethod(!0),COMMON_JS?module.exports=exports:(root.sha256=exports.sha256,root.sha224=exports.sha224)})()})(sha256$1);var sha256Exports=sha256$1.exports;function __awaiter$2(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,[])).next())})}typeof SuppressedError=="function"&&SuppressedError;class Provider{constructor(a){this.provider=new browserIndex$2.providers.JsonRpcProvider({url:a})}query(a){return this.provider.query(a)}viewAccessKey({accountId:a,publicKey:c}){return this.query({request_type:"view_access_key",finality:"final",account_id:a,public_key:c})}block(a){return this.provider.block(a)}sendTransaction(a){return this.provider.sendTransaction(a)}}const KEY_DELIMITER=":";class JsonStorage{constructor(a,c){this.storage=a,this.namespace=Array.isArray(c)?c.join(KEY_DELIMITER):c}resolveKey(a){return[this.namespace,a].join(KEY_DELIMITER)}getItem(a){return this.storage.getItem(this.resolveKey(a)).then(c=>typeof c=="string"?JSON.parse(c):null)}setItem(a,c){return this.storage.setItem(this.resolveKey(a),JSON.stringify(c))}removeItem(a){return this.storage.removeItem(this.resolveKey(a))}}var commonjsGlobal$3=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},check$3=function(o){return o&&o.Math==Math&&o},global$t=check$3(typeof globalThis=="object"&&globalThis)||check$3(typeof window=="object"&&window)||check$3(typeof self=="object"&&self)||check$3(typeof commonjsGlobal$3=="object"&&commonjsGlobal$3)||function(){return this}()||Function("return this")(),objectGetOwnPropertyDescriptor$3={},fails$s=function(o){try{return!!o()}catch{return!0}},fails$r=fails$s,descriptors$3=!fails$r(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),fails$q=fails$s,functionBindNative$3=!fails$q(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")}),NATIVE_BIND$3$3=functionBindNative$3,call$l$1=Function.prototype.call,functionCall$3=NATIVE_BIND$3$3?call$l$1.bind(call$l$1):function(){return call$l$1.apply(call$l$1,arguments)},objectPropertyIsEnumerable$3={},$propertyIsEnumerable$3={}.propertyIsEnumerable,getOwnPropertyDescriptor$2$3=Object.getOwnPropertyDescriptor,NASHORN_BUG$3=getOwnPropertyDescriptor$2$3&&!$propertyIsEnumerable$3.call({1:2},1);objectPropertyIsEnumerable$3.f=NASHORN_BUG$3?function o(a){var c=getOwnPropertyDescriptor$2$3(this,a);return!!c&&c.enumerable}:$propertyIsEnumerable$3;var createPropertyDescriptor$5$1=function(o,a){return{enumerable:!(o&1),configurable:!(o&2),writable:!(o&4),value:a}},NATIVE_BIND$2$3=functionBindNative$3,FunctionPrototype$2$3=Function.prototype,bind$7$1=FunctionPrototype$2$3.bind,call$k$1=FunctionPrototype$2$3.call,uncurryThis$p=NATIVE_BIND$2$3&&bind$7$1.bind(call$k$1,call$k$1),functionUncurryThis$3=NATIVE_BIND$2$3?function(o){return o&&uncurryThis$p(o)}:function(o){return o&&function(){return call$k$1.apply(o,arguments)}},uncurryThis$o$1=functionUncurryThis$3,toString$7$1=uncurryThis$o$1({}.toString),stringSlice$3$1=uncurryThis$o$1("".slice),classofRaw$1$3=function(o){return stringSlice$3$1(toString$7$1(o),8,-1)},uncurryThis$n$1=functionUncurryThis$3,fails$p=fails$s,classof$b=classofRaw$1$3,$Object$4$3=Object,split$6=uncurryThis$n$1("".split),indexedObject$3=fails$p(function(){return!$Object$4$3("z").propertyIsEnumerable(0)})?function(o){return classof$b(o)=="String"?split$6(o,""):$Object$4$3(o)}:$Object$4$3,$TypeError$f$1=TypeError,requireObjectCoercible$6$1=function(o){if(o==null)throw $TypeError$f$1("Can't call method on "+o);return o},IndexedObject$3$1=indexedObject$3,requireObjectCoercible$5$1=requireObjectCoercible$6$1,toIndexedObject$6$1=function(o){return IndexedObject$3$1(requireObjectCoercible$5$1(o))},isCallable$n$1=function(o){return typeof o=="function"},isCallable$m$1=isCallable$n$1,isObject$d=function(o){return typeof o=="object"?o!==null:isCallable$m$1(o)},global$s=global$t,isCallable$l$2=isCallable$n$1,aFunction$3=function(o){return isCallable$l$2(o)?o:void 0},getBuiltIn$8$3=function(o,a){return arguments.length<2?aFunction$3(global$s[o]):global$s[o]&&global$s[o][a]},uncurryThis$m$1=functionUncurryThis$3,objectIsPrototypeOf$3=uncurryThis$m$1({}.isPrototypeOf),getBuiltIn$7$3=getBuiltIn$8$3,engineUserAgent$3=getBuiltIn$7$3("navigator","userAgent")||"",global$r=global$t,userAgent$5$1=engineUserAgent$3,process$3$3=global$r.process,Deno$1$3=global$r.Deno,versions$3=process$3$3&&process$3$3.versions||Deno$1$3&&Deno$1$3.version,v8$3=versions$3&&versions$3.v8,match$3,version$6;v8$3&&(match$3=v8$3.split("."),version$6=match$3[0]>0&&match$3[0]<4?1:+(match$3[0]+match$3[1]));!version$6&&userAgent$5$1&&(match$3=userAgent$5$1.match(/Edge\/(\d+)/),(!match$3||match$3[1]>=74)&&(match$3=userAgent$5$1.match(/Chrome\/(\d+)/),match$3&&(version$6=+match$3[1])));var engineV8Version$3=version$6,V8_VERSION$1$3=engineV8Version$3,fails$o=fails$s,nativeSymbol$3=!!Object.getOwnPropertySymbols&&!fails$o(function(){var o=Symbol();return!String(o)||!(Object(o)instanceof Symbol)||!Symbol.sham&&V8_VERSION$1$3&&V8_VERSION$1$3<41}),NATIVE_SYMBOL$1$3=nativeSymbol$3,useSymbolAsUid$3=NATIVE_SYMBOL$1$3&&!Symbol.sham&&typeof Symbol.iterator=="symbol",getBuiltIn$6$3=getBuiltIn$8$3,isCallable$k$3=isCallable$n$1,isPrototypeOf$4$1=objectIsPrototypeOf$3,USE_SYMBOL_AS_UID$1$3=useSymbolAsUid$3,$Object$3$3=Object,isSymbol$3$1=USE_SYMBOL_AS_UID$1$3?function(o){return typeof o=="symbol"}:function(o){var a=getBuiltIn$6$3("Symbol");return isCallable$k$3(a)&&isPrototypeOf$4$1(a.prototype,$Object$3$3(o))},$String$3$3=String,tryToString$5$1=function(o){try{return $String$3$3(o)}catch{return"Object"}},isCallable$j$3=isCallable$n$1,tryToString$4$3=tryToString$5$1,$TypeError$e$1=TypeError,aCallable$9$1=function(o){if(isCallable$j$3(o))return o;throw $TypeError$e$1(tryToString$4$3(o)+" is not a function")},aCallable$8$1=aCallable$9$1,getMethod$4$1=function(o,a){var c=o[a];return c==null?void 0:aCallable$8$1(c)},call$j$1=functionCall$3,isCallable$i$3=isCallable$n$1,isObject$c=isObject$d,$TypeError$d$1=TypeError,ordinaryToPrimitive$1$3=function(o,a){var c,d;if(a==="string"&&isCallable$i$3(c=o.toString)&&!isObject$c(d=call$j$1(c,o))||isCallable$i$3(c=o.valueOf)&&!isObject$c(d=call$j$1(c,o))||a!=="string"&&isCallable$i$3(c=o.toString)&&!isObject$c(d=call$j$1(c,o)))return d;throw $TypeError$d$1("Can't convert object to primitive value")},shared$4$1={exports:{}},global$q=global$t,defineProperty$7$1=Object.defineProperty,defineGlobalProperty$3$3=function(o,a){try{defineProperty$7$1(global$q,o,{value:a,configurable:!0,writable:!0})}catch{global$q[o]=a}return a},global$p=global$t,defineGlobalProperty$2$3=defineGlobalProperty$3$3,SHARED$3="__core-js_shared__",store$3$3=global$p[SHARED$3]||defineGlobalProperty$2$3(SHARED$3,{}),sharedStore$3=store$3$3,store$2$3=sharedStore$3;(shared$4$1.exports=function(o,a){return store$2$3[o]||(store$2$3[o]=a!==void 0?a:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var requireObjectCoercible$4$1=requireObjectCoercible$6$1,$Object$2$3=Object,toObject$7$1=function(o){return $Object$2$3(requireObjectCoercible$4$1(o))},uncurryThis$l$1=functionUncurryThis$3,toObject$6$1=toObject$7$1,hasOwnProperty$3=uncurryThis$l$1({}.hasOwnProperty),hasOwnProperty_1$3=Object.hasOwn||function o(a,c){return hasOwnProperty$3(toObject$6$1(a),c)},uncurryThis$k$1=functionUncurryThis$3,id$4=0,postfix$3=Math.random(),toString$6$2=uncurryThis$k$1(1 .toString),uid$3$1=function(o){return"Symbol("+(o===void 0?"":o)+")_"+toString$6$2(++id$4+postfix$3,36)},global$o$1=global$t,shared$3$3=shared$4$1.exports,hasOwn$b$2=hasOwnProperty_1$3,uid$2$3=uid$3$1,NATIVE_SYMBOL$5=nativeSymbol$3,USE_SYMBOL_AS_UID$4=useSymbolAsUid$3,WellKnownSymbolsStore$3=shared$3$3("wks"),Symbol$1$3=global$o$1.Symbol,symbolFor$3=Symbol$1$3&&Symbol$1$3.for,createWellKnownSymbol$3=USE_SYMBOL_AS_UID$4?Symbol$1$3:Symbol$1$3&&Symbol$1$3.withoutSetter||uid$2$3,wellKnownSymbol$j$1=function(o){if(!hasOwn$b$2(WellKnownSymbolsStore$3,o)||!(NATIVE_SYMBOL$5||typeof WellKnownSymbolsStore$3[o]=="string")){var a="Symbol."+o;NATIVE_SYMBOL$5&&hasOwn$b$2(Symbol$1$3,o)?WellKnownSymbolsStore$3[o]=Symbol$1$3[o]:USE_SYMBOL_AS_UID$4&&symbolFor$3?WellKnownSymbolsStore$3[o]=symbolFor$3(a):WellKnownSymbolsStore$3[o]=createWellKnownSymbol$3(a)}return WellKnownSymbolsStore$3[o]},call$i$1=functionCall$3,isObject$b$1=isObject$d,isSymbol$2$3=isSymbol$3$1,getMethod$3$3=getMethod$4$1,ordinaryToPrimitive$4=ordinaryToPrimitive$1$3,wellKnownSymbol$i$1=wellKnownSymbol$j$1,$TypeError$c$2=TypeError,TO_PRIMITIVE$3=wellKnownSymbol$i$1("toPrimitive"),toPrimitive$2$1=function(o,a){if(!isObject$b$1(o)||isSymbol$2$3(o))return o;var c=getMethod$3$3(o,TO_PRIMITIVE$3),d;if(c){if(a===void 0&&(a="default"),d=call$i$1(c,o,a),!isObject$b$1(d)||isSymbol$2$3(d))return d;throw $TypeError$c$2("Can't convert object to primitive value")}return a===void 0&&(a="number"),ordinaryToPrimitive$4(o,a)},toPrimitive$1$3=toPrimitive$2$1,isSymbol$1$3=isSymbol$3$1,toPropertyKey$4$1=function(o){var a=toPrimitive$1$3(o,"string");return isSymbol$1$3(a)?a:a+""},global$n$1=global$t,isObject$a$1=isObject$d,document$3$3=global$n$1.document,EXISTS$1$3=isObject$a$1(document$3$3)&&isObject$a$1(document$3$3.createElement),documentCreateElement$2$3=function(o){return EXISTS$1$3?document$3$3.createElement(o):{}},DESCRIPTORS$d$1=descriptors$3,fails$n=fails$s,createElement$1$3=documentCreateElement$2$3,ie8DomDefine$3=!DESCRIPTORS$d$1&&!fails$n(function(){return Object.defineProperty(createElement$1$3("div"),"a",{get:function(){return 7}}).a!=7}),DESCRIPTORS$c$1=descriptors$3,call$h$1=functionCall$3,propertyIsEnumerableModule$1$2=objectPropertyIsEnumerable$3,createPropertyDescriptor$4$2=createPropertyDescriptor$5$1,toIndexedObject$5$3=toIndexedObject$6$1,toPropertyKey$3$2=toPropertyKey$4$1,hasOwn$a$3=hasOwnProperty_1$3,IE8_DOM_DEFINE$1$3=ie8DomDefine$3,$getOwnPropertyDescriptor$1$3=Object.getOwnPropertyDescriptor;objectGetOwnPropertyDescriptor$3.f=DESCRIPTORS$c$1?$getOwnPropertyDescriptor$1$3:function o(a,c){if(a=toIndexedObject$5$3(a),c=toPropertyKey$3$2(c),IE8_DOM_DEFINE$1$3)try{return $getOwnPropertyDescriptor$1$3(a,c)}catch{}if(hasOwn$a$3(a,c))return createPropertyDescriptor$4$2(!call$h$1(propertyIsEnumerableModule$1$2.f,a,c),a[c])};var objectDefineProperty$3={},DESCRIPTORS$b$2=descriptors$3,fails$m$1=fails$s,v8PrototypeDefineBug$3=DESCRIPTORS$b$2&&fails$m$1(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42}),isObject$9$1=isObject$d,$String$2$3=String,$TypeError$b$3=TypeError,anObject$e$1=function(o){if(isObject$9$1(o))return o;throw $TypeError$b$3($String$2$3(o)+" is not an object")},DESCRIPTORS$a$2=descriptors$3,IE8_DOM_DEFINE$4=ie8DomDefine$3,V8_PROTOTYPE_DEFINE_BUG$1$3=v8PrototypeDefineBug$3,anObject$d$1=anObject$e$1,toPropertyKey$2$3=toPropertyKey$4$1,$TypeError$a$3=TypeError,$defineProperty$3=Object.defineProperty,$getOwnPropertyDescriptor$4=Object.getOwnPropertyDescriptor,ENUMERABLE$3="enumerable",CONFIGURABLE$1$3="configurable",WRITABLE$3="writable";objectDefineProperty$3.f=DESCRIPTORS$a$2?V8_PROTOTYPE_DEFINE_BUG$1$3?function o(a,c,d){if(anObject$d$1(a),c=toPropertyKey$2$3(c),anObject$d$1(d),typeof a=="function"&&c==="prototype"&&"value"in d&&WRITABLE$3 in d&&!d[WRITABLE$3]){var tt=$getOwnPropertyDescriptor$4(a,c);tt&&tt[WRITABLE$3]&&(a[c]=d.value,d={configurable:CONFIGURABLE$1$3 in d?d[CONFIGURABLE$1$3]:tt[CONFIGURABLE$1$3],enumerable:ENUMERABLE$3 in d?d[ENUMERABLE$3]:tt[ENUMERABLE$3],writable:!1})}return $defineProperty$3(a,c,d)}:$defineProperty$3:function o(a,c,d){if(anObject$d$1(a),c=toPropertyKey$2$3(c),anObject$d$1(d),IE8_DOM_DEFINE$4)try{return $defineProperty$3(a,c,d)}catch{}if("get"in d||"set"in d)throw $TypeError$a$3("Accessors not supported");return"value"in d&&(a[c]=d.value),a};var DESCRIPTORS$9$3=descriptors$3,definePropertyModule$6$1=objectDefineProperty$3,createPropertyDescriptor$3$3=createPropertyDescriptor$5$1,createNonEnumerableProperty$8=DESCRIPTORS$9$3?function(o,a,c){return definePropertyModule$6$1.f(o,a,createPropertyDescriptor$3$3(1,c))}:function(o,a,c){return o[a]=c,o},makeBuiltIn$2$3={exports:{}},DESCRIPTORS$8$3=descriptors$3,hasOwn$9$3=hasOwnProperty_1$3,FunctionPrototype$1$3=Function.prototype,getDescriptor$3=DESCRIPTORS$8$3&&Object.getOwnPropertyDescriptor,EXISTS$4=hasOwn$9$3(FunctionPrototype$1$3,"name"),PROPER$3=EXISTS$4&&(function o(){}).name==="something",CONFIGURABLE$4=EXISTS$4&&(!DESCRIPTORS$8$3||DESCRIPTORS$8$3&&getDescriptor$3(FunctionPrototype$1$3,"name").configurable),functionName$3={EXISTS:EXISTS$4,PROPER:PROPER$3,CONFIGURABLE:CONFIGURABLE$4},uncurryThis$j$1=functionUncurryThis$3,isCallable$h$3=isCallable$n$1,store$1$3=sharedStore$3,functionToString$3=uncurryThis$j$1(Function.toString);isCallable$h$3(store$1$3.inspectSource)||(store$1$3.inspectSource=function(o){return functionToString$3(o)});var inspectSource$4$3=store$1$3.inspectSource,global$m$1=global$t,isCallable$g$3=isCallable$n$1,inspectSource$3$3=inspectSource$4$3,WeakMap$1$3=global$m$1.WeakMap,nativeWeakMap$3=isCallable$g$3(WeakMap$1$3)&&/native code/.test(inspectSource$3$3(WeakMap$1$3)),shared$2$3=shared$4$1.exports,uid$1$3=uid$3$1,keys$1$1=shared$2$3("keys"),sharedKey$3$3=function(o){return keys$1$1[o]||(keys$1$1[o]=uid$1$3(o))},hiddenKeys$4$3={},NATIVE_WEAK_MAP$3=nativeWeakMap$3,global$l$1=global$t,uncurryThis$i$1=functionUncurryThis$3,isObject$8$2=isObject$d,createNonEnumerableProperty$7$1=createNonEnumerableProperty$8,hasOwn$8$3=hasOwnProperty_1$3,shared$1$3=sharedStore$3,sharedKey$2$3=sharedKey$3$3,hiddenKeys$3$3=hiddenKeys$4$3,OBJECT_ALREADY_INITIALIZED$3="Object already initialized",TypeError$3$1=global$l$1.TypeError,WeakMap$5=global$l$1.WeakMap,set$2$1,get$1$1,has$4,enforce$3=function(o){return has$4(o)?get$1$1(o):set$2$1(o,{})},getterFor$3=function(o){return function(a){var c;if(!isObject$8$2(a)||(c=get$1$1(a)).type!==o)throw TypeError$3$1("Incompatible receiver, "+o+" required");return c}};if(NATIVE_WEAK_MAP$3||shared$1$3.state){var store$7=shared$1$3.state||(shared$1$3.state=new WeakMap$5),wmget$3=uncurryThis$i$1(store$7.get),wmhas$3=uncurryThis$i$1(store$7.has),wmset$3=uncurryThis$i$1(store$7.set);set$2$1=function(o,a){if(wmhas$3(store$7,o))throw new TypeError$3$1(OBJECT_ALREADY_INITIALIZED$3);return a.facade=o,wmset$3(store$7,o,a),a},get$1$1=function(o){return wmget$3(store$7,o)||{}},has$4=function(o){return wmhas$3(store$7,o)}}else{var STATE$3=sharedKey$2$3("state");hiddenKeys$3$3[STATE$3]=!0,set$2$1=function(o,a){if(hasOwn$8$3(o,STATE$3))throw new TypeError$3$1(OBJECT_ALREADY_INITIALIZED$3);return a.facade=o,createNonEnumerableProperty$7$1(o,STATE$3,a),a},get$1$1=function(o){return hasOwn$8$3(o,STATE$3)?o[STATE$3]:{}},has$4=function(o){return hasOwn$8$3(o,STATE$3)}}var internalState$3={set:set$2$1,get:get$1$1,has:has$4,enforce:enforce$3,getterFor:getterFor$3},fails$l$1=fails$s,isCallable$f$3=isCallable$n$1,hasOwn$7$3=hasOwnProperty_1$3,DESCRIPTORS$7$3=descriptors$3,CONFIGURABLE_FUNCTION_NAME$2$1=functionName$3.CONFIGURABLE,inspectSource$2$3=inspectSource$4$3,InternalStateModule$5$1=internalState$3,enforceInternalState$2$1=InternalStateModule$5$1.enforce,getInternalState$5$1=InternalStateModule$5$1.get,defineProperty$6$2=Object.defineProperty,CONFIGURABLE_LENGTH$3=DESCRIPTORS$7$3&&!fails$l$1(function(){return defineProperty$6$2(function(){},"length",{value:8}).length!==8}),TEMPLATE$3=String(String).split("String"),makeBuiltIn$1$3=makeBuiltIn$2$3.exports=function(o,a,c){String(a).slice(0,7)==="Symbol("&&(a="["+String(a).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),c&&c.getter&&(a="get "+a),c&&c.setter&&(a="set "+a),(!hasOwn$7$3(o,"name")||CONFIGURABLE_FUNCTION_NAME$2$1&&o.name!==a)&&(DESCRIPTORS$7$3?defineProperty$6$2(o,"name",{value:a,configurable:!0}):o.name=a),CONFIGURABLE_LENGTH$3&&c&&hasOwn$7$3(c,"arity")&&o.length!==c.arity&&defineProperty$6$2(o,"length",{value:c.arity});try{c&&hasOwn$7$3(c,"constructor")&&c.constructor?DESCRIPTORS$7$3&&defineProperty$6$2(o,"prototype",{writable:!1}):o.prototype&&(o.prototype=void 0)}catch{}var d=enforceInternalState$2$1(o);return hasOwn$7$3(d,"source")||(d.source=TEMPLATE$3.join(typeof a=="string"?a:"")),o};Function.prototype.toString=makeBuiltIn$1$3(function o(){return isCallable$f$3(this)&&getInternalState$5$1(this).source||inspectSource$2$3(this)},"toString");var isCallable$e$3=isCallable$n$1,definePropertyModule$5$2=objectDefineProperty$3,makeBuiltIn$6=makeBuiltIn$2$3.exports,defineGlobalProperty$1$3=defineGlobalProperty$3$3,defineBuiltIn$8$1=function(o,a,c,d){d||(d={});var tt=d.enumerable,nt=d.name!==void 0?d.name:a;if(isCallable$e$3(c)&&makeBuiltIn$6(c,nt,d),d.global)tt?o[a]=c:defineGlobalProperty$1$3(a,c);else{try{d.unsafe?o[a]&&(tt=!0):delete o[a]}catch{}tt?o[a]=c:definePropertyModule$5$2.f(o,a,{value:c,enumerable:!1,configurable:!d.nonConfigurable,writable:!d.nonWritable})}return o},objectGetOwnPropertyNames$3={},ceil$3=Math.ceil,floor$3$1=Math.floor,mathTrunc$3=Math.trunc||function o(a){var c=+a;return(c>0?floor$3$1:ceil$3)(c)},trunc$3=mathTrunc$3,toIntegerOrInfinity$6$1=function(o){var a=+o;return a!==a||a===0?0:trunc$3(a)},toIntegerOrInfinity$5$1=toIntegerOrInfinity$6$1,max$1$2=Math.max,min$2$2=Math.min,toAbsoluteIndex$4$1=function(o,a){var c=toIntegerOrInfinity$5$1(o);return c<0?max$1$2(c+a,0):min$2$2(c,a)},toIntegerOrInfinity$4$1=toIntegerOrInfinity$6$1,min$1$3=Math.min,toLength$6=function(o){return o>0?min$1$3(toIntegerOrInfinity$4$1(o),9007199254740991):0},toLength$5=toLength$6,lengthOfArrayLike$8=function(o){return toLength$5(o.length)},toIndexedObject$4$3=toIndexedObject$6$1,toAbsoluteIndex$3$1=toAbsoluteIndex$4$1,lengthOfArrayLike$7$1=lengthOfArrayLike$8,createMethod$4=function(o){return function(a,c,d){var tt=toIndexedObject$4$3(a),nt=lengthOfArrayLike$7$1(tt),$a=toAbsoluteIndex$3$1(d,nt),Ws;if(o&&c!=c){for(;nt>$a;)if(Ws=tt[$a++],Ws!=Ws)return!0}else for(;nt>$a;$a++)if((o||$a in tt)&&tt[$a]===c)return o||$a||0;return!o&&-1}},arrayIncludes$3={includes:createMethod$4(!0),indexOf:createMethod$4(!1)},uncurryThis$h$2=functionUncurryThis$3,hasOwn$6$3=hasOwnProperty_1$3,toIndexedObject$3$3=toIndexedObject$6$1,indexOf$1$1=arrayIncludes$3.indexOf,hiddenKeys$2$3=hiddenKeys$4$3,push$2$1=uncurryThis$h$2([].push),objectKeysInternal$3=function(o,a){var c=toIndexedObject$3$3(o),d=0,tt=[],nt;for(nt in c)!hasOwn$6$3(hiddenKeys$2$3,nt)&&hasOwn$6$3(c,nt)&&push$2$1(tt,nt);for(;a.length>d;)hasOwn$6$3(c,nt=a[d++])&&(~indexOf$1$1(tt,nt)||push$2$1(tt,nt));return tt},enumBugKeys$3$3=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],internalObjectKeys$1$3=objectKeysInternal$3,enumBugKeys$2$3=enumBugKeys$3$3,hiddenKeys$1$3=enumBugKeys$2$3.concat("length","prototype");objectGetOwnPropertyNames$3.f=Object.getOwnPropertyNames||function o(a){return internalObjectKeys$1$3(a,hiddenKeys$1$3)};var objectGetOwnPropertySymbols$3={};objectGetOwnPropertySymbols$3.f=Object.getOwnPropertySymbols;var getBuiltIn$5$3=getBuiltIn$8$3,uncurryThis$g$2=functionUncurryThis$3,getOwnPropertyNamesModule$3=objectGetOwnPropertyNames$3,getOwnPropertySymbolsModule$1$2=objectGetOwnPropertySymbols$3,anObject$c$3=anObject$e$1,concat$1$2=uncurryThis$g$2([].concat),ownKeys$1$3=getBuiltIn$5$3("Reflect","ownKeys")||function o(a){var c=getOwnPropertyNamesModule$3.f(anObject$c$3(a)),d=getOwnPropertySymbolsModule$1$2.f;return d?concat$1$2(c,d(a)):c},hasOwn$5$3=hasOwnProperty_1$3,ownKeys$5=ownKeys$1$3,getOwnPropertyDescriptorModule$1$1=objectGetOwnPropertyDescriptor$3,definePropertyModule$4$3=objectDefineProperty$3,copyConstructorProperties$1$3=function(o,a,c){for(var d=ownKeys$5(a),tt=definePropertyModule$4$3.f,nt=getOwnPropertyDescriptorModule$1$1.f,$a=0;$a=51&&/native code/.test(o))return!1;var c=new NativePromiseConstructor$3$3(function(nt){nt(1)}),d=function(nt){nt(function(){},function(){})},tt=c.constructor={};return tt[SPECIES$2$3]=d,SUBCLASSING$3=c.then(function(){})instanceof d,SUBCLASSING$3?!a&&IS_BROWSER$4&&!NATIVE_PROMISE_REJECTION_EVENT$1$3:!0}),promiseConstructorDetection$3={CONSTRUCTOR:FORCED_PROMISE_CONSTRUCTOR$5$3,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT$1$3,SUBCLASSING:SUBCLASSING$3},newPromiseCapability$2$3={},aCallable$6$3=aCallable$9$1,PromiseCapability$3=function(o){var a,c;this.promise=new o(function(d,tt){if(a!==void 0||c!==void 0)throw TypeError("Bad Promise constructor");a=d,c=tt}),this.resolve=aCallable$6$3(a),this.reject=aCallable$6$3(c)};newPromiseCapability$2$3.f=function(o){return new PromiseCapability$3(o)};var $$e$1=_export$3,IS_NODE$1$3=engineIsNode$3,global$c$3=global$t,call$f$2=functionCall$3,defineBuiltIn$6$3=defineBuiltIn$8$1,setPrototypeOf$5=objectSetPrototypeOf$3,setToStringTag$3$3=setToStringTag$4$1,setSpecies$1$3=setSpecies$2$1,aCallable$5$3=aCallable$9$1,isCallable$7$3=isCallable$n$1,isObject$7$3=isObject$d,anInstance$2$1=anInstance$3$1,speciesConstructor$2$1=speciesConstructor$3$1,task$4=task$1$3.set,microtask$4=microtask$1$3,hostReportErrors$4=hostReportErrors$1$3,perform$2$3=perform$3$3,Queue$4=queue$4,InternalStateModule$4$1=internalState$3,NativePromiseConstructor$2$3=promiseNativeConstructor$3,PromiseConstructorDetection$3=promiseConstructorDetection$3,newPromiseCapabilityModule$3$3=newPromiseCapability$2$3,PROMISE$3="Promise",FORCED_PROMISE_CONSTRUCTOR$4$3=PromiseConstructorDetection$3.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT$4=PromiseConstructorDetection$3.REJECTION_EVENT,NATIVE_PROMISE_SUBCLASSING$3=PromiseConstructorDetection$3.SUBCLASSING,getInternalPromiseState$3=InternalStateModule$4$1.getterFor(PROMISE$3),setInternalState$3$1=InternalStateModule$4$1.set,NativePromisePrototype$1$3=NativePromiseConstructor$2$3&&NativePromiseConstructor$2$3.prototype,PromiseConstructor$3=NativePromiseConstructor$2$3,PromisePrototype$3=NativePromisePrototype$1$3,TypeError$2$3=global$c$3.TypeError,document$1$3=global$c$3.document,process$6=global$c$3.process,newPromiseCapability$1$3=newPromiseCapabilityModule$3$3.f,newGenericPromiseCapability$3=newPromiseCapability$1$3,DISPATCH_EVENT$3=!!(document$1$3&&document$1$3.createEvent&&global$c$3.dispatchEvent),UNHANDLED_REJECTION$3="unhandledrejection",REJECTION_HANDLED$3="rejectionhandled",PENDING$3=0,FULFILLED$3=1,REJECTED$3=2,HANDLED$3=1,UNHANDLED$3=2,Internal$3,OwnPromiseCapability$3,PromiseWrapper$3,nativeThen$3,isThenable$3=function(o){var a;return isObject$7$3(o)&&isCallable$7$3(a=o.then)?a:!1},callReaction$3=function(o,a){var c=a.value,d=a.state==FULFILLED$3,tt=d?o.ok:o.fail,nt=o.resolve,$a=o.reject,Ws=o.domain,gu,Su,$u;try{tt?(d||(a.rejection===UNHANDLED$3&&onHandleUnhandled$3(a),a.rejection=HANDLED$3),tt===!0?gu=c:(Ws&&Ws.enter(),gu=tt(c),Ws&&(Ws.exit(),$u=!0)),gu===o.promise?$a(TypeError$2$3("Promise-chain cycle")):(Su=isThenable$3(gu))?call$f$2(Su,gu,nt,$a):nt(gu)):$a(c)}catch(Iu){Ws&&!$u&&Ws.exit(),$a(Iu)}},notify$4=function(o,a){o.notified||(o.notified=!0,microtask$4(function(){for(var c=o.reactions,d;d=c.get();)callReaction$3(d,o);o.notified=!1,a&&!o.rejection&&onUnhandled$3(o)}))},dispatchEvent$3=function(o,a,c){var d,tt;DISPATCH_EVENT$3?(d=document$1$3.createEvent("Event"),d.promise=a,d.reason=c,d.initEvent(o,!1,!0),global$c$3.dispatchEvent(d)):d={promise:a,reason:c},!NATIVE_PROMISE_REJECTION_EVENT$4&&(tt=global$c$3["on"+o])?tt(d):o===UNHANDLED_REJECTION$3&&hostReportErrors$4("Unhandled promise rejection",c)},onUnhandled$3=function(o){call$f$2(task$4,global$c$3,function(){var a=o.facade,c=o.value,d=isUnhandled$3(o),tt;if(d&&(tt=perform$2$3(function(){IS_NODE$1$3?process$6.emit("unhandledRejection",c,a):dispatchEvent$3(UNHANDLED_REJECTION$3,a,c)}),o.rejection=IS_NODE$1$3||isUnhandled$3(o)?UNHANDLED$3:HANDLED$3,tt.error))throw tt.value})},isUnhandled$3=function(o){return o.rejection!==HANDLED$3&&!o.parent},onHandleUnhandled$3=function(o){call$f$2(task$4,global$c$3,function(){var a=o.facade;IS_NODE$1$3?process$6.emit("rejectionHandled",a):dispatchEvent$3(REJECTION_HANDLED$3,a,o.value)})},bind$3$3=function(o,a,c){return function(d){o(a,d,c)}},internalReject$3=function(o,a,c){o.done||(o.done=!0,c&&(o=c),o.value=a,o.state=REJECTED$3,notify$4(o,!0))},internalResolve$3=function(o,a,c){if(!o.done){o.done=!0,c&&(o=c);try{if(o.facade===a)throw TypeError$2$3("Promise can't be resolved itself");var d=isThenable$3(a);d?microtask$4(function(){var tt={done:!1};try{call$f$2(d,a,bind$3$3(internalResolve$3,tt,o),bind$3$3(internalReject$3,tt,o))}catch(nt){internalReject$3(tt,nt,o)}}):(o.value=a,o.state=FULFILLED$3,notify$4(o,!1))}catch(tt){internalReject$3({done:!1},tt,o)}}};if(FORCED_PROMISE_CONSTRUCTOR$4$3&&(PromiseConstructor$3=function(a){anInstance$2$1(this,PromisePrototype$3),aCallable$5$3(a),call$f$2(Internal$3,this);var c=getInternalPromiseState$3(this);try{a(bind$3$3(internalResolve$3,c),bind$3$3(internalReject$3,c))}catch(d){internalReject$3(c,d)}},PromisePrototype$3=PromiseConstructor$3.prototype,Internal$3=function(a){setInternalState$3$1(this,{type:PROMISE$3,done:!1,notified:!1,parent:!1,reactions:new Queue$4,rejection:!1,state:PENDING$3,value:void 0})},Internal$3.prototype=defineBuiltIn$6$3(PromisePrototype$3,"then",function(a,c){var d=getInternalPromiseState$3(this),tt=newPromiseCapability$1$3(speciesConstructor$2$1(this,PromiseConstructor$3));return d.parent=!0,tt.ok=isCallable$7$3(a)?a:!0,tt.fail=isCallable$7$3(c)&&c,tt.domain=IS_NODE$1$3?process$6.domain:void 0,d.state==PENDING$3?d.reactions.add(tt):microtask$4(function(){callReaction$3(tt,d)}),tt.promise}),OwnPromiseCapability$3=function(){var o=new Internal$3,a=getInternalPromiseState$3(o);this.promise=o,this.resolve=bind$3$3(internalResolve$3,a),this.reject=bind$3$3(internalReject$3,a)},newPromiseCapabilityModule$3$3.f=newPromiseCapability$1$3=function(o){return o===PromiseConstructor$3||o===PromiseWrapper$3?new OwnPromiseCapability$3(o):newGenericPromiseCapability$3(o)},isCallable$7$3(NativePromiseConstructor$2$3)&&NativePromisePrototype$1$3!==Object.prototype)){nativeThen$3=NativePromisePrototype$1$3.then,NATIVE_PROMISE_SUBCLASSING$3||defineBuiltIn$6$3(NativePromisePrototype$1$3,"then",function(a,c){var d=this;return new PromiseConstructor$3(function(tt,nt){call$f$2(nativeThen$3,d,tt,nt)}).then(a,c)},{unsafe:!0});try{delete NativePromisePrototype$1$3.constructor}catch{}setPrototypeOf$5&&setPrototypeOf$5(NativePromisePrototype$1$3,PromisePrototype$3)}$$e$1({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR$4$3},{Promise:PromiseConstructor$3});setToStringTag$3$3(PromiseConstructor$3,PROMISE$3,!1);setSpecies$1$3(PROMISE$3);var iterators$3={},wellKnownSymbol$b$3=wellKnownSymbol$j$1,Iterators$4$3=iterators$3,ITERATOR$5$3=wellKnownSymbol$b$3("iterator"),ArrayPrototype$1$3=Array.prototype,isArrayIteratorMethod$2$1=function(o){return o!==void 0&&(Iterators$4$3.Array===o||ArrayPrototype$1$3[ITERATOR$5$3]===o)},classof$7$1=classof$9$1,getMethod$2$3=getMethod$4$1,Iterators$3$3=iterators$3,wellKnownSymbol$a$3=wellKnownSymbol$j$1,ITERATOR$4$3=wellKnownSymbol$a$3("iterator"),getIteratorMethod$3$1=function(o){if(o!=null)return getMethod$2$3(o,ITERATOR$4$3)||getMethod$2$3(o,"@@iterator")||Iterators$3$3[classof$7$1(o)]},call$e$3=functionCall$3,aCallable$4$3=aCallable$9$1,anObject$9$3=anObject$e$1,tryToString$2$3=tryToString$5$1,getIteratorMethod$2$3=getIteratorMethod$3$1,$TypeError$5$3=TypeError,getIterator$2$1=function(o,a){var c=arguments.length<2?getIteratorMethod$2$3(o):a;if(aCallable$4$3(c))return anObject$9$3(call$e$3(c,o));throw $TypeError$5$3(tryToString$2$3(o)+" is not iterable")},call$d$3=functionCall$3,anObject$8$3=anObject$e$1,getMethod$1$3=getMethod$4$1,iteratorClose$1$3=function(o,a,c){var d,tt;anObject$8$3(o);try{if(d=getMethod$1$3(o,"return"),!d){if(a==="throw")throw c;return c}d=call$d$3(d,o)}catch(nt){tt=!0,d=nt}if(a==="throw")throw c;if(tt)throw d;return anObject$8$3(d),c},bind$2$3=functionBindContext$3,call$c$3=functionCall$3,anObject$7$3=anObject$e$1,tryToString$1$3=tryToString$5$1,isArrayIteratorMethod$1$3=isArrayIteratorMethod$2$1,lengthOfArrayLike$6$1=lengthOfArrayLike$8,isPrototypeOf$2$3=objectIsPrototypeOf$3,getIterator$1$3=getIterator$2$1,getIteratorMethod$1$3=getIteratorMethod$3$1,iteratorClose$5=iteratorClose$1$3,$TypeError$4$3=TypeError,Result$3=function(o,a){this.stopped=o,this.result=a},ResultPrototype$3=Result$3.prototype,iterate$2$3=function(o,a,c){var d=c&&c.that,tt=!!(c&&c.AS_ENTRIES),nt=!!(c&&c.IS_ITERATOR),$a=!!(c&&c.INTERRUPTED),Ws=bind$2$3(a,d),gu,Su,$u,Iu,Xu,r0,p0,y0=function($0){return gu&&iteratorClose$5(gu,"normal",$0),new Result$3(!0,$0)},A0=function($0){return tt?(anObject$7$3($0),$a?Ws($0[0],$0[1],y0):Ws($0[0],$0[1])):$a?Ws($0,y0):Ws($0)};if(nt)gu=o;else{if(Su=getIteratorMethod$1$3(o),!Su)throw $TypeError$4$3(tryToString$1$3(o)+" is not iterable");if(isArrayIteratorMethod$1$3(Su)){for($u=0,Iu=lengthOfArrayLike$6$1(o);Iu>$u;$u++)if(Xu=A0(o[$u]),Xu&&isPrototypeOf$2$3(ResultPrototype$3,Xu))return Xu;return new Result$3(!1)}gu=getIterator$1$3(o,Su)}for(r0=gu.next;!(p0=call$c$3(r0,gu)).done;){try{Xu=A0(p0.value)}catch($0){iteratorClose$5(gu,"throw",$0)}if(typeof Xu=="object"&&Xu&&isPrototypeOf$2$3(ResultPrototype$3,Xu))return Xu}return new Result$3(!1)},wellKnownSymbol$9$3=wellKnownSymbol$j$1,ITERATOR$3$3=wellKnownSymbol$9$3("iterator"),SAFE_CLOSING$3=!1;try{var called$3=0,iteratorWithReturn$3={next:function(){return{done:!!called$3++}},return:function(){SAFE_CLOSING$3=!0}};iteratorWithReturn$3[ITERATOR$3$3]=function(){return this},Array.from(iteratorWithReturn$3,function(){throw 2})}catch(o){}var checkCorrectnessOfIteration$2$1=function(o,a){if(!a&&!SAFE_CLOSING$3)return!1;var c=!1;try{var d={};d[ITERATOR$3$3]=function(){return{next:function(){return{done:c=!0}}}},o(d)}catch{}return c},NativePromiseConstructor$1$3=promiseNativeConstructor$3,checkCorrectnessOfIteration$1$3=checkCorrectnessOfIteration$2$1,FORCED_PROMISE_CONSTRUCTOR$3$3=promiseConstructorDetection$3.CONSTRUCTOR,promiseStaticsIncorrectIteration$3=FORCED_PROMISE_CONSTRUCTOR$3$3||!checkCorrectnessOfIteration$1$3(function(o){NativePromiseConstructor$1$3.all(o).then(void 0,function(){})}),$$d$1=_export$3,call$b$3=functionCall$3,aCallable$3$3=aCallable$9$1,newPromiseCapabilityModule$2$3=newPromiseCapability$2$3,perform$1$3=perform$3$3,iterate$1$3=iterate$2$3,PROMISE_STATICS_INCORRECT_ITERATION$1$3=promiseStaticsIncorrectIteration$3;$$d$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$1$3},{all:function o(a){var c=this,d=newPromiseCapabilityModule$2$3.f(c),tt=d.resolve,nt=d.reject,$a=perform$1$3(function(){var Ws=aCallable$3$3(c.resolve),gu=[],Su=0,$u=1;iterate$1$3(a,function(Iu){var Xu=Su++,r0=!1;$u++,call$b$3(Ws,c,Iu).then(function(p0){r0||(r0=!0,gu[Xu]=p0,--$u||tt(gu))},nt)}),--$u||tt(gu)});return $a.error&&nt($a.value),d.promise}});var $$c$1=_export$3,FORCED_PROMISE_CONSTRUCTOR$2$3=promiseConstructorDetection$3.CONSTRUCTOR,NativePromiseConstructor$6=promiseNativeConstructor$3,getBuiltIn$1$3=getBuiltIn$8$3,isCallable$6$3=isCallable$n$1,defineBuiltIn$5$3=defineBuiltIn$8$1,NativePromisePrototype$4=NativePromiseConstructor$6&&NativePromiseConstructor$6.prototype;$$c$1({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR$2$3,real:!0},{catch:function(o){return this.then(void 0,o)}});if(isCallable$6$3(NativePromiseConstructor$6)){var method$3=getBuiltIn$1$3("Promise").prototype.catch;NativePromisePrototype$4.catch!==method$3&&defineBuiltIn$5$3(NativePromisePrototype$4,"catch",method$3,{unsafe:!0})}var $$b$1=_export$3,call$a$3=functionCall$3,aCallable$2$3=aCallable$9$1,newPromiseCapabilityModule$1$3=newPromiseCapability$2$3,perform$6=perform$3$3,iterate$5=iterate$2$3,PROMISE_STATICS_INCORRECT_ITERATION$4=promiseStaticsIncorrectIteration$3;$$b$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$4},{race:function o(a){var c=this,d=newPromiseCapabilityModule$1$3.f(c),tt=d.reject,nt=perform$6(function(){var $a=aCallable$2$3(c.resolve);iterate$5(a,function(Ws){call$a$3($a,c,Ws).then(d.resolve,tt)})});return nt.error&&tt(nt.value),d.promise}});var $$a$2=_export$3,call$9$3=functionCall$3,newPromiseCapabilityModule$6=newPromiseCapability$2$3,FORCED_PROMISE_CONSTRUCTOR$1$3=promiseConstructorDetection$3.CONSTRUCTOR;$$a$2({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$1$3},{reject:function o(a){var c=newPromiseCapabilityModule$6.f(this);return call$9$3(c.reject,void 0,a),c.promise}});var anObject$6$3=anObject$e$1,isObject$6$3=isObject$d,newPromiseCapability$5=newPromiseCapability$2$3,promiseResolve$1$3=function(o,a){if(anObject$6$3(o),isObject$6$3(a)&&a.constructor===o)return a;var c=newPromiseCapability$5.f(o),d=c.resolve;return d(a),c.promise},$$9$2=_export$3,getBuiltIn$b=getBuiltIn$8$3,FORCED_PROMISE_CONSTRUCTOR$8=promiseConstructorDetection$3.CONSTRUCTOR,promiseResolve$4=promiseResolve$1$3;getBuiltIn$b("Promise");$$9$2({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$8},{resolve:function o(a){return promiseResolve$4(this,a)}});class WebStorageService{getItem(a){return new Promise(c=>{const d=localStorage.getItem(a);c(d)})}setItem(a,c){return new Promise(d=>{localStorage.setItem(a,c),d()})}removeItem(a){return new Promise(c=>{localStorage.removeItem(a),c()})}}var objectDefineProperties$3={},internalObjectKeys$4=objectKeysInternal$3,enumBugKeys$1$3=enumBugKeys$3$3,objectKeys$2$2=Object.keys||function o(a){return internalObjectKeys$4(a,enumBugKeys$1$3)},DESCRIPTORS$5$3=descriptors$3,V8_PROTOTYPE_DEFINE_BUG$4=v8PrototypeDefineBug$3,definePropertyModule$2$3=objectDefineProperty$3,anObject$5$3=anObject$e$1,toIndexedObject$2$3=toIndexedObject$6$1,objectKeys$1$3=objectKeys$2$2;objectDefineProperties$3.f=DESCRIPTORS$5$3&&!V8_PROTOTYPE_DEFINE_BUG$4?Object.defineProperties:function o(a,c){anObject$5$3(a);for(var d=toIndexedObject$2$3(c),tt=objectKeys$1$3(c),nt=tt.length,$a=0,Ws;nt>$a;)definePropertyModule$2$3.f(a,Ws=tt[$a++],d[Ws]);return a};var anObject$4$3=anObject$e$1,definePropertiesModule$3=objectDefineProperties$3,enumBugKeys$6=enumBugKeys$3$3,hiddenKeys$7=hiddenKeys$4$3,html$5=html$2$3,documentCreateElement$1$3=documentCreateElement$2$3,sharedKey$1$3=sharedKey$3$3,GT$3=">",LT$3="<",PROTOTYPE$1$1="prototype",SCRIPT$3="script",IE_PROTO$1$3=sharedKey$1$3("IE_PROTO"),EmptyConstructor$3=function(){},scriptTag$3=function(o){return LT$3+SCRIPT$3+GT$3+o+LT$3+"/"+SCRIPT$3+GT$3},NullProtoObjectViaActiveX$3=function(o){o.write(scriptTag$3("")),o.close();var a=o.parentWindow.Object;return o=null,a},NullProtoObjectViaIFrame$3=function(){var o=documentCreateElement$1$3("iframe"),a="java"+SCRIPT$3+":",c;return o.style.display="none",html$5.appendChild(o),o.src=String(a),c=o.contentWindow.document,c.open(),c.write(scriptTag$3("document.F=Object")),c.close(),c.F},activeXDocument$3,NullProtoObject$3=function(){try{activeXDocument$3=new ActiveXObject("htmlfile")}catch{}NullProtoObject$3=typeof document<"u"?document.domain&&activeXDocument$3?NullProtoObjectViaActiveX$3(activeXDocument$3):NullProtoObjectViaIFrame$3():NullProtoObjectViaActiveX$3(activeXDocument$3);for(var o=enumBugKeys$6.length;o--;)delete NullProtoObject$3[PROTOTYPE$1$1][enumBugKeys$6[o]];return NullProtoObject$3()};hiddenKeys$7[IE_PROTO$1$3]=!0;var objectCreate$3=Object.create||function o(a,c){var d;return a!==null?(EmptyConstructor$3[PROTOTYPE$1$1]=anObject$4$3(a),d=new EmptyConstructor$3,EmptyConstructor$3[PROTOTYPE$1$1]=null,d[IE_PROTO$1$3]=a):d=NullProtoObject$3(),c===void 0?d:definePropertiesModule$3.f(d,c)},wellKnownSymbol$8$3=wellKnownSymbol$j$1,create$3$1=objectCreate$3,defineProperty$4$3=objectDefineProperty$3.f,UNSCOPABLES$3=wellKnownSymbol$8$3("unscopables"),ArrayPrototype$4=Array.prototype;ArrayPrototype$4[UNSCOPABLES$3]==null&&defineProperty$4$3(ArrayPrototype$4,UNSCOPABLES$3,{configurable:!0,value:create$3$1(null)});var addToUnscopables$2$1=function(o){ArrayPrototype$4[UNSCOPABLES$3][o]=!0},fails$h$2=fails$s,correctPrototypeGetter$3=!fails$h$2(function(){function o(){}return o.prototype.constructor=null,Object.getPrototypeOf(new o)!==o.prototype}),hasOwn$2$3=hasOwnProperty_1$3,isCallable$5$3=isCallable$n$1,toObject$5$2=toObject$7$1,sharedKey$6=sharedKey$3$3,CORRECT_PROTOTYPE_GETTER$3=correctPrototypeGetter$3,IE_PROTO$4=sharedKey$6("IE_PROTO"),$Object$7=Object,ObjectPrototype$2$1=$Object$7.prototype,objectGetPrototypeOf$3=CORRECT_PROTOTYPE_GETTER$3?$Object$7.getPrototypeOf:function(o){var a=toObject$5$2(o);if(hasOwn$2$3(a,IE_PROTO$4))return a[IE_PROTO$4];var c=a.constructor;return isCallable$5$3(c)&&a instanceof c?c.prototype:a instanceof $Object$7?ObjectPrototype$2$1:null},fails$g$2=fails$s,isCallable$4$3=isCallable$n$1,getPrototypeOf$3$1=objectGetPrototypeOf$3,defineBuiltIn$4$3=defineBuiltIn$8$1,wellKnownSymbol$7$3=wellKnownSymbol$j$1,ITERATOR$2$3=wellKnownSymbol$7$3("iterator"),BUGGY_SAFARI_ITERATORS$1$3=!1,IteratorPrototype$2$3,PrototypeOfArrayIteratorPrototype$3,arrayIterator$3;[].keys&&(arrayIterator$3=[].keys(),"next"in arrayIterator$3?(PrototypeOfArrayIteratorPrototype$3=getPrototypeOf$3$1(getPrototypeOf$3$1(arrayIterator$3)),PrototypeOfArrayIteratorPrototype$3!==Object.prototype&&(IteratorPrototype$2$3=PrototypeOfArrayIteratorPrototype$3)):BUGGY_SAFARI_ITERATORS$1$3=!0);var NEW_ITERATOR_PROTOTYPE$3=IteratorPrototype$2$3==null||fails$g$2(function(){var o={};return IteratorPrototype$2$3[ITERATOR$2$3].call(o)!==o});NEW_ITERATOR_PROTOTYPE$3&&(IteratorPrototype$2$3={});isCallable$4$3(IteratorPrototype$2$3[ITERATOR$2$3])||defineBuiltIn$4$3(IteratorPrototype$2$3,ITERATOR$2$3,function(){return this});var iteratorsCore$3={IteratorPrototype:IteratorPrototype$2$3,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS$1$3},IteratorPrototype$1$3=iteratorsCore$3.IteratorPrototype,create$2$1=objectCreate$3,createPropertyDescriptor$2$3=createPropertyDescriptor$5$1,setToStringTag$2$3=setToStringTag$4$1,Iterators$2$3=iterators$3,returnThis$1$3=function(){return this},createIteratorConstructor$1$3=function(o,a,c,d){var tt=a+" Iterator";return o.prototype=create$2$1(IteratorPrototype$1$3,{next:createPropertyDescriptor$2$3(+!d,c)}),setToStringTag$2$3(o,tt,!1),Iterators$2$3[tt]=returnThis$1$3,o},$$8$2=_export$3,call$8$3=functionCall$3,FunctionName$1$1=functionName$3,isCallable$3$3=isCallable$n$1,createIteratorConstructor$5=createIteratorConstructor$1$3,getPrototypeOf$2$1=objectGetPrototypeOf$3,setPrototypeOf$4=objectSetPrototypeOf$3,setToStringTag$1$3=setToStringTag$4$1,createNonEnumerableProperty$5$1=createNonEnumerableProperty$8,defineBuiltIn$3$3=defineBuiltIn$8$1,wellKnownSymbol$6$3=wellKnownSymbol$j$1,Iterators$1$3=iterators$3,IteratorsCore$3=iteratorsCore$3,PROPER_FUNCTION_NAME$2$1=FunctionName$1$1.PROPER,CONFIGURABLE_FUNCTION_NAME$1$3=FunctionName$1$1.CONFIGURABLE,IteratorPrototype$5=IteratorsCore$3.IteratorPrototype,BUGGY_SAFARI_ITERATORS$4=IteratorsCore$3.BUGGY_SAFARI_ITERATORS,ITERATOR$1$3=wellKnownSymbol$6$3("iterator"),KEYS$3="keys",VALUES$3="values",ENTRIES$3="entries",returnThis$4=function(){return this},defineIterator$1$3=function(o,a,c,d,tt,nt,$a){createIteratorConstructor$5(c,a,d);var Ws=function($0){if($0===tt&&Xu)return Xu;if(!BUGGY_SAFARI_ITERATORS$4&&$0 in $u)return $u[$0];switch($0){case KEYS$3:return function(){return new c(this,$0)};case VALUES$3:return function(){return new c(this,$0)};case ENTRIES$3:return function(){return new c(this,$0)}}return function(){return new c(this)}},gu=a+" Iterator",Su=!1,$u=o.prototype,Iu=$u[ITERATOR$1$3]||$u["@@iterator"]||tt&&$u[tt],Xu=!BUGGY_SAFARI_ITERATORS$4&&Iu||Ws(tt),r0=a=="Array"&&$u.entries||Iu,p0,y0,A0;if(r0&&(p0=getPrototypeOf$2$1(r0.call(new o)),p0!==Object.prototype&&p0.next&&(getPrototypeOf$2$1(p0)!==IteratorPrototype$5&&(setPrototypeOf$4?setPrototypeOf$4(p0,IteratorPrototype$5):isCallable$3$3(p0[ITERATOR$1$3])||defineBuiltIn$3$3(p0,ITERATOR$1$3,returnThis$4)),setToStringTag$1$3(p0,gu,!0))),PROPER_FUNCTION_NAME$2$1&&tt==VALUES$3&&Iu&&Iu.name!==VALUES$3&&(CONFIGURABLE_FUNCTION_NAME$1$3?createNonEnumerableProperty$5$1($u,"name",VALUES$3):(Su=!0,Xu=function(){return call$8$3(Iu,this)})),tt)if(y0={values:Ws(VALUES$3),keys:nt?Xu:Ws(KEYS$3),entries:Ws(ENTRIES$3)},$a)for(A0 in y0)(BUGGY_SAFARI_ITERATORS$4||Su||!(A0 in $u))&&defineBuiltIn$3$3($u,A0,y0[A0]);else $$8$2({target:a,proto:!0,forced:BUGGY_SAFARI_ITERATORS$4||Su},y0);return $u[ITERATOR$1$3]!==Xu&&defineBuiltIn$3$3($u,ITERATOR$1$3,Xu,{name:tt}),Iterators$1$3[a]=Xu,y0},toIndexedObject$1$3=toIndexedObject$6$1,addToUnscopables$1$3=addToUnscopables$2$1,Iterators$7=iterators$3,InternalStateModule$3$1=internalState$3,defineProperty$3$3=objectDefineProperty$3.f,defineIterator$5=defineIterator$1$3,DESCRIPTORS$4$3=descriptors$3,ARRAY_ITERATOR$3="Array Iterator",setInternalState$2$1=InternalStateModule$3$1.set,getInternalState$4$1=InternalStateModule$3$1.getterFor(ARRAY_ITERATOR$3),es_array_iterator$3=defineIterator$5(Array,"Array",function(o,a){setInternalState$2$1(this,{type:ARRAY_ITERATOR$3,target:toIndexedObject$1$3(o),index:0,kind:a})},function(){var o=getInternalState$4$1(this),a=o.target,c=o.kind,d=o.index++;return!a||d>=a.length?(o.target=void 0,{value:void 0,done:!0}):c=="keys"?{value:d,done:!1}:c=="values"?{value:a[d],done:!1}:{value:[d,a[d]],done:!1}},"values"),values$3=Iterators$7.Arguments=Iterators$7.Array;addToUnscopables$1$3("keys");addToUnscopables$1$3("values");addToUnscopables$1$3("entries");if(DESCRIPTORS$4$3&&values$3.name!=="values")try{defineProperty$3$3(values$3,"name",{value:"values"})}catch(o){}var domIterables$3={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},documentCreateElement$5=documentCreateElement$2$3,classList$3=documentCreateElement$5("span").classList,DOMTokenListPrototype$1$3=classList$3&&classList$3.constructor&&classList$3.constructor.prototype,domTokenListPrototype$3=DOMTokenListPrototype$1$3===Object.prototype?void 0:DOMTokenListPrototype$1$3,global$b$3=global$t,DOMIterables$3=domIterables$3,DOMTokenListPrototype$4=domTokenListPrototype$3,ArrayIteratorMethods$3=es_array_iterator$3,createNonEnumerableProperty$4$3=createNonEnumerableProperty$8,wellKnownSymbol$5$3=wellKnownSymbol$j$1,ITERATOR$a=wellKnownSymbol$5$3("iterator"),TO_STRING_TAG$1$3=wellKnownSymbol$5$3("toStringTag"),ArrayValues$3=ArrayIteratorMethods$3.values,handlePrototype$3=function(o,a){if(o){if(o[ITERATOR$a]!==ArrayValues$3)try{createNonEnumerableProperty$4$3(o,ITERATOR$a,ArrayValues$3)}catch{o[ITERATOR$a]=ArrayValues$3}if(o[TO_STRING_TAG$1$3]||createNonEnumerableProperty$4$3(o,TO_STRING_TAG$1$3,a),DOMIterables$3[a]){for(var c in ArrayIteratorMethods$3)if(o[c]!==ArrayIteratorMethods$3[c])try{createNonEnumerableProperty$4$3(o,c,ArrayIteratorMethods$3[c])}catch{o[c]=ArrayIteratorMethods$3[c]}}}};for(var COLLECTION_NAME$3 in DOMIterables$3)handlePrototype$3(global$b$3[COLLECTION_NAME$3]&&global$b$3[COLLECTION_NAME$3].prototype,COLLECTION_NAME$3);handlePrototype$3(DOMTokenListPrototype$4,"DOMTokenList");let Logger$1=class Ove{constructor(a){this.namespace=a}emit(a,...c){if(Ove.debug){if(this.namespace&&a!=="error"){console[a](this.namespace,...c);return}console[a](...c)}}log(...a){this.emit("log",...a)}info(...a){this.emit("info",...a)}warn(...a){this.emit("warn",...a)}error(...a){this.emit("error",...a)}};Logger$1.debug=!1;const logger=new Logger$1;var $$7$2=_export$3,$includes$1=arrayIncludes$3.includes,fails$f$2=fails$s,addToUnscopables$5=addToUnscopables$2$1,BROKEN_ON_SPARSE$1=fails$f$2(function(){return!Array(1).includes()});$$7$2({target:"Array",proto:!0,forced:BROKEN_ON_SPARSE$1},{includes:function o(a){return $includes$1(this,a,arguments.length>1?arguments[1]:void 0)}});addToUnscopables$5("includes");var isObject$5$3=isObject$d,classof$6$2=classofRaw$1$3,wellKnownSymbol$4$3=wellKnownSymbol$j$1,MATCH$1$1=wellKnownSymbol$4$3("match"),isRegexp$1=function(o){var a;return isObject$5$3(o)&&((a=o[MATCH$1$1])!==void 0?!!a:classof$6$2(o)=="RegExp")},isRegExp$1=isRegexp$1,$TypeError$3$3=TypeError,notARegexp$1=function(o){if(isRegExp$1(o))throw $TypeError$3$3("The method doesn't accept regular expressions");return o},classof$5$3=classof$9$1,$String$6=String,toString$5$2=function(o){if(classof$5$3(o)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return $String$6(o)},wellKnownSymbol$3$3=wellKnownSymbol$j$1,MATCH$3=wellKnownSymbol$3$3("match"),correctIsRegexpLogic$1=function(o){var a=/./;try{"/./"[o](a)}catch{try{return a[MATCH$3]=!1,"/./"[o](a)}catch{}}return!1},$$6$3=_export$3,uncurryThis$b$3=functionUncurryThis$3,notARegExp$1=notARegexp$1,requireObjectCoercible$3$2=requireObjectCoercible$6$1,toString$4$2=toString$5$2,correctIsRegExpLogic$1=correctIsRegexpLogic$1,stringIndexOf$2=uncurryThis$b$3("".indexOf);$$6$3({target:"String",proto:!0,forced:!correctIsRegExpLogic$1("includes")},{includes:function o(a){return!!~stringIndexOf$2(toString$4$2(requireObjectCoercible$3$2(this)),toString$4$2(notARegExp$1(a)),arguments.length>1?arguments[1]:void 0)}});var whitespaces$2=` +\v\f\r                 \u2028\u2029\uFEFF`,uncurryThis$a$3=functionUncurryThis$3,requireObjectCoercible$2$3=requireObjectCoercible$6$1,toString$3$2=toString$5$2,whitespaces$1=whitespaces$2,replace$1$1=uncurryThis$a$3("".replace),whitespace="["+whitespaces$1+"]",ltrim=RegExp("^"+whitespace+whitespace+"*"),rtrim=RegExp(whitespace+whitespace+"*$"),createMethod$3$1=function(o){return function(a){var c=toString$3$2(requireObjectCoercible$2$3(a));return o&1&&(c=replace$1$1(c,ltrim,"")),o&2&&(c=replace$1$1(c,rtrim,"")),c}},stringTrim={start:createMethod$3$1(1),end:createMethod$3$1(2),trim:createMethod$3$1(3)},PROPER_FUNCTION_NAME$1$3=functionName$3.PROPER,fails$e$2=fails$s,whitespaces=whitespaces$2,non="​…᠎",stringTrimForced=function(o){return fails$e$2(function(){return!!whitespaces[o]()||non[o]()!==non||PROPER_FUNCTION_NAME$1$3&&whitespaces[o].name!==o})},$$5$3=_export$3,$trim=stringTrim.trim,forcedStringTrimMethod=stringTrimForced;$$5$3({target:"String",proto:!0,forced:forcedStringTrimMethod("trim")},{trim:function o(){return $trim(this)}});var DESCRIPTORS$3$3=descriptors$3,uncurryThis$9$3=functionUncurryThis$3,call$7$3=functionCall$3,fails$d$3=fails$s,objectKeys$5=objectKeys$2$2,getOwnPropertySymbolsModule$4=objectGetOwnPropertySymbols$3,propertyIsEnumerableModule$4=objectPropertyIsEnumerable$3,toObject$4$2=toObject$7$1,IndexedObject$2$1=indexedObject$3,$assign$2=Object.assign,defineProperty$2$3=Object.defineProperty,concat$5=uncurryThis$9$3([].concat),objectAssign$2=!$assign$2||fails$d$3(function(){if(DESCRIPTORS$3$3&&$assign$2({b:1},$assign$2(defineProperty$2$3({},"a",{enumerable:!0,get:function(){defineProperty$2$3(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var o={},a={},c=Symbol(),d="abcdefghijklmnopqrst";return o[c]=7,d.split("").forEach(function(tt){a[tt]=tt}),$assign$2({},o)[c]!=7||objectKeys$5($assign$2({},a)).join("")!=d})?function o(a,c){for(var d=toObject$4$2(a),tt=arguments.length,nt=1,$a=getOwnPropertySymbolsModule$4.f,Ws=propertyIsEnumerableModule$4.f;tt>nt;)for(var gu=IndexedObject$2$1(arguments[nt++]),Su=$a?concat$5(objectKeys$5(gu),$a(gu)):objectKeys$5(gu),$u=Su.length,Iu=0,Xu;$u>Iu;)Xu=Su[Iu++],(!DESCRIPTORS$3$3||call$7$3(Ws,gu,Xu))&&(d[Xu]=gu[Xu]);return d}:$assign$2,$$4$3=_export$3,assign$3=objectAssign$2;$$4$3({target:"Object",stat:!0,arity:2,forced:Object.assign!==assign$3},{assign:assign$3});class EventEmitter{constructor(){this.emitter=new eventsExports.EventEmitter}on(a,c){return this.emitter.on(a,c),{remove:()=>this.emitter.off(a,c)}}off(a,c){this.emitter.off(a,c)}emit(a,c){this.emitter.emit(a,c)}}const PACKAGE_NAME="near-wallet-selector",RECENTLY_SIGNED_IN_WALLETS="recentlySignedInWallets",CONTRACT="contract",PENDING_CONTRACT="contract:pending",SELECTED_WALLET_ID="selectedWalletId",PENDING_SELECTED_WALLET_ID="selectedWalletId:pending";class WalletModules{constructor({factories:a,storage:c,options:d,store:tt,emitter:nt,provider:$a}){this.factories=a,this.storage=c,this.options=d,this.store=tt,this.emitter=nt,this.provider=$a,this.modules=[],this.instances={}}validateWallet(a){return __awaiter$2(this,void 0,void 0,function*(){let c=[];const d=yield this.getWallet(a);return d&&(c=yield d.getAccounts().catch(tt=>(logger.log(`Failed to validate ${d.id} during setup`),logger.error(tt),[]))),c})}resolveStorageState(){return __awaiter$2(this,void 0,void 0,function*(){const a=new JsonStorage(this.storage,PACKAGE_NAME),c=yield a.getItem(PENDING_SELECTED_WALLET_ID),d=yield a.getItem(PENDING_CONTRACT);if(c&&d){const gu=yield this.validateWallet(c);if(yield a.removeItem(PENDING_SELECTED_WALLET_ID),yield a.removeItem(PENDING_CONTRACT),gu.length){const{selectedWalletId:Su}=this.store.getState(),$u=yield this.getWallet(Su);$u&&c!==Su&&(yield $u.signOut().catch(Xu=>{logger.log("Failed to sign out existing wallet"),logger.error(Xu)}));const Iu=yield this.setWalletAsRecentlySignedIn(c);return{accounts:gu,contract:d,selectedWalletId:c,recentlySignedInWallets:Iu}}}const{contract:tt,selectedWalletId:nt}=this.store.getState(),$a=yield this.validateWallet(nt),Ws=yield a.getItem(RECENTLY_SIGNED_IN_WALLETS);return $a.length?{accounts:$a,contract:tt,selectedWalletId:nt,recentlySignedInWallets:Ws||[]}:{accounts:[],contract:null,selectedWalletId:null,recentlySignedInWallets:Ws||[]}})}setWalletAsRecentlySignedIn(a){return __awaiter$2(this,void 0,void 0,function*(){const c=new JsonStorage(this.storage,PACKAGE_NAME);let d=yield c.getItem(RECENTLY_SIGNED_IN_WALLETS);return d||(d=[]),d.includes(a)||(d.unshift(a),d=d.slice(0,5),yield c.setItem(RECENTLY_SIGNED_IN_WALLETS,d)),d})}signOutWallet(a){return __awaiter$2(this,void 0,void 0,function*(){const c=yield this.getWallet(a);yield c.signOut().catch(d=>{logger.log(`Failed to sign out ${c.id}`),logger.error(d),this.onWalletSignedOut(c.id)})})}onWalletSignedIn(a,{accounts:c,contractId:d,methodNames:tt}){return __awaiter$2(this,void 0,void 0,function*(){const{selectedWalletId:nt}=this.store.getState(),$a=new JsonStorage(this.storage,PACKAGE_NAME),Ws={contractId:d,methodNames:tt};if(!c.length){this.getModule(a).type==="browser"&&(yield $a.setItem(PENDING_SELECTED_WALLET_ID,a),yield $a.setItem(PENDING_CONTRACT,Ws));return}nt&&nt!==a&&(yield this.signOutWallet(nt));const gu=yield this.setWalletAsRecentlySignedIn(a);this.store.dispatch({type:"WALLET_CONNECTED",payload:{walletId:a,contract:Ws,accounts:c,recentlySignedInWallets:gu}}),this.emitter.emit("signedIn",{walletId:a,contractId:d,methodNames:tt,accounts:c})})}onWalletSignedOut(a){this.store.dispatch({type:"WALLET_DISCONNECTED",payload:{walletId:a}}),this.emitter.emit("signedOut",{walletId:a})}setupWalletEmitter(a){const c=new EventEmitter;return c.on("signedOut",()=>{this.onWalletSignedOut(a.id)}),c.on("signedIn",d=>{this.onWalletSignedIn(a.id,d)}),c.on("accountsChanged",({accounts:d})=>__awaiter$2(this,void 0,void 0,function*(){if(this.emitter.emit("accountsChanged",{walletId:a.id,accounts:d}),!d.length)return this.signOutWallet(a.id);this.store.dispatch({type:"ACCOUNTS_CHANGED",payload:{walletId:a.id,accounts:d}})})),c.on("networkChanged",({networkId:d})=>{this.emitter.emit("networkChanged",{walletId:a.id,networkId:d})}),c.on("uriChanged",({uri:d})=>{this.emitter.emit("uriChanged",{walletId:a.id,uri:d})}),c}validateSignMessageParams({message:a,nonce:c,recipient:d}){if(!a||a.trim()==="")throw new Error("Invalid message. It must be a non-empty string.");if(!Buffer$C.isBuffer(c)||c.length!==32)throw new Error("Invalid nonce. It must be a Buffer with a length of 32 bytes.");if(!d||d.trim()==="")throw new Error("Invalid recipient. It must be a non-empty string.")}decorateWallet(a){const c=a.signIn,d=a.signOut,tt=a.signMessage;return a.signIn=nt=>__awaiter$2(this,void 0,void 0,function*(){const $a=yield c(nt),{contractId:Ws,methodNames:gu=[]}=nt;return yield this.onWalletSignedIn(a.id,{accounts:$a,contractId:Ws,methodNames:gu}),$a}),a.signOut=()=>__awaiter$2(this,void 0,void 0,function*(){yield d(),this.onWalletSignedOut(a.id)}),a.signMessage=nt=>__awaiter$2(this,void 0,void 0,function*(){if(tt===void 0)throw Error(`The signMessage method is not supported by ${a.metadata.name}`);return this.validateSignMessageParams(nt),yield tt(nt)}),a}setupInstance(a){return __awaiter$2(this,void 0,void 0,function*(){if(!a.metadata.available){const d=a.type==="injected"?"not installed":"not available";throw Error(`${a.metadata.name} is ${d}`)}const c=Object.assign({id:a.id,type:a.type,metadata:a.metadata},yield a.init({id:a.id,type:a.type,metadata:a.metadata,options:this.options,store:this.store.toReadOnly(),provider:this.provider,emitter:this.setupWalletEmitter(a),logger:new Logger$1(a.id),storage:new JsonStorage(this.storage,[PACKAGE_NAME,a.id])}));return this.decorateWallet(c)})}getModule(a){return this.modules.find(c=>c.id===a)}getWallet(a){return __awaiter$2(this,void 0,void 0,function*(){const c=this.getModule(a);if(!c)return null;const{selectedWalletId:d}=this.store.getState();return!c.metadata.available&&d?(this.onWalletSignedOut(d),null):yield c.wallet()})}setup(){return __awaiter$2(this,void 0,void 0,function*(){const a=[];for(let $a=0;$a(logger.log("Failed to setup module"),logger.error(gu),null));Ws&&(a.some(gu=>gu.id===Ws.id)||a.push({id:Ws.id,type:Ws.type,metadata:Ws.metadata,wallet:()=>__awaiter$2(this,void 0,void 0,function*(){let gu=this.instances[Ws.id];return gu||(gu=yield this.setupInstance(Ws),this.instances[Ws.id]=gu,gu)})}))}this.modules=a;const{accounts:c,contract:d,selectedWalletId:tt,recentlySignedInWallets:nt}=yield this.resolveStorageState();this.store.dispatch({type:"SETUP_WALLET_MODULES",payload:{modules:a,accounts:c,contract:d,selectedWalletId:tt,recentlySignedInWallets:nt}});for(let $a=0;$a{switch(o){case"mainnet":return{networkId:o,nodeUrl:"https://rpc.mainnet.near.org",helperUrl:"https://helper.mainnet.near.org",explorerUrl:"https://nearblocks.io",indexerUrl:"https://api.kitwallet.app"};case"testnet":return{networkId:o,nodeUrl:"https://rpc.testnet.near.org",helperUrl:"https://helper.testnet.near.org",explorerUrl:"https://testnet.nearblocks.io",indexerUrl:"https://testnet-api.kitwallet.app"};default:throw Error(`Failed to find config for: '${o}'`)}},resolveNetwork=o=>typeof o=="string"?getNetworkPreset(o):o,resolveOptions=o=>({options:{languageCode:o.languageCode||void 0,network:resolveNetwork(o.network),debug:o.debug||!1,optimizeWalletOrder:o.optimizeWalletOrder!==!1,randomizeWalletOrder:o.randomizeWalletOrder||!1,relayerUrl:o.relayerUrl||void 0},storage:o.storage||new WebStorageService}),reducer=(o,a)=>{switch(logger.log("Store Action",a),a.type){case"SETUP_WALLET_MODULES":{const{modules:c,accounts:d,contract:tt,selectedWalletId:nt,recentlySignedInWallets:$a}=a.payload,Ws=d.map((gu,Su)=>Object.assign(Object.assign({},gu),{active:Su===0}));return Object.assign(Object.assign({},o),{modules:c,accounts:Ws,contract:tt,selectedWalletId:nt,recentlySignedInWallets:$a})}case"WALLET_CONNECTED":{const{walletId:c,contract:d,accounts:tt,recentlySignedInWallets:nt}=a.payload;if(!tt.length)return o;const $a=o.accounts.findIndex(gu=>gu.active),Ws=tt.map((gu,Su)=>Object.assign(Object.assign({},gu),{active:Su===($a>-1?$a:0)}));return Object.assign(Object.assign({},o),{contract:d,accounts:Ws,selectedWalletId:c,recentlySignedInWallets:nt})}case"WALLET_DISCONNECTED":{const{walletId:c}=a.payload;return c!==o.selectedWalletId?o:Object.assign(Object.assign({},o),{contract:null,accounts:[],selectedWalletId:null})}case"ACCOUNTS_CHANGED":{const{walletId:c,accounts:d}=a.payload;if(c!==o.selectedWalletId)return o;const tt=o.accounts.find(Ws=>Ws.active),nt=!d.some(Ws=>Ws.accountId===(tt==null?void 0:tt.accountId)),$a=d.map((Ws,gu)=>Object.assign(Object.assign({},Ws),{active:nt?gu===0:Ws.accountId===(tt==null?void 0:tt.accountId)}));return Object.assign(Object.assign({},o),{accounts:$a})}case"SET_ACTIVE_ACCOUNT":{const{accountId:c}=a.payload,d=o.accounts.map(tt=>Object.assign(Object.assign({},tt),{active:tt.accountId===c}));return Object.assign(Object.assign({},o),{accounts:d})}default:return o}},createStore=o=>__awaiter$2(void 0,void 0,void 0,function*(){const a=new JsonStorage(o,PACKAGE_NAME),c={modules:[],accounts:[],contract:yield a.getItem(CONTRACT),selectedWalletId:yield a.getItem(SELECTED_WALLET_ID),recentlySignedInWallets:(yield a.getItem(RECENTLY_SIGNED_IN_WALLETS))||[]},d=new BehaviorSubject(c),tt=new Subject;tt.pipe(scan(reducer,c)).subscribe(d);const nt=(Ws,gu,Su,$u)=>__awaiter$2(void 0,void 0,void 0,function*(){if(gu[$u]!==Ws[$u]){if(gu[$u]){yield a.setItem(Su,gu[$u]);return}yield a.removeItem(Su)}});let $a=d.getValue();return d.subscribe(Ws=>{nt($a,Ws,SELECTED_WALLET_ID,"selectedWalletId"),nt($a,Ws,CONTRACT,"contract"),nt($a,Ws,RECENTLY_SIGNED_IN_WALLETS,"recentlySignedInWallets"),$a=Ws}),{observable:d,getState:()=>d.getValue(),dispatch:Ws=>tt.next(Ws),toReadOnly:()=>({getState:()=>d.getValue(),observable:d.asObservable()})}});let walletSelectorInstance=null;const createSelector=(o,a,c,d)=>({options:o,store:a.toReadOnly(),wallet:tt=>__awaiter$2(void 0,void 0,void 0,function*(){const{selectedWalletId:nt}=a.getState(),$a=yield c.getWallet(tt||nt);if(!$a)throw tt?new Error("Invalid wallet id"):new Error("No wallet selected");return $a}),setActiveAccount:tt=>{const{accounts:nt}=a.getState();if(!nt.some($a=>$a.accountId===tt))throw new Error("Invalid account id");a.dispatch({type:"SET_ACTIVE_ACCOUNT",payload:{accountId:tt}})},isSignedIn(){const{accounts:tt}=a.getState();return!!tt.length},on:(tt,nt)=>d.on(tt,nt),off:(tt,nt)=>{d.off(tt,nt)}}),setupWalletSelector=o=>__awaiter$2(void 0,void 0,void 0,function*(){const{options:a,storage:c}=resolveOptions(o);Logger$1.debug=a.debug;const d=new EventEmitter,tt=yield createStore(c),nt=new WalletModules({factories:o.modules,storage:c,options:a,store:tt,emitter:d,provider:new Provider(a.network.nodeUrl)});return yield nt.setup(),o.allowMultipleSelectors?createSelector(a,tt,nt,d):(walletSelectorInstance||(walletSelectorInstance=createSelector(a,tt,nt,d)),walletSelectorInstance)});var aCallable$1$3=aCallable$9$1,toObject$3$2=toObject$7$1,IndexedObject$1$2=indexedObject$3,lengthOfArrayLike$5$1=lengthOfArrayLike$8,$TypeError$2$3=TypeError,createMethod$2$1=function(o){return function(a,c,d,tt){aCallable$1$3(c);var nt=toObject$3$2(a),$a=IndexedObject$1$2(nt),Ws=lengthOfArrayLike$5$1(nt),gu=o?Ws-1:0,Su=o?-1:1;if(d<2)for(;;){if(gu in $a){tt=$a[gu],gu+=Su;break}if(gu+=Su,o?gu<0:Ws<=gu)throw $TypeError$2$3("Reduce of empty array with no initial value")}for(;o?gu>=0:Ws>gu;gu+=Su)gu in $a&&(tt=c(tt,$a[gu],gu,nt));return tt}},arrayReduce$1={left:createMethod$2$1(!1),right:createMethod$2$1(!0)},fails$c$3=fails$s,arrayMethodIsStrict$1$1=function(o,a){var c=[][o];return!!c&&fails$c$3(function(){c.call(null,a||function(){return 1},1)})},$$3$3=_export$3,$reduce$1=arrayReduce$1.left,arrayMethodIsStrict$3=arrayMethodIsStrict$1$1,CHROME_VERSION$1=engineV8Version$3,IS_NODE$6=engineIsNode$3,STRICT_METHOD$2=arrayMethodIsStrict$3("reduce"),CHROME_BUG$1=!IS_NODE$6&&CHROME_VERSION$1>79&&CHROME_VERSION$1<83;$$3$3({target:"Array",proto:!0,forced:!STRICT_METHOD$2||CHROME_BUG$1},{reduce:function o(a){var c=arguments.length;return $reduce$1(this,a,c,c>1?arguments[1]:void 0)}});var anObject$3$3=anObject$e$1,regexpFlags$1$1=function(){var o=anObject$3$3(this),a="";return o.hasIndices&&(a+="d"),o.global&&(a+="g"),o.ignoreCase&&(a+="i"),o.multiline&&(a+="m"),o.dotAll&&(a+="s"),o.unicode&&(a+="u"),o.unicodeSets&&(a+="v"),o.sticky&&(a+="y"),a},fails$b$3=fails$s,global$a$3=global$t,$RegExp$2$1=global$a$3.RegExp,UNSUPPORTED_Y$2=fails$b$3(function(){var o=$RegExp$2$1("a","y");return o.lastIndex=2,o.exec("abcd")!=null}),MISSED_STICKY$1=UNSUPPORTED_Y$2||fails$b$3(function(){return!$RegExp$2$1("a","y").sticky}),BROKEN_CARET$1=UNSUPPORTED_Y$2||fails$b$3(function(){var o=$RegExp$2$1("^r","gy");return o.lastIndex=2,o.exec("str")!=null}),regexpStickyHelpers$1={BROKEN_CARET:BROKEN_CARET$1,MISSED_STICKY:MISSED_STICKY$1,UNSUPPORTED_Y:UNSUPPORTED_Y$2},fails$a$3=fails$s,global$9$3=global$t,$RegExp$1$1=global$9$3.RegExp,regexpUnsupportedDotAll$1=fails$a$3(function(){var o=$RegExp$1$1(".","s");return!(o.dotAll&&o.exec(` +`)&&o.flags==="s")}),fails$9$3=fails$s,global$8$3=global$t,$RegExp$3=global$8$3.RegExp,regexpUnsupportedNcg$1=fails$9$3(function(){var o=$RegExp$3("(?b)","g");return o.exec("b").groups.a!=="b"||"b".replace(o,"$c")!=="bc"}),call$6$3=functionCall$3,uncurryThis$8$3=functionUncurryThis$3,toString$2$4=toString$5$2,regexpFlags$4=regexpFlags$1$1,stickyHelpers$1=regexpStickyHelpers$1,shared$7=shared$4$1.exports,create$1$3=objectCreate$3,getInternalState$3$1=internalState$3.get,UNSUPPORTED_DOT_ALL$1=regexpUnsupportedDotAll$1,UNSUPPORTED_NCG$1=regexpUnsupportedNcg$1,nativeReplace$1=shared$7("native-string-replace",String.prototype.replace),nativeExec$1=RegExp.prototype.exec,patchedExec$1=nativeExec$1,charAt$2$1=uncurryThis$8$3("".charAt),indexOf$4=uncurryThis$8$3("".indexOf),replace$6=uncurryThis$8$3("".replace),stringSlice$2$1=uncurryThis$8$3("".slice),UPDATES_LAST_INDEX_WRONG$1=function(){var o=/a/,a=/b*/g;return call$6$3(nativeExec$1,o,"a"),call$6$3(nativeExec$1,a,"a"),o.lastIndex!==0||a.lastIndex!==0}(),UNSUPPORTED_Y$1$1=stickyHelpers$1.BROKEN_CARET,NPCG_INCLUDED$1=/()??/.exec("")[1]!==void 0,PATCH$1=UPDATES_LAST_INDEX_WRONG$1||NPCG_INCLUDED$1||UNSUPPORTED_Y$1$1||UNSUPPORTED_DOT_ALL$1||UNSUPPORTED_NCG$1;PATCH$1&&(patchedExec$1=function(a){var c=this,d=getInternalState$3$1(c),tt=toString$2$4(a),nt=d.raw,$a,Ws,gu,Su,$u,Iu,Xu;if(nt)return nt.lastIndex=c.lastIndex,$a=call$6$3(patchedExec$1,nt,tt),c.lastIndex=nt.lastIndex,$a;var r0=d.groups,p0=UNSUPPORTED_Y$1$1&&c.sticky,y0=call$6$3(regexpFlags$4,c),A0=c.source,$0=0,O0=tt;if(p0&&(y0=replace$6(y0,"y",""),indexOf$4(y0,"g")===-1&&(y0+="g"),O0=stringSlice$2$1(tt,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&charAt$2$1(tt,c.lastIndex-1)!==` +`)&&(A0="(?: "+A0+")",O0=" "+O0,$0++),Ws=new RegExp("^(?:"+A0+")",y0)),NPCG_INCLUDED$1&&(Ws=new RegExp("^"+A0+"$(?!\\s)",y0)),UPDATES_LAST_INDEX_WRONG$1&&(gu=c.lastIndex),Su=call$6$3(nativeExec$1,p0?Ws:c,O0),p0?Su?(Su.input=stringSlice$2$1(Su.input,$0),Su[0]=stringSlice$2$1(Su[0],$0),Su.index=c.lastIndex,c.lastIndex+=Su[0].length):c.lastIndex=0:UPDATES_LAST_INDEX_WRONG$1&&Su&&(c.lastIndex=c.global?Su.index+Su[0].length:gu),NPCG_INCLUDED$1&&Su&&Su.length>1&&call$6$3(nativeReplace$1,Su[0],Ws,function(){for($u=1;$u1?arguments[1]:void 0,$a=nt!==void 0,Ws=getIteratorMethod$7(d),gu,Su,$u,Iu,Xu,r0;if(Ws&&!isArrayIteratorMethod$5(Ws))for(Xu=getIterator$6(d,Ws),r0=Xu.next,d=[];!(Iu=call$5$3(r0,Xu)).done;)d.push(Iu.value);for($a&&tt>2&&(nt=bind$1$3(nt,arguments[2])),Su=lengthOfArrayLike$4$2(d),$u=new(aTypedArrayConstructor$1(c))(Su),gu=0;Su>gu;gu++)$u[gu]=$a?nt(d[gu],gu):d[gu];return $u},TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1=typedArrayConstructorsRequireWrappers,exportTypedArrayStaticMethod=arrayBufferViewCore.exportTypedArrayStaticMethod,typedArrayFrom$1=typedArrayFrom$2;exportTypedArrayStaticMethod("from",typedArrayFrom$1,TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1);var defineBuiltIn$1$3=defineBuiltIn$8$1,defineBuiltIns$1$1=function(o,a,c){for(var d in a)defineBuiltIn$1$3(o,d,a[d],c);return o},toIntegerOrInfinity$3$1=toIntegerOrInfinity$6$1,toLength$4$1=toLength$6,$RangeError$2=RangeError,toIndex$2=function(o){if(o===void 0)return 0;var a=toIntegerOrInfinity$3$1(o),c=toLength$4$1(a);if(a!==c)throw $RangeError$2("Wrong length or index");return c},$Array$2$1=Array,abs=Math.abs,pow$2=Math.pow,floor$2$2=Math.floor,log=Math.log,LN2=Math.LN2,pack=function(o,a,c){var d=$Array$2$1(c),tt=c*8-a-1,nt=(1<>1,Ws=a===23?pow$2(2,-24)-pow$2(2,-77):0,gu=o<0||o===0&&1/o<0?1:0,Su=0,$u,Iu,Xu;for(o=abs(o),o!=o||o===1/0?(Iu=o!=o?1:0,$u=nt):($u=floor$2$2(log(o)/LN2),Xu=pow$2(2,-$u),o*Xu<1&&($u--,Xu*=2),$u+$a>=1?o+=Ws/Xu:o+=Ws*pow$2(2,1-$a),o*Xu>=2&&($u++,Xu/=2),$u+$a>=nt?(Iu=0,$u=nt):$u+$a>=1?(Iu=(o*Xu-1)*pow$2(2,a),$u=$u+$a):(Iu=o*pow$2(2,$a-1)*pow$2(2,a),$u=0));a>=8;)d[Su++]=Iu&255,Iu/=256,a-=8;for($u=$u<0;)d[Su++]=$u&255,$u/=256,tt-=8;return d[--Su]|=gu*128,d},unpack=function(o,a){var c=o.length,d=c*8-a-1,tt=(1<>1,$a=d-7,Ws=c-1,gu=o[Ws--],Su=gu&127,$u;for(gu>>=7;$a>0;)Su=Su*256+o[Ws--],$a-=8;for($u=Su&(1<<-$a)-1,Su>>=-$a,$a+=a;$a>0;)$u=$u*256+o[Ws--],$a-=8;if(Su===0)Su=1-nt;else{if(Su===tt)return $u?NaN:gu?-1/0:1/0;$u=$u+pow$2(2,a),Su=Su-nt}return(gu?-1:1)*$u*pow$2(2,Su-a)},ieee754={pack,unpack},toObject$1$3=toObject$7$1,toAbsoluteIndex$2$2=toAbsoluteIndex$4$1,lengthOfArrayLike$3$2=lengthOfArrayLike$8,arrayFill$1=function o(a){for(var c=toObject$1$3(this),d=lengthOfArrayLike$3$2(c),tt=arguments.length,nt=toAbsoluteIndex$2$2(tt>1?arguments[1]:void 0,d),$a=tt>2?arguments[2]:void 0,Ws=$a===void 0?d:toAbsoluteIndex$2$2($a,d);Ws>nt;)c[nt++]=a;return c},toPropertyKey$1$3=toPropertyKey$4$1,definePropertyModule$1$3=objectDefineProperty$3,createPropertyDescriptor$1$3=createPropertyDescriptor$5$1,createProperty$1$2=function(o,a,c){var d=toPropertyKey$1$3(a);d in o?definePropertyModule$1$3.f(o,d,createPropertyDescriptor$1$3(0,c)):o[d]=c},toAbsoluteIndex$1$3=toAbsoluteIndex$4$1,lengthOfArrayLike$2$3=lengthOfArrayLike$8,createProperty$4=createProperty$1$2,$Array$1$1=Array,max$5=Math.max,arraySliceSimple$2=function(o,a,c){for(var d=lengthOfArrayLike$2$3(o),tt=toAbsoluteIndex$1$3(a,d),nt=toAbsoluteIndex$1$3(c===void 0?d:c,d),$a=$Array$1$1(max$5(nt-tt,0)),Ws=0;tt>8&255]},packInt32=function(o){return[o&255,o>>8&255,o>>16&255,o>>24&255]},unpackInt32=function(o){return o[3]<<24|o[2]<<16|o[1]<<8|o[0]},packFloat32=function(o){return packIEEE754(o,23,4)},packFloat64=function(o){return packIEEE754(o,52,8)},addGetter$1=function(o,a){defineProperty$9(o[PROTOTYPE$3],a,{get:function(){return getInternalState$1$3(this)[a]}})},get$3=function(o,a,c,d){var tt=toIndex$1(c),nt=getInternalState$1$3(o);if(tt+a>nt.byteLength)throw RangeError$3(WRONG_INDEX);var $a=getInternalState$1$3(nt.buffer).bytes,Ws=tt+nt.byteOffset,gu=arraySlice$3$1($a,Ws,Ws+a);return d?gu:reverse(gu)},set$5=function(o,a,c,d,tt,nt){var $a=toIndex$1(c),Ws=getInternalState$1$3(o);if($a+a>Ws.byteLength)throw RangeError$3(WRONG_INDEX);for(var gu=getInternalState$1$3(Ws.buffer).bytes,Su=$a+Ws.byteOffset,$u=d(+tt),Iu=0;Iutt)throw RangeError$3("Wrong offset");if(d=d===void 0?tt-nt:toLength$3$1(d),nt+d>tt)throw RangeError$3(WRONG_LENGTH$1);setInternalState$1$3(this,{buffer:a,byteLength:d,byteOffset:nt}),DESCRIPTORS$1$3||(this.buffer=a,this.byteLength=d,this.byteOffset=nt)},DataViewPrototype$1=$DataView[PROTOTYPE$3],DESCRIPTORS$1$3&&(addGetter$1($ArrayBuffer,"byteLength"),addGetter$1($DataView,"buffer"),addGetter$1($DataView,"byteLength"),addGetter$1($DataView,"byteOffset")),defineBuiltIns$2(DataViewPrototype$1,{getInt8:function(a){return get$3(this,1,a)[0]<<24>>24},getUint8:function(a){return get$3(this,1,a)[0]},getInt16:function(a){var c=get$3(this,2,a,arguments.length>1?arguments[1]:void 0);return(c[1]<<8|c[0])<<16>>16},getUint16:function(a){var c=get$3(this,2,a,arguments.length>1?arguments[1]:void 0);return c[1]<<8|c[0]},getInt32:function(a){return unpackInt32(get$3(this,4,a,arguments.length>1?arguments[1]:void 0))},getUint32:function(a){return unpackInt32(get$3(this,4,a,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(a){return unpackIEEE754(get$3(this,4,a,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(a){return unpackIEEE754(get$3(this,8,a,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(a,c){set$5(this,1,a,packInt8,c)},setUint8:function(a,c){set$5(this,1,a,packInt8,c)},setInt16:function(a,c){set$5(this,2,a,packInt16,c,arguments.length>2?arguments[2]:void 0)},setUint16:function(a,c){set$5(this,2,a,packInt16,c,arguments.length>2?arguments[2]:void 0)},setInt32:function(a,c){set$5(this,4,a,packInt32,c,arguments.length>2?arguments[2]:void 0)},setUint32:function(a,c){set$5(this,4,a,packInt32,c,arguments.length>2?arguments[2]:void 0)},setFloat32:function(a,c){set$5(this,4,a,packFloat32,c,arguments.length>2?arguments[2]:void 0)},setFloat64:function(a,c){set$5(this,8,a,packFloat64,c,arguments.length>2?arguments[2]:void 0)}});else{var INCORRECT_ARRAY_BUFFER_NAME=PROPER_FUNCTION_NAME$4&&NativeArrayBuffer.name!==ARRAY_BUFFER;if(!fails$7$3(function(){NativeArrayBuffer(1)})||!fails$7$3(function(){new NativeArrayBuffer(-1)})||fails$7$3(function(){return new NativeArrayBuffer,new NativeArrayBuffer(1.5),new NativeArrayBuffer(NaN),INCORRECT_ARRAY_BUFFER_NAME&&!CONFIGURABLE_FUNCTION_NAME$4})){$ArrayBuffer=function(a){return anInstance$1$3(this,ArrayBufferPrototype$1),new NativeArrayBuffer(toIndex$1(a))},$ArrayBuffer[PROTOTYPE$3]=ArrayBufferPrototype$1;for(var keys$3=getOwnPropertyNames$1(NativeArrayBuffer),j$3=0,key;keys$3.length>j$3;)(key=keys$3[j$3++])in $ArrayBuffer||createNonEnumerableProperty$2$3($ArrayBuffer,key,NativeArrayBuffer[key]);ArrayBufferPrototype$1.constructor=$ArrayBuffer}else INCORRECT_ARRAY_BUFFER_NAME&&CONFIGURABLE_FUNCTION_NAME$4&&createNonEnumerableProperty$2$3(NativeArrayBuffer,"name",ARRAY_BUFFER);setPrototypeOf$2$1&&getPrototypeOf$4(DataViewPrototype$1)!==ObjectPrototype$3&&setPrototypeOf$2$1(DataViewPrototype$1,ObjectPrototype$3);var testView=new $DataView(new $ArrayBuffer(2)),$setInt8=uncurryThis$7$3(DataViewPrototype$1.setInt8);testView.setInt8(0,2147483648),testView.setInt8(1,2147483649),(testView.getInt8(0)||!testView.getInt8(1))&&defineBuiltIns$2(DataViewPrototype$1,{setInt8:function(a,c){$setInt8(this,a,c<<24>>24)},setUint8:function(a,c){$setInt8(this,a,c<<24>>24)}},{unsafe:!0})}setToStringTag$8($ArrayBuffer,ARRAY_BUFFER);setToStringTag$8($DataView,DATA_VIEW);var arrayBuffer={ArrayBuffer:$ArrayBuffer,DataView:$DataView},$$1$4=_export$3,uncurryThis$6$3=functionUncurryThis$3,fails$6$3=fails$s,ArrayBufferModule$1=arrayBuffer,anObject$2$3=anObject$e$1,toAbsoluteIndex$5=toAbsoluteIndex$4$1,toLength$2$1=toLength$6,speciesConstructor$1$3=speciesConstructor$3$1,ArrayBuffer$2=ArrayBufferModule$1.ArrayBuffer,DataView$2=ArrayBufferModule$1.DataView,DataViewPrototype=DataView$2.prototype,un$ArrayBufferSlice=uncurryThis$6$3(ArrayBuffer$2.prototype.slice),getUint8=uncurryThis$6$3(DataViewPrototype.getUint8),setUint8=uncurryThis$6$3(DataViewPrototype.setUint8),INCORRECT_SLICE=fails$6$3(function(){return!new ArrayBuffer$2(2).slice(1,void 0).byteLength});$$1$4({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:INCORRECT_SLICE},{slice:function o(a,c){if(un$ArrayBufferSlice&&c===void 0)return un$ArrayBufferSlice(anObject$2$3(this),a);for(var d=anObject$2$3(this).byteLength,tt=toAbsoluteIndex$5(a,d),nt=toAbsoluteIndex$5(c===void 0?d:c,d),$a=new(speciesConstructor$1$3(this,ArrayBuffer$2))(toLength$2$1(nt-tt)),Ws=new DataView$2(this),gu=new DataView$2($a),Su=0;ttA0;A0++)if((Ws||A0 in r0)&&(L0=r0[A0],V0=p0(L0,A0,Xu),o))if(a)O0[A0]=V0;else if(V0)switch(o){case 3:return!0;case 5:return L0;case 6:return A0;case 2:push$1$2(O0,L0)}else switch(o){case 4:return!1;case 7:push$1$2(O0,L0)}return nt?-1:d||tt?tt:O0}},arrayIteration={forEach:createMethod$1$2(0),map:createMethod$1$2(1),filter:createMethod$1$2(2),some:createMethod$1$2(3),every:createMethod$1$2(4),find:createMethod$1$2(5),findIndex:createMethod$1$2(6),filterReject:createMethod$1$2(7)},isCallable$1$3=isCallable$n$1,isObject$1$4=isObject$d,setPrototypeOf$1$3=objectSetPrototypeOf$3,inheritIfRequired$1=function(o,a,c){var d,tt;return setPrototypeOf$1$3&&isCallable$1$3(d=a.constructor)&&d!==c&&isObject$1$4(tt=d.prototype)&&tt!==c.prototype&&setPrototypeOf$1$3(o,tt),o},$$h=_export$3,global$4$3=global$t,call$4$3=functionCall$3,DESCRIPTORS$f=descriptors$3,TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS=typedArrayConstructorsRequireWrappers,ArrayBufferViewCore$4=arrayBufferViewCore,ArrayBufferModule=arrayBuffer,anInstance$6=anInstance$3$1,createPropertyDescriptor$8=createPropertyDescriptor$5$1,createNonEnumerableProperty$1$3=createNonEnumerableProperty$8,isIntegralNumber=isIntegralNumber$1,toLength$1$3=toLength$6,toIndex=toIndex$2,toOffset$1=toOffset$2,toPropertyKey$6=toPropertyKey$4$1,hasOwn$f=hasOwnProperty_1$3,classof$2$3=classof$9$1,isObject$e=isObject$d,isSymbol$5=isSymbol$3$1,create$6=objectCreate$3,isPrototypeOf$7=objectIsPrototypeOf$3,setPrototypeOf$6=objectSetPrototypeOf$3,getOwnPropertyNames=objectGetOwnPropertyNames$3.f,typedArrayFrom=typedArrayFrom$2,forEach=arrayIteration.forEach,setSpecies$4=setSpecies$2$1,definePropertyModule$8=objectDefineProperty$3,getOwnPropertyDescriptorModule$3=objectGetOwnPropertyDescriptor$3,InternalStateModule$8=internalState$3,inheritIfRequired=inheritIfRequired$1,getInternalState$6=InternalStateModule$8.get,setInternalState$7=InternalStateModule$8.set,enforceInternalState$3=InternalStateModule$8.enforce,nativeDefineProperty=definePropertyModule$8.f,nativeGetOwnPropertyDescriptor=getOwnPropertyDescriptorModule$3.f,round$1=Math.round,RangeError$2=global$4$3.RangeError,ArrayBuffer$1=ArrayBufferModule.ArrayBuffer,ArrayBufferPrototype=ArrayBuffer$1.prototype,DataView$1=ArrayBufferModule.DataView,NATIVE_ARRAY_BUFFER_VIEWS=ArrayBufferViewCore$4.NATIVE_ARRAY_BUFFER_VIEWS,TYPED_ARRAY_TAG=ArrayBufferViewCore$4.TYPED_ARRAY_TAG,TypedArray=ArrayBufferViewCore$4.TypedArray,TypedArrayPrototype=ArrayBufferViewCore$4.TypedArrayPrototype,aTypedArrayConstructor=ArrayBufferViewCore$4.aTypedArrayConstructor,isTypedArray=ArrayBufferViewCore$4.isTypedArray,BYTES_PER_ELEMENT="BYTES_PER_ELEMENT",WRONG_LENGTH="Wrong length",fromList=function(o,a){aTypedArrayConstructor(o);for(var c=0,d=a.length,tt=new o(d);d>c;)tt[c]=a[c++];return tt},addGetter=function(o,a){nativeDefineProperty(o,a,{get:function(){return getInternalState$6(this)[a]}})},isArrayBuffer=function(o){var a;return isPrototypeOf$7(ArrayBufferPrototype,o)||(a=classof$2$3(o))=="ArrayBuffer"||a=="SharedArrayBuffer"},isTypedArrayIndex=function(o,a){return isTypedArray(o)&&!isSymbol$5(a)&&a in o&&isIntegralNumber(+a)&&a>=0},wrappedGetOwnPropertyDescriptor=function o(a,c){return c=toPropertyKey$6(c),isTypedArrayIndex(a,c)?createPropertyDescriptor$8(2,a[c]):nativeGetOwnPropertyDescriptor(a,c)},wrappedDefineProperty=function o(a,c,d){return c=toPropertyKey$6(c),isTypedArrayIndex(a,c)&&isObject$e(d)&&hasOwn$f(d,"value")&&!hasOwn$f(d,"get")&&!hasOwn$f(d,"set")&&!d.configurable&&(!hasOwn$f(d,"writable")||d.writable)&&(!hasOwn$f(d,"enumerable")||d.enumerable)?(a[c]=d.value,a):nativeDefineProperty(a,c,d)};DESCRIPTORS$f?(NATIVE_ARRAY_BUFFER_VIEWS||(getOwnPropertyDescriptorModule$3.f=wrappedGetOwnPropertyDescriptor,definePropertyModule$8.f=wrappedDefineProperty,addGetter(TypedArrayPrototype,"buffer"),addGetter(TypedArrayPrototype,"byteOffset"),addGetter(TypedArrayPrototype,"byteLength"),addGetter(TypedArrayPrototype,"length")),$$h({target:"Object",stat:!0,forced:!NATIVE_ARRAY_BUFFER_VIEWS},{getOwnPropertyDescriptor:wrappedGetOwnPropertyDescriptor,defineProperty:wrappedDefineProperty}),typedArrayConstructor.exports=function(o,a,c){var d=o.match(/\d+$/)[0]/8,tt=o+(c?"Clamped":"")+"Array",nt="get"+o,$a="set"+o,Ws=global$4$3[tt],gu=Ws,Su=gu&&gu.prototype,$u={},Iu=function(y0,A0){var $0=getInternalState$6(y0);return $0.view[nt](A0*d+$0.byteOffset,!0)},Xu=function(y0,A0,$0){var O0=getInternalState$6(y0);c&&($0=($0=round$1($0))<0?0:$0>255?255:$0&255),O0.view[$a](A0*d+O0.byteOffset,$0,!0)},r0=function(y0,A0){nativeDefineProperty(y0,A0,{get:function(){return Iu(this,A0)},set:function($0){return Xu(this,A0,$0)},enumerable:!0})};NATIVE_ARRAY_BUFFER_VIEWS?TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS&&(gu=a(function(y0,A0,$0,O0){return anInstance$6(y0,Su),inheritIfRequired(function(){return isObject$e(A0)?isArrayBuffer(A0)?O0!==void 0?new Ws(A0,toOffset$1($0,d),O0):$0!==void 0?new Ws(A0,toOffset$1($0,d)):new Ws(A0):isTypedArray(A0)?fromList(gu,A0):call$4$3(typedArrayFrom,gu,A0):new Ws(toIndex(A0))}(),y0,gu)}),setPrototypeOf$6&&setPrototypeOf$6(gu,TypedArray),forEach(getOwnPropertyNames(Ws),function(y0){y0 in gu||createNonEnumerableProperty$1$3(gu,y0,Ws[y0])}),gu.prototype=Su):(gu=a(function(y0,A0,$0,O0){anInstance$6(y0,Su);var L0=0,V0=0,F0,u1,g1;if(!isObject$e(A0))g1=toIndex(A0),u1=g1*d,F0=new ArrayBuffer$1(u1);else if(isArrayBuffer(A0)){F0=A0,V0=toOffset$1($0,d);var E1=A0.byteLength;if(O0===void 0){if(E1%d||(u1=E1-V0,u1<0))throw RangeError$2(WRONG_LENGTH)}else if(u1=toLength$1$3(O0)*d,u1+V0>E1)throw RangeError$2(WRONG_LENGTH);g1=u1/d}else return isTypedArray(A0)?fromList(gu,A0):call$4$3(typedArrayFrom,gu,A0);for(setInternalState$7(y0,{buffer:F0,byteOffset:V0,byteLength:u1,length:g1,view:new DataView$1(F0)});L01?arguments[1]:void 0,c>2?arguments[2]:void 0)},CONVERSION_BUG);var global$3$3=global$t,call$2$3=functionCall$3,ArrayBufferViewCore$2=arrayBufferViewCore,lengthOfArrayLike$9=lengthOfArrayLike$8,toOffset=toOffset$2,toIndexedObject$8=toObject$7$1,fails$4$3=fails$s,RangeError$1=global$3$3.RangeError,Int8Array$2=global$3$3.Int8Array,Int8ArrayPrototype=Int8Array$2&&Int8Array$2.prototype,$set=Int8ArrayPrototype&&Int8ArrayPrototype.set,aTypedArray$2=ArrayBufferViewCore$2.aTypedArray,exportTypedArrayMethod$2=ArrayBufferViewCore$2.exportTypedArrayMethod,WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS=!fails$4$3(function(){var o=new Uint8ClampedArray(2);return call$2$3($set,o,{length:1,0:3},1),o[1]!==3}),TO_OBJECT_BUG=WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS&&ArrayBufferViewCore$2.NATIVE_ARRAY_BUFFER_VIEWS&&fails$4$3(function(){var o=new Int8Array$2(2);return o.set(1),o.set("2",1),o[0]!==0||o[1]!==2});exportTypedArrayMethod$2("set",function o(a){aTypedArray$2(this);var c=toOffset(arguments.length>1?arguments[1]:void 0,1),d=toIndexedObject$8(a);if(WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS)return call$2$3($set,this,d,c);var tt=this.length,nt=lengthOfArrayLike$9(d),$a=0;if(nt+c>tt)throw RangeError$1("Wrong length");for(;$a0;)o[nt]=o[--nt];nt!==d++&&(o[nt]=tt)}return o},merge$2=function(o,a,c,d){for(var tt=a.length,nt=c.length,$a=0,Ws=0;$a0&&1/c<0?1:-1:a>c}};exportTypedArrayMethod$1("sort",function o(a){return a!==void 0&&aCallable$c(a),STABLE_SORT$1?un$Sort$1(this,a):internalSort$1(aTypedArray$1(this),getSortCompare$1(a))},!STABLE_SORT$1||ACCEPT_INCORRECT_ARGUMENTS);var global$1$3=global$t,apply$1$3=functionApply$3,ArrayBufferViewCore=arrayBufferViewCore,fails$2$3=fails$s,arraySlice$1$3=arraySlice$5$1,Int8Array$1=global$1$3.Int8Array,aTypedArray=ArrayBufferViewCore.aTypedArray,exportTypedArrayMethod=ArrayBufferViewCore.exportTypedArrayMethod,$toLocaleString=[].toLocaleString,TO_LOCALE_STRING_BUG=!!Int8Array$1&&fails$2$3(function(){$toLocaleString.call(new Int8Array$1(1))}),FORCED$1=fails$2$3(function(){return[1,2].toLocaleString()!=new Int8Array$1([1,2]).toLocaleString()})||!fails$2$3(function(){Int8Array$1.prototype.toLocaleString.call([1,2])});exportTypedArrayMethod("toLocaleString",function o(){return apply$1$3($toLocaleString,TO_LOCALE_STRING_BUG?arraySlice$1$3(aTypedArray(this)):aTypedArray(this),arraySlice$1$3(arguments))},FORCED$1);class Payload{constructor(a){this.tag=2147484061,this.message=a.message,this.nonce=a.nonce,this.recipient=a.recipient,a.callbackUrl&&(this.callbackUrl=a.callbackUrl)}}const payloadSchema=new Map([[Payload,{kind:"struct",fields:[["tag","u32"],["message","string"],["nonce",[32]],["recipient","string"],["callbackUrl",{kind:"option",type:"string"}]]}]]),verifySignature=({publicKey:o,signature:a,message:c,nonce:d,recipient:tt,callbackUrl:nt})=>{const $a=new Payload({message:c,nonce:d,recipient:tt,callbackUrl:nt}),Ws=serialize_1(payloadSchema,$a),gu=Uint8Array.from(sha256Exports.sha256.array(Ws)),Su=Buffer$C.from(a,"base64");return browserIndex$2.utils.PublicKey.from(o).verify(gu,Su)},fetchAllUserKeys=({accountId:o,network:a,publicKey:c})=>__awaiter$2(void 0,void 0,void 0,function*(){return yield new browserIndex$2.providers.JsonRpcProvider({url:a.nodeUrl}).query({request_type:"view_access_key",account_id:o,finality:"final",public_key:c})}),verifyFullKeyBelongsToUser=({publicKey:o,accountId:a,network:c})=>__awaiter$2(void 0,void 0,void 0,function*(){const{permission:d}=yield fetchAllUserKeys({accountId:a,network:c,publicKey:o});return d==="FullAccess"});var uncurryThis$2$3=functionUncurryThis$3,defineBuiltIn$d=defineBuiltIn$8$1,regexpExec$2$1=regexpExec$3,fails$1$3=fails$s,wellKnownSymbol$l=wellKnownSymbol$j$1,createNonEnumerableProperty$9=createNonEnumerableProperty$8,SPECIES$6=wellKnownSymbol$l("species"),RegExpPrototype$5=RegExp.prototype,fixRegexpWellKnownSymbolLogic$1=function(o,a,c,d){var tt=wellKnownSymbol$l(o),nt=!fails$1$3(function(){var Su={};return Su[tt]=function(){return 7},""[o](Su)!=7}),$a=nt&&!fails$1$3(function(){var Su=!1,$u=/a/;return o==="split"&&($u={},$u.constructor={},$u.constructor[SPECIES$6]=function(){return $u},$u.flags="",$u[tt]=/./[tt]),$u.exec=function(){return Su=!0,null},$u[tt](""),!Su});if(!nt||!$a||c){var Ws=uncurryThis$2$3(/./[tt]),gu=a(tt,""[o],function(Su,$u,Iu,Xu,r0){var p0=uncurryThis$2$3(Su),y0=$u.exec;return y0===regexpExec$2$1||y0===RegExpPrototype$5.exec?nt&&!r0?{done:!0,value:Ws($u,Iu,Xu)}:{done:!0,value:p0(Iu,$u,Xu)}:{done:!1}});defineBuiltIn$d(String.prototype,o,gu[0]),defineBuiltIn$d(RegExpPrototype$5,tt,gu[1])}d&&createNonEnumerableProperty$9(RegExpPrototype$5[tt],"sham",!0)},uncurryThis$1$3=functionUncurryThis$3,toIntegerOrInfinity$7=toIntegerOrInfinity$6$1,toString$1$5=toString$5$2,requireObjectCoercible$1$3=requireObjectCoercible$6$1,charAt$1$1=uncurryThis$1$3("".charAt),charCodeAt$2=uncurryThis$1$3("".charCodeAt),stringSlice$1$2=uncurryThis$1$3("".slice),createMethod$5=function(o){return function(a,c){var d=toString$1$5(requireObjectCoercible$1$3(a)),tt=toIntegerOrInfinity$7(c),nt=d.length,$a,Ws;return tt<0||tt>=nt?o?"":void 0:($a=charCodeAt$2(d,tt),$a<55296||$a>56319||tt+1===nt||(Ws=charCodeAt$2(d,tt+1))<56320||Ws>57343?o?charAt$1$1(d,tt):$a:o?stringSlice$1$2(d,tt,tt+2):($a-55296<<10)+(Ws-56320)+65536)}},stringMultibyte$1={codeAt:createMethod$5(!1),charAt:createMethod$5(!0)},charAt$7=stringMultibyte$1.charAt,advanceStringIndex$1$1=function(o,a,c){return a+(c?charAt$7(o,a).length:1)},call$1$3=functionCall$3,anObject$1$3=anObject$e$1,isCallable$q=isCallable$n$1,classof$c=classofRaw$1$3,regexpExec$1$1=regexpExec$3,$TypeError$h=TypeError,regexpExecAbstract$1=function(o,a){var c=o.exec;if(isCallable$q(c)){var d=call$1$3(c,o,a);return d!==null&&anObject$1$3(d),d}if(classof$c(o)==="RegExp")return call$1$3(regexpExec$1$1,o,a);throw $TypeError$h("RegExp#exec called on incompatible receiver")},apply$5=functionApply$3,call$n=functionCall$3,uncurryThis$q=functionUncurryThis$3,fixRegExpWellKnownSymbolLogic$1=fixRegexpWellKnownSymbolLogic$1,isRegExp$2=isRegexp$1,anObject$j=anObject$e$1,requireObjectCoercible$7=requireObjectCoercible$6$1,speciesConstructor$4=speciesConstructor$3$1,advanceStringIndex$2=advanceStringIndex$1$1,toLength$7=toLength$6,toString$9=toString$5$2,getMethod$7=getMethod$4$1,arraySlice$6=arraySliceSimple$2,callRegExpExec=regexpExecAbstract$1,regexpExec$4=regexpExec$3,stickyHelpers$2=regexpStickyHelpers$1,fails$t=fails$s,UNSUPPORTED_Y$3=stickyHelpers$2.UNSUPPORTED_Y,MAX_UINT32=4294967295,min$5=Math.min,$push=[].push,exec$6=uncurryThis$q(/./.exec),push$7=uncurryThis$q($push),stringSlice$9=uncurryThis$q("".slice),SPLIT_WORKS_WITH_OVERWRITTEN_EXEC=!fails$t(function(){var o=/(?:)/,a=o.exec;o.exec=function(){return a.apply(this,arguments)};var c="ab".split(o);return c.length!==2||c[0]!=="a"||c[1]!=="b"});fixRegExpWellKnownSymbolLogic$1("split",function(o,a,c){var d;return"abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?d=function(tt,nt){var $a=toString$9(requireObjectCoercible$7(this)),Ws=nt===void 0?MAX_UINT32:nt>>>0;if(Ws===0)return[];if(tt===void 0)return[$a];if(!isRegExp$2(tt))return call$n(a,$a,tt,Ws);for(var gu=[],Su=(tt.ignoreCase?"i":"")+(tt.multiline?"m":"")+(tt.unicode?"u":"")+(tt.sticky?"y":""),$u=0,Iu=new RegExp(tt.source,Su+"g"),Xu,r0,p0;(Xu=call$n(regexpExec$4,Iu,$a))&&(r0=Iu.lastIndex,!(r0>$u&&(push$7(gu,stringSlice$9($a,$u,Xu.index)),Xu.length>1&&Xu.index<$a.length&&apply$5($push,gu,arraySlice$6(Xu,1)),p0=Xu[0].length,$u=r0,gu.length>=Ws)));)Iu.lastIndex===Xu.index&&Iu.lastIndex++;return $u===$a.length?(p0||!exec$6(Iu,""))&&push$7(gu,""):push$7(gu,stringSlice$9($a,$u)),gu.length>Ws?arraySlice$6(gu,0,Ws):gu}:"0".split(void 0,0).length?d=function(tt,nt){return tt===void 0&&nt===0?[]:call$n(a,this,tt,nt)}:d=a,[function(nt,$a){var Ws=requireObjectCoercible$7(this),gu=nt==null?void 0:getMethod$7(nt,o);return gu?call$n(gu,nt,Ws,$a):call$n(d,toString$9(Ws),nt,$a)},function(tt,nt){var $a=anObject$j(this),Ws=toString$9(tt),gu=c(d,$a,Ws,nt,d!==a);if(gu.done)return gu.value;var Su=speciesConstructor$4($a,RegExp),$u=$a.unicode,Iu=($a.ignoreCase?"i":"")+($a.multiline?"m":"")+($a.unicode?"u":"")+(UNSUPPORTED_Y$3?"g":"y"),Xu=new Su(UNSUPPORTED_Y$3?"^(?:"+$a.source+")":$a,Iu),r0=nt===void 0?MAX_UINT32:nt>>>0;if(r0===0)return[];if(Ws.length===0)return callRegExpExec(Xu,Ws)===null?[Ws]:[];for(var p0=0,y0=0,A0=[];y0{switch(o){case"en":return en$1;case"es":return es$1;case"zh":return zh$1;case"bg":return bg$1;case"ko":return ko$1;case"vi":return vi$1;case"hi":return hi$1;case"ar":return ar$1;case"hr":return hr$1;case"mk":return mk;case"sl":return sl$1;case"sr":return sr$1;default:return en$1}};let chosenLang;const allowOnlyLanguage=o=>{chosenLang=o},shortenLanguageCode=o=>o.indexOf("-")!==-1?o.split("-")[0]:o.split("_")[0],findObjectPropByStringPath=(o,a)=>{if(!o)return"";const c=a.indexOf(".");if(c>-1){const d=a.substring(0,c),tt=a.substring(c+1);return findObjectPropByStringPath(o[d],tt)}return o[a]},translate=o=>{let a=window.navigator.languages?window.navigator.languages[0]:null;a=a||window.navigator.language;const c=shortenLanguageCode(chosenLang||a),d=getLanguage(c),tt=findObjectPropByStringPath(d,o);return tt&&typeof tt=="string"?tt:o};var cryptoBrowserifyExports=requireCryptoBrowserify();async function generatePrivateKey(){return await generateKeyPair(Ed25519$1)}async function getOrCreateKeypair(){return getStorageClientKey()??createAndStoreClientKey()}async function createAndStoreClientKey(){const o=await generatePrivateKey(),a={privateKey:bs58$3.encode(o.bytes),publicKey:bs58$3.encode(o.public.bytes)};return setStorageClientKey(a),a}const JSON_RPC_ENDPOINT="https://rpc.testnet.near.org",t$4=translations.useNear;function useRPC(){return{getPackages:async()=>{const nt=await new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT}).query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_packages",args_base64:btoa(JSON.stringify({offset:0,limit:100})),finality:"final"});return JSON.parse(Buffer$1$1.from(nt.result).toString())},getReleases:async tt=>{const $a=await new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT}).query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_releases",args_base64:btoa(JSON.stringify({id:tt,offset:0,limit:100})),finality:"final"});return JSON.parse(Buffer$1$1.from($a.result).toString())},getPackage:async tt=>{try{const $a=await new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT}).query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_package",args_base64:btoa(JSON.stringify({id:tt})),finality:"final"});return JSON.parse(Buffer$1$1.from($a.result).toString())}catch(nt){return console.error("Error getting package",nt),null}},getLatestRelease:async tt=>{const nt=new browserIndex$2.providers.JsonRpcProvider({url:JSON_RPC_ENDPOINT});try{const $a=await nt.query({request_type:"call_function",account_id:"calimero-package-manager.testnet",method_name:"get_releases",args_base64:btoa(JSON.stringify({id:tt,offset:0,limit:100})),finality:"final"}),Ws=JSON.parse(Buffer$1$1.from($a.result).toString());return Ws.length===0?null:Ws[Ws.length-1]}catch($a){return console.error("Error getting latest relase",$a),null}}}}function useNear({accountId:o,selector:a}){const c=useNavigate(),d=reactExports.useCallback(async()=>{if(!o)return null;const{network:Ws}=a.options;return new browserIndex$2.providers.JsonRpcProvider({url:Ws.nodeUrl}).query({request_type:"view_account",finality:"final",account_id:o}).then(Su=>({...Su,account_id:o}))},[o,a]),tt=reactExports.useCallback(async(Ws,gu,Su)=>{try{const $u=verifySignature({publicKey:gu.publicKey,signature:gu.signature,message:Ws.message,nonce:Ws.nonce,recipient:Ws.recipient,callbackUrl:Ws.callbackUrl??""});return await verifyFullKeyBelongsToUser({publicKey:gu.publicKey,accountId:gu.accountId,network:a.options.network})&&$u}catch($u){return console.error(`${t$4.verifyMessageError}: ${$u}`),Su(t$4.verifyMessageError),!1}},[a.options.network]),nt=reactExports.useCallback(async(Ws,gu,Su)=>{const $u=new URLSearchParams(window.location.hash.substring(1)),Iu=$u.get("accountId"),Xu=$u.get("publicKey"),r0=$u.get("signature");if(!Iu&&!Xu&&!r0){console.error(t$4.missingUrlParamsError);return}const p0=JSON.parse(localStorage.getItem("message")),y0=JSON.parse(p0.state);y0.publicKey||(y0.publicKey=Xu);const A0=JSON.parse(y0.message);A0.publicKey||(A0.publicKey=Xu,y0.message=JSON.stringify(A0));const O0=await tt(p0,{accountId:Iu,publicKey:Xu,signature:r0},gu),L0=new URL(window.location.href);if(L0.hash="",L0.search="",window.history.replaceState({},document.title,L0),localStorage.removeItem("message"),O0){const V0={recipient:p0.recipient,callbackUrl:p0.callbackUrl,nonce:p0.nonce.toString("base64")},u1={payload:{message:y0,metadata:V0},publicKey:Xu},g1={wallet:WalletType.NEAR({networkId:getNearEnvironment()}),verifyingKey:Xu,walletAddress:Iu},E1={walletSignature:r0,payload:u1.payload,walletMetadata:g1},B1=Ws?await apiClient(Su).node().login(E1):await apiClient(Su).node().addRootKey(E1);if(B1.error){const lv=Ws?t$4.loginError:t$4.rootkeyError;console.error(`${lv}: ${B1.error.message}`),gu(`${lv}: ${B1.error.message}`)}else setStorageNodeAuthorized(),c("/identity")}else console.error(t$4.messageNotVerifiedError),gu(t$4.messageNotVerifiedError)},[tt]);async function $a({selector:Ws,appName:gu,setErrorMessage:Su,showServerDownPopup:$u}){var Iu,Xu,r0;try{const p0=await apiClient($u).node().requestChallenge();if(p0.error)return;const{publicKey:y0}=await getOrCreateKeypair(),A0=await Ws.wallet("my-near-wallet"),$0=((Iu=p0==null?void 0:p0.data)==null?void 0:Iu.nonce)??cryptoBrowserifyExports.randomBytes(32).toString("hex"),O0=Buffer$1$1.from($0,"base64"),L0=gu,V0=window.location.href,F0=((Xu=p0.data)==null?void 0:Xu.nodeSignature)??"",u1=((r0=p0.data)==null?void 0:r0.timestamp)??new Date().getTime(),E1=JSON.stringify({nodeSignature:F0,publicKey:y0}),B1={publicKey:y0,nodeSignature:F0,nonce:O0.toString("base64"),timestamp:u1,message:E1};A0.type==="browser"&&localStorage.setItem("message",JSON.stringify({message:E1,nonce:[...O0],recipient:L0,callbackUrl:V0,state:JSON.stringify(B1)})),await A0.signMessage({message:E1,nonce:O0,recipient:L0,callbackUrl:V0})}catch(p0){console.error(`${t$4.signMessageError}: ${p0}`),Su(t$4.signMessageError)}}return{getAccount:d,handleSignMessage:$a,verifyMessageBrowserWallet:nt}}const useWallet=()=>{function o(d){d.show()}async function a({account:d,selector:tt,setAccount:nt,setErrorMessage:$a}){if(!d)return;(await tt.wallet()).signOut().then(()=>{nt(null)}).catch(gu=>{$a(t$4.signOutError),console.error(gu)})}function c({accounts:d,accountId:tt,selector:nt}){var Su;const $a=d.findIndex($u=>$u.accountId===tt),Ws=$ao.$optionsCount}, 1fr); @@ -853,7 +853,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 color: #4cfafc; } } -`;function ApplicationsTable$1(o){const a=translations.applicationsPage.applicationsTable,c=["NAME","ID","LATEST VERSION","PUBLISHED BY"];return jsxRuntimeExports.jsxs(ContentCard,{headerTitle:a.title,headerOptionText:a.publishNewAppText,headerOnOptionClick:o.navigateToPublishApp,headerSecondOptionText:a.installNewAppText,headerOnSecondOptionClick:o.navigateToInstallApp,children:[jsxRuntimeExports.jsx(StatusModal,{show:o.showStatusModal,closeModal:o.closeModal,modalContent:o.uninstallStatus}),jsxRuntimeExports.jsx(ActionDialog,{show:o.showActionDialog,closeDialog:()=>o.setShowActionDialog(!1),onConfirm:o.uninstallApplication,title:a.actionDialog.title,subtitle:a.actionDialog.subtitle,buttonActionText:a.actionDialog.buttonActionText}),jsxRuntimeExports.jsxs(FlexWrapper$6,{children:[jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:o.tableOptions,showOptionsCount:!1,currentOption:o.currentOption,setCurrentOption:o.setCurrentOption}),o.currentOption===Options.AVAILABLE&&jsxRuntimeExports.jsx(ListTable,{listHeaderItems:c,numOfColumns:4,listItems:o.applicationsList.available,rowItem:applicationRowItem,roundTopItem:!0,noItemsText:a.noAvailableAppsText,onRowItemClick:d=>{var tt=o.applicationsList.available.find(nt=>nt.id===d);o.navigateToAppDetails(tt)},error:o.errorMessage}),o.currentOption===Options.OWNED&&jsxRuntimeExports.jsx(ListTable,{listHeaderItems:c,numOfColumns:4,listItems:o.applicationsList.owned,rowItem:applicationRowItem,roundTopItem:!0,noItemsText:a.noOwnedAppsText,onRowItemClick:d=>{var tt=o.applicationsList.owned.find(nt=>nt.id===d);o.navigateToAppDetails(tt)},error:o.errorMessage}),o.currentOption===Options.INSTALLED&&jsxRuntimeExports.jsx(ListTable,{listHeaderItems:c,numOfColumns:5,listItems:o.applicationsList.installed,rowItem:installedApplicationRowItem,roundTopItem:!0,noItemsText:a.noInstalledAppsText,onRowItemClick:d=>o.showModal(d)})]})]})}var ContextOptions=(o=>(o.JOINED="JOINED",o.INVITED="INVITED",o))(ContextOptions||{}),DetailsOptions=(o=>(o.DETAILS="DETAILS",o.CLIENT_KEYS="CLIENT_KEYS",o.USERS="USERS",o))(DetailsOptions||{}),ApplicationOptions=(o=>(o.AVAILABLE="AVAILABLE",o.OWNED="OWNED",o.INSTALLED="INSTALLED",o))(ApplicationOptions||{});const initialOptions$3=[{name:"Available",id:ApplicationOptions.AVAILABLE,count:0},{name:"Owned",id:ApplicationOptions.OWNED,count:0},{name:"Installed",id:ApplicationOptions.INSTALLED,count:0}];function ApplicationsPage(){const o=useNavigate(),{showServerDownPopup:a}=useServerDown(),{getPackages:c,getLatestRelease:d,getPackage:tt}=useRPC(),[nt,$a]=reactExports.useState(""),[Ys,gu]=reactExports.useState(ApplicationOptions.AVAILABLE),[xu]=reactExports.useState(initialOptions$3),[$u,Iu]=reactExports.useState({available:[],owned:[],installed:[]}),[Xu,i0]=reactExports.useState(!1),[p0,w0]=reactExports.useState(!1),[A0,$0]=reactExports.useState(""),[O0,L0]=reactExports.useState({title:"",message:"",error:!1});reactExports.useEffect(()=>{(async()=>{const E1=await c();if(E1.length!==0){var B1=await Promise.all(E1.map(async lv=>{const j1=await d(lv.id);return{id:lv.id,name:lv.name,description:lv.description,repository:lv.repository,owner:lv.owner,version:(j1==null?void 0:j1.version)??"",blob:"",source:"",contract_app_id:lv.id}}));B1=B1.filter(lv=>lv.version!==""),Iu(lv=>({...lv,available:B1}))}})()},[]);const q0=async()=>{var j1;$a("");const g1=await apiClient(a).node().getInstalledApplications();if(g1.error){$a(g1.error.message);return}let E1=(j1=g1.data)==null?void 0:j1.apps;if(E1.length!==0){var B1=await Promise.all(E1.map(async r1=>{var t1=parseAppMetadata(r1.metadata);let D0=null;if(!t1)D0={id:r1.id,version:r1.version,source:r1.source,blob:r1.blob,contract_app_id:null,name:"local app",description:null,repository:null,owner:null};else{const[Z0,f1]=await Promise.all([tt(t1.contractAppId),d(t1.contractAppId)]);Z0&&(D0={...r1,contract_app_id:t1.contractAppId,name:(Z0==null?void 0:Z0.name)??"",description:Z0==null?void 0:Z0.description,repository:Z0==null?void 0:Z0.repository,owner:Z0==null?void 0:Z0.owner,version:(f1==null?void 0:f1.version)??""})}return D0})),lv=B1.filter(r1=>r1!==null);Iu(r1=>({...r1,installed:lv}))}};reactExports.useEffect(()=>{q0()},[]);const F0=async()=>{var lv,j1;const g1=await apiClient(a).node().getContexts();if(g1.error){L0({title:"Error",message:g1.error.message,error:!0}),w0(!1),i0(!0);return}const E1=(lv=g1.data)==null?void 0:lv.contexts;if(E1&&E1.length!==0){const r1=(j1=g1.data)==null?void 0:j1.contexts,t1=(r1==null?void 0:r1.filter(D0=>D0.applicationId===A0).map(D0=>D0.id))??[];if(t1.length!==0){L0({title:"This application cannot be uninstalled",message:`This application is used by the following contexts: ${t1.join(", ")}`,error:!0}),w0(!1),i0(!0);return}}const B1=await apiClient(a).node().uninstallApplication(A0);B1.error?L0({title:"Error",message:B1.error.message,error:!0}):(await q0(),L0({title:"Success",message:"Application uninstalled successfully",error:!1})),w0(!1),i0(!0)},u1=g1=>{$0(g1),w0(!0)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(ApplicationsTable$1,{applicationsList:$u,currentOption:Ys,setCurrentOption:gu,tableOptions:xu,navigateToAppDetails:g1=>{g1&&o(`/applications/${g1.id}`)},navigateToPublishApp:()=>o("/publish-application"),navigateToInstallApp:()=>o("/applications/install"),uninstallApplication:F0,showStatusModal:Xu,closeModal:()=>i0(!1),uninstallStatus:O0,showActionDialog:p0,setShowActionDialog:w0,showModal:u1,errorMessage:nt})})]})}const RowItem$5=pt$1.div` +`;function ApplicationsTable$1(o){const a=translations.applicationsPage.applicationsTable,c=["NAME","ID","LATEST VERSION","PUBLISHED BY"];return jsxRuntimeExports.jsxs(ContentCard,{headerTitle:a.title,headerOptionText:a.publishNewAppText,headerOnOptionClick:o.navigateToPublishApp,headerSecondOptionText:a.installNewAppText,headerOnSecondOptionClick:o.navigateToInstallApp,children:[jsxRuntimeExports.jsx(StatusModal,{show:o.showStatusModal,closeModal:o.closeModal,modalContent:o.uninstallStatus}),jsxRuntimeExports.jsx(ActionDialog,{show:o.showActionDialog,closeDialog:()=>o.setShowActionDialog(!1),onConfirm:o.uninstallApplication,title:a.actionDialog.title,subtitle:a.actionDialog.subtitle,buttonActionText:a.actionDialog.buttonActionText}),jsxRuntimeExports.jsxs(FlexWrapper$6,{children:[jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:o.tableOptions,showOptionsCount:!1,currentOption:o.currentOption,setCurrentOption:o.setCurrentOption}),o.currentOption===Options.AVAILABLE&&jsxRuntimeExports.jsx(ListTable,{listHeaderItems:c,numOfColumns:4,listItems:o.applicationsList.available,rowItem:applicationRowItem,roundTopItem:!0,noItemsText:a.noAvailableAppsText,onRowItemClick:d=>{var tt=o.applicationsList.available.find(nt=>nt.id===d);o.navigateToAppDetails(tt)},error:o.errorMessage}),o.currentOption===Options.OWNED&&jsxRuntimeExports.jsx(ListTable,{listHeaderItems:c,numOfColumns:4,listItems:o.applicationsList.owned,rowItem:applicationRowItem,roundTopItem:!0,noItemsText:a.noOwnedAppsText,onRowItemClick:d=>{var tt=o.applicationsList.owned.find(nt=>nt.id===d);o.navigateToAppDetails(tt)},error:o.errorMessage}),o.currentOption===Options.INSTALLED&&jsxRuntimeExports.jsx(ListTable,{listHeaderItems:c,numOfColumns:5,listItems:o.applicationsList.installed,rowItem:installedApplicationRowItem,roundTopItem:!0,noItemsText:a.noInstalledAppsText,onRowItemClick:d=>o.showModal(d)})]})]})}var ContextOptions=(o=>(o.JOINED="JOINED",o.INVITED="INVITED",o))(ContextOptions||{}),DetailsOptions=(o=>(o.DETAILS="DETAILS",o.CLIENT_KEYS="CLIENT_KEYS",o.USERS="USERS",o))(DetailsOptions||{}),ApplicationOptions=(o=>(o.AVAILABLE="AVAILABLE",o.OWNED="OWNED",o.INSTALLED="INSTALLED",o))(ApplicationOptions||{});const initialOptions$3=[{name:"Available",id:ApplicationOptions.AVAILABLE,count:0},{name:"Owned",id:ApplicationOptions.OWNED,count:0},{name:"Installed",id:ApplicationOptions.INSTALLED,count:0}];function ApplicationsPage(){const o=useNavigate(),{showServerDownPopup:a}=useServerDown(),{getPackages:c,getLatestRelease:d,getPackage:tt}=useRPC(),[nt,$a]=reactExports.useState(""),[Ws,gu]=reactExports.useState(ApplicationOptions.AVAILABLE),[Su]=reactExports.useState(initialOptions$3),[$u,Iu]=reactExports.useState({available:[],owned:[],installed:[]}),[Xu,r0]=reactExports.useState(!1),[p0,y0]=reactExports.useState(!1),[A0,$0]=reactExports.useState(""),[O0,L0]=reactExports.useState({title:"",message:"",error:!1});reactExports.useEffect(()=>{(async()=>{const E1=await c();if(E1.length!==0){var B1=await Promise.all(E1.map(async lv=>{const j1=await d(lv.id);return{id:lv.id,name:lv.name,description:lv.description,repository:lv.repository,owner:lv.owner,version:(j1==null?void 0:j1.version)??"",blob:"",source:"",contract_app_id:lv.id}}));B1=B1.filter(lv=>lv.version!==""),Iu(lv=>({...lv,available:B1}))}})()},[]);const V0=async()=>{var j1;$a("");const g1=await apiClient(a).node().getInstalledApplications();if(g1.error){$a(g1.error.message);return}let E1=(j1=g1.data)==null?void 0:j1.apps;if(E1.length!==0){var B1=await Promise.all(E1.map(async r1=>{var t1=parseAppMetadata(r1.metadata);let D0=null;if(!t1)D0={id:r1.id,version:r1.version,source:r1.source,blob:r1.blob,contract_app_id:null,name:"local app",description:null,repository:null,owner:null};else{const[Z0,f1]=await Promise.all([tt(t1.contractAppId),d(t1.contractAppId)]);Z0&&(D0={...r1,contract_app_id:t1.contractAppId,name:(Z0==null?void 0:Z0.name)??"",description:Z0==null?void 0:Z0.description,repository:Z0==null?void 0:Z0.repository,owner:Z0==null?void 0:Z0.owner,version:(f1==null?void 0:f1.version)??""})}return D0})),lv=B1.filter(r1=>r1!==null);Iu(r1=>({...r1,installed:lv}))}};reactExports.useEffect(()=>{V0()},[]);const F0=async()=>{var lv,j1;const g1=await apiClient(a).node().getContexts();if(g1.error){L0({title:"Error",message:g1.error.message,error:!0}),y0(!1),r0(!0);return}const E1=(lv=g1.data)==null?void 0:lv.contexts;if(E1&&E1.length!==0){const r1=(j1=g1.data)==null?void 0:j1.contexts,t1=(r1==null?void 0:r1.filter(D0=>D0.applicationId===A0).map(D0=>D0.id))??[];if(t1.length!==0){L0({title:"This application cannot be uninstalled",message:`This application is used by the following contexts: ${t1.join(", ")}`,error:!0}),y0(!1),r0(!0);return}}const B1=await apiClient(a).node().uninstallApplication(A0);B1.error?L0({title:"Error",message:B1.error.message,error:!0}):(await V0(),L0({title:"Success",message:"Application uninstalled successfully",error:!1})),y0(!1),r0(!0)},u1=g1=>{$0(g1),y0(!0)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(ApplicationsTable$1,{applicationsList:$u,currentOption:Ws,setCurrentOption:gu,tableOptions:Su,navigateToAppDetails:g1=>{g1&&o(`/applications/${g1.id}`)},navigateToPublishApp:()=>o("/publish-application"),navigateToInstallApp:()=>o("/applications/install"),uninstallApplication:F0,showStatusModal:Xu,closeModal:()=>r0(!1),uninstallStatus:O0,showActionDialog:p0,setShowActionDialog:y0,showModal:u1,errorMessage:nt})})]})}const RowItem$5=pt$1.div` display: flex; align-items: center; ${o=>o.$hasBorders?` @@ -900,7 +900,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 } `;function rowItem$1(o,a,c,d){var nt;const tt=translations.contextPage;return jsxRuntimeExports.jsxs(RowItem$5,{$hasBorders:a===c,children:[jsxRuntimeExports.jsx("a",{href:`contexts/${o.id}`,className:"row-item id",children:o.id}),jsxRuntimeExports.jsx("div",{className:"row-item name",children:((nt=o.package)==null?void 0:nt.name)??tt.devApplicationTitle}),jsxRuntimeExports.jsx("div",{className:"menu-dropdown",children:jsxRuntimeExports.jsx(MenuIconDropdown,{options:[{title:tt.deleteContextText,onClick:()=>d&&d(o.id)}]})})]},o.id)}const FlexWrapper$5=pt$1.div` flex: 1; -`;function ContextTable$1({nodeContextList:o,navigateToStartContext:a,currentOption:c,setCurrentOption:d,tableOptions:tt,deleteNodeContext:nt,showStatusModal:$a,closeModal:Ys,deleteStatus:gu,showActionDialog:xu,setShowActionDialog:$u,showModal:Iu,errorMessage:Xu}){const i0=translations.contextPage;return jsxRuntimeExports.jsxs(ContentCard,{headerTitle:i0.contextPageTitle,headerOptionText:i0.startNewContextText,headerDescription:i0.contextPageDescription,headerOnOptionClick:a,children:[jsxRuntimeExports.jsx(StatusModal,{show:$a,closeModal:Ys,modalContent:gu}),jsxRuntimeExports.jsx(ActionDialog,{show:xu,closeDialog:()=>$u(!1),onConfirm:nt,title:i0.actionDialog.title,subtitle:i0.actionDialog.subtitle}),jsxRuntimeExports.jsxs(FlexWrapper$5,{children:[jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:tt,showOptionsCount:!0,currentOption:c,setCurrentOption:d}),jsxRuntimeExports.jsx(ListTable,{listHeaderItems:["ID","INSTALLED APPLICATION"],numOfColumns:2,listItems:o.joined,rowItem:rowItem$1,roundTopItem:!0,noItemsText:i0.noJoinedAppsListText,onRowItemClick:Iu,error:Xu})]})]})}const initialOptions$2=[{name:"Joined",id:ContextOptions.JOINED,count:0}];function ContextsPage(){const o=useNavigate(),{showServerDownPopup:a}=useServerDown(),{getPackage:c}=useRPC(),[d,tt]=reactExports.useState(ContextOptions.JOINED),[nt,$a]=reactExports.useState(initialOptions$2),[Ys,gu]=reactExports.useState(""),[xu,$u]=reactExports.useState(!1),[Iu,Xu]=reactExports.useState(!1),[i0,p0]=reactExports.useState(null),[w0,A0]=reactExports.useState({title:"",message:"",error:!1}),[$0,O0]=reactExports.useState({joined:[]}),L0=reactExports.useCallback(async E1=>{try{return await Promise.all(E1.map(async lv=>{var D0,Z0;const j1=(D0=(await apiClient(a).node().getInstalledApplicationDetails(lv.applicationId)).data)==null?void 0:D0.metadata;let r1=null;if(j1){const f1=(Z0=parseAppMetadata(j1))==null?void 0:Z0.contractAppId;f1&&(r1=await c(f1))}return{id:lv.id,package:r1}}))}catch(B1){return console.error("Error generating context objects:",B1),[]}},[c]),q0=reactExports.useCallback(async()=>{var B1;gu("");const E1=await apiClient(a).node().getContexts();if(E1.error){gu(E1.error.message);return}if(E1.data){const lv=E1.data,j1=await L0(lv.contexts);O0(r1=>({...r1,joined:j1})),$a([{name:"Joined",id:ContextOptions.JOINED,count:((B1=lv.contexts)==null?void 0:B1.length)??0}])}},[]);reactExports.useEffect(()=>{q0()},[q0]);const F0=async()=>{if(!i0)return;(await apiClient(a).node().deleteContext(i0)).error?A0({title:"Error",message:`Could not delete context with id: ${i0}!`,error:!0}):A0({title:"Success",message:`Context with id: ${i0} deleted.`,error:!1}),p0(null),Xu(!1),$u(!0)},u1=async()=>{$u(!1),w0.error||await q0(),A0({title:"",message:"",error:!1})},g1=E1=>{p0(E1),Xu(!0)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(ContextTable$1,{nodeContextList:$0,navigateToStartContext:()=>o("/contexts/start-context"),currentOption:d,setCurrentOption:tt,tableOptions:nt,deleteNodeContext:F0,showStatusModal:xu,closeModal:u1,deleteStatus:w0,showActionDialog:Iu,setShowActionDialog:Xu,showModal:g1,errorMessage:Ys})})]})}const RowItem$4=pt$1.div` +`;function ContextTable$1({nodeContextList:o,navigateToStartContext:a,currentOption:c,setCurrentOption:d,tableOptions:tt,deleteNodeContext:nt,showStatusModal:$a,closeModal:Ws,deleteStatus:gu,showActionDialog:Su,setShowActionDialog:$u,showModal:Iu,errorMessage:Xu}){const r0=translations.contextPage;return jsxRuntimeExports.jsxs(ContentCard,{headerTitle:r0.contextPageTitle,headerOptionText:r0.startNewContextText,headerDescription:r0.contextPageDescription,headerOnOptionClick:a,children:[jsxRuntimeExports.jsx(StatusModal,{show:$a,closeModal:Ws,modalContent:gu}),jsxRuntimeExports.jsx(ActionDialog,{show:Su,closeDialog:()=>$u(!1),onConfirm:nt,title:r0.actionDialog.title,subtitle:r0.actionDialog.subtitle}),jsxRuntimeExports.jsxs(FlexWrapper$5,{children:[jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:tt,showOptionsCount:!0,currentOption:c,setCurrentOption:d}),jsxRuntimeExports.jsx(ListTable,{listHeaderItems:["ID","INSTALLED APPLICATION"],numOfColumns:2,listItems:o.joined,rowItem:rowItem$1,roundTopItem:!0,noItemsText:r0.noJoinedAppsListText,onRowItemClick:Iu,error:Xu})]})]})}const initialOptions$2=[{name:"Joined",id:ContextOptions.JOINED,count:0}];function ContextsPage(){const o=useNavigate(),{showServerDownPopup:a}=useServerDown(),{getPackage:c}=useRPC(),[d,tt]=reactExports.useState(ContextOptions.JOINED),[nt,$a]=reactExports.useState(initialOptions$2),[Ws,gu]=reactExports.useState(""),[Su,$u]=reactExports.useState(!1),[Iu,Xu]=reactExports.useState(!1),[r0,p0]=reactExports.useState(null),[y0,A0]=reactExports.useState({title:"",message:"",error:!1}),[$0,O0]=reactExports.useState({joined:[]}),L0=reactExports.useCallback(async E1=>{try{return await Promise.all(E1.map(async lv=>{var D0,Z0;const j1=(D0=(await apiClient(a).node().getInstalledApplicationDetails(lv.applicationId)).data)==null?void 0:D0.metadata;let r1=null;if(j1){const f1=(Z0=parseAppMetadata(j1))==null?void 0:Z0.contractAppId;f1&&(r1=await c(f1))}return{id:lv.id,package:r1}}))}catch(B1){return console.error("Error generating context objects:",B1),[]}},[c]),V0=reactExports.useCallback(async()=>{var B1;gu("");const E1=await apiClient(a).node().getContexts();if(E1.error){gu(E1.error.message);return}if(E1.data){const lv=E1.data,j1=await L0(lv.contexts);O0(r1=>({...r1,joined:j1})),$a([{name:"Joined",id:ContextOptions.JOINED,count:((B1=lv.contexts)==null?void 0:B1.length)??0}])}},[]);reactExports.useEffect(()=>{V0()},[V0]);const F0=async()=>{if(!r0)return;(await apiClient(a).node().deleteContext(r0)).error?A0({title:"Error",message:`Could not delete context with id: ${r0}!`,error:!0}):A0({title:"Success",message:`Context with id: ${r0} deleted.`,error:!1}),p0(null),Xu(!1),$u(!0)},u1=async()=>{$u(!1),y0.error||await V0(),A0({title:"",message:"",error:!1})},g1=E1=>{p0(E1),Xu(!0)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(ContextTable$1,{nodeContextList:$0,navigateToStartContext:()=>o("/contexts/start-context"),currentOption:d,setCurrentOption:tt,tableOptions:nt,deleteNodeContext:F0,showStatusModal:Su,closeModal:u1,deleteStatus:y0,showActionDialog:Iu,setShowActionDialog:Xu,showModal:g1,errorMessage:Ws})})]})}const RowItem$4=pt$1.div` display: flex; width: 100%; align-items: center; @@ -958,10 +958,10 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 color: #4cfafc; } } -`;function ApplicationsTable({applicationsList:o,currentOption:a,setCurrentOption:c,tableOptions:d,closeModal:tt,selectApplication:nt}){const $a=translations.startContextPage.applicationList,Ys=["NAME","ID","LATEST VERSION","PUBLISHED"];return jsxRuntimeExports.jsx(ContentCard,{headerTitle:$a.listTitle,children:jsxRuntimeExports.jsxs(FlexWrapper$4,{children:[jsxRuntimeExports.jsx(ForwardRef,{onClick:tt,className:"close-button"}),jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:d,showOptionsCount:!0,currentOption:a,setCurrentOption:c}),a===Options.AVAILABLE?jsxRuntimeExports.jsx(ListTable,{listHeaderItems:Ys,numOfColumns:4,listItems:o.available,rowItem,roundTopItem:!0,noItemsText:$a.noAvailableAppsText,onRowItemClick:nt}):jsxRuntimeExports.jsx(ListTable,{listHeaderItems:Ys,numOfColumns:4,listItems:o.owned,rowItem,roundTopItem:!0,noItemsText:$a.noOwnedAppsText})]})})}const ModalWrapper$4=pt$1.div` +`;function ApplicationsTable({applicationsList:o,currentOption:a,setCurrentOption:c,tableOptions:d,closeModal:tt,selectApplication:nt}){const $a=translations.startContextPage.applicationList,Ws=["NAME","ID","LATEST VERSION","PUBLISHED"];return jsxRuntimeExports.jsx(ContentCard,{headerTitle:$a.listTitle,children:jsxRuntimeExports.jsxs(FlexWrapper$4,{children:[jsxRuntimeExports.jsx(ForwardRef,{onClick:tt,className:"close-button"}),jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:d,showOptionsCount:!0,currentOption:a,setCurrentOption:c}),a===Options.AVAILABLE?jsxRuntimeExports.jsx(ListTable,{listHeaderItems:Ws,numOfColumns:4,listItems:o.available,rowItem,roundTopItem:!0,noItemsText:$a.noAvailableAppsText,onRowItemClick:nt}):jsxRuntimeExports.jsx(ListTable,{listHeaderItems:Ws,numOfColumns:4,listItems:o.owned,rowItem,roundTopItem:!0,noItemsText:$a.noOwnedAppsText})]})})}const ModalWrapper$4=pt$1.div` background-color: #212325; border-radius: 0.5rem; -`,initialOptions$1=[{name:"Available",id:Options.AVAILABLE,count:0},{name:"Owned",id:Options.OWNED,count:0}];function ApplicationsPopup({show:o,closeModal:a,setApplication:c}){const{getPackages:d,getLatestRelease:tt,getPackage:nt}=useRPC(),[$a,Ys]=reactExports.useState(Options.AVAILABLE),[gu,xu]=reactExports.useState(initialOptions$1),[$u,Iu]=reactExports.useState({available:[],owned:[]});reactExports.useEffect(()=>{(async()=>{const p0=await d();if(p0.length!==0){const w0=await Promise.all(p0.map(async A0=>{const $0=await tt(A0.id);return{...A0,version:$0==null?void 0:$0.version}}));Iu(A0=>({...A0,available:w0})),xu([{name:"Available",id:Options.AVAILABLE,count:w0.length},{name:"Owned",id:Options.OWNED,count:0}])}})()},[tt,d]);const Xu=async i0=>{const p0=await nt(i0),w0=await tt(i0);c({appId:i0,name:(p0==null?void 0:p0.name)??"",version:(w0==null?void 0:w0.version)??"",path:(w0==null?void 0:w0.path)??"",hash:(w0==null?void 0:w0.hash)??""}),a()};return jsxRuntimeExports.jsx(Modal$2,{show:o,backdrop:"static",keyboard:!1,className:"modal-xl",centered:!0,children:jsxRuntimeExports.jsx(ModalWrapper$4,{children:jsxRuntimeExports.jsx(ApplicationsTable,{applicationsList:$u,currentOption:$a,setCurrentOption:Ys,tableOptions:gu,closeModal:a,selectApplication:Xu})})})}const Wrapper$c=pt$1.div` +`,initialOptions$1=[{name:"Available",id:Options.AVAILABLE,count:0},{name:"Owned",id:Options.OWNED,count:0}];function ApplicationsPopup({show:o,closeModal:a,setApplication:c}){const{getPackages:d,getLatestRelease:tt,getPackage:nt}=useRPC(),[$a,Ws]=reactExports.useState(Options.AVAILABLE),[gu,Su]=reactExports.useState(initialOptions$1),[$u,Iu]=reactExports.useState({available:[],owned:[]});reactExports.useEffect(()=>{(async()=>{const p0=await d();if(p0.length!==0){const y0=await Promise.all(p0.map(async A0=>{const $0=await tt(A0.id);return{...A0,version:$0==null?void 0:$0.version}}));Iu(A0=>({...A0,available:y0})),Su([{name:"Available",id:Options.AVAILABLE,count:y0.length},{name:"Owned",id:Options.OWNED,count:0}])}})()},[tt,d]);const Xu=async r0=>{const p0=await nt(r0),y0=await tt(r0);c({appId:r0,name:(p0==null?void 0:p0.name)??"",version:(y0==null?void 0:y0.version)??"",path:(y0==null?void 0:y0.path)??"",hash:(y0==null?void 0:y0.hash)??""}),a()};return jsxRuntimeExports.jsx(Modal$2,{show:o,backdrop:"static",keyboard:!1,className:"modal-xl",centered:!0,children:jsxRuntimeExports.jsx(ModalWrapper$4,{children:jsxRuntimeExports.jsx(ApplicationsTable,{applicationsList:$u,currentOption:$a,setCurrentOption:Ws,tableOptions:gu,closeModal:a,selectApplication:Xu})})})}const Wrapper$c=pt$1.div` display: flex; flex: 1; flex-direction: column; @@ -1090,7 +1090,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 } } } -`;function StartContextCard({application:o,setApplication:a,isArgsChecked:c,setIsArgsChecked:d,argumentsJson:tt,setArgumentsJson:nt,startContext:$a,showBrowseApplication:Ys,setShowBrowseApplication:gu,onUploadClick:xu,isLoading:$u,showStatusModal:Iu,closeModal:Xu,startContextStatus:i0}){const p0=translations.startContextPage,w0=async()=>{if(o.appId){if(c&&!tt)return;await $a()}else return},A0=()=>{try{const $0=JSON.stringify(JSON.parse(tt),null,2);nt($0)}catch($0){console.log("error",$0)}};return jsxRuntimeExports.jsxs(Wrapper$c,{children:[jsxRuntimeExports.jsx(StatusModal,{show:Iu,closeModal:Xu,modalContent:i0}),Ys&&jsxRuntimeExports.jsx(ApplicationsPopup,{show:Ys,closeModal:()=>gu(!1),setApplication:a}),jsxRuntimeExports.jsxs("div",{className:"select-app-section",children:[jsxRuntimeExports.jsxs("div",{className:"section-title",children:[o.appId?p0.selectedApplicationTitle:p0.selectApplicationTitle,o.appId&&jsxRuntimeExports.jsx(ForwardRef,{className:"cancel-icon",onClick:()=>a({appId:"",name:"",version:"",path:"",hash:""})})]}),o.appId?jsxRuntimeExports.jsxs("div",{className:"selected-app",children:[jsxRuntimeExports.jsxs("p",{className:"label",children:[p0.idLabelText,jsxRuntimeExports.jsx("span",{className:"value",children:o.appId})]}),jsxRuntimeExports.jsxs("p",{className:"label",children:[p0.nameLabelText,jsxRuntimeExports.jsx("span",{className:"value",children:o.name})]}),jsxRuntimeExports.jsxs("p",{className:"label",children:[p0.versionLabelText,jsxRuntimeExports.jsx("span",{className:"value",children:o.version})]})]}):jsxRuntimeExports.jsxs("div",{className:"button-container",children:[jsxRuntimeExports.jsx(Button$2,{text:"Browse",width:"144px",onClick:()=>gu(!0)}),jsxRuntimeExports.jsx(Button$2,{text:"Upload",width:"144px",onClick:xu})]})]}),jsxRuntimeExports.jsxs("div",{className:"init-section",children:[jsxRuntimeExports.jsxs("div",{className:"init-title",children:[jsxRuntimeExports.jsx("input",{className:"form-check-input",type:"checkbox",value:"",id:"flexCheckChecked",checked:c,onChange:()=>d(!c)}),jsxRuntimeExports.jsx("div",{className:"section-title",children:p0.initSectionTitle})]}),c&&jsxRuntimeExports.jsxs("div",{className:"args-section",children:[jsxRuntimeExports.jsx("div",{className:"section-title",children:p0.argsTitleText}),jsxRuntimeExports.jsxs("div",{className:"input",children:[jsxRuntimeExports.jsx("label",{className:"label",children:p0.argsLabelText}),jsxRuntimeExports.jsx("textarea",{className:"args-input",value:tt,onChange:$0=>nt($0.target.value)}),jsxRuntimeExports.jsx("div",{className:"flex-wrapper",children:jsxRuntimeExports.jsx("div",{className:"format-btn",onClick:A0,children:p0.buttonFormatText})})]})]}),jsxRuntimeExports.jsx(Button$2,{text:"Start",width:"144px",onClick:w0,isLoading:$u})]})]})}function StartContextPage(){const o=translations.startContextPage,a=useNavigate(),{showServerDownPopup:c}=useServerDown(),[d,tt]=reactExports.useState({appId:"",name:"",version:"",path:"",hash:""}),[nt,$a]=reactExports.useState(!1),[Ys,gu]=reactExports.useState(""),[xu,$u]=reactExports.useState(!1),[Iu,Xu]=reactExports.useState(!1),[i0,p0]=reactExports.useState(!1),[w0,A0]=reactExports.useState({title:"",message:"",error:!1}),$0=async()=>{Xu(!0);const q0=await O0();if(!q0){Xu(!1),p0(!0);return}(await apiClient(c).node().startContexts(q0,Ys)).error?A0({title:o.startContextErrorTitle,message:o.startContextErrorMessage,error:!0}):A0({title:o.startContextSuccessTitle,message:o.startedContextMessage,error:!1}),Xu(!1),p0(!0)},O0=async()=>{if(!d.appId||!d.version)return null;const q0=await apiClient(c).node().installApplication(d.appId,d.version,d.path,d.hash);return q0.error?(A0({title:o.failInstallTitle,message:q0.error.message,error:!0}),null):(A0({title:o.successInstallTitle,message:`Installed application ${d.name}, version ${d.version}.`,error:!1}),q0.data.application_id)},L0=()=>{if(p0(!1),w0.error){A0({title:"",message:"",error:!1});return}a("/contexts")};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(ContentCard,{headerBackText:o.backButtonText,headerOnBackClick:()=>a("/contexts"),children:jsxRuntimeExports.jsx(StartContextCard,{application:d,setApplication:tt,isArgsChecked:nt,setIsArgsChecked:$a,argumentsJson:Ys,setArgumentsJson:gu,startContext:$0,showBrowseApplication:xu,setShowBrowseApplication:$u,onUploadClick:()=>a("/publish-application"),isLoading:Iu,showStatusModal:i0,closeModal:L0,startContextStatus:w0})})})]})}const CardWrapper$2=pt$1.div` +`;function StartContextCard({application:o,setApplication:a,isArgsChecked:c,setIsArgsChecked:d,argumentsJson:tt,setArgumentsJson:nt,startContext:$a,showBrowseApplication:Ws,setShowBrowseApplication:gu,onUploadClick:Su,isLoading:$u,showStatusModal:Iu,closeModal:Xu,startContextStatus:r0}){const p0=translations.startContextPage,y0=async()=>{if(o.appId){if(c&&!tt)return;await $a()}else return},A0=()=>{try{const $0=JSON.stringify(JSON.parse(tt),null,2);nt($0)}catch($0){console.log("error",$0)}};return jsxRuntimeExports.jsxs(Wrapper$c,{children:[jsxRuntimeExports.jsx(StatusModal,{show:Iu,closeModal:Xu,modalContent:r0}),Ws&&jsxRuntimeExports.jsx(ApplicationsPopup,{show:Ws,closeModal:()=>gu(!1),setApplication:a}),jsxRuntimeExports.jsxs("div",{className:"select-app-section",children:[jsxRuntimeExports.jsxs("div",{className:"section-title",children:[o.appId?p0.selectedApplicationTitle:p0.selectApplicationTitle,o.appId&&jsxRuntimeExports.jsx(ForwardRef,{className:"cancel-icon",onClick:()=>a({appId:"",name:"",version:"",path:"",hash:""})})]}),o.appId?jsxRuntimeExports.jsxs("div",{className:"selected-app",children:[jsxRuntimeExports.jsxs("p",{className:"label",children:[p0.idLabelText,jsxRuntimeExports.jsx("span",{className:"value",children:o.appId})]}),jsxRuntimeExports.jsxs("p",{className:"label",children:[p0.nameLabelText,jsxRuntimeExports.jsx("span",{className:"value",children:o.name})]}),jsxRuntimeExports.jsxs("p",{className:"label",children:[p0.versionLabelText,jsxRuntimeExports.jsx("span",{className:"value",children:o.version})]})]}):jsxRuntimeExports.jsxs("div",{className:"button-container",children:[jsxRuntimeExports.jsx(Button$2,{text:"Browse",width:"144px",onClick:()=>gu(!0)}),jsxRuntimeExports.jsx(Button$2,{text:"Upload",width:"144px",onClick:Su})]})]}),jsxRuntimeExports.jsxs("div",{className:"init-section",children:[jsxRuntimeExports.jsxs("div",{className:"init-title",children:[jsxRuntimeExports.jsx("input",{className:"form-check-input",type:"checkbox",value:"",id:"flexCheckChecked",checked:c,onChange:()=>d(!c)}),jsxRuntimeExports.jsx("div",{className:"section-title",children:p0.initSectionTitle})]}),c&&jsxRuntimeExports.jsxs("div",{className:"args-section",children:[jsxRuntimeExports.jsx("div",{className:"section-title",children:p0.argsTitleText}),jsxRuntimeExports.jsxs("div",{className:"input",children:[jsxRuntimeExports.jsx("label",{className:"label",children:p0.argsLabelText}),jsxRuntimeExports.jsx("textarea",{className:"args-input",value:tt,onChange:$0=>nt($0.target.value)}),jsxRuntimeExports.jsx("div",{className:"flex-wrapper",children:jsxRuntimeExports.jsx("div",{className:"format-btn",onClick:A0,children:p0.buttonFormatText})})]})]}),jsxRuntimeExports.jsx(Button$2,{text:"Start",width:"144px",onClick:y0,isLoading:$u})]})]})}function StartContextPage(){const o=translations.startContextPage,a=useNavigate(),{showServerDownPopup:c}=useServerDown(),[d,tt]=reactExports.useState({appId:"",name:"",version:"",path:"",hash:""}),[nt,$a]=reactExports.useState(!1),[Ws,gu]=reactExports.useState(""),[Su,$u]=reactExports.useState(!1),[Iu,Xu]=reactExports.useState(!1),[r0,p0]=reactExports.useState(!1),[y0,A0]=reactExports.useState({title:"",message:"",error:!1}),$0=async()=>{Xu(!0);const V0=await O0();if(!V0){Xu(!1),p0(!0);return}(await apiClient(c).node().createContexts(V0,Ws)).error?A0({title:o.startContextErrorTitle,message:o.startContextErrorMessage,error:!0}):A0({title:o.startContextSuccessTitle,message:o.startedContextMessage,error:!1}),Xu(!1),p0(!0)},O0=async()=>{if(!d.appId||!d.version)return null;const V0=await apiClient(c).node().installApplication(d.appId,d.version,d.path,d.hash);return V0.error?(A0({title:o.failInstallTitle,message:V0.error.message,error:!0}),null):(A0({title:o.successInstallTitle,message:`Installed application ${d.name}, version ${d.version}.`,error:!1}),V0.data.applicationId)},L0=()=>{if(p0(!1),y0.error){A0({title:"",message:"",error:!1});return}a("/contexts")};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:jsxRuntimeExports.jsx(ContentCard,{headerBackText:o.backButtonText,headerOnBackClick:()=>a("/contexts"),children:jsxRuntimeExports.jsx(StartContextCard,{application:d,setApplication:tt,isArgsChecked:nt,setIsArgsChecked:$a,argumentsJson:Ws,setArgumentsJson:gu,startContext:$0,showBrowseApplication:Su,setShowBrowseApplication:$u,onUploadClick:()=>a("/publish-application"),isLoading:Iu,showStatusModal:r0,closeModal:L0,startContextStatus:y0})})})]})}const CardWrapper$2=pt$1.div` padding: 2rem 2rem 3.75rem; height: fit-content; flex: 1; @@ -1144,7 +1144,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 .input:focus { border: 1px solid #4cfafc; } -`;function JoinContextCard({handleJoinContext:o,contextId:a,setContextId:c,showModal:d,modalContent:tt,closeModal:nt,navigateBack:$a}){const Ys=translations.joinContextPage;return jsxRuntimeExports.jsxs(CardWrapper$2,{children:[jsxRuntimeExports.jsx(StatusModal,{show:d,closeModal:nt,modalContent:tt}),jsxRuntimeExports.jsxs("div",{className:"title-wrapper",children:[jsxRuntimeExports.jsx(ForwardRef$5,{className:"arrow-icon-left",onClick:$a}),jsxRuntimeExports.jsx("div",{className:"title",children:Ys.title})]}),jsxRuntimeExports.jsx("label",{className:"label",children:Ys.contextIdLabel}),jsxRuntimeExports.jsx("input",{className:"input",value:a,onChange:gu=>c(gu.target.value)}),jsxRuntimeExports.jsx(Button$2,{text:Ys.buttonJoinText,onClick:o,width:"11.375rem",isDisabled:!a})]})}const Wrapper$b=pt$1.div` +`;function JoinContextCard({handleJoinContext:o,contextId:a,setContextId:c,showModal:d,modalContent:tt,closeModal:nt,navigateBack:$a}){const Ws=translations.joinContextPage;return jsxRuntimeExports.jsxs(CardWrapper$2,{children:[jsxRuntimeExports.jsx(StatusModal,{show:d,closeModal:nt,modalContent:tt}),jsxRuntimeExports.jsxs("div",{className:"title-wrapper",children:[jsxRuntimeExports.jsx(ForwardRef$5,{className:"arrow-icon-left",onClick:$a}),jsxRuntimeExports.jsx("div",{className:"title",children:Ws.title})]}),jsxRuntimeExports.jsx("label",{className:"label",children:Ws.contextIdLabel}),jsxRuntimeExports.jsx("input",{className:"input",value:a,onChange:gu=>c(gu.target.value)}),jsxRuntimeExports.jsx(Button$2,{text:Ws.buttonJoinText,onClick:o,width:"11.375rem",isDisabled:!a})]})}const Wrapper$b=pt$1.div` display: flex; width: 100%; padding: 4.705rem 2rem 2rem; @@ -1155,7 +1155,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-smooth: never; -`;function JoinContextPage(){const o=translations.joinContextPage,a=useNavigate(),{showServerDownPopup:c}=useServerDown(),[d,tt]=reactExports.useState(""),[nt,$a]=reactExports.useState(!1),[Ys,gu]=reactExports.useState({title:"",message:"",error:!1}),xu=async()=>{const Iu=await apiClient(c).node().joinContext(d);if(Iu.error){gu({title:o.joinErrorTitle,message:Iu.error.message,error:!0}),$a(!0);return}gu({title:o.joinSuccessTitle,message:o.joinSuccessMessage,error:!1}),$a(!0)},$u=()=>{$a(!1),Ys.error||(tt(""),gu({title:"",message:"",error:!1}),a("/contexts"))};return reactExports.useEffect(()=>{a("/contexts")},[a]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(Wrapper$b,{children:jsxRuntimeExports.jsx(JoinContextCard,{handleJoinContext:xu,contextId:d,setContextId:tt,showModal:nt,modalContent:Ys,closeModal:$u,navigateBack:()=>a("/contexts")})})]})}const RowItem$3=pt$1.div` +`;function JoinContextPage(){const o=translations.joinContextPage,a=useNavigate(),{showServerDownPopup:c}=useServerDown(),[d,tt]=reactExports.useState(""),[nt,$a]=reactExports.useState(!1),[Ws,gu]=reactExports.useState({title:"",message:"",error:!1}),Su=async()=>{const Iu=await apiClient(c).node().joinContext(d);if(Iu.error){gu({title:o.joinErrorTitle,message:Iu.error.message,error:!0}),$a(!0);return}gu({title:o.joinSuccessTitle,message:o.joinSuccessMessage,error:!1}),$a(!0)},$u=()=>{$a(!1),Ws.error||(tt(""),gu({title:"",message:"",error:!1}),a("/contexts"))};return reactExports.useEffect(()=>{a("/contexts")},[a]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(Wrapper$b,{children:jsxRuntimeExports.jsx(JoinContextCard,{handleJoinContext:Su,contextId:d,setContextId:tt,showModal:nt,modalContent:Ws,closeModal:$u,navigateBack:()=>a("/contexts")})})]})}const RowItem$3=pt$1.div` display: flex; width: 100%; align-items: center; @@ -1296,7 +1296,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 } `;function DetailsCard$1(o){var c,d,tt,nt,$a;const a=translations.contextPage.contextDetails;return o.details?jsxRuntimeExports.jsx(DetailsCardWrapper$1,{children:o.details?jsxRuntimeExports.jsxs("div",{className:"container",children:[jsxRuntimeExports.jsxs("div",{className:"context-id",children:[a.labelIdText,o.details.contextId]}),o.details.package?jsxRuntimeExports.jsx("div",{className:"highlight title inter-mid",children:a.titleApps}):jsxRuntimeExports.jsx("div",{className:"highlight title inter-mid",children:a.localAppTitle}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.labelNameText,jsxRuntimeExports.jsx("span",{className:"highlight",children:((c=o.details.package)==null?void 0:c.name)??"-"})]}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.labelOwnerText,jsxRuntimeExports.jsx("span",{className:"highlight",children:((d=o.details.package)==null?void 0:d.owner)??"-"})]}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.labelDescriptionText,((tt=o.details.package)==null?void 0:tt.description)??"-"]}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.labelRepositoryText,((nt=o.details.package)==null?void 0:nt.repository)??"-"]}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.lableVersionText,jsxRuntimeExports.jsx("span",{className:"highlight",children:(($a=o.details.release)==null?void 0:$a.version)??"-"})]}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.labelAppId,o.details.applicationId]}),jsxRuntimeExports.jsx("div",{className:"highlight title",children:a.titleStorage}),jsxRuntimeExports.jsxs("div",{className:"item",children:[a.labelStorageText,jsxRuntimeExports.jsx("span",{className:"highlight",children:o.contextStorage?convertBytes(o.contextStorage.sizeInBytes):o.contextStorageError})]})]}):jsxRuntimeExports.jsx("div",{className:"container-full",children:jsxRuntimeExports.jsx("div",{className:"item",children:o.details})})}):jsxRuntimeExports.jsx(LoaderSpinner,{})}const FlexWrapper$3=pt$1.div` flex: 1; -`;function ContextTable(o){const a=translations.contextPage.contextDetails;return jsxRuntimeExports.jsx(ContentCard,{headerBackText:a.title,headerOnBackClick:o.navigateToContextList,children:jsxRuntimeExports.jsxs(FlexWrapper$3,{children:[jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:o.tableOptions,showOptionsCount:!0,currentOption:o.currentOption,setCurrentOption:o.setCurrentOption}),o.currentOption===DetailsOptions.DETAILS&&jsxRuntimeExports.jsx(DetailsCard$1,{details:o.contextDetails,detailsErrror:o.contextDetailsError,contextStorage:o.contextStorage,contextStorageError:o.contextStorageError}),o.currentOption===DetailsOptions.CLIENT_KEYS&&jsxRuntimeExports.jsx(ListTable,{listDescription:a.clientKeysListDescription,numOfColumns:3,listHeaderItems:["TYPE","ADDED","PUBLIC KEY"],listItems:o.contextClientKeys||[],error:o.contextClientKeysError??"",rowItem:clientKeyRowItem,roundTopItem:!0,noItemsText:a.noClientKeysText}),o.currentOption===DetailsOptions.USERS&&jsxRuntimeExports.jsx(ListTable,{numOfColumns:2,listItems:o.contextUsers||[],error:o.contextUsersError??"",listHeaderItems:["USER ID","JOINED"],rowItem:userRowItem,roundTopItem:!0,noItemsText:a.noUsersText})]})})}const initialOptions=[{name:"Details",id:DetailsOptions.DETAILS,count:-1},{name:"Client Keys",id:DetailsOptions.CLIENT_KEYS,count:0},{name:"Users",id:DetailsOptions.USERS,count:0}];function ContextDetailsPage(){const{id:o}=useParams(),{showServerDownPopup:a}=useServerDown(),c=useNavigate(),[d,tt]=reactExports.useState(),[nt,$a]=reactExports.useState(null),[Ys,gu]=reactExports.useState(),[xu,$u]=reactExports.useState(null),[Iu,Xu]=reactExports.useState(),[i0,p0]=reactExports.useState(null),[w0,A0]=reactExports.useState(),[$0,O0]=reactExports.useState(null),[L0,q0]=reactExports.useState(DetailsOptions.DETAILS),[F0,u1]=reactExports.useState(initialOptions),{getPackage:g1,getLatestRelease:E1}=useRPC(),B1=reactExports.useCallback(async(lv,j1,r1)=>{var w1;let t1=lv.applicationId,D0=null,Z0=null;return r1&&r1.length!==0&&(t1=((w1=parseAppMetadata(r1))==null?void 0:w1.contractAppId)??lv.applicationId,D0=await g1(t1),Z0=await E1(t1)),{applicationId:t1,contextId:j1,package:D0,release:Z0}},[o]);return reactExports.useEffect(()=>{(async()=>{var j1,r1,t1,D0,Z0,f1,w1,m1,c1;if(o){const[G0,o1,d1,R1]=await Promise.all([apiClient(a).node().getContext(o),apiClient(a).node().getContextClientKeys(o),apiClient(a).node().getContextUsers(o),apiClient(a).node().getContextStorageUsage(o)]);if(G0.data){const O1=(j1=(await apiClient(a).node().getInstalledApplicationDetails(G0.data.context.applicationId)).data)==null?void 0:j1.metadata,Q1=await B1(G0.data.context,o,O1);tt(Q1)}else $a((r1=G0.error)==null?void 0:r1.message);o1.data?gu(o1.data.clientKeys):$u((t1=o1.error)==null?void 0:t1.message),d1.data?Xu(d1.data.contextUsers):p0((D0=d1.error)==null?void 0:D0.message),R1.data?A0(R1.data):O0((Z0=R1.error)==null?void 0:Z0.message),u1([{name:"Details",id:DetailsOptions.DETAILS,count:-1},{name:"Client Keys",id:DetailsOptions.CLIENT_KEYS,count:((w1=(f1=o1.data)==null?void 0:f1.clientKeys)==null?void 0:w1.length)??0},{name:"Users",id:DetailsOptions.USERS,count:((c1=(m1=d1.data)==null?void 0:m1.contextUsers)==null?void 0:c1.length)??0}])}})()},[B1,o]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:d&&Ys&&Iu&&w0&&jsxRuntimeExports.jsx(ContextTable,{contextDetails:d,contextDetailsError:nt,contextClientKeys:Ys,contextClientKeysError:xu,contextUsers:Iu,contextUsersError:i0,contextStorage:w0,contextStorageError:$0,navigateToContextList:()=>c("/contexts"),currentOption:L0,setCurrentOption:q0,tableOptions:F0})})]})}const ModalWrapper$3=pt$1.div` +`;function ContextTable(o){const a=translations.contextPage.contextDetails;return jsxRuntimeExports.jsx(ContentCard,{headerBackText:a.title,headerOnBackClick:o.navigateToContextList,children:jsxRuntimeExports.jsxs(FlexWrapper$3,{children:[jsxRuntimeExports.jsx(OptionsHeader,{tableOptions:o.tableOptions,showOptionsCount:!0,currentOption:o.currentOption,setCurrentOption:o.setCurrentOption}),o.currentOption===DetailsOptions.DETAILS&&jsxRuntimeExports.jsx(DetailsCard$1,{details:o.contextDetails,detailsErrror:o.contextDetailsError,contextStorage:o.contextStorage,contextStorageError:o.contextStorageError}),o.currentOption===DetailsOptions.CLIENT_KEYS&&jsxRuntimeExports.jsx(ListTable,{listDescription:a.clientKeysListDescription,numOfColumns:3,listHeaderItems:["TYPE","ADDED","PUBLIC KEY"],listItems:o.contextClientKeys||[],error:o.contextClientKeysError??"",rowItem:clientKeyRowItem,roundTopItem:!0,noItemsText:a.noClientKeysText}),o.currentOption===DetailsOptions.USERS&&jsxRuntimeExports.jsx(ListTable,{numOfColumns:2,listItems:o.contextUsers||[],error:o.contextUsersError??"",listHeaderItems:["USER ID","JOINED"],rowItem:userRowItem,roundTopItem:!0,noItemsText:a.noUsersText})]})})}const initialOptions=[{name:"Details",id:DetailsOptions.DETAILS,count:-1},{name:"Client Keys",id:DetailsOptions.CLIENT_KEYS,count:0},{name:"Users",id:DetailsOptions.USERS,count:0}];function ContextDetailsPage(){const{id:o}=useParams(),{showServerDownPopup:a}=useServerDown(),c=useNavigate(),[d,tt]=reactExports.useState(),[nt,$a]=reactExports.useState(null),[Ws,gu]=reactExports.useState(),[Su,$u]=reactExports.useState(null),[Iu,Xu]=reactExports.useState(),[r0,p0]=reactExports.useState(null),[y0,A0]=reactExports.useState(),[$0,O0]=reactExports.useState(null),[L0,V0]=reactExports.useState(DetailsOptions.DETAILS),[F0,u1]=reactExports.useState(initialOptions),{getPackage:g1,getLatestRelease:E1}=useRPC(),B1=reactExports.useCallback(async(lv,j1,r1)=>{var w1;let t1=lv.applicationId,D0=null,Z0=null;return r1&&r1.length!==0&&(t1=((w1=parseAppMetadata(r1))==null?void 0:w1.contractAppId)??lv.applicationId,D0=await g1(t1),Z0=await E1(t1)),{applicationId:t1,contextId:j1,package:D0,release:Z0}},[o]);return reactExports.useEffect(()=>{(async()=>{var j1,r1,t1,D0,Z0,f1,w1,m1,c1;if(o){const[G0,o1,d1,R1]=await Promise.all([apiClient(a).node().getContext(o),apiClient(a).node().getContextClientKeys(o),apiClient(a).node().getContextUsers(o),apiClient(a).node().getContextStorageUsage(o)]);if(G0.data){const O1=(j1=(await apiClient(a).node().getInstalledApplicationDetails(G0.data.applicationId)).data)==null?void 0:j1.metadata,Q1=await B1(G0.data,o,O1);tt(Q1)}else $a((r1=G0.error)==null?void 0:r1.message);o1.data?gu(o1.data.clientKeys):$u((t1=o1.error)==null?void 0:t1.message),d1.data?Xu(d1.data.contextUsers):p0((D0=d1.error)==null?void 0:D0.message),R1.data?A0(R1.data):O0((Z0=R1.error)==null?void 0:Z0.message),u1([{name:"Details",id:DetailsOptions.DETAILS,count:-1},{name:"Client Keys",id:DetailsOptions.CLIENT_KEYS,count:((w1=(f1=o1.data)==null?void 0:f1.clientKeys)==null?void 0:w1.length)??0},{name:"Users",id:DetailsOptions.USERS,count:((c1=(m1=d1.data)==null?void 0:m1.contextUsers)==null?void 0:c1.length)??0}])}})()},[B1,o]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:d&&Ws&&Iu&&y0&&jsxRuntimeExports.jsx(ContextTable,{contextDetails:d,contextDetailsError:nt,contextClientKeys:Ws,contextClientKeysError:Su,contextUsers:Iu,contextUsersError:r0,contextStorage:y0,contextStorageError:$0,navigateToContextList:()=>c("/contexts"),currentOption:L0,setCurrentOption:V0,tableOptions:F0})})]})}const ModalWrapper$3=pt$1.div` display: flex; flex-direction: column; justify-content: center; @@ -1377,7 +1377,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-smooth: never; -`;function ExportPage(){const o=translations.exportIdentityPage,{showServerDownPopup:a}=useServerDown(),[c,d]=reactExports.useState(!1),[tt,nt]=reactExports.useState({title:"",data:"",error:!1}),$a=async()=>{var gu;try{const xu=await apiClient(a).node().getDidList(),$u=JSON.stringify((gu=xu==null?void 0:xu.data)==null?void 0:gu.did,null,2);nt({title:o.exportSuccessTitle,data:$u,error:!1})}catch(xu){console.error("Error exporting identity",xu),nt({title:o.exportErrorTitle,data:xu.message,error:!0})}d(!0)},Ys=()=>{d(!1),tt.error||navigator.clipboard.writeText(tt.data),nt({title:"",data:"",error:!1})};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(ExportWrapper,{children:jsxRuntimeExports.jsx(ExportCard,{onClick:$a,showStatusModal:c,closeStatusModal:Ys,exportStatus:tt})})]})}const DetailsCardWrapper=pt$1.div` +`;function ExportPage(){const o=translations.exportIdentityPage,{showServerDownPopup:a}=useServerDown(),[c,d]=reactExports.useState(!1),[tt,nt]=reactExports.useState({title:"",data:"",error:!1}),$a=async()=>{var gu;try{const Su=await apiClient(a).node().getDidList(),$u=JSON.stringify((gu=Su==null?void 0:Su.data)==null?void 0:gu.did,null,2);nt({title:o.exportSuccessTitle,data:$u,error:!1})}catch(Su){console.error("Error exporting identity",Su),nt({title:o.exportErrorTitle,data:Su.message,error:!0})}d(!0)},Ws=()=>{d(!1),tt.error||navigator.clipboard.writeText(tt.data),nt({title:"",data:"",error:!1})};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(ExportWrapper,{children:jsxRuntimeExports.jsx(ExportCard,{onClick:$a,showStatusModal:c,closeStatusModal:Ws,exportStatus:tt})})]})}const DetailsCardWrapper=pt$1.div` .container { display: flex; flex-direction: column; @@ -1461,9 +1461,9 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 } `;function releaseRowItem(o,a,c){const d=tt=>{navigator.clipboard.writeText(tt).catch(nt=>{console.error("Failed to copy text to clipboard: ",nt)})};return jsxRuntimeExports.jsxs(RowItem$1,{$hasBorders:a===c,children:[jsxRuntimeExports.jsx("div",{className:"row-item name",children:o.version}),jsxRuntimeExports.jsxs("div",{className:"row-item read",children:[jsxRuntimeExports.jsx(ForwardRef$4,{className:"copy-icon",onClick:()=>d(o.path)}),jsxRuntimeExports.jsxs("span",{className:"long-text",children:[o.path.substring(0,20),"..."]})]}),jsxRuntimeExports.jsx("div",{className:"row-item read",children:jsxRuntimeExports.jsx("span",{className:"long-text",children:o.notes})}),jsxRuntimeExports.jsx(ForwardRef$4,{className:"copy-icon",onClick:()=>d(o.hash)}),jsxRuntimeExports.jsx("div",{className:"row-item read",children:truncateHash(o.hash)})]},o.hash)}const FlexWrapper$2=pt$1.div` flex: 1; -`;function ApplicationDetailsTable({applicationInformation:o,navigateToApplicationList:a,navigateToAddRelease:c}){const d=translations.applicationsPage.applicationsTable;return jsxRuntimeExports.jsx(ContentCard,{headerBackText:"Application",headerOnBackClick:a,descriptionComponent:jsxRuntimeExports.jsx(DetailsCard,{details:o.package}),headerOptionText:"Add new release",headerOnOptionClick:()=>{o.package.owner.length>0&&c()},children:jsxRuntimeExports.jsx(FlexWrapper$2,{children:jsxRuntimeExports.jsx(ListTable,{numOfColumns:4,listHeaderItems:["VERSION","PATH","NOTES","HASH"],listItems:o.releases||[],rowItem:releaseRowItem,roundTopItem:!0,noItemsText:d.noAvailableReleasesText})})})}function ApplicationDetailsPage(){const{id:o}=useParams(),{showServerDownPopup:a}=useServerDown(),c=useNavigate(),{getPackage:d,getReleases:tt}=useRPC(),[nt,$a]=reactExports.useState();return reactExports.useEffect(()=>{(async()=>{if(o){const gu=await apiClient(a).node().getInstalledApplicationDetails(o);let xu=null;if(gu.error?gu.error.code===400?xu={contractAppId:o}:console.error(gu.error.message):xu=parseAppMetadata(gu.data.metadata),xu){const $u=await d(xu.contractAppId),Iu=await tt(xu.contractAppId);$u&&Iu&&$a({package:$u,releases:Iu})}else $a({package:{id:o,name:"Local app",description:"",repository:"",owner:""},releases:null})}})()},[o]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:nt&&jsxRuntimeExports.jsx(ApplicationDetailsTable,{applicationInformation:nt,navigateToApplicationList:()=>c("/applications"),navigateToAddRelease:()=>c(`/applications/${o}/add-release`)})})]})}const{transactions,utils:utils$3}=nearAPI,getAccessKey=o=>{if(o==="FullAccess")return transactions.fullAccessKey();const{receiverId:a,methodNames:c=[]}=o,d=o.allowance?new bnExports$1.BN(o.allowance):void 0;return transactions.functionCallAccessKey(a,c,d)},createAction=o=>{switch(o.type){case"CreateAccount":return transactions.createAccount();case"DeployContract":{const{code:a}=o.params;return transactions.deployContract(a)}case"FunctionCall":{const{methodName:a,args:c,gas:d,deposit:tt}=o.params;return transactions.functionCall(a,c,new bnExports$1.BN(d),new bnExports$1.BN(tt))}case"Transfer":{const{deposit:a}=o.params;return transactions.transfer(new bnExports$1.BN(a))}case"Stake":{const{stake:a,publicKey:c}=o.params;return transactions.stake(new bnExports$1.BN(a),utils$3.PublicKey.from(c))}case"AddKey":{const{publicKey:a,accessKey:c}=o.params;return transactions.addKey(utils$3.PublicKey.from(a),getAccessKey(c.permission))}case"DeleteKey":{const{publicKey:a}=o.params;return transactions.deleteKey(utils$3.PublicKey.from(a))}case"DeleteAccount":{const{beneficiaryId:a}=o.params;return transactions.deleteAccount(a)}default:throw new Error("Invalid action type")}};var commonjsGlobal$2=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},fails$d$2=function(o){try{return!!o()}catch{return!0}},fails$c$2=fails$d$2,functionBindNative$2=!fails$c$2(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")}),NATIVE_BIND$3$2=functionBindNative$2,FunctionPrototype$2$2=Function.prototype,bind$5$2=FunctionPrototype$2$2.bind,call$e$2=FunctionPrototype$2$2.call,uncurryThis$d$2=NATIVE_BIND$3$2&&bind$5$2.bind(call$e$2,call$e$2),functionUncurryThis$2=NATIVE_BIND$3$2?function(o){return o&&uncurryThis$d$2(o)}:function(o){return o&&function(){return call$e$2.apply(o,arguments)}},uncurryThis$c$2=functionUncurryThis$2,toString$2$3=uncurryThis$c$2({}.toString),stringSlice$8=uncurryThis$c$2("".slice),classofRaw$1$2=function(o){return stringSlice$8(toString$2$3(o),8,-1)},uncurryThis$b$2=functionUncurryThis$2,fails$b$2=fails$d$2,classof$5$2=classofRaw$1$2,$Object$4$2=Object,split$5=uncurryThis$b$2("".split),indexedObject$2=fails$b$2(function(){return!$Object$4$2("z").propertyIsEnumerable(0)})?function(o){return classof$5$2(o)=="String"?split$5(o,""):$Object$4$2(o)}:$Object$4$2,$TypeError$b$2=TypeError,requireObjectCoercible$2$2=function(o){if(o==null)throw $TypeError$b$2("Can't call method on "+o);return o},IndexedObject$4=indexedObject$2,requireObjectCoercible$1$2=requireObjectCoercible$2$2,toIndexedObject$5$2=function(o){return IndexedObject$4(requireObjectCoercible$1$2(o))},check$2=function(o){return o&&o.Math==Math&&o},global$j$2=check$2(typeof globalThis=="object"&&globalThis)||check$2(typeof window=="object"&&window)||check$2(typeof self=="object"&&self)||check$2(typeof commonjsGlobal$2=="object"&&commonjsGlobal$2)||function(){return this}()||Function("return this")(),shared$3$2={exports:{}},global$i$2=global$j$2,defineProperty$4$2=Object.defineProperty,defineGlobalProperty$3$2=function(o,a){try{defineProperty$4$2(global$i$2,o,{value:a,configurable:!0,writable:!0})}catch{global$i$2[o]=a}return a},global$h$2=global$j$2,defineGlobalProperty$2$2=defineGlobalProperty$3$2,SHARED$2="__core-js_shared__",store$3$2=global$h$2[SHARED$2]||defineGlobalProperty$2$2(SHARED$2,{}),sharedStore$2=store$3$2,store$2$2=sharedStore$2;(shared$3$2.exports=function(o,a){return store$2$2[o]||(store$2$2[o]=a!==void 0?a:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var requireObjectCoercible$6=requireObjectCoercible$2$2,$Object$3$2=Object,toObject$2$2=function(o){return $Object$3$2(requireObjectCoercible$6(o))},uncurryThis$a$2=functionUncurryThis$2,toObject$1$2=toObject$2$2,hasOwnProperty$2=uncurryThis$a$2({}.hasOwnProperty),hasOwnProperty_1$2=Object.hasOwn||function o(a,c){return hasOwnProperty$2(toObject$1$2(a),c)},uncurryThis$9$2=functionUncurryThis$2,id$3=0,postfix$2=Math.random(),toString$1$4=uncurryThis$9$2(1 .toString),uid$2$2=function(o){return"Symbol("+(o===void 0?"":o)+")_"+toString$1$4(++id$3+postfix$2,36)},isCallable$k$2=function(o){return typeof o=="function"},global$g$2=global$j$2,isCallable$j$2=isCallable$k$2,aFunction$2=function(o){return isCallable$j$2(o)?o:void 0},getBuiltIn$8$2=function(o,a){return arguments.length<2?aFunction$2(global$g$2[o]):global$g$2[o]&&global$g$2[o][a]},getBuiltIn$7$2=getBuiltIn$8$2,engineUserAgent$2=getBuiltIn$7$2("navigator","userAgent")||"",global$f$2=global$j$2,userAgent$3$2=engineUserAgent$2,process$3$2=global$f$2.process,Deno$1$2=global$f$2.Deno,versions$2=process$3$2&&process$3$2.versions||Deno$1$2&&Deno$1$2.version,v8$2=versions$2&&versions$2.v8,match$2,version$5;v8$2&&(match$2=v8$2.split("."),version$5=match$2[0]>0&&match$2[0]<4?1:+(match$2[0]+match$2[1]));!version$5&&userAgent$3$2&&(match$2=userAgent$3$2.match(/Edge\/(\d+)/),(!match$2||match$2[1]>=74)&&(match$2=userAgent$3$2.match(/Chrome\/(\d+)/),match$2&&(version$5=+match$2[1])));var engineV8Version$2=version$5,V8_VERSION$1$2=engineV8Version$2,fails$a$2=fails$d$2,nativeSymbol$2=!!Object.getOwnPropertySymbols&&!fails$a$2(function(){var o=Symbol();return!String(o)||!(Object(o)instanceof Symbol)||!Symbol.sham&&V8_VERSION$1$2&&V8_VERSION$1$2<41}),NATIVE_SYMBOL$1$2=nativeSymbol$2,useSymbolAsUid$2=NATIVE_SYMBOL$1$2&&!Symbol.sham&&typeof Symbol.iterator=="symbol",global$e$2=global$j$2,shared$2$2=shared$3$2.exports,hasOwn$a$2=hasOwnProperty_1$2,uid$1$2=uid$2$2,NATIVE_SYMBOL$4=nativeSymbol$2,USE_SYMBOL_AS_UID$1$2=useSymbolAsUid$2,WellKnownSymbolsStore$2=shared$2$2("wks"),Symbol$1$2=global$e$2.Symbol,symbolFor$2=Symbol$1$2&&Symbol$1$2.for,createWellKnownSymbol$2=USE_SYMBOL_AS_UID$1$2?Symbol$1$2:Symbol$1$2&&Symbol$1$2.withoutSetter||uid$1$2,wellKnownSymbol$e$2=function(o){if(!hasOwn$a$2(WellKnownSymbolsStore$2,o)||!(NATIVE_SYMBOL$4||typeof WellKnownSymbolsStore$2[o]=="string")){var a="Symbol."+o;NATIVE_SYMBOL$4&&hasOwn$a$2(Symbol$1$2,o)?WellKnownSymbolsStore$2[o]=Symbol$1$2[o]:USE_SYMBOL_AS_UID$1$2&&symbolFor$2?WellKnownSymbolsStore$2[o]=symbolFor$2(a):WellKnownSymbolsStore$2[o]=createWellKnownSymbol$2(a)}return WellKnownSymbolsStore$2[o]},isCallable$i$2=isCallable$k$2,isObject$7$2=function(o){return typeof o=="object"?o!==null:isCallable$i$2(o)},isObject$6$2=isObject$7$2,$String$3$2=String,$TypeError$a$2=TypeError,anObject$c$2=function(o){if(isObject$6$2(o))return o;throw $TypeError$a$2($String$3$2(o)+" is not an object")},objectDefineProperties$2={},fails$9$2=fails$d$2,descriptors$2=!fails$9$2(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),DESCRIPTORS$9$2=descriptors$2,fails$8$2=fails$d$2,v8PrototypeDefineBug$2=DESCRIPTORS$9$2&&fails$8$2(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42}),objectDefineProperty$2={},global$d$2=global$j$2,isObject$5$2=isObject$7$2,document$3$2=global$d$2.document,EXISTS$1$2=isObject$5$2(document$3$2)&&isObject$5$2(document$3$2.createElement),documentCreateElement$2$2=function(o){return EXISTS$1$2?document$3$2.createElement(o):{}},DESCRIPTORS$8$2=descriptors$2,fails$7$2=fails$d$2,createElement$1$2=documentCreateElement$2$2,ie8DomDefine$2=!DESCRIPTORS$8$2&&!fails$7$2(function(){return Object.defineProperty(createElement$1$2("div"),"a",{get:function(){return 7}}).a!=7}),NATIVE_BIND$2$2=functionBindNative$2,call$d$2=Function.prototype.call,functionCall$2=NATIVE_BIND$2$2?call$d$2.bind(call$d$2):function(){return call$d$2.apply(call$d$2,arguments)},uncurryThis$8$2=functionUncurryThis$2,objectIsPrototypeOf$2=uncurryThis$8$2({}.isPrototypeOf),getBuiltIn$6$2=getBuiltIn$8$2,isCallable$h$2=isCallable$k$2,isPrototypeOf$3$2=objectIsPrototypeOf$2,USE_SYMBOL_AS_UID$3=useSymbolAsUid$2,$Object$2$2=Object,isSymbol$2$2=USE_SYMBOL_AS_UID$3?function(o){return typeof o=="symbol"}:function(o){var a=getBuiltIn$6$2("Symbol");return isCallable$h$2(a)&&isPrototypeOf$3$2(a.prototype,$Object$2$2(o))},$String$2$2=String,tryToString$4$2=function(o){try{return $String$2$2(o)}catch{return"Object"}},isCallable$g$2=isCallable$k$2,tryToString$3$2=tryToString$4$2,$TypeError$9$2=TypeError,aCallable$7$2=function(o){if(isCallable$g$2(o))return o;throw $TypeError$9$2(tryToString$3$2(o)+" is not a function")},aCallable$6$2=aCallable$7$2,getMethod$3$2=function(o,a){var c=o[a];return c==null?void 0:aCallable$6$2(c)},call$c$2=functionCall$2,isCallable$f$2=isCallable$k$2,isObject$4$2=isObject$7$2,$TypeError$8$2=TypeError,ordinaryToPrimitive$1$2=function(o,a){var c,d;if(a==="string"&&isCallable$f$2(c=o.toString)&&!isObject$4$2(d=call$c$2(c,o))||isCallable$f$2(c=o.valueOf)&&!isObject$4$2(d=call$c$2(c,o))||a!=="string"&&isCallable$f$2(c=o.toString)&&!isObject$4$2(d=call$c$2(c,o)))return d;throw $TypeError$8$2("Can't convert object to primitive value")},call$b$2=functionCall$2,isObject$3$3=isObject$7$2,isSymbol$1$2=isSymbol$2$2,getMethod$2$2=getMethod$3$2,ordinaryToPrimitive$3=ordinaryToPrimitive$1$2,wellKnownSymbol$d$2=wellKnownSymbol$e$2,$TypeError$7$2=TypeError,TO_PRIMITIVE$2=wellKnownSymbol$d$2("toPrimitive"),toPrimitive$1$2=function(o,a){if(!isObject$3$3(o)||isSymbol$1$2(o))return o;var c=getMethod$2$2(o,TO_PRIMITIVE$2),d;if(c){if(a===void 0&&(a="default"),d=call$b$2(c,o,a),!isObject$3$3(d)||isSymbol$1$2(d))return d;throw $TypeError$7$2("Can't convert object to primitive value")}return a===void 0&&(a="number"),ordinaryToPrimitive$3(o,a)},toPrimitive$3=toPrimitive$1$2,isSymbol$4=isSymbol$2$2,toPropertyKey$2$2=function(o){var a=toPrimitive$3(o,"string");return isSymbol$4(a)?a:a+""},DESCRIPTORS$7$2=descriptors$2,IE8_DOM_DEFINE$1$2=ie8DomDefine$2,V8_PROTOTYPE_DEFINE_BUG$1$2=v8PrototypeDefineBug$2,anObject$b$2=anObject$c$2,toPropertyKey$1$2=toPropertyKey$2$2,$TypeError$6$2=TypeError,$defineProperty$2=Object.defineProperty,$getOwnPropertyDescriptor$1$2=Object.getOwnPropertyDescriptor,ENUMERABLE$2="enumerable",CONFIGURABLE$1$2="configurable",WRITABLE$2="writable";objectDefineProperty$2.f=DESCRIPTORS$7$2?V8_PROTOTYPE_DEFINE_BUG$1$2?function o(a,c,d){if(anObject$b$2(a),c=toPropertyKey$1$2(c),anObject$b$2(d),typeof a=="function"&&c==="prototype"&&"value"in d&&WRITABLE$2 in d&&!d[WRITABLE$2]){var tt=$getOwnPropertyDescriptor$1$2(a,c);tt&&tt[WRITABLE$2]&&(a[c]=d.value,d={configurable:CONFIGURABLE$1$2 in d?d[CONFIGURABLE$1$2]:tt[CONFIGURABLE$1$2],enumerable:ENUMERABLE$2 in d?d[ENUMERABLE$2]:tt[ENUMERABLE$2],writable:!1})}return $defineProperty$2(a,c,d)}:$defineProperty$2:function o(a,c,d){if(anObject$b$2(a),c=toPropertyKey$1$2(c),anObject$b$2(d),IE8_DOM_DEFINE$1$2)try{return $defineProperty$2(a,c,d)}catch{}if("get"in d||"set"in d)throw $TypeError$6$2("Accessors not supported");return"value"in d&&(a[c]=d.value),a};var ceil$2=Math.ceil,floor$6=Math.floor,mathTrunc$2=Math.trunc||function o(a){var c=+a;return(c>0?floor$6:ceil$2)(c)},trunc$2=mathTrunc$2,toIntegerOrInfinity$2$2=function(o){var a=+o;return a!==a||a===0?0:trunc$2(a)},toIntegerOrInfinity$1$2=toIntegerOrInfinity$2$2,max$4=Math.max,min$1$2=Math.min,toAbsoluteIndex$1$2=function(o,a){var c=toIntegerOrInfinity$1$2(o);return c<0?max$4(c+a,0):min$1$2(c,a)},toIntegerOrInfinity$6=toIntegerOrInfinity$2$2,min$4=Math.min,toLength$1$2=function(o){return o>0?min$4(toIntegerOrInfinity$6(o),9007199254740991):0},toLength$4=toLength$1$2,lengthOfArrayLike$2$2=function(o){return toLength$4(o.length)},toIndexedObject$4$2=toIndexedObject$5$2,toAbsoluteIndex$4=toAbsoluteIndex$1$2,lengthOfArrayLike$1$2=lengthOfArrayLike$2$2,createMethod$3=function(o){return function(a,c,d){var tt=toIndexedObject$4$2(a),nt=lengthOfArrayLike$1$2(tt),$a=toAbsoluteIndex$4(d,nt),Ys;if(o&&c!=c){for(;nt>$a;)if(Ys=tt[$a++],Ys!=Ys)return!0}else for(;nt>$a;$a++)if((o||$a in tt)&&tt[$a]===c)return o||$a||0;return!o&&-1}},arrayIncludes$2={includes:createMethod$3(!0),indexOf:createMethod$3(!1)},hiddenKeys$4$2={},uncurryThis$7$2=functionUncurryThis$2,hasOwn$9$2=hasOwnProperty_1$2,toIndexedObject$3$2=toIndexedObject$5$2,indexOf$3=arrayIncludes$2.indexOf,hiddenKeys$3$2=hiddenKeys$4$2,push$6=uncurryThis$7$2([].push),objectKeysInternal$2=function(o,a){var c=toIndexedObject$3$2(o),d=0,tt=[],nt;for(nt in c)!hasOwn$9$2(hiddenKeys$3$2,nt)&&hasOwn$9$2(c,nt)&&push$6(tt,nt);for(;a.length>d;)hasOwn$9$2(c,nt=a[d++])&&(~indexOf$3(tt,nt)||push$6(tt,nt));return tt},enumBugKeys$3$2=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],internalObjectKeys$1$2=objectKeysInternal$2,enumBugKeys$2$2=enumBugKeys$3$2,objectKeys$1$2=Object.keys||function o(a){return internalObjectKeys$1$2(a,enumBugKeys$2$2)},DESCRIPTORS$6$2=descriptors$2,V8_PROTOTYPE_DEFINE_BUG$3=v8PrototypeDefineBug$2,definePropertyModule$4$2=objectDefineProperty$2,anObject$a$2=anObject$c$2,toIndexedObject$2$2=toIndexedObject$5$2,objectKeys$4=objectKeys$1$2;objectDefineProperties$2.f=DESCRIPTORS$6$2&&!V8_PROTOTYPE_DEFINE_BUG$3?Object.defineProperties:function o(a,c){anObject$a$2(a);for(var d=toIndexedObject$2$2(c),tt=objectKeys$4(c),nt=tt.length,$a=0,Ys;nt>$a;)definePropertyModule$4$2.f(a,Ys=tt[$a++],d[Ys]);return a};var getBuiltIn$5$2=getBuiltIn$8$2,html$2$2=getBuiltIn$5$2("document","documentElement"),shared$1$2=shared$3$2.exports,uid$4=uid$2$2,keys$2=shared$1$2("keys"),sharedKey$3$2=function(o){return keys$2[o]||(keys$2[o]=uid$4(o))},anObject$9$2=anObject$c$2,definePropertiesModule$2=objectDefineProperties$2,enumBugKeys$1$2=enumBugKeys$3$2,hiddenKeys$2$2=hiddenKeys$4$2,html$1$2=html$2$2,documentCreateElement$1$2=documentCreateElement$2$2,sharedKey$2$2=sharedKey$3$2,GT$2=">",LT$2="<",PROTOTYPE$2="prototype",SCRIPT$2="script",IE_PROTO$1$2=sharedKey$2$2("IE_PROTO"),EmptyConstructor$2=function(){},scriptTag$2=function(o){return LT$2+SCRIPT$2+GT$2+o+LT$2+"/"+SCRIPT$2+GT$2},NullProtoObjectViaActiveX$2=function(o){o.write(scriptTag$2("")),o.close();var a=o.parentWindow.Object;return o=null,a},NullProtoObjectViaIFrame$2=function(){var o=documentCreateElement$1$2("iframe"),a="java"+SCRIPT$2+":",c;return o.style.display="none",html$1$2.appendChild(o),o.src=String(a),c=o.contentWindow.document,c.open(),c.write(scriptTag$2("document.F=Object")),c.close(),c.F},activeXDocument$2,NullProtoObject$2=function(){try{activeXDocument$2=new ActiveXObject("htmlfile")}catch{}NullProtoObject$2=typeof document<"u"?document.domain&&activeXDocument$2?NullProtoObjectViaActiveX$2(activeXDocument$2):NullProtoObjectViaIFrame$2():NullProtoObjectViaActiveX$2(activeXDocument$2);for(var o=enumBugKeys$1$2.length;o--;)delete NullProtoObject$2[PROTOTYPE$2][enumBugKeys$1$2[o]];return NullProtoObject$2()};hiddenKeys$2$2[IE_PROTO$1$2]=!0;var objectCreate$2=Object.create||function o(a,c){var d;return a!==null?(EmptyConstructor$2[PROTOTYPE$2]=anObject$9$2(a),d=new EmptyConstructor$2,EmptyConstructor$2[PROTOTYPE$2]=null,d[IE_PROTO$1$2]=a):d=NullProtoObject$2(),c===void 0?d:definePropertiesModule$2.f(d,c)},wellKnownSymbol$c$2=wellKnownSymbol$e$2,create$1$2=objectCreate$2,defineProperty$3$2=objectDefineProperty$2.f,UNSCOPABLES$2=wellKnownSymbol$c$2("unscopables"),ArrayPrototype$1$2=Array.prototype;ArrayPrototype$1$2[UNSCOPABLES$2]==null&&defineProperty$3$2(ArrayPrototype$1$2,UNSCOPABLES$2,{configurable:!0,value:create$1$2(null)});var addToUnscopables$1$2=function(o){ArrayPrototype$1$2[UNSCOPABLES$2][o]=!0},iterators$2={},uncurryThis$6$2=functionUncurryThis$2,isCallable$e$2=isCallable$k$2,store$1$2=sharedStore$2,functionToString$2=uncurryThis$6$2(Function.toString);isCallable$e$2(store$1$2.inspectSource)||(store$1$2.inspectSource=function(o){return functionToString$2(o)});var inspectSource$4$2=store$1$2.inspectSource,global$c$2=global$j$2,isCallable$d$2=isCallable$k$2,inspectSource$3$2=inspectSource$4$2,WeakMap$1$2=global$c$2.WeakMap,nativeWeakMap$2=isCallable$d$2(WeakMap$1$2)&&/native code/.test(inspectSource$3$2(WeakMap$1$2)),createPropertyDescriptor$3$2=function(o,a){return{enumerable:!(o&1),configurable:!(o&2),writable:!(o&4),value:a}},DESCRIPTORS$5$2=descriptors$2,definePropertyModule$3$2=objectDefineProperty$2,createPropertyDescriptor$2$2=createPropertyDescriptor$3$2,createNonEnumerableProperty$4$2=DESCRIPTORS$5$2?function(o,a,c){return definePropertyModule$3$2.f(o,a,createPropertyDescriptor$2$2(1,c))}:function(o,a,c){return o[a]=c,o},NATIVE_WEAK_MAP$2=nativeWeakMap$2,global$b$2=global$j$2,uncurryThis$5$2=functionUncurryThis$2,isObject$2$3=isObject$7$2,createNonEnumerableProperty$3$2=createNonEnumerableProperty$4$2,hasOwn$8$2=hasOwnProperty_1$2,shared$6=sharedStore$2,sharedKey$1$2=sharedKey$3$2,hiddenKeys$1$2=hiddenKeys$4$2,OBJECT_ALREADY_INITIALIZED$2="Object already initialized",TypeError$2$2=global$b$2.TypeError,WeakMap$4=global$b$2.WeakMap,set$1$2,get$2,has$3,enforce$2=function(o){return has$3(o)?get$2(o):set$1$2(o,{})},getterFor$2=function(o){return function(a){var c;if(!isObject$2$3(a)||(c=get$2(a)).type!==o)throw TypeError$2$2("Incompatible receiver, "+o+" required");return c}};if(NATIVE_WEAK_MAP$2||shared$6.state){var store$6=shared$6.state||(shared$6.state=new WeakMap$4),wmget$2=uncurryThis$5$2(store$6.get),wmhas$2=uncurryThis$5$2(store$6.has),wmset$2=uncurryThis$5$2(store$6.set);set$1$2=function(o,a){if(wmhas$2(store$6,o))throw new TypeError$2$2(OBJECT_ALREADY_INITIALIZED$2);return a.facade=o,wmset$2(store$6,o,a),a},get$2=function(o){return wmget$2(store$6,o)||{}},has$3=function(o){return wmhas$2(store$6,o)}}else{var STATE$2=sharedKey$1$2("state");hiddenKeys$1$2[STATE$2]=!0,set$1$2=function(o,a){if(hasOwn$8$2(o,STATE$2))throw new TypeError$2$2(OBJECT_ALREADY_INITIALIZED$2);return a.facade=o,createNonEnumerableProperty$3$2(o,STATE$2,a),a},get$2=function(o){return hasOwn$8$2(o,STATE$2)?o[STATE$2]:{}},has$3=function(o){return hasOwn$8$2(o,STATE$2)}}var internalState$2={set:set$1$2,get:get$2,has:has$3,enforce:enforce$2,getterFor:getterFor$2},objectGetOwnPropertyDescriptor$2={},objectPropertyIsEnumerable$2={},$propertyIsEnumerable$2={}.propertyIsEnumerable,getOwnPropertyDescriptor$2$2=Object.getOwnPropertyDescriptor,NASHORN_BUG$2=getOwnPropertyDescriptor$2$2&&!$propertyIsEnumerable$2.call({1:2},1);objectPropertyIsEnumerable$2.f=NASHORN_BUG$2?function o(a){var c=getOwnPropertyDescriptor$2$2(this,a);return!!c&&c.enumerable}:$propertyIsEnumerable$2;var DESCRIPTORS$4$2=descriptors$2,call$a$2=functionCall$2,propertyIsEnumerableModule$3=objectPropertyIsEnumerable$2,createPropertyDescriptor$1$2=createPropertyDescriptor$3$2,toIndexedObject$1$2=toIndexedObject$5$2,toPropertyKey$5=toPropertyKey$2$2,hasOwn$7$2=hasOwnProperty_1$2,IE8_DOM_DEFINE$3=ie8DomDefine$2,$getOwnPropertyDescriptor$3=Object.getOwnPropertyDescriptor;objectGetOwnPropertyDescriptor$2.f=DESCRIPTORS$4$2?$getOwnPropertyDescriptor$3:function o(a,c){if(a=toIndexedObject$1$2(a),c=toPropertyKey$5(c),IE8_DOM_DEFINE$3)try{return $getOwnPropertyDescriptor$3(a,c)}catch{}if(hasOwn$7$2(a,c))return createPropertyDescriptor$1$2(!call$a$2(propertyIsEnumerableModule$3.f,a,c),a[c])};var makeBuiltIn$2$2={exports:{}},DESCRIPTORS$3$2=descriptors$2,hasOwn$6$2=hasOwnProperty_1$2,FunctionPrototype$1$2=Function.prototype,getDescriptor$2=DESCRIPTORS$3$2&&Object.getOwnPropertyDescriptor,EXISTS$3=hasOwn$6$2(FunctionPrototype$1$2,"name"),PROPER$2=EXISTS$3&&(function o(){}).name==="something",CONFIGURABLE$3=EXISTS$3&&(!DESCRIPTORS$3$2||DESCRIPTORS$3$2&&getDescriptor$2(FunctionPrototype$1$2,"name").configurable),functionName$2={EXISTS:EXISTS$3,PROPER:PROPER$2,CONFIGURABLE:CONFIGURABLE$3},fails$6$2=fails$d$2,isCallable$c$2=isCallable$k$2,hasOwn$5$2=hasOwnProperty_1$2,DESCRIPTORS$2$2=descriptors$2,CONFIGURABLE_FUNCTION_NAME$1$2=functionName$2.CONFIGURABLE,inspectSource$2$2=inspectSource$4$2,InternalStateModule$2$2=internalState$2,enforceInternalState$2=InternalStateModule$2$2.enforce,getInternalState$1$2=InternalStateModule$2$2.get,defineProperty$2$2=Object.defineProperty,CONFIGURABLE_LENGTH$2=DESCRIPTORS$2$2&&!fails$6$2(function(){return defineProperty$2$2(function(){},"length",{value:8}).length!==8}),TEMPLATE$2=String(String).split("String"),makeBuiltIn$1$2=makeBuiltIn$2$2.exports=function(o,a,c){String(a).slice(0,7)==="Symbol("&&(a="["+String(a).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),c&&c.getter&&(a="get "+a),c&&c.setter&&(a="set "+a),(!hasOwn$5$2(o,"name")||CONFIGURABLE_FUNCTION_NAME$1$2&&o.name!==a)&&(DESCRIPTORS$2$2?defineProperty$2$2(o,"name",{value:a,configurable:!0}):o.name=a),CONFIGURABLE_LENGTH$2&&c&&hasOwn$5$2(c,"arity")&&o.length!==c.arity&&defineProperty$2$2(o,"length",{value:c.arity});try{c&&hasOwn$5$2(c,"constructor")&&c.constructor?DESCRIPTORS$2$2&&defineProperty$2$2(o,"prototype",{writable:!1}):o.prototype&&(o.prototype=void 0)}catch{}var d=enforceInternalState$2(o);return hasOwn$5$2(d,"source")||(d.source=TEMPLATE$2.join(typeof a=="string"?a:"")),o};Function.prototype.toString=makeBuiltIn$1$2(function o(){return isCallable$c$2(this)&&getInternalState$1$2(this).source||inspectSource$2$2(this)},"toString");var isCallable$b$2=isCallable$k$2,definePropertyModule$2$2=objectDefineProperty$2,makeBuiltIn$5=makeBuiltIn$2$2.exports,defineGlobalProperty$1$2=defineGlobalProperty$3$2,defineBuiltIn$6$2=function(o,a,c,d){d||(d={});var tt=d.enumerable,nt=d.name!==void 0?d.name:a;if(isCallable$b$2(c)&&makeBuiltIn$5(c,nt,d),d.global)tt?o[a]=c:defineGlobalProperty$1$2(a,c);else{try{d.unsafe?o[a]&&(tt=!0):delete o[a]}catch{}tt?o[a]=c:definePropertyModule$2$2.f(o,a,{value:c,enumerable:!1,configurable:!d.nonConfigurable,writable:!d.nonWritable})}return o},objectGetOwnPropertyNames$2={},internalObjectKeys$3=objectKeysInternal$2,enumBugKeys$5=enumBugKeys$3$2,hiddenKeys$6=enumBugKeys$5.concat("length","prototype");objectGetOwnPropertyNames$2.f=Object.getOwnPropertyNames||function o(a){return internalObjectKeys$3(a,hiddenKeys$6)};var objectGetOwnPropertySymbols$2={};objectGetOwnPropertySymbols$2.f=Object.getOwnPropertySymbols;var getBuiltIn$4$2=getBuiltIn$8$2,uncurryThis$4$2=functionUncurryThis$2,getOwnPropertyNamesModule$2=objectGetOwnPropertyNames$2,getOwnPropertySymbolsModule$3=objectGetOwnPropertySymbols$2,anObject$8$2=anObject$c$2,concat$4=uncurryThis$4$2([].concat),ownKeys$1$2=getBuiltIn$4$2("Reflect","ownKeys")||function o(a){var c=getOwnPropertyNamesModule$2.f(anObject$8$2(a)),d=getOwnPropertySymbolsModule$3.f;return d?concat$4(c,d(a)):c},hasOwn$4$2=hasOwnProperty_1$2,ownKeys$4=ownKeys$1$2,getOwnPropertyDescriptorModule$2=objectGetOwnPropertyDescriptor$2,definePropertyModule$1$2=objectDefineProperty$2,copyConstructorProperties$1$2=function(o,a,c){for(var d=ownKeys$4(a),tt=definePropertyModule$1$2.f,nt=getOwnPropertyDescriptorModule$2.f,$a=0;$a=a.length?(o.target=void 0,{value:void 0,done:!0}):c=="keys"?{value:d,done:!1}:c=="values"?{value:a[d],done:!1}:{value:[d,a[d]],done:!1}},"values"),values$2=Iterators$2$2.Arguments=Iterators$2$2.Array;addToUnscopables$4("keys");addToUnscopables$4("values");addToUnscopables$4("entries");if(DESCRIPTORS$1$2&&values$2.name!=="values")try{defineProperty$8(values$2,"name",{value:"values"})}catch(o){}var domIterables$2={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},documentCreateElement$4=documentCreateElement$2$2,classList$2=documentCreateElement$4("span").classList,DOMTokenListPrototype$1$2=classList$2&&classList$2.constructor&&classList$2.constructor.prototype,domTokenListPrototype$2=DOMTokenListPrototype$1$2===Object.prototype?void 0:DOMTokenListPrototype$1$2,global$9$2=global$j$2,DOMIterables$2=domIterables$2,DOMTokenListPrototype$3=domTokenListPrototype$2,ArrayIteratorMethods$2=es_array_iterator$2,createNonEnumerableProperty$7=createNonEnumerableProperty$4$2,wellKnownSymbol$8$2=wellKnownSymbol$e$2,ITERATOR$3$2=wellKnownSymbol$8$2("iterator"),TO_STRING_TAG$2$2=wellKnownSymbol$8$2("toStringTag"),ArrayValues$2=ArrayIteratorMethods$2.values,handlePrototype$2=function(o,a){if(o){if(o[ITERATOR$3$2]!==ArrayValues$2)try{createNonEnumerableProperty$7(o,ITERATOR$3$2,ArrayValues$2)}catch{o[ITERATOR$3$2]=ArrayValues$2}if(o[TO_STRING_TAG$2$2]||createNonEnumerableProperty$7(o,TO_STRING_TAG$2$2,a),DOMIterables$2[a]){for(var c in ArrayIteratorMethods$2)if(o[c]!==ArrayIteratorMethods$2[c])try{createNonEnumerableProperty$7(o,c,ArrayIteratorMethods$2[c])}catch{o[c]=ArrayIteratorMethods$2[c]}}}};for(var COLLECTION_NAME$2 in DOMIterables$2)handlePrototype$2(global$9$2[COLLECTION_NAME$2]&&global$9$2[COLLECTION_NAME$2].prototype,COLLECTION_NAME$2);handlePrototype$2(DOMTokenListPrototype$3,"DOMTokenList");var classof$4$2=classofRaw$1$2,global$8$2=global$j$2,engineIsNode$2=classof$4$2(global$8$2.process)=="process",getBuiltIn$3$2=getBuiltIn$8$2,definePropertyModule$7=objectDefineProperty$2,wellKnownSymbol$7$2=wellKnownSymbol$e$2,DESCRIPTORS$e=descriptors$2,SPECIES$2$2=wellKnownSymbol$7$2("species"),setSpecies$1$2=function(o){var a=getBuiltIn$3$2(o),c=definePropertyModule$7.f;DESCRIPTORS$e&&a&&!a[SPECIES$2$2]&&c(a,SPECIES$2$2,{configurable:!0,get:function(){return this}})},isPrototypeOf$2$2=objectIsPrototypeOf$2,$TypeError$4$2=TypeError,anInstance$1$2=function(o,a){if(isPrototypeOf$2$2(a,o))return o;throw $TypeError$4$2("Incorrect invocation")},wellKnownSymbol$6$2=wellKnownSymbol$e$2,TO_STRING_TAG$1$2=wellKnownSymbol$6$2("toStringTag"),test$3={};test$3[TO_STRING_TAG$1$2]="z";var toStringTagSupport$2=String(test$3)==="[object z]",TO_STRING_TAG_SUPPORT$2=toStringTagSupport$2,isCallable$5$2=isCallable$k$2,classofRaw$3=classofRaw$1$2,wellKnownSymbol$5$2=wellKnownSymbol$e$2,TO_STRING_TAG$5=wellKnownSymbol$5$2("toStringTag"),$Object$6=Object,CORRECT_ARGUMENTS$2=classofRaw$3(function(){return arguments}())=="Arguments",tryGet$2=function(o,a){try{return o[a]}catch{}},classof$3$2=TO_STRING_TAG_SUPPORT$2?classofRaw$3:function(o){var a,c,d;return o===void 0?"Undefined":o===null?"Null":typeof(c=tryGet$2(a=$Object$6(o),TO_STRING_TAG$5))=="string"?c:CORRECT_ARGUMENTS$2?classofRaw$3(a):(d=classofRaw$3(a))=="Object"&&isCallable$5$2(a.callee)?"Arguments":d},uncurryThis$2$2=functionUncurryThis$2,fails$2$2=fails$d$2,isCallable$4$2=isCallable$k$2,classof$2$2=classof$3$2,getBuiltIn$2$2=getBuiltIn$8$2,inspectSource$1$2=inspectSource$4$2,noop$2=function(){},empty$2=[],construct$2=getBuiltIn$2$2("Reflect","construct"),constructorRegExp$2=/^\s*(?:class|function)\b/,exec$5=uncurryThis$2$2(constructorRegExp$2.exec),INCORRECT_TO_STRING$2=!constructorRegExp$2.exec(noop$2),isConstructorModern$2=function o(a){if(!isCallable$4$2(a))return!1;try{return construct$2(noop$2,empty$2,a),!0}catch{return!1}},isConstructorLegacy$2=function o(a){if(!isCallable$4$2(a))return!1;switch(classof$2$2(a)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return INCORRECT_TO_STRING$2||!!exec$5(constructorRegExp$2,inspectSource$1$2(a))}catch{return!0}};isConstructorLegacy$2.sham=!0;var isConstructor$1$2=!construct$2||fails$2$2(function(){var o;return isConstructorModern$2(isConstructorModern$2.call)||!isConstructorModern$2(Object)||!isConstructorModern$2(function(){o=!0})||o})?isConstructorLegacy$2:isConstructorModern$2,isConstructor$4=isConstructor$1$2,tryToString$2$2=tryToString$4$2,$TypeError$3$2=TypeError,aConstructor$1$2=function(o){if(isConstructor$4(o))return o;throw $TypeError$3$2(tryToString$2$2(o)+" is not a constructor")},anObject$6$2=anObject$c$2,aConstructor$3=aConstructor$1$2,wellKnownSymbol$4$2=wellKnownSymbol$e$2,SPECIES$1$2=wellKnownSymbol$4$2("species"),speciesConstructor$1$2=function(o,a){var c=anObject$6$2(o).constructor,d;return c===void 0||(d=anObject$6$2(c)[SPECIES$1$2])==null?a:aConstructor$3(d)},NATIVE_BIND$1$2=functionBindNative$2,FunctionPrototype$4=Function.prototype,apply$1$2=FunctionPrototype$4.apply,call$8$2=FunctionPrototype$4.call,functionApply$2=typeof Reflect=="object"&&Reflect.apply||(NATIVE_BIND$1$2?call$8$2.bind(apply$1$2):function(){return call$8$2.apply(apply$1$2,arguments)}),uncurryThis$1$2=functionUncurryThis$2,aCallable$5$2=aCallable$7$2,NATIVE_BIND$5=functionBindNative$2,bind$4$2=uncurryThis$1$2(uncurryThis$1$2.bind),functionBindContext$2=function(o,a){return aCallable$5$2(o),a===void 0?o:NATIVE_BIND$5?bind$4$2(o,a):function(){return o.apply(a,arguments)}},uncurryThis$o=functionUncurryThis$2,arraySlice$1$2=uncurryThis$o([].slice),$TypeError$2$2=TypeError,validateArgumentsLength$1$2=function(o,a){if(o=51&&/native code/.test(o))return!1;var c=new NativePromiseConstructor$3$2(function(nt){nt(1)}),d=function(nt){nt(function(){},function(){})},tt=c.constructor={};return tt[SPECIES$5]=d,SUBCLASSING$2=c.then(function(){})instanceof d,SUBCLASSING$2?!a&&IS_BROWSER$3&&!NATIVE_PROMISE_REJECTION_EVENT$1$2:!0}),promiseConstructorDetection$2={CONSTRUCTOR:FORCED_PROMISE_CONSTRUCTOR$5$2,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT$1$2,SUBCLASSING:SUBCLASSING$2},newPromiseCapability$2$2={},aCallable$4$2=aCallable$7$2,PromiseCapability$2=function(o){var a,c;this.promise=new o(function(d,tt){if(a!==void 0||c!==void 0)throw TypeError("Bad Promise constructor");a=d,c=tt}),this.resolve=aCallable$4$2(a),this.reject=aCallable$4$2(c)};newPromiseCapability$2$2.f=function(o){return new PromiseCapability$2(o)};var $$5$2=_export$2,IS_NODE$5=engineIsNode$2,global$1$2=global$j$2,call$7$2=functionCall$2,defineBuiltIn$2$2=defineBuiltIn$6$2,setPrototypeOf$3=objectSetPrototypeOf$2,setToStringTag$7=setToStringTag$3$2,setSpecies$3=setSpecies$1$2,aCallable$3$2=aCallable$7$2,isCallable$1$2=isCallable$k$2,isObject$1$3=isObject$7$2,anInstance$5=anInstance$1$2,speciesConstructor$3=speciesConstructor$1$2,task$3=task$1$2.set,microtask$3=microtask$1$2,hostReportErrors$3=hostReportErrors$1$2,perform$2$2=perform$3$2,Queue$3=queue$3,InternalStateModule$7=internalState$2,NativePromiseConstructor$2$2=promiseNativeConstructor$2,PromiseConstructorDetection$2=promiseConstructorDetection$2,newPromiseCapabilityModule$3$2=newPromiseCapability$2$2,PROMISE$2="Promise",FORCED_PROMISE_CONSTRUCTOR$4$2=PromiseConstructorDetection$2.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT$3=PromiseConstructorDetection$2.REJECTION_EVENT,NATIVE_PROMISE_SUBCLASSING$2=PromiseConstructorDetection$2.SUBCLASSING,getInternalPromiseState$2=InternalStateModule$7.getterFor(PROMISE$2),setInternalState$6=InternalStateModule$7.set,NativePromisePrototype$1$2=NativePromiseConstructor$2$2&&NativePromiseConstructor$2$2.prototype,PromiseConstructor$2=NativePromiseConstructor$2$2,PromisePrototype$2=NativePromisePrototype$1$2,TypeError$1$2=global$1$2.TypeError,document$1$2=global$1$2.document,process$5=global$1$2.process,newPromiseCapability$1$2=newPromiseCapabilityModule$3$2.f,newGenericPromiseCapability$2=newPromiseCapability$1$2,DISPATCH_EVENT$2=!!(document$1$2&&document$1$2.createEvent&&global$1$2.dispatchEvent),UNHANDLED_REJECTION$2="unhandledrejection",REJECTION_HANDLED$2="rejectionhandled",PENDING$2=0,FULFILLED$2=1,REJECTED$2=2,HANDLED$2=1,UNHANDLED$2=2,Internal$2,OwnPromiseCapability$2,PromiseWrapper$2,nativeThen$2,isThenable$2=function(o){var a;return isObject$1$3(o)&&isCallable$1$2(a=o.then)?a:!1},callReaction$2=function(o,a){var c=a.value,d=a.state==FULFILLED$2,tt=d?o.ok:o.fail,nt=o.resolve,$a=o.reject,Ys=o.domain,gu,xu,$u;try{tt?(d||(a.rejection===UNHANDLED$2&&onHandleUnhandled$2(a),a.rejection=HANDLED$2),tt===!0?gu=c:(Ys&&Ys.enter(),gu=tt(c),Ys&&(Ys.exit(),$u=!0)),gu===o.promise?$a(TypeError$1$2("Promise-chain cycle")):(xu=isThenable$2(gu))?call$7$2(xu,gu,nt,$a):nt(gu)):$a(c)}catch(Iu){Ys&&!$u&&Ys.exit(),$a(Iu)}},notify$3=function(o,a){o.notified||(o.notified=!0,microtask$3(function(){for(var c=o.reactions,d;d=c.get();)callReaction$2(d,o);o.notified=!1,a&&!o.rejection&&onUnhandled$2(o)}))},dispatchEvent$2=function(o,a,c){var d,tt;DISPATCH_EVENT$2?(d=document$1$2.createEvent("Event"),d.promise=a,d.reason=c,d.initEvent(o,!1,!0),global$1$2.dispatchEvent(d)):d={promise:a,reason:c},!NATIVE_PROMISE_REJECTION_EVENT$3&&(tt=global$1$2["on"+o])?tt(d):o===UNHANDLED_REJECTION$2&&hostReportErrors$3("Unhandled promise rejection",c)},onUnhandled$2=function(o){call$7$2(task$3,global$1$2,function(){var a=o.facade,c=o.value,d=isUnhandled$2(o),tt;if(d&&(tt=perform$2$2(function(){IS_NODE$5?process$5.emit("unhandledRejection",c,a):dispatchEvent$2(UNHANDLED_REJECTION$2,a,c)}),o.rejection=IS_NODE$5||isUnhandled$2(o)?UNHANDLED$2:HANDLED$2,tt.error))throw tt.value})},isUnhandled$2=function(o){return o.rejection!==HANDLED$2&&!o.parent},onHandleUnhandled$2=function(o){call$7$2(task$3,global$1$2,function(){var a=o.facade;IS_NODE$5?process$5.emit("rejectionHandled",a):dispatchEvent$2(REJECTION_HANDLED$2,a,o.value)})},bind$1$2=function(o,a,c){return function(d){o(a,d,c)}},internalReject$2=function(o,a,c){o.done||(o.done=!0,c&&(o=c),o.value=a,o.state=REJECTED$2,notify$3(o,!0))},internalResolve$2=function(o,a,c){if(!o.done){o.done=!0,c&&(o=c);try{if(o.facade===a)throw TypeError$1$2("Promise can't be resolved itself");var d=isThenable$2(a);d?microtask$3(function(){var tt={done:!1};try{call$7$2(d,a,bind$1$2(internalResolve$2,tt,o),bind$1$2(internalReject$2,tt,o))}catch(nt){internalReject$2(tt,nt,o)}}):(o.value=a,o.state=FULFILLED$2,notify$3(o,!1))}catch(tt){internalReject$2({done:!1},tt,o)}}};if(FORCED_PROMISE_CONSTRUCTOR$4$2&&(PromiseConstructor$2=function(a){anInstance$5(this,PromisePrototype$2),aCallable$3$2(a),call$7$2(Internal$2,this);var c=getInternalPromiseState$2(this);try{a(bind$1$2(internalResolve$2,c),bind$1$2(internalReject$2,c))}catch(d){internalReject$2(c,d)}},PromisePrototype$2=PromiseConstructor$2.prototype,Internal$2=function(a){setInternalState$6(this,{type:PROMISE$2,done:!1,notified:!1,parent:!1,reactions:new Queue$3,rejection:!1,state:PENDING$2,value:void 0})},Internal$2.prototype=defineBuiltIn$2$2(PromisePrototype$2,"then",function(a,c){var d=getInternalPromiseState$2(this),tt=newPromiseCapability$1$2(speciesConstructor$3(this,PromiseConstructor$2));return d.parent=!0,tt.ok=isCallable$1$2(a)?a:!0,tt.fail=isCallable$1$2(c)&&c,tt.domain=IS_NODE$5?process$5.domain:void 0,d.state==PENDING$2?d.reactions.add(tt):microtask$3(function(){callReaction$2(tt,d)}),tt.promise}),OwnPromiseCapability$2=function(){var o=new Internal$2,a=getInternalPromiseState$2(o);this.promise=o,this.resolve=bind$1$2(internalResolve$2,a),this.reject=bind$1$2(internalReject$2,a)},newPromiseCapabilityModule$3$2.f=newPromiseCapability$1$2=function(o){return o===PromiseConstructor$2||o===PromiseWrapper$2?new OwnPromiseCapability$2(o):newGenericPromiseCapability$2(o)},isCallable$1$2(NativePromiseConstructor$2$2)&&NativePromisePrototype$1$2!==Object.prototype)){nativeThen$2=NativePromisePrototype$1$2.then,NATIVE_PROMISE_SUBCLASSING$2||defineBuiltIn$2$2(NativePromisePrototype$1$2,"then",function(a,c){var d=this;return new PromiseConstructor$2(function(tt,nt){call$7$2(nativeThen$2,d,tt,nt)}).then(a,c)},{unsafe:!0});try{delete NativePromisePrototype$1$2.constructor}catch{}setPrototypeOf$3&&setPrototypeOf$3(NativePromisePrototype$1$2,PromisePrototype$2)}$$5$2({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR$4$2},{Promise:PromiseConstructor$2});setToStringTag$7(PromiseConstructor$2,PROMISE$2,!1);setSpecies$3(PROMISE$2);var wellKnownSymbol$2$2=wellKnownSymbol$e$2,Iterators$1$2=iterators$2,ITERATOR$2$2=wellKnownSymbol$2$2("iterator"),ArrayPrototype$3=Array.prototype,isArrayIteratorMethod$1$2=function(o){return o!==void 0&&(Iterators$1$2.Array===o||ArrayPrototype$3[ITERATOR$2$2]===o)},classof$1$2=classof$3$2,getMethod$1$2=getMethod$3$2,Iterators$6=iterators$2,wellKnownSymbol$1$2=wellKnownSymbol$e$2,ITERATOR$1$2=wellKnownSymbol$1$2("iterator"),getIteratorMethod$2$2=function(o){if(o!=null)return getMethod$1$2(o,ITERATOR$1$2)||getMethod$1$2(o,"@@iterator")||Iterators$6[classof$1$2(o)]},call$6$2=functionCall$2,aCallable$2$2=aCallable$7$2,anObject$5$2=anObject$c$2,tryToString$1$2=tryToString$4$2,getIteratorMethod$1$2=getIteratorMethod$2$2,$TypeError$1$2=TypeError,getIterator$1$2=function(o,a){var c=arguments.length<2?getIteratorMethod$1$2(o):a;if(aCallable$2$2(c))return anObject$5$2(call$6$2(c,o));throw $TypeError$1$2(tryToString$1$2(o)+" is not iterable")},call$5$2=functionCall$2,anObject$4$2=anObject$c$2,getMethod$6=getMethod$3$2,iteratorClose$1$2=function(o,a,c){var d,tt;anObject$4$2(o);try{if(d=getMethod$6(o,"return"),!d){if(a==="throw")throw c;return c}d=call$5$2(d,o)}catch(nt){tt=!0,d=nt}if(a==="throw")throw c;if(tt)throw d;return anObject$4$2(d),c},bind$a=functionBindContext$2,call$4$2=functionCall$2,anObject$3$2=anObject$c$2,tryToString$7=tryToString$4$2,isArrayIteratorMethod$4=isArrayIteratorMethod$1$2,lengthOfArrayLike$7=lengthOfArrayLike$2$2,isPrototypeOf$1$2=objectIsPrototypeOf$2,getIterator$5=getIterator$1$2,getIteratorMethod$6=getIteratorMethod$2$2,iteratorClose$4=iteratorClose$1$2,$TypeError$g=TypeError,Result$2=function(o,a){this.stopped=o,this.result=a},ResultPrototype$2=Result$2.prototype,iterate$2$2=function(o,a,c){var d=c&&c.that,tt=!!(c&&c.AS_ENTRIES),nt=!!(c&&c.IS_ITERATOR),$a=!!(c&&c.INTERRUPTED),Ys=bind$a(a,d),gu,xu,$u,Iu,Xu,i0,p0,w0=function($0){return gu&&iteratorClose$4(gu,"normal",$0),new Result$2(!0,$0)},A0=function($0){return tt?(anObject$3$2($0),$a?Ys($0[0],$0[1],w0):Ys($0[0],$0[1])):$a?Ys($0,w0):Ys($0)};if(nt)gu=o;else{if(xu=getIteratorMethod$6(o),!xu)throw $TypeError$g(tryToString$7(o)+" is not iterable");if(isArrayIteratorMethod$4(xu)){for($u=0,Iu=lengthOfArrayLike$7(o);Iu>$u;$u++)if(Xu=A0(o[$u]),Xu&&isPrototypeOf$1$2(ResultPrototype$2,Xu))return Xu;return new Result$2(!1)}gu=getIterator$5(o,xu)}for(i0=gu.next;!(p0=call$4$2(i0,gu)).done;){try{Xu=A0(p0.value)}catch($0){iteratorClose$4(gu,"throw",$0)}if(typeof Xu=="object"&&Xu&&isPrototypeOf$1$2(ResultPrototype$2,Xu))return Xu}return new Result$2(!1)},wellKnownSymbol$k=wellKnownSymbol$e$2,ITERATOR$9=wellKnownSymbol$k("iterator"),SAFE_CLOSING$2=!1;try{var called$2=0,iteratorWithReturn$2={next:function(){return{done:!!called$2++}},return:function(){SAFE_CLOSING$2=!0}};iteratorWithReturn$2[ITERATOR$9]=function(){return this},Array.from(iteratorWithReturn$2,function(){throw 2})}catch(o){}var checkCorrectnessOfIteration$1$2=function(o,a){if(!a&&!SAFE_CLOSING$2)return!1;var c=!1;try{var d={};d[ITERATOR$9]=function(){return{next:function(){return{done:c=!0}}}},o(d)}catch{}return c},NativePromiseConstructor$1$2=promiseNativeConstructor$2,checkCorrectnessOfIteration$3=checkCorrectnessOfIteration$1$2,FORCED_PROMISE_CONSTRUCTOR$3$2=promiseConstructorDetection$2.CONSTRUCTOR,promiseStaticsIncorrectIteration$2=FORCED_PROMISE_CONSTRUCTOR$3$2||!checkCorrectnessOfIteration$3(function(o){NativePromiseConstructor$1$2.all(o).then(void 0,function(){})}),$$4$2=_export$2,call$3$2=functionCall$2,aCallable$1$2=aCallable$7$2,newPromiseCapabilityModule$2$2=newPromiseCapability$2$2,perform$1$2=perform$3$2,iterate$1$2=iterate$2$2,PROMISE_STATICS_INCORRECT_ITERATION$1$2=promiseStaticsIncorrectIteration$2;$$4$2({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$1$2},{all:function o(a){var c=this,d=newPromiseCapabilityModule$2$2.f(c),tt=d.resolve,nt=d.reject,$a=perform$1$2(function(){var Ys=aCallable$1$2(c.resolve),gu=[],xu=0,$u=1;iterate$1$2(a,function(Iu){var Xu=xu++,i0=!1;$u++,call$3$2(Ys,c,Iu).then(function(p0){i0||(i0=!0,gu[Xu]=p0,--$u||tt(gu))},nt)}),--$u||tt(gu)});return $a.error&&nt($a.value),d.promise}});var $$3$2=_export$2,FORCED_PROMISE_CONSTRUCTOR$2$2=promiseConstructorDetection$2.CONSTRUCTOR,NativePromiseConstructor$5=promiseNativeConstructor$2,getBuiltIn$1$2=getBuiltIn$8$2,isCallable$p=isCallable$k$2,defineBuiltIn$1$2=defineBuiltIn$6$2,NativePromisePrototype$3=NativePromiseConstructor$5&&NativePromiseConstructor$5.prototype;$$3$2({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR$2$2,real:!0},{catch:function(o){return this.then(void 0,o)}});if(isCallable$p(NativePromiseConstructor$5)){var method$2=getBuiltIn$1$2("Promise").prototype.catch;NativePromisePrototype$3.catch!==method$2&&defineBuiltIn$1$2(NativePromisePrototype$3,"catch",method$2,{unsafe:!0})}var $$2$2=_export$2,call$2$2=functionCall$2,aCallable$b=aCallable$7$2,newPromiseCapabilityModule$1$2=newPromiseCapability$2$2,perform$5=perform$3$2,iterate$4=iterate$2$2,PROMISE_STATICS_INCORRECT_ITERATION$3=promiseStaticsIncorrectIteration$2;$$2$2({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$3},{race:function o(a){var c=this,d=newPromiseCapabilityModule$1$2.f(c),tt=d.reject,nt=perform$5(function(){var $a=aCallable$b(c.resolve);iterate$4(a,function(Ys){call$2$2($a,c,Ys).then(d.resolve,tt)})});return nt.error&&tt(nt.value),d.promise}});var $$1$3=_export$2,call$1$2=functionCall$2,newPromiseCapabilityModule$5=newPromiseCapability$2$2,FORCED_PROMISE_CONSTRUCTOR$1$2=promiseConstructorDetection$2.CONSTRUCTOR;$$1$3({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$1$2},{reject:function o(a){var c=newPromiseCapabilityModule$5.f(this);return call$1$2(c.reject,void 0,a),c.promise}});var anObject$2$2=anObject$c$2,isObject$b=isObject$7$2,newPromiseCapability$4=newPromiseCapability$2$2,promiseResolve$1$2=function(o,a){if(anObject$2$2(o),isObject$b(a)&&a.constructor===o)return a;var c=newPromiseCapability$4.f(o),d=c.resolve;return d(a),c.promise},$$g=_export$2,getBuiltIn$a=getBuiltIn$8$2,FORCED_PROMISE_CONSTRUCTOR$7=promiseConstructorDetection$2.CONSTRUCTOR,promiseResolve$3=promiseResolve$1$2;getBuiltIn$a("Promise");$$g({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$7},{resolve:function o(a){return promiseResolve$3(this,a)}});var classof$9=classof$3$2,$String$5=String,toString$8=function(o){if(classof$9(o)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return $String$5(o)},anObject$1$2=anObject$c$2,regexpFlags$3=function(){var o=anObject$1$2(this),a="";return o.hasIndices&&(a+="d"),o.global&&(a+="g"),o.ignoreCase&&(a+="i"),o.multiline&&(a+="m"),o.dotAll&&(a+="s"),o.unicode&&(a+="u"),o.unicodeSets&&(a+="v"),o.sticky&&(a+="y"),a},call$m=functionCall$2,hasOwn$e=hasOwnProperty_1$2,isPrototypeOf$6=objectIsPrototypeOf$2,regExpFlags$2=regexpFlags$3,RegExpPrototype$1$2=RegExp.prototype,regexpGetFlags$2=function(o){var a=o.flags;return a===void 0&&!("flags"in RegExpPrototype$1$2)&&!hasOwn$e(o,"flags")&&isPrototypeOf$6(RegExpPrototype$1$2,o)?call$m(regExpFlags$2,o):a},PROPER_FUNCTION_NAME$3=functionName$2.PROPER,defineBuiltIn$c=defineBuiltIn$6$2,anObject$i=anObject$c$2,$toString$4=toString$8,fails$m=fails$d$2,getRegExpFlags$2=regexpGetFlags$2,TO_STRING$2="toString",RegExpPrototype$4=RegExp.prototype,n$ToString$2=RegExpPrototype$4[TO_STRING$2],NOT_GENERIC$2=fails$m(function(){return n$ToString$2.call({source:"a",flags:"b"})!="/a/b"}),INCORRECT_NAME$2=PROPER_FUNCTION_NAME$3&&n$ToString$2.name!=TO_STRING$2;(NOT_GENERIC$2||INCORRECT_NAME$2)&&defineBuiltIn$c(RegExp.prototype,TO_STRING$2,function(){var a=anObject$i(this),c=$toString$4(a.source),d=$toString$4(getRegExpFlags$2(a));return"/"+c+"/"+d},{unsafe:!0});typeof SuppressedError=="function"&&SuppressedError;var commonjsGlobal$1=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},check$1=function(o){return o&&o.Math==Math&&o},global$o=check$1(typeof globalThis=="object"&&globalThis)||check$1(typeof window=="object"&&window)||check$1(typeof self=="object"&&self)||check$1(typeof commonjsGlobal$1=="object"&&commonjsGlobal$1)||function(){return this}()||Function("return this")(),objectGetOwnPropertyDescriptor$1={},fails$k=function(o){try{return!!o()}catch{return!0}},fails$j=fails$k,descriptors$1=!fails$j(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),fails$i=fails$k,functionBindNative$1=!fails$i(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")}),NATIVE_BIND$3$1=functionBindNative$1,call$k=Function.prototype.call,functionCall$1=NATIVE_BIND$3$1?call$k.bind(call$k):function(){return call$k.apply(call$k,arguments)},objectPropertyIsEnumerable$1={},$propertyIsEnumerable$1={}.propertyIsEnumerable,getOwnPropertyDescriptor$3=Object.getOwnPropertyDescriptor,NASHORN_BUG$1=getOwnPropertyDescriptor$3&&!$propertyIsEnumerable$1.call({1:2},1);objectPropertyIsEnumerable$1.f=NASHORN_BUG$1?function o(a){var c=getOwnPropertyDescriptor$3(this,a);return!!c&&c.enumerable}:$propertyIsEnumerable$1;var createPropertyDescriptor$5=function(o,a){return{enumerable:!(o&1),configurable:!(o&2),writable:!(o&4),value:a}},NATIVE_BIND$2$1=functionBindNative$1,FunctionPrototype$2$1=Function.prototype,bind$8=FunctionPrototype$2$1.bind,call$j=FunctionPrototype$2$1.call,uncurryThis$m=NATIVE_BIND$2$1&&bind$8.bind(call$j,call$j),functionUncurryThis$1=NATIVE_BIND$2$1?function(o){return o&&uncurryThis$m(o)}:function(o){return o&&function(){return call$j.apply(o,arguments)}},uncurryThis$l=functionUncurryThis$1,toString$6$1=uncurryThis$l({}.toString),stringSlice$6=uncurryThis$l("".slice),classofRaw$1$1=function(o){return stringSlice$6(toString$6$1(o),8,-1)},uncurryThis$k=functionUncurryThis$1,fails$h$1=fails$k,classof$7=classofRaw$1$1,$Object$4$1=Object,split$3=uncurryThis$k("".split),indexedObject$1=fails$h$1(function(){return!$Object$4$1("z").propertyIsEnumerable(0)})?function(o){return classof$7(o)=="String"?split$3(o,""):$Object$4$1(o)}:$Object$4$1,$TypeError$c$1=TypeError,requireObjectCoercible$4=function(o){if(o==null)throw $TypeError$c$1("Can't call method on "+o);return o},IndexedObject$1$1=indexedObject$1,requireObjectCoercible$3$1=requireObjectCoercible$4,toIndexedObject$5$1=function(o){return IndexedObject$1$1(requireObjectCoercible$3$1(o))},isCallable$n=function(o){return typeof o=="function"},isCallable$m=isCallable$n,isObject$8$1=function(o){return typeof o=="object"?o!==null:isCallable$m(o)},global$n=global$o,isCallable$l$1=isCallable$n,aFunction$1=function(o){return isCallable$l$1(o)?o:void 0},getBuiltIn$8$1=function(o,a){return arguments.length<2?aFunction$1(global$n[o]):global$n[o]&&global$n[o][a]},uncurryThis$j=functionUncurryThis$1,objectIsPrototypeOf$1=uncurryThis$j({}.isPrototypeOf),getBuiltIn$7$1=getBuiltIn$8$1,engineUserAgent$1=getBuiltIn$7$1("navigator","userAgent")||"",global$m=global$o,userAgent$3$1=engineUserAgent$1,process$3$1=global$m.process,Deno$1$1=global$m.Deno,versions$1=process$3$1&&process$3$1.versions||Deno$1$1&&Deno$1$1.version,v8$1=versions$1&&versions$1.v8,match$1,version$4;v8$1&&(match$1=v8$1.split("."),version$4=match$1[0]>0&&match$1[0]<4?1:+(match$1[0]+match$1[1]));!version$4&&userAgent$3$1&&(match$1=userAgent$3$1.match(/Edge\/(\d+)/),(!match$1||match$1[1]>=74)&&(match$1=userAgent$3$1.match(/Chrome\/(\d+)/),match$1&&(version$4=+match$1[1])));var engineV8Version$1=version$4,V8_VERSION$1$1=engineV8Version$1,fails$g$1=fails$k,nativeSymbol$1=!!Object.getOwnPropertySymbols&&!fails$g$1(function(){var o=Symbol();return!String(o)||!(Object(o)instanceof Symbol)||!Symbol.sham&&V8_VERSION$1$1&&V8_VERSION$1$1<41}),NATIVE_SYMBOL$1$1=nativeSymbol$1,useSymbolAsUid$1=NATIVE_SYMBOL$1$1&&!Symbol.sham&&typeof Symbol.iterator=="symbol",getBuiltIn$6$1=getBuiltIn$8$1,isCallable$k$1=isCallable$n,isPrototypeOf$3$1=objectIsPrototypeOf$1,USE_SYMBOL_AS_UID$1$1=useSymbolAsUid$1,$Object$3$1=Object,isSymbol$2$1=USE_SYMBOL_AS_UID$1$1?function(o){return typeof o=="symbol"}:function(o){var a=getBuiltIn$6$1("Symbol");return isCallable$k$1(a)&&isPrototypeOf$3$1(a.prototype,$Object$3$1(o))},$String$3$1=String,tryToString$4$1=function(o){try{return $String$3$1(o)}catch{return"Object"}},isCallable$j$1=isCallable$n,tryToString$3$1=tryToString$4$1,$TypeError$b$1=TypeError,aCallable$7$1=function(o){if(isCallable$j$1(o))return o;throw $TypeError$b$1(tryToString$3$1(o)+" is not a function")},aCallable$6$1=aCallable$7$1,getMethod$4=function(o,a){var c=o[a];return c==null?void 0:aCallable$6$1(c)},call$i=functionCall$1,isCallable$i$1=isCallable$n,isObject$7$1=isObject$8$1,$TypeError$a$1=TypeError,ordinaryToPrimitive$1$1=function(o,a){var c,d;if(a==="string"&&isCallable$i$1(c=o.toString)&&!isObject$7$1(d=call$i(c,o))||isCallable$i$1(c=o.valueOf)&&!isObject$7$1(d=call$i(c,o))||a!=="string"&&isCallable$i$1(c=o.toString)&&!isObject$7$1(d=call$i(c,o)))return d;throw $TypeError$a$1("Can't convert object to primitive value")},shared$4={exports:{}},isPure=!1,global$l=global$o,defineProperty$6$1=Object.defineProperty,defineGlobalProperty$3$1=function(o,a){try{defineProperty$6$1(global$l,o,{value:a,configurable:!0,writable:!0})}catch{global$l[o]=a}return a},global$k$1=global$o,defineGlobalProperty$2$1=defineGlobalProperty$3$1,SHARED$1="__core-js_shared__",store$3$1=global$k$1[SHARED$1]||defineGlobalProperty$2$1(SHARED$1,{}),sharedStore$1=store$3$1,store$2$1=sharedStore$1;(shared$4.exports=function(o,a){return store$2$1[o]||(store$2$1[o]=a!==void 0?a:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var requireObjectCoercible$2$1=requireObjectCoercible$4,$Object$2$1=Object,toObject$5$1=function(o){return $Object$2$1(requireObjectCoercible$2$1(o))},uncurryThis$i=functionUncurryThis$1,toObject$4$1=toObject$5$1,hasOwnProperty$1=uncurryThis$i({}.hasOwnProperty),hasOwnProperty_1$1=Object.hasOwn||function o(a,c){return hasOwnProperty$1(toObject$4$1(a),c)},uncurryThis$h$1=functionUncurryThis$1,id$2=0,postfix$1=Math.random(),toString$5$1=uncurryThis$h$1(1 .toString),uid$2$1=function(o){return"Symbol("+(o===void 0?"":o)+")_"+toString$5$1(++id$2+postfix$1,36)},global$j$1=global$o,shared$3$1=shared$4.exports,hasOwn$c=hasOwnProperty_1$1,uid$1$1=uid$2$1,NATIVE_SYMBOL$3=nativeSymbol$1,USE_SYMBOL_AS_UID$2=useSymbolAsUid$1,WellKnownSymbolsStore$1=shared$3$1("wks"),Symbol$1$1=global$j$1.Symbol,symbolFor$1=Symbol$1$1&&Symbol$1$1.for,createWellKnownSymbol$1=USE_SYMBOL_AS_UID$2?Symbol$1$1:Symbol$1$1&&Symbol$1$1.withoutSetter||uid$1$1,wellKnownSymbol$i=function(o){if(!hasOwn$c(WellKnownSymbolsStore$1,o)||!(NATIVE_SYMBOL$3||typeof WellKnownSymbolsStore$1[o]=="string")){var a="Symbol."+o;NATIVE_SYMBOL$3&&hasOwn$c(Symbol$1$1,o)?WellKnownSymbolsStore$1[o]=Symbol$1$1[o]:USE_SYMBOL_AS_UID$2&&symbolFor$1?WellKnownSymbolsStore$1[o]=symbolFor$1(a):WellKnownSymbolsStore$1[o]=createWellKnownSymbol$1(a)}return WellKnownSymbolsStore$1[o]},call$h=functionCall$1,isObject$6$1=isObject$8$1,isSymbol$1$1=isSymbol$2$1,getMethod$3$1=getMethod$4,ordinaryToPrimitive$2=ordinaryToPrimitive$1$1,wellKnownSymbol$h=wellKnownSymbol$i,$TypeError$9$1=TypeError,TO_PRIMITIVE$1=wellKnownSymbol$h("toPrimitive"),toPrimitive$1$1=function(o,a){if(!isObject$6$1(o)||isSymbol$1$1(o))return o;var c=getMethod$3$1(o,TO_PRIMITIVE$1),d;if(c){if(a===void 0&&(a="default"),d=call$h(c,o,a),!isObject$6$1(d)||isSymbol$1$1(d))return d;throw $TypeError$9$1("Can't convert object to primitive value")}return a===void 0&&(a="number"),ordinaryToPrimitive$2(o,a)},toPrimitive$2=toPrimitive$1$1,isSymbol$3=isSymbol$2$1,toPropertyKey$3$1=function(o){var a=toPrimitive$2(o,"string");return isSymbol$3(a)?a:a+""},global$i$1=global$o,isObject$5$1=isObject$8$1,document$3$1=global$i$1.document,EXISTS$1$1=isObject$5$1(document$3$1)&&isObject$5$1(document$3$1.createElement),documentCreateElement$2$1=function(o){return EXISTS$1$1?document$3$1.createElement(o):{}},DESCRIPTORS$c=descriptors$1,fails$f$1=fails$k,createElement$1$1=documentCreateElement$2$1,ie8DomDefine$1=!DESCRIPTORS$c&&!fails$f$1(function(){return Object.defineProperty(createElement$1$1("div"),"a",{get:function(){return 7}}).a!=7}),DESCRIPTORS$b$1=descriptors$1,call$g=functionCall$1,propertyIsEnumerableModule$1$1=objectPropertyIsEnumerable$1,createPropertyDescriptor$4$1=createPropertyDescriptor$5,toIndexedObject$4$1=toIndexedObject$5$1,toPropertyKey$2$1=toPropertyKey$3$1,hasOwn$b$1=hasOwnProperty_1$1,IE8_DOM_DEFINE$1$1=ie8DomDefine$1,$getOwnPropertyDescriptor$1$1=Object.getOwnPropertyDescriptor;objectGetOwnPropertyDescriptor$1.f=DESCRIPTORS$b$1?$getOwnPropertyDescriptor$1$1:function o(a,c){if(a=toIndexedObject$4$1(a),c=toPropertyKey$2$1(c),IE8_DOM_DEFINE$1$1)try{return $getOwnPropertyDescriptor$1$1(a,c)}catch{}if(hasOwn$b$1(a,c))return createPropertyDescriptor$4$1(!call$g(propertyIsEnumerableModule$1$1.f,a,c),a[c])};var objectDefineProperty$1={},DESCRIPTORS$a$1=descriptors$1,fails$e$1=fails$k,v8PrototypeDefineBug$1=DESCRIPTORS$a$1&&fails$e$1(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42}),isObject$4$1=isObject$8$1,$String$2$1=String,$TypeError$8$1=TypeError,anObject$g=function(o){if(isObject$4$1(o))return o;throw $TypeError$8$1($String$2$1(o)+" is not an object")},DESCRIPTORS$9$1=descriptors$1,IE8_DOM_DEFINE$2=ie8DomDefine$1,V8_PROTOTYPE_DEFINE_BUG$1$1=v8PrototypeDefineBug$1,anObject$f=anObject$g,toPropertyKey$1$1=toPropertyKey$3$1,$TypeError$7$1=TypeError,$defineProperty$1=Object.defineProperty,$getOwnPropertyDescriptor$2=Object.getOwnPropertyDescriptor,ENUMERABLE$1="enumerable",CONFIGURABLE$1$1="configurable",WRITABLE$1="writable";objectDefineProperty$1.f=DESCRIPTORS$9$1?V8_PROTOTYPE_DEFINE_BUG$1$1?function o(a,c,d){if(anObject$f(a),c=toPropertyKey$1$1(c),anObject$f(d),typeof a=="function"&&c==="prototype"&&"value"in d&&WRITABLE$1 in d&&!d[WRITABLE$1]){var tt=$getOwnPropertyDescriptor$2(a,c);tt&&tt[WRITABLE$1]&&(a[c]=d.value,d={configurable:CONFIGURABLE$1$1 in d?d[CONFIGURABLE$1$1]:tt[CONFIGURABLE$1$1],enumerable:ENUMERABLE$1 in d?d[ENUMERABLE$1]:tt[ENUMERABLE$1],writable:!1})}return $defineProperty$1(a,c,d)}:$defineProperty$1:function o(a,c,d){if(anObject$f(a),c=toPropertyKey$1$1(c),anObject$f(d),IE8_DOM_DEFINE$2)try{return $defineProperty$1(a,c,d)}catch{}if("get"in d||"set"in d)throw $TypeError$7$1("Accessors not supported");return"value"in d&&(a[c]=d.value),a};var DESCRIPTORS$8$1=descriptors$1,definePropertyModule$5$1=objectDefineProperty$1,createPropertyDescriptor$3$1=createPropertyDescriptor$5,createNonEnumerableProperty$5=DESCRIPTORS$8$1?function(o,a,c){return definePropertyModule$5$1.f(o,a,createPropertyDescriptor$3$1(1,c))}:function(o,a,c){return o[a]=c,o},makeBuiltIn$3={exports:{}},DESCRIPTORS$7$1=descriptors$1,hasOwn$a$1=hasOwnProperty_1$1,FunctionPrototype$1$1=Function.prototype,getDescriptor$1=DESCRIPTORS$7$1&&Object.getOwnPropertyDescriptor,EXISTS$2=hasOwn$a$1(FunctionPrototype$1$1,"name"),PROPER$1=EXISTS$2&&(function o(){}).name==="something",CONFIGURABLE$2=EXISTS$2&&(!DESCRIPTORS$7$1||DESCRIPTORS$7$1&&getDescriptor$1(FunctionPrototype$1$1,"name").configurable),functionName$1={EXISTS:EXISTS$2,PROPER:PROPER$1,CONFIGURABLE:CONFIGURABLE$2},uncurryThis$g$1=functionUncurryThis$1,isCallable$h$1=isCallable$n,store$1$1=sharedStore$1,functionToString$1=uncurryThis$g$1(Function.toString);isCallable$h$1(store$1$1.inspectSource)||(store$1$1.inspectSource=function(o){return functionToString$1(o)});var inspectSource$4$1=store$1$1.inspectSource,global$h$1=global$o,isCallable$g$1=isCallable$n,inspectSource$3$1=inspectSource$4$1,WeakMap$1$1=global$h$1.WeakMap,nativeWeakMap$1=isCallable$g$1(WeakMap$1$1)&&/native code/.test(inspectSource$3$1(WeakMap$1$1)),shared$2$1=shared$4.exports,uid$3=uid$2$1,keys$1=shared$2$1("keys"),sharedKey$3$1=function(o){return keys$1[o]||(keys$1[o]=uid$3(o))},hiddenKeys$4$1={},NATIVE_WEAK_MAP$1=nativeWeakMap$1,global$g$1=global$o,uncurryThis$f$1=functionUncurryThis$1,isObject$3$2=isObject$8$1,createNonEnumerableProperty$4$1=createNonEnumerableProperty$5,hasOwn$9$1=hasOwnProperty_1$1,shared$1$1=sharedStore$1,sharedKey$2$1=sharedKey$3$1,hiddenKeys$3$1=hiddenKeys$4$1,OBJECT_ALREADY_INITIALIZED$1="Object already initialized",TypeError$4=global$g$1.TypeError,WeakMap$3=global$g$1.WeakMap,set$1$1,get$1,has$2,enforce$1=function(o){return has$2(o)?get$1(o):set$1$1(o,{})},getterFor$1=function(o){return function(a){var c;if(!isObject$3$2(a)||(c=get$1(a)).type!==o)throw TypeError$4("Incompatible receiver, "+o+" required");return c}};if(NATIVE_WEAK_MAP$1||shared$1$1.state){var store$5=shared$1$1.state||(shared$1$1.state=new WeakMap$3),wmget$1=uncurryThis$f$1(store$5.get),wmhas$1=uncurryThis$f$1(store$5.has),wmset$1=uncurryThis$f$1(store$5.set);set$1$1=function(o,a){if(wmhas$1(store$5,o))throw new TypeError$4(OBJECT_ALREADY_INITIALIZED$1);return a.facade=o,wmset$1(store$5,o,a),a},get$1=function(o){return wmget$1(store$5,o)||{}},has$2=function(o){return wmhas$1(store$5,o)}}else{var STATE$1=sharedKey$2$1("state");hiddenKeys$3$1[STATE$1]=!0,set$1$1=function(o,a){if(hasOwn$9$1(o,STATE$1))throw new TypeError$4(OBJECT_ALREADY_INITIALIZED$1);return a.facade=o,createNonEnumerableProperty$4$1(o,STATE$1,a),a},get$1=function(o){return hasOwn$9$1(o,STATE$1)?o[STATE$1]:{}},has$2=function(o){return hasOwn$9$1(o,STATE$1)}}var internalState$1={set:set$1$1,get:get$1,has:has$2,enforce:enforce$1,getterFor:getterFor$1},fails$d$1=fails$k,isCallable$f$1=isCallable$n,hasOwn$8$1=hasOwnProperty_1$1,DESCRIPTORS$6$1=descriptors$1,CONFIGURABLE_FUNCTION_NAME$1$1=functionName$1.CONFIGURABLE,inspectSource$2$1=inspectSource$4$1,InternalStateModule$5=internalState$1,enforceInternalState$1=InternalStateModule$5.enforce,getInternalState$3=InternalStateModule$5.get,defineProperty$5$1=Object.defineProperty,CONFIGURABLE_LENGTH$1=DESCRIPTORS$6$1&&!fails$d$1(function(){return defineProperty$5$1(function(){},"length",{value:8}).length!==8}),TEMPLATE$1=String(String).split("String"),makeBuiltIn$2$1=makeBuiltIn$3.exports=function(o,a,c){String(a).slice(0,7)==="Symbol("&&(a="["+String(a).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),c&&c.getter&&(a="get "+a),c&&c.setter&&(a="set "+a),(!hasOwn$8$1(o,"name")||CONFIGURABLE_FUNCTION_NAME$1$1&&o.name!==a)&&(DESCRIPTORS$6$1?defineProperty$5$1(o,"name",{value:a,configurable:!0}):o.name=a),CONFIGURABLE_LENGTH$1&&c&&hasOwn$8$1(c,"arity")&&o.length!==c.arity&&defineProperty$5$1(o,"length",{value:c.arity});try{c&&hasOwn$8$1(c,"constructor")&&c.constructor?DESCRIPTORS$6$1&&defineProperty$5$1(o,"prototype",{writable:!1}):o.prototype&&(o.prototype=void 0)}catch{}var d=enforceInternalState$1(o);return hasOwn$8$1(d,"source")||(d.source=TEMPLATE$1.join(typeof a=="string"?a:"")),o};Function.prototype.toString=makeBuiltIn$2$1(function o(){return isCallable$f$1(this)&&getInternalState$3(this).source||inspectSource$2$1(this)},"toString");var isCallable$e$1=isCallable$n,definePropertyModule$4$1=objectDefineProperty$1,makeBuiltIn$1$1=makeBuiltIn$3.exports,defineGlobalProperty$1$1=defineGlobalProperty$3$1,defineBuiltIn$a=function(o,a,c,d){d||(d={});var tt=d.enumerable,nt=d.name!==void 0?d.name:a;if(isCallable$e$1(c)&&makeBuiltIn$1$1(c,nt,d),d.global)tt?o[a]=c:defineGlobalProperty$1$1(a,c);else{try{d.unsafe?o[a]&&(tt=!0):delete o[a]}catch{}tt?o[a]=c:definePropertyModule$4$1.f(o,a,{value:c,enumerable:!1,configurable:!d.nonConfigurable,writable:!d.nonWritable})}return o},objectGetOwnPropertyNames$1={},ceil$1=Math.ceil,floor$4=Math.floor,mathTrunc$1=Math.trunc||function o(a){var c=+a;return(c>0?floor$4:ceil$1)(c)},trunc$1=mathTrunc$1,toIntegerOrInfinity$4=function(o){var a=+o;return a!==a||a===0?0:trunc$1(a)},toIntegerOrInfinity$3=toIntegerOrInfinity$4,max$2$1=Math.max,min$2$1=Math.min,toAbsoluteIndex$2$1=function(o,a){var c=toIntegerOrInfinity$3(o);return c<0?max$2$1(c+a,0):min$2$1(c,a)},toIntegerOrInfinity$2$1=toIntegerOrInfinity$4,min$1$1=Math.min,toLength$2=function(o){return o>0?min$1$1(toIntegerOrInfinity$2$1(o),9007199254740991):0},toLength$1$1=toLength$2,lengthOfArrayLike$4$1=function(o){return toLength$1$1(o.length)},toIndexedObject$3$1=toIndexedObject$5$1,toAbsoluteIndex$1$1=toAbsoluteIndex$2$1,lengthOfArrayLike$3$1=lengthOfArrayLike$4$1,createMethod$1$1=function(o){return function(a,c,d){var tt=toIndexedObject$3$1(a),nt=lengthOfArrayLike$3$1(tt),$a=toAbsoluteIndex$1$1(d,nt),Ys;if(o&&c!=c){for(;nt>$a;)if(Ys=tt[$a++],Ys!=Ys)return!0}else for(;nt>$a;$a++)if((o||$a in tt)&&tt[$a]===c)return o||$a||0;return!o&&-1}},arrayIncludes$1={includes:createMethod$1$1(!0),indexOf:createMethod$1$1(!1)},uncurryThis$e$1=functionUncurryThis$1,hasOwn$7$1=hasOwnProperty_1$1,toIndexedObject$2$1=toIndexedObject$5$1,indexOf$1=arrayIncludes$1.indexOf,hiddenKeys$2$1=hiddenKeys$4$1,push$4=uncurryThis$e$1([].push),objectKeysInternal$1=function(o,a){var c=toIndexedObject$2$1(o),d=0,tt=[],nt;for(nt in c)!hasOwn$7$1(hiddenKeys$2$1,nt)&&hasOwn$7$1(c,nt)&&push$4(tt,nt);for(;a.length>d;)hasOwn$7$1(c,nt=a[d++])&&(~indexOf$1(tt,nt)||push$4(tt,nt));return tt},enumBugKeys$3$1=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],internalObjectKeys$1$1=objectKeysInternal$1,enumBugKeys$2$1=enumBugKeys$3$1,hiddenKeys$1$1=enumBugKeys$2$1.concat("length","prototype");objectGetOwnPropertyNames$1.f=Object.getOwnPropertyNames||function o(a){return internalObjectKeys$1$1(a,hiddenKeys$1$1)};var objectGetOwnPropertySymbols$1={};objectGetOwnPropertySymbols$1.f=Object.getOwnPropertySymbols;var getBuiltIn$5$1=getBuiltIn$8$1,uncurryThis$d$1=functionUncurryThis$1,getOwnPropertyNamesModule$1=objectGetOwnPropertyNames$1,getOwnPropertySymbolsModule$1$1=objectGetOwnPropertySymbols$1,anObject$e=anObject$g,concat$2=uncurryThis$d$1([].concat),ownKeys$1$1=getBuiltIn$5$1("Reflect","ownKeys")||function o(a){var c=getOwnPropertyNamesModule$1.f(anObject$e(a)),d=getOwnPropertySymbolsModule$1$1.f;return d?concat$2(c,d(a)):c},hasOwn$6$1=hasOwnProperty_1$1,ownKeys$3=ownKeys$1$1,getOwnPropertyDescriptorModule$1=objectGetOwnPropertyDescriptor$1,definePropertyModule$3$1=objectDefineProperty$1,copyConstructorProperties$1$1=function(o,a,c){for(var d=ownKeys$3(a),tt=definePropertyModule$3$1.f,nt=getOwnPropertyDescriptorModule$1.f,$a=0;$ant;)for(var gu=IndexedObject$3(arguments[nt++]),xu=$a?concat$1$1(objectKeys$1$1(gu),$a(gu)):objectKeys$1$1(gu),$u=xu.length,Iu=0,Xu;$u>Iu;)Xu=xu[Iu++],(!DESCRIPTORS$5$1||call$f$1(Ys,gu,Xu))&&(d[Xu]=gu[Xu]);return d}:$assign$1,$$a$1=_export$1,assign$1$1=objectAssign$1;$$a$1({target:"Object",stat:!0,arity:2,forced:Object.assign!==assign$1$1},{assign:assign$1$1});var wellKnownSymbol$g$1=wellKnownSymbol$i,TO_STRING_TAG$3$1=wellKnownSymbol$g$1("toStringTag"),test$2={};test$2[TO_STRING_TAG$3$1]="z";var toStringTagSupport$1=String(test$2)==="[object z]",TO_STRING_TAG_SUPPORT$1=toStringTagSupport$1,isCallable$c$1=isCallable$n,classofRaw$2=classofRaw$1$1,wellKnownSymbol$f$1=wellKnownSymbol$i,TO_STRING_TAG$2$1=wellKnownSymbol$f$1("toStringTag"),$Object$1$1=Object,CORRECT_ARGUMENTS$1=classofRaw$2(function(){return arguments}())=="Arguments",tryGet$1=function(o,a){try{return o[a]}catch{}},classof$6$1=TO_STRING_TAG_SUPPORT$1?classofRaw$2:function(o){var a,c,d;return o===void 0?"Undefined":o===null?"Null":typeof(c=tryGet$1(a=$Object$1$1(o),TO_STRING_TAG$2$1))=="string"?c:CORRECT_ARGUMENTS$1?classofRaw$2(a):(d=classofRaw$2(a))=="Object"&&isCallable$c$1(a.callee)?"Arguments":d},classof$5$1=classof$6$1,$String$1$1=String,toString$4$1=function(o){if(classof$5$1(o)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return $String$1$1(o)},anObject$d=anObject$g,regexpFlags$1=function(){var o=anObject$d(this),a="";return o.hasIndices&&(a+="d"),o.global&&(a+="g"),o.ignoreCase&&(a+="i"),o.multiline&&(a+="m"),o.dotAll&&(a+="s"),o.unicode&&(a+="u"),o.unicodeSets&&(a+="v"),o.sticky&&(a+="y"),a},call$e$1=functionCall$1,hasOwn$5$1=hasOwnProperty_1$1,isPrototypeOf$2$1=objectIsPrototypeOf$1,regExpFlags$1=regexpFlags$1,RegExpPrototype$2=RegExp.prototype,regexpGetFlags$1=function(o){var a=o.flags;return a===void 0&&!("flags"in RegExpPrototype$2)&&!hasOwn$5$1(o,"flags")&&isPrototypeOf$2$1(RegExpPrototype$2,o)?call$e$1(regExpFlags$1,o):a},PROPER_FUNCTION_NAME$1$1=functionName$1.PROPER,defineBuiltIn$8=defineBuiltIn$a,anObject$c$1=anObject$g,$toString$2=toString$4$1,fails$a$1=fails$k,getRegExpFlags$1=regexpGetFlags$1,TO_STRING$1="toString",RegExpPrototype$1$1=RegExp.prototype,n$ToString$1=RegExpPrototype$1$1[TO_STRING$1],NOT_GENERIC$1=fails$a$1(function(){return n$ToString$1.call({source:"a",flags:"b"})!="/a/b"}),INCORRECT_NAME$1=PROPER_FUNCTION_NAME$1$1&&n$ToString$1.name!=TO_STRING$1;(NOT_GENERIC$1||INCORRECT_NAME$1)&&defineBuiltIn$8(RegExp.prototype,TO_STRING$1,function(){var a=anObject$c$1(this),c=$toString$2(a.source),d=$toString$2(getRegExpFlags$1(a));return"/"+c+"/"+d},{unsafe:!0});var objectDefineProperties$1={},DESCRIPTORS$4$1=descriptors$1,V8_PROTOTYPE_DEFINE_BUG$2=v8PrototypeDefineBug$1,definePropertyModule$2$1=objectDefineProperty$1,anObject$b$1=anObject$g,toIndexedObject$1$1=toIndexedObject$5$1,objectKeys$3=objectKeys$2$1;objectDefineProperties$1.f=DESCRIPTORS$4$1&&!V8_PROTOTYPE_DEFINE_BUG$2?Object.defineProperties:function o(a,c){anObject$b$1(a);for(var d=toIndexedObject$1$1(c),tt=objectKeys$3(c),nt=tt.length,$a=0,Ys;nt>$a;)definePropertyModule$2$1.f(a,Ys=tt[$a++],d[Ys]);return a};var getBuiltIn$4$1=getBuiltIn$8$1,html$2$1=getBuiltIn$4$1("document","documentElement"),anObject$a$1=anObject$g,definePropertiesModule$1=objectDefineProperties$1,enumBugKeys$4=enumBugKeys$3$1,hiddenKeys$5=hiddenKeys$4$1,html$1$1=html$2$1,documentCreateElement$1$1=documentCreateElement$2$1,sharedKey$1$1=sharedKey$3$1,GT$1=">",LT$1="<",PROTOTYPE$1="prototype",SCRIPT$1="script",IE_PROTO$1$1=sharedKey$1$1("IE_PROTO"),EmptyConstructor$1=function(){},scriptTag$1=function(o){return LT$1+SCRIPT$1+GT$1+o+LT$1+"/"+SCRIPT$1+GT$1},NullProtoObjectViaActiveX$1=function(o){o.write(scriptTag$1("")),o.close();var a=o.parentWindow.Object;return o=null,a},NullProtoObjectViaIFrame$1=function(){var o=documentCreateElement$1$1("iframe"),a="java"+SCRIPT$1+":",c;return o.style.display="none",html$1$1.appendChild(o),o.src=String(a),c=o.contentWindow.document,c.open(),c.write(scriptTag$1("document.F=Object")),c.close(),c.F},activeXDocument$1,NullProtoObject$1=function(){try{activeXDocument$1=new ActiveXObject("htmlfile")}catch{}NullProtoObject$1=typeof document<"u"?document.domain&&activeXDocument$1?NullProtoObjectViaActiveX$1(activeXDocument$1):NullProtoObjectViaIFrame$1():NullProtoObjectViaActiveX$1(activeXDocument$1);for(var o=enumBugKeys$4.length;o--;)delete NullProtoObject$1[PROTOTYPE$1][enumBugKeys$4[o]];return NullProtoObject$1()};hiddenKeys$5[IE_PROTO$1$1]=!0;var objectCreate$1=Object.create||function o(a,c){var d;return a!==null?(EmptyConstructor$1[PROTOTYPE$1]=anObject$a$1(a),d=new EmptyConstructor$1,EmptyConstructor$1[PROTOTYPE$1]=null,d[IE_PROTO$1$1]=a):d=NullProtoObject$1(),c===void 0?d:definePropertiesModule$1.f(d,c)},wellKnownSymbol$e$1=wellKnownSymbol$i,create$3=objectCreate$1,defineProperty$3$1=objectDefineProperty$1.f,UNSCOPABLES$1=wellKnownSymbol$e$1("unscopables"),ArrayPrototype$1$1=Array.prototype;ArrayPrototype$1$1[UNSCOPABLES$1]==null&&defineProperty$3$1(ArrayPrototype$1$1,UNSCOPABLES$1,{configurable:!0,value:create$3(null)});var addToUnscopables$1$1=function(o){ArrayPrototype$1$1[UNSCOPABLES$1][o]=!0},iterators$1={},fails$9$1=fails$k,correctPrototypeGetter$1=!fails$9$1(function(){function o(){}return o.prototype.constructor=null,Object.getPrototypeOf(new o)!==o.prototype}),hasOwn$4$1=hasOwnProperty_1$1,isCallable$b$1=isCallable$n,toObject$2$1=toObject$5$1,sharedKey$4=sharedKey$3$1,CORRECT_PROTOTYPE_GETTER$1=correctPrototypeGetter$1,IE_PROTO$2=sharedKey$4("IE_PROTO"),$Object$5=Object,ObjectPrototype$1=$Object$5.prototype,objectGetPrototypeOf$1=CORRECT_PROTOTYPE_GETTER$1?$Object$5.getPrototypeOf:function(o){var a=toObject$2$1(o);if(hasOwn$4$1(a,IE_PROTO$2))return a[IE_PROTO$2];var c=a.constructor;return isCallable$b$1(c)&&a instanceof c?c.prototype:a instanceof $Object$5?ObjectPrototype$1:null},fails$8$1=fails$k,isCallable$a$1=isCallable$n,getPrototypeOf$1$1=objectGetPrototypeOf$1,defineBuiltIn$7=defineBuiltIn$a,wellKnownSymbol$d$1=wellKnownSymbol$i,ITERATOR$7=wellKnownSymbol$d$1("iterator"),BUGGY_SAFARI_ITERATORS$1$1=!1,IteratorPrototype$2$1,PrototypeOfArrayIteratorPrototype$1,arrayIterator$1;[].keys&&(arrayIterator$1=[].keys(),"next"in arrayIterator$1?(PrototypeOfArrayIteratorPrototype$1=getPrototypeOf$1$1(getPrototypeOf$1$1(arrayIterator$1)),PrototypeOfArrayIteratorPrototype$1!==Object.prototype&&(IteratorPrototype$2$1=PrototypeOfArrayIteratorPrototype$1)):BUGGY_SAFARI_ITERATORS$1$1=!0);var NEW_ITERATOR_PROTOTYPE$1=IteratorPrototype$2$1==null||fails$8$1(function(){var o={};return IteratorPrototype$2$1[ITERATOR$7].call(o)!==o});NEW_ITERATOR_PROTOTYPE$1&&(IteratorPrototype$2$1={});isCallable$a$1(IteratorPrototype$2$1[ITERATOR$7])||defineBuiltIn$7(IteratorPrototype$2$1,ITERATOR$7,function(){return this});var iteratorsCore$1={IteratorPrototype:IteratorPrototype$2$1,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS$1$1},defineProperty$2$1=objectDefineProperty$1.f,hasOwn$3$1=hasOwnProperty_1$1,wellKnownSymbol$c$1=wellKnownSymbol$i,TO_STRING_TAG$1$1=wellKnownSymbol$c$1("toStringTag"),setToStringTag$5=function(o,a,c){o&&!c&&(o=o.prototype),o&&!hasOwn$3$1(o,TO_STRING_TAG$1$1)&&defineProperty$2$1(o,TO_STRING_TAG$1$1,{configurable:!0,value:a})},IteratorPrototype$1$1=iteratorsCore$1.IteratorPrototype,create$2=objectCreate$1,createPropertyDescriptor$2$1=createPropertyDescriptor$5,setToStringTag$4=setToStringTag$5,Iterators$4$1=iterators$1,returnThis$1$1=function(){return this},createIteratorConstructor$2=function(o,a,c,d){var tt=a+" Iterator";return o.prototype=create$2(IteratorPrototype$1$1,{next:createPropertyDescriptor$2$1(+!d,c)}),setToStringTag$4(o,tt,!1),Iterators$4$1[tt]=returnThis$1$1,o},isCallable$9$1=isCallable$n,$String$4=String,$TypeError$6$1=TypeError,aPossiblePrototype$1$1=function(o){if(typeof o=="object"||isCallable$9$1(o))return o;throw $TypeError$6$1("Can't set "+$String$4(o)+" as a prototype")},uncurryThis$b$1=functionUncurryThis$1,anObject$9$1=anObject$g,aPossiblePrototype$2=aPossiblePrototype$1$1,objectSetPrototypeOf$1=Object.setPrototypeOf||("__proto__"in{}?function(){var o=!1,a={},c;try{c=uncurryThis$b$1(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set),c(a,[]),o=a instanceof Array}catch{}return function(tt,nt){return anObject$9$1(tt),aPossiblePrototype$2(nt),o?c(tt,nt):tt.__proto__=nt,tt}}():void 0),$$9$1=_export$1,call$d$1=functionCall$1,FunctionName$1=functionName$1,isCallable$8$1=isCallable$n,createIteratorConstructor$1$1=createIteratorConstructor$2,getPrototypeOf$2=objectGetPrototypeOf$1,setPrototypeOf$1$1=objectSetPrototypeOf$1,setToStringTag$3$1=setToStringTag$5,createNonEnumerableProperty$2$1=createNonEnumerableProperty$5,defineBuiltIn$6$1=defineBuiltIn$a,wellKnownSymbol$b$1=wellKnownSymbol$i,Iterators$3$1=iterators$1,IteratorsCore$1=iteratorsCore$1,PROPER_FUNCTION_NAME$2=FunctionName$1.PROPER,CONFIGURABLE_FUNCTION_NAME$2=FunctionName$1.CONFIGURABLE,IteratorPrototype$3=IteratorsCore$1.IteratorPrototype,BUGGY_SAFARI_ITERATORS$2=IteratorsCore$1.BUGGY_SAFARI_ITERATORS,ITERATOR$6=wellKnownSymbol$b$1("iterator"),KEYS$1="keys",VALUES$1="values",ENTRIES$1="entries",returnThis$2=function(){return this},defineIterator$2=function(o,a,c,d,tt,nt,$a){createIteratorConstructor$1$1(c,a,d);var Ys=function($0){if($0===tt&&Xu)return Xu;if(!BUGGY_SAFARI_ITERATORS$2&&$0 in $u)return $u[$0];switch($0){case KEYS$1:return function(){return new c(this,$0)};case VALUES$1:return function(){return new c(this,$0)};case ENTRIES$1:return function(){return new c(this,$0)}}return function(){return new c(this)}},gu=a+" Iterator",xu=!1,$u=o.prototype,Iu=$u[ITERATOR$6]||$u["@@iterator"]||tt&&$u[tt],Xu=!BUGGY_SAFARI_ITERATORS$2&&Iu||Ys(tt),i0=a=="Array"&&$u.entries||Iu,p0,w0,A0;if(i0&&(p0=getPrototypeOf$2(i0.call(new o)),p0!==Object.prototype&&p0.next&&(getPrototypeOf$2(p0)!==IteratorPrototype$3&&(setPrototypeOf$1$1?setPrototypeOf$1$1(p0,IteratorPrototype$3):isCallable$8$1(p0[ITERATOR$6])||defineBuiltIn$6$1(p0,ITERATOR$6,returnThis$2)),setToStringTag$3$1(p0,gu,!0))),PROPER_FUNCTION_NAME$2&&tt==VALUES$1&&Iu&&Iu.name!==VALUES$1&&(CONFIGURABLE_FUNCTION_NAME$2?createNonEnumerableProperty$2$1($u,"name",VALUES$1):(xu=!0,Xu=function(){return call$d$1(Iu,this)})),tt)if(w0={values:Ys(VALUES$1),keys:nt?Xu:Ys(KEYS$1),entries:Ys(ENTRIES$1)},$a)for(A0 in w0)(BUGGY_SAFARI_ITERATORS$2||xu||!(A0 in $u))&&defineBuiltIn$6$1($u,A0,w0[A0]);else $$9$1({target:a,proto:!0,forced:BUGGY_SAFARI_ITERATORS$2||xu},w0);return $u[ITERATOR$6]!==Xu&&defineBuiltIn$6$1($u,ITERATOR$6,Xu,{name:tt}),Iterators$3$1[a]=Xu,w0},toIndexedObject$6=toIndexedObject$5$1,addToUnscopables$3=addToUnscopables$1$1,Iterators$2$1=iterators$1,InternalStateModule$4=internalState$1,defineProperty$1$1=objectDefineProperty$1.f,defineIterator$1$1=defineIterator$2,DESCRIPTORS$3$1=descriptors$1,ARRAY_ITERATOR$1="Array Iterator",setInternalState$4=InternalStateModule$4.set,getInternalState$2=InternalStateModule$4.getterFor(ARRAY_ITERATOR$1),es_array_iterator$1=defineIterator$1$1(Array,"Array",function(o,a){setInternalState$4(this,{type:ARRAY_ITERATOR$1,target:toIndexedObject$6(o),index:0,kind:a})},function(){var o=getInternalState$2(this),a=o.target,c=o.kind,d=o.index++;return!a||d>=a.length?(o.target=void 0,{value:void 0,done:!0}):c=="keys"?{value:d,done:!1}:c=="values"?{value:a[d],done:!1}:{value:[d,a[d]],done:!1}},"values"),values$1=Iterators$2$1.Arguments=Iterators$2$1.Array;addToUnscopables$3("keys");addToUnscopables$3("values");addToUnscopables$3("entries");if(DESCRIPTORS$3$1&&values$1.name!=="values")try{defineProperty$1$1(values$1,"name",{value:"values"})}catch(o){}var classof$4$1=classofRaw$1$1,global$e$1=global$o,engineIsNode$1=classof$4$1(global$e$1.process)=="process",getBuiltIn$3$1=getBuiltIn$8$1,definePropertyModule$1$1=objectDefineProperty$1,wellKnownSymbol$a$1=wellKnownSymbol$i,DESCRIPTORS$2$1=descriptors$1,SPECIES$3=wellKnownSymbol$a$1("species"),setSpecies$1$1=function(o){var a=getBuiltIn$3$1(o),c=definePropertyModule$1$1.f;DESCRIPTORS$2$1&&a&&!a[SPECIES$3]&&c(a,SPECIES$3,{configurable:!0,get:function(){return this}})},isPrototypeOf$1$1=objectIsPrototypeOf$1,$TypeError$5$1=TypeError,anInstance$3=function(o,a){if(isPrototypeOf$1$1(a,o))return o;throw $TypeError$5$1("Incorrect invocation")},uncurryThis$a$1=functionUncurryThis$1,fails$7$1=fails$k,isCallable$7$1=isCallable$n,classof$3$1=classof$6$1,getBuiltIn$2$1=getBuiltIn$8$1,inspectSource$1$1=inspectSource$4$1,noop$1=function(){},empty$1=[],construct$1=getBuiltIn$2$1("Reflect","construct"),constructorRegExp$1=/^\s*(?:class|function)\b/,exec$3=uncurryThis$a$1(constructorRegExp$1.exec),INCORRECT_TO_STRING$1=!constructorRegExp$1.exec(noop$1),isConstructorModern$1=function o(a){if(!isCallable$7$1(a))return!1;try{return construct$1(noop$1,empty$1,a),!0}catch{return!1}},isConstructorLegacy$1=function o(a){if(!isCallable$7$1(a))return!1;switch(classof$3$1(a)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return INCORRECT_TO_STRING$1||!!exec$3(constructorRegExp$1,inspectSource$1$1(a))}catch{return!0}};isConstructorLegacy$1.sham=!0;var isConstructor$2=!construct$1||fails$7$1(function(){var o;return isConstructorModern$1(isConstructorModern$1.call)||!isConstructorModern$1(Object)||!isConstructorModern$1(function(){o=!0})||o})?isConstructorLegacy$1:isConstructorModern$1,isConstructor$1$1=isConstructor$2,tryToString$2$1=tryToString$4$1,$TypeError$4$1=TypeError,aConstructor$1$1=function(o){if(isConstructor$1$1(o))return o;throw $TypeError$4$1(tryToString$2$1(o)+" is not a constructor")},anObject$8$1=anObject$g,aConstructor$2=aConstructor$1$1,wellKnownSymbol$9$1=wellKnownSymbol$i,SPECIES$2$1=wellKnownSymbol$9$1("species"),speciesConstructor$1$1=function(o,a){var c=anObject$8$1(o).constructor,d;return c===void 0||(d=anObject$8$1(c)[SPECIES$2$1])==null?a:aConstructor$2(d)},NATIVE_BIND$1$1=functionBindNative$1,FunctionPrototype$3=Function.prototype,apply$2=FunctionPrototype$3.apply,call$c$1=FunctionPrototype$3.call,functionApply$1=typeof Reflect=="object"&&Reflect.apply||(NATIVE_BIND$1$1?call$c$1.bind(apply$2):function(){return call$c$1.apply(apply$2,arguments)}),uncurryThis$9$1=functionUncurryThis$1,aCallable$5$1=aCallable$7$1,NATIVE_BIND$4=functionBindNative$1,bind$7=uncurryThis$9$1(uncurryThis$9$1.bind),functionBindContext$1=function(o,a){return aCallable$5$1(o),a===void 0?o:NATIVE_BIND$4?bind$7(o,a):function(){return o.apply(a,arguments)}},uncurryThis$8$1=functionUncurryThis$1,arraySlice$3=uncurryThis$8$1([].slice),$TypeError$3$1=TypeError,validateArgumentsLength$3=function(o,a){if(o=51&&/native code/.test(o))return!1;var c=new NativePromiseConstructor$3$1(function(nt){nt(1)}),d=function(nt){nt(function(){},function(){})},tt=c.constructor={};return tt[SPECIES$1$1]=d,SUBCLASSING$1=c.then(function(){})instanceof d,SUBCLASSING$1?!a&&IS_BROWSER$2&&!NATIVE_PROMISE_REJECTION_EVENT$1$1:!0}),promiseConstructorDetection$1={CONSTRUCTOR:FORCED_PROMISE_CONSTRUCTOR$5$1,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT$1$1,SUBCLASSING:SUBCLASSING$1},newPromiseCapability$2$1={},aCallable$4$1=aCallable$7$1,PromiseCapability$1=function(o){var a,c;this.promise=new o(function(d,tt){if(a!==void 0||c!==void 0)throw TypeError("Bad Promise constructor");a=d,c=tt}),this.resolve=aCallable$4$1(a),this.reject=aCallable$4$1(c)};newPromiseCapability$2$1.f=function(o){return new PromiseCapability$1(o)};var $$8$1=_export$1,IS_NODE$4=engineIsNode$1,global$7$1=global$o,call$b$1=functionCall$1,defineBuiltIn$5$1=defineBuiltIn$a,setPrototypeOf$2=objectSetPrototypeOf$1,setToStringTag$2$1=setToStringTag$5,setSpecies$2=setSpecies$1$1,aCallable$3$1=aCallable$7$1,isCallable$4$1=isCallable$n,isObject$2$2=isObject$8$1,anInstance$2=anInstance$3,speciesConstructor$2=speciesConstructor$1$1,task$2=task$1$1.set,microtask$2=microtask$1$1,hostReportErrors$2=hostReportErrors$1$1,perform$2$1=perform$3$1,Queue$2=queue$2,InternalStateModule$3=internalState$1,NativePromiseConstructor$2$1=promiseNativeConstructor$1,PromiseConstructorDetection$1=promiseConstructorDetection$1,newPromiseCapabilityModule$3$1=newPromiseCapability$2$1,PROMISE$1="Promise",FORCED_PROMISE_CONSTRUCTOR$4$1=PromiseConstructorDetection$1.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT$2=PromiseConstructorDetection$1.REJECTION_EVENT,NATIVE_PROMISE_SUBCLASSING$1=PromiseConstructorDetection$1.SUBCLASSING,getInternalPromiseState$1=InternalStateModule$3.getterFor(PROMISE$1),setInternalState$3=InternalStateModule$3.set,NativePromisePrototype$1$1=NativePromiseConstructor$2$1&&NativePromiseConstructor$2$1.prototype,PromiseConstructor$1=NativePromiseConstructor$2$1,PromisePrototype$1=NativePromisePrototype$1$1,TypeError$3=global$7$1.TypeError,document$1$1=global$7$1.document,process$4=global$7$1.process,newPromiseCapability$1$1=newPromiseCapabilityModule$3$1.f,newGenericPromiseCapability$1=newPromiseCapability$1$1,DISPATCH_EVENT$1=!!(document$1$1&&document$1$1.createEvent&&global$7$1.dispatchEvent),UNHANDLED_REJECTION$1="unhandledrejection",REJECTION_HANDLED$1="rejectionhandled",PENDING$1=0,FULFILLED$1=1,REJECTED$1=2,HANDLED$1=1,UNHANDLED$1=2,Internal$1,OwnPromiseCapability$1,PromiseWrapper$1,nativeThen$1,isThenable$1=function(o){var a;return isObject$2$2(o)&&isCallable$4$1(a=o.then)?a:!1},callReaction$1=function(o,a){var c=a.value,d=a.state==FULFILLED$1,tt=d?o.ok:o.fail,nt=o.resolve,$a=o.reject,Ys=o.domain,gu,xu,$u;try{tt?(d||(a.rejection===UNHANDLED$1&&onHandleUnhandled$1(a),a.rejection=HANDLED$1),tt===!0?gu=c:(Ys&&Ys.enter(),gu=tt(c),Ys&&(Ys.exit(),$u=!0)),gu===o.promise?$a(TypeError$3("Promise-chain cycle")):(xu=isThenable$1(gu))?call$b$1(xu,gu,nt,$a):nt(gu)):$a(c)}catch(Iu){Ys&&!$u&&Ys.exit(),$a(Iu)}},notify$2=function(o,a){o.notified||(o.notified=!0,microtask$2(function(){for(var c=o.reactions,d;d=c.get();)callReaction$1(d,o);o.notified=!1,a&&!o.rejection&&onUnhandled$1(o)}))},dispatchEvent$1=function(o,a,c){var d,tt;DISPATCH_EVENT$1?(d=document$1$1.createEvent("Event"),d.promise=a,d.reason=c,d.initEvent(o,!1,!0),global$7$1.dispatchEvent(d)):d={promise:a,reason:c},!NATIVE_PROMISE_REJECTION_EVENT$2&&(tt=global$7$1["on"+o])?tt(d):o===UNHANDLED_REJECTION$1&&hostReportErrors$2("Unhandled promise rejection",c)},onUnhandled$1=function(o){call$b$1(task$2,global$7$1,function(){var a=o.facade,c=o.value,d=isUnhandled$1(o),tt;if(d&&(tt=perform$2$1(function(){IS_NODE$4?process$4.emit("unhandledRejection",c,a):dispatchEvent$1(UNHANDLED_REJECTION$1,a,c)}),o.rejection=IS_NODE$4||isUnhandled$1(o)?UNHANDLED$1:HANDLED$1,tt.error))throw tt.value})},isUnhandled$1=function(o){return o.rejection!==HANDLED$1&&!o.parent},onHandleUnhandled$1=function(o){call$b$1(task$2,global$7$1,function(){var a=o.facade;IS_NODE$4?process$4.emit("rejectionHandled",a):dispatchEvent$1(REJECTION_HANDLED$1,a,o.value)})},bind$4$1=function(o,a,c){return function(d){o(a,d,c)}},internalReject$1=function(o,a,c){o.done||(o.done=!0,c&&(o=c),o.value=a,o.state=REJECTED$1,notify$2(o,!0))},internalResolve$1=function(o,a,c){if(!o.done){o.done=!0,c&&(o=c);try{if(o.facade===a)throw TypeError$3("Promise can't be resolved itself");var d=isThenable$1(a);d?microtask$2(function(){var tt={done:!1};try{call$b$1(d,a,bind$4$1(internalResolve$1,tt,o),bind$4$1(internalReject$1,tt,o))}catch(nt){internalReject$1(tt,nt,o)}}):(o.value=a,o.state=FULFILLED$1,notify$2(o,!1))}catch(tt){internalReject$1({done:!1},tt,o)}}};if(FORCED_PROMISE_CONSTRUCTOR$4$1&&(PromiseConstructor$1=function(a){anInstance$2(this,PromisePrototype$1),aCallable$3$1(a),call$b$1(Internal$1,this);var c=getInternalPromiseState$1(this);try{a(bind$4$1(internalResolve$1,c),bind$4$1(internalReject$1,c))}catch(d){internalReject$1(c,d)}},PromisePrototype$1=PromiseConstructor$1.prototype,Internal$1=function(a){setInternalState$3(this,{type:PROMISE$1,done:!1,notified:!1,parent:!1,reactions:new Queue$2,rejection:!1,state:PENDING$1,value:void 0})},Internal$1.prototype=defineBuiltIn$5$1(PromisePrototype$1,"then",function(a,c){var d=getInternalPromiseState$1(this),tt=newPromiseCapability$1$1(speciesConstructor$2(this,PromiseConstructor$1));return d.parent=!0,tt.ok=isCallable$4$1(a)?a:!0,tt.fail=isCallable$4$1(c)&&c,tt.domain=IS_NODE$4?process$4.domain:void 0,d.state==PENDING$1?d.reactions.add(tt):microtask$2(function(){callReaction$1(tt,d)}),tt.promise}),OwnPromiseCapability$1=function(){var o=new Internal$1,a=getInternalPromiseState$1(o);this.promise=o,this.resolve=bind$4$1(internalResolve$1,a),this.reject=bind$4$1(internalReject$1,a)},newPromiseCapabilityModule$3$1.f=newPromiseCapability$1$1=function(o){return o===PromiseConstructor$1||o===PromiseWrapper$1?new OwnPromiseCapability$1(o):newGenericPromiseCapability$1(o)},isCallable$4$1(NativePromiseConstructor$2$1)&&NativePromisePrototype$1$1!==Object.prototype)){nativeThen$1=NativePromisePrototype$1$1.then,NATIVE_PROMISE_SUBCLASSING$1||defineBuiltIn$5$1(NativePromisePrototype$1$1,"then",function(a,c){var d=this;return new PromiseConstructor$1(function(tt,nt){call$b$1(nativeThen$1,d,tt,nt)}).then(a,c)},{unsafe:!0});try{delete NativePromisePrototype$1$1.constructor}catch{}setPrototypeOf$2&&setPrototypeOf$2(NativePromisePrototype$1$1,PromisePrototype$1)}$$8$1({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR$4$1},{Promise:PromiseConstructor$1});setToStringTag$2$1(PromiseConstructor$1,PROMISE$1,!1);setSpecies$2(PROMISE$1);var wellKnownSymbol$7$1=wellKnownSymbol$i,Iterators$1$1=iterators$1,ITERATOR$5$1=wellKnownSymbol$7$1("iterator"),ArrayPrototype$2=Array.prototype,isArrayIteratorMethod$2=function(o){return o!==void 0&&(Iterators$1$1.Array===o||ArrayPrototype$2[ITERATOR$5$1]===o)},classof$2$1=classof$6$1,getMethod$2$1=getMethod$4,Iterators$5=iterators$1,wellKnownSymbol$6$1=wellKnownSymbol$i,ITERATOR$4$1=wellKnownSymbol$6$1("iterator"),getIteratorMethod$4=function(o){if(o!=null)return getMethod$2$1(o,ITERATOR$4$1)||getMethod$2$1(o,"@@iterator")||Iterators$5[classof$2$1(o)]},call$a$1=functionCall$1,aCallable$2$1=aCallable$7$1,anObject$7$1=anObject$g,tryToString$1$1=tryToString$4$1,getIteratorMethod$3=getIteratorMethod$4,$TypeError$2$1=TypeError,getIterator$3=function(o,a){var c=arguments.length<2?getIteratorMethod$3(o):a;if(aCallable$2$1(c))return anObject$7$1(call$a$1(c,o));throw $TypeError$2$1(tryToString$1$1(o)+" is not iterable")},call$9$1=functionCall$1,anObject$6$1=anObject$g,getMethod$1$1=getMethod$4,iteratorClose$2=function(o,a,c){var d,tt;anObject$6$1(o);try{if(d=getMethod$1$1(o,"return"),!d){if(a==="throw")throw c;return c}d=call$9$1(d,o)}catch(nt){tt=!0,d=nt}if(a==="throw")throw c;if(tt)throw d;return anObject$6$1(d),c},bind$3$1=functionBindContext$1,call$8$1=functionCall$1,anObject$5$1=anObject$g,tryToString$6=tryToString$4$1,isArrayIteratorMethod$1$1=isArrayIteratorMethod$2,lengthOfArrayLike$2$1=lengthOfArrayLike$4$1,isPrototypeOf$5=objectIsPrototypeOf$1,getIterator$2=getIterator$3,getIteratorMethod$2$1=getIteratorMethod$4,iteratorClose$1$1=iteratorClose$2,$TypeError$1$1=TypeError,Result$1=function(o,a){this.stopped=o,this.result=a},ResultPrototype$1=Result$1.prototype,iterate$2$1=function(o,a,c){var d=c&&c.that,tt=!!(c&&c.AS_ENTRIES),nt=!!(c&&c.IS_ITERATOR),$a=!!(c&&c.INTERRUPTED),Ys=bind$3$1(a,d),gu,xu,$u,Iu,Xu,i0,p0,w0=function($0){return gu&&iteratorClose$1$1(gu,"normal",$0),new Result$1(!0,$0)},A0=function($0){return tt?(anObject$5$1($0),$a?Ys($0[0],$0[1],w0):Ys($0[0],$0[1])):$a?Ys($0,w0):Ys($0)};if(nt)gu=o;else{if(xu=getIteratorMethod$2$1(o),!xu)throw $TypeError$1$1(tryToString$6(o)+" is not iterable");if(isArrayIteratorMethod$1$1(xu)){for($u=0,Iu=lengthOfArrayLike$2$1(o);Iu>$u;$u++)if(Xu=A0(o[$u]),Xu&&isPrototypeOf$5(ResultPrototype$1,Xu))return Xu;return new Result$1(!1)}gu=getIterator$2(o,xu)}for(i0=gu.next;!(p0=call$8$1(i0,gu)).done;){try{Xu=A0(p0.value)}catch($0){iteratorClose$1$1(gu,"throw",$0)}if(typeof Xu=="object"&&Xu&&isPrototypeOf$5(ResultPrototype$1,Xu))return Xu}return new Result$1(!1)},wellKnownSymbol$5$1=wellKnownSymbol$i,ITERATOR$3$1=wellKnownSymbol$5$1("iterator"),SAFE_CLOSING$1=!1;try{var called$1=0,iteratorWithReturn$1={next:function(){return{done:!!called$1++}},return:function(){SAFE_CLOSING$1=!0}};iteratorWithReturn$1[ITERATOR$3$1]=function(){return this},Array.from(iteratorWithReturn$1,function(){throw 2})}catch(o){}var checkCorrectnessOfIteration$1$1=function(o,a){if(!a&&!SAFE_CLOSING$1)return!1;var c=!1;try{var d={};d[ITERATOR$3$1]=function(){return{next:function(){return{done:c=!0}}}},o(d)}catch{}return c},NativePromiseConstructor$1$1=promiseNativeConstructor$1,checkCorrectnessOfIteration$2=checkCorrectnessOfIteration$1$1,FORCED_PROMISE_CONSTRUCTOR$3$1=promiseConstructorDetection$1.CONSTRUCTOR,promiseStaticsIncorrectIteration$1=FORCED_PROMISE_CONSTRUCTOR$3$1||!checkCorrectnessOfIteration$2(function(o){NativePromiseConstructor$1$1.all(o).then(void 0,function(){})}),$$7$1=_export$1,call$7$1=functionCall$1,aCallable$1$1=aCallable$7$1,newPromiseCapabilityModule$2$1=newPromiseCapability$2$1,perform$1$1=perform$3$1,iterate$1$1=iterate$2$1,PROMISE_STATICS_INCORRECT_ITERATION$1$1=promiseStaticsIncorrectIteration$1;$$7$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$1$1},{all:function o(a){var c=this,d=newPromiseCapabilityModule$2$1.f(c),tt=d.resolve,nt=d.reject,$a=perform$1$1(function(){var Ys=aCallable$1$1(c.resolve),gu=[],xu=0,$u=1;iterate$1$1(a,function(Iu){var Xu=xu++,i0=!1;$u++,call$7$1(Ys,c,Iu).then(function(p0){i0||(i0=!0,gu[Xu]=p0,--$u||tt(gu))},nt)}),--$u||tt(gu)});return $a.error&&nt($a.value),d.promise}});var $$6$1=_export$1,FORCED_PROMISE_CONSTRUCTOR$2$1=promiseConstructorDetection$1.CONSTRUCTOR,NativePromiseConstructor$4=promiseNativeConstructor$1,getBuiltIn$1$1=getBuiltIn$8$1,isCallable$3$1=isCallable$n,defineBuiltIn$4$1=defineBuiltIn$a,NativePromisePrototype$2=NativePromiseConstructor$4&&NativePromiseConstructor$4.prototype;$$6$1({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR$2$1,real:!0},{catch:function(o){return this.then(void 0,o)}});if(isCallable$3$1(NativePromiseConstructor$4)){var method$1=getBuiltIn$1$1("Promise").prototype.catch;NativePromisePrototype$2.catch!==method$1&&defineBuiltIn$4$1(NativePromisePrototype$2,"catch",method$1,{unsafe:!0})}var $$5$1=_export$1,call$6$1=functionCall$1,aCallable$a=aCallable$7$1,newPromiseCapabilityModule$1$1=newPromiseCapability$2$1,perform$4=perform$3$1,iterate$3=iterate$2$1,PROMISE_STATICS_INCORRECT_ITERATION$2=promiseStaticsIncorrectIteration$1;$$5$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$2},{race:function o(a){var c=this,d=newPromiseCapabilityModule$1$1.f(c),tt=d.reject,nt=perform$4(function(){var $a=aCallable$a(c.resolve);iterate$3(a,function(Ys){call$6$1($a,c,Ys).then(d.resolve,tt)})});return nt.error&&tt(nt.value),d.promise}});var $$4$1=_export$1,call$5$1=functionCall$1,newPromiseCapabilityModule$4=newPromiseCapability$2$1,FORCED_PROMISE_CONSTRUCTOR$1$1=promiseConstructorDetection$1.CONSTRUCTOR;$$4$1({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$1$1},{reject:function o(a){var c=newPromiseCapabilityModule$4.f(this);return call$5$1(c.reject,void 0,a),c.promise}});var anObject$4$1=anObject$g,isObject$1$2=isObject$8$1,newPromiseCapability$3=newPromiseCapability$2$1,promiseResolve$1$1=function(o,a){if(anObject$4$1(o),isObject$1$2(a)&&a.constructor===o)return a;var c=newPromiseCapability$3.f(o),d=c.resolve;return d(a),c.promise},$$3$1=_export$1,getBuiltIn$9=getBuiltIn$8$1,FORCED_PROMISE_CONSTRUCTOR$6=promiseConstructorDetection$1.CONSTRUCTOR,promiseResolve$2=promiseResolve$1$1;getBuiltIn$9("Promise");$$3$1({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$6},{resolve:function o(a){return promiseResolve$2(this,a)}});var domIterables$1={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},documentCreateElement$3=documentCreateElement$2$1,classList$1=documentCreateElement$3("span").classList,DOMTokenListPrototype$1$1=classList$1&&classList$1.constructor&&classList$1.constructor.prototype,domTokenListPrototype$1=DOMTokenListPrototype$1$1===Object.prototype?void 0:DOMTokenListPrototype$1$1,global$6$1=global$o,DOMIterables$1=domIterables$1,DOMTokenListPrototype$2=domTokenListPrototype$1,ArrayIteratorMethods$1=es_array_iterator$1,createNonEnumerableProperty$1$1=createNonEnumerableProperty$5,wellKnownSymbol$4$1=wellKnownSymbol$i,ITERATOR$2$1=wellKnownSymbol$4$1("iterator"),TO_STRING_TAG$4=wellKnownSymbol$4$1("toStringTag"),ArrayValues$1=ArrayIteratorMethods$1.values,handlePrototype$1=function(o,a){if(o){if(o[ITERATOR$2$1]!==ArrayValues$1)try{createNonEnumerableProperty$1$1(o,ITERATOR$2$1,ArrayValues$1)}catch{o[ITERATOR$2$1]=ArrayValues$1}if(o[TO_STRING_TAG$4]||createNonEnumerableProperty$1$1(o,TO_STRING_TAG$4,a),DOMIterables$1[a]){for(var c in ArrayIteratorMethods$1)if(o[c]!==ArrayIteratorMethods$1[c])try{createNonEnumerableProperty$1$1(o,c,ArrayIteratorMethods$1[c])}catch{o[c]=ArrayIteratorMethods$1[c]}}}};for(var COLLECTION_NAME$1 in DOMIterables$1)handlePrototype$1(global$6$1[COLLECTION_NAME$1]&&global$6$1[COLLECTION_NAME$1].prototype,COLLECTION_NAME$1);handlePrototype$1(DOMTokenListPrototype$2,"DOMTokenList");var uncurryThis$7$1=functionUncurryThis$1,toIntegerOrInfinity$1$1=toIntegerOrInfinity$4,toString$3$1=toString$4$1,requireObjectCoercible$1$1=requireObjectCoercible$4,charAt$6=uncurryThis$7$1("".charAt),charCodeAt$1=uncurryThis$7$1("".charCodeAt),stringSlice$5=uncurryThis$7$1("".slice),createMethod$2=function(o){return function(a,c){var d=toString$3$1(requireObjectCoercible$1$1(a)),tt=toIntegerOrInfinity$1$1(c),nt=d.length,$a,Ys;return tt<0||tt>=nt?o?"":void 0:($a=charCodeAt$1(d,tt),$a<55296||$a>56319||tt+1===nt||(Ys=charCodeAt$1(d,tt+1))<56320||Ys>57343?o?charAt$6(d,tt):$a:o?stringSlice$5(d,tt,tt+2):($a-55296<<10)+(Ys-56320)+65536)}},stringMultibyte={codeAt:createMethod$2(!1),charAt:createMethod$2(!0)},charAt$5=stringMultibyte.charAt,toString$2$2=toString$4$1,InternalStateModule$2$1=internalState$1,defineIterator$3=defineIterator$2,STRING_ITERATOR="String Iterator",setInternalState$2=InternalStateModule$2$1.set,getInternalState$1$1=InternalStateModule$2$1.getterFor(STRING_ITERATOR);defineIterator$3(String,"String",function(o){setInternalState$2(this,{type:STRING_ITERATOR,string:toString$2$2(o),index:0})},function o(){var a=getInternalState$1$1(this),c=a.string,d=a.index,tt;return d>=c.length?{value:void 0,done:!0}:(tt=charAt$5(c,d),a.index+=tt.length,{value:tt,done:!1})});var fails$5$1=fails$k,wellKnownSymbol$3$1=wellKnownSymbol$i,IS_PURE=isPure,ITERATOR$1$1=wellKnownSymbol$3$1("iterator"),nativeUrl=!fails$5$1(function(){var o=new URL("b?a=1&b=2&c=3","http://a"),a=o.searchParams,c="";return o.pathname="c%20d",a.forEach(function(d,tt){a.delete("b"),c+=tt+d}),IS_PURE&&!o.toJSON||!a.sort||o.href!=="http://a/c%20d?a=1&c=3"||a.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!a[ITERATOR$1$1]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("http://тест").host!=="xn--e1aybc"||new URL("http://a#б").hash!=="#%D0%B1"||c!=="a1c3"||new URL("http://x",void 0).host!=="x"}),makeBuiltIn$4=makeBuiltIn$3.exports,defineProperty$7=objectDefineProperty$1,defineBuiltInAccessor$1=function(o,a,c){return c.get&&makeBuiltIn$4(c.get,a,{getter:!0}),c.set&&makeBuiltIn$4(c.set,a,{setter:!0}),defineProperty$7.f(o,a,c)},anObject$3$1=anObject$g,iteratorClose$3=iteratorClose$2,callWithSafeIterationClosing$1=function(o,a,c,d){try{return d?a(anObject$3$1(c)[0],c[1]):a(c)}catch(tt){iteratorClose$3(o,"throw",tt)}},toPropertyKey$4=toPropertyKey$3$1,definePropertyModule$6=objectDefineProperty$1,createPropertyDescriptor$1$1=createPropertyDescriptor$5,createProperty$2=function(o,a,c){var d=toPropertyKey$4(a);d in o?definePropertyModule$6.f(o,d,createPropertyDescriptor$1$1(0,c)):o[d]=c},bind$2$1=functionBindContext$1,call$4$1=functionCall$1,toObject$1$1=toObject$5$1,callWithSafeIterationClosing=callWithSafeIterationClosing$1,isArrayIteratorMethod$3=isArrayIteratorMethod$2,isConstructor$3=isConstructor$2,lengthOfArrayLike$1$1=lengthOfArrayLike$4$1,createProperty$1$1=createProperty$2,getIterator$1$1=getIterator$3,getIteratorMethod$1$1=getIteratorMethod$4,$Array$1=Array,arrayFrom$1=function o(a){var c=toObject$1$1(a),d=isConstructor$3(this),tt=arguments.length,nt=tt>1?arguments[1]:void 0,$a=nt!==void 0;$a&&(nt=bind$2$1(nt,tt>2?arguments[2]:void 0));var Ys=getIteratorMethod$1$1(c),gu=0,xu,$u,Iu,Xu,i0,p0;if(Ys&&!(this===$Array$1&&isArrayIteratorMethod$3(Ys)))for(Xu=getIterator$1$1(c,Ys),i0=Xu.next,$u=d?new this:[];!(Iu=call$4$1(i0,Xu)).done;gu++)p0=$a?callWithSafeIterationClosing(Xu,nt,[Iu.value,gu],!0):Iu.value,createProperty$1$1($u,gu,p0);else for(xu=lengthOfArrayLike$1$1(c),$u=d?new this(xu):$Array$1(xu);xu>gu;gu++)p0=$a?nt(c[gu],gu):c[gu],createProperty$1$1($u,gu,p0);return $u.length=gu,$u},toAbsoluteIndex$3=toAbsoluteIndex$2$1,lengthOfArrayLike$6=lengthOfArrayLike$4$1,createProperty$3=createProperty$2,$Array$2=Array,max$1$1=Math.max,arraySliceSimple$1=function(o,a,c){for(var d=lengthOfArrayLike$6(o),tt=toAbsoluteIndex$3(a,d),nt=toAbsoluteIndex$3(c===void 0?d:c,d),$a=$Array$2(max$1$1(nt-tt,0)),Ys=0;tt=55296&&tt<=56319&&c>1,o+=floor$3(o/a);o>baseMinusTMin*tMax>>1;)o=floor$3(o/baseMinusTMin),d+=base;return floor$3(d+(baseMinusTMin+1)*o/(o+skew))},encode$1=function(o){var a=[];o=ucs2decode(o);var c=o.length,d=initialN,tt=0,nt=initialBias,$a,Ys;for($a=0;$a=d&&Ys<$u&&($u=Ys);var Iu=xu+1;if($u-d>floor$3((maxInt-tt)/Iu))throw $RangeError(OVERFLOW_ERROR);for(tt+=($u-d)*Iu,d=$u,$a=0;$amaxInt)throw $RangeError(OVERFLOW_ERROR);if(Ys==d){for(var Xu=tt,i0=base;;){var p0=i0<=nt?tMin:i0>=nt+tMax?tMax:i0-nt;if(Xu0;)o[nt]=o[--nt];nt!==d++&&(o[nt]=tt)}return o},merge$1=function(o,a,c,d){for(var tt=a.length,nt=c.length,$a=0,Ys=0;$a0?arguments[0]:void 0;setInternalState$1$1(this,new URLSearchParamsState(a))},URLSearchParamsPrototype=URLSearchParamsConstructor.prototype;defineBuiltIns(URLSearchParamsPrototype,{append:function o(a,c){validateArgumentsLength$1$1(arguments.length,2);var d=getInternalParamsState(this);push$2(d.entries,{key:$toString$1(a),value:$toString$1(c)}),d.updateURL()},delete:function(o){validateArgumentsLength$1$1(arguments.length,1);for(var a=getInternalParamsState(this),c=a.entries,d=$toString$1(o),tt=0;ttd.key?1:-1}),a.updateURL()},forEach:function o(a){for(var c=getInternalParamsState(this).entries,d=bind$1$1(a,arguments.length>1?arguments[1]:void 0),tt=0,nt;tt1?wrapRequestOptions(arguments[1]):{})}}),isCallable$2$1(NativeRequest)){var RequestConstructor=function(a){return anInstance$1$1(this,RequestPrototype),new NativeRequest(a,arguments.length>1?wrapRequestOptions(arguments[1]):{})};RequestPrototype.constructor=RequestConstructor,RequestConstructor.prototype=RequestPrototype,$$2$1({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:RequestConstructor})}}var web_urlSearchParams_constructor={URLSearchParams:URLSearchParamsConstructor,getState:getInternalParamsState},$$1$2=_export$1,DESCRIPTORS$d=descriptors$1,USE_NATIVE_URL=nativeUrl,global$4$1=global$o,bind$9=functionBindContext$1,uncurryThis$4$1=functionUncurryThis$1,defineBuiltIn$1$1=defineBuiltIn$a,defineBuiltInAccessor=defineBuiltInAccessor$1,anInstance$4=anInstance$3,hasOwn$d=hasOwnProperty_1$1,assign$2=objectAssign$1,arrayFrom=arrayFrom$1,arraySlice$4=arraySliceSimple$1,codeAt=stringMultibyte.codeAt,toASCII=stringPunycodeToAscii,$toString$3=toString$4$1,setToStringTag$6=setToStringTag$5,validateArgumentsLength$4=validateArgumentsLength$3,URLSearchParamsModule=web_urlSearchParams_constructor,InternalStateModule$6=internalState$1,setInternalState$5=InternalStateModule$6.set,getInternalURLState=InternalStateModule$6.getterFor("URL"),URLSearchParams$1=URLSearchParamsModule.URLSearchParams,getInternalSearchParamsState=URLSearchParamsModule.getState,NativeURL=global$4$1.URL,TypeError$1$1=global$4$1.TypeError,parseInt$1=global$4$1.parseInt,floor$1$1=Math.floor,pow$1=Math.pow,charAt$3=uncurryThis$4$1("".charAt),exec$1=uncurryThis$4$1(/./.exec),join$3=uncurryThis$4$1([].join),numberToString=uncurryThis$4$1(1 .toString),pop=uncurryThis$4$1([].pop),push$1$1=uncurryThis$4$1([].push),replace$2=uncurryThis$4$1("".replace),shift$2=uncurryThis$4$1([].shift),split$4=uncurryThis$4$1("".split),stringSlice$3=uncurryThis$4$1("".slice),toLowerCase=uncurryThis$4$1("".toLowerCase),unshift=uncurryThis$4$1([].unshift),INVALID_AUTHORITY="Invalid authority",INVALID_SCHEME="Invalid scheme",INVALID_HOST="Invalid host",INVALID_PORT="Invalid port",ALPHA=/[a-z]/i,ALPHANUMERIC=/[\d+-.a-z]/i,DIGIT=/\d/,HEX_START=/^0x/i,OCT=/^[0-7]+$/,DEC=/^\d+$/,HEX=/^[\da-f]+$/i,FORBIDDEN_HOST_CODE_POINT=/[\0\t\n\r #%/:<>?@[\\\]^|]/,FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT=/[\0\t\n\r #/:<>?@[\\\]^|]/,LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,TAB_AND_NEW_LINE=/[\t\n\r]/g,EOF,parseIPv4=function(o){var a=split$4(o,"."),c,d,tt,nt,$a,Ys,gu;if(a.length&&a[a.length-1]==""&&a.length--,c=a.length,c>4)return o;for(d=[],tt=0;tt1&&charAt$3(nt,0)=="0"&&($a=exec$1(HEX_START,nt)?16:8,nt=stringSlice$3(nt,$a==8?1:2)),nt==="")Ys=0;else{if(!exec$1($a==10?DEC:$a==8?OCT:HEX,nt))return o;Ys=parseInt$1(nt,$a)}push$1$1(d,Ys)}for(tt=0;tt=pow$1(256,5-c))return null}else if(Ys>255)return null;for(gu=pop(d),tt=0;tt6))return;for(Ys=0;Xu();){if(gu=null,Ys>0)if(Xu()=="."&&Ys<4)tt++;else return;if(!exec$1(DIGIT,Xu()))return;for(;exec$1(DIGIT,Xu());){if(xu=parseInt$1(Xu(),10),gu===null)gu=xu;else{if(gu==0)return;gu=gu*10+xu}if(gu>255)return;tt++}a[c]=a[c]*256+gu,Ys++,(Ys==2||Ys==4)&&c++}if(Ys!=4)return;break}else if(Xu()==":"){if(tt++,!Xu())return}else if(Xu())return;a[c++]=nt}if(d!==null)for($u=c-d,c=7;c!=0&&$u>0;)Iu=a[c],a[c--]=a[d+$u-1],a[d+--$u]=Iu;else if(c!=8)return;return a},findLongestZeroSequence=function(o){for(var a=null,c=1,d=null,tt=0,nt=0;nt<8;nt++)o[nt]!==0?(tt>c&&(a=d,c=tt),d=null,tt=0):(d===null&&(d=nt),++tt);return tt>c&&(a=d,c=tt),a},serializeHost=function(o){var a,c,d,tt;if(typeof o=="number"){for(a=[],c=0;c<4;c++)unshift(a,o%256),o=floor$1$1(o/256);return join$3(a,".")}else if(typeof o=="object"){for(a="",d=findLongestZeroSequence(o),c=0;c<8;c++)tt&&o[c]===0||(tt&&(tt=!1),d===c?(a+=c?":":"::",tt=!0):(a+=numberToString(o[c],16),c<7&&(a+=":")));return"["+a+"]"}return o},C0ControlPercentEncodeSet={},fragmentPercentEncodeSet=assign$2({},C0ControlPercentEncodeSet,{" ":1,'"':1,"<":1,">":1,"`":1}),pathPercentEncodeSet=assign$2({},fragmentPercentEncodeSet,{"#":1,"?":1,"{":1,"}":1}),userinfoPercentEncodeSet=assign$2({},pathPercentEncodeSet,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),percentEncode=function(o,a){var c=codeAt(o,0);return c>32&&c<127&&!hasOwn$d(a,o)?o:encodeURIComponent(o)},specialSchemes={ftp:21,file:null,http:80,https:443,ws:80,wss:443},isWindowsDriveLetter=function(o,a){var c;return o.length==2&&exec$1(ALPHA,charAt$3(o,0))&&((c=charAt$3(o,1))==":"||!a&&c=="|")},startsWithWindowsDriveLetter=function(o){var a;return o.length>1&&isWindowsDriveLetter(stringSlice$3(o,0,2))&&(o.length==2||(a=charAt$3(o,2))==="/"||a==="\\"||a==="?"||a==="#")},isSingleDot=function(o){return o==="."||toLowerCase(o)==="%2e"},isDoubleDot=function(o){return o=toLowerCase(o),o===".."||o==="%2e."||o===".%2e"||o==="%2e%2e"},SCHEME_START={},SCHEME={},NO_SCHEME={},SPECIAL_RELATIVE_OR_AUTHORITY={},PATH_OR_AUTHORITY={},RELATIVE={},RELATIVE_SLASH={},SPECIAL_AUTHORITY_SLASHES={},SPECIAL_AUTHORITY_IGNORE_SLASHES={},AUTHORITY={},HOST={},HOSTNAME={},PORT={},FILE={},FILE_SLASH={},FILE_HOST={},PATH_START={},PATH={},CANNOT_BE_A_BASE_URL_PATH={},QUERY={},FRAGMENT={},URLState=function(o,a,c){var d=$toString$3(o),tt,nt,$a;if(a){if(nt=this.parse(d),nt)throw TypeError$1$1(nt);this.searchParams=null}else{if(c!==void 0&&(tt=new URLState(c,!0)),nt=this.parse(d,null,tt),nt)throw TypeError$1$1(nt);$a=getInternalSearchParamsState(new URLSearchParams$1),$a.bindURL(this),this.searchParams=$a}};URLState.prototype={type:"URL",parse:function(o,a,c){var d=this,tt=a||SCHEME_START,nt=0,$a="",Ys=!1,gu=!1,xu=!1,$u,Iu,Xu,i0;for(o=$toString$3(o),a||(d.scheme="",d.username="",d.password="",d.host=null,d.port=null,d.path=[],d.query=null,d.fragment=null,d.cannotBeABaseURL=!1,o=replace$2(o,LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE,"")),o=replace$2(o,TAB_AND_NEW_LINE,""),$u=arrayFrom(o);nt<=$u.length;){switch(Iu=$u[nt],tt){case SCHEME_START:if(Iu&&exec$1(ALPHA,Iu))$a+=toLowerCase(Iu),tt=SCHEME;else{if(a)return INVALID_SCHEME;tt=NO_SCHEME;continue}break;case SCHEME:if(Iu&&(exec$1(ALPHANUMERIC,Iu)||Iu=="+"||Iu=="-"||Iu=="."))$a+=toLowerCase(Iu);else if(Iu==":"){if(a&&(d.isSpecial()!=hasOwn$d(specialSchemes,$a)||$a=="file"&&(d.includesCredentials()||d.port!==null)||d.scheme=="file"&&!d.host))return;if(d.scheme=$a,a){d.isSpecial()&&specialSchemes[d.scheme]==d.port&&(d.port=null);return}$a="",d.scheme=="file"?tt=FILE:d.isSpecial()&&c&&c.scheme==d.scheme?tt=SPECIAL_RELATIVE_OR_AUTHORITY:d.isSpecial()?tt=SPECIAL_AUTHORITY_SLASHES:$u[nt+1]=="/"?(tt=PATH_OR_AUTHORITY,nt++):(d.cannotBeABaseURL=!0,push$1$1(d.path,""),tt=CANNOT_BE_A_BASE_URL_PATH)}else{if(a)return INVALID_SCHEME;$a="",tt=NO_SCHEME,nt=0;continue}break;case NO_SCHEME:if(!c||c.cannotBeABaseURL&&Iu!="#")return INVALID_SCHEME;if(c.cannotBeABaseURL&&Iu=="#"){d.scheme=c.scheme,d.path=arraySlice$4(c.path),d.query=c.query,d.fragment="",d.cannotBeABaseURL=!0,tt=FRAGMENT;break}tt=c.scheme=="file"?FILE:RELATIVE;continue;case SPECIAL_RELATIVE_OR_AUTHORITY:if(Iu=="/"&&$u[nt+1]=="/")tt=SPECIAL_AUTHORITY_IGNORE_SLASHES,nt++;else{tt=RELATIVE;continue}break;case PATH_OR_AUTHORITY:if(Iu=="/"){tt=AUTHORITY;break}else{tt=PATH;continue}case RELATIVE:if(d.scheme=c.scheme,Iu==EOF)d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.query=c.query;else if(Iu=="/"||Iu=="\\"&&d.isSpecial())tt=RELATIVE_SLASH;else if(Iu=="?")d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.query="",tt=QUERY;else if(Iu=="#")d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.query=c.query,d.fragment="",tt=FRAGMENT;else{d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.path.length--,tt=PATH;continue}break;case RELATIVE_SLASH:if(d.isSpecial()&&(Iu=="/"||Iu=="\\"))tt=SPECIAL_AUTHORITY_IGNORE_SLASHES;else if(Iu=="/")tt=AUTHORITY;else{d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,tt=PATH;continue}break;case SPECIAL_AUTHORITY_SLASHES:if(tt=SPECIAL_AUTHORITY_IGNORE_SLASHES,Iu!="/"||charAt$3($a,nt+1)!="/")continue;nt++;break;case SPECIAL_AUTHORITY_IGNORE_SLASHES:if(Iu!="/"&&Iu!="\\"){tt=AUTHORITY;continue}break;case AUTHORITY:if(Iu=="@"){Ys&&($a="%40"+$a),Ys=!0,Xu=arrayFrom($a);for(var p0=0;p065535)return INVALID_PORT;d.port=d.isSpecial()&&$0===specialSchemes[d.scheme]?null:$0,$a=""}if(a)return;tt=PATH_START;continue}else return INVALID_PORT;break;case FILE:if(d.scheme="file",Iu=="/"||Iu=="\\")tt=FILE_SLASH;else if(c&&c.scheme=="file")if(Iu==EOF)d.host=c.host,d.path=arraySlice$4(c.path),d.query=c.query;else if(Iu=="?")d.host=c.host,d.path=arraySlice$4(c.path),d.query="",tt=QUERY;else if(Iu=="#")d.host=c.host,d.path=arraySlice$4(c.path),d.query=c.query,d.fragment="",tt=FRAGMENT;else{startsWithWindowsDriveLetter(join$3(arraySlice$4($u,nt),""))||(d.host=c.host,d.path=arraySlice$4(c.path),d.shortenPath()),tt=PATH;continue}else{tt=PATH;continue}break;case FILE_SLASH:if(Iu=="/"||Iu=="\\"){tt=FILE_HOST;break}c&&c.scheme=="file"&&!startsWithWindowsDriveLetter(join$3(arraySlice$4($u,nt),""))&&(isWindowsDriveLetter(c.path[0],!0)?push$1$1(d.path,c.path[0]):d.host=c.host),tt=PATH;continue;case FILE_HOST:if(Iu==EOF||Iu=="/"||Iu=="\\"||Iu=="?"||Iu=="#"){if(!a&&isWindowsDriveLetter($a))tt=PATH;else if($a==""){if(d.host="",a)return;tt=PATH_START}else{if(i0=d.parseHost($a),i0)return i0;if(d.host=="localhost"&&(d.host=""),a)return;$a="",tt=PATH_START}continue}else $a+=Iu;break;case PATH_START:if(d.isSpecial()){if(tt=PATH,Iu!="/"&&Iu!="\\")continue}else if(!a&&Iu=="?")d.query="",tt=QUERY;else if(!a&&Iu=="#")d.fragment="",tt=FRAGMENT;else if(Iu!=EOF&&(tt=PATH,Iu!="/"))continue;break;case PATH:if(Iu==EOF||Iu=="/"||Iu=="\\"&&d.isSpecial()||!a&&(Iu=="?"||Iu=="#")){if(isDoubleDot($a)?(d.shortenPath(),Iu!="/"&&!(Iu=="\\"&&d.isSpecial())&&push$1$1(d.path,"")):isSingleDot($a)?Iu!="/"&&!(Iu=="\\"&&d.isSpecial())&&push$1$1(d.path,""):(d.scheme=="file"&&!d.path.length&&isWindowsDriveLetter($a)&&(d.host&&(d.host=""),$a=charAt$3($a,0)+":"),push$1$1(d.path,$a)),$a="",d.scheme=="file"&&(Iu==EOF||Iu=="?"||Iu=="#"))for(;d.path.length>1&&d.path[0]==="";)shift$2(d.path);Iu=="?"?(d.query="",tt=QUERY):Iu=="#"&&(d.fragment="",tt=FRAGMENT)}else $a+=percentEncode(Iu,pathPercentEncodeSet);break;case CANNOT_BE_A_BASE_URL_PATH:Iu=="?"?(d.query="",tt=QUERY):Iu=="#"?(d.fragment="",tt=FRAGMENT):Iu!=EOF&&(d.path[0]+=percentEncode(Iu,C0ControlPercentEncodeSet));break;case QUERY:!a&&Iu=="#"?(d.fragment="",tt=FRAGMENT):Iu!=EOF&&(Iu=="'"&&d.isSpecial()?d.query+="%27":Iu=="#"?d.query+="%23":d.query+=percentEncode(Iu,C0ControlPercentEncodeSet));break;case FRAGMENT:Iu!=EOF&&(d.fragment+=percentEncode(Iu,fragmentPercentEncodeSet));break}nt++}},parseHost:function(o){var a,c,d;if(charAt$3(o,0)=="["){if(charAt$3(o,o.length-1)!="]"||(a=parseIPv6(stringSlice$3(o,1,-1)),!a))return INVALID_HOST;this.host=a}else if(this.isSpecial()){if(o=toASCII(o),exec$1(FORBIDDEN_HOST_CODE_POINT,o)||(a=parseIPv4(o),a===null))return INVALID_HOST;this.host=a}else{if(exec$1(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT,o))return INVALID_HOST;for(a="",c=arrayFrom(o),d=0;d1?arguments[1]:void 0,tt=setInternalState$5(c,new URLState(a,!1,d));DESCRIPTORS$d||(c.href=tt.serialize(),c.origin=tt.getOrigin(),c.protocol=tt.getProtocol(),c.username=tt.getUsername(),c.password=tt.getPassword(),c.host=tt.getHost(),c.hostname=tt.getHostname(),c.port=tt.getPort(),c.pathname=tt.getPathname(),c.search=tt.getSearch(),c.searchParams=tt.getSearchParams(),c.hash=tt.getHash())},URLPrototype=URLConstructor.prototype,accessorDescriptor=function(o,a){return{get:function(){return getInternalURLState(this)[o]()},set:a&&function(c){return getInternalURLState(this)[a](c)},configurable:!0,enumerable:!0}};DESCRIPTORS$d&&(defineBuiltInAccessor(URLPrototype,"href",accessorDescriptor("serialize","setHref")),defineBuiltInAccessor(URLPrototype,"origin",accessorDescriptor("getOrigin")),defineBuiltInAccessor(URLPrototype,"protocol",accessorDescriptor("getProtocol","setProtocol")),defineBuiltInAccessor(URLPrototype,"username",accessorDescriptor("getUsername","setUsername")),defineBuiltInAccessor(URLPrototype,"password",accessorDescriptor("getPassword","setPassword")),defineBuiltInAccessor(URLPrototype,"host",accessorDescriptor("getHost","setHost")),defineBuiltInAccessor(URLPrototype,"hostname",accessorDescriptor("getHostname","setHostname")),defineBuiltInAccessor(URLPrototype,"port",accessorDescriptor("getPort","setPort")),defineBuiltInAccessor(URLPrototype,"pathname",accessorDescriptor("getPathname","setPathname")),defineBuiltInAccessor(URLPrototype,"search",accessorDescriptor("getSearch","setSearch")),defineBuiltInAccessor(URLPrototype,"searchParams",accessorDescriptor("getSearchParams")),defineBuiltInAccessor(URLPrototype,"hash",accessorDescriptor("getHash","setHash")));defineBuiltIn$1$1(URLPrototype,"toJSON",function o(){return getInternalURLState(this).serialize()},{enumerable:!0});defineBuiltIn$1$1(URLPrototype,"toString",function o(){return getInternalURLState(this).serialize()},{enumerable:!0});if(NativeURL){var nativeCreateObjectURL=NativeURL.createObjectURL,nativeRevokeObjectURL=NativeURL.revokeObjectURL;nativeCreateObjectURL&&defineBuiltIn$1$1(URLConstructor,"createObjectURL",bind$9(nativeCreateObjectURL,NativeURL)),nativeRevokeObjectURL&&defineBuiltIn$1$1(URLConstructor,"revokeObjectURL",bind$9(nativeRevokeObjectURL,NativeURL))}setToStringTag$6(URLConstructor,"URL");$$1$2({global:!0,constructor:!0,forced:!USE_NATIVE_URL,sham:!DESCRIPTORS$d},{URL:URLConstructor});var fails$4$1=fails$k,global$3$1=global$o,$RegExp$2=global$3$1.RegExp,UNSUPPORTED_Y$1=fails$4$1(function(){var o=$RegExp$2("a","y");return o.lastIndex=2,o.exec("abcd")!=null}),MISSED_STICKY=UNSUPPORTED_Y$1||fails$4$1(function(){return!$RegExp$2("a","y").sticky}),BROKEN_CARET=UNSUPPORTED_Y$1||fails$4$1(function(){var o=$RegExp$2("^r","gy");return o.lastIndex=2,o.exec("str")!=null}),regexpStickyHelpers={BROKEN_CARET,MISSED_STICKY,UNSUPPORTED_Y:UNSUPPORTED_Y$1},fails$3$1=fails$k,global$2$1=global$o,$RegExp$1=global$2$1.RegExp,regexpUnsupportedDotAll=fails$3$1(function(){var o=$RegExp$1(".","s");return!(o.dotAll&&o.exec(` -`)&&o.flags==="s")}),fails$2$1=fails$k,global$1$1=global$o,$RegExp=global$1$1.RegExp,regexpUnsupportedNcg=fails$2$1(function(){var o=$RegExp("(?b)","g");return o.exec("b").groups.a!=="b"||"b".replace(o,"$c")!=="bc"}),call$2$1=functionCall$1,uncurryThis$3$1=functionUncurryThis$1,toString$1$3=toString$4$1,regexpFlags$2=regexpFlags$1,stickyHelpers=regexpStickyHelpers,shared$5=shared$4.exports,create$4=objectCreate$1,getInternalState$4=internalState$1.get,UNSUPPORTED_DOT_ALL=regexpUnsupportedDotAll,UNSUPPORTED_NCG=regexpUnsupportedNcg,nativeReplace=shared$5("native-string-replace",String.prototype.replace),nativeExec=RegExp.prototype.exec,patchedExec=nativeExec,charAt$2=uncurryThis$3$1("".charAt),indexOf$2=uncurryThis$3$1("".indexOf),replace$1=uncurryThis$3$1("".replace),stringSlice$2=uncurryThis$3$1("".slice),UPDATES_LAST_INDEX_WRONG=function(){var o=/a/,a=/b*/g;return call$2$1(nativeExec,o,"a"),call$2$1(nativeExec,a,"a"),o.lastIndex!==0||a.lastIndex!==0}(),UNSUPPORTED_Y=stickyHelpers.BROKEN_CARET,NPCG_INCLUDED=/()??/.exec("")[1]!==void 0,PATCH=UPDATES_LAST_INDEX_WRONG||NPCG_INCLUDED||UNSUPPORTED_Y||UNSUPPORTED_DOT_ALL||UNSUPPORTED_NCG;PATCH&&(patchedExec=function(a){var c=this,d=getInternalState$4(c),tt=toString$1$3(a),nt=d.raw,$a,Ys,gu,xu,$u,Iu,Xu;if(nt)return nt.lastIndex=c.lastIndex,$a=call$2$1(patchedExec,nt,tt),c.lastIndex=nt.lastIndex,$a;var i0=d.groups,p0=UNSUPPORTED_Y&&c.sticky,w0=call$2$1(regexpFlags$2,c),A0=c.source,$0=0,O0=tt;if(p0&&(w0=replace$1(w0,"y",""),indexOf$2(w0,"g")===-1&&(w0+="g"),O0=stringSlice$2(tt,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&charAt$2(tt,c.lastIndex-1)!==` -`)&&(A0="(?: "+A0+")",O0=" "+O0,$0++),Ys=new RegExp("^(?:"+A0+")",w0)),NPCG_INCLUDED&&(Ys=new RegExp("^"+A0+"$(?!\\s)",w0)),UPDATES_LAST_INDEX_WRONG&&(gu=c.lastIndex),xu=call$2$1(nativeExec,p0?Ys:c,O0),p0?xu?(xu.input=stringSlice$2(xu.input,$0),xu[0]=stringSlice$2(xu[0],$0),xu.index=c.lastIndex,c.lastIndex+=xu[0].length):c.lastIndex=0:UPDATES_LAST_INDEX_WRONG&&xu&&(c.lastIndex=c.global?xu.index+xu[0].length:gu),NPCG_INCLUDED&&xu&&xu.length>1&&call$2$1(nativeReplace,xu[0],Ys,function(){for($u=1;$u]*>)/g,SUBSTITUTION_SYMBOLS_NO_NAMED=/\$([$&'`]|\d{1,2})/g,getSubstitution$1=function(o,a,c,d,tt,nt){var $a=c+o.length,Ys=d.length,gu=SUBSTITUTION_SYMBOLS_NO_NAMED;return tt!==void 0&&(tt=toObject$6(tt),gu=SUBSTITUTION_SYMBOLS),replace$5(nt,gu,function(xu,$u){var Iu;switch(charAt($u,0)){case"$":return"$";case"&":return o;case"`":return stringSlice$1$1(a,0,c);case"'":return stringSlice$1$1(a,$a);case"<":Iu=tt[stringSlice$1$1($u,1,-1)];break;default:var Xu=+$u;if(Xu===0)return xu;if(Xu>Ys){var i0=floor$5(Xu/10);return i0===0?xu:i0<=Ys?d[i0-1]===void 0?charAt($u,1):d[i0-1]+charAt($u,1):xu}Iu=d[Xu-1]}return Iu===void 0?"":Iu})},call$1$1=functionCall$1,anObject$1$1=anObject$g,isCallable$1$1=isCallable$n,classof$8=classofRaw$1$1,regexpExec=regexpExec$2,$TypeError$f=TypeError,regexpExecAbstract=function(o,a){var c=o.exec;if(isCallable$1$1(c)){var d=call$1$1(c,o,a);return d!==null&&anObject$1$1(d),d}if(classof$8(o)==="RegExp")return call$1$1(regexpExec,o,a);throw $TypeError$f("RegExp#exec called on incompatible receiver")},apply$3=functionApply$1,call$l=functionCall$1,uncurryThis$n=functionUncurryThis$1,fixRegExpWellKnownSymbolLogic=fixRegexpWellKnownSymbolLogic,fails$l=fails$k,anObject$h=anObject$g,isCallable$o=isCallable$n,toIntegerOrInfinity$5=toIntegerOrInfinity$4,toLength$3=toLength$2,toString$7=toString$4$1,requireObjectCoercible$5=requireObjectCoercible$4,advanceStringIndex=advanceStringIndex$1,getMethod$5=getMethod$4,getSubstitution=getSubstitution$1,regExpExec=regexpExecAbstract,wellKnownSymbol$j=wellKnownSymbol$i,REPLACE=wellKnownSymbol$j("replace"),max$3=Math.max,min$3=Math.min,concat$3=uncurryThis$n([].concat),push$5=uncurryThis$n([].push),stringIndexOf$1=uncurryThis$n("".indexOf),stringSlice$7=uncurryThis$n("".slice),maybeToString=function(o){return o===void 0?o:String(o)},REPLACE_KEEPS_$0=function(){return"a".replace(/./,"$0")==="$0"}(),REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE=function(){return/./[REPLACE]?/./[REPLACE]("a","$0")==="":!1}(),REPLACE_SUPPORTS_NAMED_GROUPS=!fails$l(function(){var o=/./;return o.exec=function(){var a=[];return a.groups={a:"7"},a},"".replace(o,"$")!=="7"});fixRegExpWellKnownSymbolLogic("replace",function(o,a,c){var d=REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE?"$":"$0";return[function(nt,$a){var Ys=requireObjectCoercible$5(this),gu=nt==null?void 0:getMethod$5(nt,REPLACE);return gu?call$l(gu,nt,Ys,$a):call$l(a,toString$7(Ys),nt,$a)},function(tt,nt){var $a=anObject$h(this),Ys=toString$7(tt);if(typeof nt=="string"&&stringIndexOf$1(nt,d)===-1&&stringIndexOf$1(nt,"$<")===-1){var gu=c(a,$a,Ys,nt);if(gu.done)return gu.value}var xu=isCallable$o(nt);xu||(nt=toString$7(nt));var $u=$a.global;if($u){var Iu=$a.unicode;$a.lastIndex=0}for(var Xu=[];;){var i0=regExpExec($a,Ys);if(i0===null||(push$5(Xu,i0),!$u))break;var p0=toString$7(i0[0]);p0===""&&($a.lastIndex=advanceStringIndex(Ys,toLength$3($a.lastIndex),Iu))}for(var w0="",A0=0,$0=0;$0=A0&&(w0+=stringSlice$7(Ys,A0,L0)+E1,A0=L0+O0.length)}return w0+stringSlice$7(Ys,A0)}]},!REPLACE_SUPPORTS_NAMED_GROUPS||!REPLACE_KEEPS_$0||REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);function __awaiter$1(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ys($u){try{xu(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{xu(d.throw($u))}catch(Iu){$a(Iu)}}function xu($u){$u.done?nt($u.value):tt($u.value).then(Ys,gu)}xu((d=d.apply(o,[])).next())})}typeof SuppressedError=="function"&&SuppressedError;var icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAD8UExURUdwTGx5rpLO8YOYx1Og0ly29X5ezR4mT0tiji4eWJ953KGn1Jxs7qB9xvfD/Us0gduu8yeh4HOq74dD647R91256eSz+j82cbvg/dSj/LuL79Wp6zCf24KN9xANGRANF59d/0W+/taa/8iN/3HL9uOn/z638Bil7l3G84TP+FHB8o5A/0i9/ZjU+47S+vq8/4Qy/S6w8O+x/5Rp/wyg7G2T/s+T/vO2/+qt/1qp/qDV/HyD/ki4+4R7/qnY/tyh/1Gx/ptU/76E/2bJ9Ld8/4t0/pxe+XvN9iOq7rB0/0i88aRk/6ps/z++/naL/mab/mGh/pVM/wub5mGd+fAEOhEAAAAgdFJOUwBEyWKA47EKJhnFluGA6l3H67Du6crdNOXs5q/I65rcQbfB9AAAIABJREFUeNrsnE9r4zoXxidOG9tNQqBvSrLKeKGF7WIz4J0WgSCuDc1s7vf/Mq/+S0d2p7Zkd7i0SsZJh3th+PGcR4+OpP748T3+4yNODofDKY2/SYxgdbhcfl4ul9M3rY9ZpZefbFwu6TeMD8dJwPp5Sb6l9eFIL5zW5TDoWrEc35wEjtOFDWPxjE2aJMkqWa3W6/WevuigPyVJ+tWngTg+HQ58PmSDQlqvt5Eax+jIBv2UY7umyL6u0JiMBK6DpETp4KqmL/ngX9hnwcEJYl8TGIV1EpzOEaNUCUBqFPwPfRX0W8GfFSPGgX255JCcTpwUByVY1WAU/FHwLxRWV3RdIYGtvhIvKqoVI0WriwoGK1CDvLi8JDouse5L8YqT08M2Op+vVFOYl54wJ+5PkppkJUkJZYlipN9RV1Ne69UXmCOT0zY6Xq+4Kip7GEYGmKZVyNF1ghj9whx//ZfltXQYTE/b8xnTUeFr1R82Lm7vwuPh6Cgz9jr+TVx8Mt+zcTgt0w6Ik310xIJVJXxdUaqgsIzH1w6tjlekxrVdpX/FSlb7zW63a+lrt3vazG8JFiqHVa2ewOQLlR70W1oX58XlhSiv7aerKz4xUvd7Rse9pWO32xxm/VfE6To64yt1KyEsgUt8ckT99GDsHUpL6oq9EaKT4+cWY5weNrvfbZtlNwqLfkpcM0o8XtFMhZlRUT7YYDLKEtmhsurQJNO6R0sEL0brk3FRWe3+ydpMDvblzpDtnvYz/SPihIYFzHRFYYE6xMazBnJWYTyrhsri4uqEfSESPX+WdcWnza7NbjemKyYpVob/Ml5Zu9vP0cmME1aBxZXDuSpdKWSGlK0qxUqteSxUphA7hLoOsednWVe8YiV4y34zTYkX9a4bhXejtbgJp8VQcVmJuDA4Gyp7d2K8TFn1oGnJWbEjqO5ywnLE5+iK8mGyEnbFlMV0dWO1GEyLmhWdA1kKrdiTG7y2duPvss3QWx1qVLVLSxZiJwRWdOQTxJXsd9qrGKvMHsznn4JocbNic6B5KWW5wlLMBmbDesjcOzN4KZLj0uKKD7tWcslcVIJgiLbi1fasSYk3p2WUJTsOdsqqHGVBw9I5q7BQcVp0XlxYXKdNa4Tlqkp8/uNNi0UrzupqawsLd8cYqqoXSkHOqu0ED5SF1AshQo1+tRyteM+F1RhGjXy0oiwZLU9txWwdKEhpTKIIjWv1pDUQHGpXW66uUGfTWi8WIk5Pd6Ao5VqNNDCGq7170WIx9IqFqq4iuXNUVyWr95RVDeYsSKqwPEvSkrgQLcXFhHW/STz8T2uqz9DKfHwrPVisMP/GSV0tZdkxvq6qgf6fzu+1hQsoC+mwRQd/Pi5kXOnmt+Jh53fH4mkG220m/gOSh0gpyuBSVVhhuNxRsbRfh+5sCH1LCqpjvNg39kHYrLiIcfEqZHwah5DzM8tbk2glbBbEVgHKqVANMxViJzvApWFd9wOWcng9FSrHQtLpaUJdgFa8euqHheExzeWptRuzMgqzgpaO8bClVVXuhoXSVT0kLCEtwUo+mG2hxwVoxetdNhYW09YkXUFQ3LIMJ1OJGPJyFoiqVVrD6K6VpSdCpS0xlqjEdD8a1hRa8fYs8DiuBUrRpSWF1e/+DbSzrCq0YpaaDjv2mJ9Wutll9w8xNWKGpLT242gl0fnDEsRDylKkqoF2Vu24FoxYcsGjypDQEa3npRVvRllWw8MXXWGPpJVE0bXvWCad2sLCfc9yZkSoqkI3suyljnQrrimOi+Q5mplWuhnp7zKqUm2lo6wQlqGqQygsteDBoAFfuWsdp1Oquu+82dBZyoKuRdhr3kqksMbSov8dja8jtZVsoyFlye6DrSwtLVxbydQA05hqW1qOZ1mrQ1GENGyxx7y0KKzbOFgNz6ajXT5xogO+2j0H4Fm2tNxeqZXgB5SF3JQFBnWtefPW2DJsVLRvR9KKk4GgpV1LSQv0HjDcwh8CpTfCQHPGWJampF1+zrw12rPElDghQXBa2PV3LFc9lrIwbCtbs2ExBMzOo9ZEqCtQUpLFmOfH59lW1emYAN+2rb1snEDrHWm56QE7uAZmQ1iInb3QkaTEgwhgiIgPNCetdNxqpzUmn4kexFhauOdbYDVtdwAr9zzb8JahyqSwCjtkS4vwwX/K82g7T38rnqgs9Rf30S5/xX9QlhO1avNyldVzeKejbKpQSosI46Jhi+Rzxa109DoajFs2ntYfpNWbEHstmrofsmQZFrD5Dk2LCJNnpkWBoXlMPh4Jq4ENG563vLTVC1qgDut+F75/5AiUIfR36er6Wy4URrp5bCsZBavpb2fcRva3+tqCMb7CTg+w6p8qfb8MkeblmpaweOZblFl5nKPRHHuW4fj+FshbeIgXPPBQgSNa8iwpnAjtIjTuToBpyaW0GvPYFlXWPYTWhDnRNJcx1rs8yrC0ZfWOO4CGA5gLkW1ZrJ2skAlBWQPl5CXctpiyfGG12ciVz0lWIjZLa6Osyj3XVtfvG5YmVViGZa11pGUREUpFepDSIjPYlqeyGtXfmpK3sNUAtGj1TmnB3p+7aWiON1jW3klJ6ToEwqKoaNp6iP8KrEa5/di8dbLnRNxrl1Z21JLLRJgd3MMzrrur7E6QeQBYpCRRMkPO8itDtbc4tmNzBgZvw3Kb8AM7PEJbmhXYMESgj0V0yDI1mHNplcdgafkbPKfF9hPHnA0cWPmArGV1acCJtt5+YQH9ynYsgvS6EDllSGnRKB/s8QEGb3Yxxs6Jg5YFtyyArApnbSjPdPcSKQLKUgbveFYe7vFB0WFKf6u3kYhB9wH2ljUrFUrroe1CI6qOGGERhFCfE/8IlVaYsqZ0bNTKB2OVIrBTifJy4cAR3HcWOhKYG0d7M+Fc0vJTlld/C86JIGrpJQ/olaqLTXVtoSqsRGpWOTC5m3DFKTFQ3LVCc7yXstp+f2vUno/JW043XsbSuhq4kDJ07hZurMJAOmBXiloZJi3fBN/CoyNsPzGdsPKxYZmzy8KvsK5F9WUok0LXIqCfbCJDrljlYpRh0krDytBaJ07RluNa8Jj3UV0if5b3pu2DpI6yYMAyjQYrMhD9CpVWHBwdVH/r9xRaIMTbTRoBar9aJWKs+H1XSqxn8JpVJ2dDiQrBKEqAsgKlFbaQhnlrdCVewTa+Vha/X89+iUMM/49EACsKc/IdwfMNBLRIkWtYufb5IGkxZbE7AtMXh9nAefnt6P1ErNfV8iYPxmd2QeKdS3txslpTXPJeU1cg5PRnUK/+BB9LVDNIi+0btu2f3Gg0vZFnbHQPomK3U0Qgra7nj26Is9s/xyOlUxRDZ9d0KLXjlealPCsnQdJK+CZrm80w2imVKLqB/HoKV9W7ooK4okJ1sxCMWUQld2QbFvArupbmrZpVgLL+xy6DZfdwUqzLNS1viWXO9Rptk1E7e1xdtAaVbSHU26oAwT03ZiWZlbQO/ZsPFNbrLbsNH7qd0gzU57fS8VmeX9SkFTj+kH+SbKNanGCTJ7E63vgjCEYsouZBRYm7OzP4kL4WhfXr9XYb3H+ePjfesmYCLd6Jv068bMPEpY/O2Cdm1E40sqrQrUTOy9/iGSxFqwlgpc9vNU9jK5HdAJ4kK3W++vkIt+w7qzmK+v0GC1Qelh44rF//3uTN6CbMuW6j89aPlHdsztH0y7rsArGqxM5q+BF3BW3lK0WLLRD9LV7Aotq6ZzJvNb7RwfS3Rs2JlBaNml7XRpLt8UiorApwykjHhtwOC4ZUKT/KR986lLAorYErdF7r63a0ttbedwOpcRHSdXCXAsYG1fIjDi/28K1DBYvTalvv4OD0t0ZpK/b/JRuMlrMJTdw8CrO7paz8JRSW0FZIx9Ta8hmprZBuCaWVy/1CGLGsuK54lcLdpbJy7zo0sLhvZd77Yg04NHJfntY2Mg1lgnrtPuDrSloS1+NzGgpLJoh7gLIm97dCGuLbI4E79o6/W7hIqVmVtAx969CG1U+nPnOizBC/F6e1itR2DhlY5pjuqO1ZUlovq3BYglbr5fONX38rpCW+juz9HOT0sGzLKqVxleLta1oQFvetW3Zv5+lBbBf+HQvUtuSBoj/VoPH4UqAqc+JnWg4sOSe2QctEfdBmwv1EP9uKOnUeC2gqH/YrSYo9/JKWC4vTus0grAnpNLAQYcJyls9lbmJDKQ2ePl7mgRWUt5yY2ixNK3k+8gPJTsCydSVQKUxSWW+PXhv5fVgib4V2A6f1t/yldRwMDU5TRvAy0aEs0cNMsGbpb8lfntE0y9JKoiM76O4IK7eDOzAshuqNKeshnQmWS6v1tq3x9xP9XYvYsKyOe8nempYsQEXMz+FF82+YVtuG2tZtcd+iyZRYW6nvKctQkuMlmUtZpr/VhvsWpbVdjla6PZZcWQ4qKCrbsdh4K70yvFbW68Cc6N+yUbm0bTit5bQVr6J8uN0ODMtW1hufDn0yPNvd+TWsLf9EqhY+7LNZ2OWTl37/2O7J6LhgAXsLgcVxvc6Yt8zvSWKLxmZJWunzsXRxldzaS9utchsVez94K+v11+uwbwVKq2kFrHY5WjRqlWYjh6jFoFw8A1BvFqvH5yBlDWnLt2Uj9qcbRqvhymr+T9vZtTaOZGG4m51O3M3AsDOEgaEDXhjsxr6JcXxh3AKLHQnFDk68/v//ZavOV51TVfKHpJRkxUl6LubhOW+dKtlO9VG0fGhFrajsxiihfqi8grPLUpphtbhV9lhH4wdN4fjA3Pr88PcPvcahXQZdgRoVserUaHEZiluGGd5P7BD0TqeyFq18xn8YrdHvf4fmXWJd1oNRg7Wj8z8P3WA9zcmsltwqO9JybQMdOD6oEu//lXRY0X6MTIEECi4dYc0F1DzfQdy8v+UJ4bnU4/FDaEGnlZglpH7sog6LaHWGRbjmuZiH/a36JqfGJbGKYDm3PuJDMSHhCdR/bRf6Q9XezuT7rpdZ8/ZK7HDHgutPToL17QNoueUhvxg5tA2zdDm4I2a7fmXIauV53XY/sQ51aMWq3OHduv8QWDOJLIXqh4703Uyfuy6LQzILec3T+TB7P7E+qxaQqmOriNcH0Bo9yEvVeB6cmbTaxcB2HVfSbBYAw2JM7bpyfwuLcImJtRwniQWX6tvQtD4/SNdOG6N6caP7djnc+PJ5gMxq706vuZ+4ZLeYVSSWgzW4W86szK6MXTdrWjt4dHk7nZg1n8/VtBhXI+xvjc/uby3JqmWmaSCxMLaGdotghbUg35UIMs0w1yned2jWfefM0p3pvGUP4qJZwoucGusCJFp+fBv0k/hGDz/0YtDs8dneKqCaDGKWZNdT4tbljrTWdbhMpkJmVT3+OiQtB2um7jnbxY0qQJ1YPcyai1y6i8j2W/t2qZYRqXEovzpYVQ3uFpo1i7YZQv3586cpQW9Wl92/XGaZ6DK5db4/LTmyIrGqcHwELc4sm+ncJESUhoL1FBqurFpP6t0F7QvCjFdwFlqsQWn5MkxWzrtMtyCgJu4yhFmm45onbpXnb1EsWxosa1WBtIaaEwFWvBZUC5uIFdLqDusYVaEqQusXvV7+TOfOk+BYNe2+XYi88mOolIeAT2/ghElwNrOoepnlWR3n84xhmQ6i9fVb3F2N064dkSmzCj8eB3Jr9CDNle7Wd7swD052P9GncBmoDMPM+DTP3/NJtmw8onKZmwi5Fw2kioqOohiGlocFbu1UtxDSPVSeOXqU4TFHLJv14FYN7xVe2i0stcixabXUNViwWJV3a4hKFLNmihdTwifCKDzpUYZHC0zahywtiK19VIDpRMiNu80rJZaj9fsAtBjWTjUMO92ua7Xw7BnwSOqYmpVu2+A6Mbzblxv3fIdly7CAMgxjiA4CYamJb5ZMfgGVXL/80sMsVqtlZmztIJZxgxUCq9LrQc0KcG38uRmgEo1ZyqbJ2aM7LMaVZpfs3cyztPCtFRmvKu5IbbqHCgRag1QiwFJTn2GlmanI6m+W+HWMaCVuHZlW3da5i1TWrFCDHtVmsxmAloMlQTWTXQWKp0kUVSHgf+kd8MfsnJj2XEfcCoTw2ktoRfvtUeMeEqsiq1wZAq1+f6uKzOJdPV2CkxSS59cPVnokXVfccdWv+HmS/iVY+2XYw4q2RTWqQoe7w7QZhhaYtTPrZQ3JcuJHH1hH/7DhdcxFl4w7/5dJa9pp2OdWg8s42yuNisXyoyctb1ayUtZJBXAmhItpdYSFlEItJlH/xIvroNcfd3/+dkevvvKvWEv3RdMaND0DmMW0Nr1oebNyLdXErnCi0RkWD7aLWJ1x64/fvn79fId/7HZZi1e1whRt91FYVRmzerpFZXi2X5jIV8bWDVZ9LAWUkMo1EtJ1Aaz7T/fOrVevVT3WVsUb7rJyjkixWQd39HILzTJNekBjrhOFqxesSK44up4ULoL16etvd/tXvPds072qkiosKqa1kcZBxPK4utNCWJNs/ck1HovesCDobXTlNm3mHhb8x86t2t7ICbcmosCy6b7hA8069KFFZsVa7VSq6yeTvmVYGrtEMNui6m1nMMv915/vKKdqulTSt5ttGdlpUGFlxDocDo933WiNHtKEujAWPc0qLau5jq9owRhgebd0uHupinQbWa8HqXUnXAcgBaxWh45uxbAmqldQeOiER68yLMsScSlk8zpdWwsyhgWViFpVyzTZk/WglKASC6rw4HF1oxVgtXQJA5tVloKq1Dmvp8fjXG1yCSxPqwpuKbVUMxol1maz4XTHqRBjyz2+dKE1ejgPCYyyhzs7wgJSZUlfkuyisrSGBVi+g6jiFWGVqEW0glgqsCCywK1OKe9gRY1CWnxcfwuB1xkWc4IncTWa3YgjNRAKFtGqlrl90ciqWCzMduAEo1NueViZOmOFBJvF1QXWCM2CzEJmx1SxOOafDCxPCzjV0GApXoXZdGepCh1X9GBYqw65hWYlrGwJmktvsxAXSEWtRGnnRtN6GVjgVpXZkpEVYdUa7oeN9srBWt2cWzmzJtqsuBi7Z9Y3gCU1SJXIlqXtRA4Wp3yyHoxQ8RZWCCsK9kDLfXcrLQ9rkYZ5kCgN+K5mMSxGFqqR7Kqj+IJLBAtzq1qmPYPdwrK9aJgHoQLJrMOtuQVmJYjgXOgiNN9MBoClHHOUyriz5+g6xrDAragOw3KwkPWNFCEtcgQVksLr6TZaZFb7KZR6Z5aDNfbv/ir5UqoqlGqsfYuq6jGBhbRyN1PNPFgYs6QAV+HwxG7LLQernU/4brHAi79O+phV+3Os1QpVidkPvKivd5cUVkRLbnpVIlZh58GDqkGsQjpXb7f18lSGhtWCSjBAmqjrortZY4+pRrESwUqFS6mVgWVpFYlaG7V8Pti8Ikj0ZXXjnAhmLfQ5YVDqqYDql1ke1jjQMry4Eo/Y53PY58yiDsJsM5gGy/buB91fHYhVGDek/Oi7AWN1khqkn6FYPc1CYgxprHDRUsi2qVlYwa1CZ9aGOyyn1SFaO4cGS+N6W51ucGv0fTGxXlnBFgttFz/vCsvfLGVa4NhYcCGyY62v3rA8rOBW6LA20jUUei3Im1hhKgyk4Pp29arawbJjop43Ot0n8rNFD1j0MVBAyrHSuPx3ZoKEamyBxbQKfTdHljgFpxUvni0qKcM3h8qN1ZX3qhWsiSq/JsKmYPpf/bsrrJI+6hftGktdcoJFRXlsNYtpFXaJYzZGD3bxvDJinUgsr9bpykqMzGqUPnSNqPkfTjrC2qcfkFyOpSxrnfiyOfFrGyykpefBTaEXz9E8uJJ+VInlI4vduoJWBGvSLK4ZA8ESZPi1DGVZcpNRtpoFtEzPYBpRnALtrowpQc4sxHX6ckUlOlgN+nQBk9arh1l7OrLAalWTXJXtZqFbUS9qbk4c1EYyLQkF1xtVIMXW++mKSiSzCFdDlwy5ZjCz8NPYWqjpyMce9gwscMvcdi4MqDiwbIPlig9JrQDW6XLKs1lGL/u0SdB1N2vvxhgeltWeQOFnO2F/AW7V58zCfqsw97z0grAt3FEsZPUORXg6gVsXaOnMaoSOMo1/1ah/1nSHxQcz4xPJ7eUznsSzs2ZRJRZF1LdT9W3OouLGwU2GDta7w3aJFpnVhPJrDJ7G/gwf/cxiu1gxOeGo4aAPfPefnHwelneL2lHdim7OspIqpHHy4/39Ii0d8E2sUfhBNAv0gIVA9qKXyMWo8M8QwMce+uMSLMotuxq02wwZrzwqYYW0PKwLtDwsB6KhSxNUEoKNqVP4TVdY2RFwuVHTQ8ZFWOBWYe7Qm3VzbpHDnTtOhG/vPNbvp3O0Rt+bhlGFcmzEpsY84cegsOzwRYiVCI8rYHm3HjniDxu7MarMsmqFxDoJqbW7nnOLYZFYGlljZsfmw8w6P66ABbSCVXb/KrCKpsFQgGTWybFar8/RElgtgkXNF3zpDOvV/c+/wtk2kl+91lfA8q+xeTQNVnTXK+MV8joRrTcQy7t1WrfT8rCm7rDEwhFCKyRZD1ivROsVTz7CU48Hjj3942vMgtx6DHtYuRoM+wzgFdegEwraBjDrtPZne245WFODa5EyW1hinc16JRpBL4WIkfkTBn7zch2sT/d/3lVKLLMzGtL9zezMYLxLuK9JrnWrW6Pv0ymgmvqvLQOLk89FH1ivTIUhAROtGP8S/+XrlbA+3VMl4vbVJocq6q5wInS03kLCr5lW9p1cDhZyimuxaTLJz5r1MUtXnsYkHMUtP16uhoW0HKeVeQVI3GCtQsC/265BxPIpn/3kCjZrinKdI7YI0HqZJVwUMEtIf3ctLKjEx41e56R3clCslXglWgGkdzrWbZUIsIDV9KJbIfS7wopNujxerof16SvQStbPqh19W0WstFlrMWvrjhwthBWAYX41TWt+NU0/WFcRen2h8+UWWOiWbbHS2xOrRKt3UYpTfutwZWgFWOQWxDxNkPkkW0y7wnrZnyUEpx9Myz/55wZYQCu8SkZe0hDFO+z5ua7hzXglgYVjkqHlYT1PY2DypSX3hzbrhVGFg8S6ySyitUn7dtW4UzNKvZUmpVk5uVJaDtYzY9K0zrLqCusl8QiBvITn8iMef90Ei93KRLtZ5mSLkONq61vTHK3R92ej1tRY1UiG6THtAYvNoZMtwrrjIlTjn9vMIlq5lbPak1G5rkgJLjdmp+02peVhAa7nJkn6WLJesO4BFvIJGW4jKgL18o87bjTLDaAVrQdDWtEsqHCZuNqiXOstDttvEayp8at5bkI3kavHHma9hHKTQE8oMSl33A4rdSvpGUJgSXvlzi2H1RaKMXWLyjCuxQSUUqyzWVJsJphSTMypo1mf7kdIK4DSeaXbqzWtCY1ZAsqPn5qWg/X8jLQI2rT5nyR+nldXs15UQOkyNJg0KT86wLK01B7y6i1e5di2fcsZvyW9ttv/83Z+PY3kWBSHpdkkZBtlHjYtQr9UlaCkliXUKGuIZClRKQ8QbQlU+f7fZe17/edel9MTXMlWMmmGHqTh1+ceHx9XB0FpASxnW7XV19uyb161TxTZBv9OEkHq2vLHFv7JejsnQ4t2ok5Ze8fKVDOfetEzjd+Ki8rL6pcR1urxMdCa/DSoGC+trC6o641RsmIbAovO3n8PiMqj0srKei8GT4tW7vuervYrlkYBlMe12uEgBm15ZcFLZ4B1b5yTw1UP8iyAlRBWwBNe6LXIfOMKoPXxYW9Y2//nY7+PhtDPn98PkhFU9lXpy7v85CfoarnUcqqJvKzfL98It8BsAKweKfvqTCpoatuYR45nMW3t9dOdOn+QLJrK7ZvVhrq7sayNMNrCBDH52SEqa/PE6Ol+0UsMX08Ea+ul5fhwVTX6uch+S5TxP6/hFhm8FQssa0+ncPUZzyCbQ60tYXBpYKq4/of53xgjLFRWR5TFokScU/NgbWOHsoMXJpCBgscAWCNDC6Koze57X7f7JOpZbbyugrLEBqdQCVGYe2xGZm+4tLyctpZ8FD2wN6+vXFhbMn3bSFRJVEOUhdr6cJEU7pQBTh9hCtnFSCnrWRqVVlZr1sTxj5+1QQW4nLaiWXzju+xBytoGUfE49Z4gBdcQWIbWB4mjENo/yAjS/TOCoroCezdjKIq2ba///e3bz87pCrVFvQscfslBwcdDYPUiQkpSICoANgjWhZtER2tF94Mstq+YtysrK41KGGKFxnV9ff2XhtWhtGqnrbAq8j2QP9sYMIY9Ub0fGsATKIvR6jUNn/EySMYQdWXsSr8abcH1WHeIy0qrphvr5VsoI2qyCcqHFRC9p43KU8KrWgx9g7Bvek2047fHzSAxrE/r7DwyWF2Z0CBUIdQv7VpFWxQaWW0Gsevq9CxaeXGvz4S15VuZ9yglbPkAGlTDYRlaRlQmv/ePU10rs+EJSxhXN7TEpoA5dNJq2zeqrc5vrP0vxMLsJObCOjx7yCpSVnUCZekEoWkZZe0/UVurz55fRbJyjmWEZUSlgRlVaZEhrSWZRKetlKgGKiusfO9pT2cj2FTVcFigLXunzH7fWwXjAssqC0htQFqgKGGYASzU1rKjq2LtaHmNLUM1mA8r7VV9XBWwak4Cy2gLItZ+7/srnq74MiiU3RQKq6y2LdzVIi3CqrZPjwsF9rY8jbKSsgJM20hWp/Asq61Pcwix/4zWwY2vGryyhN0/Y2wwBl+wy2srTlxdWBxJjljWA2AxaTV+DWxIDnWiAlwngWW0Ze/s49vBOLe7rgG2hPphrp0A14IRLITo06ptogdp9TY/g5WVSFXc1wOuxWney91M4iqxErLcDnvnYFdGWIBMGVYQTAtM823NJtE3gh1fGHE9PAmsHiSNaFv5+TulsqxvOVR7XvWtIllZUgBIuCn0w4jawry1rLl18YrLfmIgrKb/oFbVBFQng4W+FUh5Wa2ItVtZbUBROikQQu6DHX46sSZ6YFxay2GwGp4XmjgveGWdFhbSYstgcPcI6FJiAAASE0lEQVRQNIBZaWIGijP3yOJ3zuUJrM6VzXXweEttAKwmmr8tD1aoqSYM4uKEPwmG0Nq4jMWmUOAiuAFdCcQUxhA/2rXpNbGrvXeBdXVuHLNhNdtD80eiFVGWlCeEZXyLnTvTgAUrILRX2I3iI9JUAVtEKy3UVnShprrwSz0EVjKruxXQ6coP4UmVBdpiLXLQlYIO2ccrE0VVawaxcN6lGDNVJGjV4eiH9Db5sJreZpmJinECaZ0UltfWph+wbCVj94PWs4qIkGiDifV2PmRx7IysrMByYTmv2vZUZXn5LHoeWJggrFWtwrmzcr0oqqpVrfAzVxR9ajuBnU1bp/eJ/mCxyx9Db+69FFr5dEVRyZPDsrT4aWrQFZbIkBsEiiteCp2yIKQWpN86FCKWy2xYyW6hYcHKfSBPbvDBt1jZ/mjrmLAOqp6tk2URgykw1Z/6XdM1saN53hlYPqwmHkNnV02wdmlFBR/cXZ78x9AirfhAFVVlHZ0aFqyJ7Y6jcwkfsrzRFdv+kI4rX1l/RuUEFSZRympx+p9w7GgBscfQyeB2MK0sl0a9siyuVAfhZQXtc6ayFgcmkGwGvbSke9ydHtbI0lIrUrmbGVT+ZCINrGWDCKPo+61+5HLOlQVruqj6siKJoUFhyWBYAGt6clhWWyt+kANHXgJ9XbXUrLyiRG8Qd3rpJNpKKmwArMQEelQkZUmUl4F1hh9ib7QFth4OCKEYRc+yWaFVTFHCK4poS7TK561umR7GHFij74skqortcGSQlQEm5d3NGWBdXFxqWuSGBhhCJURR9MOooFGLwCpsM6hh/a5TsAYoa3T1r2jLTLbNTUDlE5a9ZuNzwLrw2jLhARq+X86wqDfxrNUzMnCuonD9Fjh6F81jFqzLBeHkHcuLSpIBNJqytMrZ5ehstADW4wZEFQ4Hv3IplyDImuiP+FFdWbB+zMLWpgp7G/2AkSNRFJFZXPOr88BC34JbioATFsi0wHJBVJiQJeKkhToT9ouifmuosi4AVt/VUVmNdJx8aLDXmUzL0wKbh+8bTijcrKVVJrCDUNGqyPstrqw8WOOblLHTnkHa5EAcS8r1mUwLaYGqrLebUewzOpRQhbctVFbc2HjHz4KFEb6i5UKvkeETKM86h4GWu5lB4bGXlY7oc1IJXm59DLT43qfOh1Vxw/Lbm/QMlrIszxNLKS17WI8nN2n9GMcSETIVBhG+OJxVW2SWWBas0XRBW74qLvuca+EQVo7WGefQ+ZaAATTDJBIxQdjaPSEx5feJqqDniR3ND3nKurzbVtGpoI+fvpIJU1jio6zm30dnpaVshSASXV+UT6nAqMUXzuxs3iJxq8tT1uWC1XxEYBVtsIhflRLm8P580gJaQrV2Z6iK/jYwlA5t6t9cA4Fx9rfb+Xh95SlLZwfaWjWVbLysnLhoHnXKktX5LN7Ran2PwDCFIot8NqjLHZbZSWT9lh/DPGXp7CCdR5HkwHVFUFla8szSsi4P37Ld8YiCHUf/IT8UeMBvx9in086ZVpc9hpPpXRXvnoOkYAL9QljapRCe5VmlBbR+qVan0h1fDnloJ5m+JTUgftIBM0YftYF5yhpdLXp6on0Mze0WF8Bay7vZOaUF+0TjW5jgRTJOaY8SCXIicHL7xIL3W5ljqB2+Cmc4TcTLSUwGwypRWmtZnnNBdLTghiIRO1PUv8M2sWDBwX+NzhgC/4bBG0mlmbAuftykMrskyyBPWGBZa7kuy7tzdQ+EljL3qhX+kEuIY7Y+9r4kP5IGF79/KxcWmJYvZWQ4wmH5ypKynoUKO7PHO1pws7vpinHLp0Xy94cXCXi+gxgwhmBatDqWdPtMAlYp0aykxEEsy/V6Pj0/LfNtKvVoJol2ovE+cRcXhIwV3lH5O/hWLqzLWWxU9JCQ0iq9sNC5jG1Nzktrgr7lTriCHSlCSdBKXvGzV8G0Ze8NzIZlkhbt2yUVVkwKJ3FtnuXaDOLsanTxf/EtkEbRMvOmdbP4w3F13G91+bDMCY+MhSXjUqaM10KYQzkfQGs0Gn3F5TFdujrB16RhZVQpz1dMWf4em1xYbA5lhAuAlfxhRLWG14chtEaX08sjaYW8hSIr4v1PwuEVKylYvzVAWaPxTcRKVgd0FeI7sCo1rTKX1uTqdn6c5QEtPIaAb3f3x9OK5G+LqA3MhgVzSJo+CwpRVSEyBFpISssLXvNojae3t0+3t8fS+qUK51voUja779KpQSSaU8heeJ44AJYO8bKJ+/aoRi5tYCDCkmvgZWh9H39Zzfe3T/o6ntaj/jYdrSMbeUFKVbelBnVpbWXD0uvhXcOPJ6SkrEpuWWYpRHWtgdZ6Ppt+7Qc4ji41q5enp5eX2+Mm0SQIE0ahaFbpLgvVJZzszG/6/yDut+p8WKMrHeJlQxJDf/ccRGWVVeIUmqt8mN9ffSFwjb/Pb180K8PreG35xKQOnYmlT1zdEPrLZPl8WBc/ZjJq26XXVhmCu9/nrO2KuMYLbP5ocenVd377+voE18vr8bR22G/tFHekHasf1CF7xzICnprWAFi4P/TZiuqqlL0toZtBMCyA9fCg4+n99yNwjUbjqZWV1hX88vQFl29dhEjeDn+wDPSoXK3fXufD0n/YMj4frDgrNolrqiszhlpb2rlmf4drNBlPjaxeYALx+fTyhUmENlCIg86+a/HgJ/xFDOHvfRC+5jJvzfJtwNt43Nw5s5L9ZZBpStplkPPS6jJGr4dxMjosqqv7+e0zyOn1+cldL1/xrfZw5dD7GwShq+f7b+N6Q2CZ6kGy4C57wd0qax1CVgRLPzUuPY3j3j5G72zGl05Uz0/P1t2f3CAeTcv0UiSR28r5byZyJ4IcbYgYAuticnMXWneuLRm1DTSUMlRw3Rle0++X4/FkMjLXZDIZj6+m9zON6vn55fnFXd6zvkgLd9M75TpRyKnh6HB3jIu1g2Bpacn+zTJS0sAQMkOIWLgYPoTnw8Prej6fGWT6mpqX2b3mdKvn75nCeqIm/3Kky0/ifmsnxIGB3P0psKpBsLRrrdlJDstYss/K03pAXERcmtfD66vOBHO87m7/197V9CaOBNGwBGEmCkJIOEKcMHK0QpbQ+GD3wVLfkfj/f2e7+rOqus0ANtFqEq82yaz2sPvy6vWrV9VG1OrPtcGqtlA9xq3efCti1SVRnn6LcFgZgjENnDrw8qNoBcUqUswCpEoQfKF/BpD0F8CKVKEVLf1DfTu3rudbUXtYRXcxBjNLqVZxOHCl8k0hyxu0d0d1iLCy3DLwCA0T/KFtMVwn83cg1l3cYvlWVbGCO/uUSx+HPqzp/N2xgcxS1MpTviF4d9cT0irUSAWsZCkMVsJ8hQJ030WoQouVF632PpVn+Rbuf7reKH5MZukDMZVgFThywNTCCi8tVE6yNECGX74EqcC3vgI9v+7QLZRv7aveCuzzYoOZpai1OjR8WcYNc5zJgkBZUktqqWXx0lhZ5QI2aVJ5yBy1Tr4K2xOqxdvRwvlWmE2fk1JvDD3ZxRnMrJc5dIimv4FqLIjAG+cOKZYsUljJcBKWZW2p5bEKAo+5RY7DO9H6VOrel2+lr9hhyl0Gg/Xy8Us2h4KOCaPD0Hc7xGVJxCwNmAh41eFAbJFsBY+FEbvHb/F8i3Gq613jGl6GEItvi0NTsAm0mxK63F2yXocB5cAKSAl7KCaYdWqxwt/rt+yQiwcQfA0Crwg6CIeDBc60cYYh2IUQY7kmOnCrRJJFkcJw+aclttSTCjGrvT2x+cT5VnrNpkfqx2AWRDUWLdoRNrglbJLdDvZYlFmWXbVxDgnNailcj+VbzKKfA6vQ6k3g2AhgvSzeVSFagMyiLUlmcPRexL5B4m4nwIUf5LSQuj+k8nG+db4i9mc8uR6FWVCIBW6g4fvBTVYbHzdwzZJMtIwjLSmzrH8P5gEz61G0XL7V4bvT1R9s1kjMgkIsDiwZtUVImRVpFrWk2DtY6yA8Wix3iAzE4/lWxUuyS1rVkZg1VydiOAllg6Y5wV/hxMEplkMMkaoMx6EXeSZaqKNmaL3d3Ccav/Vp7iCevfPq2FUxvBFRdaOABaPiLZpQSLcEQjxDiP1KKVO+oceUuk46xDRO3eNSvGNCdtH78tH+FtEwshzRVSOBNQfZKhBeZPZFAuUS5zOo16FFaMtQJJl1aoPTah9Ay+VbnX/9n4GrSvsHN3sci1latkjgwEK/okfc0VmITsOa+Cx2HBIbT587slOUL8f51vnCOFaNySzjH2B32zHLjSh46OfR4k10KYi8Y8B0qhXxqk0YiMfzra7q3ZZ3ujUeWDBzDWZUaxaqQ4nSGdwUBoUX1Gfh3tAUYU3L8JQowkH5Fr2+Eu1MjlmGGq28CdkM7gm5yXIpKZH4kjY7tBRRtOzrMMksjVZ2o251aLvvfGWSuB+dWeq3tcsLnMzwsU7BipD7d1KIdbI3JMRK2Yfb0YLOpwqJzYV2h1qviN8aOGRN7E9tnV41XNujrpCGMyU/CyOhJ3FpGwxEohJXt+9v0XyrZ4/SBPKqDKejvlsO0DJWq0li5aYU/iiUUatjoaprFjxQT4rz0rgS83s2knC+1XGnFe75jA2WQctcaYK/Ghl5Uq9WVxTLwcVki4wtyFgs5tZtl8+yK/lWdDRWY4Ol0dKGlJ6EEtt3pFgso4m8Q8JnOWaRyXQbNz43/W/xfOvaNjP4rMnLqM98sttawUo5UjoCI71OD7FSHv7PzFrduCQX51vn3rcDKrDGvkezALSkkXncQIc+Giv8NWax7rDFVovMpaMucXn7zTOSb/kbKuHlBej9LF21Gf3S0fzj11YSVkWtDmdW1BcGWmHNQvlf29sdAla7O27pxftbFdetyjFrfLBAt3JrSMNeJNOsMNyh1KJ4mWF+GzstNmltqV7t7tqCDvkW9aM8n7+MaeAjlZcS2Xgi8bKkXbRHill4wRKtOHlIlODy3ht62dTfT6zsx/LAzxcSCyr2/R5b3x1ab7kxWqV1EQVLsiQ17wnvQJvD1IEYpha2IFuzanp3rSi0rN+CzzGi40R/GVZht37SPcmP9xxEvpTR8gxay5LJmWHiLAzMYkENppVZE1lNH7jLaKav5h75J+SmlVuUtDmXNvlPqUI7el2Z7rDEK1ncOkhmSvt8ViJZpi7LbZk+eAHbvPUHADt3x+6otBzsRNiG1xH05mkXcOeLiTkUrbYXkkwqJG116lRvGKjV+jKkIk/j5Rbk6tFrW6DynXt3ML2/ad4fcpw99WUnH2+5kEVBAmW278fNQ8lNVp/Ae3lvUUiavz/+u9d+qzOvsKEpvN3jmq2ferN7nk1XW1WGDq2SRMpsN6ukDt5zq7cMww6g+bbMd4PegaDzLfPpMu4dbdU+vPPoMnvyGxbAzecNGYKVvdNV6uB9CYq0wLPFNh00ZIM/EfCoDddlb1/C5d6VpP7B+XnqjgeKK1AuvVnLh2DSrd5a8xAx69rw8GRFy9JquRuuKIvp5viphz1ddzzqt/8YAVN2dPaavTz/WUzeVtuyARfhFmeSAU3Zw6xoxBNymlNtLqm0Il8NpZX9b93M9r/trOe815+GCHVZzdbTr8DKwJWL0otWgdRd9galxGiJVAJ4EgYpEPa3yVjzvNfZWctWePa/j/+8ZvOXL3oWIPSluTTXo1oRs5KTQ8otDVXdKmEf8deeTdf6rrCWLv31c7b5KlqZX9j84321DPfAPKd6NatGTqsvATydhFDWapwKxEf4Zvbv0b5JdzbbrL+QVki6cjq5v+azBK5AMrIIkiXq8aEycE1e1xv9rF+nky+Hypw1Ci4U/PHWsExrVjzDd3CJZf4EqEwlLLJskmWJW31fVoyGXTJK30WsWXUqKiXMWj4Nqv/LA9oVtF57L5s3hHEYmRtquPQlHrvwoKklalV/Stb/ZqjMyaivptalbKRbCHGpgyDxn2hxCRrkNFLCkGrxt0NlqvFjqvGSOpZx8QxCy2+V+mtiUI3KqgOCLSA1yb4DUgSvrbYSNbpsWCYyeCCU8lOaW8Cpt+k3QsrhpW9AA2CWXLWguXJtL7IKW4MA1E5xavHdoPKGRhFspRADWkkMV+0WQ+D8g5vA6l97n35XoJCjmb7rS/Y5YMYaRGCTvpY/zb45UKQmgWQ7hRl5dj8wXaPZQr/PQeGTLfQLHn5A+Xl+np/n53nC8x/tAMljWkeBnAAAAABJRU5ErkJggg==";const resolveWalletUrl=(o,a)=>{if(a)return a;switch(o.networkId){case"mainnet":return"https://app.mynearwallet.com";case"testnet":return"https://testnet.mynearwallet.com";default:throw new Error("Invalid wallet url")}},setupWalletState=(o,a)=>__awaiter$1(void 0,void 0,void 0,function*(){const c=new browserIndex$2.keyStores.BrowserLocalStorageKeyStore,d=yield browserIndex$2.connect(Object.assign(Object.assign({keyStore:c,walletUrl:o.walletUrl},a),{headers:{}}));return{wallet:new browserIndex$2.WalletConnection(d,"near_app"),keyStore:c}}),MyNearWallet=({metadata:o,options:a,store:c,params:d,logger:tt,id:nt})=>__awaiter$1(void 0,void 0,void 0,function*(){const $a=yield setupWalletState(d,a.network),Ys=()=>__awaiter$1(void 0,void 0,void 0,function*(){const xu=$a.wallet.getAccountId(),$u=$a.wallet.account();if(!xu||!$u)return[];const Iu=yield $u.connection.signer.getPublicKey($u.accountId,a.network.networkId);return[{accountId:xu,publicKey:Iu?Iu.toString():""}]}),gu=xu=>__awaiter$1(void 0,void 0,void 0,function*(){const $u=$a.wallet.account(),{networkId:Iu,signer:Xu,provider:i0}=$u.connection,p0=yield Xu.getPublicKey($u.accountId,Iu);return Promise.all(xu.map((w0,A0)=>__awaiter$1(void 0,void 0,void 0,function*(){const $0=w0.actions.map(q0=>createAction(q0)),O0=yield $u.accessKeyForTransaction(w0.receiverId,$0,p0);if(!O0)throw new Error(`Failed to find matching key for transaction sent to ${w0.receiverId}`);const L0=yield i0.block({finality:"final"});return browserIndex$2.transactions.createTransaction($u.accountId,browserIndex$2.utils.PublicKey.from(O0.public_key),w0.receiverId,O0.access_key.nonce+A0+1,$0,browserIndex$2.utils.serialize.base_decode(L0.header.hash))})))});return{signIn({contractId:xu,methodNames:$u,successUrl:Iu,failureUrl:Xu}){return __awaiter$1(this,void 0,void 0,function*(){const i0=yield Ys();return i0.length?i0:(yield $a.wallet.requestSignIn({contractId:xu,methodNames:$u,successUrl:Iu,failureUrl:Xu}),Ys())})},signOut(){return __awaiter$1(this,void 0,void 0,function*(){$a.wallet.isSignedIn()&&$a.wallet.signOut()})},getAccounts(){return __awaiter$1(this,void 0,void 0,function*(){return Ys()})},verifyOwner(){return __awaiter$1(this,void 0,void 0,function*(){throw new Error(`Method not supported by ${o.name}`)})},signMessage({message:xu,nonce:$u,recipient:Iu,callbackUrl:Xu,state:i0}){return __awaiter$1(this,void 0,void 0,function*(){if(tt.log("sign message",{message:xu}),nt!=="my-near-wallet")throw Error(`The signMessage method is not supported by ${o.name}`);const p0=typeof window<"u"?window.location.href:"",w0=Xu||p0;if(!w0)throw new Error(`The callbackUrl is missing for ${o.name}`);const A0=new URL(d.walletUrl);A0.pathname="sign-message",A0.searchParams.append("message",xu),A0.searchParams.append("nonce",$u.toString("base64")),A0.searchParams.append("recipient",Iu),A0.searchParams.append("callbackUrl",w0),i0&&A0.searchParams.append("state",i0),window.location.replace(A0.toString())})},signAndSendTransaction({signerId:xu,receiverId:$u,actions:Iu,callbackUrl:Xu}){return __awaiter$1(this,void 0,void 0,function*(){tt.log("signAndSendTransaction",{signerId:xu,receiverId:$u,actions:Iu,callbackUrl:Xu});const{contract:i0}=c.getState();if(!$a.wallet.isSignedIn()||!i0)throw new Error("Wallet not signed in");return $a.wallet.account().signAndSendTransaction({receiverId:$u||i0.contractId,actions:Iu.map(w0=>createAction(w0)),walletCallbackUrl:Xu})})},signAndSendTransactions({transactions:xu,callbackUrl:$u}){return __awaiter$1(this,void 0,void 0,function*(){if(tt.log("signAndSendTransactions",{transactions:xu,callbackUrl:$u}),!$a.wallet.isSignedIn())throw new Error("Wallet not signed in");return $a.wallet.requestSignTransactions({transactions:yield gu(xu),callbackUrl:$u})})},buildImportAccountsUrl(){return`${d.walletUrl}/batch-import`}}});function setupMyNearWallet({walletUrl:o,iconUrl:a=icon,deprecated:c=!1,successUrl:d="",failureUrl:tt=""}={}){return nt=>__awaiter$1(this,void 0,void 0,function*(){return{id:"my-near-wallet",type:"browser",metadata:{name:"MyNearWallet",description:"NEAR wallet to store, buy, send and stake assets for DeFi.",iconUrl:a,deprecated:c,available:!0,successUrl:d,failureUrl:tt,walletUrl:resolveWalletUrl(nt.options.network,o)},init:$a=>MyNearWallet(Object.assign(Object.assign({},$a),{params:{walletUrl:resolveWalletUrl($a.options.network,o)}}))}})}const ContractFormLayout=pt$1.div` +`;function ApplicationDetailsTable({applicationInformation:o,navigateToApplicationList:a,navigateToAddRelease:c}){const d=translations.applicationsPage.applicationsTable;return jsxRuntimeExports.jsx(ContentCard,{headerBackText:"Application",headerOnBackClick:a,descriptionComponent:jsxRuntimeExports.jsx(DetailsCard,{details:o.package}),headerOptionText:"Add new release",headerOnOptionClick:()=>{o.package.owner.length>0&&c()},children:jsxRuntimeExports.jsx(FlexWrapper$2,{children:jsxRuntimeExports.jsx(ListTable,{numOfColumns:4,listHeaderItems:["VERSION","PATH","NOTES","HASH"],listItems:o.releases||[],rowItem:releaseRowItem,roundTopItem:!0,noItemsText:d.noAvailableReleasesText})})})}function ApplicationDetailsPage(){const{id:o}=useParams(),{showServerDownPopup:a}=useServerDown(),c=useNavigate(),{getPackage:d,getReleases:tt}=useRPC(),[nt,$a]=reactExports.useState();return reactExports.useEffect(()=>{(async()=>{if(o){const gu=await apiClient(a).node().getInstalledApplicationDetails(o);let Su=null;if(gu.error?gu.error.code===400?Su={contractAppId:o}:console.error(gu.error.message):Su=parseAppMetadata(gu.data.metadata),Su){const $u=await d(Su.contractAppId),Iu=await tt(Su.contractAppId);$u&&Iu&&$a({package:$u,releases:Iu})}else $a({package:{id:o,name:"Local app",description:"",repository:"",owner:""},releases:null})}})()},[o]),jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{children:nt&&jsxRuntimeExports.jsx(ApplicationDetailsTable,{applicationInformation:nt,navigateToApplicationList:()=>c("/applications"),navigateToAddRelease:()=>c(`/applications/${o}/add-release`)})})]})}const{transactions,utils:utils$3}=nearAPI,getAccessKey=o=>{if(o==="FullAccess")return transactions.fullAccessKey();const{receiverId:a,methodNames:c=[]}=o,d=o.allowance?new bnExports$1.BN(o.allowance):void 0;return transactions.functionCallAccessKey(a,c,d)},createAction=o=>{switch(o.type){case"CreateAccount":return transactions.createAccount();case"DeployContract":{const{code:a}=o.params;return transactions.deployContract(a)}case"FunctionCall":{const{methodName:a,args:c,gas:d,deposit:tt}=o.params;return transactions.functionCall(a,c,new bnExports$1.BN(d),new bnExports$1.BN(tt))}case"Transfer":{const{deposit:a}=o.params;return transactions.transfer(new bnExports$1.BN(a))}case"Stake":{const{stake:a,publicKey:c}=o.params;return transactions.stake(new bnExports$1.BN(a),utils$3.PublicKey.from(c))}case"AddKey":{const{publicKey:a,accessKey:c}=o.params;return transactions.addKey(utils$3.PublicKey.from(a),getAccessKey(c.permission))}case"DeleteKey":{const{publicKey:a}=o.params;return transactions.deleteKey(utils$3.PublicKey.from(a))}case"DeleteAccount":{const{beneficiaryId:a}=o.params;return transactions.deleteAccount(a)}default:throw new Error("Invalid action type")}};var commonjsGlobal$2=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},fails$d$2=function(o){try{return!!o()}catch{return!0}},fails$c$2=fails$d$2,functionBindNative$2=!fails$c$2(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")}),NATIVE_BIND$3$2=functionBindNative$2,FunctionPrototype$2$2=Function.prototype,bind$5$2=FunctionPrototype$2$2.bind,call$e$2=FunctionPrototype$2$2.call,uncurryThis$d$2=NATIVE_BIND$3$2&&bind$5$2.bind(call$e$2,call$e$2),functionUncurryThis$2=NATIVE_BIND$3$2?function(o){return o&&uncurryThis$d$2(o)}:function(o){return o&&function(){return call$e$2.apply(o,arguments)}},uncurryThis$c$2=functionUncurryThis$2,toString$2$3=uncurryThis$c$2({}.toString),stringSlice$8=uncurryThis$c$2("".slice),classofRaw$1$2=function(o){return stringSlice$8(toString$2$3(o),8,-1)},uncurryThis$b$2=functionUncurryThis$2,fails$b$2=fails$d$2,classof$5$2=classofRaw$1$2,$Object$4$2=Object,split$5=uncurryThis$b$2("".split),indexedObject$2=fails$b$2(function(){return!$Object$4$2("z").propertyIsEnumerable(0)})?function(o){return classof$5$2(o)=="String"?split$5(o,""):$Object$4$2(o)}:$Object$4$2,$TypeError$b$2=TypeError,requireObjectCoercible$2$2=function(o){if(o==null)throw $TypeError$b$2("Can't call method on "+o);return o},IndexedObject$4=indexedObject$2,requireObjectCoercible$1$2=requireObjectCoercible$2$2,toIndexedObject$5$2=function(o){return IndexedObject$4(requireObjectCoercible$1$2(o))},check$2=function(o){return o&&o.Math==Math&&o},global$j$2=check$2(typeof globalThis=="object"&&globalThis)||check$2(typeof window=="object"&&window)||check$2(typeof self=="object"&&self)||check$2(typeof commonjsGlobal$2=="object"&&commonjsGlobal$2)||function(){return this}()||Function("return this")(),shared$3$2={exports:{}},global$i$2=global$j$2,defineProperty$4$2=Object.defineProperty,defineGlobalProperty$3$2=function(o,a){try{defineProperty$4$2(global$i$2,o,{value:a,configurable:!0,writable:!0})}catch{global$i$2[o]=a}return a},global$h$2=global$j$2,defineGlobalProperty$2$2=defineGlobalProperty$3$2,SHARED$2="__core-js_shared__",store$3$2=global$h$2[SHARED$2]||defineGlobalProperty$2$2(SHARED$2,{}),sharedStore$2=store$3$2,store$2$2=sharedStore$2;(shared$3$2.exports=function(o,a){return store$2$2[o]||(store$2$2[o]=a!==void 0?a:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var requireObjectCoercible$6=requireObjectCoercible$2$2,$Object$3$2=Object,toObject$2$2=function(o){return $Object$3$2(requireObjectCoercible$6(o))},uncurryThis$a$2=functionUncurryThis$2,toObject$1$2=toObject$2$2,hasOwnProperty$2=uncurryThis$a$2({}.hasOwnProperty),hasOwnProperty_1$2=Object.hasOwn||function o(a,c){return hasOwnProperty$2(toObject$1$2(a),c)},uncurryThis$9$2=functionUncurryThis$2,id$3=0,postfix$2=Math.random(),toString$1$4=uncurryThis$9$2(1 .toString),uid$2$2=function(o){return"Symbol("+(o===void 0?"":o)+")_"+toString$1$4(++id$3+postfix$2,36)},isCallable$k$2=function(o){return typeof o=="function"},global$g$2=global$j$2,isCallable$j$2=isCallable$k$2,aFunction$2=function(o){return isCallable$j$2(o)?o:void 0},getBuiltIn$8$2=function(o,a){return arguments.length<2?aFunction$2(global$g$2[o]):global$g$2[o]&&global$g$2[o][a]},getBuiltIn$7$2=getBuiltIn$8$2,engineUserAgent$2=getBuiltIn$7$2("navigator","userAgent")||"",global$f$2=global$j$2,userAgent$3$2=engineUserAgent$2,process$3$2=global$f$2.process,Deno$1$2=global$f$2.Deno,versions$2=process$3$2&&process$3$2.versions||Deno$1$2&&Deno$1$2.version,v8$2=versions$2&&versions$2.v8,match$2,version$5;v8$2&&(match$2=v8$2.split("."),version$5=match$2[0]>0&&match$2[0]<4?1:+(match$2[0]+match$2[1]));!version$5&&userAgent$3$2&&(match$2=userAgent$3$2.match(/Edge\/(\d+)/),(!match$2||match$2[1]>=74)&&(match$2=userAgent$3$2.match(/Chrome\/(\d+)/),match$2&&(version$5=+match$2[1])));var engineV8Version$2=version$5,V8_VERSION$1$2=engineV8Version$2,fails$a$2=fails$d$2,nativeSymbol$2=!!Object.getOwnPropertySymbols&&!fails$a$2(function(){var o=Symbol();return!String(o)||!(Object(o)instanceof Symbol)||!Symbol.sham&&V8_VERSION$1$2&&V8_VERSION$1$2<41}),NATIVE_SYMBOL$1$2=nativeSymbol$2,useSymbolAsUid$2=NATIVE_SYMBOL$1$2&&!Symbol.sham&&typeof Symbol.iterator=="symbol",global$e$2=global$j$2,shared$2$2=shared$3$2.exports,hasOwn$a$2=hasOwnProperty_1$2,uid$1$2=uid$2$2,NATIVE_SYMBOL$4=nativeSymbol$2,USE_SYMBOL_AS_UID$1$2=useSymbolAsUid$2,WellKnownSymbolsStore$2=shared$2$2("wks"),Symbol$1$2=global$e$2.Symbol,symbolFor$2=Symbol$1$2&&Symbol$1$2.for,createWellKnownSymbol$2=USE_SYMBOL_AS_UID$1$2?Symbol$1$2:Symbol$1$2&&Symbol$1$2.withoutSetter||uid$1$2,wellKnownSymbol$e$2=function(o){if(!hasOwn$a$2(WellKnownSymbolsStore$2,o)||!(NATIVE_SYMBOL$4||typeof WellKnownSymbolsStore$2[o]=="string")){var a="Symbol."+o;NATIVE_SYMBOL$4&&hasOwn$a$2(Symbol$1$2,o)?WellKnownSymbolsStore$2[o]=Symbol$1$2[o]:USE_SYMBOL_AS_UID$1$2&&symbolFor$2?WellKnownSymbolsStore$2[o]=symbolFor$2(a):WellKnownSymbolsStore$2[o]=createWellKnownSymbol$2(a)}return WellKnownSymbolsStore$2[o]},isCallable$i$2=isCallable$k$2,isObject$7$2=function(o){return typeof o=="object"?o!==null:isCallable$i$2(o)},isObject$6$2=isObject$7$2,$String$3$2=String,$TypeError$a$2=TypeError,anObject$c$2=function(o){if(isObject$6$2(o))return o;throw $TypeError$a$2($String$3$2(o)+" is not an object")},objectDefineProperties$2={},fails$9$2=fails$d$2,descriptors$2=!fails$9$2(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),DESCRIPTORS$9$2=descriptors$2,fails$8$2=fails$d$2,v8PrototypeDefineBug$2=DESCRIPTORS$9$2&&fails$8$2(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42}),objectDefineProperty$2={},global$d$2=global$j$2,isObject$5$2=isObject$7$2,document$3$2=global$d$2.document,EXISTS$1$2=isObject$5$2(document$3$2)&&isObject$5$2(document$3$2.createElement),documentCreateElement$2$2=function(o){return EXISTS$1$2?document$3$2.createElement(o):{}},DESCRIPTORS$8$2=descriptors$2,fails$7$2=fails$d$2,createElement$1$2=documentCreateElement$2$2,ie8DomDefine$2=!DESCRIPTORS$8$2&&!fails$7$2(function(){return Object.defineProperty(createElement$1$2("div"),"a",{get:function(){return 7}}).a!=7}),NATIVE_BIND$2$2=functionBindNative$2,call$d$2=Function.prototype.call,functionCall$2=NATIVE_BIND$2$2?call$d$2.bind(call$d$2):function(){return call$d$2.apply(call$d$2,arguments)},uncurryThis$8$2=functionUncurryThis$2,objectIsPrototypeOf$2=uncurryThis$8$2({}.isPrototypeOf),getBuiltIn$6$2=getBuiltIn$8$2,isCallable$h$2=isCallable$k$2,isPrototypeOf$3$2=objectIsPrototypeOf$2,USE_SYMBOL_AS_UID$3=useSymbolAsUid$2,$Object$2$2=Object,isSymbol$2$2=USE_SYMBOL_AS_UID$3?function(o){return typeof o=="symbol"}:function(o){var a=getBuiltIn$6$2("Symbol");return isCallable$h$2(a)&&isPrototypeOf$3$2(a.prototype,$Object$2$2(o))},$String$2$2=String,tryToString$4$2=function(o){try{return $String$2$2(o)}catch{return"Object"}},isCallable$g$2=isCallable$k$2,tryToString$3$2=tryToString$4$2,$TypeError$9$2=TypeError,aCallable$7$2=function(o){if(isCallable$g$2(o))return o;throw $TypeError$9$2(tryToString$3$2(o)+" is not a function")},aCallable$6$2=aCallable$7$2,getMethod$3$2=function(o,a){var c=o[a];return c==null?void 0:aCallable$6$2(c)},call$c$2=functionCall$2,isCallable$f$2=isCallable$k$2,isObject$4$2=isObject$7$2,$TypeError$8$2=TypeError,ordinaryToPrimitive$1$2=function(o,a){var c,d;if(a==="string"&&isCallable$f$2(c=o.toString)&&!isObject$4$2(d=call$c$2(c,o))||isCallable$f$2(c=o.valueOf)&&!isObject$4$2(d=call$c$2(c,o))||a!=="string"&&isCallable$f$2(c=o.toString)&&!isObject$4$2(d=call$c$2(c,o)))return d;throw $TypeError$8$2("Can't convert object to primitive value")},call$b$2=functionCall$2,isObject$3$3=isObject$7$2,isSymbol$1$2=isSymbol$2$2,getMethod$2$2=getMethod$3$2,ordinaryToPrimitive$3=ordinaryToPrimitive$1$2,wellKnownSymbol$d$2=wellKnownSymbol$e$2,$TypeError$7$2=TypeError,TO_PRIMITIVE$2=wellKnownSymbol$d$2("toPrimitive"),toPrimitive$1$2=function(o,a){if(!isObject$3$3(o)||isSymbol$1$2(o))return o;var c=getMethod$2$2(o,TO_PRIMITIVE$2),d;if(c){if(a===void 0&&(a="default"),d=call$b$2(c,o,a),!isObject$3$3(d)||isSymbol$1$2(d))return d;throw $TypeError$7$2("Can't convert object to primitive value")}return a===void 0&&(a="number"),ordinaryToPrimitive$3(o,a)},toPrimitive$3=toPrimitive$1$2,isSymbol$4=isSymbol$2$2,toPropertyKey$2$2=function(o){var a=toPrimitive$3(o,"string");return isSymbol$4(a)?a:a+""},DESCRIPTORS$7$2=descriptors$2,IE8_DOM_DEFINE$1$2=ie8DomDefine$2,V8_PROTOTYPE_DEFINE_BUG$1$2=v8PrototypeDefineBug$2,anObject$b$2=anObject$c$2,toPropertyKey$1$2=toPropertyKey$2$2,$TypeError$6$2=TypeError,$defineProperty$2=Object.defineProperty,$getOwnPropertyDescriptor$1$2=Object.getOwnPropertyDescriptor,ENUMERABLE$2="enumerable",CONFIGURABLE$1$2="configurable",WRITABLE$2="writable";objectDefineProperty$2.f=DESCRIPTORS$7$2?V8_PROTOTYPE_DEFINE_BUG$1$2?function o(a,c,d){if(anObject$b$2(a),c=toPropertyKey$1$2(c),anObject$b$2(d),typeof a=="function"&&c==="prototype"&&"value"in d&&WRITABLE$2 in d&&!d[WRITABLE$2]){var tt=$getOwnPropertyDescriptor$1$2(a,c);tt&&tt[WRITABLE$2]&&(a[c]=d.value,d={configurable:CONFIGURABLE$1$2 in d?d[CONFIGURABLE$1$2]:tt[CONFIGURABLE$1$2],enumerable:ENUMERABLE$2 in d?d[ENUMERABLE$2]:tt[ENUMERABLE$2],writable:!1})}return $defineProperty$2(a,c,d)}:$defineProperty$2:function o(a,c,d){if(anObject$b$2(a),c=toPropertyKey$1$2(c),anObject$b$2(d),IE8_DOM_DEFINE$1$2)try{return $defineProperty$2(a,c,d)}catch{}if("get"in d||"set"in d)throw $TypeError$6$2("Accessors not supported");return"value"in d&&(a[c]=d.value),a};var ceil$2=Math.ceil,floor$6=Math.floor,mathTrunc$2=Math.trunc||function o(a){var c=+a;return(c>0?floor$6:ceil$2)(c)},trunc$2=mathTrunc$2,toIntegerOrInfinity$2$2=function(o){var a=+o;return a!==a||a===0?0:trunc$2(a)},toIntegerOrInfinity$1$2=toIntegerOrInfinity$2$2,max$4=Math.max,min$1$2=Math.min,toAbsoluteIndex$1$2=function(o,a){var c=toIntegerOrInfinity$1$2(o);return c<0?max$4(c+a,0):min$1$2(c,a)},toIntegerOrInfinity$6=toIntegerOrInfinity$2$2,min$4=Math.min,toLength$1$2=function(o){return o>0?min$4(toIntegerOrInfinity$6(o),9007199254740991):0},toLength$4=toLength$1$2,lengthOfArrayLike$2$2=function(o){return toLength$4(o.length)},toIndexedObject$4$2=toIndexedObject$5$2,toAbsoluteIndex$4=toAbsoluteIndex$1$2,lengthOfArrayLike$1$2=lengthOfArrayLike$2$2,createMethod$3=function(o){return function(a,c,d){var tt=toIndexedObject$4$2(a),nt=lengthOfArrayLike$1$2(tt),$a=toAbsoluteIndex$4(d,nt),Ws;if(o&&c!=c){for(;nt>$a;)if(Ws=tt[$a++],Ws!=Ws)return!0}else for(;nt>$a;$a++)if((o||$a in tt)&&tt[$a]===c)return o||$a||0;return!o&&-1}},arrayIncludes$2={includes:createMethod$3(!0),indexOf:createMethod$3(!1)},hiddenKeys$4$2={},uncurryThis$7$2=functionUncurryThis$2,hasOwn$9$2=hasOwnProperty_1$2,toIndexedObject$3$2=toIndexedObject$5$2,indexOf$3=arrayIncludes$2.indexOf,hiddenKeys$3$2=hiddenKeys$4$2,push$6=uncurryThis$7$2([].push),objectKeysInternal$2=function(o,a){var c=toIndexedObject$3$2(o),d=0,tt=[],nt;for(nt in c)!hasOwn$9$2(hiddenKeys$3$2,nt)&&hasOwn$9$2(c,nt)&&push$6(tt,nt);for(;a.length>d;)hasOwn$9$2(c,nt=a[d++])&&(~indexOf$3(tt,nt)||push$6(tt,nt));return tt},enumBugKeys$3$2=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],internalObjectKeys$1$2=objectKeysInternal$2,enumBugKeys$2$2=enumBugKeys$3$2,objectKeys$1$2=Object.keys||function o(a){return internalObjectKeys$1$2(a,enumBugKeys$2$2)},DESCRIPTORS$6$2=descriptors$2,V8_PROTOTYPE_DEFINE_BUG$3=v8PrototypeDefineBug$2,definePropertyModule$4$2=objectDefineProperty$2,anObject$a$2=anObject$c$2,toIndexedObject$2$2=toIndexedObject$5$2,objectKeys$4=objectKeys$1$2;objectDefineProperties$2.f=DESCRIPTORS$6$2&&!V8_PROTOTYPE_DEFINE_BUG$3?Object.defineProperties:function o(a,c){anObject$a$2(a);for(var d=toIndexedObject$2$2(c),tt=objectKeys$4(c),nt=tt.length,$a=0,Ws;nt>$a;)definePropertyModule$4$2.f(a,Ws=tt[$a++],d[Ws]);return a};var getBuiltIn$5$2=getBuiltIn$8$2,html$2$2=getBuiltIn$5$2("document","documentElement"),shared$1$2=shared$3$2.exports,uid$4=uid$2$2,keys$2=shared$1$2("keys"),sharedKey$3$2=function(o){return keys$2[o]||(keys$2[o]=uid$4(o))},anObject$9$2=anObject$c$2,definePropertiesModule$2=objectDefineProperties$2,enumBugKeys$1$2=enumBugKeys$3$2,hiddenKeys$2$2=hiddenKeys$4$2,html$1$2=html$2$2,documentCreateElement$1$2=documentCreateElement$2$2,sharedKey$2$2=sharedKey$3$2,GT$2=">",LT$2="<",PROTOTYPE$2="prototype",SCRIPT$2="script",IE_PROTO$1$2=sharedKey$2$2("IE_PROTO"),EmptyConstructor$2=function(){},scriptTag$2=function(o){return LT$2+SCRIPT$2+GT$2+o+LT$2+"/"+SCRIPT$2+GT$2},NullProtoObjectViaActiveX$2=function(o){o.write(scriptTag$2("")),o.close();var a=o.parentWindow.Object;return o=null,a},NullProtoObjectViaIFrame$2=function(){var o=documentCreateElement$1$2("iframe"),a="java"+SCRIPT$2+":",c;return o.style.display="none",html$1$2.appendChild(o),o.src=String(a),c=o.contentWindow.document,c.open(),c.write(scriptTag$2("document.F=Object")),c.close(),c.F},activeXDocument$2,NullProtoObject$2=function(){try{activeXDocument$2=new ActiveXObject("htmlfile")}catch{}NullProtoObject$2=typeof document<"u"?document.domain&&activeXDocument$2?NullProtoObjectViaActiveX$2(activeXDocument$2):NullProtoObjectViaIFrame$2():NullProtoObjectViaActiveX$2(activeXDocument$2);for(var o=enumBugKeys$1$2.length;o--;)delete NullProtoObject$2[PROTOTYPE$2][enumBugKeys$1$2[o]];return NullProtoObject$2()};hiddenKeys$2$2[IE_PROTO$1$2]=!0;var objectCreate$2=Object.create||function o(a,c){var d;return a!==null?(EmptyConstructor$2[PROTOTYPE$2]=anObject$9$2(a),d=new EmptyConstructor$2,EmptyConstructor$2[PROTOTYPE$2]=null,d[IE_PROTO$1$2]=a):d=NullProtoObject$2(),c===void 0?d:definePropertiesModule$2.f(d,c)},wellKnownSymbol$c$2=wellKnownSymbol$e$2,create$1$2=objectCreate$2,defineProperty$3$2=objectDefineProperty$2.f,UNSCOPABLES$2=wellKnownSymbol$c$2("unscopables"),ArrayPrototype$1$2=Array.prototype;ArrayPrototype$1$2[UNSCOPABLES$2]==null&&defineProperty$3$2(ArrayPrototype$1$2,UNSCOPABLES$2,{configurable:!0,value:create$1$2(null)});var addToUnscopables$1$2=function(o){ArrayPrototype$1$2[UNSCOPABLES$2][o]=!0},iterators$2={},uncurryThis$6$2=functionUncurryThis$2,isCallable$e$2=isCallable$k$2,store$1$2=sharedStore$2,functionToString$2=uncurryThis$6$2(Function.toString);isCallable$e$2(store$1$2.inspectSource)||(store$1$2.inspectSource=function(o){return functionToString$2(o)});var inspectSource$4$2=store$1$2.inspectSource,global$c$2=global$j$2,isCallable$d$2=isCallable$k$2,inspectSource$3$2=inspectSource$4$2,WeakMap$1$2=global$c$2.WeakMap,nativeWeakMap$2=isCallable$d$2(WeakMap$1$2)&&/native code/.test(inspectSource$3$2(WeakMap$1$2)),createPropertyDescriptor$3$2=function(o,a){return{enumerable:!(o&1),configurable:!(o&2),writable:!(o&4),value:a}},DESCRIPTORS$5$2=descriptors$2,definePropertyModule$3$2=objectDefineProperty$2,createPropertyDescriptor$2$2=createPropertyDescriptor$3$2,createNonEnumerableProperty$4$2=DESCRIPTORS$5$2?function(o,a,c){return definePropertyModule$3$2.f(o,a,createPropertyDescriptor$2$2(1,c))}:function(o,a,c){return o[a]=c,o},NATIVE_WEAK_MAP$2=nativeWeakMap$2,global$b$2=global$j$2,uncurryThis$5$2=functionUncurryThis$2,isObject$2$3=isObject$7$2,createNonEnumerableProperty$3$2=createNonEnumerableProperty$4$2,hasOwn$8$2=hasOwnProperty_1$2,shared$6=sharedStore$2,sharedKey$1$2=sharedKey$3$2,hiddenKeys$1$2=hiddenKeys$4$2,OBJECT_ALREADY_INITIALIZED$2="Object already initialized",TypeError$2$2=global$b$2.TypeError,WeakMap$4=global$b$2.WeakMap,set$1$2,get$2,has$3,enforce$2=function(o){return has$3(o)?get$2(o):set$1$2(o,{})},getterFor$2=function(o){return function(a){var c;if(!isObject$2$3(a)||(c=get$2(a)).type!==o)throw TypeError$2$2("Incompatible receiver, "+o+" required");return c}};if(NATIVE_WEAK_MAP$2||shared$6.state){var store$6=shared$6.state||(shared$6.state=new WeakMap$4),wmget$2=uncurryThis$5$2(store$6.get),wmhas$2=uncurryThis$5$2(store$6.has),wmset$2=uncurryThis$5$2(store$6.set);set$1$2=function(o,a){if(wmhas$2(store$6,o))throw new TypeError$2$2(OBJECT_ALREADY_INITIALIZED$2);return a.facade=o,wmset$2(store$6,o,a),a},get$2=function(o){return wmget$2(store$6,o)||{}},has$3=function(o){return wmhas$2(store$6,o)}}else{var STATE$2=sharedKey$1$2("state");hiddenKeys$1$2[STATE$2]=!0,set$1$2=function(o,a){if(hasOwn$8$2(o,STATE$2))throw new TypeError$2$2(OBJECT_ALREADY_INITIALIZED$2);return a.facade=o,createNonEnumerableProperty$3$2(o,STATE$2,a),a},get$2=function(o){return hasOwn$8$2(o,STATE$2)?o[STATE$2]:{}},has$3=function(o){return hasOwn$8$2(o,STATE$2)}}var internalState$2={set:set$1$2,get:get$2,has:has$3,enforce:enforce$2,getterFor:getterFor$2},objectGetOwnPropertyDescriptor$2={},objectPropertyIsEnumerable$2={},$propertyIsEnumerable$2={}.propertyIsEnumerable,getOwnPropertyDescriptor$2$2=Object.getOwnPropertyDescriptor,NASHORN_BUG$2=getOwnPropertyDescriptor$2$2&&!$propertyIsEnumerable$2.call({1:2},1);objectPropertyIsEnumerable$2.f=NASHORN_BUG$2?function o(a){var c=getOwnPropertyDescriptor$2$2(this,a);return!!c&&c.enumerable}:$propertyIsEnumerable$2;var DESCRIPTORS$4$2=descriptors$2,call$a$2=functionCall$2,propertyIsEnumerableModule$3=objectPropertyIsEnumerable$2,createPropertyDescriptor$1$2=createPropertyDescriptor$3$2,toIndexedObject$1$2=toIndexedObject$5$2,toPropertyKey$5=toPropertyKey$2$2,hasOwn$7$2=hasOwnProperty_1$2,IE8_DOM_DEFINE$3=ie8DomDefine$2,$getOwnPropertyDescriptor$3=Object.getOwnPropertyDescriptor;objectGetOwnPropertyDescriptor$2.f=DESCRIPTORS$4$2?$getOwnPropertyDescriptor$3:function o(a,c){if(a=toIndexedObject$1$2(a),c=toPropertyKey$5(c),IE8_DOM_DEFINE$3)try{return $getOwnPropertyDescriptor$3(a,c)}catch{}if(hasOwn$7$2(a,c))return createPropertyDescriptor$1$2(!call$a$2(propertyIsEnumerableModule$3.f,a,c),a[c])};var makeBuiltIn$2$2={exports:{}},DESCRIPTORS$3$2=descriptors$2,hasOwn$6$2=hasOwnProperty_1$2,FunctionPrototype$1$2=Function.prototype,getDescriptor$2=DESCRIPTORS$3$2&&Object.getOwnPropertyDescriptor,EXISTS$3=hasOwn$6$2(FunctionPrototype$1$2,"name"),PROPER$2=EXISTS$3&&(function o(){}).name==="something",CONFIGURABLE$3=EXISTS$3&&(!DESCRIPTORS$3$2||DESCRIPTORS$3$2&&getDescriptor$2(FunctionPrototype$1$2,"name").configurable),functionName$2={EXISTS:EXISTS$3,PROPER:PROPER$2,CONFIGURABLE:CONFIGURABLE$3},fails$6$2=fails$d$2,isCallable$c$2=isCallable$k$2,hasOwn$5$2=hasOwnProperty_1$2,DESCRIPTORS$2$2=descriptors$2,CONFIGURABLE_FUNCTION_NAME$1$2=functionName$2.CONFIGURABLE,inspectSource$2$2=inspectSource$4$2,InternalStateModule$2$2=internalState$2,enforceInternalState$2=InternalStateModule$2$2.enforce,getInternalState$1$2=InternalStateModule$2$2.get,defineProperty$2$2=Object.defineProperty,CONFIGURABLE_LENGTH$2=DESCRIPTORS$2$2&&!fails$6$2(function(){return defineProperty$2$2(function(){},"length",{value:8}).length!==8}),TEMPLATE$2=String(String).split("String"),makeBuiltIn$1$2=makeBuiltIn$2$2.exports=function(o,a,c){String(a).slice(0,7)==="Symbol("&&(a="["+String(a).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),c&&c.getter&&(a="get "+a),c&&c.setter&&(a="set "+a),(!hasOwn$5$2(o,"name")||CONFIGURABLE_FUNCTION_NAME$1$2&&o.name!==a)&&(DESCRIPTORS$2$2?defineProperty$2$2(o,"name",{value:a,configurable:!0}):o.name=a),CONFIGURABLE_LENGTH$2&&c&&hasOwn$5$2(c,"arity")&&o.length!==c.arity&&defineProperty$2$2(o,"length",{value:c.arity});try{c&&hasOwn$5$2(c,"constructor")&&c.constructor?DESCRIPTORS$2$2&&defineProperty$2$2(o,"prototype",{writable:!1}):o.prototype&&(o.prototype=void 0)}catch{}var d=enforceInternalState$2(o);return hasOwn$5$2(d,"source")||(d.source=TEMPLATE$2.join(typeof a=="string"?a:"")),o};Function.prototype.toString=makeBuiltIn$1$2(function o(){return isCallable$c$2(this)&&getInternalState$1$2(this).source||inspectSource$2$2(this)},"toString");var isCallable$b$2=isCallable$k$2,definePropertyModule$2$2=objectDefineProperty$2,makeBuiltIn$5=makeBuiltIn$2$2.exports,defineGlobalProperty$1$2=defineGlobalProperty$3$2,defineBuiltIn$6$2=function(o,a,c,d){d||(d={});var tt=d.enumerable,nt=d.name!==void 0?d.name:a;if(isCallable$b$2(c)&&makeBuiltIn$5(c,nt,d),d.global)tt?o[a]=c:defineGlobalProperty$1$2(a,c);else{try{d.unsafe?o[a]&&(tt=!0):delete o[a]}catch{}tt?o[a]=c:definePropertyModule$2$2.f(o,a,{value:c,enumerable:!1,configurable:!d.nonConfigurable,writable:!d.nonWritable})}return o},objectGetOwnPropertyNames$2={},internalObjectKeys$3=objectKeysInternal$2,enumBugKeys$5=enumBugKeys$3$2,hiddenKeys$6=enumBugKeys$5.concat("length","prototype");objectGetOwnPropertyNames$2.f=Object.getOwnPropertyNames||function o(a){return internalObjectKeys$3(a,hiddenKeys$6)};var objectGetOwnPropertySymbols$2={};objectGetOwnPropertySymbols$2.f=Object.getOwnPropertySymbols;var getBuiltIn$4$2=getBuiltIn$8$2,uncurryThis$4$2=functionUncurryThis$2,getOwnPropertyNamesModule$2=objectGetOwnPropertyNames$2,getOwnPropertySymbolsModule$3=objectGetOwnPropertySymbols$2,anObject$8$2=anObject$c$2,concat$4=uncurryThis$4$2([].concat),ownKeys$1$2=getBuiltIn$4$2("Reflect","ownKeys")||function o(a){var c=getOwnPropertyNamesModule$2.f(anObject$8$2(a)),d=getOwnPropertySymbolsModule$3.f;return d?concat$4(c,d(a)):c},hasOwn$4$2=hasOwnProperty_1$2,ownKeys$4=ownKeys$1$2,getOwnPropertyDescriptorModule$2=objectGetOwnPropertyDescriptor$2,definePropertyModule$1$2=objectDefineProperty$2,copyConstructorProperties$1$2=function(o,a,c){for(var d=ownKeys$4(a),tt=definePropertyModule$1$2.f,nt=getOwnPropertyDescriptorModule$2.f,$a=0;$a=a.length?(o.target=void 0,{value:void 0,done:!0}):c=="keys"?{value:d,done:!1}:c=="values"?{value:a[d],done:!1}:{value:[d,a[d]],done:!1}},"values"),values$2=Iterators$2$2.Arguments=Iterators$2$2.Array;addToUnscopables$4("keys");addToUnscopables$4("values");addToUnscopables$4("entries");if(DESCRIPTORS$1$2&&values$2.name!=="values")try{defineProperty$8(values$2,"name",{value:"values"})}catch(o){}var domIterables$2={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},documentCreateElement$4=documentCreateElement$2$2,classList$2=documentCreateElement$4("span").classList,DOMTokenListPrototype$1$2=classList$2&&classList$2.constructor&&classList$2.constructor.prototype,domTokenListPrototype$2=DOMTokenListPrototype$1$2===Object.prototype?void 0:DOMTokenListPrototype$1$2,global$9$2=global$j$2,DOMIterables$2=domIterables$2,DOMTokenListPrototype$3=domTokenListPrototype$2,ArrayIteratorMethods$2=es_array_iterator$2,createNonEnumerableProperty$7=createNonEnumerableProperty$4$2,wellKnownSymbol$8$2=wellKnownSymbol$e$2,ITERATOR$3$2=wellKnownSymbol$8$2("iterator"),TO_STRING_TAG$2$2=wellKnownSymbol$8$2("toStringTag"),ArrayValues$2=ArrayIteratorMethods$2.values,handlePrototype$2=function(o,a){if(o){if(o[ITERATOR$3$2]!==ArrayValues$2)try{createNonEnumerableProperty$7(o,ITERATOR$3$2,ArrayValues$2)}catch{o[ITERATOR$3$2]=ArrayValues$2}if(o[TO_STRING_TAG$2$2]||createNonEnumerableProperty$7(o,TO_STRING_TAG$2$2,a),DOMIterables$2[a]){for(var c in ArrayIteratorMethods$2)if(o[c]!==ArrayIteratorMethods$2[c])try{createNonEnumerableProperty$7(o,c,ArrayIteratorMethods$2[c])}catch{o[c]=ArrayIteratorMethods$2[c]}}}};for(var COLLECTION_NAME$2 in DOMIterables$2)handlePrototype$2(global$9$2[COLLECTION_NAME$2]&&global$9$2[COLLECTION_NAME$2].prototype,COLLECTION_NAME$2);handlePrototype$2(DOMTokenListPrototype$3,"DOMTokenList");var classof$4$2=classofRaw$1$2,global$8$2=global$j$2,engineIsNode$2=classof$4$2(global$8$2.process)=="process",getBuiltIn$3$2=getBuiltIn$8$2,definePropertyModule$7=objectDefineProperty$2,wellKnownSymbol$7$2=wellKnownSymbol$e$2,DESCRIPTORS$e=descriptors$2,SPECIES$2$2=wellKnownSymbol$7$2("species"),setSpecies$1$2=function(o){var a=getBuiltIn$3$2(o),c=definePropertyModule$7.f;DESCRIPTORS$e&&a&&!a[SPECIES$2$2]&&c(a,SPECIES$2$2,{configurable:!0,get:function(){return this}})},isPrototypeOf$2$2=objectIsPrototypeOf$2,$TypeError$4$2=TypeError,anInstance$1$2=function(o,a){if(isPrototypeOf$2$2(a,o))return o;throw $TypeError$4$2("Incorrect invocation")},wellKnownSymbol$6$2=wellKnownSymbol$e$2,TO_STRING_TAG$1$2=wellKnownSymbol$6$2("toStringTag"),test$3={};test$3[TO_STRING_TAG$1$2]="z";var toStringTagSupport$2=String(test$3)==="[object z]",TO_STRING_TAG_SUPPORT$2=toStringTagSupport$2,isCallable$5$2=isCallable$k$2,classofRaw$3=classofRaw$1$2,wellKnownSymbol$5$2=wellKnownSymbol$e$2,TO_STRING_TAG$5=wellKnownSymbol$5$2("toStringTag"),$Object$6=Object,CORRECT_ARGUMENTS$2=classofRaw$3(function(){return arguments}())=="Arguments",tryGet$2=function(o,a){try{return o[a]}catch{}},classof$3$2=TO_STRING_TAG_SUPPORT$2?classofRaw$3:function(o){var a,c,d;return o===void 0?"Undefined":o===null?"Null":typeof(c=tryGet$2(a=$Object$6(o),TO_STRING_TAG$5))=="string"?c:CORRECT_ARGUMENTS$2?classofRaw$3(a):(d=classofRaw$3(a))=="Object"&&isCallable$5$2(a.callee)?"Arguments":d},uncurryThis$2$2=functionUncurryThis$2,fails$2$2=fails$d$2,isCallable$4$2=isCallable$k$2,classof$2$2=classof$3$2,getBuiltIn$2$2=getBuiltIn$8$2,inspectSource$1$2=inspectSource$4$2,noop$2=function(){},empty$2=[],construct$2=getBuiltIn$2$2("Reflect","construct"),constructorRegExp$2=/^\s*(?:class|function)\b/,exec$5=uncurryThis$2$2(constructorRegExp$2.exec),INCORRECT_TO_STRING$2=!constructorRegExp$2.exec(noop$2),isConstructorModern$2=function o(a){if(!isCallable$4$2(a))return!1;try{return construct$2(noop$2,empty$2,a),!0}catch{return!1}},isConstructorLegacy$2=function o(a){if(!isCallable$4$2(a))return!1;switch(classof$2$2(a)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return INCORRECT_TO_STRING$2||!!exec$5(constructorRegExp$2,inspectSource$1$2(a))}catch{return!0}};isConstructorLegacy$2.sham=!0;var isConstructor$1$2=!construct$2||fails$2$2(function(){var o;return isConstructorModern$2(isConstructorModern$2.call)||!isConstructorModern$2(Object)||!isConstructorModern$2(function(){o=!0})||o})?isConstructorLegacy$2:isConstructorModern$2,isConstructor$4=isConstructor$1$2,tryToString$2$2=tryToString$4$2,$TypeError$3$2=TypeError,aConstructor$1$2=function(o){if(isConstructor$4(o))return o;throw $TypeError$3$2(tryToString$2$2(o)+" is not a constructor")},anObject$6$2=anObject$c$2,aConstructor$3=aConstructor$1$2,wellKnownSymbol$4$2=wellKnownSymbol$e$2,SPECIES$1$2=wellKnownSymbol$4$2("species"),speciesConstructor$1$2=function(o,a){var c=anObject$6$2(o).constructor,d;return c===void 0||(d=anObject$6$2(c)[SPECIES$1$2])==null?a:aConstructor$3(d)},NATIVE_BIND$1$2=functionBindNative$2,FunctionPrototype$4=Function.prototype,apply$1$2=FunctionPrototype$4.apply,call$8$2=FunctionPrototype$4.call,functionApply$2=typeof Reflect=="object"&&Reflect.apply||(NATIVE_BIND$1$2?call$8$2.bind(apply$1$2):function(){return call$8$2.apply(apply$1$2,arguments)}),uncurryThis$1$2=functionUncurryThis$2,aCallable$5$2=aCallable$7$2,NATIVE_BIND$5=functionBindNative$2,bind$4$2=uncurryThis$1$2(uncurryThis$1$2.bind),functionBindContext$2=function(o,a){return aCallable$5$2(o),a===void 0?o:NATIVE_BIND$5?bind$4$2(o,a):function(){return o.apply(a,arguments)}},uncurryThis$o=functionUncurryThis$2,arraySlice$1$2=uncurryThis$o([].slice),$TypeError$2$2=TypeError,validateArgumentsLength$1$2=function(o,a){if(o=51&&/native code/.test(o))return!1;var c=new NativePromiseConstructor$3$2(function(nt){nt(1)}),d=function(nt){nt(function(){},function(){})},tt=c.constructor={};return tt[SPECIES$5]=d,SUBCLASSING$2=c.then(function(){})instanceof d,SUBCLASSING$2?!a&&IS_BROWSER$3&&!NATIVE_PROMISE_REJECTION_EVENT$1$2:!0}),promiseConstructorDetection$2={CONSTRUCTOR:FORCED_PROMISE_CONSTRUCTOR$5$2,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT$1$2,SUBCLASSING:SUBCLASSING$2},newPromiseCapability$2$2={},aCallable$4$2=aCallable$7$2,PromiseCapability$2=function(o){var a,c;this.promise=new o(function(d,tt){if(a!==void 0||c!==void 0)throw TypeError("Bad Promise constructor");a=d,c=tt}),this.resolve=aCallable$4$2(a),this.reject=aCallable$4$2(c)};newPromiseCapability$2$2.f=function(o){return new PromiseCapability$2(o)};var $$5$2=_export$2,IS_NODE$5=engineIsNode$2,global$1$2=global$j$2,call$7$2=functionCall$2,defineBuiltIn$2$2=defineBuiltIn$6$2,setPrototypeOf$3=objectSetPrototypeOf$2,setToStringTag$7=setToStringTag$3$2,setSpecies$3=setSpecies$1$2,aCallable$3$2=aCallable$7$2,isCallable$1$2=isCallable$k$2,isObject$1$3=isObject$7$2,anInstance$5=anInstance$1$2,speciesConstructor$3=speciesConstructor$1$2,task$3=task$1$2.set,microtask$3=microtask$1$2,hostReportErrors$3=hostReportErrors$1$2,perform$2$2=perform$3$2,Queue$3=queue$3,InternalStateModule$7=internalState$2,NativePromiseConstructor$2$2=promiseNativeConstructor$2,PromiseConstructorDetection$2=promiseConstructorDetection$2,newPromiseCapabilityModule$3$2=newPromiseCapability$2$2,PROMISE$2="Promise",FORCED_PROMISE_CONSTRUCTOR$4$2=PromiseConstructorDetection$2.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT$3=PromiseConstructorDetection$2.REJECTION_EVENT,NATIVE_PROMISE_SUBCLASSING$2=PromiseConstructorDetection$2.SUBCLASSING,getInternalPromiseState$2=InternalStateModule$7.getterFor(PROMISE$2),setInternalState$6=InternalStateModule$7.set,NativePromisePrototype$1$2=NativePromiseConstructor$2$2&&NativePromiseConstructor$2$2.prototype,PromiseConstructor$2=NativePromiseConstructor$2$2,PromisePrototype$2=NativePromisePrototype$1$2,TypeError$1$2=global$1$2.TypeError,document$1$2=global$1$2.document,process$5=global$1$2.process,newPromiseCapability$1$2=newPromiseCapabilityModule$3$2.f,newGenericPromiseCapability$2=newPromiseCapability$1$2,DISPATCH_EVENT$2=!!(document$1$2&&document$1$2.createEvent&&global$1$2.dispatchEvent),UNHANDLED_REJECTION$2="unhandledrejection",REJECTION_HANDLED$2="rejectionhandled",PENDING$2=0,FULFILLED$2=1,REJECTED$2=2,HANDLED$2=1,UNHANDLED$2=2,Internal$2,OwnPromiseCapability$2,PromiseWrapper$2,nativeThen$2,isThenable$2=function(o){var a;return isObject$1$3(o)&&isCallable$1$2(a=o.then)?a:!1},callReaction$2=function(o,a){var c=a.value,d=a.state==FULFILLED$2,tt=d?o.ok:o.fail,nt=o.resolve,$a=o.reject,Ws=o.domain,gu,Su,$u;try{tt?(d||(a.rejection===UNHANDLED$2&&onHandleUnhandled$2(a),a.rejection=HANDLED$2),tt===!0?gu=c:(Ws&&Ws.enter(),gu=tt(c),Ws&&(Ws.exit(),$u=!0)),gu===o.promise?$a(TypeError$1$2("Promise-chain cycle")):(Su=isThenable$2(gu))?call$7$2(Su,gu,nt,$a):nt(gu)):$a(c)}catch(Iu){Ws&&!$u&&Ws.exit(),$a(Iu)}},notify$3=function(o,a){o.notified||(o.notified=!0,microtask$3(function(){for(var c=o.reactions,d;d=c.get();)callReaction$2(d,o);o.notified=!1,a&&!o.rejection&&onUnhandled$2(o)}))},dispatchEvent$2=function(o,a,c){var d,tt;DISPATCH_EVENT$2?(d=document$1$2.createEvent("Event"),d.promise=a,d.reason=c,d.initEvent(o,!1,!0),global$1$2.dispatchEvent(d)):d={promise:a,reason:c},!NATIVE_PROMISE_REJECTION_EVENT$3&&(tt=global$1$2["on"+o])?tt(d):o===UNHANDLED_REJECTION$2&&hostReportErrors$3("Unhandled promise rejection",c)},onUnhandled$2=function(o){call$7$2(task$3,global$1$2,function(){var a=o.facade,c=o.value,d=isUnhandled$2(o),tt;if(d&&(tt=perform$2$2(function(){IS_NODE$5?process$5.emit("unhandledRejection",c,a):dispatchEvent$2(UNHANDLED_REJECTION$2,a,c)}),o.rejection=IS_NODE$5||isUnhandled$2(o)?UNHANDLED$2:HANDLED$2,tt.error))throw tt.value})},isUnhandled$2=function(o){return o.rejection!==HANDLED$2&&!o.parent},onHandleUnhandled$2=function(o){call$7$2(task$3,global$1$2,function(){var a=o.facade;IS_NODE$5?process$5.emit("rejectionHandled",a):dispatchEvent$2(REJECTION_HANDLED$2,a,o.value)})},bind$1$2=function(o,a,c){return function(d){o(a,d,c)}},internalReject$2=function(o,a,c){o.done||(o.done=!0,c&&(o=c),o.value=a,o.state=REJECTED$2,notify$3(o,!0))},internalResolve$2=function(o,a,c){if(!o.done){o.done=!0,c&&(o=c);try{if(o.facade===a)throw TypeError$1$2("Promise can't be resolved itself");var d=isThenable$2(a);d?microtask$3(function(){var tt={done:!1};try{call$7$2(d,a,bind$1$2(internalResolve$2,tt,o),bind$1$2(internalReject$2,tt,o))}catch(nt){internalReject$2(tt,nt,o)}}):(o.value=a,o.state=FULFILLED$2,notify$3(o,!1))}catch(tt){internalReject$2({done:!1},tt,o)}}};if(FORCED_PROMISE_CONSTRUCTOR$4$2&&(PromiseConstructor$2=function(a){anInstance$5(this,PromisePrototype$2),aCallable$3$2(a),call$7$2(Internal$2,this);var c=getInternalPromiseState$2(this);try{a(bind$1$2(internalResolve$2,c),bind$1$2(internalReject$2,c))}catch(d){internalReject$2(c,d)}},PromisePrototype$2=PromiseConstructor$2.prototype,Internal$2=function(a){setInternalState$6(this,{type:PROMISE$2,done:!1,notified:!1,parent:!1,reactions:new Queue$3,rejection:!1,state:PENDING$2,value:void 0})},Internal$2.prototype=defineBuiltIn$2$2(PromisePrototype$2,"then",function(a,c){var d=getInternalPromiseState$2(this),tt=newPromiseCapability$1$2(speciesConstructor$3(this,PromiseConstructor$2));return d.parent=!0,tt.ok=isCallable$1$2(a)?a:!0,tt.fail=isCallable$1$2(c)&&c,tt.domain=IS_NODE$5?process$5.domain:void 0,d.state==PENDING$2?d.reactions.add(tt):microtask$3(function(){callReaction$2(tt,d)}),tt.promise}),OwnPromiseCapability$2=function(){var o=new Internal$2,a=getInternalPromiseState$2(o);this.promise=o,this.resolve=bind$1$2(internalResolve$2,a),this.reject=bind$1$2(internalReject$2,a)},newPromiseCapabilityModule$3$2.f=newPromiseCapability$1$2=function(o){return o===PromiseConstructor$2||o===PromiseWrapper$2?new OwnPromiseCapability$2(o):newGenericPromiseCapability$2(o)},isCallable$1$2(NativePromiseConstructor$2$2)&&NativePromisePrototype$1$2!==Object.prototype)){nativeThen$2=NativePromisePrototype$1$2.then,NATIVE_PROMISE_SUBCLASSING$2||defineBuiltIn$2$2(NativePromisePrototype$1$2,"then",function(a,c){var d=this;return new PromiseConstructor$2(function(tt,nt){call$7$2(nativeThen$2,d,tt,nt)}).then(a,c)},{unsafe:!0});try{delete NativePromisePrototype$1$2.constructor}catch{}setPrototypeOf$3&&setPrototypeOf$3(NativePromisePrototype$1$2,PromisePrototype$2)}$$5$2({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR$4$2},{Promise:PromiseConstructor$2});setToStringTag$7(PromiseConstructor$2,PROMISE$2,!1);setSpecies$3(PROMISE$2);var wellKnownSymbol$2$2=wellKnownSymbol$e$2,Iterators$1$2=iterators$2,ITERATOR$2$2=wellKnownSymbol$2$2("iterator"),ArrayPrototype$3=Array.prototype,isArrayIteratorMethod$1$2=function(o){return o!==void 0&&(Iterators$1$2.Array===o||ArrayPrototype$3[ITERATOR$2$2]===o)},classof$1$2=classof$3$2,getMethod$1$2=getMethod$3$2,Iterators$6=iterators$2,wellKnownSymbol$1$2=wellKnownSymbol$e$2,ITERATOR$1$2=wellKnownSymbol$1$2("iterator"),getIteratorMethod$2$2=function(o){if(o!=null)return getMethod$1$2(o,ITERATOR$1$2)||getMethod$1$2(o,"@@iterator")||Iterators$6[classof$1$2(o)]},call$6$2=functionCall$2,aCallable$2$2=aCallable$7$2,anObject$5$2=anObject$c$2,tryToString$1$2=tryToString$4$2,getIteratorMethod$1$2=getIteratorMethod$2$2,$TypeError$1$2=TypeError,getIterator$1$2=function(o,a){var c=arguments.length<2?getIteratorMethod$1$2(o):a;if(aCallable$2$2(c))return anObject$5$2(call$6$2(c,o));throw $TypeError$1$2(tryToString$1$2(o)+" is not iterable")},call$5$2=functionCall$2,anObject$4$2=anObject$c$2,getMethod$6=getMethod$3$2,iteratorClose$1$2=function(o,a,c){var d,tt;anObject$4$2(o);try{if(d=getMethod$6(o,"return"),!d){if(a==="throw")throw c;return c}d=call$5$2(d,o)}catch(nt){tt=!0,d=nt}if(a==="throw")throw c;if(tt)throw d;return anObject$4$2(d),c},bind$a=functionBindContext$2,call$4$2=functionCall$2,anObject$3$2=anObject$c$2,tryToString$7=tryToString$4$2,isArrayIteratorMethod$4=isArrayIteratorMethod$1$2,lengthOfArrayLike$7=lengthOfArrayLike$2$2,isPrototypeOf$1$2=objectIsPrototypeOf$2,getIterator$5=getIterator$1$2,getIteratorMethod$6=getIteratorMethod$2$2,iteratorClose$4=iteratorClose$1$2,$TypeError$g=TypeError,Result$2=function(o,a){this.stopped=o,this.result=a},ResultPrototype$2=Result$2.prototype,iterate$2$2=function(o,a,c){var d=c&&c.that,tt=!!(c&&c.AS_ENTRIES),nt=!!(c&&c.IS_ITERATOR),$a=!!(c&&c.INTERRUPTED),Ws=bind$a(a,d),gu,Su,$u,Iu,Xu,r0,p0,y0=function($0){return gu&&iteratorClose$4(gu,"normal",$0),new Result$2(!0,$0)},A0=function($0){return tt?(anObject$3$2($0),$a?Ws($0[0],$0[1],y0):Ws($0[0],$0[1])):$a?Ws($0,y0):Ws($0)};if(nt)gu=o;else{if(Su=getIteratorMethod$6(o),!Su)throw $TypeError$g(tryToString$7(o)+" is not iterable");if(isArrayIteratorMethod$4(Su)){for($u=0,Iu=lengthOfArrayLike$7(o);Iu>$u;$u++)if(Xu=A0(o[$u]),Xu&&isPrototypeOf$1$2(ResultPrototype$2,Xu))return Xu;return new Result$2(!1)}gu=getIterator$5(o,Su)}for(r0=gu.next;!(p0=call$4$2(r0,gu)).done;){try{Xu=A0(p0.value)}catch($0){iteratorClose$4(gu,"throw",$0)}if(typeof Xu=="object"&&Xu&&isPrototypeOf$1$2(ResultPrototype$2,Xu))return Xu}return new Result$2(!1)},wellKnownSymbol$k=wellKnownSymbol$e$2,ITERATOR$9=wellKnownSymbol$k("iterator"),SAFE_CLOSING$2=!1;try{var called$2=0,iteratorWithReturn$2={next:function(){return{done:!!called$2++}},return:function(){SAFE_CLOSING$2=!0}};iteratorWithReturn$2[ITERATOR$9]=function(){return this},Array.from(iteratorWithReturn$2,function(){throw 2})}catch(o){}var checkCorrectnessOfIteration$1$2=function(o,a){if(!a&&!SAFE_CLOSING$2)return!1;var c=!1;try{var d={};d[ITERATOR$9]=function(){return{next:function(){return{done:c=!0}}}},o(d)}catch{}return c},NativePromiseConstructor$1$2=promiseNativeConstructor$2,checkCorrectnessOfIteration$3=checkCorrectnessOfIteration$1$2,FORCED_PROMISE_CONSTRUCTOR$3$2=promiseConstructorDetection$2.CONSTRUCTOR,promiseStaticsIncorrectIteration$2=FORCED_PROMISE_CONSTRUCTOR$3$2||!checkCorrectnessOfIteration$3(function(o){NativePromiseConstructor$1$2.all(o).then(void 0,function(){})}),$$4$2=_export$2,call$3$2=functionCall$2,aCallable$1$2=aCallable$7$2,newPromiseCapabilityModule$2$2=newPromiseCapability$2$2,perform$1$2=perform$3$2,iterate$1$2=iterate$2$2,PROMISE_STATICS_INCORRECT_ITERATION$1$2=promiseStaticsIncorrectIteration$2;$$4$2({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$1$2},{all:function o(a){var c=this,d=newPromiseCapabilityModule$2$2.f(c),tt=d.resolve,nt=d.reject,$a=perform$1$2(function(){var Ws=aCallable$1$2(c.resolve),gu=[],Su=0,$u=1;iterate$1$2(a,function(Iu){var Xu=Su++,r0=!1;$u++,call$3$2(Ws,c,Iu).then(function(p0){r0||(r0=!0,gu[Xu]=p0,--$u||tt(gu))},nt)}),--$u||tt(gu)});return $a.error&&nt($a.value),d.promise}});var $$3$2=_export$2,FORCED_PROMISE_CONSTRUCTOR$2$2=promiseConstructorDetection$2.CONSTRUCTOR,NativePromiseConstructor$5=promiseNativeConstructor$2,getBuiltIn$1$2=getBuiltIn$8$2,isCallable$p=isCallable$k$2,defineBuiltIn$1$2=defineBuiltIn$6$2,NativePromisePrototype$3=NativePromiseConstructor$5&&NativePromiseConstructor$5.prototype;$$3$2({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR$2$2,real:!0},{catch:function(o){return this.then(void 0,o)}});if(isCallable$p(NativePromiseConstructor$5)){var method$2=getBuiltIn$1$2("Promise").prototype.catch;NativePromisePrototype$3.catch!==method$2&&defineBuiltIn$1$2(NativePromisePrototype$3,"catch",method$2,{unsafe:!0})}var $$2$2=_export$2,call$2$2=functionCall$2,aCallable$b=aCallable$7$2,newPromiseCapabilityModule$1$2=newPromiseCapability$2$2,perform$5=perform$3$2,iterate$4=iterate$2$2,PROMISE_STATICS_INCORRECT_ITERATION$3=promiseStaticsIncorrectIteration$2;$$2$2({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$3},{race:function o(a){var c=this,d=newPromiseCapabilityModule$1$2.f(c),tt=d.reject,nt=perform$5(function(){var $a=aCallable$b(c.resolve);iterate$4(a,function(Ws){call$2$2($a,c,Ws).then(d.resolve,tt)})});return nt.error&&tt(nt.value),d.promise}});var $$1$3=_export$2,call$1$2=functionCall$2,newPromiseCapabilityModule$5=newPromiseCapability$2$2,FORCED_PROMISE_CONSTRUCTOR$1$2=promiseConstructorDetection$2.CONSTRUCTOR;$$1$3({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$1$2},{reject:function o(a){var c=newPromiseCapabilityModule$5.f(this);return call$1$2(c.reject,void 0,a),c.promise}});var anObject$2$2=anObject$c$2,isObject$b=isObject$7$2,newPromiseCapability$4=newPromiseCapability$2$2,promiseResolve$1$2=function(o,a){if(anObject$2$2(o),isObject$b(a)&&a.constructor===o)return a;var c=newPromiseCapability$4.f(o),d=c.resolve;return d(a),c.promise},$$g=_export$2,getBuiltIn$a=getBuiltIn$8$2,FORCED_PROMISE_CONSTRUCTOR$7=promiseConstructorDetection$2.CONSTRUCTOR,promiseResolve$3=promiseResolve$1$2;getBuiltIn$a("Promise");$$g({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$7},{resolve:function o(a){return promiseResolve$3(this,a)}});var classof$9=classof$3$2,$String$5=String,toString$8=function(o){if(classof$9(o)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return $String$5(o)},anObject$1$2=anObject$c$2,regexpFlags$3=function(){var o=anObject$1$2(this),a="";return o.hasIndices&&(a+="d"),o.global&&(a+="g"),o.ignoreCase&&(a+="i"),o.multiline&&(a+="m"),o.dotAll&&(a+="s"),o.unicode&&(a+="u"),o.unicodeSets&&(a+="v"),o.sticky&&(a+="y"),a},call$m=functionCall$2,hasOwn$e=hasOwnProperty_1$2,isPrototypeOf$6=objectIsPrototypeOf$2,regExpFlags$2=regexpFlags$3,RegExpPrototype$1$2=RegExp.prototype,regexpGetFlags$2=function(o){var a=o.flags;return a===void 0&&!("flags"in RegExpPrototype$1$2)&&!hasOwn$e(o,"flags")&&isPrototypeOf$6(RegExpPrototype$1$2,o)?call$m(regExpFlags$2,o):a},PROPER_FUNCTION_NAME$3=functionName$2.PROPER,defineBuiltIn$c=defineBuiltIn$6$2,anObject$i=anObject$c$2,$toString$4=toString$8,fails$m=fails$d$2,getRegExpFlags$2=regexpGetFlags$2,TO_STRING$2="toString",RegExpPrototype$4=RegExp.prototype,n$ToString$2=RegExpPrototype$4[TO_STRING$2],NOT_GENERIC$2=fails$m(function(){return n$ToString$2.call({source:"a",flags:"b"})!="/a/b"}),INCORRECT_NAME$2=PROPER_FUNCTION_NAME$3&&n$ToString$2.name!=TO_STRING$2;(NOT_GENERIC$2||INCORRECT_NAME$2)&&defineBuiltIn$c(RegExp.prototype,TO_STRING$2,function(){var a=anObject$i(this),c=$toString$4(a.source),d=$toString$4(getRegExpFlags$2(a));return"/"+c+"/"+d},{unsafe:!0});typeof SuppressedError=="function"&&SuppressedError;var commonjsGlobal$1=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},check$1=function(o){return o&&o.Math==Math&&o},global$o=check$1(typeof globalThis=="object"&&globalThis)||check$1(typeof window=="object"&&window)||check$1(typeof self=="object"&&self)||check$1(typeof commonjsGlobal$1=="object"&&commonjsGlobal$1)||function(){return this}()||Function("return this")(),objectGetOwnPropertyDescriptor$1={},fails$k=function(o){try{return!!o()}catch{return!0}},fails$j=fails$k,descriptors$1=!fails$j(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),fails$i=fails$k,functionBindNative$1=!fails$i(function(){var o=(function(){}).bind();return typeof o!="function"||o.hasOwnProperty("prototype")}),NATIVE_BIND$3$1=functionBindNative$1,call$k=Function.prototype.call,functionCall$1=NATIVE_BIND$3$1?call$k.bind(call$k):function(){return call$k.apply(call$k,arguments)},objectPropertyIsEnumerable$1={},$propertyIsEnumerable$1={}.propertyIsEnumerable,getOwnPropertyDescriptor$3=Object.getOwnPropertyDescriptor,NASHORN_BUG$1=getOwnPropertyDescriptor$3&&!$propertyIsEnumerable$1.call({1:2},1);objectPropertyIsEnumerable$1.f=NASHORN_BUG$1?function o(a){var c=getOwnPropertyDescriptor$3(this,a);return!!c&&c.enumerable}:$propertyIsEnumerable$1;var createPropertyDescriptor$5=function(o,a){return{enumerable:!(o&1),configurable:!(o&2),writable:!(o&4),value:a}},NATIVE_BIND$2$1=functionBindNative$1,FunctionPrototype$2$1=Function.prototype,bind$8=FunctionPrototype$2$1.bind,call$j=FunctionPrototype$2$1.call,uncurryThis$m=NATIVE_BIND$2$1&&bind$8.bind(call$j,call$j),functionUncurryThis$1=NATIVE_BIND$2$1?function(o){return o&&uncurryThis$m(o)}:function(o){return o&&function(){return call$j.apply(o,arguments)}},uncurryThis$l=functionUncurryThis$1,toString$6$1=uncurryThis$l({}.toString),stringSlice$6=uncurryThis$l("".slice),classofRaw$1$1=function(o){return stringSlice$6(toString$6$1(o),8,-1)},uncurryThis$k=functionUncurryThis$1,fails$h$1=fails$k,classof$7=classofRaw$1$1,$Object$4$1=Object,split$3=uncurryThis$k("".split),indexedObject$1=fails$h$1(function(){return!$Object$4$1("z").propertyIsEnumerable(0)})?function(o){return classof$7(o)=="String"?split$3(o,""):$Object$4$1(o)}:$Object$4$1,$TypeError$c$1=TypeError,requireObjectCoercible$4=function(o){if(o==null)throw $TypeError$c$1("Can't call method on "+o);return o},IndexedObject$1$1=indexedObject$1,requireObjectCoercible$3$1=requireObjectCoercible$4,toIndexedObject$5$1=function(o){return IndexedObject$1$1(requireObjectCoercible$3$1(o))},isCallable$n=function(o){return typeof o=="function"},isCallable$m=isCallable$n,isObject$8$1=function(o){return typeof o=="object"?o!==null:isCallable$m(o)},global$n=global$o,isCallable$l$1=isCallable$n,aFunction$1=function(o){return isCallable$l$1(o)?o:void 0},getBuiltIn$8$1=function(o,a){return arguments.length<2?aFunction$1(global$n[o]):global$n[o]&&global$n[o][a]},uncurryThis$j=functionUncurryThis$1,objectIsPrototypeOf$1=uncurryThis$j({}.isPrototypeOf),getBuiltIn$7$1=getBuiltIn$8$1,engineUserAgent$1=getBuiltIn$7$1("navigator","userAgent")||"",global$m=global$o,userAgent$3$1=engineUserAgent$1,process$3$1=global$m.process,Deno$1$1=global$m.Deno,versions$1=process$3$1&&process$3$1.versions||Deno$1$1&&Deno$1$1.version,v8$1=versions$1&&versions$1.v8,match$1,version$4;v8$1&&(match$1=v8$1.split("."),version$4=match$1[0]>0&&match$1[0]<4?1:+(match$1[0]+match$1[1]));!version$4&&userAgent$3$1&&(match$1=userAgent$3$1.match(/Edge\/(\d+)/),(!match$1||match$1[1]>=74)&&(match$1=userAgent$3$1.match(/Chrome\/(\d+)/),match$1&&(version$4=+match$1[1])));var engineV8Version$1=version$4,V8_VERSION$1$1=engineV8Version$1,fails$g$1=fails$k,nativeSymbol$1=!!Object.getOwnPropertySymbols&&!fails$g$1(function(){var o=Symbol();return!String(o)||!(Object(o)instanceof Symbol)||!Symbol.sham&&V8_VERSION$1$1&&V8_VERSION$1$1<41}),NATIVE_SYMBOL$1$1=nativeSymbol$1,useSymbolAsUid$1=NATIVE_SYMBOL$1$1&&!Symbol.sham&&typeof Symbol.iterator=="symbol",getBuiltIn$6$1=getBuiltIn$8$1,isCallable$k$1=isCallable$n,isPrototypeOf$3$1=objectIsPrototypeOf$1,USE_SYMBOL_AS_UID$1$1=useSymbolAsUid$1,$Object$3$1=Object,isSymbol$2$1=USE_SYMBOL_AS_UID$1$1?function(o){return typeof o=="symbol"}:function(o){var a=getBuiltIn$6$1("Symbol");return isCallable$k$1(a)&&isPrototypeOf$3$1(a.prototype,$Object$3$1(o))},$String$3$1=String,tryToString$4$1=function(o){try{return $String$3$1(o)}catch{return"Object"}},isCallable$j$1=isCallable$n,tryToString$3$1=tryToString$4$1,$TypeError$b$1=TypeError,aCallable$7$1=function(o){if(isCallable$j$1(o))return o;throw $TypeError$b$1(tryToString$3$1(o)+" is not a function")},aCallable$6$1=aCallable$7$1,getMethod$4=function(o,a){var c=o[a];return c==null?void 0:aCallable$6$1(c)},call$i=functionCall$1,isCallable$i$1=isCallable$n,isObject$7$1=isObject$8$1,$TypeError$a$1=TypeError,ordinaryToPrimitive$1$1=function(o,a){var c,d;if(a==="string"&&isCallable$i$1(c=o.toString)&&!isObject$7$1(d=call$i(c,o))||isCallable$i$1(c=o.valueOf)&&!isObject$7$1(d=call$i(c,o))||a!=="string"&&isCallable$i$1(c=o.toString)&&!isObject$7$1(d=call$i(c,o)))return d;throw $TypeError$a$1("Can't convert object to primitive value")},shared$4={exports:{}},isPure=!1,global$l=global$o,defineProperty$6$1=Object.defineProperty,defineGlobalProperty$3$1=function(o,a){try{defineProperty$6$1(global$l,o,{value:a,configurable:!0,writable:!0})}catch{global$l[o]=a}return a},global$k$1=global$o,defineGlobalProperty$2$1=defineGlobalProperty$3$1,SHARED$1="__core-js_shared__",store$3$1=global$k$1[SHARED$1]||defineGlobalProperty$2$1(SHARED$1,{}),sharedStore$1=store$3$1,store$2$1=sharedStore$1;(shared$4.exports=function(o,a){return store$2$1[o]||(store$2$1[o]=a!==void 0?a:{})})("versions",[]).push({version:"3.23.3",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"});var requireObjectCoercible$2$1=requireObjectCoercible$4,$Object$2$1=Object,toObject$5$1=function(o){return $Object$2$1(requireObjectCoercible$2$1(o))},uncurryThis$i=functionUncurryThis$1,toObject$4$1=toObject$5$1,hasOwnProperty$1=uncurryThis$i({}.hasOwnProperty),hasOwnProperty_1$1=Object.hasOwn||function o(a,c){return hasOwnProperty$1(toObject$4$1(a),c)},uncurryThis$h$1=functionUncurryThis$1,id$2=0,postfix$1=Math.random(),toString$5$1=uncurryThis$h$1(1 .toString),uid$2$1=function(o){return"Symbol("+(o===void 0?"":o)+")_"+toString$5$1(++id$2+postfix$1,36)},global$j$1=global$o,shared$3$1=shared$4.exports,hasOwn$c=hasOwnProperty_1$1,uid$1$1=uid$2$1,NATIVE_SYMBOL$3=nativeSymbol$1,USE_SYMBOL_AS_UID$2=useSymbolAsUid$1,WellKnownSymbolsStore$1=shared$3$1("wks"),Symbol$1$1=global$j$1.Symbol,symbolFor$1=Symbol$1$1&&Symbol$1$1.for,createWellKnownSymbol$1=USE_SYMBOL_AS_UID$2?Symbol$1$1:Symbol$1$1&&Symbol$1$1.withoutSetter||uid$1$1,wellKnownSymbol$i=function(o){if(!hasOwn$c(WellKnownSymbolsStore$1,o)||!(NATIVE_SYMBOL$3||typeof WellKnownSymbolsStore$1[o]=="string")){var a="Symbol."+o;NATIVE_SYMBOL$3&&hasOwn$c(Symbol$1$1,o)?WellKnownSymbolsStore$1[o]=Symbol$1$1[o]:USE_SYMBOL_AS_UID$2&&symbolFor$1?WellKnownSymbolsStore$1[o]=symbolFor$1(a):WellKnownSymbolsStore$1[o]=createWellKnownSymbol$1(a)}return WellKnownSymbolsStore$1[o]},call$h=functionCall$1,isObject$6$1=isObject$8$1,isSymbol$1$1=isSymbol$2$1,getMethod$3$1=getMethod$4,ordinaryToPrimitive$2=ordinaryToPrimitive$1$1,wellKnownSymbol$h=wellKnownSymbol$i,$TypeError$9$1=TypeError,TO_PRIMITIVE$1=wellKnownSymbol$h("toPrimitive"),toPrimitive$1$1=function(o,a){if(!isObject$6$1(o)||isSymbol$1$1(o))return o;var c=getMethod$3$1(o,TO_PRIMITIVE$1),d;if(c){if(a===void 0&&(a="default"),d=call$h(c,o,a),!isObject$6$1(d)||isSymbol$1$1(d))return d;throw $TypeError$9$1("Can't convert object to primitive value")}return a===void 0&&(a="number"),ordinaryToPrimitive$2(o,a)},toPrimitive$2=toPrimitive$1$1,isSymbol$3=isSymbol$2$1,toPropertyKey$3$1=function(o){var a=toPrimitive$2(o,"string");return isSymbol$3(a)?a:a+""},global$i$1=global$o,isObject$5$1=isObject$8$1,document$3$1=global$i$1.document,EXISTS$1$1=isObject$5$1(document$3$1)&&isObject$5$1(document$3$1.createElement),documentCreateElement$2$1=function(o){return EXISTS$1$1?document$3$1.createElement(o):{}},DESCRIPTORS$c=descriptors$1,fails$f$1=fails$k,createElement$1$1=documentCreateElement$2$1,ie8DomDefine$1=!DESCRIPTORS$c&&!fails$f$1(function(){return Object.defineProperty(createElement$1$1("div"),"a",{get:function(){return 7}}).a!=7}),DESCRIPTORS$b$1=descriptors$1,call$g=functionCall$1,propertyIsEnumerableModule$1$1=objectPropertyIsEnumerable$1,createPropertyDescriptor$4$1=createPropertyDescriptor$5,toIndexedObject$4$1=toIndexedObject$5$1,toPropertyKey$2$1=toPropertyKey$3$1,hasOwn$b$1=hasOwnProperty_1$1,IE8_DOM_DEFINE$1$1=ie8DomDefine$1,$getOwnPropertyDescriptor$1$1=Object.getOwnPropertyDescriptor;objectGetOwnPropertyDescriptor$1.f=DESCRIPTORS$b$1?$getOwnPropertyDescriptor$1$1:function o(a,c){if(a=toIndexedObject$4$1(a),c=toPropertyKey$2$1(c),IE8_DOM_DEFINE$1$1)try{return $getOwnPropertyDescriptor$1$1(a,c)}catch{}if(hasOwn$b$1(a,c))return createPropertyDescriptor$4$1(!call$g(propertyIsEnumerableModule$1$1.f,a,c),a[c])};var objectDefineProperty$1={},DESCRIPTORS$a$1=descriptors$1,fails$e$1=fails$k,v8PrototypeDefineBug$1=DESCRIPTORS$a$1&&fails$e$1(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42}),isObject$4$1=isObject$8$1,$String$2$1=String,$TypeError$8$1=TypeError,anObject$g=function(o){if(isObject$4$1(o))return o;throw $TypeError$8$1($String$2$1(o)+" is not an object")},DESCRIPTORS$9$1=descriptors$1,IE8_DOM_DEFINE$2=ie8DomDefine$1,V8_PROTOTYPE_DEFINE_BUG$1$1=v8PrototypeDefineBug$1,anObject$f=anObject$g,toPropertyKey$1$1=toPropertyKey$3$1,$TypeError$7$1=TypeError,$defineProperty$1=Object.defineProperty,$getOwnPropertyDescriptor$2=Object.getOwnPropertyDescriptor,ENUMERABLE$1="enumerable",CONFIGURABLE$1$1="configurable",WRITABLE$1="writable";objectDefineProperty$1.f=DESCRIPTORS$9$1?V8_PROTOTYPE_DEFINE_BUG$1$1?function o(a,c,d){if(anObject$f(a),c=toPropertyKey$1$1(c),anObject$f(d),typeof a=="function"&&c==="prototype"&&"value"in d&&WRITABLE$1 in d&&!d[WRITABLE$1]){var tt=$getOwnPropertyDescriptor$2(a,c);tt&&tt[WRITABLE$1]&&(a[c]=d.value,d={configurable:CONFIGURABLE$1$1 in d?d[CONFIGURABLE$1$1]:tt[CONFIGURABLE$1$1],enumerable:ENUMERABLE$1 in d?d[ENUMERABLE$1]:tt[ENUMERABLE$1],writable:!1})}return $defineProperty$1(a,c,d)}:$defineProperty$1:function o(a,c,d){if(anObject$f(a),c=toPropertyKey$1$1(c),anObject$f(d),IE8_DOM_DEFINE$2)try{return $defineProperty$1(a,c,d)}catch{}if("get"in d||"set"in d)throw $TypeError$7$1("Accessors not supported");return"value"in d&&(a[c]=d.value),a};var DESCRIPTORS$8$1=descriptors$1,definePropertyModule$5$1=objectDefineProperty$1,createPropertyDescriptor$3$1=createPropertyDescriptor$5,createNonEnumerableProperty$5=DESCRIPTORS$8$1?function(o,a,c){return definePropertyModule$5$1.f(o,a,createPropertyDescriptor$3$1(1,c))}:function(o,a,c){return o[a]=c,o},makeBuiltIn$3={exports:{}},DESCRIPTORS$7$1=descriptors$1,hasOwn$a$1=hasOwnProperty_1$1,FunctionPrototype$1$1=Function.prototype,getDescriptor$1=DESCRIPTORS$7$1&&Object.getOwnPropertyDescriptor,EXISTS$2=hasOwn$a$1(FunctionPrototype$1$1,"name"),PROPER$1=EXISTS$2&&(function o(){}).name==="something",CONFIGURABLE$2=EXISTS$2&&(!DESCRIPTORS$7$1||DESCRIPTORS$7$1&&getDescriptor$1(FunctionPrototype$1$1,"name").configurable),functionName$1={EXISTS:EXISTS$2,PROPER:PROPER$1,CONFIGURABLE:CONFIGURABLE$2},uncurryThis$g$1=functionUncurryThis$1,isCallable$h$1=isCallable$n,store$1$1=sharedStore$1,functionToString$1=uncurryThis$g$1(Function.toString);isCallable$h$1(store$1$1.inspectSource)||(store$1$1.inspectSource=function(o){return functionToString$1(o)});var inspectSource$4$1=store$1$1.inspectSource,global$h$1=global$o,isCallable$g$1=isCallable$n,inspectSource$3$1=inspectSource$4$1,WeakMap$1$1=global$h$1.WeakMap,nativeWeakMap$1=isCallable$g$1(WeakMap$1$1)&&/native code/.test(inspectSource$3$1(WeakMap$1$1)),shared$2$1=shared$4.exports,uid$3=uid$2$1,keys$1=shared$2$1("keys"),sharedKey$3$1=function(o){return keys$1[o]||(keys$1[o]=uid$3(o))},hiddenKeys$4$1={},NATIVE_WEAK_MAP$1=nativeWeakMap$1,global$g$1=global$o,uncurryThis$f$1=functionUncurryThis$1,isObject$3$2=isObject$8$1,createNonEnumerableProperty$4$1=createNonEnumerableProperty$5,hasOwn$9$1=hasOwnProperty_1$1,shared$1$1=sharedStore$1,sharedKey$2$1=sharedKey$3$1,hiddenKeys$3$1=hiddenKeys$4$1,OBJECT_ALREADY_INITIALIZED$1="Object already initialized",TypeError$4=global$g$1.TypeError,WeakMap$3=global$g$1.WeakMap,set$1$1,get$1,has$2,enforce$1=function(o){return has$2(o)?get$1(o):set$1$1(o,{})},getterFor$1=function(o){return function(a){var c;if(!isObject$3$2(a)||(c=get$1(a)).type!==o)throw TypeError$4("Incompatible receiver, "+o+" required");return c}};if(NATIVE_WEAK_MAP$1||shared$1$1.state){var store$5=shared$1$1.state||(shared$1$1.state=new WeakMap$3),wmget$1=uncurryThis$f$1(store$5.get),wmhas$1=uncurryThis$f$1(store$5.has),wmset$1=uncurryThis$f$1(store$5.set);set$1$1=function(o,a){if(wmhas$1(store$5,o))throw new TypeError$4(OBJECT_ALREADY_INITIALIZED$1);return a.facade=o,wmset$1(store$5,o,a),a},get$1=function(o){return wmget$1(store$5,o)||{}},has$2=function(o){return wmhas$1(store$5,o)}}else{var STATE$1=sharedKey$2$1("state");hiddenKeys$3$1[STATE$1]=!0,set$1$1=function(o,a){if(hasOwn$9$1(o,STATE$1))throw new TypeError$4(OBJECT_ALREADY_INITIALIZED$1);return a.facade=o,createNonEnumerableProperty$4$1(o,STATE$1,a),a},get$1=function(o){return hasOwn$9$1(o,STATE$1)?o[STATE$1]:{}},has$2=function(o){return hasOwn$9$1(o,STATE$1)}}var internalState$1={set:set$1$1,get:get$1,has:has$2,enforce:enforce$1,getterFor:getterFor$1},fails$d$1=fails$k,isCallable$f$1=isCallable$n,hasOwn$8$1=hasOwnProperty_1$1,DESCRIPTORS$6$1=descriptors$1,CONFIGURABLE_FUNCTION_NAME$1$1=functionName$1.CONFIGURABLE,inspectSource$2$1=inspectSource$4$1,InternalStateModule$5=internalState$1,enforceInternalState$1=InternalStateModule$5.enforce,getInternalState$3=InternalStateModule$5.get,defineProperty$5$1=Object.defineProperty,CONFIGURABLE_LENGTH$1=DESCRIPTORS$6$1&&!fails$d$1(function(){return defineProperty$5$1(function(){},"length",{value:8}).length!==8}),TEMPLATE$1=String(String).split("String"),makeBuiltIn$2$1=makeBuiltIn$3.exports=function(o,a,c){String(a).slice(0,7)==="Symbol("&&(a="["+String(a).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),c&&c.getter&&(a="get "+a),c&&c.setter&&(a="set "+a),(!hasOwn$8$1(o,"name")||CONFIGURABLE_FUNCTION_NAME$1$1&&o.name!==a)&&(DESCRIPTORS$6$1?defineProperty$5$1(o,"name",{value:a,configurable:!0}):o.name=a),CONFIGURABLE_LENGTH$1&&c&&hasOwn$8$1(c,"arity")&&o.length!==c.arity&&defineProperty$5$1(o,"length",{value:c.arity});try{c&&hasOwn$8$1(c,"constructor")&&c.constructor?DESCRIPTORS$6$1&&defineProperty$5$1(o,"prototype",{writable:!1}):o.prototype&&(o.prototype=void 0)}catch{}var d=enforceInternalState$1(o);return hasOwn$8$1(d,"source")||(d.source=TEMPLATE$1.join(typeof a=="string"?a:"")),o};Function.prototype.toString=makeBuiltIn$2$1(function o(){return isCallable$f$1(this)&&getInternalState$3(this).source||inspectSource$2$1(this)},"toString");var isCallable$e$1=isCallable$n,definePropertyModule$4$1=objectDefineProperty$1,makeBuiltIn$1$1=makeBuiltIn$3.exports,defineGlobalProperty$1$1=defineGlobalProperty$3$1,defineBuiltIn$a=function(o,a,c,d){d||(d={});var tt=d.enumerable,nt=d.name!==void 0?d.name:a;if(isCallable$e$1(c)&&makeBuiltIn$1$1(c,nt,d),d.global)tt?o[a]=c:defineGlobalProperty$1$1(a,c);else{try{d.unsafe?o[a]&&(tt=!0):delete o[a]}catch{}tt?o[a]=c:definePropertyModule$4$1.f(o,a,{value:c,enumerable:!1,configurable:!d.nonConfigurable,writable:!d.nonWritable})}return o},objectGetOwnPropertyNames$1={},ceil$1=Math.ceil,floor$4=Math.floor,mathTrunc$1=Math.trunc||function o(a){var c=+a;return(c>0?floor$4:ceil$1)(c)},trunc$1=mathTrunc$1,toIntegerOrInfinity$4=function(o){var a=+o;return a!==a||a===0?0:trunc$1(a)},toIntegerOrInfinity$3=toIntegerOrInfinity$4,max$2$1=Math.max,min$2$1=Math.min,toAbsoluteIndex$2$1=function(o,a){var c=toIntegerOrInfinity$3(o);return c<0?max$2$1(c+a,0):min$2$1(c,a)},toIntegerOrInfinity$2$1=toIntegerOrInfinity$4,min$1$1=Math.min,toLength$2=function(o){return o>0?min$1$1(toIntegerOrInfinity$2$1(o),9007199254740991):0},toLength$1$1=toLength$2,lengthOfArrayLike$4$1=function(o){return toLength$1$1(o.length)},toIndexedObject$3$1=toIndexedObject$5$1,toAbsoluteIndex$1$1=toAbsoluteIndex$2$1,lengthOfArrayLike$3$1=lengthOfArrayLike$4$1,createMethod$1$1=function(o){return function(a,c,d){var tt=toIndexedObject$3$1(a),nt=lengthOfArrayLike$3$1(tt),$a=toAbsoluteIndex$1$1(d,nt),Ws;if(o&&c!=c){for(;nt>$a;)if(Ws=tt[$a++],Ws!=Ws)return!0}else for(;nt>$a;$a++)if((o||$a in tt)&&tt[$a]===c)return o||$a||0;return!o&&-1}},arrayIncludes$1={includes:createMethod$1$1(!0),indexOf:createMethod$1$1(!1)},uncurryThis$e$1=functionUncurryThis$1,hasOwn$7$1=hasOwnProperty_1$1,toIndexedObject$2$1=toIndexedObject$5$1,indexOf$1=arrayIncludes$1.indexOf,hiddenKeys$2$1=hiddenKeys$4$1,push$4=uncurryThis$e$1([].push),objectKeysInternal$1=function(o,a){var c=toIndexedObject$2$1(o),d=0,tt=[],nt;for(nt in c)!hasOwn$7$1(hiddenKeys$2$1,nt)&&hasOwn$7$1(c,nt)&&push$4(tt,nt);for(;a.length>d;)hasOwn$7$1(c,nt=a[d++])&&(~indexOf$1(tt,nt)||push$4(tt,nt));return tt},enumBugKeys$3$1=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],internalObjectKeys$1$1=objectKeysInternal$1,enumBugKeys$2$1=enumBugKeys$3$1,hiddenKeys$1$1=enumBugKeys$2$1.concat("length","prototype");objectGetOwnPropertyNames$1.f=Object.getOwnPropertyNames||function o(a){return internalObjectKeys$1$1(a,hiddenKeys$1$1)};var objectGetOwnPropertySymbols$1={};objectGetOwnPropertySymbols$1.f=Object.getOwnPropertySymbols;var getBuiltIn$5$1=getBuiltIn$8$1,uncurryThis$d$1=functionUncurryThis$1,getOwnPropertyNamesModule$1=objectGetOwnPropertyNames$1,getOwnPropertySymbolsModule$1$1=objectGetOwnPropertySymbols$1,anObject$e=anObject$g,concat$2=uncurryThis$d$1([].concat),ownKeys$1$1=getBuiltIn$5$1("Reflect","ownKeys")||function o(a){var c=getOwnPropertyNamesModule$1.f(anObject$e(a)),d=getOwnPropertySymbolsModule$1$1.f;return d?concat$2(c,d(a)):c},hasOwn$6$1=hasOwnProperty_1$1,ownKeys$3=ownKeys$1$1,getOwnPropertyDescriptorModule$1=objectGetOwnPropertyDescriptor$1,definePropertyModule$3$1=objectDefineProperty$1,copyConstructorProperties$1$1=function(o,a,c){for(var d=ownKeys$3(a),tt=definePropertyModule$3$1.f,nt=getOwnPropertyDescriptorModule$1.f,$a=0;$ant;)for(var gu=IndexedObject$3(arguments[nt++]),Su=$a?concat$1$1(objectKeys$1$1(gu),$a(gu)):objectKeys$1$1(gu),$u=Su.length,Iu=0,Xu;$u>Iu;)Xu=Su[Iu++],(!DESCRIPTORS$5$1||call$f$1(Ws,gu,Xu))&&(d[Xu]=gu[Xu]);return d}:$assign$1,$$a$1=_export$1,assign$1$1=objectAssign$1;$$a$1({target:"Object",stat:!0,arity:2,forced:Object.assign!==assign$1$1},{assign:assign$1$1});var wellKnownSymbol$g$1=wellKnownSymbol$i,TO_STRING_TAG$3$1=wellKnownSymbol$g$1("toStringTag"),test$2={};test$2[TO_STRING_TAG$3$1]="z";var toStringTagSupport$1=String(test$2)==="[object z]",TO_STRING_TAG_SUPPORT$1=toStringTagSupport$1,isCallable$c$1=isCallable$n,classofRaw$2=classofRaw$1$1,wellKnownSymbol$f$1=wellKnownSymbol$i,TO_STRING_TAG$2$1=wellKnownSymbol$f$1("toStringTag"),$Object$1$1=Object,CORRECT_ARGUMENTS$1=classofRaw$2(function(){return arguments}())=="Arguments",tryGet$1=function(o,a){try{return o[a]}catch{}},classof$6$1=TO_STRING_TAG_SUPPORT$1?classofRaw$2:function(o){var a,c,d;return o===void 0?"Undefined":o===null?"Null":typeof(c=tryGet$1(a=$Object$1$1(o),TO_STRING_TAG$2$1))=="string"?c:CORRECT_ARGUMENTS$1?classofRaw$2(a):(d=classofRaw$2(a))=="Object"&&isCallable$c$1(a.callee)?"Arguments":d},classof$5$1=classof$6$1,$String$1$1=String,toString$4$1=function(o){if(classof$5$1(o)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return $String$1$1(o)},anObject$d=anObject$g,regexpFlags$1=function(){var o=anObject$d(this),a="";return o.hasIndices&&(a+="d"),o.global&&(a+="g"),o.ignoreCase&&(a+="i"),o.multiline&&(a+="m"),o.dotAll&&(a+="s"),o.unicode&&(a+="u"),o.unicodeSets&&(a+="v"),o.sticky&&(a+="y"),a},call$e$1=functionCall$1,hasOwn$5$1=hasOwnProperty_1$1,isPrototypeOf$2$1=objectIsPrototypeOf$1,regExpFlags$1=regexpFlags$1,RegExpPrototype$2=RegExp.prototype,regexpGetFlags$1=function(o){var a=o.flags;return a===void 0&&!("flags"in RegExpPrototype$2)&&!hasOwn$5$1(o,"flags")&&isPrototypeOf$2$1(RegExpPrototype$2,o)?call$e$1(regExpFlags$1,o):a},PROPER_FUNCTION_NAME$1$1=functionName$1.PROPER,defineBuiltIn$8=defineBuiltIn$a,anObject$c$1=anObject$g,$toString$2=toString$4$1,fails$a$1=fails$k,getRegExpFlags$1=regexpGetFlags$1,TO_STRING$1="toString",RegExpPrototype$1$1=RegExp.prototype,n$ToString$1=RegExpPrototype$1$1[TO_STRING$1],NOT_GENERIC$1=fails$a$1(function(){return n$ToString$1.call({source:"a",flags:"b"})!="/a/b"}),INCORRECT_NAME$1=PROPER_FUNCTION_NAME$1$1&&n$ToString$1.name!=TO_STRING$1;(NOT_GENERIC$1||INCORRECT_NAME$1)&&defineBuiltIn$8(RegExp.prototype,TO_STRING$1,function(){var a=anObject$c$1(this),c=$toString$2(a.source),d=$toString$2(getRegExpFlags$1(a));return"/"+c+"/"+d},{unsafe:!0});var objectDefineProperties$1={},DESCRIPTORS$4$1=descriptors$1,V8_PROTOTYPE_DEFINE_BUG$2=v8PrototypeDefineBug$1,definePropertyModule$2$1=objectDefineProperty$1,anObject$b$1=anObject$g,toIndexedObject$1$1=toIndexedObject$5$1,objectKeys$3=objectKeys$2$1;objectDefineProperties$1.f=DESCRIPTORS$4$1&&!V8_PROTOTYPE_DEFINE_BUG$2?Object.defineProperties:function o(a,c){anObject$b$1(a);for(var d=toIndexedObject$1$1(c),tt=objectKeys$3(c),nt=tt.length,$a=0,Ws;nt>$a;)definePropertyModule$2$1.f(a,Ws=tt[$a++],d[Ws]);return a};var getBuiltIn$4$1=getBuiltIn$8$1,html$2$1=getBuiltIn$4$1("document","documentElement"),anObject$a$1=anObject$g,definePropertiesModule$1=objectDefineProperties$1,enumBugKeys$4=enumBugKeys$3$1,hiddenKeys$5=hiddenKeys$4$1,html$1$1=html$2$1,documentCreateElement$1$1=documentCreateElement$2$1,sharedKey$1$1=sharedKey$3$1,GT$1=">",LT$1="<",PROTOTYPE$1="prototype",SCRIPT$1="script",IE_PROTO$1$1=sharedKey$1$1("IE_PROTO"),EmptyConstructor$1=function(){},scriptTag$1=function(o){return LT$1+SCRIPT$1+GT$1+o+LT$1+"/"+SCRIPT$1+GT$1},NullProtoObjectViaActiveX$1=function(o){o.write(scriptTag$1("")),o.close();var a=o.parentWindow.Object;return o=null,a},NullProtoObjectViaIFrame$1=function(){var o=documentCreateElement$1$1("iframe"),a="java"+SCRIPT$1+":",c;return o.style.display="none",html$1$1.appendChild(o),o.src=String(a),c=o.contentWindow.document,c.open(),c.write(scriptTag$1("document.F=Object")),c.close(),c.F},activeXDocument$1,NullProtoObject$1=function(){try{activeXDocument$1=new ActiveXObject("htmlfile")}catch{}NullProtoObject$1=typeof document<"u"?document.domain&&activeXDocument$1?NullProtoObjectViaActiveX$1(activeXDocument$1):NullProtoObjectViaIFrame$1():NullProtoObjectViaActiveX$1(activeXDocument$1);for(var o=enumBugKeys$4.length;o--;)delete NullProtoObject$1[PROTOTYPE$1][enumBugKeys$4[o]];return NullProtoObject$1()};hiddenKeys$5[IE_PROTO$1$1]=!0;var objectCreate$1=Object.create||function o(a,c){var d;return a!==null?(EmptyConstructor$1[PROTOTYPE$1]=anObject$a$1(a),d=new EmptyConstructor$1,EmptyConstructor$1[PROTOTYPE$1]=null,d[IE_PROTO$1$1]=a):d=NullProtoObject$1(),c===void 0?d:definePropertiesModule$1.f(d,c)},wellKnownSymbol$e$1=wellKnownSymbol$i,create$3=objectCreate$1,defineProperty$3$1=objectDefineProperty$1.f,UNSCOPABLES$1=wellKnownSymbol$e$1("unscopables"),ArrayPrototype$1$1=Array.prototype;ArrayPrototype$1$1[UNSCOPABLES$1]==null&&defineProperty$3$1(ArrayPrototype$1$1,UNSCOPABLES$1,{configurable:!0,value:create$3(null)});var addToUnscopables$1$1=function(o){ArrayPrototype$1$1[UNSCOPABLES$1][o]=!0},iterators$1={},fails$9$1=fails$k,correctPrototypeGetter$1=!fails$9$1(function(){function o(){}return o.prototype.constructor=null,Object.getPrototypeOf(new o)!==o.prototype}),hasOwn$4$1=hasOwnProperty_1$1,isCallable$b$1=isCallable$n,toObject$2$1=toObject$5$1,sharedKey$4=sharedKey$3$1,CORRECT_PROTOTYPE_GETTER$1=correctPrototypeGetter$1,IE_PROTO$2=sharedKey$4("IE_PROTO"),$Object$5=Object,ObjectPrototype$1=$Object$5.prototype,objectGetPrototypeOf$1=CORRECT_PROTOTYPE_GETTER$1?$Object$5.getPrototypeOf:function(o){var a=toObject$2$1(o);if(hasOwn$4$1(a,IE_PROTO$2))return a[IE_PROTO$2];var c=a.constructor;return isCallable$b$1(c)&&a instanceof c?c.prototype:a instanceof $Object$5?ObjectPrototype$1:null},fails$8$1=fails$k,isCallable$a$1=isCallable$n,getPrototypeOf$1$1=objectGetPrototypeOf$1,defineBuiltIn$7=defineBuiltIn$a,wellKnownSymbol$d$1=wellKnownSymbol$i,ITERATOR$7=wellKnownSymbol$d$1("iterator"),BUGGY_SAFARI_ITERATORS$1$1=!1,IteratorPrototype$2$1,PrototypeOfArrayIteratorPrototype$1,arrayIterator$1;[].keys&&(arrayIterator$1=[].keys(),"next"in arrayIterator$1?(PrototypeOfArrayIteratorPrototype$1=getPrototypeOf$1$1(getPrototypeOf$1$1(arrayIterator$1)),PrototypeOfArrayIteratorPrototype$1!==Object.prototype&&(IteratorPrototype$2$1=PrototypeOfArrayIteratorPrototype$1)):BUGGY_SAFARI_ITERATORS$1$1=!0);var NEW_ITERATOR_PROTOTYPE$1=IteratorPrototype$2$1==null||fails$8$1(function(){var o={};return IteratorPrototype$2$1[ITERATOR$7].call(o)!==o});NEW_ITERATOR_PROTOTYPE$1&&(IteratorPrototype$2$1={});isCallable$a$1(IteratorPrototype$2$1[ITERATOR$7])||defineBuiltIn$7(IteratorPrototype$2$1,ITERATOR$7,function(){return this});var iteratorsCore$1={IteratorPrototype:IteratorPrototype$2$1,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS$1$1},defineProperty$2$1=objectDefineProperty$1.f,hasOwn$3$1=hasOwnProperty_1$1,wellKnownSymbol$c$1=wellKnownSymbol$i,TO_STRING_TAG$1$1=wellKnownSymbol$c$1("toStringTag"),setToStringTag$5=function(o,a,c){o&&!c&&(o=o.prototype),o&&!hasOwn$3$1(o,TO_STRING_TAG$1$1)&&defineProperty$2$1(o,TO_STRING_TAG$1$1,{configurable:!0,value:a})},IteratorPrototype$1$1=iteratorsCore$1.IteratorPrototype,create$2=objectCreate$1,createPropertyDescriptor$2$1=createPropertyDescriptor$5,setToStringTag$4=setToStringTag$5,Iterators$4$1=iterators$1,returnThis$1$1=function(){return this},createIteratorConstructor$2=function(o,a,c,d){var tt=a+" Iterator";return o.prototype=create$2(IteratorPrototype$1$1,{next:createPropertyDescriptor$2$1(+!d,c)}),setToStringTag$4(o,tt,!1),Iterators$4$1[tt]=returnThis$1$1,o},isCallable$9$1=isCallable$n,$String$4=String,$TypeError$6$1=TypeError,aPossiblePrototype$1$1=function(o){if(typeof o=="object"||isCallable$9$1(o))return o;throw $TypeError$6$1("Can't set "+$String$4(o)+" as a prototype")},uncurryThis$b$1=functionUncurryThis$1,anObject$9$1=anObject$g,aPossiblePrototype$2=aPossiblePrototype$1$1,objectSetPrototypeOf$1=Object.setPrototypeOf||("__proto__"in{}?function(){var o=!1,a={},c;try{c=uncurryThis$b$1(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set),c(a,[]),o=a instanceof Array}catch{}return function(tt,nt){return anObject$9$1(tt),aPossiblePrototype$2(nt),o?c(tt,nt):tt.__proto__=nt,tt}}():void 0),$$9$1=_export$1,call$d$1=functionCall$1,FunctionName$1=functionName$1,isCallable$8$1=isCallable$n,createIteratorConstructor$1$1=createIteratorConstructor$2,getPrototypeOf$2=objectGetPrototypeOf$1,setPrototypeOf$1$1=objectSetPrototypeOf$1,setToStringTag$3$1=setToStringTag$5,createNonEnumerableProperty$2$1=createNonEnumerableProperty$5,defineBuiltIn$6$1=defineBuiltIn$a,wellKnownSymbol$b$1=wellKnownSymbol$i,Iterators$3$1=iterators$1,IteratorsCore$1=iteratorsCore$1,PROPER_FUNCTION_NAME$2=FunctionName$1.PROPER,CONFIGURABLE_FUNCTION_NAME$2=FunctionName$1.CONFIGURABLE,IteratorPrototype$3=IteratorsCore$1.IteratorPrototype,BUGGY_SAFARI_ITERATORS$2=IteratorsCore$1.BUGGY_SAFARI_ITERATORS,ITERATOR$6=wellKnownSymbol$b$1("iterator"),KEYS$1="keys",VALUES$1="values",ENTRIES$1="entries",returnThis$2=function(){return this},defineIterator$2=function(o,a,c,d,tt,nt,$a){createIteratorConstructor$1$1(c,a,d);var Ws=function($0){if($0===tt&&Xu)return Xu;if(!BUGGY_SAFARI_ITERATORS$2&&$0 in $u)return $u[$0];switch($0){case KEYS$1:return function(){return new c(this,$0)};case VALUES$1:return function(){return new c(this,$0)};case ENTRIES$1:return function(){return new c(this,$0)}}return function(){return new c(this)}},gu=a+" Iterator",Su=!1,$u=o.prototype,Iu=$u[ITERATOR$6]||$u["@@iterator"]||tt&&$u[tt],Xu=!BUGGY_SAFARI_ITERATORS$2&&Iu||Ws(tt),r0=a=="Array"&&$u.entries||Iu,p0,y0,A0;if(r0&&(p0=getPrototypeOf$2(r0.call(new o)),p0!==Object.prototype&&p0.next&&(getPrototypeOf$2(p0)!==IteratorPrototype$3&&(setPrototypeOf$1$1?setPrototypeOf$1$1(p0,IteratorPrototype$3):isCallable$8$1(p0[ITERATOR$6])||defineBuiltIn$6$1(p0,ITERATOR$6,returnThis$2)),setToStringTag$3$1(p0,gu,!0))),PROPER_FUNCTION_NAME$2&&tt==VALUES$1&&Iu&&Iu.name!==VALUES$1&&(CONFIGURABLE_FUNCTION_NAME$2?createNonEnumerableProperty$2$1($u,"name",VALUES$1):(Su=!0,Xu=function(){return call$d$1(Iu,this)})),tt)if(y0={values:Ws(VALUES$1),keys:nt?Xu:Ws(KEYS$1),entries:Ws(ENTRIES$1)},$a)for(A0 in y0)(BUGGY_SAFARI_ITERATORS$2||Su||!(A0 in $u))&&defineBuiltIn$6$1($u,A0,y0[A0]);else $$9$1({target:a,proto:!0,forced:BUGGY_SAFARI_ITERATORS$2||Su},y0);return $u[ITERATOR$6]!==Xu&&defineBuiltIn$6$1($u,ITERATOR$6,Xu,{name:tt}),Iterators$3$1[a]=Xu,y0},toIndexedObject$6=toIndexedObject$5$1,addToUnscopables$3=addToUnscopables$1$1,Iterators$2$1=iterators$1,InternalStateModule$4=internalState$1,defineProperty$1$1=objectDefineProperty$1.f,defineIterator$1$1=defineIterator$2,DESCRIPTORS$3$1=descriptors$1,ARRAY_ITERATOR$1="Array Iterator",setInternalState$4=InternalStateModule$4.set,getInternalState$2=InternalStateModule$4.getterFor(ARRAY_ITERATOR$1),es_array_iterator$1=defineIterator$1$1(Array,"Array",function(o,a){setInternalState$4(this,{type:ARRAY_ITERATOR$1,target:toIndexedObject$6(o),index:0,kind:a})},function(){var o=getInternalState$2(this),a=o.target,c=o.kind,d=o.index++;return!a||d>=a.length?(o.target=void 0,{value:void 0,done:!0}):c=="keys"?{value:d,done:!1}:c=="values"?{value:a[d],done:!1}:{value:[d,a[d]],done:!1}},"values"),values$1=Iterators$2$1.Arguments=Iterators$2$1.Array;addToUnscopables$3("keys");addToUnscopables$3("values");addToUnscopables$3("entries");if(DESCRIPTORS$3$1&&values$1.name!=="values")try{defineProperty$1$1(values$1,"name",{value:"values"})}catch(o){}var classof$4$1=classofRaw$1$1,global$e$1=global$o,engineIsNode$1=classof$4$1(global$e$1.process)=="process",getBuiltIn$3$1=getBuiltIn$8$1,definePropertyModule$1$1=objectDefineProperty$1,wellKnownSymbol$a$1=wellKnownSymbol$i,DESCRIPTORS$2$1=descriptors$1,SPECIES$3=wellKnownSymbol$a$1("species"),setSpecies$1$1=function(o){var a=getBuiltIn$3$1(o),c=definePropertyModule$1$1.f;DESCRIPTORS$2$1&&a&&!a[SPECIES$3]&&c(a,SPECIES$3,{configurable:!0,get:function(){return this}})},isPrototypeOf$1$1=objectIsPrototypeOf$1,$TypeError$5$1=TypeError,anInstance$3=function(o,a){if(isPrototypeOf$1$1(a,o))return o;throw $TypeError$5$1("Incorrect invocation")},uncurryThis$a$1=functionUncurryThis$1,fails$7$1=fails$k,isCallable$7$1=isCallable$n,classof$3$1=classof$6$1,getBuiltIn$2$1=getBuiltIn$8$1,inspectSource$1$1=inspectSource$4$1,noop$1=function(){},empty$1=[],construct$1=getBuiltIn$2$1("Reflect","construct"),constructorRegExp$1=/^\s*(?:class|function)\b/,exec$3=uncurryThis$a$1(constructorRegExp$1.exec),INCORRECT_TO_STRING$1=!constructorRegExp$1.exec(noop$1),isConstructorModern$1=function o(a){if(!isCallable$7$1(a))return!1;try{return construct$1(noop$1,empty$1,a),!0}catch{return!1}},isConstructorLegacy$1=function o(a){if(!isCallable$7$1(a))return!1;switch(classof$3$1(a)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return INCORRECT_TO_STRING$1||!!exec$3(constructorRegExp$1,inspectSource$1$1(a))}catch{return!0}};isConstructorLegacy$1.sham=!0;var isConstructor$2=!construct$1||fails$7$1(function(){var o;return isConstructorModern$1(isConstructorModern$1.call)||!isConstructorModern$1(Object)||!isConstructorModern$1(function(){o=!0})||o})?isConstructorLegacy$1:isConstructorModern$1,isConstructor$1$1=isConstructor$2,tryToString$2$1=tryToString$4$1,$TypeError$4$1=TypeError,aConstructor$1$1=function(o){if(isConstructor$1$1(o))return o;throw $TypeError$4$1(tryToString$2$1(o)+" is not a constructor")},anObject$8$1=anObject$g,aConstructor$2=aConstructor$1$1,wellKnownSymbol$9$1=wellKnownSymbol$i,SPECIES$2$1=wellKnownSymbol$9$1("species"),speciesConstructor$1$1=function(o,a){var c=anObject$8$1(o).constructor,d;return c===void 0||(d=anObject$8$1(c)[SPECIES$2$1])==null?a:aConstructor$2(d)},NATIVE_BIND$1$1=functionBindNative$1,FunctionPrototype$3=Function.prototype,apply$2=FunctionPrototype$3.apply,call$c$1=FunctionPrototype$3.call,functionApply$1=typeof Reflect=="object"&&Reflect.apply||(NATIVE_BIND$1$1?call$c$1.bind(apply$2):function(){return call$c$1.apply(apply$2,arguments)}),uncurryThis$9$1=functionUncurryThis$1,aCallable$5$1=aCallable$7$1,NATIVE_BIND$4=functionBindNative$1,bind$7=uncurryThis$9$1(uncurryThis$9$1.bind),functionBindContext$1=function(o,a){return aCallable$5$1(o),a===void 0?o:NATIVE_BIND$4?bind$7(o,a):function(){return o.apply(a,arguments)}},uncurryThis$8$1=functionUncurryThis$1,arraySlice$3=uncurryThis$8$1([].slice),$TypeError$3$1=TypeError,validateArgumentsLength$3=function(o,a){if(o=51&&/native code/.test(o))return!1;var c=new NativePromiseConstructor$3$1(function(nt){nt(1)}),d=function(nt){nt(function(){},function(){})},tt=c.constructor={};return tt[SPECIES$1$1]=d,SUBCLASSING$1=c.then(function(){})instanceof d,SUBCLASSING$1?!a&&IS_BROWSER$2&&!NATIVE_PROMISE_REJECTION_EVENT$1$1:!0}),promiseConstructorDetection$1={CONSTRUCTOR:FORCED_PROMISE_CONSTRUCTOR$5$1,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT$1$1,SUBCLASSING:SUBCLASSING$1},newPromiseCapability$2$1={},aCallable$4$1=aCallable$7$1,PromiseCapability$1=function(o){var a,c;this.promise=new o(function(d,tt){if(a!==void 0||c!==void 0)throw TypeError("Bad Promise constructor");a=d,c=tt}),this.resolve=aCallable$4$1(a),this.reject=aCallable$4$1(c)};newPromiseCapability$2$1.f=function(o){return new PromiseCapability$1(o)};var $$8$1=_export$1,IS_NODE$4=engineIsNode$1,global$7$1=global$o,call$b$1=functionCall$1,defineBuiltIn$5$1=defineBuiltIn$a,setPrototypeOf$2=objectSetPrototypeOf$1,setToStringTag$2$1=setToStringTag$5,setSpecies$2=setSpecies$1$1,aCallable$3$1=aCallable$7$1,isCallable$4$1=isCallable$n,isObject$2$2=isObject$8$1,anInstance$2=anInstance$3,speciesConstructor$2=speciesConstructor$1$1,task$2=task$1$1.set,microtask$2=microtask$1$1,hostReportErrors$2=hostReportErrors$1$1,perform$2$1=perform$3$1,Queue$2=queue$2,InternalStateModule$3=internalState$1,NativePromiseConstructor$2$1=promiseNativeConstructor$1,PromiseConstructorDetection$1=promiseConstructorDetection$1,newPromiseCapabilityModule$3$1=newPromiseCapability$2$1,PROMISE$1="Promise",FORCED_PROMISE_CONSTRUCTOR$4$1=PromiseConstructorDetection$1.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT$2=PromiseConstructorDetection$1.REJECTION_EVENT,NATIVE_PROMISE_SUBCLASSING$1=PromiseConstructorDetection$1.SUBCLASSING,getInternalPromiseState$1=InternalStateModule$3.getterFor(PROMISE$1),setInternalState$3=InternalStateModule$3.set,NativePromisePrototype$1$1=NativePromiseConstructor$2$1&&NativePromiseConstructor$2$1.prototype,PromiseConstructor$1=NativePromiseConstructor$2$1,PromisePrototype$1=NativePromisePrototype$1$1,TypeError$3=global$7$1.TypeError,document$1$1=global$7$1.document,process$4=global$7$1.process,newPromiseCapability$1$1=newPromiseCapabilityModule$3$1.f,newGenericPromiseCapability$1=newPromiseCapability$1$1,DISPATCH_EVENT$1=!!(document$1$1&&document$1$1.createEvent&&global$7$1.dispatchEvent),UNHANDLED_REJECTION$1="unhandledrejection",REJECTION_HANDLED$1="rejectionhandled",PENDING$1=0,FULFILLED$1=1,REJECTED$1=2,HANDLED$1=1,UNHANDLED$1=2,Internal$1,OwnPromiseCapability$1,PromiseWrapper$1,nativeThen$1,isThenable$1=function(o){var a;return isObject$2$2(o)&&isCallable$4$1(a=o.then)?a:!1},callReaction$1=function(o,a){var c=a.value,d=a.state==FULFILLED$1,tt=d?o.ok:o.fail,nt=o.resolve,$a=o.reject,Ws=o.domain,gu,Su,$u;try{tt?(d||(a.rejection===UNHANDLED$1&&onHandleUnhandled$1(a),a.rejection=HANDLED$1),tt===!0?gu=c:(Ws&&Ws.enter(),gu=tt(c),Ws&&(Ws.exit(),$u=!0)),gu===o.promise?$a(TypeError$3("Promise-chain cycle")):(Su=isThenable$1(gu))?call$b$1(Su,gu,nt,$a):nt(gu)):$a(c)}catch(Iu){Ws&&!$u&&Ws.exit(),$a(Iu)}},notify$2=function(o,a){o.notified||(o.notified=!0,microtask$2(function(){for(var c=o.reactions,d;d=c.get();)callReaction$1(d,o);o.notified=!1,a&&!o.rejection&&onUnhandled$1(o)}))},dispatchEvent$1=function(o,a,c){var d,tt;DISPATCH_EVENT$1?(d=document$1$1.createEvent("Event"),d.promise=a,d.reason=c,d.initEvent(o,!1,!0),global$7$1.dispatchEvent(d)):d={promise:a,reason:c},!NATIVE_PROMISE_REJECTION_EVENT$2&&(tt=global$7$1["on"+o])?tt(d):o===UNHANDLED_REJECTION$1&&hostReportErrors$2("Unhandled promise rejection",c)},onUnhandled$1=function(o){call$b$1(task$2,global$7$1,function(){var a=o.facade,c=o.value,d=isUnhandled$1(o),tt;if(d&&(tt=perform$2$1(function(){IS_NODE$4?process$4.emit("unhandledRejection",c,a):dispatchEvent$1(UNHANDLED_REJECTION$1,a,c)}),o.rejection=IS_NODE$4||isUnhandled$1(o)?UNHANDLED$1:HANDLED$1,tt.error))throw tt.value})},isUnhandled$1=function(o){return o.rejection!==HANDLED$1&&!o.parent},onHandleUnhandled$1=function(o){call$b$1(task$2,global$7$1,function(){var a=o.facade;IS_NODE$4?process$4.emit("rejectionHandled",a):dispatchEvent$1(REJECTION_HANDLED$1,a,o.value)})},bind$4$1=function(o,a,c){return function(d){o(a,d,c)}},internalReject$1=function(o,a,c){o.done||(o.done=!0,c&&(o=c),o.value=a,o.state=REJECTED$1,notify$2(o,!0))},internalResolve$1=function(o,a,c){if(!o.done){o.done=!0,c&&(o=c);try{if(o.facade===a)throw TypeError$3("Promise can't be resolved itself");var d=isThenable$1(a);d?microtask$2(function(){var tt={done:!1};try{call$b$1(d,a,bind$4$1(internalResolve$1,tt,o),bind$4$1(internalReject$1,tt,o))}catch(nt){internalReject$1(tt,nt,o)}}):(o.value=a,o.state=FULFILLED$1,notify$2(o,!1))}catch(tt){internalReject$1({done:!1},tt,o)}}};if(FORCED_PROMISE_CONSTRUCTOR$4$1&&(PromiseConstructor$1=function(a){anInstance$2(this,PromisePrototype$1),aCallable$3$1(a),call$b$1(Internal$1,this);var c=getInternalPromiseState$1(this);try{a(bind$4$1(internalResolve$1,c),bind$4$1(internalReject$1,c))}catch(d){internalReject$1(c,d)}},PromisePrototype$1=PromiseConstructor$1.prototype,Internal$1=function(a){setInternalState$3(this,{type:PROMISE$1,done:!1,notified:!1,parent:!1,reactions:new Queue$2,rejection:!1,state:PENDING$1,value:void 0})},Internal$1.prototype=defineBuiltIn$5$1(PromisePrototype$1,"then",function(a,c){var d=getInternalPromiseState$1(this),tt=newPromiseCapability$1$1(speciesConstructor$2(this,PromiseConstructor$1));return d.parent=!0,tt.ok=isCallable$4$1(a)?a:!0,tt.fail=isCallable$4$1(c)&&c,tt.domain=IS_NODE$4?process$4.domain:void 0,d.state==PENDING$1?d.reactions.add(tt):microtask$2(function(){callReaction$1(tt,d)}),tt.promise}),OwnPromiseCapability$1=function(){var o=new Internal$1,a=getInternalPromiseState$1(o);this.promise=o,this.resolve=bind$4$1(internalResolve$1,a),this.reject=bind$4$1(internalReject$1,a)},newPromiseCapabilityModule$3$1.f=newPromiseCapability$1$1=function(o){return o===PromiseConstructor$1||o===PromiseWrapper$1?new OwnPromiseCapability$1(o):newGenericPromiseCapability$1(o)},isCallable$4$1(NativePromiseConstructor$2$1)&&NativePromisePrototype$1$1!==Object.prototype)){nativeThen$1=NativePromisePrototype$1$1.then,NATIVE_PROMISE_SUBCLASSING$1||defineBuiltIn$5$1(NativePromisePrototype$1$1,"then",function(a,c){var d=this;return new PromiseConstructor$1(function(tt,nt){call$b$1(nativeThen$1,d,tt,nt)}).then(a,c)},{unsafe:!0});try{delete NativePromisePrototype$1$1.constructor}catch{}setPrototypeOf$2&&setPrototypeOf$2(NativePromisePrototype$1$1,PromisePrototype$1)}$$8$1({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR$4$1},{Promise:PromiseConstructor$1});setToStringTag$2$1(PromiseConstructor$1,PROMISE$1,!1);setSpecies$2(PROMISE$1);var wellKnownSymbol$7$1=wellKnownSymbol$i,Iterators$1$1=iterators$1,ITERATOR$5$1=wellKnownSymbol$7$1("iterator"),ArrayPrototype$2=Array.prototype,isArrayIteratorMethod$2=function(o){return o!==void 0&&(Iterators$1$1.Array===o||ArrayPrototype$2[ITERATOR$5$1]===o)},classof$2$1=classof$6$1,getMethod$2$1=getMethod$4,Iterators$5=iterators$1,wellKnownSymbol$6$1=wellKnownSymbol$i,ITERATOR$4$1=wellKnownSymbol$6$1("iterator"),getIteratorMethod$4=function(o){if(o!=null)return getMethod$2$1(o,ITERATOR$4$1)||getMethod$2$1(o,"@@iterator")||Iterators$5[classof$2$1(o)]},call$a$1=functionCall$1,aCallable$2$1=aCallable$7$1,anObject$7$1=anObject$g,tryToString$1$1=tryToString$4$1,getIteratorMethod$3=getIteratorMethod$4,$TypeError$2$1=TypeError,getIterator$3=function(o,a){var c=arguments.length<2?getIteratorMethod$3(o):a;if(aCallable$2$1(c))return anObject$7$1(call$a$1(c,o));throw $TypeError$2$1(tryToString$1$1(o)+" is not iterable")},call$9$1=functionCall$1,anObject$6$1=anObject$g,getMethod$1$1=getMethod$4,iteratorClose$2=function(o,a,c){var d,tt;anObject$6$1(o);try{if(d=getMethod$1$1(o,"return"),!d){if(a==="throw")throw c;return c}d=call$9$1(d,o)}catch(nt){tt=!0,d=nt}if(a==="throw")throw c;if(tt)throw d;return anObject$6$1(d),c},bind$3$1=functionBindContext$1,call$8$1=functionCall$1,anObject$5$1=anObject$g,tryToString$6=tryToString$4$1,isArrayIteratorMethod$1$1=isArrayIteratorMethod$2,lengthOfArrayLike$2$1=lengthOfArrayLike$4$1,isPrototypeOf$5=objectIsPrototypeOf$1,getIterator$2=getIterator$3,getIteratorMethod$2$1=getIteratorMethod$4,iteratorClose$1$1=iteratorClose$2,$TypeError$1$1=TypeError,Result$1=function(o,a){this.stopped=o,this.result=a},ResultPrototype$1=Result$1.prototype,iterate$2$1=function(o,a,c){var d=c&&c.that,tt=!!(c&&c.AS_ENTRIES),nt=!!(c&&c.IS_ITERATOR),$a=!!(c&&c.INTERRUPTED),Ws=bind$3$1(a,d),gu,Su,$u,Iu,Xu,r0,p0,y0=function($0){return gu&&iteratorClose$1$1(gu,"normal",$0),new Result$1(!0,$0)},A0=function($0){return tt?(anObject$5$1($0),$a?Ws($0[0],$0[1],y0):Ws($0[0],$0[1])):$a?Ws($0,y0):Ws($0)};if(nt)gu=o;else{if(Su=getIteratorMethod$2$1(o),!Su)throw $TypeError$1$1(tryToString$6(o)+" is not iterable");if(isArrayIteratorMethod$1$1(Su)){for($u=0,Iu=lengthOfArrayLike$2$1(o);Iu>$u;$u++)if(Xu=A0(o[$u]),Xu&&isPrototypeOf$5(ResultPrototype$1,Xu))return Xu;return new Result$1(!1)}gu=getIterator$2(o,Su)}for(r0=gu.next;!(p0=call$8$1(r0,gu)).done;){try{Xu=A0(p0.value)}catch($0){iteratorClose$1$1(gu,"throw",$0)}if(typeof Xu=="object"&&Xu&&isPrototypeOf$5(ResultPrototype$1,Xu))return Xu}return new Result$1(!1)},wellKnownSymbol$5$1=wellKnownSymbol$i,ITERATOR$3$1=wellKnownSymbol$5$1("iterator"),SAFE_CLOSING$1=!1;try{var called$1=0,iteratorWithReturn$1={next:function(){return{done:!!called$1++}},return:function(){SAFE_CLOSING$1=!0}};iteratorWithReturn$1[ITERATOR$3$1]=function(){return this},Array.from(iteratorWithReturn$1,function(){throw 2})}catch(o){}var checkCorrectnessOfIteration$1$1=function(o,a){if(!a&&!SAFE_CLOSING$1)return!1;var c=!1;try{var d={};d[ITERATOR$3$1]=function(){return{next:function(){return{done:c=!0}}}},o(d)}catch{}return c},NativePromiseConstructor$1$1=promiseNativeConstructor$1,checkCorrectnessOfIteration$2=checkCorrectnessOfIteration$1$1,FORCED_PROMISE_CONSTRUCTOR$3$1=promiseConstructorDetection$1.CONSTRUCTOR,promiseStaticsIncorrectIteration$1=FORCED_PROMISE_CONSTRUCTOR$3$1||!checkCorrectnessOfIteration$2(function(o){NativePromiseConstructor$1$1.all(o).then(void 0,function(){})}),$$7$1=_export$1,call$7$1=functionCall$1,aCallable$1$1=aCallable$7$1,newPromiseCapabilityModule$2$1=newPromiseCapability$2$1,perform$1$1=perform$3$1,iterate$1$1=iterate$2$1,PROMISE_STATICS_INCORRECT_ITERATION$1$1=promiseStaticsIncorrectIteration$1;$$7$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$1$1},{all:function o(a){var c=this,d=newPromiseCapabilityModule$2$1.f(c),tt=d.resolve,nt=d.reject,$a=perform$1$1(function(){var Ws=aCallable$1$1(c.resolve),gu=[],Su=0,$u=1;iterate$1$1(a,function(Iu){var Xu=Su++,r0=!1;$u++,call$7$1(Ws,c,Iu).then(function(p0){r0||(r0=!0,gu[Xu]=p0,--$u||tt(gu))},nt)}),--$u||tt(gu)});return $a.error&&nt($a.value),d.promise}});var $$6$1=_export$1,FORCED_PROMISE_CONSTRUCTOR$2$1=promiseConstructorDetection$1.CONSTRUCTOR,NativePromiseConstructor$4=promiseNativeConstructor$1,getBuiltIn$1$1=getBuiltIn$8$1,isCallable$3$1=isCallable$n,defineBuiltIn$4$1=defineBuiltIn$a,NativePromisePrototype$2=NativePromiseConstructor$4&&NativePromiseConstructor$4.prototype;$$6$1({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR$2$1,real:!0},{catch:function(o){return this.then(void 0,o)}});if(isCallable$3$1(NativePromiseConstructor$4)){var method$1=getBuiltIn$1$1("Promise").prototype.catch;NativePromisePrototype$2.catch!==method$1&&defineBuiltIn$4$1(NativePromisePrototype$2,"catch",method$1,{unsafe:!0})}var $$5$1=_export$1,call$6$1=functionCall$1,aCallable$a=aCallable$7$1,newPromiseCapabilityModule$1$1=newPromiseCapability$2$1,perform$4=perform$3$1,iterate$3=iterate$2$1,PROMISE_STATICS_INCORRECT_ITERATION$2=promiseStaticsIncorrectIteration$1;$$5$1({target:"Promise",stat:!0,forced:PROMISE_STATICS_INCORRECT_ITERATION$2},{race:function o(a){var c=this,d=newPromiseCapabilityModule$1$1.f(c),tt=d.reject,nt=perform$4(function(){var $a=aCallable$a(c.resolve);iterate$3(a,function(Ws){call$6$1($a,c,Ws).then(d.resolve,tt)})});return nt.error&&tt(nt.value),d.promise}});var $$4$1=_export$1,call$5$1=functionCall$1,newPromiseCapabilityModule$4=newPromiseCapability$2$1,FORCED_PROMISE_CONSTRUCTOR$1$1=promiseConstructorDetection$1.CONSTRUCTOR;$$4$1({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$1$1},{reject:function o(a){var c=newPromiseCapabilityModule$4.f(this);return call$5$1(c.reject,void 0,a),c.promise}});var anObject$4$1=anObject$g,isObject$1$2=isObject$8$1,newPromiseCapability$3=newPromiseCapability$2$1,promiseResolve$1$1=function(o,a){if(anObject$4$1(o),isObject$1$2(a)&&a.constructor===o)return a;var c=newPromiseCapability$3.f(o),d=c.resolve;return d(a),c.promise},$$3$1=_export$1,getBuiltIn$9=getBuiltIn$8$1,FORCED_PROMISE_CONSTRUCTOR$6=promiseConstructorDetection$1.CONSTRUCTOR,promiseResolve$2=promiseResolve$1$1;getBuiltIn$9("Promise");$$3$1({target:"Promise",stat:!0,forced:FORCED_PROMISE_CONSTRUCTOR$6},{resolve:function o(a){return promiseResolve$2(this,a)}});var domIterables$1={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},documentCreateElement$3=documentCreateElement$2$1,classList$1=documentCreateElement$3("span").classList,DOMTokenListPrototype$1$1=classList$1&&classList$1.constructor&&classList$1.constructor.prototype,domTokenListPrototype$1=DOMTokenListPrototype$1$1===Object.prototype?void 0:DOMTokenListPrototype$1$1,global$6$1=global$o,DOMIterables$1=domIterables$1,DOMTokenListPrototype$2=domTokenListPrototype$1,ArrayIteratorMethods$1=es_array_iterator$1,createNonEnumerableProperty$1$1=createNonEnumerableProperty$5,wellKnownSymbol$4$1=wellKnownSymbol$i,ITERATOR$2$1=wellKnownSymbol$4$1("iterator"),TO_STRING_TAG$4=wellKnownSymbol$4$1("toStringTag"),ArrayValues$1=ArrayIteratorMethods$1.values,handlePrototype$1=function(o,a){if(o){if(o[ITERATOR$2$1]!==ArrayValues$1)try{createNonEnumerableProperty$1$1(o,ITERATOR$2$1,ArrayValues$1)}catch{o[ITERATOR$2$1]=ArrayValues$1}if(o[TO_STRING_TAG$4]||createNonEnumerableProperty$1$1(o,TO_STRING_TAG$4,a),DOMIterables$1[a]){for(var c in ArrayIteratorMethods$1)if(o[c]!==ArrayIteratorMethods$1[c])try{createNonEnumerableProperty$1$1(o,c,ArrayIteratorMethods$1[c])}catch{o[c]=ArrayIteratorMethods$1[c]}}}};for(var COLLECTION_NAME$1 in DOMIterables$1)handlePrototype$1(global$6$1[COLLECTION_NAME$1]&&global$6$1[COLLECTION_NAME$1].prototype,COLLECTION_NAME$1);handlePrototype$1(DOMTokenListPrototype$2,"DOMTokenList");var uncurryThis$7$1=functionUncurryThis$1,toIntegerOrInfinity$1$1=toIntegerOrInfinity$4,toString$3$1=toString$4$1,requireObjectCoercible$1$1=requireObjectCoercible$4,charAt$6=uncurryThis$7$1("".charAt),charCodeAt$1=uncurryThis$7$1("".charCodeAt),stringSlice$5=uncurryThis$7$1("".slice),createMethod$2=function(o){return function(a,c){var d=toString$3$1(requireObjectCoercible$1$1(a)),tt=toIntegerOrInfinity$1$1(c),nt=d.length,$a,Ws;return tt<0||tt>=nt?o?"":void 0:($a=charCodeAt$1(d,tt),$a<55296||$a>56319||tt+1===nt||(Ws=charCodeAt$1(d,tt+1))<56320||Ws>57343?o?charAt$6(d,tt):$a:o?stringSlice$5(d,tt,tt+2):($a-55296<<10)+(Ws-56320)+65536)}},stringMultibyte={codeAt:createMethod$2(!1),charAt:createMethod$2(!0)},charAt$5=stringMultibyte.charAt,toString$2$2=toString$4$1,InternalStateModule$2$1=internalState$1,defineIterator$3=defineIterator$2,STRING_ITERATOR="String Iterator",setInternalState$2=InternalStateModule$2$1.set,getInternalState$1$1=InternalStateModule$2$1.getterFor(STRING_ITERATOR);defineIterator$3(String,"String",function(o){setInternalState$2(this,{type:STRING_ITERATOR,string:toString$2$2(o),index:0})},function o(){var a=getInternalState$1$1(this),c=a.string,d=a.index,tt;return d>=c.length?{value:void 0,done:!0}:(tt=charAt$5(c,d),a.index+=tt.length,{value:tt,done:!1})});var fails$5$1=fails$k,wellKnownSymbol$3$1=wellKnownSymbol$i,IS_PURE=isPure,ITERATOR$1$1=wellKnownSymbol$3$1("iterator"),nativeUrl=!fails$5$1(function(){var o=new URL("b?a=1&b=2&c=3","http://a"),a=o.searchParams,c="";return o.pathname="c%20d",a.forEach(function(d,tt){a.delete("b"),c+=tt+d}),IS_PURE&&!o.toJSON||!a.sort||o.href!=="http://a/c%20d?a=1&c=3"||a.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!a[ITERATOR$1$1]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("http://тест").host!=="xn--e1aybc"||new URL("http://a#б").hash!=="#%D0%B1"||c!=="a1c3"||new URL("http://x",void 0).host!=="x"}),makeBuiltIn$4=makeBuiltIn$3.exports,defineProperty$7=objectDefineProperty$1,defineBuiltInAccessor$1=function(o,a,c){return c.get&&makeBuiltIn$4(c.get,a,{getter:!0}),c.set&&makeBuiltIn$4(c.set,a,{setter:!0}),defineProperty$7.f(o,a,c)},anObject$3$1=anObject$g,iteratorClose$3=iteratorClose$2,callWithSafeIterationClosing$1=function(o,a,c,d){try{return d?a(anObject$3$1(c)[0],c[1]):a(c)}catch(tt){iteratorClose$3(o,"throw",tt)}},toPropertyKey$4=toPropertyKey$3$1,definePropertyModule$6=objectDefineProperty$1,createPropertyDescriptor$1$1=createPropertyDescriptor$5,createProperty$2=function(o,a,c){var d=toPropertyKey$4(a);d in o?definePropertyModule$6.f(o,d,createPropertyDescriptor$1$1(0,c)):o[d]=c},bind$2$1=functionBindContext$1,call$4$1=functionCall$1,toObject$1$1=toObject$5$1,callWithSafeIterationClosing=callWithSafeIterationClosing$1,isArrayIteratorMethod$3=isArrayIteratorMethod$2,isConstructor$3=isConstructor$2,lengthOfArrayLike$1$1=lengthOfArrayLike$4$1,createProperty$1$1=createProperty$2,getIterator$1$1=getIterator$3,getIteratorMethod$1$1=getIteratorMethod$4,$Array$1=Array,arrayFrom$1=function o(a){var c=toObject$1$1(a),d=isConstructor$3(this),tt=arguments.length,nt=tt>1?arguments[1]:void 0,$a=nt!==void 0;$a&&(nt=bind$2$1(nt,tt>2?arguments[2]:void 0));var Ws=getIteratorMethod$1$1(c),gu=0,Su,$u,Iu,Xu,r0,p0;if(Ws&&!(this===$Array$1&&isArrayIteratorMethod$3(Ws)))for(Xu=getIterator$1$1(c,Ws),r0=Xu.next,$u=d?new this:[];!(Iu=call$4$1(r0,Xu)).done;gu++)p0=$a?callWithSafeIterationClosing(Xu,nt,[Iu.value,gu],!0):Iu.value,createProperty$1$1($u,gu,p0);else for(Su=lengthOfArrayLike$1$1(c),$u=d?new this(Su):$Array$1(Su);Su>gu;gu++)p0=$a?nt(c[gu],gu):c[gu],createProperty$1$1($u,gu,p0);return $u.length=gu,$u},toAbsoluteIndex$3=toAbsoluteIndex$2$1,lengthOfArrayLike$6=lengthOfArrayLike$4$1,createProperty$3=createProperty$2,$Array$2=Array,max$1$1=Math.max,arraySliceSimple$1=function(o,a,c){for(var d=lengthOfArrayLike$6(o),tt=toAbsoluteIndex$3(a,d),nt=toAbsoluteIndex$3(c===void 0?d:c,d),$a=$Array$2(max$1$1(nt-tt,0)),Ws=0;tt=55296&&tt<=56319&&c>1,o+=floor$3(o/a);o>baseMinusTMin*tMax>>1;)o=floor$3(o/baseMinusTMin),d+=base;return floor$3(d+(baseMinusTMin+1)*o/(o+skew))},encode$1=function(o){var a=[];o=ucs2decode(o);var c=o.length,d=initialN,tt=0,nt=initialBias,$a,Ws;for($a=0;$a=d&&Ws<$u&&($u=Ws);var Iu=Su+1;if($u-d>floor$3((maxInt-tt)/Iu))throw $RangeError(OVERFLOW_ERROR);for(tt+=($u-d)*Iu,d=$u,$a=0;$amaxInt)throw $RangeError(OVERFLOW_ERROR);if(Ws==d){for(var Xu=tt,r0=base;;){var p0=r0<=nt?tMin:r0>=nt+tMax?tMax:r0-nt;if(Xu0;)o[nt]=o[--nt];nt!==d++&&(o[nt]=tt)}return o},merge$1=function(o,a,c,d){for(var tt=a.length,nt=c.length,$a=0,Ws=0;$a0?arguments[0]:void 0;setInternalState$1$1(this,new URLSearchParamsState(a))},URLSearchParamsPrototype=URLSearchParamsConstructor.prototype;defineBuiltIns(URLSearchParamsPrototype,{append:function o(a,c){validateArgumentsLength$1$1(arguments.length,2);var d=getInternalParamsState(this);push$2(d.entries,{key:$toString$1(a),value:$toString$1(c)}),d.updateURL()},delete:function(o){validateArgumentsLength$1$1(arguments.length,1);for(var a=getInternalParamsState(this),c=a.entries,d=$toString$1(o),tt=0;ttd.key?1:-1}),a.updateURL()},forEach:function o(a){for(var c=getInternalParamsState(this).entries,d=bind$1$1(a,arguments.length>1?arguments[1]:void 0),tt=0,nt;tt1?wrapRequestOptions(arguments[1]):{})}}),isCallable$2$1(NativeRequest)){var RequestConstructor=function(a){return anInstance$1$1(this,RequestPrototype),new NativeRequest(a,arguments.length>1?wrapRequestOptions(arguments[1]):{})};RequestPrototype.constructor=RequestConstructor,RequestConstructor.prototype=RequestPrototype,$$2$1({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:RequestConstructor})}}var web_urlSearchParams_constructor={URLSearchParams:URLSearchParamsConstructor,getState:getInternalParamsState},$$1$2=_export$1,DESCRIPTORS$d=descriptors$1,USE_NATIVE_URL=nativeUrl,global$4$1=global$o,bind$9=functionBindContext$1,uncurryThis$4$1=functionUncurryThis$1,defineBuiltIn$1$1=defineBuiltIn$a,defineBuiltInAccessor=defineBuiltInAccessor$1,anInstance$4=anInstance$3,hasOwn$d=hasOwnProperty_1$1,assign$2=objectAssign$1,arrayFrom=arrayFrom$1,arraySlice$4=arraySliceSimple$1,codeAt=stringMultibyte.codeAt,toASCII=stringPunycodeToAscii,$toString$3=toString$4$1,setToStringTag$6=setToStringTag$5,validateArgumentsLength$4=validateArgumentsLength$3,URLSearchParamsModule=web_urlSearchParams_constructor,InternalStateModule$6=internalState$1,setInternalState$5=InternalStateModule$6.set,getInternalURLState=InternalStateModule$6.getterFor("URL"),URLSearchParams$1=URLSearchParamsModule.URLSearchParams,getInternalSearchParamsState=URLSearchParamsModule.getState,NativeURL=global$4$1.URL,TypeError$1$1=global$4$1.TypeError,parseInt$1=global$4$1.parseInt,floor$1$1=Math.floor,pow$1=Math.pow,charAt$3=uncurryThis$4$1("".charAt),exec$1=uncurryThis$4$1(/./.exec),join$3=uncurryThis$4$1([].join),numberToString=uncurryThis$4$1(1 .toString),pop=uncurryThis$4$1([].pop),push$1$1=uncurryThis$4$1([].push),replace$2=uncurryThis$4$1("".replace),shift$2=uncurryThis$4$1([].shift),split$4=uncurryThis$4$1("".split),stringSlice$3=uncurryThis$4$1("".slice),toLowerCase=uncurryThis$4$1("".toLowerCase),unshift=uncurryThis$4$1([].unshift),INVALID_AUTHORITY="Invalid authority",INVALID_SCHEME="Invalid scheme",INVALID_HOST="Invalid host",INVALID_PORT="Invalid port",ALPHA=/[a-z]/i,ALPHANUMERIC=/[\d+-.a-z]/i,DIGIT=/\d/,HEX_START=/^0x/i,OCT=/^[0-7]+$/,DEC=/^\d+$/,HEX=/^[\da-f]+$/i,FORBIDDEN_HOST_CODE_POINT=/[\0\t\n\r #%/:<>?@[\\\]^|]/,FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT=/[\0\t\n\r #/:<>?@[\\\]^|]/,LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,TAB_AND_NEW_LINE=/[\t\n\r]/g,EOF,parseIPv4=function(o){var a=split$4(o,"."),c,d,tt,nt,$a,Ws,gu;if(a.length&&a[a.length-1]==""&&a.length--,c=a.length,c>4)return o;for(d=[],tt=0;tt1&&charAt$3(nt,0)=="0"&&($a=exec$1(HEX_START,nt)?16:8,nt=stringSlice$3(nt,$a==8?1:2)),nt==="")Ws=0;else{if(!exec$1($a==10?DEC:$a==8?OCT:HEX,nt))return o;Ws=parseInt$1(nt,$a)}push$1$1(d,Ws)}for(tt=0;tt=pow$1(256,5-c))return null}else if(Ws>255)return null;for(gu=pop(d),tt=0;tt6))return;for(Ws=0;Xu();){if(gu=null,Ws>0)if(Xu()=="."&&Ws<4)tt++;else return;if(!exec$1(DIGIT,Xu()))return;for(;exec$1(DIGIT,Xu());){if(Su=parseInt$1(Xu(),10),gu===null)gu=Su;else{if(gu==0)return;gu=gu*10+Su}if(gu>255)return;tt++}a[c]=a[c]*256+gu,Ws++,(Ws==2||Ws==4)&&c++}if(Ws!=4)return;break}else if(Xu()==":"){if(tt++,!Xu())return}else if(Xu())return;a[c++]=nt}if(d!==null)for($u=c-d,c=7;c!=0&&$u>0;)Iu=a[c],a[c--]=a[d+$u-1],a[d+--$u]=Iu;else if(c!=8)return;return a},findLongestZeroSequence=function(o){for(var a=null,c=1,d=null,tt=0,nt=0;nt<8;nt++)o[nt]!==0?(tt>c&&(a=d,c=tt),d=null,tt=0):(d===null&&(d=nt),++tt);return tt>c&&(a=d,c=tt),a},serializeHost=function(o){var a,c,d,tt;if(typeof o=="number"){for(a=[],c=0;c<4;c++)unshift(a,o%256),o=floor$1$1(o/256);return join$3(a,".")}else if(typeof o=="object"){for(a="",d=findLongestZeroSequence(o),c=0;c<8;c++)tt&&o[c]===0||(tt&&(tt=!1),d===c?(a+=c?":":"::",tt=!0):(a+=numberToString(o[c],16),c<7&&(a+=":")));return"["+a+"]"}return o},C0ControlPercentEncodeSet={},fragmentPercentEncodeSet=assign$2({},C0ControlPercentEncodeSet,{" ":1,'"':1,"<":1,">":1,"`":1}),pathPercentEncodeSet=assign$2({},fragmentPercentEncodeSet,{"#":1,"?":1,"{":1,"}":1}),userinfoPercentEncodeSet=assign$2({},pathPercentEncodeSet,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),percentEncode=function(o,a){var c=codeAt(o,0);return c>32&&c<127&&!hasOwn$d(a,o)?o:encodeURIComponent(o)},specialSchemes={ftp:21,file:null,http:80,https:443,ws:80,wss:443},isWindowsDriveLetter=function(o,a){var c;return o.length==2&&exec$1(ALPHA,charAt$3(o,0))&&((c=charAt$3(o,1))==":"||!a&&c=="|")},startsWithWindowsDriveLetter=function(o){var a;return o.length>1&&isWindowsDriveLetter(stringSlice$3(o,0,2))&&(o.length==2||(a=charAt$3(o,2))==="/"||a==="\\"||a==="?"||a==="#")},isSingleDot=function(o){return o==="."||toLowerCase(o)==="%2e"},isDoubleDot=function(o){return o=toLowerCase(o),o===".."||o==="%2e."||o===".%2e"||o==="%2e%2e"},SCHEME_START={},SCHEME={},NO_SCHEME={},SPECIAL_RELATIVE_OR_AUTHORITY={},PATH_OR_AUTHORITY={},RELATIVE={},RELATIVE_SLASH={},SPECIAL_AUTHORITY_SLASHES={},SPECIAL_AUTHORITY_IGNORE_SLASHES={},AUTHORITY={},HOST={},HOSTNAME={},PORT={},FILE={},FILE_SLASH={},FILE_HOST={},PATH_START={},PATH={},CANNOT_BE_A_BASE_URL_PATH={},QUERY={},FRAGMENT={},URLState=function(o,a,c){var d=$toString$3(o),tt,nt,$a;if(a){if(nt=this.parse(d),nt)throw TypeError$1$1(nt);this.searchParams=null}else{if(c!==void 0&&(tt=new URLState(c,!0)),nt=this.parse(d,null,tt),nt)throw TypeError$1$1(nt);$a=getInternalSearchParamsState(new URLSearchParams$1),$a.bindURL(this),this.searchParams=$a}};URLState.prototype={type:"URL",parse:function(o,a,c){var d=this,tt=a||SCHEME_START,nt=0,$a="",Ws=!1,gu=!1,Su=!1,$u,Iu,Xu,r0;for(o=$toString$3(o),a||(d.scheme="",d.username="",d.password="",d.host=null,d.port=null,d.path=[],d.query=null,d.fragment=null,d.cannotBeABaseURL=!1,o=replace$2(o,LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE,"")),o=replace$2(o,TAB_AND_NEW_LINE,""),$u=arrayFrom(o);nt<=$u.length;){switch(Iu=$u[nt],tt){case SCHEME_START:if(Iu&&exec$1(ALPHA,Iu))$a+=toLowerCase(Iu),tt=SCHEME;else{if(a)return INVALID_SCHEME;tt=NO_SCHEME;continue}break;case SCHEME:if(Iu&&(exec$1(ALPHANUMERIC,Iu)||Iu=="+"||Iu=="-"||Iu=="."))$a+=toLowerCase(Iu);else if(Iu==":"){if(a&&(d.isSpecial()!=hasOwn$d(specialSchemes,$a)||$a=="file"&&(d.includesCredentials()||d.port!==null)||d.scheme=="file"&&!d.host))return;if(d.scheme=$a,a){d.isSpecial()&&specialSchemes[d.scheme]==d.port&&(d.port=null);return}$a="",d.scheme=="file"?tt=FILE:d.isSpecial()&&c&&c.scheme==d.scheme?tt=SPECIAL_RELATIVE_OR_AUTHORITY:d.isSpecial()?tt=SPECIAL_AUTHORITY_SLASHES:$u[nt+1]=="/"?(tt=PATH_OR_AUTHORITY,nt++):(d.cannotBeABaseURL=!0,push$1$1(d.path,""),tt=CANNOT_BE_A_BASE_URL_PATH)}else{if(a)return INVALID_SCHEME;$a="",tt=NO_SCHEME,nt=0;continue}break;case NO_SCHEME:if(!c||c.cannotBeABaseURL&&Iu!="#")return INVALID_SCHEME;if(c.cannotBeABaseURL&&Iu=="#"){d.scheme=c.scheme,d.path=arraySlice$4(c.path),d.query=c.query,d.fragment="",d.cannotBeABaseURL=!0,tt=FRAGMENT;break}tt=c.scheme=="file"?FILE:RELATIVE;continue;case SPECIAL_RELATIVE_OR_AUTHORITY:if(Iu=="/"&&$u[nt+1]=="/")tt=SPECIAL_AUTHORITY_IGNORE_SLASHES,nt++;else{tt=RELATIVE;continue}break;case PATH_OR_AUTHORITY:if(Iu=="/"){tt=AUTHORITY;break}else{tt=PATH;continue}case RELATIVE:if(d.scheme=c.scheme,Iu==EOF)d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.query=c.query;else if(Iu=="/"||Iu=="\\"&&d.isSpecial())tt=RELATIVE_SLASH;else if(Iu=="?")d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.query="",tt=QUERY;else if(Iu=="#")d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.query=c.query,d.fragment="",tt=FRAGMENT;else{d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,d.path=arraySlice$4(c.path),d.path.length--,tt=PATH;continue}break;case RELATIVE_SLASH:if(d.isSpecial()&&(Iu=="/"||Iu=="\\"))tt=SPECIAL_AUTHORITY_IGNORE_SLASHES;else if(Iu=="/")tt=AUTHORITY;else{d.username=c.username,d.password=c.password,d.host=c.host,d.port=c.port,tt=PATH;continue}break;case SPECIAL_AUTHORITY_SLASHES:if(tt=SPECIAL_AUTHORITY_IGNORE_SLASHES,Iu!="/"||charAt$3($a,nt+1)!="/")continue;nt++;break;case SPECIAL_AUTHORITY_IGNORE_SLASHES:if(Iu!="/"&&Iu!="\\"){tt=AUTHORITY;continue}break;case AUTHORITY:if(Iu=="@"){Ws&&($a="%40"+$a),Ws=!0,Xu=arrayFrom($a);for(var p0=0;p065535)return INVALID_PORT;d.port=d.isSpecial()&&$0===specialSchemes[d.scheme]?null:$0,$a=""}if(a)return;tt=PATH_START;continue}else return INVALID_PORT;break;case FILE:if(d.scheme="file",Iu=="/"||Iu=="\\")tt=FILE_SLASH;else if(c&&c.scheme=="file")if(Iu==EOF)d.host=c.host,d.path=arraySlice$4(c.path),d.query=c.query;else if(Iu=="?")d.host=c.host,d.path=arraySlice$4(c.path),d.query="",tt=QUERY;else if(Iu=="#")d.host=c.host,d.path=arraySlice$4(c.path),d.query=c.query,d.fragment="",tt=FRAGMENT;else{startsWithWindowsDriveLetter(join$3(arraySlice$4($u,nt),""))||(d.host=c.host,d.path=arraySlice$4(c.path),d.shortenPath()),tt=PATH;continue}else{tt=PATH;continue}break;case FILE_SLASH:if(Iu=="/"||Iu=="\\"){tt=FILE_HOST;break}c&&c.scheme=="file"&&!startsWithWindowsDriveLetter(join$3(arraySlice$4($u,nt),""))&&(isWindowsDriveLetter(c.path[0],!0)?push$1$1(d.path,c.path[0]):d.host=c.host),tt=PATH;continue;case FILE_HOST:if(Iu==EOF||Iu=="/"||Iu=="\\"||Iu=="?"||Iu=="#"){if(!a&&isWindowsDriveLetter($a))tt=PATH;else if($a==""){if(d.host="",a)return;tt=PATH_START}else{if(r0=d.parseHost($a),r0)return r0;if(d.host=="localhost"&&(d.host=""),a)return;$a="",tt=PATH_START}continue}else $a+=Iu;break;case PATH_START:if(d.isSpecial()){if(tt=PATH,Iu!="/"&&Iu!="\\")continue}else if(!a&&Iu=="?")d.query="",tt=QUERY;else if(!a&&Iu=="#")d.fragment="",tt=FRAGMENT;else if(Iu!=EOF&&(tt=PATH,Iu!="/"))continue;break;case PATH:if(Iu==EOF||Iu=="/"||Iu=="\\"&&d.isSpecial()||!a&&(Iu=="?"||Iu=="#")){if(isDoubleDot($a)?(d.shortenPath(),Iu!="/"&&!(Iu=="\\"&&d.isSpecial())&&push$1$1(d.path,"")):isSingleDot($a)?Iu!="/"&&!(Iu=="\\"&&d.isSpecial())&&push$1$1(d.path,""):(d.scheme=="file"&&!d.path.length&&isWindowsDriveLetter($a)&&(d.host&&(d.host=""),$a=charAt$3($a,0)+":"),push$1$1(d.path,$a)),$a="",d.scheme=="file"&&(Iu==EOF||Iu=="?"||Iu=="#"))for(;d.path.length>1&&d.path[0]==="";)shift$2(d.path);Iu=="?"?(d.query="",tt=QUERY):Iu=="#"&&(d.fragment="",tt=FRAGMENT)}else $a+=percentEncode(Iu,pathPercentEncodeSet);break;case CANNOT_BE_A_BASE_URL_PATH:Iu=="?"?(d.query="",tt=QUERY):Iu=="#"?(d.fragment="",tt=FRAGMENT):Iu!=EOF&&(d.path[0]+=percentEncode(Iu,C0ControlPercentEncodeSet));break;case QUERY:!a&&Iu=="#"?(d.fragment="",tt=FRAGMENT):Iu!=EOF&&(Iu=="'"&&d.isSpecial()?d.query+="%27":Iu=="#"?d.query+="%23":d.query+=percentEncode(Iu,C0ControlPercentEncodeSet));break;case FRAGMENT:Iu!=EOF&&(d.fragment+=percentEncode(Iu,fragmentPercentEncodeSet));break}nt++}},parseHost:function(o){var a,c,d;if(charAt$3(o,0)=="["){if(charAt$3(o,o.length-1)!="]"||(a=parseIPv6(stringSlice$3(o,1,-1)),!a))return INVALID_HOST;this.host=a}else if(this.isSpecial()){if(o=toASCII(o),exec$1(FORBIDDEN_HOST_CODE_POINT,o)||(a=parseIPv4(o),a===null))return INVALID_HOST;this.host=a}else{if(exec$1(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT,o))return INVALID_HOST;for(a="",c=arrayFrom(o),d=0;d1?arguments[1]:void 0,tt=setInternalState$5(c,new URLState(a,!1,d));DESCRIPTORS$d||(c.href=tt.serialize(),c.origin=tt.getOrigin(),c.protocol=tt.getProtocol(),c.username=tt.getUsername(),c.password=tt.getPassword(),c.host=tt.getHost(),c.hostname=tt.getHostname(),c.port=tt.getPort(),c.pathname=tt.getPathname(),c.search=tt.getSearch(),c.searchParams=tt.getSearchParams(),c.hash=tt.getHash())},URLPrototype=URLConstructor.prototype,accessorDescriptor=function(o,a){return{get:function(){return getInternalURLState(this)[o]()},set:a&&function(c){return getInternalURLState(this)[a](c)},configurable:!0,enumerable:!0}};DESCRIPTORS$d&&(defineBuiltInAccessor(URLPrototype,"href",accessorDescriptor("serialize","setHref")),defineBuiltInAccessor(URLPrototype,"origin",accessorDescriptor("getOrigin")),defineBuiltInAccessor(URLPrototype,"protocol",accessorDescriptor("getProtocol","setProtocol")),defineBuiltInAccessor(URLPrototype,"username",accessorDescriptor("getUsername","setUsername")),defineBuiltInAccessor(URLPrototype,"password",accessorDescriptor("getPassword","setPassword")),defineBuiltInAccessor(URLPrototype,"host",accessorDescriptor("getHost","setHost")),defineBuiltInAccessor(URLPrototype,"hostname",accessorDescriptor("getHostname","setHostname")),defineBuiltInAccessor(URLPrototype,"port",accessorDescriptor("getPort","setPort")),defineBuiltInAccessor(URLPrototype,"pathname",accessorDescriptor("getPathname","setPathname")),defineBuiltInAccessor(URLPrototype,"search",accessorDescriptor("getSearch","setSearch")),defineBuiltInAccessor(URLPrototype,"searchParams",accessorDescriptor("getSearchParams")),defineBuiltInAccessor(URLPrototype,"hash",accessorDescriptor("getHash","setHash")));defineBuiltIn$1$1(URLPrototype,"toJSON",function o(){return getInternalURLState(this).serialize()},{enumerable:!0});defineBuiltIn$1$1(URLPrototype,"toString",function o(){return getInternalURLState(this).serialize()},{enumerable:!0});if(NativeURL){var nativeCreateObjectURL=NativeURL.createObjectURL,nativeRevokeObjectURL=NativeURL.revokeObjectURL;nativeCreateObjectURL&&defineBuiltIn$1$1(URLConstructor,"createObjectURL",bind$9(nativeCreateObjectURL,NativeURL)),nativeRevokeObjectURL&&defineBuiltIn$1$1(URLConstructor,"revokeObjectURL",bind$9(nativeRevokeObjectURL,NativeURL))}setToStringTag$6(URLConstructor,"URL");$$1$2({global:!0,constructor:!0,forced:!USE_NATIVE_URL,sham:!DESCRIPTORS$d},{URL:URLConstructor});var fails$4$1=fails$k,global$3$1=global$o,$RegExp$2=global$3$1.RegExp,UNSUPPORTED_Y$1=fails$4$1(function(){var o=$RegExp$2("a","y");return o.lastIndex=2,o.exec("abcd")!=null}),MISSED_STICKY=UNSUPPORTED_Y$1||fails$4$1(function(){return!$RegExp$2("a","y").sticky}),BROKEN_CARET=UNSUPPORTED_Y$1||fails$4$1(function(){var o=$RegExp$2("^r","gy");return o.lastIndex=2,o.exec("str")!=null}),regexpStickyHelpers={BROKEN_CARET,MISSED_STICKY,UNSUPPORTED_Y:UNSUPPORTED_Y$1},fails$3$1=fails$k,global$2$1=global$o,$RegExp$1=global$2$1.RegExp,regexpUnsupportedDotAll=fails$3$1(function(){var o=$RegExp$1(".","s");return!(o.dotAll&&o.exec(` +`)&&o.flags==="s")}),fails$2$1=fails$k,global$1$1=global$o,$RegExp=global$1$1.RegExp,regexpUnsupportedNcg=fails$2$1(function(){var o=$RegExp("(?b)","g");return o.exec("b").groups.a!=="b"||"b".replace(o,"$c")!=="bc"}),call$2$1=functionCall$1,uncurryThis$3$1=functionUncurryThis$1,toString$1$3=toString$4$1,regexpFlags$2=regexpFlags$1,stickyHelpers=regexpStickyHelpers,shared$5=shared$4.exports,create$4=objectCreate$1,getInternalState$4=internalState$1.get,UNSUPPORTED_DOT_ALL=regexpUnsupportedDotAll,UNSUPPORTED_NCG=regexpUnsupportedNcg,nativeReplace=shared$5("native-string-replace",String.prototype.replace),nativeExec=RegExp.prototype.exec,patchedExec=nativeExec,charAt$2=uncurryThis$3$1("".charAt),indexOf$2=uncurryThis$3$1("".indexOf),replace$1=uncurryThis$3$1("".replace),stringSlice$2=uncurryThis$3$1("".slice),UPDATES_LAST_INDEX_WRONG=function(){var o=/a/,a=/b*/g;return call$2$1(nativeExec,o,"a"),call$2$1(nativeExec,a,"a"),o.lastIndex!==0||a.lastIndex!==0}(),UNSUPPORTED_Y=stickyHelpers.BROKEN_CARET,NPCG_INCLUDED=/()??/.exec("")[1]!==void 0,PATCH=UPDATES_LAST_INDEX_WRONG||NPCG_INCLUDED||UNSUPPORTED_Y||UNSUPPORTED_DOT_ALL||UNSUPPORTED_NCG;PATCH&&(patchedExec=function(a){var c=this,d=getInternalState$4(c),tt=toString$1$3(a),nt=d.raw,$a,Ws,gu,Su,$u,Iu,Xu;if(nt)return nt.lastIndex=c.lastIndex,$a=call$2$1(patchedExec,nt,tt),c.lastIndex=nt.lastIndex,$a;var r0=d.groups,p0=UNSUPPORTED_Y&&c.sticky,y0=call$2$1(regexpFlags$2,c),A0=c.source,$0=0,O0=tt;if(p0&&(y0=replace$1(y0,"y",""),indexOf$2(y0,"g")===-1&&(y0+="g"),O0=stringSlice$2(tt,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&charAt$2(tt,c.lastIndex-1)!==` +`)&&(A0="(?: "+A0+")",O0=" "+O0,$0++),Ws=new RegExp("^(?:"+A0+")",y0)),NPCG_INCLUDED&&(Ws=new RegExp("^"+A0+"$(?!\\s)",y0)),UPDATES_LAST_INDEX_WRONG&&(gu=c.lastIndex),Su=call$2$1(nativeExec,p0?Ws:c,O0),p0?Su?(Su.input=stringSlice$2(Su.input,$0),Su[0]=stringSlice$2(Su[0],$0),Su.index=c.lastIndex,c.lastIndex+=Su[0].length):c.lastIndex=0:UPDATES_LAST_INDEX_WRONG&&Su&&(c.lastIndex=c.global?Su.index+Su[0].length:gu),NPCG_INCLUDED&&Su&&Su.length>1&&call$2$1(nativeReplace,Su[0],Ws,function(){for($u=1;$u]*>)/g,SUBSTITUTION_SYMBOLS_NO_NAMED=/\$([$&'`]|\d{1,2})/g,getSubstitution$1=function(o,a,c,d,tt,nt){var $a=c+o.length,Ws=d.length,gu=SUBSTITUTION_SYMBOLS_NO_NAMED;return tt!==void 0&&(tt=toObject$6(tt),gu=SUBSTITUTION_SYMBOLS),replace$5(nt,gu,function(Su,$u){var Iu;switch(charAt($u,0)){case"$":return"$";case"&":return o;case"`":return stringSlice$1$1(a,0,c);case"'":return stringSlice$1$1(a,$a);case"<":Iu=tt[stringSlice$1$1($u,1,-1)];break;default:var Xu=+$u;if(Xu===0)return Su;if(Xu>Ws){var r0=floor$5(Xu/10);return r0===0?Su:r0<=Ws?d[r0-1]===void 0?charAt($u,1):d[r0-1]+charAt($u,1):Su}Iu=d[Xu-1]}return Iu===void 0?"":Iu})},call$1$1=functionCall$1,anObject$1$1=anObject$g,isCallable$1$1=isCallable$n,classof$8=classofRaw$1$1,regexpExec=regexpExec$2,$TypeError$f=TypeError,regexpExecAbstract=function(o,a){var c=o.exec;if(isCallable$1$1(c)){var d=call$1$1(c,o,a);return d!==null&&anObject$1$1(d),d}if(classof$8(o)==="RegExp")return call$1$1(regexpExec,o,a);throw $TypeError$f("RegExp#exec called on incompatible receiver")},apply$3=functionApply$1,call$l=functionCall$1,uncurryThis$n=functionUncurryThis$1,fixRegExpWellKnownSymbolLogic=fixRegexpWellKnownSymbolLogic,fails$l=fails$k,anObject$h=anObject$g,isCallable$o=isCallable$n,toIntegerOrInfinity$5=toIntegerOrInfinity$4,toLength$3=toLength$2,toString$7=toString$4$1,requireObjectCoercible$5=requireObjectCoercible$4,advanceStringIndex=advanceStringIndex$1,getMethod$5=getMethod$4,getSubstitution=getSubstitution$1,regExpExec=regexpExecAbstract,wellKnownSymbol$j=wellKnownSymbol$i,REPLACE=wellKnownSymbol$j("replace"),max$3=Math.max,min$3=Math.min,concat$3=uncurryThis$n([].concat),push$5=uncurryThis$n([].push),stringIndexOf$1=uncurryThis$n("".indexOf),stringSlice$7=uncurryThis$n("".slice),maybeToString=function(o){return o===void 0?o:String(o)},REPLACE_KEEPS_$0=function(){return"a".replace(/./,"$0")==="$0"}(),REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE=function(){return/./[REPLACE]?/./[REPLACE]("a","$0")==="":!1}(),REPLACE_SUPPORTS_NAMED_GROUPS=!fails$l(function(){var o=/./;return o.exec=function(){var a=[];return a.groups={a:"7"},a},"".replace(o,"$")!=="7"});fixRegExpWellKnownSymbolLogic("replace",function(o,a,c){var d=REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE?"$":"$0";return[function(nt,$a){var Ws=requireObjectCoercible$5(this),gu=nt==null?void 0:getMethod$5(nt,REPLACE);return gu?call$l(gu,nt,Ws,$a):call$l(a,toString$7(Ws),nt,$a)},function(tt,nt){var $a=anObject$h(this),Ws=toString$7(tt);if(typeof nt=="string"&&stringIndexOf$1(nt,d)===-1&&stringIndexOf$1(nt,"$<")===-1){var gu=c(a,$a,Ws,nt);if(gu.done)return gu.value}var Su=isCallable$o(nt);Su||(nt=toString$7(nt));var $u=$a.global;if($u){var Iu=$a.unicode;$a.lastIndex=0}for(var Xu=[];;){var r0=regExpExec($a,Ws);if(r0===null||(push$5(Xu,r0),!$u))break;var p0=toString$7(r0[0]);p0===""&&($a.lastIndex=advanceStringIndex(Ws,toLength$3($a.lastIndex),Iu))}for(var y0="",A0=0,$0=0;$0=A0&&(y0+=stringSlice$7(Ws,A0,L0)+E1,A0=L0+O0.length)}return y0+stringSlice$7(Ws,A0)}]},!REPLACE_SUPPORTS_NAMED_GROUPS||!REPLACE_KEEPS_$0||REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);function __awaiter$1(o,a,c,d){function tt(nt){return nt instanceof c?nt:new c(function($a){$a(nt)})}return new(c||(c=Promise))(function(nt,$a){function Ws($u){try{Su(d.next($u))}catch(Iu){$a(Iu)}}function gu($u){try{Su(d.throw($u))}catch(Iu){$a(Iu)}}function Su($u){$u.done?nt($u.value):tt($u.value).then(Ws,gu)}Su((d=d.apply(o,[])).next())})}typeof SuppressedError=="function"&&SuppressedError;var icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAD8UExURUdwTGx5rpLO8YOYx1Og0ly29X5ezR4mT0tiji4eWJ953KGn1Jxs7qB9xvfD/Us0gduu8yeh4HOq74dD647R91256eSz+j82cbvg/dSj/LuL79Wp6zCf24KN9xANGRANF59d/0W+/taa/8iN/3HL9uOn/z638Bil7l3G84TP+FHB8o5A/0i9/ZjU+47S+vq8/4Qy/S6w8O+x/5Rp/wyg7G2T/s+T/vO2/+qt/1qp/qDV/HyD/ki4+4R7/qnY/tyh/1Gx/ptU/76E/2bJ9Ld8/4t0/pxe+XvN9iOq7rB0/0i88aRk/6ps/z++/naL/mab/mGh/pVM/wub5mGd+fAEOhEAAAAgdFJOUwBEyWKA47EKJhnFluGA6l3H67Du6crdNOXs5q/I65rcQbfB9AAAIABJREFUeNrsnE9r4zoXxidOG9tNQqBvSrLKeKGF7WIz4J0WgSCuDc1s7vf/Mq/+S0d2p7Zkd7i0SsZJh3th+PGcR4+OpP748T3+4yNODofDKY2/SYxgdbhcfl4ul9M3rY9ZpZefbFwu6TeMD8dJwPp5Sb6l9eFIL5zW5TDoWrEc35wEjtOFDWPxjE2aJMkqWa3W6/WevuigPyVJ+tWngTg+HQ58PmSDQlqvt5Eax+jIBv2UY7umyL6u0JiMBK6DpETp4KqmL/ngX9hnwcEJYl8TGIV1EpzOEaNUCUBqFPwPfRX0W8GfFSPGgX255JCcTpwUByVY1WAU/FHwLxRWV3RdIYGtvhIvKqoVI0WriwoGK1CDvLi8JDouse5L8YqT08M2Op+vVFOYl54wJ+5PkppkJUkJZYlipN9RV1Ne69UXmCOT0zY6Xq+4Kip7GEYGmKZVyNF1ghj9whx//ZfltXQYTE/b8xnTUeFr1R82Lm7vwuPh6Cgz9jr+TVx8Mt+zcTgt0w6Ik310xIJVJXxdUaqgsIzH1w6tjlekxrVdpX/FSlb7zW63a+lrt3vazG8JFiqHVa2ewOQLlR70W1oX58XlhSiv7aerKz4xUvd7Rse9pWO32xxm/VfE6To64yt1KyEsgUt8ckT99GDsHUpL6oq9EaKT4+cWY5weNrvfbZtlNwqLfkpcM0o8XtFMhZlRUT7YYDLKEtmhsurQJNO6R0sEL0brk3FRWe3+ydpMDvblzpDtnvYz/SPihIYFzHRFYYE6xMazBnJWYTyrhsri4uqEfSESPX+WdcWnza7NbjemKyYpVob/Ml5Zu9vP0cmME1aBxZXDuSpdKWSGlK0qxUqteSxUphA7hLoOsednWVe8YiV4y34zTYkX9a4bhXejtbgJp8VQcVmJuDA4Gyp7d2K8TFn1oGnJWbEjqO5ywnLE5+iK8mGyEnbFlMV0dWO1GEyLmhWdA1kKrdiTG7y2duPvss3QWx1qVLVLSxZiJwRWdOQTxJXsd9qrGKvMHsznn4JocbNic6B5KWW5wlLMBmbDesjcOzN4KZLj0uKKD7tWcslcVIJgiLbi1fasSYk3p2WUJTsOdsqqHGVBw9I5q7BQcVp0XlxYXKdNa4Tlqkp8/uNNi0UrzupqawsLd8cYqqoXSkHOqu0ED5SF1AshQo1+tRyteM+F1RhGjXy0oiwZLU9txWwdKEhpTKIIjWv1pDUQHGpXW66uUGfTWi8WIk5Pd6Ao5VqNNDCGq7170WIx9IqFqq4iuXNUVyWr95RVDeYsSKqwPEvSkrgQLcXFhHW/STz8T2uqz9DKfHwrPVisMP/GSV0tZdkxvq6qgf6fzu+1hQsoC+mwRQd/Pi5kXOnmt+Jh53fH4mkG220m/gOSh0gpyuBSVVhhuNxRsbRfh+5sCH1LCqpjvNg39kHYrLiIcfEqZHwah5DzM8tbk2glbBbEVgHKqVANMxViJzvApWFd9wOWcng9FSrHQtLpaUJdgFa8euqHheExzeWptRuzMgqzgpaO8bClVVXuhoXSVT0kLCEtwUo+mG2hxwVoxetdNhYW09YkXUFQ3LIMJ1OJGPJyFoiqVVrD6K6VpSdCpS0xlqjEdD8a1hRa8fYs8DiuBUrRpSWF1e/+DbSzrCq0YpaaDjv2mJ9Wutll9w8xNWKGpLT242gl0fnDEsRDylKkqoF2Vu24FoxYcsGjypDQEa3npRVvRllWw8MXXWGPpJVE0bXvWCad2sLCfc9yZkSoqkI3suyljnQrrimOi+Q5mplWuhnp7zKqUm2lo6wQlqGqQygsteDBoAFfuWsdp1Oquu+82dBZyoKuRdhr3kqksMbSov8dja8jtZVsoyFlye6DrSwtLVxbydQA05hqW1qOZ1mrQ1GENGyxx7y0KKzbOFgNz6ajXT5xogO+2j0H4Fm2tNxeqZXgB5SF3JQFBnWtefPW2DJsVLRvR9KKk4GgpV1LSQv0HjDcwh8CpTfCQHPGWJampF1+zrw12rPElDghQXBa2PV3LFc9lrIwbCtbs2ExBMzOo9ZEqCtQUpLFmOfH59lW1emYAN+2rb1snEDrHWm56QE7uAZmQ1iInb3QkaTEgwhgiIgPNCetdNxqpzUmn4kexFhauOdbYDVtdwAr9zzb8JahyqSwCjtkS4vwwX/K82g7T38rnqgs9Rf30S5/xX9QlhO1avNyldVzeKejbKpQSosI46Jhi+Rzxa109DoajFs2ntYfpNWbEHstmrofsmQZFrD5Dk2LCJNnpkWBoXlMPh4Jq4ENG563vLTVC1qgDut+F75/5AiUIfR36er6Wy4URrp5bCsZBavpb2fcRva3+tqCMb7CTg+w6p8qfb8MkeblmpaweOZblFl5nKPRHHuW4fj+FshbeIgXPPBQgSNa8iwpnAjtIjTuToBpyaW0GvPYFlXWPYTWhDnRNJcx1rs8yrC0ZfWOO4CGA5gLkW1ZrJ2skAlBWQPl5CXctpiyfGG12ciVz0lWIjZLa6Osyj3XVtfvG5YmVViGZa11pGUREUpFepDSIjPYlqeyGtXfmpK3sNUAtGj1TmnB3p+7aWiON1jW3klJ6ToEwqKoaNp6iP8KrEa5/di8dbLnRNxrl1Z21JLLRJgd3MMzrrur7E6QeQBYpCRRMkPO8itDtbc4tmNzBgZvw3Kb8AM7PEJbmhXYMESgj0V0yDI1mHNplcdgafkbPKfF9hPHnA0cWPmArGV1acCJtt5+YQH9ynYsgvS6EDllSGnRKB/s8QEGb3Yxxs6Jg5YFtyyArApnbSjPdPcSKQLKUgbveFYe7vFB0WFKf6u3kYhB9wH2ljUrFUrroe1CI6qOGGERhFCfE/8IlVaYsqZ0bNTKB2OVIrBTifJy4cAR3HcWOhKYG0d7M+Fc0vJTlld/C86JIGrpJQ/olaqLTXVtoSqsRGpWOTC5m3DFKTFQ3LVCc7yXstp+f2vUno/JW043XsbSuhq4kDJ07hZurMJAOmBXiloZJi3fBN/CoyNsPzGdsPKxYZmzy8KvsK5F9WUok0LXIqCfbCJDrljlYpRh0krDytBaJ07RluNa8Jj3UV0if5b3pu2DpI6yYMAyjQYrMhD9CpVWHBwdVH/r9xRaIMTbTRoBar9aJWKs+H1XSqxn8JpVJ2dDiQrBKEqAsgKlFbaQhnlrdCVewTa+Vha/X89+iUMM/49EACsKc/IdwfMNBLRIkWtYufb5IGkxZbE7AtMXh9nAefnt6P1ErNfV8iYPxmd2QeKdS3txslpTXPJeU1cg5PRnUK/+BB9LVDNIi+0btu2f3Gg0vZFnbHQPomK3U0Qgra7nj26Is9s/xyOlUxRDZ9d0KLXjlealPCsnQdJK+CZrm80w2imVKLqB/HoKV9W7ooK4okJ1sxCMWUQld2QbFvArupbmrZpVgLL+xy6DZfdwUqzLNS1viWXO9Rptk1E7e1xdtAaVbSHU26oAwT03ZiWZlbQO/ZsPFNbrLbsNH7qd0gzU57fS8VmeX9SkFTj+kH+SbKNanGCTJ7E63vgjCEYsouZBRYm7OzP4kL4WhfXr9XYb3H+ePjfesmYCLd6Jv068bMPEpY/O2Cdm1E40sqrQrUTOy9/iGSxFqwlgpc9vNU9jK5HdAJ4kK3W++vkIt+w7qzmK+v0GC1Qelh44rF//3uTN6CbMuW6j89aPlHdsztH0y7rsArGqxM5q+BF3BW3lK0WLLRD9LV7Aotq6ZzJvNb7RwfS3Rs2JlBaNml7XRpLt8UiorApwykjHhtwOC4ZUKT/KR986lLAorYErdF7r63a0ttbedwOpcRHSdXCXAsYG1fIjDi/28K1DBYvTalvv4OD0t0ZpK/b/JRuMlrMJTdw8CrO7paz8JRSW0FZIx9Ta8hmprZBuCaWVy/1CGLGsuK54lcLdpbJy7zo0sLhvZd77Yg04NHJfntY2Mg1lgnrtPuDrSloS1+NzGgpLJoh7gLIm97dCGuLbI4E79o6/W7hIqVmVtAx969CG1U+nPnOizBC/F6e1itR2DhlY5pjuqO1ZUlovq3BYglbr5fONX38rpCW+juz9HOT0sGzLKqVxleLta1oQFvetW3Zv5+lBbBf+HQvUtuSBoj/VoPH4UqAqc+JnWg4sOSe2QctEfdBmwv1EP9uKOnUeC2gqH/YrSYo9/JKWC4vTus0grAnpNLAQYcJyls9lbmJDKQ2ePl7mgRWUt5yY2ixNK3k+8gPJTsCydSVQKUxSWW+PXhv5fVgib4V2A6f1t/yldRwMDU5TRvAy0aEs0cNMsGbpb8lfntE0y9JKoiM76O4IK7eDOzAshuqNKeshnQmWS6v1tq3x9xP9XYvYsKyOe8nempYsQEXMz+FF82+YVtuG2tZtcd+iyZRYW6nvKctQkuMlmUtZpr/VhvsWpbVdjla6PZZcWQ4qKCrbsdh4K70yvFbW68Cc6N+yUbm0bTit5bQVr6J8uN0ODMtW1hufDn0yPNvd+TWsLf9EqhY+7LNZ2OWTl37/2O7J6LhgAXsLgcVxvc6Yt8zvSWKLxmZJWunzsXRxldzaS9utchsVez94K+v11+uwbwVKq2kFrHY5WjRqlWYjh6jFoFw8A1BvFqvH5yBlDWnLt2Uj9qcbRqvhymr+T9vZtTaOZGG4m51O3M3AsDOEgaEDXhjsxr6JcXxh3AKLHQnFDk68/v//ZavOV51TVfKHpJRkxUl6LubhOW+dKtlO9VG0fGhFrajsxiihfqi8grPLUpphtbhV9lhH4wdN4fjA3Pr88PcPvcahXQZdgRoVserUaHEZiluGGd5P7BD0TqeyFq18xn8YrdHvf4fmXWJd1oNRg7Wj8z8P3WA9zcmsltwqO9JybQMdOD6oEu//lXRY0X6MTIEECi4dYc0F1DzfQdy8v+UJ4bnU4/FDaEGnlZglpH7sog6LaHWGRbjmuZiH/a36JqfGJbGKYDm3PuJDMSHhCdR/bRf6Q9XezuT7rpdZ8/ZK7HDHgutPToL17QNoueUhvxg5tA2zdDm4I2a7fmXIauV53XY/sQ51aMWq3OHduv8QWDOJLIXqh4703Uyfuy6LQzILec3T+TB7P7E+qxaQqmOriNcH0Bo9yEvVeB6cmbTaxcB2HVfSbBYAw2JM7bpyfwuLcImJtRwniQWX6tvQtD4/SNdOG6N6caP7djnc+PJ5gMxq706vuZ+4ZLeYVSSWgzW4W86szK6MXTdrWjt4dHk7nZg1n8/VtBhXI+xvjc/uby3JqmWmaSCxMLaGdotghbUg35UIMs0w1yned2jWfefM0p3pvGUP4qJZwoucGusCJFp+fBv0k/hGDz/0YtDs8dneKqCaDGKWZNdT4tbljrTWdbhMpkJmVT3+OiQtB2um7jnbxY0qQJ1YPcyai1y6i8j2W/t2qZYRqXEovzpYVQ3uFpo1i7YZQv3586cpQW9Wl92/XGaZ6DK5db4/LTmyIrGqcHwELc4sm+ncJESUhoL1FBqurFpP6t0F7QvCjFdwFlqsQWn5MkxWzrtMtyCgJu4yhFmm45onbpXnb1EsWxosa1WBtIaaEwFWvBZUC5uIFdLqDusYVaEqQusXvV7+TOfOk+BYNe2+XYi88mOolIeAT2/ghElwNrOoepnlWR3n84xhmQ6i9fVb3F2N064dkSmzCj8eB3Jr9CDNle7Wd7swD052P9GncBmoDMPM+DTP3/NJtmw8onKZmwi5Fw2kioqOohiGlocFbu1UtxDSPVSeOXqU4TFHLJv14FYN7xVe2i0stcixabXUNViwWJV3a4hKFLNmihdTwifCKDzpUYZHC0zahywtiK19VIDpRMiNu80rJZaj9fsAtBjWTjUMO92ua7Xw7BnwSOqYmpVu2+A6Mbzblxv3fIdly7CAMgxjiA4CYamJb5ZMfgGVXL/80sMsVqtlZmztIJZxgxUCq9LrQc0KcG38uRmgEo1ZyqbJ2aM7LMaVZpfs3cyztPCtFRmvKu5IbbqHCgRag1QiwFJTn2GlmanI6m+W+HWMaCVuHZlW3da5i1TWrFCDHtVmsxmAloMlQTWTXQWKp0kUVSHgf+kd8MfsnJj2XEfcCoTw2ktoRfvtUeMeEqsiq1wZAq1+f6uKzOJdPV2CkxSS59cPVnokXVfccdWv+HmS/iVY+2XYw4q2RTWqQoe7w7QZhhaYtTPrZQ3JcuJHH1hH/7DhdcxFl4w7/5dJa9pp2OdWg8s42yuNisXyoyctb1ayUtZJBXAmhItpdYSFlEItJlH/xIvroNcfd3/+dkevvvKvWEv3RdMaND0DmMW0Nr1oebNyLdXErnCi0RkWD7aLWJ1x64/fvn79fId/7HZZi1e1whRt91FYVRmzerpFZXi2X5jIV8bWDVZ9LAWUkMo1EtJ1Aaz7T/fOrVevVT3WVsUb7rJyjkixWQd39HILzTJNekBjrhOFqxesSK44up4ULoL16etvd/tXvPds072qkiosKqa1kcZBxPK4utNCWJNs/ck1HovesCDobXTlNm3mHhb8x86t2t7ICbcmosCy6b7hA8069KFFZsVa7VSq6yeTvmVYGrtEMNui6m1nMMv915/vKKdqulTSt5ttGdlpUGFlxDocDo933WiNHtKEujAWPc0qLau5jq9owRhgebd0uHupinQbWa8HqXUnXAcgBaxWh45uxbAmqldQeOiER68yLMsScSlk8zpdWwsyhgWViFpVyzTZk/WglKASC6rw4HF1oxVgtXQJA5tVloKq1Dmvp8fjXG1yCSxPqwpuKbVUMxol1maz4XTHqRBjyz2+dKE1ejgPCYyyhzs7wgJSZUlfkuyisrSGBVi+g6jiFWGVqEW0glgqsCCywK1OKe9gRY1CWnxcfwuB1xkWc4IncTWa3YgjNRAKFtGqlrl90ciqWCzMduAEo1NueViZOmOFBJvF1QXWCM2CzEJmx1SxOOafDCxPCzjV0GApXoXZdGepCh1X9GBYqw65hWYlrGwJmktvsxAXSEWtRGnnRtN6GVjgVpXZkpEVYdUa7oeN9srBWt2cWzmzJtqsuBi7Z9Y3gCU1SJXIlqXtRA4Wp3yyHoxQ8RZWCCsK9kDLfXcrLQ9rkYZ5kCgN+K5mMSxGFqqR7Kqj+IJLBAtzq1qmPYPdwrK9aJgHoQLJrMOtuQVmJYjgXOgiNN9MBoClHHOUyriz5+g6xrDAragOw3KwkPWNFCEtcgQVksLr6TZaZFb7KZR6Z5aDNfbv/ir5UqoqlGqsfYuq6jGBhbRyN1PNPFgYs6QAV+HwxG7LLQernU/4brHAi79O+phV+3Os1QpVidkPvKivd5cUVkRLbnpVIlZh58GDqkGsQjpXb7f18lSGhtWCSjBAmqjrortZY4+pRrESwUqFS6mVgWVpFYlaG7V8Pti8Ikj0ZXXjnAhmLfQ5YVDqqYDql1ke1jjQMry4Eo/Y53PY58yiDsJsM5gGy/buB91fHYhVGDek/Oi7AWN1khqkn6FYPc1CYgxprHDRUsi2qVlYwa1CZ9aGOyyn1SFaO4cGS+N6W51ucGv0fTGxXlnBFgttFz/vCsvfLGVa4NhYcCGyY62v3rA8rOBW6LA20jUUei3Im1hhKgyk4Pp29arawbJjop43Ot0n8rNFD1j0MVBAyrHSuPx3ZoKEamyBxbQKfTdHljgFpxUvni0qKcM3h8qN1ZX3qhWsiSq/JsKmYPpf/bsrrJI+6hftGktdcoJFRXlsNYtpFXaJYzZGD3bxvDJinUgsr9bpykqMzGqUPnSNqPkfTjrC2qcfkFyOpSxrnfiyOfFrGyykpefBTaEXz9E8uJJ+VInlI4vduoJWBGvSLK4ZA8ESZPi1DGVZcpNRtpoFtEzPYBpRnALtrowpQc4sxHX6ckUlOlgN+nQBk9arh1l7OrLAalWTXJXtZqFbUS9qbk4c1EYyLQkF1xtVIMXW++mKSiSzCFdDlwy5ZjCz8NPYWqjpyMce9gwscMvcdi4MqDiwbIPlig9JrQDW6XLKs1lGL/u0SdB1N2vvxhgeltWeQOFnO2F/AW7V58zCfqsw97z0grAt3FEsZPUORXg6gVsXaOnMaoSOMo1/1ah/1nSHxQcz4xPJ7eUznsSzs2ZRJRZF1LdT9W3OouLGwU2GDta7w3aJFpnVhPJrDJ7G/gwf/cxiu1gxOeGo4aAPfPefnHwelneL2lHdim7OspIqpHHy4/39Ii0d8E2sUfhBNAv0gIVA9qKXyMWo8M8QwMce+uMSLMotuxq02wwZrzwqYYW0PKwLtDwsB6KhSxNUEoKNqVP4TVdY2RFwuVHTQ8ZFWOBWYe7Qm3VzbpHDnTtOhG/vPNbvp3O0Rt+bhlGFcmzEpsY84cegsOzwRYiVCI8rYHm3HjniDxu7MarMsmqFxDoJqbW7nnOLYZFYGlljZsfmw8w6P66ABbSCVXb/KrCKpsFQgGTWybFar8/RElgtgkXNF3zpDOvV/c+/wtk2kl+91lfA8q+xeTQNVnTXK+MV8joRrTcQy7t1WrfT8rCm7rDEwhFCKyRZD1ivROsVTz7CU48Hjj3942vMgtx6DHtYuRoM+wzgFdegEwraBjDrtPZne245WFODa5EyW1hinc16JRpBL4WIkfkTBn7zch2sT/d/3lVKLLMzGtL9zezMYLxLuK9JrnWrW6Pv0ymgmvqvLQOLk89FH1ivTIUhAROtGP8S/+XrlbA+3VMl4vbVJocq6q5wInS03kLCr5lW9p1cDhZyimuxaTLJz5r1MUtXnsYkHMUtP16uhoW0HKeVeQVI3GCtQsC/265BxPIpn/3kCjZrinKdI7YI0HqZJVwUMEtIf3ctLKjEx41e56R3clCslXglWgGkdzrWbZUIsIDV9KJbIfS7wopNujxerof16SvQStbPqh19W0WstFlrMWvrjhwthBWAYX41TWt+NU0/WFcRen2h8+UWWOiWbbHS2xOrRKt3UYpTfutwZWgFWOQWxDxNkPkkW0y7wnrZnyUEpx9Myz/55wZYQCu8SkZe0hDFO+z5ua7hzXglgYVjkqHlYT1PY2DypSX3hzbrhVGFg8S6ySyitUn7dtW4UzNKvZUmpVk5uVJaDtYzY9K0zrLqCusl8QiBvITn8iMef90Ei93KRLtZ5mSLkONq61vTHK3R92ej1tRY1UiG6THtAYvNoZMtwrrjIlTjn9vMIlq5lbPak1G5rkgJLjdmp+02peVhAa7nJkn6WLJesO4BFvIJGW4jKgL18o87bjTLDaAVrQdDWtEsqHCZuNqiXOstDttvEayp8at5bkI3kavHHma9hHKTQE8oMSl33A4rdSvpGUJgSXvlzi2H1RaKMXWLyjCuxQSUUqyzWVJsJphSTMypo1mf7kdIK4DSeaXbqzWtCY1ZAsqPn5qWg/X8jLQI2rT5nyR+nldXs15UQOkyNJg0KT86wLK01B7y6i1e5di2fcsZvyW9ttv/83Z+PY3kWBSHpdkkZBtlHjYtQr9UlaCkliXUKGuIZClRKQ8QbQlU+f7fZe17/edel9MTXMlWMmmGHqTh1+ceHx9XB0FpASxnW7XV19uyb161TxTZBv9OEkHq2vLHFv7JejsnQ4t2ok5Ze8fKVDOfetEzjd+Ki8rL6pcR1urxMdCa/DSoGC+trC6o641RsmIbAovO3n8PiMqj0srKei8GT4tW7vuervYrlkYBlMe12uEgBm15ZcFLZ4B1b5yTw1UP8iyAlRBWwBNe6LXIfOMKoPXxYW9Y2//nY7+PhtDPn98PkhFU9lXpy7v85CfoarnUcqqJvKzfL98It8BsAKweKfvqTCpoatuYR45nMW3t9dOdOn+QLJrK7ZvVhrq7sayNMNrCBDH52SEqa/PE6Ol+0UsMX08Ea+ul5fhwVTX6uch+S5TxP6/hFhm8FQssa0+ncPUZzyCbQ60tYXBpYKq4/of53xgjLFRWR5TFokScU/NgbWOHsoMXJpCBgscAWCNDC6Koze57X7f7JOpZbbyugrLEBqdQCVGYe2xGZm+4tLyctpZ8FD2wN6+vXFhbMn3bSFRJVEOUhdr6cJEU7pQBTh9hCtnFSCnrWRqVVlZr1sTxj5+1QQW4nLaiWXzju+xBytoGUfE49Z4gBdcQWIbWB4mjENo/yAjS/TOCoroCezdjKIq2ba///e3bz87pCrVFvQscfslBwcdDYPUiQkpSICoANgjWhZtER2tF94Mstq+YtysrK41KGGKFxnV9ff2XhtWhtGqnrbAq8j2QP9sYMIY9Ub0fGsATKIvR6jUNn/EySMYQdWXsSr8abcH1WHeIy0qrphvr5VsoI2qyCcqHFRC9p43KU8KrWgx9g7Bvek2047fHzSAxrE/r7DwyWF2Z0CBUIdQv7VpFWxQaWW0Gsevq9CxaeXGvz4S15VuZ9yglbPkAGlTDYRlaRlQmv/ePU10rs+EJSxhXN7TEpoA5dNJq2zeqrc5vrP0vxMLsJObCOjx7yCpSVnUCZekEoWkZZe0/UVurz55fRbJyjmWEZUSlgRlVaZEhrSWZRKetlKgGKiusfO9pT2cj2FTVcFigLXunzH7fWwXjAssqC0htQFqgKGGYASzU1rKjq2LtaHmNLUM1mA8r7VV9XBWwak4Cy2gLItZ+7/srnq74MiiU3RQKq6y2LdzVIi3CqrZPjwsF9rY8jbKSsgJM20hWp/Asq61Pcwix/4zWwY2vGryyhN0/Y2wwBl+wy2srTlxdWBxJjljWA2AxaTV+DWxIDnWiAlwngWW0Ze/s49vBOLe7rgG2hPphrp0A14IRLITo06ptogdp9TY/g5WVSFXc1wOuxWney91M4iqxErLcDnvnYFdGWIBMGVYQTAtM823NJtE3gh1fGHE9PAmsHiSNaFv5+TulsqxvOVR7XvWtIllZUgBIuCn0w4jawry1rLl18YrLfmIgrKb/oFbVBFQng4W+FUh5Wa2ItVtZbUBROikQQu6DHX46sSZ6YFxay2GwGp4XmjgveGWdFhbSYstgcPcI6FJiAAASE0lEQVRQNIBZaWIGijP3yOJ3zuUJrM6VzXXweEttAKwmmr8tD1aoqSYM4uKEPwmG0Nq4jMWmUOAiuAFdCcQUxhA/2rXpNbGrvXeBdXVuHLNhNdtD80eiFVGWlCeEZXyLnTvTgAUrILRX2I3iI9JUAVtEKy3UVnShprrwSz0EVjKruxXQ6coP4UmVBdpiLXLQlYIO2ccrE0VVawaxcN6lGDNVJGjV4eiH9Db5sJreZpmJinECaZ0UltfWph+wbCVj94PWs4qIkGiDifV2PmRx7IysrMByYTmv2vZUZXn5LHoeWJggrFWtwrmzcr0oqqpVrfAzVxR9ajuBnU1bp/eJ/mCxyx9Db+69FFr5dEVRyZPDsrT4aWrQFZbIkBsEiiteCp2yIKQWpN86FCKWy2xYyW6hYcHKfSBPbvDBt1jZ/mjrmLAOqp6tk2URgykw1Z/6XdM1saN53hlYPqwmHkNnV02wdmlFBR/cXZ78x9AirfhAFVVlHZ0aFqyJ7Y6jcwkfsrzRFdv+kI4rX1l/RuUEFSZRympx+p9w7GgBscfQyeB2MK0sl0a9siyuVAfhZQXtc6ayFgcmkGwGvbSke9ydHtbI0lIrUrmbGVT+ZCINrGWDCKPo+61+5HLOlQVruqj6siKJoUFhyWBYAGt6clhWWyt+kANHXgJ9XbXUrLyiRG8Qd3rpJNpKKmwArMQEelQkZUmUl4F1hh9ib7QFth4OCKEYRc+yWaFVTFHCK4poS7TK561umR7GHFij74skqortcGSQlQEm5d3NGWBdXFxqWuSGBhhCJURR9MOooFGLwCpsM6hh/a5TsAYoa3T1r2jLTLbNTUDlE5a9ZuNzwLrw2jLhARq+X86wqDfxrNUzMnCuonD9Fjh6F81jFqzLBeHkHcuLSpIBNJqytMrZ5ehstADW4wZEFQ4Hv3IplyDImuiP+FFdWbB+zMLWpgp7G/2AkSNRFJFZXPOr88BC34JbioATFsi0wHJBVJiQJeKkhToT9ouifmuosi4AVt/VUVmNdJx8aLDXmUzL0wKbh+8bTijcrKVVJrCDUNGqyPstrqw8WOOblLHTnkHa5EAcS8r1mUwLaYGqrLebUewzOpRQhbctVFbc2HjHz4KFEb6i5UKvkeETKM86h4GWu5lB4bGXlY7oc1IJXm59DLT43qfOh1Vxw/Lbm/QMlrIszxNLKS17WI8nN2n9GMcSETIVBhG+OJxVW2SWWBas0XRBW74qLvuca+EQVo7WGefQ+ZaAATTDJBIxQdjaPSEx5feJqqDniR3ND3nKurzbVtGpoI+fvpIJU1jio6zm30dnpaVshSASXV+UT6nAqMUXzuxs3iJxq8tT1uWC1XxEYBVtsIhflRLm8P580gJaQrV2Z6iK/jYwlA5t6t9cA4Fx9rfb+Xh95SlLZwfaWjWVbLysnLhoHnXKktX5LN7Ran2PwDCFIot8NqjLHZbZSWT9lh/DPGXp7CCdR5HkwHVFUFla8szSsi4P37Ld8YiCHUf/IT8UeMBvx9in086ZVpc9hpPpXRXvnoOkYAL9QljapRCe5VmlBbR+qVan0h1fDnloJ5m+JTUgftIBM0YftYF5yhpdLXp6on0Mze0WF8Bay7vZOaUF+0TjW5jgRTJOaY8SCXIicHL7xIL3W5ljqB2+Cmc4TcTLSUwGwypRWmtZnnNBdLTghiIRO1PUv8M2sWDBwX+NzhgC/4bBG0mlmbAuftykMrskyyBPWGBZa7kuy7tzdQ+EljL3qhX+kEuIY7Y+9r4kP5IGF79/KxcWmJYvZWQ4wmH5ypKynoUKO7PHO1pws7vpinHLp0Xy94cXCXi+gxgwhmBatDqWdPtMAlYp0aykxEEsy/V6Pj0/LfNtKvVoJol2ovE+cRcXhIwV3lH5O/hWLqzLWWxU9JCQ0iq9sNC5jG1Nzktrgr7lTriCHSlCSdBKXvGzV8G0Ze8NzIZlkhbt2yUVVkwKJ3FtnuXaDOLsanTxf/EtkEbRMvOmdbP4w3F13G91+bDMCY+MhSXjUqaM10KYQzkfQGs0Gn3F5TFdujrB16RhZVQpz1dMWf4em1xYbA5lhAuAlfxhRLWG14chtEaX08sjaYW8hSIr4v1PwuEVKylYvzVAWaPxTcRKVgd0FeI7sCo1rTKX1uTqdn6c5QEtPIaAb3f3x9OK5G+LqA3MhgVzSJo+CwpRVSEyBFpISssLXvNojae3t0+3t8fS+qUK51voUja779KpQSSaU8heeJ44AJYO8bKJ+/aoRi5tYCDCkmvgZWh9H39Zzfe3T/o6ntaj/jYdrSMbeUFKVbelBnVpbWXD0uvhXcOPJ6SkrEpuWWYpRHWtgdZ6Ppt+7Qc4ji41q5enp5eX2+Mm0SQIE0ahaFbpLgvVJZzszG/6/yDut+p8WKMrHeJlQxJDf/ccRGWVVeIUmqt8mN9ffSFwjb/Pb180K8PreG35xKQOnYmlT1zdEPrLZPl8WBc/ZjJq26XXVhmCu9/nrO2KuMYLbP5ocenVd377+voE18vr8bR22G/tFHekHasf1CF7xzICnprWAFi4P/TZiuqqlL0toZtBMCyA9fCg4+n99yNwjUbjqZWV1hX88vQFl29dhEjeDn+wDPSoXK3fXufD0n/YMj4frDgrNolrqiszhlpb2rlmf4drNBlPjaxeYALx+fTyhUmENlCIg86+a/HgJ/xFDOHvfRC+5jJvzfJtwNt43Nw5s5L9ZZBpStplkPPS6jJGr4dxMjosqqv7+e0zyOn1+cldL1/xrfZw5dD7GwShq+f7b+N6Q2CZ6kGy4C57wd0qax1CVgRLPzUuPY3j3j5G72zGl05Uz0/P1t2f3CAeTcv0UiSR28r5byZyJ4IcbYgYAuticnMXWneuLRm1DTSUMlRw3Rle0++X4/FkMjLXZDIZj6+m9zON6vn55fnFXd6zvkgLd9M75TpRyKnh6HB3jIu1g2Bpacn+zTJS0sAQMkOIWLgYPoTnw8Prej6fGWT6mpqX2b3mdKvn75nCeqIm/3Kky0/ifmsnxIGB3P0psKpBsLRrrdlJDstYss/K03pAXERcmtfD66vOBHO87m7/197V9CaOBNGwBGEmCkJIOEKcMHK0QpbQ+GD3wVLfkfj/f2e7+rOqus0ANtFqEq82yaz2sPvy6vWrV9VG1OrPtcGqtlA9xq3efCti1SVRnn6LcFgZgjENnDrw8qNoBcUqUswCpEoQfKF/BpD0F8CKVKEVLf1DfTu3rudbUXtYRXcxBjNLqVZxOHCl8k0hyxu0d0d1iLCy3DLwCA0T/KFtMVwn83cg1l3cYvlWVbGCO/uUSx+HPqzp/N2xgcxS1MpTviF4d9cT0irUSAWsZCkMVsJ8hQJ030WoQouVF632PpVn+Rbuf7reKH5MZukDMZVgFThywNTCCi8tVE6yNECGX74EqcC3vgI9v+7QLZRv7aveCuzzYoOZpai1OjR8WcYNc5zJgkBZUktqqWXx0lhZ5QI2aVJ5yBy1Tr4K2xOqxdvRwvlWmE2fk1JvDD3ZxRnMrJc5dIimv4FqLIjAG+cOKZYsUljJcBKWZW2p5bEKAo+5RY7DO9H6VOrel2+lr9hhyl0Gg/Xy8Us2h4KOCaPD0Hc7xGVJxCwNmAh41eFAbJFsBY+FEbvHb/F8i3Gq613jGl6GEItvi0NTsAm0mxK63F2yXocB5cAKSAl7KCaYdWqxwt/rt+yQiwcQfA0Crwg6CIeDBc60cYYh2IUQY7kmOnCrRJJFkcJw+aclttSTCjGrvT2x+cT5VnrNpkfqx2AWRDUWLdoRNrglbJLdDvZYlFmWXbVxDgnNailcj+VbzKKfA6vQ6k3g2AhgvSzeVSFagMyiLUlmcPRexL5B4m4nwIUf5LSQuj+k8nG+db4i9mc8uR6FWVCIBW6g4fvBTVYbHzdwzZJMtIwjLSmzrH8P5gEz61G0XL7V4bvT1R9s1kjMgkIsDiwZtUVImRVpFrWk2DtY6yA8Wix3iAzE4/lWxUuyS1rVkZg1VydiOAllg6Y5wV/hxMEplkMMkaoMx6EXeSZaqKNmaL3d3Ccav/Vp7iCevfPq2FUxvBFRdaOABaPiLZpQSLcEQjxDiP1KKVO+oceUuk46xDRO3eNSvGNCdtH78tH+FtEwshzRVSOBNQfZKhBeZPZFAuUS5zOo16FFaMtQJJl1aoPTah9Ay+VbnX/9n4GrSvsHN3sci1latkjgwEK/okfc0VmITsOa+Cx2HBIbT587slOUL8f51vnCOFaNySzjH2B32zHLjSh46OfR4k10KYi8Y8B0qhXxqk0YiMfzra7q3ZZ3ujUeWDBzDWZUaxaqQ4nSGdwUBoUX1Gfh3tAUYU3L8JQowkH5Fr2+Eu1MjlmGGq28CdkM7gm5yXIpKZH4kjY7tBRRtOzrMMksjVZ2o251aLvvfGWSuB+dWeq3tcsLnMzwsU7BipD7d1KIdbI3JMRK2Yfb0YLOpwqJzYV2h1qviN8aOGRN7E9tnV41XNujrpCGMyU/CyOhJ3FpGwxEohJXt+9v0XyrZ4/SBPKqDKejvlsO0DJWq0li5aYU/iiUUatjoaprFjxQT4rz0rgS83s2knC+1XGnFe75jA2WQctcaYK/Ghl5Uq9WVxTLwcVki4wtyFgs5tZtl8+yK/lWdDRWY4Ol0dKGlJ6EEtt3pFgso4m8Q8JnOWaRyXQbNz43/W/xfOvaNjP4rMnLqM98sttawUo5UjoCI71OD7FSHv7PzFrduCQX51vn3rcDKrDGvkezALSkkXncQIc+Giv8NWax7rDFVovMpaMucXn7zTOSb/kbKuHlBej9LF21Gf3S0fzj11YSVkWtDmdW1BcGWmHNQvlf29sdAla7O27pxftbFdetyjFrfLBAt3JrSMNeJNOsMNyh1KJ4mWF+GzstNmltqV7t7tqCDvkW9aM8n7+MaeAjlZcS2Xgi8bKkXbRHill4wRKtOHlIlODy3ht62dTfT6zsx/LAzxcSCyr2/R5b3x1ab7kxWqV1EQVLsiQ17wnvQJvD1IEYpha2IFuzanp3rSi0rN+CzzGi40R/GVZht37SPcmP9xxEvpTR8gxay5LJmWHiLAzMYkENppVZE1lNH7jLaKav5h75J+SmlVuUtDmXNvlPqUI7el2Z7rDEK1ncOkhmSvt8ViJZpi7LbZk+eAHbvPUHADt3x+6otBzsRNiG1xH05mkXcOeLiTkUrbYXkkwqJG116lRvGKjV+jKkIk/j5Rbk6tFrW6DynXt3ML2/ad4fcpw99WUnH2+5kEVBAmW278fNQ8lNVp/Ae3lvUUiavz/+u9d+qzOvsKEpvN3jmq2ferN7nk1XW1WGDq2SRMpsN6ukDt5zq7cMww6g+bbMd4PegaDzLfPpMu4dbdU+vPPoMnvyGxbAzecNGYKVvdNV6uB9CYq0wLPFNh00ZIM/EfCoDddlb1/C5d6VpP7B+XnqjgeKK1AuvVnLh2DSrd5a8xAx69rw8GRFy9JquRuuKIvp5viphz1ddzzqt/8YAVN2dPaavTz/WUzeVtuyARfhFmeSAU3Zw6xoxBNymlNtLqm0Il8NpZX9b93M9r/trOe815+GCHVZzdbTr8DKwJWL0otWgdRd9galxGiJVAJ4EgYpEPa3yVjzvNfZWctWePa/j/+8ZvOXL3oWIPSluTTXo1oRs5KTQ8otDVXdKmEf8deeTdf6rrCWLv31c7b5KlqZX9j84321DPfAPKd6NatGTqsvATydhFDWapwKxEf4Zvbv0b5JdzbbrL+QVki6cjq5v+azBK5AMrIIkiXq8aEycE1e1xv9rF+nky+Hypw1Ci4U/PHWsExrVjzDd3CJZf4EqEwlLLJskmWJW31fVoyGXTJK30WsWXUqKiXMWj4Nqv/LA9oVtF57L5s3hHEYmRtquPQlHrvwoKklalV/Stb/ZqjMyaivptalbKRbCHGpgyDxn2hxCRrkNFLCkGrxt0NlqvFjqvGSOpZx8QxCy2+V+mtiUI3KqgOCLSA1yb4DUgSvrbYSNbpsWCYyeCCU8lOaW8Cpt+k3QsrhpW9AA2CWXLWguXJtL7IKW4MA1E5xavHdoPKGRhFspRADWkkMV+0WQ+D8g5vA6l97n35XoJCjmb7rS/Y5YMYaRGCTvpY/zb45UKQmgWQ7hRl5dj8wXaPZQr/PQeGTLfQLHn5A+Xl+np/n53nC8x/tAMljWkeBnAAAAABJRU5ErkJggg==";const resolveWalletUrl=(o,a)=>{if(a)return a;switch(o.networkId){case"mainnet":return"https://app.mynearwallet.com";case"testnet":return"https://testnet.mynearwallet.com";default:throw new Error("Invalid wallet url")}},setupWalletState=(o,a)=>__awaiter$1(void 0,void 0,void 0,function*(){const c=new browserIndex$2.keyStores.BrowserLocalStorageKeyStore,d=yield browserIndex$2.connect(Object.assign(Object.assign({keyStore:c,walletUrl:o.walletUrl},a),{headers:{}}));return{wallet:new browserIndex$2.WalletConnection(d,"near_app"),keyStore:c}}),MyNearWallet=({metadata:o,options:a,store:c,params:d,logger:tt,id:nt})=>__awaiter$1(void 0,void 0,void 0,function*(){const $a=yield setupWalletState(d,a.network),Ws=()=>__awaiter$1(void 0,void 0,void 0,function*(){const Su=$a.wallet.getAccountId(),$u=$a.wallet.account();if(!Su||!$u)return[];const Iu=yield $u.connection.signer.getPublicKey($u.accountId,a.network.networkId);return[{accountId:Su,publicKey:Iu?Iu.toString():""}]}),gu=Su=>__awaiter$1(void 0,void 0,void 0,function*(){const $u=$a.wallet.account(),{networkId:Iu,signer:Xu,provider:r0}=$u.connection,p0=yield Xu.getPublicKey($u.accountId,Iu);return Promise.all(Su.map((y0,A0)=>__awaiter$1(void 0,void 0,void 0,function*(){const $0=y0.actions.map(V0=>createAction(V0)),O0=yield $u.accessKeyForTransaction(y0.receiverId,$0,p0);if(!O0)throw new Error(`Failed to find matching key for transaction sent to ${y0.receiverId}`);const L0=yield r0.block({finality:"final"});return browserIndex$2.transactions.createTransaction($u.accountId,browserIndex$2.utils.PublicKey.from(O0.public_key),y0.receiverId,O0.access_key.nonce+A0+1,$0,browserIndex$2.utils.serialize.base_decode(L0.header.hash))})))});return{signIn({contractId:Su,methodNames:$u,successUrl:Iu,failureUrl:Xu}){return __awaiter$1(this,void 0,void 0,function*(){const r0=yield Ws();return r0.length?r0:(yield $a.wallet.requestSignIn({contractId:Su,methodNames:$u,successUrl:Iu,failureUrl:Xu}),Ws())})},signOut(){return __awaiter$1(this,void 0,void 0,function*(){$a.wallet.isSignedIn()&&$a.wallet.signOut()})},getAccounts(){return __awaiter$1(this,void 0,void 0,function*(){return Ws()})},verifyOwner(){return __awaiter$1(this,void 0,void 0,function*(){throw new Error(`Method not supported by ${o.name}`)})},signMessage({message:Su,nonce:$u,recipient:Iu,callbackUrl:Xu,state:r0}){return __awaiter$1(this,void 0,void 0,function*(){if(tt.log("sign message",{message:Su}),nt!=="my-near-wallet")throw Error(`The signMessage method is not supported by ${o.name}`);const p0=typeof window<"u"?window.location.href:"",y0=Xu||p0;if(!y0)throw new Error(`The callbackUrl is missing for ${o.name}`);const A0=new URL(d.walletUrl);A0.pathname="sign-message",A0.searchParams.append("message",Su),A0.searchParams.append("nonce",$u.toString("base64")),A0.searchParams.append("recipient",Iu),A0.searchParams.append("callbackUrl",y0),r0&&A0.searchParams.append("state",r0),window.location.replace(A0.toString())})},signAndSendTransaction({signerId:Su,receiverId:$u,actions:Iu,callbackUrl:Xu}){return __awaiter$1(this,void 0,void 0,function*(){tt.log("signAndSendTransaction",{signerId:Su,receiverId:$u,actions:Iu,callbackUrl:Xu});const{contract:r0}=c.getState();if(!$a.wallet.isSignedIn()||!r0)throw new Error("Wallet not signed in");return $a.wallet.account().signAndSendTransaction({receiverId:$u||r0.contractId,actions:Iu.map(y0=>createAction(y0)),walletCallbackUrl:Xu})})},signAndSendTransactions({transactions:Su,callbackUrl:$u}){return __awaiter$1(this,void 0,void 0,function*(){if(tt.log("signAndSendTransactions",{transactions:Su,callbackUrl:$u}),!$a.wallet.isSignedIn())throw new Error("Wallet not signed in");return $a.wallet.requestSignTransactions({transactions:yield gu(Su),callbackUrl:$u})})},buildImportAccountsUrl(){return`${d.walletUrl}/batch-import`}}});function setupMyNearWallet({walletUrl:o,iconUrl:a=icon,deprecated:c=!1,successUrl:d="",failureUrl:tt=""}={}){return nt=>__awaiter$1(this,void 0,void 0,function*(){return{id:"my-near-wallet",type:"browser",metadata:{name:"MyNearWallet",description:"NEAR wallet to store, buy, send and stake assets for DeFi.",iconUrl:a,deprecated:c,available:!0,successUrl:d,failureUrl:tt,walletUrl:resolveWalletUrl(nt.options.network,o)},init:$a=>MyNearWallet(Object.assign(Object.assign({},$a),{params:{walletUrl:resolveWalletUrl($a.options.network,o)}}))}})}const ContractFormLayout=pt$1.div` display: flex; flex-direction: column; padding-left: 1rem; @@ -1585,7 +1585,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 -moz-opacity: 0; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); } -`;function AddReleaseForm({handleFileChange:o,fileHash:a,releaseInfo:c,setReleaseInfo:d,fileInputRef:tt}){const nt=translations.uploadApplication;return jsxRuntimeExports.jsxs(Wrapper$9,{children:[jsxRuntimeExports.jsx("div",{className:"title",children:nt.releaseTitle}),jsxRuntimeExports.jsxs("div",{className:"inputWrapper",children:[jsxRuntimeExports.jsx("input",{className:"fileInput",name:"file",type:"file",accept:".wasm",onChange:o,ref:tt}),nt.buttonUploadLabel]}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.pathLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"path",className:"input input-name",value:c.path,readOnly:!0}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.versionLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"version",className:"input input-name",value:c.version,onChange:$a=>d(Ys=>({...Ys,version:$a.target.value}))}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.notesLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"notes",className:"input input",value:c.notes,onChange:$a=>d(Ys=>({...Ys,notes:$a.target.value}))}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.hashLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"hash",className:"input input",value:a,readOnly:!0})]})}const CardWrapper=pt$1.div` +`;function AddReleaseForm({handleFileChange:o,fileHash:a,releaseInfo:c,setReleaseInfo:d,fileInputRef:tt}){const nt=translations.uploadApplication;return jsxRuntimeExports.jsxs(Wrapper$9,{children:[jsxRuntimeExports.jsx("div",{className:"title",children:nt.releaseTitle}),jsxRuntimeExports.jsxs("div",{className:"inputWrapper",children:[jsxRuntimeExports.jsx("input",{className:"fileInput",name:"file",type:"file",accept:".wasm",onChange:o,ref:tt}),nt.buttonUploadLabel]}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.pathLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"path",className:"input input-name",value:c.path,readOnly:!0}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.versionLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"version",className:"input input-name",value:c.version,onChange:$a=>d(Ws=>({...Ws,version:$a.target.value}))}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.notesLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"notes",className:"input input",value:c.notes,onChange:$a=>d(Ws=>({...Ws,notes:$a.target.value}))}),jsxRuntimeExports.jsx("label",{className:"label",children:nt.hashLabelText}),jsxRuntimeExports.jsx("input",{type:"text",name:"hash",className:"input input",value:a,readOnly:!0})]})}const CardWrapper=pt$1.div` display: flex; flex-direction: column; gap: 1rem; @@ -1613,7 +1613,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 padding: 1.5rem 1rem 2.563rem; } padding: 1rem; -`;function PublishApplicationTable({addWalletAccount:o,navigateToApplications:a,deployerAccount:c,showStatusModal:d,closeModal:tt,deployStatus:nt,packageInfo:$a,setPackageInfo:Ys,handleFileChange:gu,fileHash:xu,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu,publishApplication:i0,isLoading:p0}){const w0=translations.applicationsPage.publishApplication;return jsxRuntimeExports.jsxs(ContentCard,{headerBackText:w0.title,headerOnBackClick:a,isOverflow:!0,children:[jsxRuntimeExports.jsx(StatusModal,{closeModal:tt,show:d,modalContent:nt}),jsxRuntimeExports.jsxs(FlexWrapper$1,{children:[jsxRuntimeExports.jsx(ConnectWalletAccountCard,{onClick:o,deployerAccount:c==null?void 0:c.accountId}),c&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(AddPackageForm,{packageInfo:$a,setPackageInfo:Ys}),jsxRuntimeExports.jsx(AddReleaseForm,{handleFileChange:gu,fileHash:xu,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu}),jsxRuntimeExports.jsx("div",{className:"button-wrapper",children:jsxRuntimeExports.jsx(Button$2,{text:w0.buttonText,width:"100%",onClick:i0,isDisabled:!(c&&$a.name&&$a.description&&$a.repository&&$u.version&&$u.notes&&$u.path&&$u.hash),isLoading:p0})})]})]})]})}const BLOBBY_IPFS$1="https://blobby-public.euw3.prod.gcp.calimero.network";function PublishApplicationPage(){const o=useNavigate(),a=reactExports.useRef(null),{getPackages:c}=useRPC(),[d,tt]=reactExports.useState(""),[nt,$a]=reactExports.useState(""),[Ys,gu]=reactExports.useState([]),[xu,$u]=reactExports.useState(),[Iu,Xu]=reactExports.useState(!1),[i0,p0]=reactExports.useState(!1),[w0,A0]=reactExports.useState({name:"",description:"",repository:""}),[$0,O0]=reactExports.useState({title:"",message:"",error:!1}),[L0,q0]=reactExports.useState({name:"",version:"",notes:"",path:"",hash:""});reactExports.useEffect(()=>{(async()=>gu(await c()))()},[d]),reactExports.useEffect(()=>{q0(j1=>({...j1,path:d,hash:nt}))},[d,nt]),reactExports.useEffect(()=>{(async()=>{const D0=await(await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet")).getAccounts();D0.length!==0&&$u(D0[0])})()},[]);const F0=async()=>{const r1=await(await setupWalletSelector({network:getNearEnvironment(),modules:[setupMyNearWallet()]})).wallet("my-near-wallet");await r1.signOut(),r1.signIn({contractId:"calimero-package-manager.testnet"})},u1=j1=>{const r1=j1.target.files&&j1.target.files[0];if(r1&&r1.name.endsWith(".wasm")){const t1=new FileReader;t1.onload=async D0=>{var G0;if(!((G0=D0==null?void 0:D0.target)!=null&&G0.result)){console.error("Failed to read file or file content is not available");return}const Z0=new Uint8Array(D0.target.result),f1=new Uint8Array(Z0),w1=new Blob([f1],{type:"application/wasm"}),m1=await crypto.subtle.digest("SHA-256",await w1.arrayBuffer()),c1=Array.from(new Uint8Array(m1)).map(o1=>o1.toString(16).padStart(2,"0")).join("");$a(c1),await axios.post(BLOBBY_IPFS$1,w1).then(o1=>{tt(`${BLOBBY_IPFS$1}/${o1.data.cid}`)}).catch(o1=>{console.error("Error occurred while uploading the file:",o1)})},t1.onerror=D0=>{var Z0;console.error("Error occurred while reading the file:",(Z0=D0.target)==null?void 0:Z0.error)},t1.readAsArrayBuffer(r1)}},g1=async()=>{var t1,D0,Z0;const r1=await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet");try{const f1=await r1.signAndSendTransaction({signerId:xu?xu.accountId:"",actions:[{type:"FunctionCall",params:{methodName:"add_package",args:{name:w0.name,description:w0.description,repository:w0.repository},gas:browserIndex$2.utils.format.parseNearAmount("0.00000000003")??"0",deposit:""}}]});isFinalExecution(f1)&&O0({title:"Package added successfully",message:`Package ${w0.name} added successfully`,error:!1})}catch(f1){let w1="";f1 instanceof Error&&(w1=((Z0=(D0=(t1=JSON.parse(f1.message).kind)==null?void 0:t1.kind)==null?void 0:D0.FunctionCallError)==null?void 0:Z0.ExecutionError)??"An error occurred while publishing package"),O0({title:"Failed to add package",message:w1,error:!0})}},E1=async()=>{var t1,D0,Z0;const r1=await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet");try{const f1=await r1.signAndSendTransaction({signerId:xu?xu.accountId:"",actions:[{type:"FunctionCall",params:{methodName:"add_release",args:{name:w0.name,version:L0.version,notes:L0.notes,path:L0.path,hash:L0.hash},gas:browserIndex$2.utils.format.parseNearAmount("0.00000000003")??"0",deposit:""}}]});isFinalExecution(f1)&&O0({title:"Application published",message:`Application ${w0.name} with release version ${L0.version} published`,error:!1})}catch(f1){let w1="";f1 instanceof Error&&(w1=((Z0=(D0=(t1=JSON.parse(f1.message).kind)==null?void 0:t1.kind)==null?void 0:D0.FunctionCallError)==null?void 0:Z0.ExecutionError)??"An error occurred while publishing the release"),O0({title:"Failed to add release",message:w1,error:!0})}},B1=()=>{Xu(!1),$0.error||(A0({name:"",description:"",repository:""}),q0({name:"",version:"",notes:"",path:"",hash:""}),$a(""),tt(""),a.current&&(a.current.value="")),O0({title:"",message:"",error:!1})},lv=async()=>{p0(!0),Xu(!1),await g1(),await E1(),Xu(!0),p0(!1)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{isOverflow:!0,children:jsxRuntimeExports.jsx(PublishApplicationTable,{addWalletAccount:F0,navigateToApplications:()=>o("/applications"),deployerAccount:xu,showStatusModal:Iu,closeModal:B1,deployStatus:$0,packageInfo:w0,setPackageInfo:A0,handleFileChange:u1,ipfsPath:d,fileHash:nt,packages:Ys,releaseInfo:L0,setReleaseInfo:q0,fileInputRef:a,publishApplication:lv,isLoading:i0})})]})}const FlexWrapper=pt$1.div` +`;function PublishApplicationTable({addWalletAccount:o,navigateToApplications:a,deployerAccount:c,showStatusModal:d,closeModal:tt,deployStatus:nt,packageInfo:$a,setPackageInfo:Ws,handleFileChange:gu,fileHash:Su,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu,publishApplication:r0,isLoading:p0}){const y0=translations.applicationsPage.publishApplication;return jsxRuntimeExports.jsxs(ContentCard,{headerBackText:y0.title,headerOnBackClick:a,isOverflow:!0,children:[jsxRuntimeExports.jsx(StatusModal,{closeModal:tt,show:d,modalContent:nt}),jsxRuntimeExports.jsxs(FlexWrapper$1,{children:[jsxRuntimeExports.jsx(ConnectWalletAccountCard,{onClick:o,deployerAccount:c==null?void 0:c.accountId}),c&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(AddPackageForm,{packageInfo:$a,setPackageInfo:Ws}),jsxRuntimeExports.jsx(AddReleaseForm,{handleFileChange:gu,fileHash:Su,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu}),jsxRuntimeExports.jsx("div",{className:"button-wrapper",children:jsxRuntimeExports.jsx(Button$2,{text:y0.buttonText,width:"100%",onClick:r0,isDisabled:!(c&&$a.name&&$a.description&&$a.repository&&$u.version&&$u.notes&&$u.path&&$u.hash),isLoading:p0})})]})]})]})}const BLOBBY_IPFS$1="https://blobby-public.euw3.prod.gcp.calimero.network";function PublishApplicationPage(){const o=useNavigate(),a=reactExports.useRef(null),{getPackages:c}=useRPC(),[d,tt]=reactExports.useState(""),[nt,$a]=reactExports.useState(""),[Ws,gu]=reactExports.useState([]),[Su,$u]=reactExports.useState(),[Iu,Xu]=reactExports.useState(!1),[r0,p0]=reactExports.useState(!1),[y0,A0]=reactExports.useState({name:"",description:"",repository:""}),[$0,O0]=reactExports.useState({title:"",message:"",error:!1}),[L0,V0]=reactExports.useState({name:"",version:"",notes:"",path:"",hash:""});reactExports.useEffect(()=>{(async()=>gu(await c()))()},[d]),reactExports.useEffect(()=>{V0(j1=>({...j1,path:d,hash:nt}))},[d,nt]),reactExports.useEffect(()=>{(async()=>{const D0=await(await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet")).getAccounts();D0.length!==0&&$u(D0[0])})()},[]);const F0=async()=>{const r1=await(await setupWalletSelector({network:getNearEnvironment(),modules:[setupMyNearWallet()]})).wallet("my-near-wallet");await r1.signOut(),r1.signIn({contractId:"calimero-package-manager.testnet"})},u1=j1=>{const r1=j1.target.files&&j1.target.files[0];if(r1&&r1.name.endsWith(".wasm")){const t1=new FileReader;t1.onload=async D0=>{var G0;if(!((G0=D0==null?void 0:D0.target)!=null&&G0.result)){console.error("Failed to read file or file content is not available");return}const Z0=new Uint8Array(D0.target.result),f1=new Uint8Array(Z0),w1=new Blob([f1],{type:"application/wasm"}),m1=await crypto.subtle.digest("SHA-256",await w1.arrayBuffer()),c1=Array.from(new Uint8Array(m1)).map(o1=>o1.toString(16).padStart(2,"0")).join("");$a(c1),await axios.post(BLOBBY_IPFS$1,w1).then(o1=>{tt(`${BLOBBY_IPFS$1}/${o1.data.cid}`)}).catch(o1=>{console.error("Error occurred while uploading the file:",o1)})},t1.onerror=D0=>{var Z0;console.error("Error occurred while reading the file:",(Z0=D0.target)==null?void 0:Z0.error)},t1.readAsArrayBuffer(r1)}},g1=async()=>{var t1,D0,Z0;const r1=await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet");try{const f1=await r1.signAndSendTransaction({signerId:Su?Su.accountId:"",actions:[{type:"FunctionCall",params:{methodName:"add_package",args:{name:y0.name,description:y0.description,repository:y0.repository},gas:browserIndex$2.utils.format.parseNearAmount("0.00000000003")??"0",deposit:""}}]});isFinalExecution(f1)&&O0({title:"Package added successfully",message:`Package ${y0.name} added successfully`,error:!1})}catch(f1){let w1="";f1 instanceof Error&&(w1=((Z0=(D0=(t1=JSON.parse(f1.message).kind)==null?void 0:t1.kind)==null?void 0:D0.FunctionCallError)==null?void 0:Z0.ExecutionError)??"An error occurred while publishing package"),O0({title:"Failed to add package",message:w1,error:!0})}},E1=async()=>{var t1,D0,Z0;const r1=await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet");try{const f1=await r1.signAndSendTransaction({signerId:Su?Su.accountId:"",actions:[{type:"FunctionCall",params:{methodName:"add_release",args:{name:y0.name,version:L0.version,notes:L0.notes,path:L0.path,hash:L0.hash},gas:browserIndex$2.utils.format.parseNearAmount("0.00000000003")??"0",deposit:""}}]});isFinalExecution(f1)&&O0({title:"Application published",message:`Application ${y0.name} with release version ${L0.version} published`,error:!1})}catch(f1){let w1="";f1 instanceof Error&&(w1=((Z0=(D0=(t1=JSON.parse(f1.message).kind)==null?void 0:t1.kind)==null?void 0:D0.FunctionCallError)==null?void 0:Z0.ExecutionError)??"An error occurred while publishing the release"),O0({title:"Failed to add release",message:w1,error:!0})}},B1=()=>{Xu(!1),$0.error||(A0({name:"",description:"",repository:""}),V0({name:"",version:"",notes:"",path:"",hash:""}),$a(""),tt(""),a.current&&(a.current.value="")),O0({title:"",message:"",error:!1})},lv=async()=>{p0(!0),Xu(!1),await g1(),await E1(),Xu(!0),p0(!1)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{isOverflow:!0,children:jsxRuntimeExports.jsx(PublishApplicationTable,{addWalletAccount:F0,navigateToApplications:()=>o("/applications"),deployerAccount:Su,showStatusModal:Iu,closeModal:B1,deployStatus:$0,packageInfo:y0,setPackageInfo:A0,handleFileChange:u1,ipfsPath:d,fileHash:nt,packages:Ws,releaseInfo:L0,setReleaseInfo:V0,fileInputRef:a,publishApplication:lv,isLoading:r0})})]})}const FlexWrapper=pt$1.div` flex: 1; .button-wrapper { @@ -1627,7 +1627,7 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 line-height: 1.25rem; color: #6b7280; } -`;function AddReleaseTable({addWalletAccount:o,navigateToApplicationDetails:a,deployerAccount:c,showStatusModal:d,closeModal:tt,deployStatus:nt,applicationInformation:$a,latestRelease:Ys,handleFileChange:gu,fileHash:xu,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu,publishRelease:i0,isLoading:p0}){const w0=translations.applicationsPage.addRelease;return jsxRuntimeExports.jsxs(ContentCard,{headerBackText:w0.title,headerOnBackClick:a,descriptionComponent:$a&&jsxRuntimeExports.jsx(DetailsCard,{details:$a}),isOverflow:!0,children:[jsxRuntimeExports.jsx(StatusModal,{closeModal:tt,show:d,modalContent:nt}),jsxRuntimeExports.jsxs(FlexWrapper,{children:[jsxRuntimeExports.jsxs("div",{className:"latest-version",children:[w0.latestReleaseText,Ys]}),jsxRuntimeExports.jsx(AddReleaseForm,{handleFileChange:gu,fileHash:xu,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu}),jsxRuntimeExports.jsx(ConnectWalletAccountCard,{onClick:o}),jsxRuntimeExports.jsx("div",{className:"button-wrapper",children:jsxRuntimeExports.jsx(Button$2,{text:w0.buttonText,width:"100%",onClick:i0,isDisabled:!(c&&($a!=null&&$a.name)&&$u.version&&$u.notes&&$u.path&&$u.hash),isLoading:p0})})]})]})}const BLOBBY_IPFS="https://blobby-public.euw3.prod.gcp.calimero.network";function AddReleasePage(){const{id:o}=useParams(),a=useNavigate(),c=reactExports.useRef(null),[d,tt]=reactExports.useState(""),[nt,$a]=reactExports.useState(""),{getPackage:Ys,getLatestRelease:gu}=useRPC(),[xu,$u]=reactExports.useState(),[Iu,Xu]=reactExports.useState(!1),[i0,p0]=reactExports.useState(!1),[w0,A0]=reactExports.useState(),[$0,O0]=reactExports.useState(""),[L0,q0]=reactExports.useState({title:"",message:"",error:!1}),[F0,u1]=reactExports.useState({name:"",version:"",notes:"",path:"",hash:""});reactExports.useEffect(()=>{u1(r1=>({...r1,path:d,hash:nt}))},[d,nt]),reactExports.useEffect(()=>{const r1=async()=>{const f1=await(await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet")).getAccounts();f1.length!==0&&$u(f1[0])},t1=async()=>{if(o){const D0=await Ys(o);if(D0){A0(D0);const Z0=await gu(o);O0(Z0==null?void 0:Z0.version)}}};r1(),t1()},[gu,Ys,o]);const g1=async()=>{const t1=await(await setupWalletSelector({network:getNearEnvironment(),modules:[setupMyNearWallet()]})).wallet("my-near-wallet");await t1.signOut(),t1.signIn({contractId:"calimero-package-manager.testnet"})},E1=r1=>{const t1=r1.target.files&&r1.target.files[0];if(t1&&t1.name.endsWith(".wasm")){const D0=new FileReader;D0.onload=async Z0=>{var o1;const f1=new Uint8Array((o1=Z0.target)==null?void 0:o1.result),w1=new Uint8Array(f1),m1=new Blob([w1],{type:"application/wasm"}),c1=await crypto.subtle.digest("SHA-256",await m1.arrayBuffer()),G0=Array.from(new Uint8Array(c1)).map(d1=>d1.toString(16).padStart(2,"0")).join("");$a(G0),await axios.post(BLOBBY_IPFS,m1).then(d1=>{tt(`${BLOBBY_IPFS}/${d1.data.cid}`)}).catch(d1=>{console.error("Error occurred while uploading the file:",d1)})},D0.onerror=Z0=>{var f1;console.error("Error occurred while reading the file:",(f1=Z0.target)==null?void 0:f1.error)},D0.readAsArrayBuffer(t1)}},B1=async()=>{var D0,Z0,f1;const t1=await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet");try{const w1=await t1.signAndSendTransaction({signerId:xu?xu.accountId:"",actions:[{type:"FunctionCall",params:{methodName:"add_release",args:{name:w0==null?void 0:w0.name,version:F0.version,notes:F0.notes,path:F0.path,hash:F0.hash},gas:browserIndex$2.utils.format.parseNearAmount("0.00000000003")??"0",deposit:""}}]});isFinalExecution(w1)&&q0({title:"Application published",message:`Release version ${F0.version} for ${w0==null?void 0:w0.name} has been added!`,error:!1})}catch(w1){let m1="";w1 instanceof Error&&(m1=((f1=(Z0=(D0=JSON.parse(w1.message).kind)==null?void 0:D0.kind)==null?void 0:Z0.FunctionCallError)==null?void 0:f1.ExecutionError)??"An error occurred while publishing the release"),q0({title:"Failed to publish release",message:m1,error:!0})}},lv=()=>{Xu(!1),L0.error||(u1({name:"",version:"",notes:"",path:"",hash:""}),$a(""),tt(""),c.current&&(c.current.value="")),q0({title:"",message:"",error:!1})},j1=async()=>{p0(!0),Xu(!1),await B1(),Xu(!0),p0(!1)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{isOverflow:!0,children:jsxRuntimeExports.jsx(AddReleaseTable,{addWalletAccount:g1,navigateToApplicationDetails:()=>a(`/applications/${o}`),deployerAccount:xu,showStatusModal:Iu,closeModal:lv,deployStatus:L0,applicationInformation:w0,latestRelease:$0,handleFileChange:E1,ipfsPath:d,fileHash:nt,releaseInfo:F0,setReleaseInfo:u1,fileInputRef:c,publishRelease:j1,isLoading:i0})})]})}const FooterWrapper=pt$1.div` +`;function AddReleaseTable({addWalletAccount:o,navigateToApplicationDetails:a,deployerAccount:c,showStatusModal:d,closeModal:tt,deployStatus:nt,applicationInformation:$a,latestRelease:Ws,handleFileChange:gu,fileHash:Su,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu,publishRelease:r0,isLoading:p0}){const y0=translations.applicationsPage.addRelease;return jsxRuntimeExports.jsxs(ContentCard,{headerBackText:y0.title,headerOnBackClick:a,descriptionComponent:$a&&jsxRuntimeExports.jsx(DetailsCard,{details:$a}),isOverflow:!0,children:[jsxRuntimeExports.jsx(StatusModal,{closeModal:tt,show:d,modalContent:nt}),jsxRuntimeExports.jsxs(FlexWrapper,{children:[jsxRuntimeExports.jsxs("div",{className:"latest-version",children:[y0.latestReleaseText,Ws]}),jsxRuntimeExports.jsx(AddReleaseForm,{handleFileChange:gu,fileHash:Su,releaseInfo:$u,setReleaseInfo:Iu,fileInputRef:Xu}),jsxRuntimeExports.jsx(ConnectWalletAccountCard,{onClick:o}),jsxRuntimeExports.jsx("div",{className:"button-wrapper",children:jsxRuntimeExports.jsx(Button$2,{text:y0.buttonText,width:"100%",onClick:r0,isDisabled:!(c&&($a!=null&&$a.name)&&$u.version&&$u.notes&&$u.path&&$u.hash),isLoading:p0})})]})]})}const BLOBBY_IPFS="https://blobby-public.euw3.prod.gcp.calimero.network";function AddReleasePage(){const{id:o}=useParams(),a=useNavigate(),c=reactExports.useRef(null),[d,tt]=reactExports.useState(""),[nt,$a]=reactExports.useState(""),{getPackage:Ws,getLatestRelease:gu}=useRPC(),[Su,$u]=reactExports.useState(),[Iu,Xu]=reactExports.useState(!1),[r0,p0]=reactExports.useState(!1),[y0,A0]=reactExports.useState(),[$0,O0]=reactExports.useState(""),[L0,V0]=reactExports.useState({title:"",message:"",error:!1}),[F0,u1]=reactExports.useState({name:"",version:"",notes:"",path:"",hash:""});reactExports.useEffect(()=>{u1(r1=>({...r1,path:d,hash:nt}))},[d,nt]),reactExports.useEffect(()=>{const r1=async()=>{const f1=await(await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet")).getAccounts();f1.length!==0&&$u(f1[0])},t1=async()=>{if(o){const D0=await Ws(o);if(D0){A0(D0);const Z0=await gu(o);O0(Z0==null?void 0:Z0.version)}}};r1(),t1()},[gu,Ws,o]);const g1=async()=>{const t1=await(await setupWalletSelector({network:getNearEnvironment(),modules:[setupMyNearWallet()]})).wallet("my-near-wallet");await t1.signOut(),t1.signIn({contractId:"calimero-package-manager.testnet"})},E1=r1=>{const t1=r1.target.files&&r1.target.files[0];if(t1&&t1.name.endsWith(".wasm")){const D0=new FileReader;D0.onload=async Z0=>{var o1;const f1=new Uint8Array((o1=Z0.target)==null?void 0:o1.result),w1=new Uint8Array(f1),m1=new Blob([w1],{type:"application/wasm"}),c1=await crypto.subtle.digest("SHA-256",await m1.arrayBuffer()),G0=Array.from(new Uint8Array(c1)).map(d1=>d1.toString(16).padStart(2,"0")).join("");$a(G0),await axios.post(BLOBBY_IPFS,m1).then(d1=>{tt(`${BLOBBY_IPFS}/${d1.data.cid}`)}).catch(d1=>{console.error("Error occurred while uploading the file:",d1)})},D0.onerror=Z0=>{var f1;console.error("Error occurred while reading the file:",(f1=Z0.target)==null?void 0:f1.error)},D0.readAsArrayBuffer(t1)}},B1=async()=>{var D0,Z0,f1;const t1=await(await setupWalletSelector({network:"testnet",modules:[setupMyNearWallet()]})).wallet("my-near-wallet");try{const w1=await t1.signAndSendTransaction({signerId:Su?Su.accountId:"",actions:[{type:"FunctionCall",params:{methodName:"add_release",args:{name:y0==null?void 0:y0.name,version:F0.version,notes:F0.notes,path:F0.path,hash:F0.hash},gas:browserIndex$2.utils.format.parseNearAmount("0.00000000003")??"0",deposit:""}}]});isFinalExecution(w1)&&V0({title:"Application published",message:`Release version ${F0.version} for ${y0==null?void 0:y0.name} has been added!`,error:!1})}catch(w1){let m1="";w1 instanceof Error&&(m1=((f1=(Z0=(D0=JSON.parse(w1.message).kind)==null?void 0:D0.kind)==null?void 0:Z0.FunctionCallError)==null?void 0:f1.ExecutionError)??"An error occurred while publishing the release"),V0({title:"Failed to publish release",message:m1,error:!0})}},lv=()=>{Xu(!1),L0.error||(u1({name:"",version:"",notes:"",path:"",hash:""}),$a(""),tt(""),c.current&&(c.current.value="")),V0({title:"",message:"",error:!1})},j1=async()=>{p0(!0),Xu(!1),await B1(),Xu(!0),p0(!1)};return jsxRuntimeExports.jsxs(FlexLayout,{children:[jsxRuntimeExports.jsx(Navigation,{}),jsxRuntimeExports.jsx(PageContentWrapper,{isOverflow:!0,children:jsxRuntimeExports.jsx(AddReleaseTable,{addWalletAccount:g1,navigateToApplicationDetails:()=>a(`/applications/${o}`),deployerAccount:Su,showStatusModal:Iu,closeModal:lv,deployStatus:L0,applicationInformation:y0,latestRelease:$0,handleFileChange:E1,ipfsPath:d,fileHash:nt,releaseInfo:F0,setReleaseInfo:u1,fileInputRef:c,publishRelease:j1,isLoading:r0})})]})}const FooterWrapper=pt$1.div` display: flex; justify-content: center; align-items: center; @@ -1695,22 +1695,22 @@ use chrome, FireFox or Internet Explorer 11`)}var safeBuffer=safeBufferExports$1 flex-direction: column; justify-content: center; } -`;function ContentWrapper({children:o}){return jsxRuntimeExports.jsxs(Wrapper$8,{children:[jsxRuntimeExports.jsx("div",{className:"login-navbar",children:jsxRuntimeExports.jsxs("div",{className:"logo-container",children:[jsxRuntimeExports.jsx("img",{src:CalimeroLogo,alt:"Calimero Admin Dashboard Logo",className:"calimero-logo"}),jsxRuntimeExports.jsx("h4",{className:"dashboard-text",children:"Calimero Network"})]})}),jsxRuntimeExports.jsxs("div",{className:"content-card",children:[jsxRuntimeExports.jsx("div",{className:"content-wrapper",children:o}),jsxRuntimeExports.jsx(Footer,{})]})]})}const __vite_import_meta_env__={BASE_URL:"/admin-dashboard/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_NEAR_ENVIRONMENT:"testnet",VITE_NODE_URL:"http://localhost:2428"};var define_process_env_default$2={},y=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global$u<"u"?global$u:typeof self<"u"?self:{},w$1={exports:{}};(function(o){var a=y!==void 0?y:typeof self<"u"?self:typeof window<"u"?window:{},c=typeof globalThis<"u"?globalThis:typeof window<"u"?window:y!==void 0?y:typeof self<"u"?self:{};function d(yt){return yt&&yt.__esModule&&Object.prototype.hasOwnProperty.call(yt,"default")?yt.default:yt}function tt(yt){if(yt.__esModule)return yt;var ir=yt.default;if(typeof ir=="function"){var _c=function mu(){return this instanceof mu?Reflect.construct(ir,arguments,this.constructor):ir.apply(this,arguments)};_c.prototype=ir.prototype}else _c={};return Object.defineProperty(_c,"__esModule",{value:!0}),Object.keys(yt).forEach(function(mu){var Mu=Object.getOwnPropertyDescriptor(yt,mu);Object.defineProperty(_c,mu,Mu.get?Mu:{enumerable:!0,get:function(){return yt[mu]}})}),_c}var nt={exports:{}};(function(yt,ir){var _c=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||c!==void 0&&c,mu=function(){function Su(){this.fetch=!1,this.DOMException=_c.DOMException}return Su.prototype=_c,new Su}();(function(Su){(function(l0){var E0=Su!==void 0&&Su||typeof self<"u"&&self||E0!==void 0&&E0,j0="URLSearchParams"in E0,M0="Symbol"in E0&&"iterator"in Symbol,B0="FileReader"in E0&&"Blob"in E0&&function(){try{return new Blob,!0}catch{return!1}}(),V0="FormData"in E0,y1="ArrayBuffer"in E0;if(y1)var v1=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],F1=ArrayBuffer.isView||function(c0){return c0&&v1.indexOf(Object.prototype.toString.call(c0))>-1};function ov(c0){if(typeof c0!="string"&&(c0=String(c0)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(c0)||c0==="")throw new TypeError('Invalid character in header field name: "'+c0+'"');return c0.toLowerCase()}function bv(c0){return typeof c0!="string"&&(c0=String(c0)),c0}function gv(c0){var a0={next:function(){var S0=c0.shift();return{done:S0===void 0,value:S0}}};return M0&&(a0[Symbol.iterator]=function(){return a0}),a0}function xv(c0){this.map={},c0 instanceof xv?c0.forEach(function(a0,S0){this.append(S0,a0)},this):Array.isArray(c0)?c0.forEach(function(a0){this.append(a0[0],a0[1])},this):c0&&Object.getOwnPropertyNames(c0).forEach(function(a0){this.append(a0,c0[a0])},this)}function hy(c0){if(c0.bodyUsed)return Promise.reject(new TypeError("Already read"));c0.bodyUsed=!0}function oy(c0){return new Promise(function(a0,S0){c0.onload=function(){a0(c0.result)},c0.onerror=function(){S0(c0.error)}})}function fy(c0){var a0=new FileReader,S0=oy(a0);return a0.readAsArrayBuffer(c0),S0}function Fy(c0){if(c0.slice)return c0.slice(0);var a0=new Uint8Array(c0.byteLength);return a0.set(new Uint8Array(c0)),a0.buffer}function qv(){return this.bodyUsed=!1,this._initBody=function(c0){var a0;this.bodyUsed=this.bodyUsed,this._bodyInit=c0,c0?typeof c0=="string"?this._bodyText=c0:B0&&Blob.prototype.isPrototypeOf(c0)?this._bodyBlob=c0:V0&&FormData.prototype.isPrototypeOf(c0)?this._bodyFormData=c0:j0&&URLSearchParams.prototype.isPrototypeOf(c0)?this._bodyText=c0.toString():y1&&B0&&(a0=c0)&&DataView.prototype.isPrototypeOf(a0)?(this._bodyArrayBuffer=Fy(c0.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):y1&&(ArrayBuffer.prototype.isPrototypeOf(c0)||F1(c0))?this._bodyArrayBuffer=Fy(c0):this._bodyText=c0=Object.prototype.toString.call(c0):this._bodyText="",this.headers.get("content-type")||(typeof c0=="string"?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):j0&&URLSearchParams.prototype.isPrototypeOf(c0)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},B0&&(this.blob=function(){var c0=hy(this);if(c0)return c0;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?hy(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(fy)}),this.text=function(){var c0,a0,S0,z0=hy(this);if(z0)return z0;if(this._bodyBlob)return c0=this._bodyBlob,S0=oy(a0=new FileReader),a0.readAsText(c0),S0;if(this._bodyArrayBuffer)return Promise.resolve(function(Q0){for(var p1=new Uint8Array(Q0),T1=new Array(p1.length),U1=0;U1-1?p1:Q0}(a0.method||this.method||"GET"),this.mode=a0.mode||this.mode||null,this.signal=a0.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&S0)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(S0),!(this.method!=="GET"&&this.method!=="HEAD"||a0.cache!=="no-store"&&a0.cache!=="no-cache")){var z0=/([?&])_=[^&]*/;z0.test(this.url)?this.url=this.url.replace(z0,"$1_="+new Date().getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+new Date().getTime()}}function X0(c0){var a0=new FormData;return c0.trim().split("&").forEach(function(S0){if(S0){var z0=S0.split("="),Q0=z0.shift().replace(/\+/g," "),p1=z0.join("=").replace(/\+/g," ");a0.append(decodeURIComponent(Q0),decodeURIComponent(p1))}}),a0}function s0(c0,a0){if(!(this instanceof s0))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');a0||(a0={}),this.type="default",this.status=a0.status===void 0?200:a0.status,this.ok=this.status>=200&&this.status<300,this.statusText=a0.statusText===void 0?"":""+a0.statusText,this.headers=new xv(a0.headers),this.url=a0.url||"",this._initBody(c0)}T0.prototype.clone=function(){return new T0(this,{body:this._bodyInit})},qv.call(T0.prototype),qv.call(s0.prototype),s0.prototype.clone=function(){return new s0(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new xv(this.headers),url:this.url})},s0.error=function(){var c0=new s0(null,{status:0,statusText:""});return c0.type="error",c0};var g0=[301,302,303,307,308];s0.redirect=function(c0,a0){if(g0.indexOf(a0)===-1)throw new RangeError("Invalid status code");return new s0(null,{status:a0,headers:{location:c0}})},l0.DOMException=E0.DOMException;try{new l0.DOMException}catch{l0.DOMException=function(a0,S0){this.message=a0,this.name=S0;var z0=Error(a0);this.stack=z0.stack},l0.DOMException.prototype=Object.create(Error.prototype),l0.DOMException.prototype.constructor=l0.DOMException}function d0(c0,a0){return new Promise(function(S0,z0){var Q0=new T0(c0,a0);if(Q0.signal&&Q0.signal.aborted)return z0(new l0.DOMException("Aborted","AbortError"));var p1=new XMLHttpRequest;function T1(){p1.abort()}p1.onload=function(){var U1,S1,n1={status:p1.status,statusText:p1.statusText,headers:(U1=p1.getAllResponseHeaders()||"",S1=new xv,U1.replace(/\r?\n[\t ]+/g," ").split("\r").map(function(J1){return J1.indexOf(` -`)===0?J1.substr(1,J1.length):J1}).forEach(function(J1){var wv=J1.split(":"),Sv=wv.shift().trim();if(Sv){var Hv=wv.join(":").trim();S1.append(Sv,Hv)}}),S1)};n1.url="responseURL"in p1?p1.responseURL:n1.headers.get("X-Request-URL");var V1="response"in p1?p1.response:p1.responseText;setTimeout(function(){S0(new s0(V1,n1))},0)},p1.onerror=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.ontimeout=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.onabort=function(){setTimeout(function(){z0(new l0.DOMException("Aborted","AbortError"))},0)},p1.open(Q0.method,function(U1){try{return U1===""&&E0.location.href?E0.location.href:U1}catch{return U1}}(Q0.url),!0),Q0.credentials==="include"?p1.withCredentials=!0:Q0.credentials==="omit"&&(p1.withCredentials=!1),"responseType"in p1&&(B0?p1.responseType="blob":y1&&Q0.headers.get("Content-Type")&&Q0.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(p1.responseType="arraybuffer")),!a0||typeof a0.headers!="object"||a0.headers instanceof xv?Q0.headers.forEach(function(U1,S1){p1.setRequestHeader(S1,U1)}):Object.getOwnPropertyNames(a0.headers).forEach(function(U1){p1.setRequestHeader(U1,bv(a0.headers[U1]))}),Q0.signal&&(Q0.signal.addEventListener("abort",T1),p1.onreadystatechange=function(){p1.readyState===4&&Q0.signal.removeEventListener("abort",T1)}),p1.send(Q0._bodyInit===void 0?null:Q0._bodyInit)})}d0.polyfill=!0,E0.fetch||(E0.fetch=d0,E0.Headers=xv,E0.Request=T0,E0.Response=s0),l0.Headers=xv,l0.Request=T0,l0.Response=s0,l0.fetch=d0})({})})(mu),mu.fetch.ponyfill=!0,delete mu.fetch.polyfill;var Mu=_c.fetch?_c:mu;(ir=Mu.fetch).default=Mu.fetch,ir.fetch=Mu.fetch,ir.Headers=Mu.Headers,ir.Request=Mu.Request,ir.Response=Mu.Response,yt.exports=ir})(nt,nt.exports);var $a=d(nt.exports),Ys=[],gu=[],xu=typeof Uint8Array<"u"?Uint8Array:Array,$u=!1;function Iu(){$u=!0;for(var yt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ir=0;ir<64;++ir)Ys[ir]=yt[ir],gu[yt.charCodeAt(ir)]=ir;gu[45]=62,gu[95]=63}function Xu(yt,ir,_c){for(var mu,Mu,Su=[],l0=ir;l0<_c;l0+=3)mu=(yt[l0]<<16)+(yt[l0+1]<<8)+yt[l0+2],Su.push(Ys[(Mu=mu)>>18&63]+Ys[Mu>>12&63]+Ys[Mu>>6&63]+Ys[63&Mu]);return Su.join("")}function i0(yt){var ir;$u||Iu();for(var _c=yt.length,mu=_c%3,Mu="",Su=[],l0=16383,E0=0,j0=_c-mu;E0j0?j0:E0+l0));return mu===1?(ir=yt[_c-1],Mu+=Ys[ir>>2],Mu+=Ys[ir<<4&63],Mu+="=="):mu===2&&(ir=(yt[_c-2]<<8)+yt[_c-1],Mu+=Ys[ir>>10],Mu+=Ys[ir>>4&63],Mu+=Ys[ir<<2&63],Mu+="="),Su.push(Mu),Su.join("")}function p0(yt,ir,_c,mu,Mu){var Su,l0,E0=8*Mu-mu-1,j0=(1<>1,B0=-7,V0=_c?Mu-1:0,y1=_c?-1:1,v1=yt[ir+V0];for(V0+=y1,Su=v1&(1<<-B0)-1,v1>>=-B0,B0+=E0;B0>0;Su=256*Su+yt[ir+V0],V0+=y1,B0-=8);for(l0=Su&(1<<-B0)-1,Su>>=-B0,B0+=mu;B0>0;l0=256*l0+yt[ir+V0],V0+=y1,B0-=8);if(Su===0)Su=1-M0;else{if(Su===j0)return l0?NaN:1/0*(v1?-1:1);l0+=Math.pow(2,mu),Su-=M0}return(v1?-1:1)*l0*Math.pow(2,Su-mu)}function w0(yt,ir,_c,mu,Mu,Su){var l0,E0,j0,M0=8*Su-Mu-1,B0=(1<>1,y1=Mu===23?Math.pow(2,-24)-Math.pow(2,-77):0,v1=mu?0:Su-1,F1=mu?1:-1,ov=ir<0||ir===0&&1/ir<0?1:0;for(ir=Math.abs(ir),isNaN(ir)||ir===1/0?(E0=isNaN(ir)?1:0,l0=B0):(l0=Math.floor(Math.log(ir)/Math.LN2),ir*(j0=Math.pow(2,-l0))<1&&(l0--,j0*=2),(ir+=l0+V0>=1?y1/j0:y1*Math.pow(2,1-V0))*j0>=2&&(l0++,j0/=2),l0+V0>=B0?(E0=0,l0=B0):l0+V0>=1?(E0=(ir*j0-1)*Math.pow(2,Mu),l0+=V0):(E0=ir*Math.pow(2,V0-1)*Math.pow(2,Mu),l0=0));Mu>=8;yt[_c+v1]=255&E0,v1+=F1,E0/=256,Mu-=8);for(l0=l0<0;yt[_c+v1]=255&l0,v1+=F1,l0/=256,M0-=8);yt[_c+v1-F1]|=128*ov}var A0={}.toString,$0=Array.isArray||function(yt){return A0.call(yt)=="[object Array]"};F0.TYPED_ARRAY_SUPPORT=a.TYPED_ARRAY_SUPPORT===void 0||a.TYPED_ARRAY_SUPPORT;var O0=L0();function L0(){return F0.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function q0(yt,ir){if(L0()=L0())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+L0().toString(16)+" bytes");return 0|yt}function j1(yt){return!(yt==null||!yt._isBuffer)}function r1(yt,ir){if(j1(yt))return yt.length;if(typeof ArrayBuffer<"u"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(yt)||yt instanceof ArrayBuffer))return yt.byteLength;typeof yt!="string"&&(yt=""+yt);var _c=yt.length;if(_c===0)return 0;for(var mu=!1;;)switch(ir){case"ascii":case"latin1":case"binary":return _c;case"utf8":case"utf-8":case void 0:return Dy(yt).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*_c;case"hex":return _c>>>1;case"base64":return jw(yt).length;default:if(mu)return Dy(yt).length;ir=(""+ir).toLowerCase(),mu=!0}}function t1(yt,ir,_c){var mu=!1;if((ir===void 0||ir<0)&&(ir=0),ir>this.length||((_c===void 0||_c>this.length)&&(_c=this.length),_c<=0)||(_c>>>=0)<=(ir>>>=0))return"";for(yt||(yt="utf8");;)switch(yt){case"hex":return ev(this,ir,_c);case"utf8":case"utf-8":return O1(this,ir,_c);case"ascii":return rv(this,ir,_c);case"latin1":case"binary":return D1(this,ir,_c);case"base64":return R1(this,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Mv(this,ir,_c);default:if(mu)throw new TypeError("Unknown encoding: "+yt);yt=(yt+"").toLowerCase(),mu=!0}}function D0(yt,ir,_c){var mu=yt[ir];yt[ir]=yt[_c],yt[_c]=mu}function Z0(yt,ir,_c,mu,Mu){if(yt.length===0)return-1;if(typeof _c=="string"?(mu=_c,_c=0):_c>2147483647?_c=2147483647:_c<-2147483648&&(_c=-2147483648),_c=+_c,isNaN(_c)&&(_c=Mu?0:yt.length-1),_c<0&&(_c=yt.length+_c),_c>=yt.length){if(Mu)return-1;_c=yt.length-1}else if(_c<0){if(!Mu)return-1;_c=0}if(typeof ir=="string"&&(ir=F0.from(ir,mu)),j1(ir))return ir.length===0?-1:f1(yt,ir,_c,mu,Mu);if(typeof ir=="number")return ir&=255,F0.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?Mu?Uint8Array.prototype.indexOf.call(yt,ir,_c):Uint8Array.prototype.lastIndexOf.call(yt,ir,_c):f1(yt,[ir],_c,mu,Mu);throw new TypeError("val must be string, number or Buffer")}function f1(yt,ir,_c,mu,Mu){var Su,l0=1,E0=yt.length,j0=ir.length;if(mu!==void 0&&((mu=String(mu).toLowerCase())==="ucs2"||mu==="ucs-2"||mu==="utf16le"||mu==="utf-16le")){if(yt.length<2||ir.length<2)return-1;l0=2,E0/=2,j0/=2,_c/=2}function M0(v1,F1){return l0===1?v1[F1]:v1.readUInt16BE(F1*l0)}if(Mu){var B0=-1;for(Su=_c;SuE0&&(_c=E0-j0),Su=_c;Su>=0;Su--){for(var V0=!0,y1=0;y1Mu&&(mu=Mu):mu=Mu;var Su=ir.length;if(Su%2!=0)throw new TypeError("Invalid hex string");mu>Su/2&&(mu=Su/2);for(var l0=0;l0>8,j0=l0%256,M0.push(j0),M0.push(E0);return M0}(ir,yt.length-_c),yt,_c,mu)}function R1(yt,ir,_c){return ir===0&&_c===yt.length?i0(yt):i0(yt.slice(ir,_c))}function O1(yt,ir,_c){_c=Math.min(yt.length,_c);for(var mu=[],Mu=ir;Mu<_c;){var Su,l0,E0,j0,M0=yt[Mu],B0=null,V0=M0>239?4:M0>223?3:M0>191?2:1;if(Mu+V0<=_c)switch(V0){case 1:M0<128&&(B0=M0);break;case 2:(192&(Su=yt[Mu+1]))==128&&(j0=(31&M0)<<6|63&Su)>127&&(B0=j0);break;case 3:Su=yt[Mu+1],l0=yt[Mu+2],(192&Su)==128&&(192&l0)==128&&(j0=(15&M0)<<12|(63&Su)<<6|63&l0)>2047&&(j0<55296||j0>57343)&&(B0=j0);break;case 4:Su=yt[Mu+1],l0=yt[Mu+2],E0=yt[Mu+3],(192&Su)==128&&(192&l0)==128&&(192&E0)==128&&(j0=(15&M0)<<18|(63&Su)<<12|(63&l0)<<6|63&E0)>65535&&j0<1114112&&(B0=j0)}B0===null?(B0=65533,V0=1):B0>65535&&(B0-=65536,mu.push(B0>>>10&1023|55296),B0=56320|1023&B0),mu.push(B0),Mu+=V0}return function(y1){var v1=y1.length;if(v1<=Q1)return String.fromCharCode.apply(String,y1);for(var F1="",ov=0;ov0&&(yt=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(yt+=" ... ")),""},F0.prototype.compare=function(yt,ir,_c,mu,Mu){if(!j1(yt))throw new TypeError("Argument must be a Buffer");if(ir===void 0&&(ir=0),_c===void 0&&(_c=yt?yt.length:0),mu===void 0&&(mu=0),Mu===void 0&&(Mu=this.length),ir<0||_c>yt.length||mu<0||Mu>this.length)throw new RangeError("out of range index");if(mu>=Mu&&ir>=_c)return 0;if(mu>=Mu)return-1;if(ir>=_c)return 1;if(this===yt)return 0;for(var Su=(Mu>>>=0)-(mu>>>=0),l0=(_c>>>=0)-(ir>>>=0),E0=Math.min(Su,l0),j0=this.slice(mu,Mu),M0=yt.slice(ir,_c),B0=0;B0Mu)&&(_c=Mu),yt.length>0&&(_c<0||ir<0)||ir>this.length)throw new RangeError("Attempt to write outside buffer bounds");mu||(mu="utf8");for(var Su=!1;;)switch(mu){case"hex":return w1(this,yt,ir,_c);case"utf8":case"utf-8":return m1(this,yt,ir,_c);case"ascii":return c1(this,yt,ir,_c);case"latin1":case"binary":return G0(this,yt,ir,_c);case"base64":return o1(this,yt,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return d1(this,yt,ir,_c);default:if(Su)throw new TypeError("Unknown encoding: "+mu);mu=(""+mu).toLowerCase(),Su=!0}},F0.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q1=4096;function rv(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(127&yt[Mu]);return mu}function D1(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(yt[Mu]);return mu}function ev(yt,ir,_c){var mu=yt.length;(!ir||ir<0)&&(ir=0),(!_c||_c<0||_c>mu)&&(_c=mu);for(var Mu="",Su=ir;Su<_c;++Su)Mu+=C2(yt[Su]);return Mu}function Mv(yt,ir,_c){for(var mu=yt.slice(ir,_c),Mu="",Su=0;Su_c)throw new RangeError("Trying to access beyond buffer length")}function fv(yt,ir,_c,mu,Mu,Su){if(!j1(yt))throw new TypeError('"buffer" argument must be a Buffer instance');if(ir>Mu||iryt.length)throw new RangeError("Index out of range")}function cv(yt,ir,_c,mu){ir<0&&(ir=65535+ir+1);for(var Mu=0,Su=Math.min(yt.length-_c,2);Mu>>8*(mu?Mu:1-Mu)}function ly(yt,ir,_c,mu){ir<0&&(ir=4294967295+ir+1);for(var Mu=0,Su=Math.min(yt.length-_c,4);Mu>>8*(mu?Mu:3-Mu)&255}function Cy(yt,ir,_c,mu,Mu,Su){if(_c+mu>yt.length)throw new RangeError("Index out of range");if(_c<0)throw new RangeError("Index out of range")}function Ly(yt,ir,_c,mu,Mu){return Mu||Cy(yt,0,_c,4),w0(yt,ir,_c,mu,23,4),_c+4}function Hy(yt,ir,_c,mu,Mu){return Mu||Cy(yt,0,_c,8),w0(yt,ir,_c,mu,52,8),_c+8}F0.prototype.slice=function(yt,ir){var _c,mu=this.length;if((yt=~~yt)<0?(yt+=mu)<0&&(yt=0):yt>mu&&(yt=mu),(ir=ir===void 0?mu:~~ir)<0?(ir+=mu)<0&&(ir=0):ir>mu&&(ir=mu),ir0&&(Mu*=256);)mu+=this[yt+--ir]*Mu;return mu},F0.prototype.readUInt8=function(yt,ir){return ir||Zv(yt,1,this.length),this[yt]},F0.prototype.readUInt16LE=function(yt,ir){return ir||Zv(yt,2,this.length),this[yt]|this[yt+1]<<8},F0.prototype.readUInt16BE=function(yt,ir){return ir||Zv(yt,2,this.length),this[yt]<<8|this[yt+1]},F0.prototype.readUInt32LE=function(yt,ir){return ir||Zv(yt,4,this.length),(this[yt]|this[yt+1]<<8|this[yt+2]<<16)+16777216*this[yt+3]},F0.prototype.readUInt32BE=function(yt,ir){return ir||Zv(yt,4,this.length),16777216*this[yt]+(this[yt+1]<<16|this[yt+2]<<8|this[yt+3])},F0.prototype.readIntLE=function(yt,ir,_c){yt|=0,ir|=0,_c||Zv(yt,ir,this.length);for(var mu=this[yt],Mu=1,Su=0;++Su=(Mu*=128)&&(mu-=Math.pow(2,8*ir)),mu},F0.prototype.readIntBE=function(yt,ir,_c){yt|=0,ir|=0,_c||Zv(yt,ir,this.length);for(var mu=ir,Mu=1,Su=this[yt+--mu];mu>0&&(Mu*=256);)Su+=this[yt+--mu]*Mu;return Su>=(Mu*=128)&&(Su-=Math.pow(2,8*ir)),Su},F0.prototype.readInt8=function(yt,ir){return ir||Zv(yt,1,this.length),128&this[yt]?-1*(255-this[yt]+1):this[yt]},F0.prototype.readInt16LE=function(yt,ir){ir||Zv(yt,2,this.length);var _c=this[yt]|this[yt+1]<<8;return 32768&_c?4294901760|_c:_c},F0.prototype.readInt16BE=function(yt,ir){ir||Zv(yt,2,this.length);var _c=this[yt+1]|this[yt]<<8;return 32768&_c?4294901760|_c:_c},F0.prototype.readInt32LE=function(yt,ir){return ir||Zv(yt,4,this.length),this[yt]|this[yt+1]<<8|this[yt+2]<<16|this[yt+3]<<24},F0.prototype.readInt32BE=function(yt,ir){return ir||Zv(yt,4,this.length),this[yt]<<24|this[yt+1]<<16|this[yt+2]<<8|this[yt+3]},F0.prototype.readFloatLE=function(yt,ir){return ir||Zv(yt,4,this.length),p0(this,yt,!0,23,4)},F0.prototype.readFloatBE=function(yt,ir){return ir||Zv(yt,4,this.length),p0(this,yt,!1,23,4)},F0.prototype.readDoubleLE=function(yt,ir){return ir||Zv(yt,8,this.length),p0(this,yt,!0,52,8)},F0.prototype.readDoubleBE=function(yt,ir){return ir||Zv(yt,8,this.length),p0(this,yt,!1,52,8)},F0.prototype.writeUIntLE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||fv(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=1,Su=0;for(this[ir]=255&yt;++Su<_c&&(Mu*=256);)this[ir+Su]=yt/Mu&255;return ir+_c},F0.prototype.writeUIntBE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||fv(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=_c-1,Su=1;for(this[ir+Mu]=255&yt;--Mu>=0&&(Su*=256);)this[ir+Mu]=yt/Su&255;return ir+_c},F0.prototype.writeUInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,1,255,0),F0.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),this[ir]=255&yt,ir+1},F0.prototype.writeUInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,65535,0),F0.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):cv(this,yt,ir,!0),ir+2},F0.prototype.writeUInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,65535,0),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):cv(this,yt,ir,!1),ir+2},F0.prototype.writeUInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,4294967295,0),F0.TYPED_ARRAY_SUPPORT?(this[ir+3]=yt>>>24,this[ir+2]=yt>>>16,this[ir+1]=yt>>>8,this[ir]=255&yt):ly(this,yt,ir,!0),ir+4},F0.prototype.writeUInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,4294967295,0),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):ly(this,yt,ir,!1),ir+4},F0.prototype.writeIntLE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);fv(this,yt,ir,_c,Mu-1,-Mu)}var Su=0,l0=1,E0=0;for(this[ir]=255&yt;++Su<_c&&(l0*=256);)yt<0&&E0===0&&this[ir+Su-1]!==0&&(E0=1),this[ir+Su]=(yt/l0>>0)-E0&255;return ir+_c},F0.prototype.writeIntBE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);fv(this,yt,ir,_c,Mu-1,-Mu)}var Su=_c-1,l0=1,E0=0;for(this[ir+Su]=255&yt;--Su>=0&&(l0*=256);)yt<0&&E0===0&&this[ir+Su+1]!==0&&(E0=1),this[ir+Su]=(yt/l0>>0)-E0&255;return ir+_c},F0.prototype.writeInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,1,127,-128),F0.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),yt<0&&(yt=255+yt+1),this[ir]=255&yt,ir+1},F0.prototype.writeInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,32767,-32768),F0.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):cv(this,yt,ir,!0),ir+2},F0.prototype.writeInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,32767,-32768),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):cv(this,yt,ir,!1),ir+2},F0.prototype.writeInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,2147483647,-2147483648),F0.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8,this[ir+2]=yt>>>16,this[ir+3]=yt>>>24):ly(this,yt,ir,!0),ir+4},F0.prototype.writeInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,2147483647,-2147483648),yt<0&&(yt=4294967295+yt+1),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):ly(this,yt,ir,!1),ir+4},F0.prototype.writeFloatLE=function(yt,ir,_c){return Ly(this,yt,ir,!0,_c)},F0.prototype.writeFloatBE=function(yt,ir,_c){return Ly(this,yt,ir,!1,_c)},F0.prototype.writeDoubleLE=function(yt,ir,_c){return Hy(this,yt,ir,!0,_c)},F0.prototype.writeDoubleBE=function(yt,ir,_c){return Hy(this,yt,ir,!1,_c)},F0.prototype.copy=function(yt,ir,_c,mu){if(_c||(_c=0),mu||mu===0||(mu=this.length),ir>=yt.length&&(ir=yt.length),ir||(ir=0),mu>0&&mu<_c&&(mu=_c),mu===_c||yt.length===0||this.length===0)return 0;if(ir<0)throw new RangeError("targetStart out of bounds");if(_c<0||_c>=this.length)throw new RangeError("sourceStart out of bounds");if(mu<0)throw new RangeError("sourceEnd out of bounds");mu>this.length&&(mu=this.length),yt.length-ir=0;--Mu)yt[Mu+ir]=this[Mu+_c];else if(Su<1e3||!F0.TYPED_ARRAY_SUPPORT)for(Mu=0;Mu>>=0,_c=_c===void 0?this.length:_c>>>0,yt||(yt=0),typeof yt=="number")for(Su=ir;Su<_c;++Su)this[Su]=yt;else{var l0=j1(yt)?yt:Dy(new F0(yt,mu).toString()),E0=l0.length;for(Su=0;Su<_c-ir;++Su)this[Su+ir]=l0[Su%E0]}return this};var t2=/[^+\/0-9A-Za-z-_]/g;function C2(yt){return yt<16?"0"+yt.toString(16):yt.toString(16)}function Dy(yt,ir){var _c;ir=ir||1/0;for(var mu=yt.length,Mu=null,Su=[],l0=0;l055295&&_c<57344){if(!Mu){if(_c>56319){(ir-=3)>-1&&Su.push(239,191,189);continue}if(l0+1===mu){(ir-=3)>-1&&Su.push(239,191,189);continue}Mu=_c;continue}if(_c<56320){(ir-=3)>-1&&Su.push(239,191,189),Mu=_c;continue}_c=65536+(Mu-55296<<10|_c-56320)}else Mu&&(ir-=3)>-1&&Su.push(239,191,189);if(Mu=null,_c<128){if((ir-=1)<0)break;Su.push(_c)}else if(_c<2048){if((ir-=2)<0)break;Su.push(_c>>6|192,63&_c|128)}else if(_c<65536){if((ir-=3)<0)break;Su.push(_c>>12|224,_c>>6&63|128,63&_c|128)}else{if(!(_c<1114112))throw new Error("Invalid code point");if((ir-=4)<0)break;Su.push(_c>>18|240,_c>>12&63|128,_c>>6&63|128,63&_c|128)}}return Su}function jw(yt){return function(ir){var _c,mu,Mu,Su,l0,E0;$u||Iu();var j0=ir.length;if(j0%4>0)throw new Error("Invalid string. Length must be a multiple of 4");l0=ir[j0-2]==="="?2:ir[j0-1]==="="?1:0,E0=new xu(3*j0/4-l0),Mu=l0>0?j0-4:j0;var M0=0;for(_c=0,mu=0;_c>16&255,E0[M0++]=Su>>8&255,E0[M0++]=255&Su;return l0===2?(Su=gu[ir.charCodeAt(_c)]<<2|gu[ir.charCodeAt(_c+1)]>>4,E0[M0++]=255&Su):l0===1&&(Su=gu[ir.charCodeAt(_c)]<<10|gu[ir.charCodeAt(_c+1)]<<4|gu[ir.charCodeAt(_c+2)]>>2,E0[M0++]=Su>>8&255,E0[M0++]=255&Su),E0}(function(ir){if((ir=function(_c){return _c.trim?_c.trim():_c.replace(/^\s+|\s+$/g,"")}(ir).replace(t2,"")).length<2)return"";for(;ir.length%4!=0;)ir+="=";return ir}(yt))}function pw(yt,ir,_c,mu){for(var Mu=0;Mu=ir.length||Mu>=yt.length);++Mu)ir[Mu+_c]=yt[Mu];return Mu}function vw(yt){return yt!=null&&(!!yt._isBuffer||Hw(yt)||function(ir){return typeof ir.readFloatLE=="function"&&typeof ir.slice=="function"&&Hw(ir.slice(0,0))}(yt))}function Hw(yt){return!!yt.constructor&&typeof yt.constructor.isBuffer=="function"&&yt.constructor.isBuffer(yt)}var uw=Object.freeze({__proto__:null,Buffer:F0,INSPECT_MAX_BYTES:50,SlowBuffer:function(yt){return+yt!=yt&&(yt=0),F0.alloc(+yt)},isBuffer:vw,kMaxLength:O0}),Nw={},lw={},Lw={},zw=tt(uw),A2={};function kv(){throw new Error("setTimeout has not been defined")}function Y1(){throw new Error("clearTimeout has not been defined")}var tv=kv,Yv=Y1;function By(yt){if(tv===setTimeout)return setTimeout(yt,0);if((tv===kv||!tv)&&setTimeout)return tv=setTimeout,setTimeout(yt,0);try{return tv(yt,0)}catch{try{return tv.call(null,yt,0)}catch{return tv.call(this,yt,0)}}}typeof a.setTimeout=="function"&&(tv=setTimeout),typeof a.clearTimeout=="function"&&(Yv=clearTimeout);var Qy,e2=[],Kw=!1,r$=-1;function v3(){Kw&&Qy&&(Kw=!1,Qy.length?e2=Qy.concat(e2):r$=-1,e2.length&&d$())}function d$(){if(!Kw){var yt=By(v3);Kw=!0;for(var ir=e2.length;ir;){for(Qy=e2,e2=[];++r$1)for(var _c=1;_c4294967295)throw new RangeError("requested too many random bytes");var _c=xw.allocUnsafe(yt);if(yt>0)if(yt>fw)for(var mu=0;mu0&&l0.length>Mu){l0.warned=!0;var E0=new Error("Possible EventEmitter memory leak detected. "+l0.length+" "+ir+" listeners added. Use emitter.setMaxListeners() to increase limit");E0.name="MaxListenersExceededWarning",E0.emitter=yt,E0.type=ir,E0.count=l0.length,function(j0){typeof console.warn=="function"?console.warn(j0):console.log(j0)}(E0)}}else l0=Su[ir]=_c,++yt._eventsCount;return yt}function bE(yt,ir,_c){var mu=!1;function Mu(){yt.removeListener(ir,Mu),mu||(mu=!0,_c.apply(yt,arguments))}return Mu.listener=_c,Mu}function J_(yt){var ir=this._events;if(ir){var _c=ir[yt];if(typeof _c=="function")return 1;if(_c)return _c.length}return 0}function B_(yt,ir){for(var _c=new Array(ir);ir--;)_c[ir]=yt[ir];return _c}j3.prototype=Object.create(null),$w.EventEmitter=$w,$w.usingDomains=!1,$w.prototype.domain=void 0,$w.prototype._events=void 0,$w.prototype._maxListeners=void 0,$w.defaultMaxListeners=10,$w.init=function(){this.domain=null,$w.usingDomains&&(void 0).active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new j3,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},$w.prototype.setMaxListeners=function(yt){if(typeof yt!="number"||yt<0||isNaN(yt))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=yt,this},$w.prototype.getMaxListeners=function(){return w3(this)},$w.prototype.emit=function(yt){var ir,_c,mu,Mu,Su,l0,E0,j0=yt==="error";if(l0=this._events)j0=j0&&l0.error==null;else if(!j0)return!1;if(E0=this.domain,j0){if(ir=arguments[1],!E0){if(ir instanceof Error)throw ir;var M0=new Error('Uncaught, unspecified "error" event. ('+ir+")");throw M0.context=ir,M0}return ir||(ir=new Error('Uncaught, unspecified "error" event')),ir.domainEmitter=this,ir.domain=E0,ir.domainThrown=!1,E0.emit("error",ir),!1}if(!(_c=l0[yt]))return!1;var B0=typeof _c=="function";switch(mu=arguments.length){case 1:(function(V0,y1,v1){if(y1)V0.call(v1);else for(var F1=V0.length,ov=B_(V0,F1),bv=0;bv0;)if(_c[Su]===ir||_c[Su].listener&&_c[Su].listener===ir){l0=_c[Su].listener,Mu=Su;break}if(Mu<0)return this;if(_c.length===1){if(_c[0]=void 0,--this._eventsCount==0)return this._events=new j3,this;delete mu[yt]}else(function(E0,j0){for(var M0=j0,B0=M0+1,V0=E0.length;B00?Reflect.ownKeys(this._events):[]};var $_=tt(Object.freeze({__proto__:null,EventEmitter:$w,default:$w})),M6=$_.EventEmitter,D_=typeof Object.create=="function"?function(yt,ir){yt.super_=ir,yt.prototype=Object.create(ir.prototype,{constructor:{value:yt,enumerable:!1,writable:!0,configurable:!0}})}:function(yt,ir){yt.super_=ir;var _c=function(){};_c.prototype=ir.prototype,yt.prototype=new _c,yt.prototype.constructor=yt},FA=/%[sdj%]/g;function g8(yt){if(!rF(yt)){for(var ir=[],_c=0;_c=Mu)return E0;switch(E0){case"%s":return String(mu[_c++]);case"%d":return Number(mu[_c++]);case"%j":try{return JSON.stringify(mu[_c++])}catch{return"[Circular]"}default:return E0}}),l0=mu[_c];_c=3&&(_c.depth=arguments[2]),arguments.length>=4&&(_c.colors=arguments[3]),Rz(ir)?_c.showHidden=ir:ir&&GG(_c,ir),qI(_c.showHidden)&&(_c.showHidden=!1),qI(_c.depth)&&(_c.depth=2),qI(_c.colors)&&(_c.colors=!1),qI(_c.customInspect)&&(_c.customInspect=!0),_c.colors&&(_c.stylize=Yx),oN(_c,yt,_c.depth)}function Yx(yt,ir){var _c=I6.styles[ir];return _c?"\x1B["+I6.colors[_c][0]+"m"+yt+"\x1B["+I6.colors[_c][1]+"m":yt}function Tz(yt,ir){return yt}function oN(yt,ir,_c){if(yt.customInspect&&ir&&sN(ir.inspect)&&ir.inspect!==I6&&(!ir.constructor||ir.constructor.prototype!==ir)){var mu=ir.inspect(_c,yt);return rF(mu)||(mu=oN(yt,mu,_c)),mu}var Mu=function(y1,v1){if(qI(v1))return y1.stylize("undefined","undefined");if(rF(v1)){var F1="'"+JSON.stringify(v1).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return y1.stylize(F1,"string")}return qG(v1)?y1.stylize(""+v1,"number"):Rz(v1)?y1.stylize(""+v1,"boolean"):qL(v1)?y1.stylize("null","null"):void 0}(yt,ir);if(Mu)return Mu;var Su=Object.keys(ir),l0=function(y1){var v1={};return y1.forEach(function(F1,ov){v1[F1]=!0}),v1}(Su);if(yt.showHidden&&(Su=Object.getOwnPropertyNames(ir)),WL(ir)&&(Su.indexOf("message")>=0||Su.indexOf("description")>=0))return aN(ir);if(Su.length===0){if(sN(ir)){var E0=ir.name?": "+ir.name:"";return yt.stylize("[Function"+E0+"]","special")}if(DC(ir))return yt.stylize(RegExp.prototype.toString.call(ir),"regexp");if(EO(ir))return yt.stylize(Date.prototype.toString.call(ir),"date");if(WL(ir))return aN(ir)}var j0,M0="",B0=!1,V0=["{","}"];return VI(ir)&&(B0=!0,V0=["[","]"]),sN(ir)&&(M0=" [Function"+(ir.name?": "+ir.name:"")+"]"),DC(ir)&&(M0=" "+RegExp.prototype.toString.call(ir)),EO(ir)&&(M0=" "+Date.prototype.toUTCString.call(ir)),WL(ir)&&(M0=" "+aN(ir)),Su.length!==0||B0&&ir.length!=0?_c<0?DC(ir)?yt.stylize(RegExp.prototype.toString.call(ir),"regexp"):yt.stylize("[Object]","special"):(yt.seen.push(ir),j0=B0?function(y1,v1,F1,ov,bv){for(var gv=[],xv=0,hy=v1.length;xv-1};function ov(c0){if(typeof c0!="string"&&(c0=String(c0)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(c0)||c0==="")throw new TypeError('Invalid character in header field name: "'+c0+'"');return c0.toLowerCase()}function bv(c0){return typeof c0!="string"&&(c0=String(c0)),c0}function gv(c0){var a0={next:function(){var S0=c0.shift();return{done:S0===void 0,value:S0}}};return M0&&(a0[Symbol.iterator]=function(){return a0}),a0}function xv(c0){this.map={},c0 instanceof xv?c0.forEach(function(a0,S0){this.append(S0,a0)},this):Array.isArray(c0)?c0.forEach(function(a0){this.append(a0[0],a0[1])},this):c0&&Object.getOwnPropertyNames(c0).forEach(function(a0){this.append(a0,c0[a0])},this)}function hy(c0){if(c0.bodyUsed)return Promise.reject(new TypeError("Already read"));c0.bodyUsed=!0}function oy(c0){return new Promise(function(a0,S0){c0.onload=function(){a0(c0.result)},c0.onerror=function(){S0(c0.error)}})}function fy(c0){var a0=new FileReader,S0=oy(a0);return a0.readAsArrayBuffer(c0),S0}function Fy(c0){if(c0.slice)return c0.slice(0);var a0=new Uint8Array(c0.byteLength);return a0.set(new Uint8Array(c0)),a0.buffer}function qv(){return this.bodyUsed=!1,this._initBody=function(c0){var a0;this.bodyUsed=this.bodyUsed,this._bodyInit=c0,c0?typeof c0=="string"?this._bodyText=c0:B0&&Blob.prototype.isPrototypeOf(c0)?this._bodyBlob=c0:q0&&FormData.prototype.isPrototypeOf(c0)?this._bodyFormData=c0:j0&&URLSearchParams.prototype.isPrototypeOf(c0)?this._bodyText=c0.toString():y1&&B0&&(a0=c0)&&DataView.prototype.isPrototypeOf(a0)?(this._bodyArrayBuffer=Fy(c0.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):y1&&(ArrayBuffer.prototype.isPrototypeOf(c0)||F1(c0))?this._bodyArrayBuffer=Fy(c0):this._bodyText=c0=Object.prototype.toString.call(c0):this._bodyText="",this.headers.get("content-type")||(typeof c0=="string"?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):j0&&URLSearchParams.prototype.isPrototypeOf(c0)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},B0&&(this.blob=function(){var c0=hy(this);if(c0)return c0;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?hy(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(fy)}),this.text=function(){var c0,a0,S0,z0=hy(this);if(z0)return z0;if(this._bodyBlob)return c0=this._bodyBlob,S0=oy(a0=new FileReader),a0.readAsText(c0),S0;if(this._bodyArrayBuffer)return Promise.resolve(function(Q0){for(var p1=new Uint8Array(Q0),T1=new Array(p1.length),U1=0;U1-1?p1:Q0}(a0.method||this.method||"GET"),this.mode=a0.mode||this.mode||null,this.signal=a0.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&S0)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(S0),!(this.method!=="GET"&&this.method!=="HEAD"||a0.cache!=="no-store"&&a0.cache!=="no-cache")){var z0=/([?&])_=[^&]*/;z0.test(this.url)?this.url=this.url.replace(z0,"$1_="+new Date().getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+new Date().getTime()}}function X0(c0){var a0=new FormData;return c0.trim().split("&").forEach(function(S0){if(S0){var z0=S0.split("="),Q0=z0.shift().replace(/\+/g," "),p1=z0.join("=").replace(/\+/g," ");a0.append(decodeURIComponent(Q0),decodeURIComponent(p1))}}),a0}function s0(c0,a0){if(!(this instanceof s0))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');a0||(a0={}),this.type="default",this.status=a0.status===void 0?200:a0.status,this.ok=this.status>=200&&this.status<300,this.statusText=a0.statusText===void 0?"":""+a0.statusText,this.headers=new xv(a0.headers),this.url=a0.url||"",this._initBody(c0)}T0.prototype.clone=function(){return new T0(this,{body:this._bodyInit})},qv.call(T0.prototype),qv.call(s0.prototype),s0.prototype.clone=function(){return new s0(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new xv(this.headers),url:this.url})},s0.error=function(){var c0=new s0(null,{status:0,statusText:""});return c0.type="error",c0};var g0=[301,302,303,307,308];s0.redirect=function(c0,a0){if(g0.indexOf(a0)===-1)throw new RangeError("Invalid status code");return new s0(null,{status:a0,headers:{location:c0}})},l0.DOMException=E0.DOMException;try{new l0.DOMException}catch{l0.DOMException=function(a0,S0){this.message=a0,this.name=S0;var z0=Error(a0);this.stack=z0.stack},l0.DOMException.prototype=Object.create(Error.prototype),l0.DOMException.prototype.constructor=l0.DOMException}function d0(c0,a0){return new Promise(function(S0,z0){var Q0=new T0(c0,a0);if(Q0.signal&&Q0.signal.aborted)return z0(new l0.DOMException("Aborted","AbortError"));var p1=new XMLHttpRequest;function T1(){p1.abort()}p1.onload=function(){var U1,S1,n1={status:p1.status,statusText:p1.statusText,headers:(U1=p1.getAllResponseHeaders()||"",S1=new xv,U1.replace(/\r?\n[\t ]+/g," ").split("\r").map(function(J1){return J1.indexOf(` +`)===0?J1.substr(1,J1.length):J1}).forEach(function(J1){var wv=J1.split(":"),Sv=wv.shift().trim();if(Sv){var Hv=wv.join(":").trim();S1.append(Sv,Hv)}}),S1)};n1.url="responseURL"in p1?p1.responseURL:n1.headers.get("X-Request-URL");var V1="response"in p1?p1.response:p1.responseText;setTimeout(function(){S0(new s0(V1,n1))},0)},p1.onerror=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.ontimeout=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.onabort=function(){setTimeout(function(){z0(new l0.DOMException("Aborted","AbortError"))},0)},p1.open(Q0.method,function(U1){try{return U1===""&&E0.location.href?E0.location.href:U1}catch{return U1}}(Q0.url),!0),Q0.credentials==="include"?p1.withCredentials=!0:Q0.credentials==="omit"&&(p1.withCredentials=!1),"responseType"in p1&&(B0?p1.responseType="blob":y1&&Q0.headers.get("Content-Type")&&Q0.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(p1.responseType="arraybuffer")),!a0||typeof a0.headers!="object"||a0.headers instanceof xv?Q0.headers.forEach(function(U1,S1){p1.setRequestHeader(S1,U1)}):Object.getOwnPropertyNames(a0.headers).forEach(function(U1){p1.setRequestHeader(U1,bv(a0.headers[U1]))}),Q0.signal&&(Q0.signal.addEventListener("abort",T1),p1.onreadystatechange=function(){p1.readyState===4&&Q0.signal.removeEventListener("abort",T1)}),p1.send(Q0._bodyInit===void 0?null:Q0._bodyInit)})}d0.polyfill=!0,E0.fetch||(E0.fetch=d0,E0.Headers=xv,E0.Request=T0,E0.Response=s0),l0.Headers=xv,l0.Request=T0,l0.Response=s0,l0.fetch=d0})({})})(mu),mu.fetch.ponyfill=!0,delete mu.fetch.polyfill;var Mu=_c.fetch?_c:mu;(ir=Mu.fetch).default=Mu.fetch,ir.fetch=Mu.fetch,ir.Headers=Mu.Headers,ir.Request=Mu.Request,ir.Response=Mu.Response,yt.exports=ir})(nt,nt.exports);var $a=d(nt.exports),Ws=[],gu=[],Su=typeof Uint8Array<"u"?Uint8Array:Array,$u=!1;function Iu(){$u=!0;for(var yt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ir=0;ir<64;++ir)Ws[ir]=yt[ir],gu[yt.charCodeAt(ir)]=ir;gu[45]=62,gu[95]=63}function Xu(yt,ir,_c){for(var mu,Mu,xu=[],l0=ir;l0<_c;l0+=3)mu=(yt[l0]<<16)+(yt[l0+1]<<8)+yt[l0+2],xu.push(Ws[(Mu=mu)>>18&63]+Ws[Mu>>12&63]+Ws[Mu>>6&63]+Ws[63&Mu]);return xu.join("")}function r0(yt){var ir;$u||Iu();for(var _c=yt.length,mu=_c%3,Mu="",xu=[],l0=16383,E0=0,j0=_c-mu;E0j0?j0:E0+l0));return mu===1?(ir=yt[_c-1],Mu+=Ws[ir>>2],Mu+=Ws[ir<<4&63],Mu+="=="):mu===2&&(ir=(yt[_c-2]<<8)+yt[_c-1],Mu+=Ws[ir>>10],Mu+=Ws[ir>>4&63],Mu+=Ws[ir<<2&63],Mu+="="),xu.push(Mu),xu.join("")}function p0(yt,ir,_c,mu,Mu){var xu,l0,E0=8*Mu-mu-1,j0=(1<>1,B0=-7,q0=_c?Mu-1:0,y1=_c?-1:1,v1=yt[ir+q0];for(q0+=y1,xu=v1&(1<<-B0)-1,v1>>=-B0,B0+=E0;B0>0;xu=256*xu+yt[ir+q0],q0+=y1,B0-=8);for(l0=xu&(1<<-B0)-1,xu>>=-B0,B0+=mu;B0>0;l0=256*l0+yt[ir+q0],q0+=y1,B0-=8);if(xu===0)xu=1-M0;else{if(xu===j0)return l0?NaN:1/0*(v1?-1:1);l0+=Math.pow(2,mu),xu-=M0}return(v1?-1:1)*l0*Math.pow(2,xu-mu)}function y0(yt,ir,_c,mu,Mu,xu){var l0,E0,j0,M0=8*xu-Mu-1,B0=(1<>1,y1=Mu===23?Math.pow(2,-24)-Math.pow(2,-77):0,v1=mu?0:xu-1,F1=mu?1:-1,ov=ir<0||ir===0&&1/ir<0?1:0;for(ir=Math.abs(ir),isNaN(ir)||ir===1/0?(E0=isNaN(ir)?1:0,l0=B0):(l0=Math.floor(Math.log(ir)/Math.LN2),ir*(j0=Math.pow(2,-l0))<1&&(l0--,j0*=2),(ir+=l0+q0>=1?y1/j0:y1*Math.pow(2,1-q0))*j0>=2&&(l0++,j0/=2),l0+q0>=B0?(E0=0,l0=B0):l0+q0>=1?(E0=(ir*j0-1)*Math.pow(2,Mu),l0+=q0):(E0=ir*Math.pow(2,q0-1)*Math.pow(2,Mu),l0=0));Mu>=8;yt[_c+v1]=255&E0,v1+=F1,E0/=256,Mu-=8);for(l0=l0<0;yt[_c+v1]=255&l0,v1+=F1,l0/=256,M0-=8);yt[_c+v1-F1]|=128*ov}var A0={}.toString,$0=Array.isArray||function(yt){return A0.call(yt)=="[object Array]"};F0.TYPED_ARRAY_SUPPORT=a.TYPED_ARRAY_SUPPORT===void 0||a.TYPED_ARRAY_SUPPORT;var O0=L0();function L0(){return F0.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function V0(yt,ir){if(L0()=L0())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+L0().toString(16)+" bytes");return 0|yt}function j1(yt){return!(yt==null||!yt._isBuffer)}function r1(yt,ir){if(j1(yt))return yt.length;if(typeof ArrayBuffer<"u"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(yt)||yt instanceof ArrayBuffer))return yt.byteLength;typeof yt!="string"&&(yt=""+yt);var _c=yt.length;if(_c===0)return 0;for(var mu=!1;;)switch(ir){case"ascii":case"latin1":case"binary":return _c;case"utf8":case"utf-8":case void 0:return Dy(yt).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*_c;case"hex":return _c>>>1;case"base64":return jw(yt).length;default:if(mu)return Dy(yt).length;ir=(""+ir).toLowerCase(),mu=!0}}function t1(yt,ir,_c){var mu=!1;if((ir===void 0||ir<0)&&(ir=0),ir>this.length||((_c===void 0||_c>this.length)&&(_c=this.length),_c<=0)||(_c>>>=0)<=(ir>>>=0))return"";for(yt||(yt="utf8");;)switch(yt){case"hex":return ev(this,ir,_c);case"utf8":case"utf-8":return O1(this,ir,_c);case"ascii":return rv(this,ir,_c);case"latin1":case"binary":return D1(this,ir,_c);case"base64":return R1(this,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Mv(this,ir,_c);default:if(mu)throw new TypeError("Unknown encoding: "+yt);yt=(yt+"").toLowerCase(),mu=!0}}function D0(yt,ir,_c){var mu=yt[ir];yt[ir]=yt[_c],yt[_c]=mu}function Z0(yt,ir,_c,mu,Mu){if(yt.length===0)return-1;if(typeof _c=="string"?(mu=_c,_c=0):_c>2147483647?_c=2147483647:_c<-2147483648&&(_c=-2147483648),_c=+_c,isNaN(_c)&&(_c=Mu?0:yt.length-1),_c<0&&(_c=yt.length+_c),_c>=yt.length){if(Mu)return-1;_c=yt.length-1}else if(_c<0){if(!Mu)return-1;_c=0}if(typeof ir=="string"&&(ir=F0.from(ir,mu)),j1(ir))return ir.length===0?-1:f1(yt,ir,_c,mu,Mu);if(typeof ir=="number")return ir&=255,F0.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?Mu?Uint8Array.prototype.indexOf.call(yt,ir,_c):Uint8Array.prototype.lastIndexOf.call(yt,ir,_c):f1(yt,[ir],_c,mu,Mu);throw new TypeError("val must be string, number or Buffer")}function f1(yt,ir,_c,mu,Mu){var xu,l0=1,E0=yt.length,j0=ir.length;if(mu!==void 0&&((mu=String(mu).toLowerCase())==="ucs2"||mu==="ucs-2"||mu==="utf16le"||mu==="utf-16le")){if(yt.length<2||ir.length<2)return-1;l0=2,E0/=2,j0/=2,_c/=2}function M0(v1,F1){return l0===1?v1[F1]:v1.readUInt16BE(F1*l0)}if(Mu){var B0=-1;for(xu=_c;xuE0&&(_c=E0-j0),xu=_c;xu>=0;xu--){for(var q0=!0,y1=0;y1Mu&&(mu=Mu):mu=Mu;var xu=ir.length;if(xu%2!=0)throw new TypeError("Invalid hex string");mu>xu/2&&(mu=xu/2);for(var l0=0;l0>8,j0=l0%256,M0.push(j0),M0.push(E0);return M0}(ir,yt.length-_c),yt,_c,mu)}function R1(yt,ir,_c){return ir===0&&_c===yt.length?r0(yt):r0(yt.slice(ir,_c))}function O1(yt,ir,_c){_c=Math.min(yt.length,_c);for(var mu=[],Mu=ir;Mu<_c;){var xu,l0,E0,j0,M0=yt[Mu],B0=null,q0=M0>239?4:M0>223?3:M0>191?2:1;if(Mu+q0<=_c)switch(q0){case 1:M0<128&&(B0=M0);break;case 2:(192&(xu=yt[Mu+1]))==128&&(j0=(31&M0)<<6|63&xu)>127&&(B0=j0);break;case 3:xu=yt[Mu+1],l0=yt[Mu+2],(192&xu)==128&&(192&l0)==128&&(j0=(15&M0)<<12|(63&xu)<<6|63&l0)>2047&&(j0<55296||j0>57343)&&(B0=j0);break;case 4:xu=yt[Mu+1],l0=yt[Mu+2],E0=yt[Mu+3],(192&xu)==128&&(192&l0)==128&&(192&E0)==128&&(j0=(15&M0)<<18|(63&xu)<<12|(63&l0)<<6|63&E0)>65535&&j0<1114112&&(B0=j0)}B0===null?(B0=65533,q0=1):B0>65535&&(B0-=65536,mu.push(B0>>>10&1023|55296),B0=56320|1023&B0),mu.push(B0),Mu+=q0}return function(y1){var v1=y1.length;if(v1<=Q1)return String.fromCharCode.apply(String,y1);for(var F1="",ov=0;ov0&&(yt=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(yt+=" ... ")),""},F0.prototype.compare=function(yt,ir,_c,mu,Mu){if(!j1(yt))throw new TypeError("Argument must be a Buffer");if(ir===void 0&&(ir=0),_c===void 0&&(_c=yt?yt.length:0),mu===void 0&&(mu=0),Mu===void 0&&(Mu=this.length),ir<0||_c>yt.length||mu<0||Mu>this.length)throw new RangeError("out of range index");if(mu>=Mu&&ir>=_c)return 0;if(mu>=Mu)return-1;if(ir>=_c)return 1;if(this===yt)return 0;for(var xu=(Mu>>>=0)-(mu>>>=0),l0=(_c>>>=0)-(ir>>>=0),E0=Math.min(xu,l0),j0=this.slice(mu,Mu),M0=yt.slice(ir,_c),B0=0;B0Mu)&&(_c=Mu),yt.length>0&&(_c<0||ir<0)||ir>this.length)throw new RangeError("Attempt to write outside buffer bounds");mu||(mu="utf8");for(var xu=!1;;)switch(mu){case"hex":return w1(this,yt,ir,_c);case"utf8":case"utf-8":return m1(this,yt,ir,_c);case"ascii":return c1(this,yt,ir,_c);case"latin1":case"binary":return G0(this,yt,ir,_c);case"base64":return o1(this,yt,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return d1(this,yt,ir,_c);default:if(xu)throw new TypeError("Unknown encoding: "+mu);mu=(""+mu).toLowerCase(),xu=!0}},F0.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q1=4096;function rv(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(127&yt[Mu]);return mu}function D1(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(yt[Mu]);return mu}function ev(yt,ir,_c){var mu=yt.length;(!ir||ir<0)&&(ir=0),(!_c||_c<0||_c>mu)&&(_c=mu);for(var Mu="",xu=ir;xu<_c;++xu)Mu+=C2(yt[xu]);return Mu}function Mv(yt,ir,_c){for(var mu=yt.slice(ir,_c),Mu="",xu=0;xu_c)throw new RangeError("Trying to access beyond buffer length")}function fv(yt,ir,_c,mu,Mu,xu){if(!j1(yt))throw new TypeError('"buffer" argument must be a Buffer instance');if(ir>Mu||iryt.length)throw new RangeError("Index out of range")}function cv(yt,ir,_c,mu){ir<0&&(ir=65535+ir+1);for(var Mu=0,xu=Math.min(yt.length-_c,2);Mu>>8*(mu?Mu:1-Mu)}function ly(yt,ir,_c,mu){ir<0&&(ir=4294967295+ir+1);for(var Mu=0,xu=Math.min(yt.length-_c,4);Mu>>8*(mu?Mu:3-Mu)&255}function Cy(yt,ir,_c,mu,Mu,xu){if(_c+mu>yt.length)throw new RangeError("Index out of range");if(_c<0)throw new RangeError("Index out of range")}function Ly(yt,ir,_c,mu,Mu){return Mu||Cy(yt,0,_c,4),y0(yt,ir,_c,mu,23,4),_c+4}function Hy(yt,ir,_c,mu,Mu){return Mu||Cy(yt,0,_c,8),y0(yt,ir,_c,mu,52,8),_c+8}F0.prototype.slice=function(yt,ir){var _c,mu=this.length;if((yt=~~yt)<0?(yt+=mu)<0&&(yt=0):yt>mu&&(yt=mu),(ir=ir===void 0?mu:~~ir)<0?(ir+=mu)<0&&(ir=0):ir>mu&&(ir=mu),ir0&&(Mu*=256);)mu+=this[yt+--ir]*Mu;return mu},F0.prototype.readUInt8=function(yt,ir){return ir||Zv(yt,1,this.length),this[yt]},F0.prototype.readUInt16LE=function(yt,ir){return ir||Zv(yt,2,this.length),this[yt]|this[yt+1]<<8},F0.prototype.readUInt16BE=function(yt,ir){return ir||Zv(yt,2,this.length),this[yt]<<8|this[yt+1]},F0.prototype.readUInt32LE=function(yt,ir){return ir||Zv(yt,4,this.length),(this[yt]|this[yt+1]<<8|this[yt+2]<<16)+16777216*this[yt+3]},F0.prototype.readUInt32BE=function(yt,ir){return ir||Zv(yt,4,this.length),16777216*this[yt]+(this[yt+1]<<16|this[yt+2]<<8|this[yt+3])},F0.prototype.readIntLE=function(yt,ir,_c){yt|=0,ir|=0,_c||Zv(yt,ir,this.length);for(var mu=this[yt],Mu=1,xu=0;++xu=(Mu*=128)&&(mu-=Math.pow(2,8*ir)),mu},F0.prototype.readIntBE=function(yt,ir,_c){yt|=0,ir|=0,_c||Zv(yt,ir,this.length);for(var mu=ir,Mu=1,xu=this[yt+--mu];mu>0&&(Mu*=256);)xu+=this[yt+--mu]*Mu;return xu>=(Mu*=128)&&(xu-=Math.pow(2,8*ir)),xu},F0.prototype.readInt8=function(yt,ir){return ir||Zv(yt,1,this.length),128&this[yt]?-1*(255-this[yt]+1):this[yt]},F0.prototype.readInt16LE=function(yt,ir){ir||Zv(yt,2,this.length);var _c=this[yt]|this[yt+1]<<8;return 32768&_c?4294901760|_c:_c},F0.prototype.readInt16BE=function(yt,ir){ir||Zv(yt,2,this.length);var _c=this[yt+1]|this[yt]<<8;return 32768&_c?4294901760|_c:_c},F0.prototype.readInt32LE=function(yt,ir){return ir||Zv(yt,4,this.length),this[yt]|this[yt+1]<<8|this[yt+2]<<16|this[yt+3]<<24},F0.prototype.readInt32BE=function(yt,ir){return ir||Zv(yt,4,this.length),this[yt]<<24|this[yt+1]<<16|this[yt+2]<<8|this[yt+3]},F0.prototype.readFloatLE=function(yt,ir){return ir||Zv(yt,4,this.length),p0(this,yt,!0,23,4)},F0.prototype.readFloatBE=function(yt,ir){return ir||Zv(yt,4,this.length),p0(this,yt,!1,23,4)},F0.prototype.readDoubleLE=function(yt,ir){return ir||Zv(yt,8,this.length),p0(this,yt,!0,52,8)},F0.prototype.readDoubleBE=function(yt,ir){return ir||Zv(yt,8,this.length),p0(this,yt,!1,52,8)},F0.prototype.writeUIntLE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||fv(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=1,xu=0;for(this[ir]=255&yt;++xu<_c&&(Mu*=256);)this[ir+xu]=yt/Mu&255;return ir+_c},F0.prototype.writeUIntBE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||fv(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=_c-1,xu=1;for(this[ir+Mu]=255&yt;--Mu>=0&&(xu*=256);)this[ir+Mu]=yt/xu&255;return ir+_c},F0.prototype.writeUInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,1,255,0),F0.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),this[ir]=255&yt,ir+1},F0.prototype.writeUInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,65535,0),F0.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):cv(this,yt,ir,!0),ir+2},F0.prototype.writeUInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,65535,0),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):cv(this,yt,ir,!1),ir+2},F0.prototype.writeUInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,4294967295,0),F0.TYPED_ARRAY_SUPPORT?(this[ir+3]=yt>>>24,this[ir+2]=yt>>>16,this[ir+1]=yt>>>8,this[ir]=255&yt):ly(this,yt,ir,!0),ir+4},F0.prototype.writeUInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,4294967295,0),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):ly(this,yt,ir,!1),ir+4},F0.prototype.writeIntLE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);fv(this,yt,ir,_c,Mu-1,-Mu)}var xu=0,l0=1,E0=0;for(this[ir]=255&yt;++xu<_c&&(l0*=256);)yt<0&&E0===0&&this[ir+xu-1]!==0&&(E0=1),this[ir+xu]=(yt/l0>>0)-E0&255;return ir+_c},F0.prototype.writeIntBE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);fv(this,yt,ir,_c,Mu-1,-Mu)}var xu=_c-1,l0=1,E0=0;for(this[ir+xu]=255&yt;--xu>=0&&(l0*=256);)yt<0&&E0===0&&this[ir+xu+1]!==0&&(E0=1),this[ir+xu]=(yt/l0>>0)-E0&255;return ir+_c},F0.prototype.writeInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,1,127,-128),F0.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),yt<0&&(yt=255+yt+1),this[ir]=255&yt,ir+1},F0.prototype.writeInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,32767,-32768),F0.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):cv(this,yt,ir,!0),ir+2},F0.prototype.writeInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,2,32767,-32768),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):cv(this,yt,ir,!1),ir+2},F0.prototype.writeInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,2147483647,-2147483648),F0.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8,this[ir+2]=yt>>>16,this[ir+3]=yt>>>24):ly(this,yt,ir,!0),ir+4},F0.prototype.writeInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||fv(this,yt,ir,4,2147483647,-2147483648),yt<0&&(yt=4294967295+yt+1),F0.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):ly(this,yt,ir,!1),ir+4},F0.prototype.writeFloatLE=function(yt,ir,_c){return Ly(this,yt,ir,!0,_c)},F0.prototype.writeFloatBE=function(yt,ir,_c){return Ly(this,yt,ir,!1,_c)},F0.prototype.writeDoubleLE=function(yt,ir,_c){return Hy(this,yt,ir,!0,_c)},F0.prototype.writeDoubleBE=function(yt,ir,_c){return Hy(this,yt,ir,!1,_c)},F0.prototype.copy=function(yt,ir,_c,mu){if(_c||(_c=0),mu||mu===0||(mu=this.length),ir>=yt.length&&(ir=yt.length),ir||(ir=0),mu>0&&mu<_c&&(mu=_c),mu===_c||yt.length===0||this.length===0)return 0;if(ir<0)throw new RangeError("targetStart out of bounds");if(_c<0||_c>=this.length)throw new RangeError("sourceStart out of bounds");if(mu<0)throw new RangeError("sourceEnd out of bounds");mu>this.length&&(mu=this.length),yt.length-ir=0;--Mu)yt[Mu+ir]=this[Mu+_c];else if(xu<1e3||!F0.TYPED_ARRAY_SUPPORT)for(Mu=0;Mu>>=0,_c=_c===void 0?this.length:_c>>>0,yt||(yt=0),typeof yt=="number")for(xu=ir;xu<_c;++xu)this[xu]=yt;else{var l0=j1(yt)?yt:Dy(new F0(yt,mu).toString()),E0=l0.length;for(xu=0;xu<_c-ir;++xu)this[xu+ir]=l0[xu%E0]}return this};var t2=/[^+\/0-9A-Za-z-_]/g;function C2(yt){return yt<16?"0"+yt.toString(16):yt.toString(16)}function Dy(yt,ir){var _c;ir=ir||1/0;for(var mu=yt.length,Mu=null,xu=[],l0=0;l055295&&_c<57344){if(!Mu){if(_c>56319){(ir-=3)>-1&&xu.push(239,191,189);continue}if(l0+1===mu){(ir-=3)>-1&&xu.push(239,191,189);continue}Mu=_c;continue}if(_c<56320){(ir-=3)>-1&&xu.push(239,191,189),Mu=_c;continue}_c=65536+(Mu-55296<<10|_c-56320)}else Mu&&(ir-=3)>-1&&xu.push(239,191,189);if(Mu=null,_c<128){if((ir-=1)<0)break;xu.push(_c)}else if(_c<2048){if((ir-=2)<0)break;xu.push(_c>>6|192,63&_c|128)}else if(_c<65536){if((ir-=3)<0)break;xu.push(_c>>12|224,_c>>6&63|128,63&_c|128)}else{if(!(_c<1114112))throw new Error("Invalid code point");if((ir-=4)<0)break;xu.push(_c>>18|240,_c>>12&63|128,_c>>6&63|128,63&_c|128)}}return xu}function jw(yt){return function(ir){var _c,mu,Mu,xu,l0,E0;$u||Iu();var j0=ir.length;if(j0%4>0)throw new Error("Invalid string. Length must be a multiple of 4");l0=ir[j0-2]==="="?2:ir[j0-1]==="="?1:0,E0=new Su(3*j0/4-l0),Mu=l0>0?j0-4:j0;var M0=0;for(_c=0,mu=0;_c>16&255,E0[M0++]=xu>>8&255,E0[M0++]=255&xu;return l0===2?(xu=gu[ir.charCodeAt(_c)]<<2|gu[ir.charCodeAt(_c+1)]>>4,E0[M0++]=255&xu):l0===1&&(xu=gu[ir.charCodeAt(_c)]<<10|gu[ir.charCodeAt(_c+1)]<<4|gu[ir.charCodeAt(_c+2)]>>2,E0[M0++]=xu>>8&255,E0[M0++]=255&xu),E0}(function(ir){if((ir=function(_c){return _c.trim?_c.trim():_c.replace(/^\s+|\s+$/g,"")}(ir).replace(t2,"")).length<2)return"";for(;ir.length%4!=0;)ir+="=";return ir}(yt))}function pw(yt,ir,_c,mu){for(var Mu=0;Mu=ir.length||Mu>=yt.length);++Mu)ir[Mu+_c]=yt[Mu];return Mu}function vw(yt){return yt!=null&&(!!yt._isBuffer||Hw(yt)||function(ir){return typeof ir.readFloatLE=="function"&&typeof ir.slice=="function"&&Hw(ir.slice(0,0))}(yt))}function Hw(yt){return!!yt.constructor&&typeof yt.constructor.isBuffer=="function"&&yt.constructor.isBuffer(yt)}var uw=Object.freeze({__proto__:null,Buffer:F0,INSPECT_MAX_BYTES:50,SlowBuffer:function(yt){return+yt!=yt&&(yt=0),F0.alloc(+yt)},isBuffer:vw,kMaxLength:O0}),Nw={},lw={},Lw={},zw=tt(uw),A2={};function kv(){throw new Error("setTimeout has not been defined")}function Y1(){throw new Error("clearTimeout has not been defined")}var tv=kv,Yv=Y1;function By(yt){if(tv===setTimeout)return setTimeout(yt,0);if((tv===kv||!tv)&&setTimeout)return tv=setTimeout,setTimeout(yt,0);try{return tv(yt,0)}catch{try{return tv.call(null,yt,0)}catch{return tv.call(this,yt,0)}}}typeof a.setTimeout=="function"&&(tv=setTimeout),typeof a.clearTimeout=="function"&&(Yv=clearTimeout);var Qy,e2=[],Kw=!1,r$=-1;function v3(){Kw&&Qy&&(Kw=!1,Qy.length?e2=Qy.concat(e2):r$=-1,e2.length&&d$())}function d$(){if(!Kw){var yt=By(v3);Kw=!0;for(var ir=e2.length;ir;){for(Qy=e2,e2=[];++r$1)for(var _c=1;_c4294967295)throw new RangeError("requested too many random bytes");var _c=xw.allocUnsafe(yt);if(yt>0)if(yt>fw)for(var mu=0;mu0&&l0.length>Mu){l0.warned=!0;var E0=new Error("Possible EventEmitter memory leak detected. "+l0.length+" "+ir+" listeners added. Use emitter.setMaxListeners() to increase limit");E0.name="MaxListenersExceededWarning",E0.emitter=yt,E0.type=ir,E0.count=l0.length,function(j0){typeof console.warn=="function"?console.warn(j0):console.log(j0)}(E0)}}else l0=xu[ir]=_c,++yt._eventsCount;return yt}function bE(yt,ir,_c){var mu=!1;function Mu(){yt.removeListener(ir,Mu),mu||(mu=!0,_c.apply(yt,arguments))}return Mu.listener=_c,Mu}function J_(yt){var ir=this._events;if(ir){var _c=ir[yt];if(typeof _c=="function")return 1;if(_c)return _c.length}return 0}function B_(yt,ir){for(var _c=new Array(ir);ir--;)_c[ir]=yt[ir];return _c}j3.prototype=Object.create(null),$w.EventEmitter=$w,$w.usingDomains=!1,$w.prototype.domain=void 0,$w.prototype._events=void 0,$w.prototype._maxListeners=void 0,$w.defaultMaxListeners=10,$w.init=function(){this.domain=null,$w.usingDomains&&(void 0).active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new j3,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},$w.prototype.setMaxListeners=function(yt){if(typeof yt!="number"||yt<0||isNaN(yt))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=yt,this},$w.prototype.getMaxListeners=function(){return w3(this)},$w.prototype.emit=function(yt){var ir,_c,mu,Mu,xu,l0,E0,j0=yt==="error";if(l0=this._events)j0=j0&&l0.error==null;else if(!j0)return!1;if(E0=this.domain,j0){if(ir=arguments[1],!E0){if(ir instanceof Error)throw ir;var M0=new Error('Uncaught, unspecified "error" event. ('+ir+")");throw M0.context=ir,M0}return ir||(ir=new Error('Uncaught, unspecified "error" event')),ir.domainEmitter=this,ir.domain=E0,ir.domainThrown=!1,E0.emit("error",ir),!1}if(!(_c=l0[yt]))return!1;var B0=typeof _c=="function";switch(mu=arguments.length){case 1:(function(q0,y1,v1){if(y1)q0.call(v1);else for(var F1=q0.length,ov=B_(q0,F1),bv=0;bv0;)if(_c[xu]===ir||_c[xu].listener&&_c[xu].listener===ir){l0=_c[xu].listener,Mu=xu;break}if(Mu<0)return this;if(_c.length===1){if(_c[0]=void 0,--this._eventsCount==0)return this._events=new j3,this;delete mu[yt]}else(function(E0,j0){for(var M0=j0,B0=M0+1,q0=E0.length;B00?Reflect.ownKeys(this._events):[]};var $_=tt(Object.freeze({__proto__:null,EventEmitter:$w,default:$w})),M6=$_.EventEmitter,D_=typeof Object.create=="function"?function(yt,ir){yt.super_=ir,yt.prototype=Object.create(ir.prototype,{constructor:{value:yt,enumerable:!1,writable:!0,configurable:!0}})}:function(yt,ir){yt.super_=ir;var _c=function(){};_c.prototype=ir.prototype,yt.prototype=new _c,yt.prototype.constructor=yt},FA=/%[sdj%]/g;function g8(yt){if(!rF(yt)){for(var ir=[],_c=0;_c=Mu)return E0;switch(E0){case"%s":return String(mu[_c++]);case"%d":return Number(mu[_c++]);case"%j":try{return JSON.stringify(mu[_c++])}catch{return"[Circular]"}default:return E0}}),l0=mu[_c];_c=3&&(_c.depth=arguments[2]),arguments.length>=4&&(_c.colors=arguments[3]),Rz(ir)?_c.showHidden=ir:ir&&GG(_c,ir),qI(_c.showHidden)&&(_c.showHidden=!1),qI(_c.depth)&&(_c.depth=2),qI(_c.colors)&&(_c.colors=!1),qI(_c.customInspect)&&(_c.customInspect=!0),_c.colors&&(_c.stylize=Yx),oN(_c,yt,_c.depth)}function Yx(yt,ir){var _c=I6.styles[ir];return _c?"\x1B["+I6.colors[_c][0]+"m"+yt+"\x1B["+I6.colors[_c][1]+"m":yt}function Tz(yt,ir){return yt}function oN(yt,ir,_c){if(yt.customInspect&&ir&&sN(ir.inspect)&&ir.inspect!==I6&&(!ir.constructor||ir.constructor.prototype!==ir)){var mu=ir.inspect(_c,yt);return rF(mu)||(mu=oN(yt,mu,_c)),mu}var Mu=function(y1,v1){if(qI(v1))return y1.stylize("undefined","undefined");if(rF(v1)){var F1="'"+JSON.stringify(v1).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return y1.stylize(F1,"string")}return qG(v1)?y1.stylize(""+v1,"number"):Rz(v1)?y1.stylize(""+v1,"boolean"):qL(v1)?y1.stylize("null","null"):void 0}(yt,ir);if(Mu)return Mu;var xu=Object.keys(ir),l0=function(y1){var v1={};return y1.forEach(function(F1,ov){v1[F1]=!0}),v1}(xu);if(yt.showHidden&&(xu=Object.getOwnPropertyNames(ir)),WL(ir)&&(xu.indexOf("message")>=0||xu.indexOf("description")>=0))return aN(ir);if(xu.length===0){if(sN(ir)){var E0=ir.name?": "+ir.name:"";return yt.stylize("[Function"+E0+"]","special")}if(DC(ir))return yt.stylize(RegExp.prototype.toString.call(ir),"regexp");if(EO(ir))return yt.stylize(Date.prototype.toString.call(ir),"date");if(WL(ir))return aN(ir)}var j0,M0="",B0=!1,q0=["{","}"];return VI(ir)&&(B0=!0,q0=["[","]"]),sN(ir)&&(M0=" [Function"+(ir.name?": "+ir.name:"")+"]"),DC(ir)&&(M0=" "+RegExp.prototype.toString.call(ir)),EO(ir)&&(M0=" "+Date.prototype.toUTCString.call(ir)),WL(ir)&&(M0=" "+aN(ir)),xu.length!==0||B0&&ir.length!=0?_c<0?DC(ir)?yt.stylize(RegExp.prototype.toString.call(ir),"regexp"):yt.stylize("[Object]","special"):(yt.seen.push(ir),j0=B0?function(y1,v1,F1,ov,bv){for(var gv=[],xv=0,hy=v1.length;xv60?F1[0]+(v1===""?"":v1+` `)+" "+y1.join(`, - `)+" "+F1[1]:F1[0]+v1+" "+y1.join(", ")+" "+F1[1]}(j0,M0,V0)):V0[0]+M0+V0[1]}function aN(yt){return"["+Error.prototype.toString.call(yt)+"]"}function VL(yt,ir,_c,mu,Mu,Su){var l0,E0,j0;if((j0=Object.getOwnPropertyDescriptor(ir,Mu)||{value:ir[Mu]}).get?E0=j0.set?yt.stylize("[Getter/Setter]","special"):yt.stylize("[Getter]","special"):j0.set&&(E0=yt.stylize("[Setter]","special")),YG(mu,Mu)||(l0="["+Mu+"]"),E0||(yt.seen.indexOf(j0.value)<0?(E0=qL(_c)?oN(yt,j0.value,null):oN(yt,j0.value,_c-1)).indexOf(` -`)>-1&&(E0=Su?E0.split(` + `)+" "+F1[1]:F1[0]+v1+" "+y1.join(", ")+" "+F1[1]}(j0,M0,q0)):q0[0]+M0+q0[1]}function aN(yt){return"["+Error.prototype.toString.call(yt)+"]"}function VL(yt,ir,_c,mu,Mu,xu){var l0,E0,j0;if((j0=Object.getOwnPropertyDescriptor(ir,Mu)||{value:ir[Mu]}).get?E0=j0.set?yt.stylize("[Getter/Setter]","special"):yt.stylize("[Getter]","special"):j0.set&&(E0=yt.stylize("[Setter]","special")),YG(mu,Mu)||(l0="["+Mu+"]"),E0||(yt.seen.indexOf(j0.value)<0?(E0=qL(_c)?oN(yt,j0.value,null):oN(yt,j0.value,_c-1)).indexOf(` +`)>-1&&(E0=xu?E0.split(` `).map(function(M0){return" "+M0}).join(` `).substr(2):` `+E0.split(` `).map(function(M0){return" "+M0}).join(` -`)):E0=yt.stylize("[Circular]","special")),qI(l0)){if(Su&&Mu.match(/^\d+$/))return E0;(l0=JSON.stringify(""+Mu)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(l0=l0.substr(1,l0.length-2),l0=yt.stylize(l0,"name")):(l0=l0.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),l0=yt.stylize(l0,"string"))}return l0+": "+E0}function VI(yt){return Array.isArray(yt)}function Rz(yt){return typeof yt=="boolean"}function qL(yt){return yt===null}function Mz(yt){return yt==null}function qG(yt){return typeof yt=="number"}function rF(yt){return typeof yt=="string"}function Iz(yt){return typeof yt=="symbol"}function qI(yt){return yt===void 0}function DC(yt){return WI(yt)&&WG(yt)==="[object RegExp]"}function WI(yt){return typeof yt=="object"&&yt!==null}function EO(yt){return WI(yt)&&WG(yt)==="[object Date]"}function WL(yt){return WI(yt)&&(WG(yt)==="[object Error]"||yt instanceof Error)}function sN(yt){return typeof yt=="function"}function Oz(yt){return yt===null||typeof yt=="boolean"||typeof yt=="number"||typeof yt=="string"||typeof yt=="symbol"||yt===void 0}function fee(yt){return vw(yt)}function WG(yt){return Object.prototype.toString.call(yt)}function qV(yt){return yt<10?"0"+yt.toString(10):yt.toString(10)}I6.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},I6.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};var dee=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function qae(){console.log("%s - %s",function(){var yt=new Date,ir=[qV(yt.getHours()),qV(yt.getMinutes()),qV(yt.getSeconds())].join(":");return[yt.getDate(),dee[yt.getMonth()],ir].join(" ")}(),g8.apply(null,arguments))}function GG(yt,ir){if(!ir||!WI(ir))return yt;for(var _c=Object.keys(ir),mu=_c.length;mu--;)yt[_c[mu]]=ir[_c[mu]];return yt}function YG(yt,ir){return Object.prototype.hasOwnProperty.call(yt,ir)}var ZG,JG,Wae={inherits:D_,_extend:GG,log:qae,isBuffer:fee,isPrimitive:Oz,isFunction:sN,isError:WL,isDate:EO,isObject:WI,isRegExp:DC,isUndefined:qI,isSymbol:Iz,isString:rF,isNumber:qG,isNullOrUndefined:Mz,isNull:qL,isBoolean:Rz,isArray:VI,inspect:I6,deprecate:y8,format:g8,debuglog:sR},Gae=tt(Object.freeze({__proto__:null,_extend:GG,debuglog:sR,default:Wae,deprecate:y8,format:g8,inherits:D_,inspect:I6,isArray:VI,isBoolean:Rz,isBuffer:fee,isDate:EO,isError:WL,isFunction:sN,isNull:qL,isNullOrUndefined:Mz,isNumber:qG,isObject:WI,isPrimitive:Oz,isRegExp:DC,isString:rF,isSymbol:Iz,isUndefined:qI,log:qae}));function hee(yt,ir){QG(yt,ir),XG(yt)}function XG(yt){yt._writableState&&!yt._writableState.emitClose||yt._readableState&&!yt._readableState.emitClose||yt.emit("close")}function QG(yt,ir){yt.emit("error",ir)}var WV={destroy:function(yt,ir){var _c=this,mu=this._readableState&&this._readableState.destroyed,Mu=this._writableState&&this._writableState.destroyed;return mu||Mu?(ir?ir(yt):yt&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,$2(QG,this,yt)):$2(QG,this,yt)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(yt||null,function(Su){!ir&&Su?_c._writableState?_c._writableState.errorEmitted?$2(XG,_c):(_c._writableState.errorEmitted=!0,$2(hee,_c,Su)):$2(hee,_c,Su):ir?($2(XG,_c),ir(Su)):$2(XG,_c)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(yt,ir){var _c=yt._readableState,mu=yt._writableState;_c&&_c.autoDestroy||mu&&mu.autoDestroy?yt.destroy(ir):yt.emit("error",ir)}},lN={},pee={};function A7(yt,ir,_c){_c||(_c=Error);var mu=function(Mu){var Su,l0;function E0(j0,M0,B0){return Mu.call(this,function(V0,y1,v1){return typeof ir=="string"?ir:ir(V0,y1,v1)}(j0,M0,B0))||this}return l0=Mu,(Su=E0).prototype=Object.create(l0.prototype),Su.prototype.constructor=Su,Su.__proto__=l0,E0}(_c);mu.prototype.name=_c.name,mu.prototype.code=yt,pee[yt]=mu}function mee(yt,ir){if(Array.isArray(yt)){var _c=yt.length;return yt=yt.map(function(mu){return String(mu)}),_c>2?"one of ".concat(ir," ").concat(yt.slice(0,_c-1).join(", "),", or ")+yt[_c-1]:_c===2?"one of ".concat(ir," ").concat(yt[0]," or ").concat(yt[1]):"of ".concat(ir," ").concat(yt[0])}return"of ".concat(ir," ").concat(String(yt))}A7("ERR_INVALID_OPT_VALUE",function(yt,ir){return'The value "'+ir+'" is invalid for option "'+yt+'"'},TypeError),A7("ERR_INVALID_ARG_TYPE",function(yt,ir,_c){var mu,Mu,Su;if(typeof ir=="string"&&(Mu="not ",ir.substr(0,4)===Mu)?(mu="must not be",ir=ir.replace(/^not /,"")):mu="must be",function(E0,j0,M0){return(M0===void 0||M0>E0.length)&&(M0=E0.length),E0.substring(M0-9,M0)===j0}(yt," argument"))Su="The ".concat(yt," ").concat(mu," ").concat(mee(ir,"type"));else{var l0=function(E0,j0,M0){return typeof M0!="number"&&(M0=0),!(M0+1>E0.length)&&E0.indexOf(".",M0)!==-1}(yt)?"property":"argument";Su='The "'.concat(yt,'" ').concat(l0," ").concat(mu," ").concat(mee(ir,"type"))}return Su+". Received type ".concat(typeof _c)},TypeError),A7("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),A7("ERR_METHOD_NOT_IMPLEMENTED",function(yt){return"The "+yt+" method is not implemented"}),A7("ERR_STREAM_PREMATURE_CLOSE","Premature close"),A7("ERR_STREAM_DESTROYED",function(yt){return"Cannot call "+yt+" after a stream was destroyed"}),A7("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),A7("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),A7("ERR_STREAM_WRITE_AFTER_END","write after end"),A7("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),A7("ERR_UNKNOWN_ENCODING",function(yt){return"Unknown encoding: "+yt},TypeError),A7("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),lN.codes=pee;var FC,gee,GV,vee,yee=lN.codes.ERR_INVALID_OPT_VALUE,bee={getHighWaterMark:function(yt,ir,_c,mu){var Mu=function(Su,l0,E0){return Su.highWaterMark!=null?Su.highWaterMark:l0?Su[E0]:null}(ir,mu,_c);if(Mu!=null){if(!isFinite(Mu)||Math.floor(Mu)!==Mu||Mu<0)throw new yee(mu?_c:"highWaterMark",Mu);return Math.floor(Mu)}return yt.objectMode?16:16384}},mpe=function(yt,ir){if(eY("noDeprecation"))return yt;var _c=!1;return function(){if(!_c){if(eY("throwDeprecation"))throw new Error(ir);eY("traceDeprecation")?console.trace(ir):console.warn(ir),_c=!0}return yt.apply(this,arguments)}};function eY(yt){try{if(!c.localStorage)return!1}catch{return!1}var ir=c.localStorage[yt];return ir!=null&&String(ir).toLowerCase()==="true"}function Yae(){if(gee)return FC;function yt(g0){var d0=this;this.next=null,this.entry=null,this.finish=function(){(function(c0,a0,S0){var z0=c0.entry;for(c0.entry=null;z0;){var Q0=z0.callback;a0.pendingcb--,Q0(void 0),z0=z0.next}a0.corkedRequestsFree.next=c0})(d0,g0)}}var ir;gee=1,FC=fy,fy.WritableState=oy;var _c,mu=mpe,Mu=M6,Su=zw.Buffer,l0=(c!==void 0?c:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){},E0=WV,j0=bee.getHighWaterMark,M0=lN.codes,B0=M0.ERR_INVALID_ARG_TYPE,V0=M0.ERR_METHOD_NOT_IMPLEMENTED,y1=M0.ERR_MULTIPLE_CALLBACK,v1=M0.ERR_STREAM_CANNOT_PIPE,F1=M0.ERR_STREAM_DESTROYED,ov=M0.ERR_STREAM_NULL_VALUES,bv=M0.ERR_STREAM_WRITE_AFTER_END,gv=M0.ERR_UNKNOWN_ENCODING,xv=E0.errorOrDestroy;function hy(){}function oy(g0,d0,c0){ir=ir||GL(),g0=g0||{},typeof c0!="boolean"&&(c0=d0 instanceof ir),this.objectMode=!!g0.objectMode,c0&&(this.objectMode=this.objectMode||!!g0.writableObjectMode),this.highWaterMark=j0(this,g0,"writableHighWaterMark",c0),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a0=g0.decodeStrings===!1;this.decodeStrings=!a0,this.defaultEncoding=g0.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(S0){(function(z0,Q0){var p1=z0._writableState,T1=p1.sync,U1=p1.writecb;if(typeof U1!="function")throw new y1;if(function(n1){n1.writing=!1,n1.writecb=null,n1.length-=n1.writelen,n1.writelen=0}(p1),Q0)(function(n1,V1,J1,wv,Sv){--V1.pendingcb,J1?($2(Sv,wv),$2(s0,n1,V1),n1._writableState.errorEmitted=!0,xv(n1,wv)):(Sv(wv),n1._writableState.errorEmitted=!0,xv(n1,wv),s0(n1,V1))})(z0,p1,T1,Q0,U1);else{var S1=T0(p1)||z0.destroyed;S1||p1.corked||p1.bufferProcessing||!p1.bufferedRequest||Qv(z0,p1),T1?$2(qv,z0,p1,S1,U1):qv(z0,p1,S1,U1)}})(d0,S0)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=g0.emitClose!==!1,this.autoDestroy=!!g0.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new yt(this)}function fy(g0){var d0=this instanceof(ir=ir||GL());if(!d0&&!_c.call(fy,this))return new fy(g0);this._writableState=new oy(g0,this,d0),this.writable=!0,g0&&(typeof g0.write=="function"&&(this._write=g0.write),typeof g0.writev=="function"&&(this._writev=g0.writev),typeof g0.destroy=="function"&&(this._destroy=g0.destroy),typeof g0.final=="function"&&(this._final=g0.final)),Mu.call(this)}function Fy(g0,d0,c0,a0,S0,z0,Q0){d0.writelen=a0,d0.writecb=Q0,d0.writing=!0,d0.sync=!0,d0.destroyed?d0.onwrite(new F1("write")):c0?g0._writev(S0,d0.onwrite):g0._write(S0,z0,d0.onwrite),d0.sync=!1}function qv(g0,d0,c0,a0){c0||function(S0,z0){z0.length===0&&z0.needDrain&&(z0.needDrain=!1,S0.emit("drain"))}(g0,d0),d0.pendingcb--,a0(),s0(g0,d0)}function Qv(g0,d0){d0.bufferProcessing=!0;var c0=d0.bufferedRequest;if(g0._writev&&c0&&c0.next){var a0=d0.bufferedRequestCount,S0=new Array(a0),z0=d0.corkedRequestsFree;z0.entry=c0;for(var Q0=0,p1=!0;c0;)S0[Q0]=c0,c0.isBuf||(p1=!1),c0=c0.next,Q0+=1;S0.allBuffers=p1,Fy(g0,d0,!0,d0.length,S0,"",z0.finish),d0.pendingcb++,d0.lastBufferedRequest=null,z0.next?(d0.corkedRequestsFree=z0.next,z0.next=null):d0.corkedRequestsFree=new yt(d0),d0.bufferedRequestCount=0}else{for(;c0;){var T1=c0.chunk,U1=c0.encoding,S1=c0.callback;if(Fy(g0,d0,!1,d0.objectMode?1:T1.length,T1,U1,S1),c0=c0.next,d0.bufferedRequestCount--,d0.writing)break}c0===null&&(d0.lastBufferedRequest=null)}d0.bufferedRequest=c0,d0.bufferProcessing=!1}function T0(g0){return g0.ending&&g0.length===0&&g0.bufferedRequest===null&&!g0.finished&&!g0.writing}function X0(g0,d0){g0._final(function(c0){d0.pendingcb--,c0&&xv(g0,c0),d0.prefinished=!0,g0.emit("prefinish"),s0(g0,d0)})}function s0(g0,d0){var c0=T0(d0);if(c0&&(function(S0,z0){z0.prefinished||z0.finalCalled||(typeof S0._final!="function"||z0.destroyed?(z0.prefinished=!0,S0.emit("prefinish")):(z0.pendingcb++,z0.finalCalled=!0,$2(X0,S0,z0)))}(g0,d0),d0.pendingcb===0&&(d0.finished=!0,g0.emit("finish"),d0.autoDestroy))){var a0=g0._readableState;(!a0||a0.autoDestroy&&a0.endEmitted)&&g0.destroy()}return c0}return Gw(fy,Mu),oy.prototype.getBuffer=function(){for(var g0=this.bufferedRequest,d0=[];g0;)d0.push(g0),g0=g0.next;return d0},function(){try{Object.defineProperty(oy.prototype,"buffer",{get:mu(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}(),typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(_c=Function.prototype[Symbol.hasInstance],Object.defineProperty(fy,Symbol.hasInstance,{value:function(g0){return!!_c.call(this,g0)||this===fy&&g0&&g0._writableState instanceof oy}})):_c=function(g0){return g0 instanceof this},fy.prototype.pipe=function(){xv(this,new v1)},fy.prototype.write=function(g0,d0,c0){var a0,S0=this._writableState,z0=!1,Q0=!S0.objectMode&&(a0=g0,Su.isBuffer(a0)||a0 instanceof l0);return Q0&&!Su.isBuffer(g0)&&(g0=function(p1){return Su.from(p1)}(g0)),typeof d0=="function"&&(c0=d0,d0=null),Q0?d0="buffer":d0||(d0=S0.defaultEncoding),typeof c0!="function"&&(c0=hy),S0.ending?function(p1,T1){var U1=new bv;xv(p1,U1),$2(T1,U1)}(this,c0):(Q0||function(p1,T1,U1,S1){var n1;return U1===null?n1=new ov:typeof U1=="string"||T1.objectMode||(n1=new B0("chunk",["string","Buffer"],U1)),!n1||(xv(p1,n1),$2(S1,n1),!1)}(this,S0,g0,c0))&&(S0.pendingcb++,z0=function(p1,T1,U1,S1,n1,V1){if(!U1){var J1=function(ty,gy,yv){return ty.objectMode||ty.decodeStrings===!1||typeof gy!="string"||(gy=Su.from(gy,yv)),gy}(T1,S1,n1);S1!==J1&&(U1=!0,n1="buffer",S1=J1)}var wv=T1.objectMode?1:S1.length;T1.length+=wv;var Sv=T1.length-1))throw new gv(g0);return this._writableState.defaultEncoding=g0,this},Object.defineProperty(fy.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(fy.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),fy.prototype._write=function(g0,d0,c0){c0(new V0("_write()"))},fy.prototype._writev=null,fy.prototype.end=function(g0,d0,c0){var a0=this._writableState;return typeof g0=="function"?(c0=g0,g0=null,d0=null):typeof d0=="function"&&(c0=d0,d0=null),g0!=null&&this.write(g0,d0),a0.corked&&(a0.corked=1,this.uncork()),a0.ending||function(S0,z0,Q0){z0.ending=!0,s0(S0,z0),Q0&&(z0.finished?$2(Q0):S0.once("finish",Q0)),z0.ended=!0,S0.writable=!1}(this,a0,c0),this},Object.defineProperty(fy.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(fy.prototype,"destroyed",{enumerable:!1,get:function(){return this._writableState!==void 0&&this._writableState.destroyed},set:function(g0){this._writableState&&(this._writableState.destroyed=g0)}}),fy.prototype.destroy=E0.destroy,fy.prototype._undestroy=E0.undestroy,fy.prototype._destroy=function(g0,d0){d0(g0)},FC}function GL(){if(vee)return GV;vee=1;var yt=Object.keys||function(M0){var B0=[];for(var V0 in M0)B0.push(V0);return B0};GV=l0;var ir=_ee(),_c=Yae();Gw(l0,ir);for(var mu=yt(_c.prototype),Mu=0;Mu>5==6?2:V0>>4==14?3:V0>>3==30?4:V0>>6==2?-1:-2}function Mu(V0){var y1=this.lastTotal-this.lastNeed,v1=function(F1,ov,bv){if((192&ov[0])!=128)return F1.lastNeed=0,"�";if(F1.lastNeed>1&&ov.length>1){if((192&ov[1])!=128)return F1.lastNeed=1,"�";if(F1.lastNeed>2&&ov.length>2&&(192&ov[2])!=128)return F1.lastNeed=2,"�"}}(this,V0);return v1!==void 0?v1:this.lastNeed<=V0.length?(V0.copy(this.lastChar,y1,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(V0.copy(this.lastChar,y1,0,V0.length),void(this.lastNeed-=V0.length))}function Su(V0,y1){if((V0.length-y1)%2==0){var v1=V0.toString("utf16le",y1);if(v1){var F1=v1.charCodeAt(v1.length-1);if(F1>=55296&&F1<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=V0[V0.length-2],this.lastChar[1]=V0[V0.length-1],v1.slice(0,-1)}return v1}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=V0[V0.length-1],V0.toString("utf16le",y1,V0.length-1)}function l0(V0){var y1=V0&&V0.length?this.write(V0):"";if(this.lastNeed){var v1=this.lastTotal-this.lastNeed;return y1+this.lastChar.toString("utf16le",0,v1)}return y1}function E0(V0,y1){var v1=(V0.length-y1)%3;return v1===0?V0.toString("base64",y1):(this.lastNeed=3-v1,this.lastTotal=3,v1===1?this.lastChar[0]=V0[V0.length-1]:(this.lastChar[0]=V0[V0.length-2],this.lastChar[1]=V0[V0.length-1]),V0.toString("base64",y1,V0.length-v1))}function j0(V0){var y1=V0&&V0.length?this.write(V0):"";return this.lastNeed?y1+this.lastChar.toString("base64",0,3-this.lastNeed):y1}function M0(V0){return V0.toString(this.encoding)}function B0(V0){return V0&&V0.length?this.write(V0):""}return YL.StringDecoder=_c,_c.prototype.write=function(V0){if(V0.length===0)return"";var y1,v1;if(this.lastNeed){if((y1=this.fillLast(V0))===void 0)return"";v1=this.lastNeed,this.lastNeed=0}else v1=0;return v1=0?(hy>0&&(ov.lastNeed=hy-1),hy):--xv=0?(hy>0&&(ov.lastNeed=hy-2),hy):--xv=0?(hy>0&&(hy===2?hy=0:ov.lastNeed=hy-3),hy):0}(this,V0,y1);if(!this.lastNeed)return V0.toString("utf8",y1);this.lastTotal=v1;var F1=V0.length-(v1-this.lastNeed);return V0.copy(this.lastChar,0,F1),V0.toString("utf8",y1,F1)},_c.prototype.fillLast=function(V0){if(this.lastNeed<=V0.length)return V0.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);V0.copy(this.lastChar,this.lastTotal-this.lastNeed,0,V0.length),this.lastNeed-=V0.length},YL}var tY=lN.codes.ERR_STREAM_PREMATURE_CLOSE;function Zae(){}var rY,Jae,nY,Eee,iY,Aee,YV=function yt(ir,_c,mu){if(typeof _c=="function")return yt(ir,null,_c);_c||(_c={}),mu=function(F1){var ov=!1;return function(){if(!ov){ov=!0;for(var bv=arguments.length,gv=new Array(bv),xv=0;xv0?this.tail.next=ry:this.head=ry,this.tail=ry,++this.length}},{key:"unshift",value:function(Dv){var ry={data:Dv,next:this.head};this.length===0&&(this.tail=ry),this.head=ry,++this.length}},{key:"shift",value:function(){if(this.length!==0){var Dv=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,Dv}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(Dv){if(this.length===0)return"";for(var ry=this.head,Jv=""+ry.data;ry=ry.next;)Jv+=Dv+ry.data;return Jv}},{key:"concat",value:function(Dv){if(this.length===0)return Sv.alloc(0);for(var ry,Jv,Fv,iy=Sv.allocUnsafe(Dv>>>0),cy=this.head,Uy=0;cy;)ry=cy.data,Jv=iy,Fv=Uy,Sv.prototype.copy.call(ry,Jv,Fv),Uy+=cy.data.length,cy=cy.next;return iy}},{key:"consume",value:function(Dv,ry){var Jv;return Dviy.length?iy.length:Dv;if(cy===iy.length?Fv+=iy:Fv+=iy.slice(0,Dv),(Dv-=cy)==0){cy===iy.length?(++Jv,ry.next?this.head=ry.next:this.head=this.tail=null):(this.head=ry,ry.data=iy.slice(cy));break}++Jv}return this.length-=Jv,Fv}},{key:"_getBuffer",value:function(Dv){var ry=Sv.allocUnsafe(Dv),Jv=this.head,Fv=1;for(Jv.data.copy(ry),Dv-=Jv.data.length;Jv=Jv.next;){var iy=Jv.data,cy=Dv>iy.length?iy.length:Dv;if(iy.copy(ry,ry.length-Dv,0,cy),(Dv-=cy)==0){cy===iy.length?(++Fv,Jv.next?this.head=Jv.next:this.head=this.tail=null):(this.head=Jv,Jv.data=iy.slice(cy));break}++Fv}return this.length-=Fv,ry}},{key:ty,value:function(Dv,ry){return Hv(this,n1(n1({},ry),{},{depth:0,customInspect:!1}))}}],Av&&J1(yv.prototype,Av),Object.defineProperty(yv,"prototype",{writable:!1}),gy}(),ZG}(),V0=WV,y1=bee.getHighWaterMark,v1=lN.codes,F1=v1.ERR_INVALID_ARG_TYPE,ov=v1.ERR_STREAM_PUSH_AFTER_EOF,bv=v1.ERR_METHOD_NOT_IMPLEMENTED,gv=v1.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;Gw(fy,mu);var xv=V0.errorOrDestroy,hy=["error","close","destroy","pause","resume"];function oy(S1,n1,V1){yt=yt||GL(),S1=S1||{},typeof V1!="boolean"&&(V1=n1 instanceof yt),this.objectMode=!!S1.objectMode,V1&&(this.objectMode=this.objectMode||!!S1.readableObjectMode),this.highWaterMark=y1(this,S1,"readableHighWaterMark",V1),this.buffer=new B0,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=S1.emitClose!==!1,this.autoDestroy=!!S1.autoDestroy,this.destroyed=!1,this.defaultEncoding=S1.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,S1.encoding&&(E0||(E0=$ee().StringDecoder),this.decoder=new E0(S1.encoding),this.encoding=S1.encoding)}function fy(S1){if(yt=yt||GL(),!(this instanceof fy))return new fy(S1);var n1=this instanceof yt;this._readableState=new oy(S1,this,n1),this.readable=!0,S1&&(typeof S1.read=="function"&&(this._read=S1.read),typeof S1.destroy=="function"&&(this._destroy=S1.destroy)),mu.call(this)}function Fy(S1,n1,V1,J1,wv){ir("readableAddChunk",n1);var Sv,Hv=S1._readableState;if(n1===null)Hv.reading=!1,function(ty,gy){if(ir("onEofChunk"),!gy.ended){if(gy.decoder){var yv=gy.decoder.end();yv&&yv.length&&(gy.buffer.push(yv),gy.length+=gy.objectMode?1:yv.length)}gy.ended=!0,gy.sync?X0(ty):(gy.needReadable=!1,gy.emittedReadable||(gy.emittedReadable=!0,s0(ty)))}}(S1,Hv);else if(wv||(Sv=function(ty,gy){var yv,Av;return Av=gy,Mu.isBuffer(Av)||Av instanceof Su||typeof gy=="string"||gy===void 0||ty.objectMode||(yv=new F1("chunk",["string","Buffer","Uint8Array"],gy)),yv}(Hv,n1)),Sv)xv(S1,Sv);else if(Hv.objectMode||n1&&n1.length>0)if(typeof n1=="string"||Hv.objectMode||Object.getPrototypeOf(n1)===Mu.prototype||(n1=function(ty){return Mu.from(ty)}(n1)),J1)Hv.endEmitted?xv(S1,new gv):qv(S1,Hv,n1,!0);else if(Hv.ended)xv(S1,new ov);else{if(Hv.destroyed)return!1;Hv.reading=!1,Hv.decoder&&!V1?(n1=Hv.decoder.write(n1),Hv.objectMode||n1.length!==0?qv(S1,Hv,n1,!1):g0(S1,Hv)):qv(S1,Hv,n1,!1)}else J1||(Hv.reading=!1,g0(S1,Hv));return!Hv.ended&&(Hv.lengthn1.highWaterMark&&(n1.highWaterMark=function(V1){return V1>=Qv?V1=Qv:(V1--,V1|=V1>>>1,V1|=V1>>>2,V1|=V1>>>4,V1|=V1>>>8,V1|=V1>>>16,V1++),V1}(S1)),S1<=n1.length?S1:n1.ended?n1.length:(n1.needReadable=!0,0))}function X0(S1){var n1=S1._readableState;ir("emitReadable",n1.needReadable,n1.emittedReadable),n1.needReadable=!1,n1.emittedReadable||(ir("emitReadable",n1.flowing),n1.emittedReadable=!0,$2(s0,S1))}function s0(S1){var n1=S1._readableState;ir("emitReadable_",n1.destroyed,n1.length,n1.ended),n1.destroyed||!n1.length&&!n1.ended||(S1.emit("readable"),n1.emittedReadable=!1),n1.needReadable=!n1.flowing&&!n1.ended&&n1.length<=n1.highWaterMark,z0(S1)}function g0(S1,n1){n1.readingMore||(n1.readingMore=!0,$2(d0,S1,n1))}function d0(S1,n1){for(;!n1.reading&&!n1.ended&&(n1.length0,n1.resumeScheduled&&!n1.paused?n1.flowing=!0:S1.listenerCount("data")>0&&S1.resume()}function a0(S1){ir("readable nexttick read 0"),S1.read(0)}function S0(S1,n1){ir("resume",n1.reading),n1.reading||S1.read(0),n1.resumeScheduled=!1,S1.emit("resume"),z0(S1),n1.flowing&&!n1.reading&&S1.read(0)}function z0(S1){var n1=S1._readableState;for(ir("flow",n1.flowing);n1.flowing&&S1.read()!==null;);}function Q0(S1,n1){return n1.length===0?null:(n1.objectMode?V1=n1.buffer.shift():!S1||S1>=n1.length?(V1=n1.decoder?n1.buffer.join(""):n1.buffer.length===1?n1.buffer.first():n1.buffer.concat(n1.length),n1.buffer.clear()):V1=n1.buffer.consume(S1,n1.decoder),V1);var V1}function p1(S1){var n1=S1._readableState;ir("endReadable",n1.endEmitted),n1.endEmitted||(n1.ended=!0,$2(T1,n1,S1))}function T1(S1,n1){if(ir("endReadableNT",S1.endEmitted,S1.length),!S1.endEmitted&&S1.length===0&&(S1.endEmitted=!0,n1.readable=!1,n1.emit("end"),S1.autoDestroy)){var V1=n1._writableState;(!V1||V1.autoDestroy&&V1.finished)&&n1.destroy()}}function U1(S1,n1){for(var V1=0,J1=S1.length;V1=n1.highWaterMark:n1.length>0)||n1.ended))return ir("read: emitReadable",n1.length,n1.ended),n1.length===0&&n1.ended?p1(this):X0(this),null;if((S1=T0(S1,n1))===0&&n1.ended)return n1.length===0&&p1(this),null;var J1,wv=n1.needReadable;return ir("need readable",wv),(n1.length===0||n1.length-S10?Q0(S1,n1):null)===null?(n1.needReadable=n1.length<=n1.highWaterMark,S1=0):(n1.length-=S1,n1.awaitDrain=0),n1.length===0&&(n1.ended||(n1.needReadable=!0),V1!==S1&&n1.ended&&p1(this)),J1!==null&&this.emit("data",J1),J1},fy.prototype._read=function(S1){xv(this,new bv("_read()"))},fy.prototype.pipe=function(S1,n1){var V1=this,J1=this._readableState;switch(J1.pipesCount){case 0:J1.pipes=S1;break;case 1:J1.pipes=[J1.pipes,S1];break;default:J1.pipes.push(S1)}J1.pipesCount+=1,ir("pipe count=%d opts=%j",J1.pipesCount,n1);var wv=n1&&n1.end===!1||S1===Kv.stdout||S1===Kv.stderr?ry:Sv;function Sv(){ir("onend"),S1.end()}J1.endEmitted?$2(wv):V1.once("end",wv),S1.on("unpipe",function Jv(Fv,iy){ir("onunpipe"),Fv===V1&&iy&&iy.hasUnpiped===!1&&(iy.hasUnpiped=!0,ir("cleanup"),S1.removeListener("close",Av),S1.removeListener("finish",Dv),S1.removeListener("drain",Hv),S1.removeListener("error",yv),S1.removeListener("unpipe",Jv),V1.removeListener("end",Sv),V1.removeListener("end",ry),V1.removeListener("data",gy),ty=!0,!J1.awaitDrain||S1._writableState&&!S1._writableState.needDrain||Hv())});var Hv=function(Jv){return function(){var Fv=Jv._readableState;ir("pipeOnDrain",Fv.awaitDrain),Fv.awaitDrain&&Fv.awaitDrain--,Fv.awaitDrain===0&&_c(Jv,"data")&&(Fv.flowing=!0,z0(Jv))}}(V1);S1.on("drain",Hv);var ty=!1;function gy(Jv){ir("ondata");var Fv=S1.write(Jv);ir("dest.write",Fv),Fv===!1&&((J1.pipesCount===1&&J1.pipes===S1||J1.pipesCount>1&&U1(J1.pipes,S1)!==-1)&&!ty&&(ir("false write response, pause",J1.awaitDrain),J1.awaitDrain++),V1.pause())}function yv(Jv){ir("onerror",Jv),ry(),S1.removeListener("error",yv),_c(S1,"error")===0&&xv(S1,Jv)}function Av(){S1.removeListener("finish",Dv),ry()}function Dv(){ir("onfinish"),S1.removeListener("close",Av),ry()}function ry(){ir("unpipe"),V1.unpipe(S1)}return V1.on("data",gy),function(Jv,Fv,iy){if(typeof Jv.prependListener=="function")return Jv.prependListener(Fv,iy);Jv._events&&Jv._events[Fv]?Array.isArray(Jv._events[Fv])?Jv._events[Fv].unshift(iy):Jv._events[Fv]=[iy,Jv._events[Fv]]:Jv.on(Fv,iy)}(S1,"error",yv),S1.once("close",Av),S1.once("finish",Dv),S1.emit("pipe",V1),J1.flowing||(ir("pipe resume"),V1.resume()),S1},fy.prototype.unpipe=function(S1){var n1=this._readableState,V1={hasUnpiped:!1};if(n1.pipesCount===0)return this;if(n1.pipesCount===1)return S1&&S1!==n1.pipes||(S1||(S1=n1.pipes),n1.pipes=null,n1.pipesCount=0,n1.flowing=!1,S1&&S1.emit("unpipe",this,V1)),this;if(!S1){var J1=n1.pipes,wv=n1.pipesCount;n1.pipes=null,n1.pipesCount=0,n1.flowing=!1;for(var Sv=0;Sv0,J1.flowing!==!1&&this.resume()):S1==="readable"&&(J1.endEmitted||J1.readableListening||(J1.readableListening=J1.needReadable=!0,J1.flowing=!1,J1.emittedReadable=!1,ir("on readable",J1.length,J1.reading),J1.length?X0(this):J1.reading||$2(a0,this))),V1},fy.prototype.addListener=fy.prototype.on,fy.prototype.removeListener=function(S1,n1){var V1=mu.prototype.removeListener.call(this,S1,n1);return S1==="readable"&&$2(c0,this),V1},fy.prototype.removeAllListeners=function(S1){var n1=mu.prototype.removeAllListeners.apply(this,arguments);return S1!=="readable"&&S1!==void 0||$2(c0,this),n1},fy.prototype.resume=function(){var S1=this._readableState;return S1.flowing||(ir("resume"),S1.flowing=!S1.readableListening,function(n1,V1){V1.resumeScheduled||(V1.resumeScheduled=!0,$2(S0,n1,V1))}(this,S1)),S1.paused=!1,this},fy.prototype.pause=function(){return ir("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(ir("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},fy.prototype.wrap=function(S1){var n1=this,V1=this._readableState,J1=!1;for(var wv in S1.on("end",function(){if(ir("wrapped end"),V1.decoder&&!V1.ended){var Hv=V1.decoder.end();Hv&&Hv.length&&n1.push(Hv)}n1.push(null)}),S1.on("data",function(Hv){ir("wrapped data"),V1.decoder&&(Hv=V1.decoder.write(Hv)),V1.objectMode&&Hv==null||(V1.objectMode||Hv&&Hv.length)&&(n1.push(Hv)||(J1=!0,S1.pause()))}),S1)this[wv]===void 0&&typeof S1[wv]=="function"&&(this[wv]=function(Hv){return function(){return S1[Hv].apply(S1,arguments)}}(wv));for(var Sv=0;Sv0,function(M0){mu||(mu=M0),M0&&Su.forEach(nse),j0||(Su.forEach(nse),Mu(mu))})});return ir.reduce(bpe)};(function(yt,ir){(ir=yt.exports=_ee()).Stream=ir,ir.Readable=ir,ir.Writable=Yae(),ir.Duplex=GL(),ir.Transform=oY,ir.PassThrough=ype,ir.finished=YV,ir.pipeline=ise})(g3,g3.exports);var AO=g3.exports,uY=Sy().Buffer,ose=AO.Transform;function X9(yt){ose.call(this),this._block=uY.allocUnsafe(yt),this._blockSize=yt,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}Gw(X9,ose),X9.prototype._transform=function(yt,ir,_c){var mu=null;try{this.update(yt,ir)}catch(Mu){mu=Mu}_c(mu)},X9.prototype._flush=function(yt){var ir=null;try{this.push(this.digest())}catch(_c){ir=_c}yt(ir)},X9.prototype.update=function(yt,ir){if(function(E0,j0){if(!uY.isBuffer(E0)&&typeof E0!="string")throw new TypeError("Data must be a string or a buffer")}(yt),this._finalized)throw new Error("Digest already called");uY.isBuffer(yt)||(yt=uY.from(yt,ir));for(var _c=this._block,mu=0;this._blockOffset+yt.length-mu>=this._blockSize;){for(var Mu=this._blockOffset;Mu0;++Su)this._length[Su]+=l0,(l0=this._length[Su]/4294967296|0)>0&&(this._length[Su]-=4294967296*l0);return this},X9.prototype._update=function(){throw new Error("_update is not implemented")},X9.prototype.digest=function(yt){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var ir=this._digest();yt!==void 0&&(ir=ir.toString(yt)),this._block.fill(0),this._blockOffset=0;for(var _c=0;_c<4;++_c)this._length[_c]=0;return ir},X9.prototype._digest=function(){throw new Error("_digest is not implemented")};var JV=X9,ase=Gw,uN=JV,sse=Sy().Buffer,wpe=new Array(16);function XV(){uN.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function fY(yt,ir){return yt<>>32-ir}function Q9(yt,ir,_c,mu,Mu,Su,l0){return fY(yt+(ir&_c|~ir&mu)+Mu+Su|0,l0)+ir|0}function O6(yt,ir,_c,mu,Mu,Su,l0){return fY(yt+(ir&mu|_c&~mu)+Mu+Su|0,l0)+ir|0}function P6(yt,ir,_c,mu,Mu,Su,l0){return fY(yt+(ir^_c^mu)+Mu+Su|0,l0)+ir|0}function vA(yt,ir,_c,mu,Mu,Su,l0){return fY(yt+(_c^(ir|~mu))+Mu+Su|0,l0)+ir|0}ase(XV,uN),XV.prototype._update=function(){for(var yt=wpe,ir=0;ir<16;++ir)yt[ir]=this._block.readInt32LE(4*ir);var _c=this._a,mu=this._b,Mu=this._c,Su=this._d;_c=Q9(_c,mu,Mu,Su,yt[0],3614090360,7),Su=Q9(Su,_c,mu,Mu,yt[1],3905402710,12),Mu=Q9(Mu,Su,_c,mu,yt[2],606105819,17),mu=Q9(mu,Mu,Su,_c,yt[3],3250441966,22),_c=Q9(_c,mu,Mu,Su,yt[4],4118548399,7),Su=Q9(Su,_c,mu,Mu,yt[5],1200080426,12),Mu=Q9(Mu,Su,_c,mu,yt[6],2821735955,17),mu=Q9(mu,Mu,Su,_c,yt[7],4249261313,22),_c=Q9(_c,mu,Mu,Su,yt[8],1770035416,7),Su=Q9(Su,_c,mu,Mu,yt[9],2336552879,12),Mu=Q9(Mu,Su,_c,mu,yt[10],4294925233,17),mu=Q9(mu,Mu,Su,_c,yt[11],2304563134,22),_c=Q9(_c,mu,Mu,Su,yt[12],1804603682,7),Su=Q9(Su,_c,mu,Mu,yt[13],4254626195,12),Mu=Q9(Mu,Su,_c,mu,yt[14],2792965006,17),_c=O6(_c,mu=Q9(mu,Mu,Su,_c,yt[15],1236535329,22),Mu,Su,yt[1],4129170786,5),Su=O6(Su,_c,mu,Mu,yt[6],3225465664,9),Mu=O6(Mu,Su,_c,mu,yt[11],643717713,14),mu=O6(mu,Mu,Su,_c,yt[0],3921069994,20),_c=O6(_c,mu,Mu,Su,yt[5],3593408605,5),Su=O6(Su,_c,mu,Mu,yt[10],38016083,9),Mu=O6(Mu,Su,_c,mu,yt[15],3634488961,14),mu=O6(mu,Mu,Su,_c,yt[4],3889429448,20),_c=O6(_c,mu,Mu,Su,yt[9],568446438,5),Su=O6(Su,_c,mu,Mu,yt[14],3275163606,9),Mu=O6(Mu,Su,_c,mu,yt[3],4107603335,14),mu=O6(mu,Mu,Su,_c,yt[8],1163531501,20),_c=O6(_c,mu,Mu,Su,yt[13],2850285829,5),Su=O6(Su,_c,mu,Mu,yt[2],4243563512,9),Mu=O6(Mu,Su,_c,mu,yt[7],1735328473,14),_c=P6(_c,mu=O6(mu,Mu,Su,_c,yt[12],2368359562,20),Mu,Su,yt[5],4294588738,4),Su=P6(Su,_c,mu,Mu,yt[8],2272392833,11),Mu=P6(Mu,Su,_c,mu,yt[11],1839030562,16),mu=P6(mu,Mu,Su,_c,yt[14],4259657740,23),_c=P6(_c,mu,Mu,Su,yt[1],2763975236,4),Su=P6(Su,_c,mu,Mu,yt[4],1272893353,11),Mu=P6(Mu,Su,_c,mu,yt[7],4139469664,16),mu=P6(mu,Mu,Su,_c,yt[10],3200236656,23),_c=P6(_c,mu,Mu,Su,yt[13],681279174,4),Su=P6(Su,_c,mu,Mu,yt[0],3936430074,11),Mu=P6(Mu,Su,_c,mu,yt[3],3572445317,16),mu=P6(mu,Mu,Su,_c,yt[6],76029189,23),_c=P6(_c,mu,Mu,Su,yt[9],3654602809,4),Su=P6(Su,_c,mu,Mu,yt[12],3873151461,11),Mu=P6(Mu,Su,_c,mu,yt[15],530742520,16),_c=vA(_c,mu=P6(mu,Mu,Su,_c,yt[2],3299628645,23),Mu,Su,yt[0],4096336452,6),Su=vA(Su,_c,mu,Mu,yt[7],1126891415,10),Mu=vA(Mu,Su,_c,mu,yt[14],2878612391,15),mu=vA(mu,Mu,Su,_c,yt[5],4237533241,21),_c=vA(_c,mu,Mu,Su,yt[12],1700485571,6),Su=vA(Su,_c,mu,Mu,yt[3],2399980690,10),Mu=vA(Mu,Su,_c,mu,yt[10],4293915773,15),mu=vA(mu,Mu,Su,_c,yt[1],2240044497,21),_c=vA(_c,mu,Mu,Su,yt[8],1873313359,6),Su=vA(Su,_c,mu,Mu,yt[15],4264355552,10),Mu=vA(Mu,Su,_c,mu,yt[6],2734768916,15),mu=vA(mu,Mu,Su,_c,yt[13],1309151649,21),_c=vA(_c,mu,Mu,Su,yt[4],4149444226,6),Su=vA(Su,_c,mu,Mu,yt[11],3174756917,10),Mu=vA(Mu,Su,_c,mu,yt[2],718787259,15),mu=vA(mu,Mu,Su,_c,yt[9],3951481745,21),this._a=this._a+_c|0,this._b=this._b+mu|0,this._c=this._c+Mu|0,this._d=this._d+Su|0},XV.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var yt=sse.allocUnsafe(16);return yt.writeInt32LE(this._a,0),yt.writeInt32LE(this._b,4),yt.writeInt32LE(this._c,8),yt.writeInt32LE(this._d,12),yt};var _7=XV,S7=zw.Buffer,ex=Gw,dY=JV,kee=new Array(16),QV=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],Pz=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],e4=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],fN=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],dN=[0,1518500249,1859775393,2400959708,2840853838],hN=[1352829926,1548603684,1836072691,2053994217,0];function ZL(){dY.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function YI(yt,ir){return yt<>>32-ir}function jz(yt,ir,_c,mu,Mu,Su,l0,E0){return YI(yt+(ir^_c^mu)+Su+l0|0,E0)+Mu|0}function t4(yt,ir,_c,mu,Mu,Su,l0,E0){return YI(yt+(ir&_c|~ir&mu)+Su+l0|0,E0)+Mu|0}function JL(yt,ir,_c,mu,Mu,Su,l0,E0){return YI(yt+((ir|~_c)^mu)+Su+l0|0,E0)+Mu|0}function Cee(yt,ir,_c,mu,Mu,Su,l0,E0){return YI(yt+(ir&mu|_c&~mu)+Su+l0|0,E0)+Mu|0}function Tee(yt,ir,_c,mu,Mu,Su,l0,E0){return YI(yt+(ir^(_c|~mu))+Su+l0|0,E0)+Mu|0}ex(ZL,dY),ZL.prototype._update=function(){for(var yt=kee,ir=0;ir<16;++ir)yt[ir]=this._block.readInt32LE(4*ir);for(var _c=0|this._a,mu=0|this._b,Mu=0|this._c,Su=0|this._d,l0=0|this._e,E0=0|this._a,j0=0|this._b,M0=0|this._c,B0=0|this._d,V0=0|this._e,y1=0;y1<80;y1+=1){var v1,F1;y1<16?(v1=jz(_c,mu,Mu,Su,l0,yt[QV[y1]],dN[0],e4[y1]),F1=Tee(E0,j0,M0,B0,V0,yt[Pz[y1]],hN[0],fN[y1])):y1<32?(v1=t4(_c,mu,Mu,Su,l0,yt[QV[y1]],dN[1],e4[y1]),F1=Cee(E0,j0,M0,B0,V0,yt[Pz[y1]],hN[1],fN[y1])):y1<48?(v1=JL(_c,mu,Mu,Su,l0,yt[QV[y1]],dN[2],e4[y1]),F1=JL(E0,j0,M0,B0,V0,yt[Pz[y1]],hN[2],fN[y1])):y1<64?(v1=Cee(_c,mu,Mu,Su,l0,yt[QV[y1]],dN[3],e4[y1]),F1=t4(E0,j0,M0,B0,V0,yt[Pz[y1]],hN[3],fN[y1])):(v1=Tee(_c,mu,Mu,Su,l0,yt[QV[y1]],dN[4],e4[y1]),F1=jz(E0,j0,M0,B0,V0,yt[Pz[y1]],hN[4],fN[y1])),_c=l0,l0=Su,Su=YI(Mu,10),Mu=mu,mu=v1,E0=V0,V0=B0,B0=YI(M0,10),M0=j0,j0=F1}var ov=this._b+Mu+B0|0;this._b=this._c+Su+V0|0,this._c=this._d+l0+E0|0,this._d=this._e+_c+j0|0,this._e=this._a+mu+M0|0,this._a=ov},ZL.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var yt=S7.alloc?S7.alloc(20):new S7(20);return yt.writeInt32LE(this._a,0),yt.writeInt32LE(this._b,4),yt.writeInt32LE(this._c,8),yt.writeInt32LE(this._d,12),yt.writeInt32LE(this._e,16),yt};var hY=ZL,Ree={exports:{}},Mee=Sy().Buffer;function Nz(yt,ir){this._block=Mee.alloc(yt),this._finalSize=ir,this._blockSize=yt,this._len=0}Nz.prototype.update=function(yt,ir){typeof yt=="string"&&(ir=ir||"utf8",yt=Mee.from(yt,ir));for(var _c=this._block,mu=this._blockSize,Mu=yt.length,Su=this._len,l0=0;l0=this._finalSize&&(this._update(this._block),this._block.fill(0));var _c=8*this._len;if(_c<=4294967295)this._block.writeUInt32BE(_c,this._blockSize-4);else{var mu=(4294967295&_c)>>>0,Mu=(_c-mu)/4294967296;this._block.writeUInt32BE(Mu,this._blockSize-8),this._block.writeUInt32BE(mu,this._blockSize-4)}this._update(this._block);var Su=this._hash();return yt?Su.toString(yt):Su},Nz.prototype._update=function(){throw new Error("_update must be implemented by subclass")};var iF=Nz,lse=Gw,r4=iF,Lz=Sy().Buffer,$pe=[1518500249,1859775393,-1894007588,-899497514],cse=new Array(80);function n4(){this.init(),this._w=cse,r4.call(this,64,56)}function Epe(yt){return yt<<30|yt>>>2}function Ape(yt,ir,_c,mu){return yt===0?ir&_c|~ir&mu:yt===2?ir&_c|ir&mu|_c&mu:ir^_c^mu}lse(n4,r4),n4.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},n4.prototype._update=function(yt){for(var ir,_c=this._w,mu=0|this._a,Mu=0|this._b,Su=0|this._c,l0=0|this._d,E0=0|this._e,j0=0;j0<16;++j0)_c[j0]=yt.readInt32BE(4*j0);for(;j0<80;++j0)_c[j0]=_c[j0-3]^_c[j0-8]^_c[j0-14]^_c[j0-16];for(var M0=0;M0<80;++M0){var B0=~~(M0/20),V0=0|((ir=mu)<<5|ir>>>27)+Ape(B0,Mu,Su,l0)+E0+_c[M0]+$pe[B0];E0=l0,l0=Su,Su=Epe(Mu),Mu=mu,mu=V0}this._a=mu+this._a|0,this._b=Mu+this._b|0,this._c=Su+this._c|0,this._d=l0+this._d|0,this._e=E0+this._e|0},n4.prototype._hash=function(){var yt=Lz.allocUnsafe(20);return yt.writeInt32BE(0|this._a,0),yt.writeInt32BE(0|this._b,4),yt.writeInt32BE(0|this._c,8),yt.writeInt32BE(0|this._d,12),yt.writeInt32BE(0|this._e,16),yt};var i4=n4,_pe=Gw,use=iF,Spe=Sy().Buffer,xpe=[1518500249,1859775393,-1894007588,-899497514],fse=new Array(80);function o4(){this.init(),this._w=fse,use.call(this,64,56)}function kpe(yt){return yt<<5|yt>>>27}function Cpe(yt){return yt<<30|yt>>>2}function a4(yt,ir,_c,mu){return yt===0?ir&_c|~ir&mu:yt===2?ir&_c|ir&mu|_c&mu:ir^_c^mu}_pe(o4,use),o4.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},o4.prototype._update=function(yt){for(var ir,_c=this._w,mu=0|this._a,Mu=0|this._b,Su=0|this._c,l0=0|this._d,E0=0|this._e,j0=0;j0<16;++j0)_c[j0]=yt.readInt32BE(4*j0);for(;j0<80;++j0)_c[j0]=(ir=_c[j0-3]^_c[j0-8]^_c[j0-14]^_c[j0-16])<<1|ir>>>31;for(var M0=0;M0<80;++M0){var B0=~~(M0/20),V0=kpe(mu)+a4(B0,Mu,Su,l0)+E0+_c[M0]+xpe[B0]|0;E0=l0,l0=Su,Su=Cpe(Mu),Mu=mu,mu=V0}this._a=mu+this._a|0,this._b=Mu+this._b|0,this._c=Su+this._c|0,this._d=l0+this._d|0,this._e=E0+this._e|0},o4.prototype._hash=function(){var yt=Spe.allocUnsafe(20);return yt.writeInt32BE(0|this._a,0),yt.writeInt32BE(0|this._b,4),yt.writeInt32BE(0|this._c,8),yt.writeInt32BE(0|this._d,12),yt.writeInt32BE(0|this._e,16),yt};var Tpe=o4,Rpe=Gw,dse=iF,Mpe=Sy().Buffer,Ipe=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],hse=new Array(64);function s4(){this.init(),this._w=hse,dse.call(this,64,56)}function Ope(yt,ir,_c){return _c^yt&(ir^_c)}function Ppe(yt,ir,_c){return yt&ir|_c&(yt|ir)}function l4(yt){return(yt>>>2|yt<<30)^(yt>>>13|yt<<19)^(yt>>>22|yt<<10)}function jpe(yt){return(yt>>>6|yt<<26)^(yt>>>11|yt<<21)^(yt>>>25|yt<<7)}function Npe(yt){return(yt>>>7|yt<<25)^(yt>>>18|yt<<14)^yt>>>3}function Lpe(yt){return(yt>>>17|yt<<15)^(yt>>>19|yt<<13)^yt>>>10}Rpe(s4,dse),s4.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},s4.prototype._update=function(yt){for(var ir=this._w,_c=0|this._a,mu=0|this._b,Mu=0|this._c,Su=0|this._d,l0=0|this._e,E0=0|this._f,j0=0|this._g,M0=0|this._h,B0=0;B0<16;++B0)ir[B0]=yt.readInt32BE(4*B0);for(;B0<64;++B0)ir[B0]=Lpe(ir[B0-2])+ir[B0-7]+Npe(ir[B0-15])+ir[B0-16]|0;for(var V0=0;V0<64;++V0){var y1=M0+jpe(l0)+Ope(l0,E0,j0)+Ipe[V0]+ir[V0]|0,v1=l4(_c)+Ppe(_c,mu,Mu)|0;M0=j0,j0=E0,E0=l0,l0=Su+y1|0,Su=Mu,Mu=mu,mu=_c,_c=y1+v1|0}this._a=_c+this._a|0,this._b=mu+this._b|0,this._c=Mu+this._c|0,this._d=Su+this._d|0,this._e=l0+this._e|0,this._f=E0+this._f|0,this._g=j0+this._g|0,this._h=M0+this._h|0},s4.prototype._hash=function(){var yt=Mpe.allocUnsafe(32);return yt.writeInt32BE(this._a,0),yt.writeInt32BE(this._b,4),yt.writeInt32BE(this._c,8),yt.writeInt32BE(this._d,12),yt.writeInt32BE(this._e,16),yt.writeInt32BE(this._f,20),yt.writeInt32BE(this._g,24),yt.writeInt32BE(this._h,28),yt};var pse=s4,Bpe=Gw,Dpe=pse,mse=iF,Fpe=Sy().Buffer,Upe=new Array(64);function pY(){this.init(),this._w=Upe,mse.call(this,64,56)}Bpe(pY,Dpe),pY.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},pY.prototype._hash=function(){var yt=Fpe.allocUnsafe(28);return yt.writeInt32BE(this._a,0),yt.writeInt32BE(this._b,4),yt.writeInt32BE(this._c,8),yt.writeInt32BE(this._d,12),yt.writeInt32BE(this._e,16),yt.writeInt32BE(this._f,20),yt.writeInt32BE(this._g,24),yt};var zpe=pY,Hpe=Gw,c4=iF,Kpe=Sy().Buffer,gse=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],vse=new Array(160);function u4(){this.init(),this._w=vse,c4.call(this,128,112)}function Iee(yt,ir,_c){return _c^yt&(ir^_c)}function yse(yt,ir,_c){return yt&ir|_c&(yt|ir)}function Bz(yt,ir){return(yt>>>28|ir<<4)^(ir>>>2|yt<<30)^(ir>>>7|yt<<25)}function Oee(yt,ir){return(yt>>>14|ir<<18)^(yt>>>18|ir<<14)^(ir>>>9|yt<<23)}function bse(yt,ir){return(yt>>>1|ir<<31)^(yt>>>8|ir<<24)^yt>>>7}function wse(yt,ir){return(yt>>>1|ir<<31)^(yt>>>8|ir<<24)^(yt>>>7|ir<<25)}function $se(yt,ir){return(yt>>>19|ir<<13)^(ir>>>29|yt<<3)^yt>>>6}function Vpe(yt,ir){return(yt>>>19|ir<<13)^(ir>>>29|yt<<3)^(yt>>>6|ir<<26)}function x7(yt,ir){return yt>>>0>>0?1:0}Hpe(u4,c4),u4.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u4.prototype._update=function(yt){for(var ir=this._w,_c=0|this._ah,mu=0|this._bh,Mu=0|this._ch,Su=0|this._dh,l0=0|this._eh,E0=0|this._fh,j0=0|this._gh,M0=0|this._hh,B0=0|this._al,V0=0|this._bl,y1=0|this._cl,v1=0|this._dl,F1=0|this._el,ov=0|this._fl,bv=0|this._gl,gv=0|this._hl,xv=0;xv<32;xv+=2)ir[xv]=yt.readInt32BE(4*xv),ir[xv+1]=yt.readInt32BE(4*xv+4);for(;xv<160;xv+=2){var hy=ir[xv-30],oy=ir[xv-30+1],fy=bse(hy,oy),Fy=wse(oy,hy),qv=$se(hy=ir[xv-4],oy=ir[xv-4+1]),Qv=Vpe(oy,hy),T0=ir[xv-14],X0=ir[xv-14+1],s0=ir[xv-32],g0=ir[xv-32+1],d0=Fy+X0|0,c0=fy+T0+x7(d0,Fy)|0;c0=(c0=c0+qv+x7(d0=d0+Qv|0,Qv)|0)+s0+x7(d0=d0+g0|0,g0)|0,ir[xv]=c0,ir[xv+1]=d0}for(var a0=0;a0<160;a0+=2){c0=ir[a0],d0=ir[a0+1];var S0=yse(_c,mu,Mu),z0=yse(B0,V0,y1),Q0=Bz(_c,B0),p1=Bz(B0,_c),T1=Oee(l0,F1),U1=Oee(F1,l0),S1=gse[a0],n1=gse[a0+1],V1=Iee(l0,E0,j0),J1=Iee(F1,ov,bv),wv=gv+U1|0,Sv=M0+T1+x7(wv,gv)|0;Sv=(Sv=(Sv=Sv+V1+x7(wv=wv+J1|0,J1)|0)+S1+x7(wv=wv+n1|0,n1)|0)+c0+x7(wv=wv+d0|0,d0)|0;var Hv=p1+z0|0,ty=Q0+S0+x7(Hv,p1)|0;M0=j0,gv=bv,j0=E0,bv=ov,E0=l0,ov=F1,l0=Su+Sv+x7(F1=v1+wv|0,v1)|0,Su=Mu,v1=y1,Mu=mu,y1=V0,mu=_c,V0=B0,_c=Sv+ty+x7(B0=wv+Hv|0,wv)|0}this._al=this._al+B0|0,this._bl=this._bl+V0|0,this._cl=this._cl+y1|0,this._dl=this._dl+v1|0,this._el=this._el+F1|0,this._fl=this._fl+ov|0,this._gl=this._gl+bv|0,this._hl=this._hl+gv|0,this._ah=this._ah+_c+x7(this._al,B0)|0,this._bh=this._bh+mu+x7(this._bl,V0)|0,this._ch=this._ch+Mu+x7(this._cl,y1)|0,this._dh=this._dh+Su+x7(this._dl,v1)|0,this._eh=this._eh+l0+x7(this._el,F1)|0,this._fh=this._fh+E0+x7(this._fl,ov)|0,this._gh=this._gh+j0+x7(this._gl,bv)|0,this._hh=this._hh+M0+x7(this._hl,gv)|0},u4.prototype._hash=function(){var yt=Kpe.allocUnsafe(64);function ir(_c,mu,Mu){yt.writeInt32BE(_c,Mu),yt.writeInt32BE(mu,Mu+4)}return ir(this._ah,this._al,0),ir(this._bh,this._bl,8),ir(this._ch,this._cl,16),ir(this._dh,this._dl,24),ir(this._eh,this._el,32),ir(this._fh,this._fl,40),ir(this._gh,this._gl,48),ir(this._hh,this._hl,56),yt};var Ese=u4,qpe=Gw,k7=Ese,Ase=iF,Wpe=Sy().Buffer,Gpe=new Array(160);function mY(){this.init(),this._w=Gpe,Ase.call(this,128,112)}qpe(mY,k7),mY.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},mY.prototype._hash=function(){var yt=Wpe.allocUnsafe(48);function ir(_c,mu,Mu){yt.writeInt32BE(_c,Mu),yt.writeInt32BE(mu,Mu+4)}return ir(this._ah,this._al,0),ir(this._bh,this._bl,8),ir(this._ch,this._cl,16),ir(this._dh,this._dl,24),ir(this._eh,this._el,32),ir(this._fh,this._fl,40),yt};var Ype=mY,oF=Ree.exports=function(yt){yt=yt.toLowerCase();var ir=oF[yt];if(!ir)throw new Error(yt+" is not supported (we accept pull requests)");return new ir};oF.sha=i4,oF.sha1=Tpe,oF.sha224=zpe,oF.sha256=pse,oF.sha384=Ype,oF.sha512=Ese;var Dz=Ree.exports;function aF(){this.head=null,this.tail=null,this.length=0}aF.prototype.push=function(yt){var ir={data:yt,next:null};this.length>0?this.tail.next=ir:this.head=ir,this.tail=ir,++this.length},aF.prototype.unshift=function(yt){var ir={data:yt,next:this.head};this.length===0&&(this.tail=ir),this.head=ir,++this.length},aF.prototype.shift=function(){if(this.length!==0){var yt=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,yt}},aF.prototype.clear=function(){this.head=this.tail=null,this.length=0},aF.prototype.join=function(yt){if(this.length===0)return"";for(var ir=this.head,_c=""+ir.data;ir=ir.next;)_c+=yt+ir.data;return _c},aF.prototype.concat=function(yt){if(this.length===0)return F0.alloc(0);if(this.length===1)return this.head.data;for(var ir=F0.allocUnsafe(yt>>>0),_c=this.head,mu=0;_c;)_c.data.copy(ir,mu),mu+=_c.data.length,_c=_c.next;return ir};var sF=F0.isEncoding||function(yt){switch(yt&&yt.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function XL(yt){switch(this.encoding=(yt||"utf8").toLowerCase().replace(/[-_]/,""),function(ir){if(ir&&!sF(ir))throw new Error("Unknown encoding: "+ir)}(yt),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=Zpe;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=Fz;break;default:return void(this.write=lF)}this.charBuffer=new F0(6),this.charReceived=0,this.charLength=0}function lF(yt){return yt.toString(this.encoding)}function Zpe(yt){this.charReceived=yt.length%2,this.charLength=this.charReceived?2:0}function Fz(yt){this.charReceived=yt.length%3,this.charLength=this.charReceived?3:0}XL.prototype.write=function(yt){for(var ir="";this.charLength;){var _c=yt.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:yt.length;if(yt.copy(this.charBuffer,this.charReceived,0,_c),this.charReceived+=_c,this.charReceived=55296&&mu<=56319)){if(this.charReceived=this.charLength=0,yt.length===0)return ir;break}this.charLength+=this.surrogateSize,ir=""}this.detectIncompleteChar(yt);var mu,Mu=yt.length;if(this.charLength&&(yt.copy(this.charBuffer,0,yt.length-this.charReceived,Mu),Mu-=this.charReceived),Mu=(ir+=yt.toString(this.encoding,0,Mu)).length-1,(mu=ir.charCodeAt(Mu))>=55296&&mu<=56319){var Su=this.surrogateSize;return this.charLength+=Su,this.charReceived+=Su,this.charBuffer.copy(this.charBuffer,Su,0,Su),yt.copy(this.charBuffer,0,0,Su),ir.substring(0,Mu)}return ir},XL.prototype.detectIncompleteChar=function(yt){for(var ir=yt.length>=3?3:yt.length;ir>0;ir--){var _c=yt[yt.length-ir];if(ir==1&&_c>>5==6){this.charLength=2;break}if(ir<=2&&_c>>4==14){this.charLength=3;break}if(ir<=3&&_c>>3==30){this.charLength=4;break}}this.charReceived=ir},XL.prototype.end=function(yt){var ir="";if(yt&&yt.length&&(ir=this.write(yt)),this.charReceived){var _c=this.charReceived,mu=this.charBuffer,Mu=this.encoding;ir+=mu.slice(0,_c).toString(Mu)}return ir};var Jpe=Object.freeze({__proto__:null,StringDecoder:XL});b8.ReadableState=_se;var zA=sR("stream");function _se(yt,ir){yt=yt||{},this.objectMode=!!yt.objectMode,ir instanceof UC&&(this.objectMode=this.objectMode||!!yt.readableObjectMode);var _c=yt.highWaterMark,mu=this.objectMode?16:16384;this.highWaterMark=_c||_c===0?_c:mu,this.highWaterMark=~~this.highWaterMark,this.buffer=new aF,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=yt.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,yt.encoding&&(this.decoder=new XL(yt.encoding),this.encoding=yt.encoding)}function b8(yt){if(!(this instanceof b8))return new b8(yt);this._readableState=new _se(yt,this),this.readable=!0,yt&&typeof yt.read=="function"&&(this._read=yt.read),$w.call(this)}function TA(yt,ir,_c,mu,Mu){var Su=function(M0,B0){var V0=null;return vw(B0)||typeof B0=="string"||B0==null||M0.objectMode||(V0=new TypeError("Invalid non-string/buffer chunk")),V0}(ir,_c);if(Su)yt.emit("error",Su);else if(_c===null)ir.reading=!1,function(M0,B0){if(!B0.ended){if(B0.decoder){var V0=B0.decoder.end();V0&&V0.length&&(B0.buffer.push(V0),B0.length+=B0.objectMode?1:V0.length)}B0.ended=!0,f4(M0)}}(yt,ir);else if(ir.objectMode||_c&&_c.length>0)if(ir.ended&&!Mu){var l0=new Error("stream.push() after EOF");yt.emit("error",l0)}else if(ir.endEmitted&&Mu){var E0=new Error("stream.unshift() after end event");yt.emit("error",E0)}else{var j0;!ir.decoder||Mu||mu||(_c=ir.decoder.write(_c),j0=!ir.objectMode&&_c.length===0),Mu||(ir.reading=!1),j0||(ir.flowing&&ir.length===0&&!ir.sync?(yt.emit("data",_c),yt.read(0)):(ir.length+=ir.objectMode?1:_c.length,Mu?ir.buffer.unshift(_c):ir.buffer.push(_c),ir.needReadable&&f4(yt))),function(M0,B0){B0.readingMore||(B0.readingMore=!0,$2(Sse,M0,B0))}(yt,ir)}else Mu||(ir.reading=!1);return function(M0){return!M0.ended&&(M0.needReadable||M0.lengthir.highWaterMark&&(ir.highWaterMark=function(_c){return _c>=Pee?_c=Pee:(_c--,_c|=_c>>>1,_c|=_c>>>2,_c|=_c>>>4,_c|=_c>>>8,_c|=_c>>>16,_c++),_c}(yt)),yt<=ir.length?yt:ir.ended?ir.length:(ir.needReadable=!0,0))}function f4(yt){var ir=yt._readableState;ir.needReadable=!1,ir.emittedReadable||(zA("emitReadable",ir.flowing),ir.emittedReadable=!0,ir.sync?$2(jee,yt):jee(yt))}function jee(yt){zA("emit readable"),yt.emit("readable"),Nee(yt)}function Sse(yt,ir){for(var _c=ir.length;!ir.reading&&!ir.flowing&&!ir.ended&&ir.length=ir.length?(_c=ir.decoder?ir.buffer.join(""):ir.buffer.length===1?ir.buffer.head.data:ir.buffer.concat(ir.length),ir.buffer.clear()):_c=function(mu,Mu,Su){var l0;return muy1.length?y1.length:E0;if(v1===y1.length?V0+=y1:V0+=y1.slice(0,E0),(E0-=v1)==0){v1===y1.length?(++B0,M0.next?j0.head=M0.next:j0.head=j0.tail=null):(j0.head=M0,M0.data=y1.slice(v1));break}++B0}return j0.length-=B0,V0}(mu,Mu):function(E0,j0){var M0=F0.allocUnsafe(E0),B0=j0.head,V0=1;for(B0.data.copy(M0),E0-=B0.data.length;B0=B0.next;){var y1=B0.data,v1=E0>y1.length?y1.length:E0;if(y1.copy(M0,M0.length-E0,0,v1),(E0-=v1)==0){v1===y1.length?(++V0,B0.next?j0.head=B0.next:j0.head=j0.tail=null):(j0.head=B0,B0.data=y1.slice(v1));break}++V0}return j0.length-=V0,M0}(mu,Mu),l0}(yt,ir.buffer,ir.decoder),_c);var _c}function Lee(yt){var ir=yt._readableState;if(ir.length>0)throw new Error('"endReadable()" called on non-empty stream');ir.endEmitted||(ir.ended=!0,$2(Bee,ir,yt))}function Bee(yt,ir){yt.endEmitted||yt.length!==0||(yt.endEmitted=!0,ir.readable=!1,ir.emit("end"))}function Dee(yt,ir){for(var _c=0,mu=yt.length;_c=ir.highWaterMark||ir.ended))return zA("read: emitReadable",ir.length,ir.ended),ir.length===0&&ir.ended?Lee(this):f4(this),null;if((yt=Q_(yt,ir))===0&&ir.ended)return ir.length===0&&Lee(this),null;var mu,Mu=ir.needReadable;return zA("need readable",Mu),(ir.length===0||ir.length-yt0?kse(yt,ir):null)===null?(ir.needReadable=!0,yt=0):ir.length-=yt,ir.length===0&&(ir.ended||(ir.needReadable=!0),_c!==yt&&ir.ended&&Lee(this)),mu!==null&&this.emit("data",mu),mu},b8.prototype._read=function(yt){this.emit("error",new Error("not implemented"))},b8.prototype.pipe=function(yt,ir){var _c=this,mu=this._readableState;switch(mu.pipesCount){case 0:mu.pipes=yt;break;case 1:mu.pipes=[mu.pipes,yt];break;default:mu.pipes.push(yt)}mu.pipesCount+=1,zA("pipe count=%d opts=%j",mu.pipesCount,ir);var Mu=ir&&ir.end===!1?M0:l0;function Su(bv){zA("onunpipe"),bv===_c&&M0()}function l0(){zA("onend"),yt.end()}mu.endEmitted?$2(Mu):_c.once("end",Mu),yt.on("unpipe",Su);var E0=function(bv){return function(){var gv=bv._readableState;zA("pipeOnDrain",gv.awaitDrain),gv.awaitDrain&&gv.awaitDrain--,gv.awaitDrain===0&&bv.listeners("data").length&&(gv.flowing=!0,Nee(bv))}}(_c);yt.on("drain",E0);var j0=!1;function M0(){zA("cleanup"),yt.removeListener("close",v1),yt.removeListener("finish",F1),yt.removeListener("drain",E0),yt.removeListener("error",y1),yt.removeListener("unpipe",Su),_c.removeListener("end",l0),_c.removeListener("end",M0),_c.removeListener("data",V0),j0=!0,!mu.awaitDrain||yt._writableState&&!yt._writableState.needDrain||E0()}var B0=!1;function V0(bv){zA("ondata"),B0=!1,yt.write(bv)!==!1||B0||((mu.pipesCount===1&&mu.pipes===yt||mu.pipesCount>1&&Dee(mu.pipes,yt)!==-1)&&!j0&&(zA("false write response, pause",_c._readableState.awaitDrain),_c._readableState.awaitDrain++,B0=!0),_c.pause())}function y1(bv){zA("onerror",bv),ov(),yt.removeListener("error",y1),function(gv,xv){return gv.listeners("error").length}(yt)===0&&yt.emit("error",bv)}function v1(){yt.removeListener("finish",F1),ov()}function F1(){zA("onfinish"),yt.removeListener("close",v1),ov()}function ov(){zA("unpipe"),_c.unpipe(yt)}return _c.on("data",V0),function(bv,gv,xv){if(typeof bv.prependListener=="function")return bv.prependListener(gv,xv);bv._events&&bv._events[gv]?Array.isArray(bv._events[gv])?bv._events[gv].unshift(xv):bv._events[gv]=[xv,bv._events[gv]]:bv.on(gv,xv)}(yt,"error",y1),yt.once("close",v1),yt.once("finish",F1),yt.emit("pipe",_c),mu.flowing||(zA("pipe resume"),_c.resume()),yt},b8.prototype.unpipe=function(yt){var ir=this._readableState;if(ir.pipesCount===0)return this;if(ir.pipesCount===1)return yt&&yt!==ir.pipes||(yt||(yt=ir.pipes),ir.pipes=null,ir.pipesCount=0,ir.flowing=!1,yt&&yt.emit("unpipe",this)),this;if(!yt){var _c=ir.pipes,mu=ir.pipesCount;ir.pipes=null,ir.pipesCount=0,ir.flowing=!1;for(var Mu=0;Mu-1))throw new TypeError("Unknown encoding: "+yt);return this._writableState.defaultEncoding=yt,this},u9.prototype._write=function(yt,ir,_c){_c(new Error("not implemented"))},u9.prototype._writev=null,u9.prototype.end=function(yt,ir,_c){var mu=this._writableState;typeof yt=="function"?(_c=yt,yt=null,ir=null):typeof ir=="function"&&(_c=ir,ir=null),yt!=null&&this.write(yt,ir),mu.corked&&(mu.corked=1,this.uncork()),mu.ending||mu.finished||function(Mu,Su,l0){Su.ending=!0,Hee(Mu,Su),l0&&(Su.finished?$2(l0):Mu.once("finish",l0)),Su.ended=!0,Mu.writable=!1}(this,mu,_c)},D_(UC,b8);for(var Vee=Object.keys(u9.prototype),wY=0;wYwM?ir=yt(ir):ir.length_c?ir=(yt==="rmd160"?new _Y:uF(yt)).update(ir).digest():ir.length<_c&&(ir=p4.concat([ir,o0e],_c));for(var mu=this._ipad=p4.allocUnsafe(_c),Mu=this._opad=p4.allocUnsafe(_c),Su=0;Su<_c;Su++)mu[Su]=54^ir[Su],Mu[Su]=92^ir[Su];this._hash=yt==="rmd160"?new _Y:uF(yt),this._hash.update(mu)}AY(fF,Gee),fF.prototype._update=function(yt){this._hash.update(yt)},fF.prototype._final=function(){var yt=this._hash.digest();return(this._alg==="rmd160"?new _Y:uF(this._alg)).update(this._opad).update(yt).digest()};var SY=function(yt,ir){return(yt=yt.toLowerCase())==="rmd160"||yt==="ripemd160"?new fF("rmd160",ir):yt==="md5"?new n0e(i0e,ir):new fF(yt,ir)},Ose={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}},m4=Ose,g4={},Pse=Math.pow(2,30)-1,jse=function(yt,ir){if(typeof yt!="number")throw new TypeError("Iterations not a number");if(yt<0)throw new TypeError("Bad iterations");if(typeof ir!="number")throw new TypeError("Key length not a number");if(ir<0||ir>Pse||ir!=ir)throw new TypeError("Bad key length")},v4=c.process&&c.process.browser?"utf-8":c.process&&c.process.version?parseInt(Kv.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary":"utf-8",Yee=Sy().Buffer,Zee=function(yt,ir,_c){if(Yee.isBuffer(yt))return yt;if(typeof yt=="string")return Yee.from(yt,ir);if(ArrayBuffer.isView(yt))return Yee.from(yt.buffer);throw new TypeError(_c+" must be a string, a Buffer, a typed array or a DataView")},Nse=cF,Jee=hY,Lse=Dz,dF=Sy().Buffer,a0e=jse,Bse=v4,eB=Zee,s0e=dF.alloc(128),y4={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function Xee(yt,ir,_c){var mu=function(M0){return M0==="rmd160"||M0==="ripemd160"?function(B0){return new Jee().update(B0).digest()}:M0==="md5"?Nse:function(B0){return Lse(M0).update(B0).digest()}}(yt),Mu=yt==="sha512"||yt==="sha384"?128:64;ir.length>Mu?ir=mu(ir):ir.length>>0},writeUInt32BE:function(yt,ir,_c){yt[0+_c]=ir>>>24,yt[1+_c]=ir>>>16&255,yt[2+_c]=ir>>>8&255,yt[3+_c]=255&ir},ip:function(yt,ir,_c,mu){for(var Mu=0,Su=0,l0=6;l0>=0;l0-=2){for(var E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=ir>>>E0+l0&1;for(E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=yt>>>E0+l0&1}for(l0=6;l0>=0;l0-=2){for(E0=1;E0<=25;E0+=8)Su<<=1,Su|=ir>>>E0+l0&1;for(E0=1;E0<=25;E0+=8)Su<<=1,Su|=yt>>>E0+l0&1}_c[mu+0]=Mu>>>0,_c[mu+1]=Su>>>0},rip:function(yt,ir,_c,mu){for(var Mu=0,Su=0,l0=0;l0<4;l0++)for(var E0=24;E0>=0;E0-=8)Mu<<=1,Mu|=ir>>>E0+l0&1,Mu<<=1,Mu|=yt>>>E0+l0&1;for(l0=4;l0<8;l0++)for(E0=24;E0>=0;E0-=8)Su<<=1,Su|=ir>>>E0+l0&1,Su<<=1,Su|=yt>>>E0+l0&1;_c[mu+0]=Mu>>>0,_c[mu+1]=Su>>>0},pc1:function(yt,ir,_c,mu){for(var Mu=0,Su=0,l0=7;l0>=5;l0--){for(var E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=ir>>E0+l0&1;for(E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=yt>>E0+l0&1}for(E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=ir>>E0+l0&1;for(l0=1;l0<=3;l0++){for(E0=0;E0<=24;E0+=8)Su<<=1,Su|=ir>>E0+l0&1;for(E0=0;E0<=24;E0+=8)Su<<=1,Su|=yt>>E0+l0&1}for(E0=0;E0<=24;E0+=8)Su<<=1,Su|=yt>>E0+l0&1;_c[mu+0]=Mu>>>0,_c[mu+1]=Su>>>0},r28shl:function(yt,ir){return yt<>>28-ir}},zC=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];rB.pc2=function(yt,ir,_c,mu){for(var Mu=0,Su=0,l0=zC.length>>>1,E0=0;E0>>zC[E0]&1;for(E0=l0;E0>>zC[E0]&1;_c[mu+0]=Mu>>>0,_c[mu+1]=Su>>>0},rB.expand=function(yt,ir,_c){var mu=0,Mu=0;mu=(1&yt)<<5|yt>>>27;for(var Su=23;Su>=15;Su-=4)mu<<=6,mu|=yt>>>Su&63;for(Su=11;Su>=3;Su-=4)Mu|=yt>>>Su&63,Mu<<=6;Mu|=(31&yt)<<1|yt>>>31,ir[_c+0]=mu>>>0,ir[_c+1]=Mu>>>0};var pF=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];rB.substitute=function(yt,ir){for(var _c=0,mu=0;mu<4;mu++)_c<<=4,_c|=pF[64*mu+(yt>>>18-6*mu&63)];for(mu=0;mu<4;mu++)_c<<=4,_c|=pF[256+64*mu+(ir>>>18-6*mu&63)];return _c>>>0};var nB=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];rB.permute=function(yt){for(var ir=0,_c=0;_c>>nB[_c]&1;return ir>>>0},rB.padSplit=function(yt,ir,_c){for(var mu=yt.toString(2);mu.length0;mu--)ir+=this._buffer(yt,ir),_c+=this._flushBuffer(Mu,_c);return ir+=this._buffer(yt,ir),Mu},w8.prototype.final=function(yt){var ir,_c;return yt&&(ir=this.update(yt)),_c=this.type==="encrypt"?this._finalEncrypt():this._finalDecrypt(),ir?ir.concat(_c):_c},w8.prototype._pad=function(yt,ir){if(ir===0)return!1;for(;ir>>1];_c=RA.r28shl(_c,Su),mu=RA.r28shl(mu,Su),RA.pc2(_c,mu,yt.keys,Mu)}},GA.prototype._update=function(yt,ir,_c,mu){var Mu=this._desState,Su=RA.readUInt32BE(yt,ir),l0=RA.readUInt32BE(yt,ir+4);RA.ip(Su,l0,Mu.tmp,0),Su=Mu.tmp[0],l0=Mu.tmp[1],this.type==="encrypt"?this._encrypt(Mu,Su,l0,Mu.tmp,0):this._decrypt(Mu,Su,l0,Mu.tmp,0),Su=Mu.tmp[0],l0=Mu.tmp[1],RA.writeUInt32BE(_c,Su,mu),RA.writeUInt32BE(_c,l0,mu+4)},GA.prototype._pad=function(yt,ir){if(this.padding===!1)return!1;for(var _c=yt.length-ir,mu=ir;mu>>0,Su=V0}RA.rip(l0,Su,mu,Mu)},GA.prototype._decrypt=function(yt,ir,_c,mu,Mu){for(var Su=_c,l0=ir,E0=yt.keys.length-2;E0>=0;E0-=2){var j0=yt.keys[E0],M0=yt.keys[E0+1];RA.expand(Su,yt.tmp,0),j0^=yt.tmp[0],M0^=yt.tmp[1];var B0=RA.substitute(j0,M0),V0=Su;Su=(l0^RA.permute(B0))>>>0,l0=V0}RA.rip(Su,l0,mu,Mu)};var XI={},qse=Zx,c0e=Gw,w4={};function u0e(yt){qse.equal(yt.length,8,"Invalid IV length"),this.iv=new Array(8);for(var ir=0;ir>Su%8,yt._prev=g0e(yt._prev,_c?mu:Mu);return l0}function g0e(yt,ir){var _c=yt.length,mu=-1,Mu=A4.allocUnsafe(yt.length);for(yt=A4.concat([yt,A4.from([ir])]);++mu<_c;)Mu[mu]=yt[mu]<<1|yt[mu+1]>>7;return Mu}lte.encrypt=function(yt,ir,_c){for(var mu=ir.length,Mu=A4.allocUnsafe(mu),Su=-1;++Su>>24]^B0[F1>>>16&255]^V0[ov>>>8&255]^y1[255&bv]^ir[gv++],l0=M0[F1>>>24]^B0[ov>>>16&255]^V0[bv>>>8&255]^y1[255&v1]^ir[gv++],E0=M0[ov>>>24]^B0[bv>>>16&255]^V0[v1>>>8&255]^y1[255&F1]^ir[gv++],j0=M0[bv>>>24]^B0[v1>>>16&255]^V0[F1>>>8&255]^y1[255&ov]^ir[gv++],v1=Su,F1=l0,ov=E0,bv=j0;return Su=(mu[v1>>>24]<<24|mu[F1>>>16&255]<<16|mu[ov>>>8&255]<<8|mu[255&bv])^ir[gv++],l0=(mu[F1>>>24]<<24|mu[ov>>>16&255]<<16|mu[bv>>>8&255]<<8|mu[255&v1])^ir[gv++],E0=(mu[ov>>>24]<<24|mu[bv>>>16&255]<<16|mu[v1>>>8&255]<<8|mu[255&F1])^ir[gv++],j0=(mu[bv>>>24]<<24|mu[v1>>>16&255]<<16|mu[F1>>>8&255]<<8|mu[255&ov])^ir[gv++],[Su>>>=0,l0>>>=0,E0>>>=0,j0>>>=0]}var jY=[0,1,2,4,8,16,32,64,128,27,54],D8=function(){for(var yt=new Array(256),ir=0;ir<256;ir++)yt[ir]=ir<128?ir<<1:ir<<1^283;for(var _c=[],mu=[],Mu=[[],[],[],[]],Su=[[],[],[],[]],l0=0,E0=0,j0=0;j0<256;++j0){var M0=E0^E0<<1^E0<<2^E0<<3^E0<<4;M0=M0>>>8^255&M0^99,_c[l0]=M0,mu[M0]=l0;var B0=yt[l0],V0=yt[B0],y1=yt[V0],v1=257*yt[M0]^16843008*M0;Mu[0][l0]=v1<<24|v1>>>8,Mu[1][l0]=v1<<16|v1>>>16,Mu[2][l0]=v1<<8|v1>>>24,Mu[3][l0]=v1,v1=16843009*y1^65537*V0^257*B0^16843008*l0,Su[0][M0]=v1<<24|v1>>>8,Su[1][M0]=v1<<16|v1>>>16,Su[2][M0]=v1<<8|v1>>>24,Su[3][M0]=v1,l0===0?l0=E0=1:(l0=B0^yt[yt[yt[y1^B0]]],E0^=yt[yt[E0]])}return{SBOX:_c,INV_SBOX:mu,SUB_MIX:Mu,INV_SUB_MIX:Su}}();function HC(yt){this._key=PY(yt),this._reset()}HC.blockSize=16,HC.keySize=32,HC.prototype.blockSize=HC.blockSize,HC.prototype.keySize=HC.keySize,HC.prototype._reset=function(){for(var yt=this._key,ir=yt.length,_c=ir+6,mu=4*(_c+1),Mu=[],Su=0;Su>>24,l0=D8.SBOX[l0>>>24]<<24|D8.SBOX[l0>>>16&255]<<16|D8.SBOX[l0>>>8&255]<<8|D8.SBOX[255&l0],l0^=jY[Su/ir|0]<<24):ir>6&&Su%ir==4&&(l0=D8.SBOX[l0>>>24]<<24|D8.SBOX[l0>>>16&255]<<16|D8.SBOX[l0>>>8&255]<<8|D8.SBOX[255&l0]),Mu[Su]=Mu[Su-ir]^l0}for(var E0=[],j0=0;j0>>24]]^D8.INV_SUB_MIX[1][D8.SBOX[B0>>>16&255]]^D8.INV_SUB_MIX[2][D8.SBOX[B0>>>8&255]]^D8.INV_SUB_MIX[3][D8.SBOX[255&B0]]}this._nRounds=_c,this._keySchedule=Mu,this._invKeySchedule=E0},HC.prototype.encryptBlockRaw=function(yt){return qz(yt=PY(yt),this._keySchedule,D8.SUB_MIX,D8.SBOX,this._nRounds)},HC.prototype.encryptBlock=function(yt){var ir=this.encryptBlockRaw(yt),_c=vF.allocUnsafe(16);return _c.writeUInt32BE(ir[0],0),_c.writeUInt32BE(ir[1],4),_c.writeUInt32BE(ir[2],8),_c.writeUInt32BE(ir[3],12),_c},HC.prototype.decryptBlock=function(yt){var ir=(yt=PY(yt))[1];yt[1]=yt[3],yt[3]=ir;var _c=qz(yt,this._invKeySchedule,D8.INV_SUB_MIX,D8.INV_SBOX,this._nRounds),mu=vF.allocUnsafe(16);return mu.writeUInt32BE(_c[0],0),mu.writeUInt32BE(_c[3],4),mu.writeUInt32BE(_c[2],8),mu.writeUInt32BE(_c[1],12),mu},HC.prototype.scrub=function(){S4(this._keySchedule),S4(this._invKeySchedule),S4(this._key)},_4.AES=HC;var yF=Sy().Buffer,b0e=yF.alloc(16,0);function sS(yt){var ir=yF.allocUnsafe(16);return ir.writeUInt32BE(yt[0]>>>0,0),ir.writeUInt32BE(yt[1]>>>0,4),ir.writeUInt32BE(yt[2]>>>0,8),ir.writeUInt32BE(yt[3]>>>0,12),ir}function tx(yt){this.h=yt,this.state=yF.alloc(16,0),this.cache=yF.allocUnsafe(0)}tx.prototype.ghash=function(yt){for(var ir=-1;++ir0;ir--)mu[ir]=mu[ir]>>>1|(1&mu[ir-1])<<31;mu[0]=mu[0]>>>1,_c&&(mu[0]=mu[0]^225<<24)}this.state=sS(Mu)},tx.prototype.update=function(yt){var ir;for(this.cache=yF.concat([this.cache,yt]);this.cache.length>=16;)ir=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(ir)},tx.prototype.final=function(yt,ir){return this.cache.length&&this.ghash(yF.concat([this.cache,b0e],16)),this.ghash(sS([0,yt,0,ir])),this.state};var Wz=tx,w0e=_4,Xx=Sy().Buffer,Gz=pN,ele=Wz,$0e=d9,KC=dte;function lB(yt,ir,_c,mu){Gz.call(this);var Mu=Xx.alloc(4,0);this._cipher=new w0e.AES(ir);var Su=this._cipher.encryptBlock(Mu);this._ghash=new ele(Su),_c=function(l0,E0,j0){if(E0.length===12)return l0._finID=Xx.concat([E0,Xx.from([0,0,0,1])]),Xx.concat([E0,Xx.from([0,0,0,2])]);var M0=new ele(j0),B0=E0.length,V0=B0%16;M0.update(E0),V0&&(V0=16-V0,M0.update(Xx.alloc(V0,0))),M0.update(Xx.alloc(8,0));var y1=8*B0,v1=Xx.alloc(8);v1.writeUIntBE(y1,0,8),M0.update(v1),l0._finID=M0.state;var F1=Xx.from(l0._finID);return KC(F1),F1}(this,_c,Su),this._prev=Xx.from(_c),this._cache=Xx.allocUnsafe(0),this._secCache=Xx.allocUnsafe(0),this._decrypt=mu,this._alen=0,this._len=0,this._mode=yt,this._authTag=null,this._called=!1}Gw(lB,Gz),lB.prototype._update=function(yt){if(!this._called&&this._alen){var ir=16-this._alen%16;ir<16&&(ir=Xx.alloc(ir,0),this._ghash.update(ir))}this._called=!0;var _c=this._mode.encrypt(this,yt);return this._decrypt?this._ghash.update(yt):this._ghash.update(_c),this._len+=yt.length,_c},lB.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var yt=$0e(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(ir,_c){var mu=0;ir.length!==_c.length&&mu++;for(var Mu=Math.min(ir.length,_c.length),Su=0;Su0||mu>0;){var j0=new rle;j0.update(E0),j0.update(yt),ir&&j0.update(ir),E0=j0.digest();var M0=0;if(Mu>0){var B0=Su.length-Mu;M0=Math.min(Mu,E0.length),E0.copy(Su,B0,0,M0),Mu-=M0}if(M00){var V0=l0.length-mu,y1=Math.min(mu,E0.length-M0);E0.copy(l0,V0,M0,M0+y1),mu-=y1}}return E0.fill(0),{key:Su,iv:l0}},gte=OY,wF=pte,gN=Sy().Buffer,NY=tle,vte=pN,A0e=_4,vN=bF;function k4(yt,ir,_c){vte.call(this),this._cache=new LY,this._cipher=new A0e.AES(ir),this._prev=gN.from(_c),this._mode=yt,this._autopadding=!0}Gw(k4,vte),k4.prototype._update=function(yt){var ir,_c;this._cache.add(yt);for(var mu=[];ir=this._cache.get();)_c=this._mode.encrypt(this,ir),mu.push(_c);return gN.concat(mu)};var nle=gN.alloc(16,16);function LY(){this.cache=gN.allocUnsafe(0)}function ile(yt,ir,_c){var mu=gte[yt.toLowerCase()];if(!mu)throw new TypeError("invalid suite type");if(typeof ir=="string"&&(ir=gN.from(ir)),ir.length!==mu.key/8)throw new TypeError("invalid key length "+ir.length);if(typeof _c=="string"&&(_c=gN.from(_c)),mu.mode!=="GCM"&&_c.length!==mu.iv)throw new TypeError("invalid iv length "+_c.length);return mu.type==="stream"?new NY(mu.module,ir,_c):mu.type==="auth"?new wF(mu.module,ir,_c):new k4(mu.module,ir,_c)}k4.prototype._final=function(){var yt=this._cache.flush();if(this._autopadding)return yt=this._mode.encrypt(this,yt),this._cipher.scrub(),yt;if(!yt.equals(nle))throw this._cipher.scrub(),new Error("data not multiple of block length")},k4.prototype.setAutoPadding=function(yt){return this._autopadding=!!yt,this},LY.prototype.add=function(yt){this.cache=gN.concat([this.cache,yt])},LY.prototype.get=function(){if(this.cache.length>15){var yt=this.cache.slice(0,16);return this.cache=this.cache.slice(16),yt}return null},LY.prototype.flush=function(){for(var yt=16-this.cache.length,ir=gN.allocUnsafe(yt),_c=-1;++_c16)throw new Error("unable to decrypt data");for(var mu=-1;++mu<_c;)if(ir[mu+(16-_c)]!==_c)throw new Error("unable to decrypt data");if(_c!==16)return ir.slice(0,16-_c)}(this._mode.decrypt(this,yt));if(yt)throw new Error("data not multiple of block length")},C4.prototype.setAutoPadding=function(yt){return this._autopadding=!!yt,this},T4.prototype.add=function(yt){this.cache=yN.concat([this.cache,yt])},T4.prototype.get=function(yt){var ir;if(yt){if(this.cache.length>16)return ir=this.cache.slice(0,16),this.cache=this.cache.slice(16),ir}else if(this.cache.length>=16)return ir=this.cache.slice(0,16),this.cache=this.cache.slice(16),ir;return null},T4.prototype.flush=function(){if(this.cache.length)return this.cache},$F.createDecipher=function(yt,ir){var _c=yte[yt.toLowerCase()];if(!_c)throw new TypeError("invalid suite type");var mu=ale(ir,!1,_c.key,_c.iv);return sle(yt,mu.key,mu.iv)},$F.createDecipheriv=sle;var lle=ote,Zz=$F,BY=Jse;f9.createCipher=f9.Cipher=lle.createCipher,f9.createCipheriv=f9.Cipheriv=lle.createCipheriv,f9.createDecipher=f9.Decipher=Zz.createDecipher,f9.createDecipheriv=f9.Decipheriv=Zz.createDecipheriv,f9.listCiphers=f9.getCiphers=function(){return Object.keys(BY)};var wte={};(function(yt){yt["des-ecb"]={key:8,iv:0},yt["des-cbc"]=yt.des={key:8,iv:8},yt["des-ede3-cbc"]=yt.des3={key:24,iv:8},yt["des-ede3"]={key:24,iv:0},yt["des-ede-cbc"]={key:16,iv:8},yt["des-ede"]={key:16,iv:0}})(wte);var $te=p0e,DY=f9,uB=OY,xO=wte,Ete=bF;function FY(yt,ir,_c){if(yt=yt.toLowerCase(),uB[yt])return DY.createCipheriv(yt,ir,_c);if(xO[yt])return new $te({key:ir,iv:_c,mode:yt});throw new TypeError("invalid suite type")}function bN(yt,ir,_c){if(yt=yt.toLowerCase(),uB[yt])return DY.createDecipheriv(yt,ir,_c);if(xO[yt])return new $te({key:ir,iv:_c,mode:yt,decrypt:!0});throw new TypeError("invalid suite type")}cR.createCipher=cR.Cipher=function(yt,ir){var _c,mu;if(yt=yt.toLowerCase(),uB[yt])_c=uB[yt].key,mu=uB[yt].iv;else{if(!xO[yt])throw new TypeError("invalid suite type");_c=8*xO[yt].key,mu=xO[yt].iv}var Mu=Ete(ir,!1,_c,mu);return FY(yt,Mu.key,Mu.iv)},cR.createCipheriv=cR.Cipheriv=FY,cR.createDecipher=cR.Decipher=function(yt,ir){var _c,mu;if(yt=yt.toLowerCase(),uB[yt])_c=uB[yt].key,mu=uB[yt].iv;else{if(!xO[yt])throw new TypeError("invalid suite type");_c=8*xO[yt].key,mu=xO[yt].iv}var Mu=Ete(ir,!1,_c,mu);return bN(yt,Mu.key,Mu.iv)},cR.createDecipheriv=cR.Decipheriv=bN,cR.listCiphers=cR.getCiphers=function(){return Object.keys(xO).concat(DY.getCiphers())};var Qx={},Ate={exports:{}};(function(yt){(function(ir,_c){function mu(T0,X0){if(!T0)throw new Error(X0||"Assertion failed")}function Mu(T0,X0){T0.super_=X0;var s0=function(){};s0.prototype=X0.prototype,T0.prototype=new s0,T0.prototype.constructor=T0}function Su(T0,X0,s0){if(Su.isBN(T0))return T0;this.negative=0,this.words=null,this.length=0,this.red=null,T0!==null&&(X0!=="le"&&X0!=="be"||(s0=X0,X0=10),this._init(T0||0,X0||10,s0||"be"))}var l0;typeof ir=="object"?ir.exports=Su:_c.BN=Su,Su.BN=Su,Su.wordSize=26;try{l0=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:zw.Buffer}catch{}function E0(T0,X0){var s0=T0.charCodeAt(X0);return s0>=65&&s0<=70?s0-55:s0>=97&&s0<=102?s0-87:s0-48&15}function j0(T0,X0,s0){var g0=E0(T0,s0);return s0-1>=X0&&(g0|=E0(T0,s0-1)<<4),g0}function M0(T0,X0,s0,g0){for(var d0=0,c0=Math.min(T0.length,s0),a0=X0;a0=49?S0-49+10:S0>=17?S0-17+10:S0}return d0}Su.isBN=function(T0){return T0 instanceof Su||T0!==null&&typeof T0=="object"&&T0.constructor.wordSize===Su.wordSize&&Array.isArray(T0.words)},Su.max=function(T0,X0){return T0.cmp(X0)>0?T0:X0},Su.min=function(T0,X0){return T0.cmp(X0)<0?T0:X0},Su.prototype._init=function(T0,X0,s0){if(typeof T0=="number")return this._initNumber(T0,X0,s0);if(typeof T0=="object")return this._initArray(T0,X0,s0);X0==="hex"&&(X0=16),mu(X0===(0|X0)&&X0>=2&&X0<=36);var g0=0;(T0=T0.toString().replace(/\s+/g,""))[0]==="-"&&(g0++,this.negative=1),g0=0;g0-=3)c0=T0[g0]|T0[g0-1]<<8|T0[g0-2]<<16,this.words[d0]|=c0<>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);else if(s0==="le")for(g0=0,d0=0;g0>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);return this.strip()},Su.prototype._parseHex=function(T0,X0,s0){this.length=Math.ceil((T0.length-X0)/6),this.words=new Array(this.length);for(var g0=0;g0=X0;g0-=2)d0=j0(T0,X0,g0)<=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;else for(g0=(T0.length-X0)%2==0?X0+1:X0;g0=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;this.strip()},Su.prototype._parseBase=function(T0,X0,s0){this.words=[0],this.length=1;for(var g0=0,d0=1;d0<=67108863;d0*=X0)g0++;g0--,d0=d0/X0|0;for(var c0=T0.length-s0,a0=c0%g0,S0=Math.min(c0,c0-a0)+s0,z0=0,Q0=s0;Q01&&this.words[this.length-1]===0;)this.length--;return this._normSign()},Su.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},Su.prototype.inspect=function(){return(this.red?""};var B0=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],V0=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],y1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function v1(T0,X0,s0){s0.negative=X0.negative^T0.negative;var g0=T0.length+X0.length|0;s0.length=g0,g0=g0-1|0;var d0=0|T0.words[0],c0=0|X0.words[0],a0=d0*c0,S0=67108863&a0,z0=a0/67108864|0;s0.words[0]=S0;for(var Q0=1;Q0>>26,T1=67108863&z0,U1=Math.min(Q0,X0.length-1),S1=Math.max(0,Q0-T0.length+1);S1<=U1;S1++){var n1=Q0-S1|0;p1+=(a0=(d0=0|T0.words[n1])*(c0=0|X0.words[S1])+T1)/67108864|0,T1=67108863&a0}s0.words[Q0]=0|T1,z0=0|p1}return z0!==0?s0.words[Q0]=0|z0:s0.length--,s0.strip()}Su.prototype.toString=function(T0,X0){var s0;if(X0=0|X0||1,(T0=T0||10)===16||T0==="hex"){s0="";for(var g0=0,d0=0,c0=0;c0>>24-g0&16777215)!=0||c0!==this.length-1?B0[6-S0.length]+S0+s0:S0+s0,(g0+=2)>=26&&(g0-=26,c0--)}for(d0!==0&&(s0=d0.toString(16)+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}if(T0===(0|T0)&&T0>=2&&T0<=36){var z0=V0[T0],Q0=y1[T0];s0="";var p1=this.clone();for(p1.negative=0;!p1.isZero();){var T1=p1.modn(Q0).toString(T0);s0=(p1=p1.idivn(Q0)).isZero()?T1+s0:B0[z0-T1.length]+T1+s0}for(this.isZero()&&(s0="0"+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}mu(!1,"Base should be between 2 and 36")},Su.prototype.toNumber=function(){var T0=this.words[0];return this.length===2?T0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?T0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-T0:T0},Su.prototype.toJSON=function(){return this.toString(16)},Su.prototype.toBuffer=function(T0,X0){return mu(l0!==void 0),this.toArrayLike(l0,T0,X0)},Su.prototype.toArray=function(T0,X0){return this.toArrayLike(Array,T0,X0)},Su.prototype.toArrayLike=function(T0,X0,s0){var g0=this.byteLength(),d0=s0||Math.max(1,g0);mu(g0<=d0,"byte array longer than desired length"),mu(d0>0,"Requested array length <= 0"),this.strip();var c0,a0,S0=X0==="le",z0=new T0(d0),Q0=this.clone();if(S0){for(a0=0;!Q0.isZero();a0++)c0=Q0.andln(255),Q0.iushrn(8),z0[a0]=c0;for(;a0=4096&&(s0+=13,X0>>>=13),X0>=64&&(s0+=7,X0>>>=7),X0>=8&&(s0+=4,X0>>>=4),X0>=2&&(s0+=2,X0>>>=2),s0+X0},Su.prototype._zeroBits=function(T0){if(T0===0)return 26;var X0=T0,s0=0;return!(8191&X0)&&(s0+=13,X0>>>=13),!(127&X0)&&(s0+=7,X0>>>=7),!(15&X0)&&(s0+=4,X0>>>=4),!(3&X0)&&(s0+=2,X0>>>=2),!(1&X0)&&s0++,s0},Su.prototype.bitLength=function(){var T0=this.words[this.length-1],X0=this._countBits(T0);return 26*(this.length-1)+X0},Su.prototype.zeroBits=function(){if(this.isZero())return 0;for(var T0=0,X0=0;X0T0.length?this.clone().ior(T0):T0.clone().ior(this)},Su.prototype.uor=function(T0){return this.length>T0.length?this.clone().iuor(T0):T0.clone().iuor(this)},Su.prototype.iuand=function(T0){var X0;X0=this.length>T0.length?T0:this;for(var s0=0;s0T0.length?this.clone().iand(T0):T0.clone().iand(this)},Su.prototype.uand=function(T0){return this.length>T0.length?this.clone().iuand(T0):T0.clone().iuand(this)},Su.prototype.iuxor=function(T0){var X0,s0;this.length>T0.length?(X0=this,s0=T0):(X0=T0,s0=this);for(var g0=0;g0T0.length?this.clone().ixor(T0):T0.clone().ixor(this)},Su.prototype.uxor=function(T0){return this.length>T0.length?this.clone().iuxor(T0):T0.clone().iuxor(this)},Su.prototype.inotn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=0|Math.ceil(T0/26),s0=T0%26;this._expand(X0),s0>0&&X0--;for(var g0=0;g00&&(this.words[g0]=~this.words[g0]&67108863>>26-s0),this.strip()},Su.prototype.notn=function(T0){return this.clone().inotn(T0)},Su.prototype.setn=function(T0,X0){mu(typeof T0=="number"&&T0>=0);var s0=T0/26|0,g0=T0%26;return this._expand(s0+1),this.words[s0]=X0?this.words[s0]|1<T0.length?(s0=this,g0=T0):(s0=T0,g0=this);for(var d0=0,c0=0;c0>>26;for(;d0!==0&&c0>>26;if(this.length=s0.length,d0!==0)this.words[this.length]=d0,this.length++;else if(s0!==this)for(;c0T0.length?this.clone().iadd(T0):T0.clone().iadd(this)},Su.prototype.isub=function(T0){if(T0.negative!==0){T0.negative=0;var X0=this.iadd(T0);return T0.negative=1,X0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(T0),this.negative=1,this._normSign();var s0,g0,d0=this.cmp(T0);if(d0===0)return this.negative=0,this.length=1,this.words[0]=0,this;d0>0?(s0=this,g0=T0):(s0=T0,g0=this);for(var c0=0,a0=0;a0>26,this.words[a0]=67108863&X0;for(;c0!==0&&a0>26,this.words[a0]=67108863&X0;if(c0===0&&a0>>13,S1=0|a0[1],n1=8191&S1,V1=S1>>>13,J1=0|a0[2],wv=8191&J1,Sv=J1>>>13,Hv=0|a0[3],ty=8191&Hv,gy=Hv>>>13,yv=0|a0[4],Av=8191&yv,Dv=yv>>>13,ry=0|a0[5],Jv=8191&ry,Fv=ry>>>13,iy=0|a0[6],cy=8191&iy,Uy=iy>>>13,r2=0|a0[7],f2=8191&r2,j2=r2>>>13,mw=0|a0[8],p2=8191&mw,Vw=mw>>>13,Ew=0|a0[9],q2=8191&Ew,$3=Ew>>>13,Rw=0|S0[0],K2=8191&Rw,Xw=Rw>>>13,a3=0|S0[1],F2=8191&a3,Qw=a3>>>13,vt=0|S0[2],wt=8191&vt,Ws=vt>>>13,pu=0|S0[3],Ru=8191&pu,wu=pu>>>13,t0=0|S0[4],m0=8191&t0,k0=t0>>>13,_0=0|S0[5],R0=8191&_0,N0=_0>>>13,l1=0|S0[6],a1=8191&l1,x1=l1>>>13,K1=0|S0[7],W1=8191&K1,_g=K1>>>13,uv=0|S0[8],Tv=8191&uv,Uv=uv>>>13,Wv=0|S0[9],ny=8191&Wv,Rv=Wv>>>13;s0.negative=T0.negative^X0.negative,s0.length=19;var Gv=(Q0+(g0=Math.imul(T1,K2))|0)+((8191&(d0=(d0=Math.imul(T1,Xw))+Math.imul(U1,K2)|0))<<13)|0;Q0=((c0=Math.imul(U1,Xw))+(d0>>>13)|0)+(Gv>>>26)|0,Gv&=67108863,g0=Math.imul(n1,K2),d0=(d0=Math.imul(n1,Xw))+Math.imul(V1,K2)|0,c0=Math.imul(V1,Xw);var C0=(Q0+(g0=g0+Math.imul(T1,F2)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Qw)|0)+Math.imul(U1,F2)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Qw)|0)+(d0>>>13)|0)+(C0>>>26)|0,C0&=67108863,g0=Math.imul(wv,K2),d0=(d0=Math.imul(wv,Xw))+Math.imul(Sv,K2)|0,c0=Math.imul(Sv,Xw),g0=g0+Math.imul(n1,F2)|0,d0=(d0=d0+Math.imul(n1,Qw)|0)+Math.imul(V1,F2)|0,c0=c0+Math.imul(V1,Qw)|0;var J0=(Q0+(g0=g0+Math.imul(T1,wt)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Ws)|0)+Math.imul(U1,wt)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Ws)|0)+(d0>>>13)|0)+(J0>>>26)|0,J0&=67108863,g0=Math.imul(ty,K2),d0=(d0=Math.imul(ty,Xw))+Math.imul(gy,K2)|0,c0=Math.imul(gy,Xw),g0=g0+Math.imul(wv,F2)|0,d0=(d0=d0+Math.imul(wv,Qw)|0)+Math.imul(Sv,F2)|0,c0=c0+Math.imul(Sv,Qw)|0,g0=g0+Math.imul(n1,wt)|0,d0=(d0=d0+Math.imul(n1,Ws)|0)+Math.imul(V1,wt)|0,c0=c0+Math.imul(V1,Ws)|0;var f0=(Q0+(g0=g0+Math.imul(T1,Ru)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,wu)|0)+Math.imul(U1,Ru)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,wu)|0)+(d0>>>13)|0)+(f0>>>26)|0,f0&=67108863,g0=Math.imul(Av,K2),d0=(d0=Math.imul(Av,Xw))+Math.imul(Dv,K2)|0,c0=Math.imul(Dv,Xw),g0=g0+Math.imul(ty,F2)|0,d0=(d0=d0+Math.imul(ty,Qw)|0)+Math.imul(gy,F2)|0,c0=c0+Math.imul(gy,Qw)|0,g0=g0+Math.imul(wv,wt)|0,d0=(d0=d0+Math.imul(wv,Ws)|0)+Math.imul(Sv,wt)|0,c0=c0+Math.imul(Sv,Ws)|0,g0=g0+Math.imul(n1,Ru)|0,d0=(d0=d0+Math.imul(n1,wu)|0)+Math.imul(V1,Ru)|0,c0=c0+Math.imul(V1,wu)|0;var v0=(Q0+(g0=g0+Math.imul(T1,m0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,k0)|0)+Math.imul(U1,m0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,k0)|0)+(d0>>>13)|0)+(v0>>>26)|0,v0&=67108863,g0=Math.imul(Jv,K2),d0=(d0=Math.imul(Jv,Xw))+Math.imul(Fv,K2)|0,c0=Math.imul(Fv,Xw),g0=g0+Math.imul(Av,F2)|0,d0=(d0=d0+Math.imul(Av,Qw)|0)+Math.imul(Dv,F2)|0,c0=c0+Math.imul(Dv,Qw)|0,g0=g0+Math.imul(ty,wt)|0,d0=(d0=d0+Math.imul(ty,Ws)|0)+Math.imul(gy,wt)|0,c0=c0+Math.imul(gy,Ws)|0,g0=g0+Math.imul(wv,Ru)|0,d0=(d0=d0+Math.imul(wv,wu)|0)+Math.imul(Sv,Ru)|0,c0=c0+Math.imul(Sv,wu)|0,g0=g0+Math.imul(n1,m0)|0,d0=(d0=d0+Math.imul(n1,k0)|0)+Math.imul(V1,m0)|0,c0=c0+Math.imul(V1,k0)|0;var h0=(Q0+(g0=g0+Math.imul(T1,R0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,N0)|0)+Math.imul(U1,R0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,N0)|0)+(d0>>>13)|0)+(h0>>>26)|0,h0&=67108863,g0=Math.imul(cy,K2),d0=(d0=Math.imul(cy,Xw))+Math.imul(Uy,K2)|0,c0=Math.imul(Uy,Xw),g0=g0+Math.imul(Jv,F2)|0,d0=(d0=d0+Math.imul(Jv,Qw)|0)+Math.imul(Fv,F2)|0,c0=c0+Math.imul(Fv,Qw)|0,g0=g0+Math.imul(Av,wt)|0,d0=(d0=d0+Math.imul(Av,Ws)|0)+Math.imul(Dv,wt)|0,c0=c0+Math.imul(Dv,Ws)|0,g0=g0+Math.imul(ty,Ru)|0,d0=(d0=d0+Math.imul(ty,wu)|0)+Math.imul(gy,Ru)|0,c0=c0+Math.imul(gy,wu)|0,g0=g0+Math.imul(wv,m0)|0,d0=(d0=d0+Math.imul(wv,k0)|0)+Math.imul(Sv,m0)|0,c0=c0+Math.imul(Sv,k0)|0,g0=g0+Math.imul(n1,R0)|0,d0=(d0=d0+Math.imul(n1,N0)|0)+Math.imul(V1,R0)|0,c0=c0+Math.imul(V1,N0)|0;var u0=(Q0+(g0=g0+Math.imul(T1,a1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,x1)|0)+Math.imul(U1,a1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,x1)|0)+(d0>>>13)|0)+(u0>>>26)|0,u0&=67108863,g0=Math.imul(f2,K2),d0=(d0=Math.imul(f2,Xw))+Math.imul(j2,K2)|0,c0=Math.imul(j2,Xw),g0=g0+Math.imul(cy,F2)|0,d0=(d0=d0+Math.imul(cy,Qw)|0)+Math.imul(Uy,F2)|0,c0=c0+Math.imul(Uy,Qw)|0,g0=g0+Math.imul(Jv,wt)|0,d0=(d0=d0+Math.imul(Jv,Ws)|0)+Math.imul(Fv,wt)|0,c0=c0+Math.imul(Fv,Ws)|0,g0=g0+Math.imul(Av,Ru)|0,d0=(d0=d0+Math.imul(Av,wu)|0)+Math.imul(Dv,Ru)|0,c0=c0+Math.imul(Dv,wu)|0,g0=g0+Math.imul(ty,m0)|0,d0=(d0=d0+Math.imul(ty,k0)|0)+Math.imul(gy,m0)|0,c0=c0+Math.imul(gy,k0)|0,g0=g0+Math.imul(wv,R0)|0,d0=(d0=d0+Math.imul(wv,N0)|0)+Math.imul(Sv,R0)|0,c0=c0+Math.imul(Sv,N0)|0,g0=g0+Math.imul(n1,a1)|0,d0=(d0=d0+Math.imul(n1,x1)|0)+Math.imul(V1,a1)|0,c0=c0+Math.imul(V1,x1)|0;var o0=(Q0+(g0=g0+Math.imul(T1,W1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,_g)|0)+Math.imul(U1,W1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,_g)|0)+(d0>>>13)|0)+(o0>>>26)|0,o0&=67108863,g0=Math.imul(p2,K2),d0=(d0=Math.imul(p2,Xw))+Math.imul(Vw,K2)|0,c0=Math.imul(Vw,Xw),g0=g0+Math.imul(f2,F2)|0,d0=(d0=d0+Math.imul(f2,Qw)|0)+Math.imul(j2,F2)|0,c0=c0+Math.imul(j2,Qw)|0,g0=g0+Math.imul(cy,wt)|0,d0=(d0=d0+Math.imul(cy,Ws)|0)+Math.imul(Uy,wt)|0,c0=c0+Math.imul(Uy,Ws)|0,g0=g0+Math.imul(Jv,Ru)|0,d0=(d0=d0+Math.imul(Jv,wu)|0)+Math.imul(Fv,Ru)|0,c0=c0+Math.imul(Fv,wu)|0,g0=g0+Math.imul(Av,m0)|0,d0=(d0=d0+Math.imul(Av,k0)|0)+Math.imul(Dv,m0)|0,c0=c0+Math.imul(Dv,k0)|0,g0=g0+Math.imul(ty,R0)|0,d0=(d0=d0+Math.imul(ty,N0)|0)+Math.imul(gy,R0)|0,c0=c0+Math.imul(gy,N0)|0,g0=g0+Math.imul(wv,a1)|0,d0=(d0=d0+Math.imul(wv,x1)|0)+Math.imul(Sv,a1)|0,c0=c0+Math.imul(Sv,x1)|0,g0=g0+Math.imul(n1,W1)|0,d0=(d0=d0+Math.imul(n1,_g)|0)+Math.imul(V1,W1)|0,c0=c0+Math.imul(V1,_g)|0;var x0=(Q0+(g0=g0+Math.imul(T1,Tv)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Uv)|0)+Math.imul(U1,Tv)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Uv)|0)+(d0>>>13)|0)+(x0>>>26)|0,x0&=67108863,g0=Math.imul(q2,K2),d0=(d0=Math.imul(q2,Xw))+Math.imul($3,K2)|0,c0=Math.imul($3,Xw),g0=g0+Math.imul(p2,F2)|0,d0=(d0=d0+Math.imul(p2,Qw)|0)+Math.imul(Vw,F2)|0,c0=c0+Math.imul(Vw,Qw)|0,g0=g0+Math.imul(f2,wt)|0,d0=(d0=d0+Math.imul(f2,Ws)|0)+Math.imul(j2,wt)|0,c0=c0+Math.imul(j2,Ws)|0,g0=g0+Math.imul(cy,Ru)|0,d0=(d0=d0+Math.imul(cy,wu)|0)+Math.imul(Uy,Ru)|0,c0=c0+Math.imul(Uy,wu)|0,g0=g0+Math.imul(Jv,m0)|0,d0=(d0=d0+Math.imul(Jv,k0)|0)+Math.imul(Fv,m0)|0,c0=c0+Math.imul(Fv,k0)|0,g0=g0+Math.imul(Av,R0)|0,d0=(d0=d0+Math.imul(Av,N0)|0)+Math.imul(Dv,R0)|0,c0=c0+Math.imul(Dv,N0)|0,g0=g0+Math.imul(ty,a1)|0,d0=(d0=d0+Math.imul(ty,x1)|0)+Math.imul(gy,a1)|0,c0=c0+Math.imul(gy,x1)|0,g0=g0+Math.imul(wv,W1)|0,d0=(d0=d0+Math.imul(wv,_g)|0)+Math.imul(Sv,W1)|0,c0=c0+Math.imul(Sv,_g)|0,g0=g0+Math.imul(n1,Tv)|0,d0=(d0=d0+Math.imul(n1,Uv)|0)+Math.imul(V1,Tv)|0,c0=c0+Math.imul(V1,Uv)|0;var U0=(Q0+(g0=g0+Math.imul(T1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Rv)|0)+Math.imul(U1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Rv)|0)+(d0>>>13)|0)+(U0>>>26)|0,U0&=67108863,g0=Math.imul(q2,F2),d0=(d0=Math.imul(q2,Qw))+Math.imul($3,F2)|0,c0=Math.imul($3,Qw),g0=g0+Math.imul(p2,wt)|0,d0=(d0=d0+Math.imul(p2,Ws)|0)+Math.imul(Vw,wt)|0,c0=c0+Math.imul(Vw,Ws)|0,g0=g0+Math.imul(f2,Ru)|0,d0=(d0=d0+Math.imul(f2,wu)|0)+Math.imul(j2,Ru)|0,c0=c0+Math.imul(j2,wu)|0,g0=g0+Math.imul(cy,m0)|0,d0=(d0=d0+Math.imul(cy,k0)|0)+Math.imul(Uy,m0)|0,c0=c0+Math.imul(Uy,k0)|0,g0=g0+Math.imul(Jv,R0)|0,d0=(d0=d0+Math.imul(Jv,N0)|0)+Math.imul(Fv,R0)|0,c0=c0+Math.imul(Fv,N0)|0,g0=g0+Math.imul(Av,a1)|0,d0=(d0=d0+Math.imul(Av,x1)|0)+Math.imul(Dv,a1)|0,c0=c0+Math.imul(Dv,x1)|0,g0=g0+Math.imul(ty,W1)|0,d0=(d0=d0+Math.imul(ty,_g)|0)+Math.imul(gy,W1)|0,c0=c0+Math.imul(gy,_g)|0,g0=g0+Math.imul(wv,Tv)|0,d0=(d0=d0+Math.imul(wv,Uv)|0)+Math.imul(Sv,Tv)|0,c0=c0+Math.imul(Sv,Uv)|0;var e1=(Q0+(g0=g0+Math.imul(n1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(n1,Rv)|0)+Math.imul(V1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(V1,Rv)|0)+(d0>>>13)|0)+(e1>>>26)|0,e1&=67108863,g0=Math.imul(q2,wt),d0=(d0=Math.imul(q2,Ws))+Math.imul($3,wt)|0,c0=Math.imul($3,Ws),g0=g0+Math.imul(p2,Ru)|0,d0=(d0=d0+Math.imul(p2,wu)|0)+Math.imul(Vw,Ru)|0,c0=c0+Math.imul(Vw,wu)|0,g0=g0+Math.imul(f2,m0)|0,d0=(d0=d0+Math.imul(f2,k0)|0)+Math.imul(j2,m0)|0,c0=c0+Math.imul(j2,k0)|0,g0=g0+Math.imul(cy,R0)|0,d0=(d0=d0+Math.imul(cy,N0)|0)+Math.imul(Uy,R0)|0,c0=c0+Math.imul(Uy,N0)|0,g0=g0+Math.imul(Jv,a1)|0,d0=(d0=d0+Math.imul(Jv,x1)|0)+Math.imul(Fv,a1)|0,c0=c0+Math.imul(Fv,x1)|0,g0=g0+Math.imul(Av,W1)|0,d0=(d0=d0+Math.imul(Av,_g)|0)+Math.imul(Dv,W1)|0,c0=c0+Math.imul(Dv,_g)|0,g0=g0+Math.imul(ty,Tv)|0,d0=(d0=d0+Math.imul(ty,Uv)|0)+Math.imul(gy,Tv)|0,c0=c0+Math.imul(gy,Uv)|0;var h1=(Q0+(g0=g0+Math.imul(wv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(wv,Rv)|0)+Math.imul(Sv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Sv,Rv)|0)+(d0>>>13)|0)+(h1>>>26)|0,h1&=67108863,g0=Math.imul(q2,Ru),d0=(d0=Math.imul(q2,wu))+Math.imul($3,Ru)|0,c0=Math.imul($3,wu),g0=g0+Math.imul(p2,m0)|0,d0=(d0=d0+Math.imul(p2,k0)|0)+Math.imul(Vw,m0)|0,c0=c0+Math.imul(Vw,k0)|0,g0=g0+Math.imul(f2,R0)|0,d0=(d0=d0+Math.imul(f2,N0)|0)+Math.imul(j2,R0)|0,c0=c0+Math.imul(j2,N0)|0,g0=g0+Math.imul(cy,a1)|0,d0=(d0=d0+Math.imul(cy,x1)|0)+Math.imul(Uy,a1)|0,c0=c0+Math.imul(Uy,x1)|0,g0=g0+Math.imul(Jv,W1)|0,d0=(d0=d0+Math.imul(Jv,_g)|0)+Math.imul(Fv,W1)|0,c0=c0+Math.imul(Fv,_g)|0,g0=g0+Math.imul(Av,Tv)|0,d0=(d0=d0+Math.imul(Av,Uv)|0)+Math.imul(Dv,Tv)|0,c0=c0+Math.imul(Dv,Uv)|0;var k1=(Q0+(g0=g0+Math.imul(ty,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(ty,Rv)|0)+Math.imul(gy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(gy,Rv)|0)+(d0>>>13)|0)+(k1>>>26)|0,k1&=67108863,g0=Math.imul(q2,m0),d0=(d0=Math.imul(q2,k0))+Math.imul($3,m0)|0,c0=Math.imul($3,k0),g0=g0+Math.imul(p2,R0)|0,d0=(d0=d0+Math.imul(p2,N0)|0)+Math.imul(Vw,R0)|0,c0=c0+Math.imul(Vw,N0)|0,g0=g0+Math.imul(f2,a1)|0,d0=(d0=d0+Math.imul(f2,x1)|0)+Math.imul(j2,a1)|0,c0=c0+Math.imul(j2,x1)|0,g0=g0+Math.imul(cy,W1)|0,d0=(d0=d0+Math.imul(cy,_g)|0)+Math.imul(Uy,W1)|0,c0=c0+Math.imul(Uy,_g)|0,g0=g0+Math.imul(Jv,Tv)|0,d0=(d0=d0+Math.imul(Jv,Uv)|0)+Math.imul(Fv,Tv)|0,c0=c0+Math.imul(Fv,Uv)|0;var q1=(Q0+(g0=g0+Math.imul(Av,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Av,Rv)|0)+Math.imul(Dv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Dv,Rv)|0)+(d0>>>13)|0)+(q1>>>26)|0,q1&=67108863,g0=Math.imul(q2,R0),d0=(d0=Math.imul(q2,N0))+Math.imul($3,R0)|0,c0=Math.imul($3,N0),g0=g0+Math.imul(p2,a1)|0,d0=(d0=d0+Math.imul(p2,x1)|0)+Math.imul(Vw,a1)|0,c0=c0+Math.imul(Vw,x1)|0,g0=g0+Math.imul(f2,W1)|0,d0=(d0=d0+Math.imul(f2,_g)|0)+Math.imul(j2,W1)|0,c0=c0+Math.imul(j2,_g)|0,g0=g0+Math.imul(cy,Tv)|0,d0=(d0=d0+Math.imul(cy,Uv)|0)+Math.imul(Uy,Tv)|0,c0=c0+Math.imul(Uy,Uv)|0;var L1=(Q0+(g0=g0+Math.imul(Jv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Jv,Rv)|0)+Math.imul(Fv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Fv,Rv)|0)+(d0>>>13)|0)+(L1>>>26)|0,L1&=67108863,g0=Math.imul(q2,a1),d0=(d0=Math.imul(q2,x1))+Math.imul($3,a1)|0,c0=Math.imul($3,x1),g0=g0+Math.imul(p2,W1)|0,d0=(d0=d0+Math.imul(p2,_g)|0)+Math.imul(Vw,W1)|0,c0=c0+Math.imul(Vw,_g)|0,g0=g0+Math.imul(f2,Tv)|0,d0=(d0=d0+Math.imul(f2,Uv)|0)+Math.imul(j2,Tv)|0,c0=c0+Math.imul(j2,Uv)|0;var A1=(Q0+(g0=g0+Math.imul(cy,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(cy,Rv)|0)+Math.imul(Uy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Uy,Rv)|0)+(d0>>>13)|0)+(A1>>>26)|0,A1&=67108863,g0=Math.imul(q2,W1),d0=(d0=Math.imul(q2,_g))+Math.imul($3,W1)|0,c0=Math.imul($3,_g),g0=g0+Math.imul(p2,Tv)|0,d0=(d0=d0+Math.imul(p2,Uv)|0)+Math.imul(Vw,Tv)|0,c0=c0+Math.imul(Vw,Uv)|0;var M1=(Q0+(g0=g0+Math.imul(f2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(f2,Rv)|0)+Math.imul(j2,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(j2,Rv)|0)+(d0>>>13)|0)+(M1>>>26)|0,M1&=67108863,g0=Math.imul(q2,Tv),d0=(d0=Math.imul(q2,Uv))+Math.imul($3,Tv)|0,c0=Math.imul($3,Uv);var X1=(Q0+(g0=g0+Math.imul(p2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(p2,Rv)|0)+Math.imul(Vw,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Vw,Rv)|0)+(d0>>>13)|0)+(X1>>>26)|0,X1&=67108863;var dv=(Q0+(g0=Math.imul(q2,ny))|0)+((8191&(d0=(d0=Math.imul(q2,Rv))+Math.imul($3,ny)|0))<<13)|0;return Q0=((c0=Math.imul($3,Rv))+(d0>>>13)|0)+(dv>>>26)|0,dv&=67108863,z0[0]=Gv,z0[1]=C0,z0[2]=J0,z0[3]=f0,z0[4]=v0,z0[5]=h0,z0[6]=u0,z0[7]=o0,z0[8]=x0,z0[9]=U0,z0[10]=e1,z0[11]=h1,z0[12]=k1,z0[13]=q1,z0[14]=L1,z0[15]=A1,z0[16]=M1,z0[17]=X1,z0[18]=dv,Q0!==0&&(z0[19]=Q0,s0.length++),s0};function ov(T0,X0,s0){return new bv().mulp(T0,X0,s0)}function bv(T0,X0){this.x=T0,this.y=X0}Math.imul||(F1=v1),Su.prototype.mulTo=function(T0,X0){var s0,g0=this.length+T0.length;return s0=this.length===10&&T0.length===10?F1(this,T0,X0):g0<63?v1(this,T0,X0):g0<1024?function(d0,c0,a0){a0.negative=c0.negative^d0.negative,a0.length=d0.length+c0.length;for(var S0=0,z0=0,Q0=0;Q0>>26)|0)>>>26,p1&=67108863}a0.words[Q0]=T1,S0=p1,p1=z0}return S0!==0?a0.words[Q0]=S0:a0.length--,a0.strip()}(this,T0,X0):ov(this,T0,X0),s0},bv.prototype.makeRBT=function(T0){for(var X0=new Array(T0),s0=Su.prototype._countBits(T0)-1,g0=0;g0>=1;return g0},bv.prototype.permute=function(T0,X0,s0,g0,d0,c0){for(var a0=0;a0>>=1)d0++;return 1<>>=13,s0[2*c0+1]=8191&d0,d0>>>=13;for(c0=2*X0;c0>=26,X0+=g0/67108864|0,X0+=d0>>>26,this.words[s0]=67108863&d0}return X0!==0&&(this.words[s0]=X0,this.length++),this},Su.prototype.muln=function(T0){return this.clone().imuln(T0)},Su.prototype.sqr=function(){return this.mul(this)},Su.prototype.isqr=function(){return this.imul(this.clone())},Su.prototype.pow=function(T0){var X0=function(c0){for(var a0=new Array(c0.bitLength()),S0=0;S0>>Q0}return a0}(T0);if(X0.length===0)return new Su(1);for(var s0=this,g0=0;g0=0);var X0,s0=T0%26,g0=(T0-s0)/26,d0=67108863>>>26-s0<<26-s0;if(s0!==0){var c0=0;for(X0=0;X0>>26-s0}c0&&(this.words[X0]=c0,this.length++)}if(g0!==0){for(X0=this.length-1;X0>=0;X0--)this.words[X0+g0]=this.words[X0];for(X0=0;X0=0),g0=X0?(X0-X0%26)/26:0;var d0=T0%26,c0=Math.min((T0-d0)/26,this.length),a0=67108863^67108863>>>d0<c0)for(this.length-=c0,z0=0;z0=0&&(Q0!==0||z0>=g0);z0--){var p1=0|this.words[z0];this.words[z0]=Q0<<26-d0|p1>>>d0,Q0=p1&a0}return S0&&Q0!==0&&(S0.words[S0.length++]=Q0),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},Su.prototype.ishrn=function(T0,X0,s0){return mu(this.negative===0),this.iushrn(T0,X0,s0)},Su.prototype.shln=function(T0){return this.clone().ishln(T0)},Su.prototype.ushln=function(T0){return this.clone().iushln(T0)},Su.prototype.shrn=function(T0){return this.clone().ishrn(T0)},Su.prototype.ushrn=function(T0){return this.clone().iushrn(T0)},Su.prototype.testn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=T0%26,s0=(T0-X0)/26,g0=1<=0);var X0=T0%26,s0=(T0-X0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=s0)return this;if(X0!==0&&s0++,this.length=Math.min(s0,this.length),X0!==0){var g0=67108863^67108863>>>X0<=67108864;X0++)this.words[X0]-=67108864,X0===this.length-1?this.words[X0+1]=1:this.words[X0+1]++;return this.length=Math.max(this.length,X0+1),this},Su.prototype.isubn=function(T0){if(mu(typeof T0=="number"),mu(T0<67108864),T0<0)return this.iaddn(-T0);if(this.negative!==0)return this.negative=0,this.iaddn(T0),this.negative=1,this;if(this.words[0]-=T0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var X0=0;X0>26)-(S0/67108864|0),this.words[g0+s0]=67108863&d0}for(;g0>26,this.words[g0+s0]=67108863&d0;if(a0===0)return this.strip();for(mu(a0===-1),a0=0,g0=0;g0>26,this.words[g0]=67108863&d0;return this.negative=1,this.strip()},Su.prototype._wordDiv=function(T0,X0){var s0=(this.length,T0.length),g0=this.clone(),d0=T0,c0=0|d0.words[d0.length-1];(s0=26-this._countBits(c0))!=0&&(d0=d0.ushln(s0),g0.iushln(s0),c0=0|d0.words[d0.length-1]);var a0,S0=g0.length-d0.length;if(X0!=="mod"){(a0=new Su(null)).length=S0+1,a0.words=new Array(a0.length);for(var z0=0;z0=0;p1--){var T1=67108864*(0|g0.words[d0.length+p1])+(0|g0.words[d0.length+p1-1]);for(T1=Math.min(T1/c0|0,67108863),g0._ishlnsubmul(d0,T1,p1);g0.negative!==0;)T1--,g0.negative=0,g0._ishlnsubmul(d0,1,p1),g0.isZero()||(g0.negative^=1);a0&&(a0.words[p1]=T1)}return a0&&a0.strip(),g0.strip(),X0!=="div"&&s0!==0&&g0.iushrn(s0),{div:a0||null,mod:g0}},Su.prototype.divmod=function(T0,X0,s0){return mu(!T0.isZero()),this.isZero()?{div:new Su(0),mod:new Su(0)}:this.negative!==0&&T0.negative===0?(c0=this.neg().divmod(T0,X0),X0!=="mod"&&(g0=c0.div.neg()),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.iadd(T0)),{div:g0,mod:d0}):this.negative===0&&T0.negative!==0?(c0=this.divmod(T0.neg(),X0),X0!=="mod"&&(g0=c0.div.neg()),{div:g0,mod:c0.mod}):this.negative&T0.negative?(c0=this.neg().divmod(T0.neg(),X0),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.isub(T0)),{div:c0.div,mod:d0}):T0.length>this.length||this.cmp(T0)<0?{div:new Su(0),mod:this}:T0.length===1?X0==="div"?{div:this.divn(T0.words[0]),mod:null}:X0==="mod"?{div:null,mod:new Su(this.modn(T0.words[0]))}:{div:this.divn(T0.words[0]),mod:new Su(this.modn(T0.words[0]))}:this._wordDiv(T0,X0);var g0,d0,c0},Su.prototype.div=function(T0){return this.divmod(T0,"div",!1).div},Su.prototype.mod=function(T0){return this.divmod(T0,"mod",!1).mod},Su.prototype.umod=function(T0){return this.divmod(T0,"mod",!0).mod},Su.prototype.divRound=function(T0){var X0=this.divmod(T0);if(X0.mod.isZero())return X0.div;var s0=X0.div.negative!==0?X0.mod.isub(T0):X0.mod,g0=T0.ushrn(1),d0=T0.andln(1),c0=s0.cmp(g0);return c0<0||d0===1&&c0===0?X0.div:X0.div.negative!==0?X0.div.isubn(1):X0.div.iaddn(1)},Su.prototype.modn=function(T0){mu(T0<=67108863);for(var X0=(1<<26)%T0,s0=0,g0=this.length-1;g0>=0;g0--)s0=(X0*s0+(0|this.words[g0]))%T0;return s0},Su.prototype.idivn=function(T0){mu(T0<=67108863);for(var X0=0,s0=this.length-1;s0>=0;s0--){var g0=(0|this.words[s0])+67108864*X0;this.words[s0]=g0/T0|0,X0=g0%T0}return this.strip()},Su.prototype.divn=function(T0){return this.clone().idivn(T0)},Su.prototype.egcd=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0=new Su(1),d0=new Su(0),c0=new Su(0),a0=new Su(1),S0=0;X0.isEven()&&s0.isEven();)X0.iushrn(1),s0.iushrn(1),++S0;for(var z0=s0.clone(),Q0=X0.clone();!X0.isZero();){for(var p1=0,T1=1;!(X0.words[0]&T1)&&p1<26;++p1,T1<<=1);if(p1>0)for(X0.iushrn(p1);p1-- >0;)(g0.isOdd()||d0.isOdd())&&(g0.iadd(z0),d0.isub(Q0)),g0.iushrn(1),d0.iushrn(1);for(var U1=0,S1=1;!(s0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(s0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(z0),a0.isub(Q0)),c0.iushrn(1),a0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),g0.isub(c0),d0.isub(a0)):(s0.isub(X0),c0.isub(g0),a0.isub(d0))}return{a:c0,b:a0,gcd:s0.iushln(S0)}},Su.prototype._invmp=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0,d0=new Su(1),c0=new Su(0),a0=s0.clone();X0.cmpn(1)>0&&s0.cmpn(1)>0;){for(var S0=0,z0=1;!(X0.words[0]&z0)&&S0<26;++S0,z0<<=1);if(S0>0)for(X0.iushrn(S0);S0-- >0;)d0.isOdd()&&d0.iadd(a0),d0.iushrn(1);for(var Q0=0,p1=1;!(s0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(s0.iushrn(Q0);Q0-- >0;)c0.isOdd()&&c0.iadd(a0),c0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),d0.isub(c0)):(s0.isub(X0),c0.isub(d0))}return(g0=X0.cmpn(1)===0?d0:c0).cmpn(0)<0&&g0.iadd(T0),g0},Su.prototype.gcd=function(T0){if(this.isZero())return T0.abs();if(T0.isZero())return this.abs();var X0=this.clone(),s0=T0.clone();X0.negative=0,s0.negative=0;for(var g0=0;X0.isEven()&&s0.isEven();g0++)X0.iushrn(1),s0.iushrn(1);for(;;){for(;X0.isEven();)X0.iushrn(1);for(;s0.isEven();)s0.iushrn(1);var d0=X0.cmp(s0);if(d0<0){var c0=X0;X0=s0,s0=c0}else if(d0===0||s0.cmpn(1)===0)break;X0.isub(s0)}return s0.iushln(g0)},Su.prototype.invm=function(T0){return this.egcd(T0).a.umod(T0)},Su.prototype.isEven=function(){return(1&this.words[0])==0},Su.prototype.isOdd=function(){return(1&this.words[0])==1},Su.prototype.andln=function(T0){return this.words[0]&T0},Su.prototype.bincn=function(T0){mu(typeof T0=="number");var X0=T0%26,s0=(T0-X0)/26,g0=1<>>26,a0&=67108863,this.words[c0]=a0}return d0!==0&&(this.words[c0]=d0,this.length++),this},Su.prototype.isZero=function(){return this.length===1&&this.words[0]===0},Su.prototype.cmpn=function(T0){var X0,s0=T0<0;if(this.negative!==0&&!s0)return-1;if(this.negative===0&&s0)return 1;if(this.strip(),this.length>1)X0=1;else{s0&&(T0=-T0),mu(T0<=67108863,"Number is too big");var g0=0|this.words[0];X0=g0===T0?0:g0T0.length)return 1;if(this.length=0;s0--){var g0=0|this.words[s0],d0=0|T0.words[s0];if(g0!==d0){g0d0&&(X0=1);break}}return X0},Su.prototype.gtn=function(T0){return this.cmpn(T0)===1},Su.prototype.gt=function(T0){return this.cmp(T0)===1},Su.prototype.gten=function(T0){return this.cmpn(T0)>=0},Su.prototype.gte=function(T0){return this.cmp(T0)>=0},Su.prototype.ltn=function(T0){return this.cmpn(T0)===-1},Su.prototype.lt=function(T0){return this.cmp(T0)===-1},Su.prototype.lten=function(T0){return this.cmpn(T0)<=0},Su.prototype.lte=function(T0){return this.cmp(T0)<=0},Su.prototype.eqn=function(T0){return this.cmpn(T0)===0},Su.prototype.eq=function(T0){return this.cmp(T0)===0},Su.red=function(T0){return new qv(T0)},Su.prototype.toRed=function(T0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),T0.convertTo(this)._forceRed(T0)},Su.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},Su.prototype._forceRed=function(T0){return this.red=T0,this},Su.prototype.forceRed=function(T0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(T0)},Su.prototype.redAdd=function(T0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,T0)},Su.prototype.redIAdd=function(T0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,T0)},Su.prototype.redSub=function(T0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,T0)},Su.prototype.redISub=function(T0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,T0)},Su.prototype.redShl=function(T0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,T0)},Su.prototype.redMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.mul(this,T0)},Su.prototype.redIMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.imul(this,T0)},Su.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},Su.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},Su.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},Su.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},Su.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},Su.prototype.redPow=function(T0){return mu(this.red&&!T0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,T0)};var gv={k256:null,p224:null,p192:null,p25519:null};function xv(T0,X0){this.name=T0,this.p=new Su(X0,16),this.n=this.p.bitLength(),this.k=new Su(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function hy(){xv.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function oy(){xv.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function fy(){xv.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Fy(){xv.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function qv(T0){if(typeof T0=="string"){var X0=Su._prime(T0);this.m=X0.p,this.prime=X0}else mu(T0.gtn(1),"modulus must be greater than 1"),this.m=T0,this.prime=null}function Qv(T0){qv.call(this,T0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new Su(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}xv.prototype._tmp=function(){var T0=new Su(null);return T0.words=new Array(Math.ceil(this.n/13)),T0},xv.prototype.ireduce=function(T0){var X0,s0=T0;do this.split(s0,this.tmp),X0=(s0=(s0=this.imulK(s0)).iadd(this.tmp)).bitLength();while(X0>this.n);var g0=X00?s0.isub(this.p):s0.strip!==void 0?s0.strip():s0._strip(),s0},xv.prototype.split=function(T0,X0){T0.iushrn(this.n,0,X0)},xv.prototype.imulK=function(T0){return T0.imul(this.k)},Mu(hy,xv),hy.prototype.split=function(T0,X0){for(var s0=4194303,g0=Math.min(T0.length,9),d0=0;d0>>22,c0=a0}c0>>>=22,T0.words[d0-10]=c0,c0===0&&T0.length>10?T0.length-=10:T0.length-=9},hy.prototype.imulK=function(T0){T0.words[T0.length]=0,T0.words[T0.length+1]=0,T0.length+=2;for(var X0=0,s0=0;s0>>=26,T0.words[s0]=d0,X0=g0}return X0!==0&&(T0.words[T0.length++]=X0),T0},Su._prime=function(T0){if(gv[T0])return gv[T0];var X0;if(T0==="k256")X0=new hy;else if(T0==="p224")X0=new oy;else if(T0==="p192")X0=new fy;else{if(T0!=="p25519")throw new Error("Unknown prime "+T0);X0=new Fy}return gv[T0]=X0,X0},qv.prototype._verify1=function(T0){mu(T0.negative===0,"red works only with positives"),mu(T0.red,"red works only with red numbers")},qv.prototype._verify2=function(T0,X0){mu((T0.negative|X0.negative)==0,"red works only with positives"),mu(T0.red&&T0.red===X0.red,"red works only with red numbers")},qv.prototype.imod=function(T0){return this.prime?this.prime.ireduce(T0)._forceRed(this):T0.umod(this.m)._forceRed(this)},qv.prototype.neg=function(T0){return T0.isZero()?T0.clone():this.m.sub(T0)._forceRed(this)},qv.prototype.add=function(T0,X0){this._verify2(T0,X0);var s0=T0.add(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0._forceRed(this)},qv.prototype.iadd=function(T0,X0){this._verify2(T0,X0);var s0=T0.iadd(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0},qv.prototype.sub=function(T0,X0){this._verify2(T0,X0);var s0=T0.sub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0._forceRed(this)},qv.prototype.isub=function(T0,X0){this._verify2(T0,X0);var s0=T0.isub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0},qv.prototype.shl=function(T0,X0){return this._verify1(T0),this.imod(T0.ushln(X0))},qv.prototype.imul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.imul(X0))},qv.prototype.mul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.mul(X0))},qv.prototype.isqr=function(T0){return this.imul(T0,T0.clone())},qv.prototype.sqr=function(T0){return this.mul(T0,T0)},qv.prototype.sqrt=function(T0){if(T0.isZero())return T0.clone();var X0=this.m.andln(3);if(mu(X0%2==1),X0===3){var s0=this.m.add(new Su(1)).iushrn(2);return this.pow(T0,s0)}for(var g0=this.m.subn(1),d0=0;!g0.isZero()&&g0.andln(1)===0;)d0++,g0.iushrn(1);mu(!g0.isZero());var c0=new Su(1).toRed(this),a0=c0.redNeg(),S0=this.m.subn(1).iushrn(1),z0=this.m.bitLength();for(z0=new Su(2*z0*z0).toRed(this);this.pow(z0,S0).cmp(a0)!==0;)z0.redIAdd(a0);for(var Q0=this.pow(z0,g0),p1=this.pow(T0,g0.addn(1).iushrn(1)),T1=this.pow(T0,g0),U1=d0;T1.cmp(c0)!==0;){for(var S1=T1,n1=0;S1.cmp(c0)!==0;n1++)S1=S1.redSqr();mu(n1=0;g0--){for(var z0=X0.words[g0],Q0=S0-1;Q0>=0;Q0--){var p1=z0>>Q0&1;d0!==s0[0]&&(d0=this.sqr(d0)),p1!==0||c0!==0?(c0<<=1,c0|=p1,(++a0==4||g0===0&&Q0===0)&&(d0=this.mul(d0,s0[c0]),a0=0,c0=0)):a0=0}S0=26}return d0},qv.prototype.convertTo=function(T0){var X0=T0.umod(this.m);return X0===T0?X0.clone():X0},qv.prototype.convertFrom=function(T0){var X0=T0.clone();return X0.red=null,X0},Su.mont=function(T0){return new Qv(T0)},Mu(Qv,qv),Qv.prototype.convertTo=function(T0){return this.imod(T0.ushln(this.shift))},Qv.prototype.convertFrom=function(T0){var X0=this.imod(T0.mul(this.rinv));return X0.red=null,X0},Qv.prototype.imul=function(T0,X0){if(T0.isZero()||X0.isZero())return T0.words[0]=0,T0.length=1,T0;var s0=T0.imul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.mul=function(T0,X0){if(T0.isZero()||X0.isZero())return new Su(0)._forceRed(this);var s0=T0.mul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.invm=function(T0){return this.imod(T0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})(Ate);var _te,UY,fB,zY,Ste,US=Ate.exports,R4={exports:{}};function M4(){if(_te)return R4.exports;var yt;function ir(mu){this.rand=mu}if(_te=1,R4.exports=function(mu){return yt||(yt=new ir(null)),yt.generate(mu)},R4.exports.Rand=ir,ir.prototype.generate=function(mu){return this._rand(mu)},ir.prototype._rand=function(mu){if(this.rand.getBytes)return this.rand.getBytes(mu);for(var Mu=new Uint8Array(mu),Su=0;Su=0);return l0},_c.prototype._randrange=function(mu,Mu){var Su=Mu.sub(mu);return mu.add(this._randbelow(Su))},_c.prototype.test=function(mu,Mu,Su){var l0=mu.bitLength(),E0=yt.mont(mu),j0=new yt(1).toRed(E0);Mu||(Mu=Math.max(1,l0/48|0));for(var M0=mu.subn(1),B0=0;!M0.testn(B0);B0++);for(var V0=mu.shrn(B0),y1=M0.toRed(E0);Mu>0;Mu--){var v1=this._randrange(new yt(2),M0);Su&&Su(v1);var F1=v1.toRed(E0).redPow(V0);if(F1.cmp(j0)!==0&&F1.cmp(y1)!==0){for(var ov=1;ov0;Mu--){var y1=this._randrange(new yt(2),j0),v1=mu.gcd(y1);if(v1.cmpn(1)!==0)return v1;var F1=y1.toRed(l0).redPow(B0);if(F1.cmp(E0)!==0&&F1.cmp(V0)!==0){for(var ov=1;ovov;)gv.ishrn(1);if(gv.isEven()&&gv.iadd(Mu),gv.testn(1)||gv.iadd(Su),bv.cmp(Su)){if(!bv.cmp(l0))for(;gv.mod(E0).cmp(j0);)gv.iadd(B0)}else for(;gv.mod(_c).cmp(M0);)gv.iadd(B0);if(y1(xv=gv.shrn(1))&&y1(gv)&&v1(xv)&&v1(gv)&&mu.test(xv)&&mu.test(gv))return gv}}return zY}var Jz,HY,kte,cle={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}},EF={exports:{}},Cte={exports:{}};(function(yt){(function(ir,_c){function mu(s0,g0){if(!s0)throw new Error(g0||"Assertion failed")}function Mu(s0,g0){s0.super_=g0;var d0=function(){};d0.prototype=g0.prototype,s0.prototype=new d0,s0.prototype.constructor=s0}function Su(s0,g0,d0){if(Su.isBN(s0))return s0;this.negative=0,this.words=null,this.length=0,this.red=null,s0!==null&&(g0!=="le"&&g0!=="be"||(d0=g0,g0=10),this._init(s0||0,g0||10,d0||"be"))}var l0;typeof ir=="object"?ir.exports=Su:_c.BN=Su,Su.BN=Su,Su.wordSize=26;try{l0=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:zw.Buffer}catch{}function E0(s0,g0){var d0=s0.charCodeAt(g0);return d0>=48&&d0<=57?d0-48:d0>=65&&d0<=70?d0-55:d0>=97&&d0<=102?d0-87:void mu(!1,"Invalid character in "+s0)}function j0(s0,g0,d0){var c0=E0(s0,d0);return d0-1>=g0&&(c0|=E0(s0,d0-1)<<4),c0}function M0(s0,g0,d0,c0){for(var a0=0,S0=0,z0=Math.min(s0.length,d0),Q0=g0;Q0=49?p1-49+10:p1>=17?p1-17+10:p1,mu(p1>=0&&S00?s0:g0},Su.min=function(s0,g0){return s0.cmp(g0)<0?s0:g0},Su.prototype._init=function(s0,g0,d0){if(typeof s0=="number")return this._initNumber(s0,g0,d0);if(typeof s0=="object")return this._initArray(s0,g0,d0);g0==="hex"&&(g0=16),mu(g0===(0|g0)&&g0>=2&&g0<=36);var c0=0;(s0=s0.toString().replace(/\s+/g,""))[0]==="-"&&(c0++,this.negative=1),c0=0;c0-=3)S0=s0[c0]|s0[c0-1]<<8|s0[c0-2]<<16,this.words[a0]|=S0<>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);else if(d0==="le")for(c0=0,a0=0;c0>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);return this._strip()},Su.prototype._parseHex=function(s0,g0,d0){this.length=Math.ceil((s0.length-g0)/6),this.words=new Array(this.length);for(var c0=0;c0=g0;c0-=2)a0=j0(s0,g0,c0)<=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;else for(c0=(s0.length-g0)%2==0?g0+1:g0;c0=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;this._strip()},Su.prototype._parseBase=function(s0,g0,d0){this.words=[0],this.length=1;for(var c0=0,a0=1;a0<=67108863;a0*=g0)c0++;c0--,a0=a0/g0|0;for(var S0=s0.length-d0,z0=S0%c0,Q0=Math.min(S0,S0-z0)+d0,p1=0,T1=d0;T11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},Su.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{Su.prototype[Symbol.for("nodejs.util.inspect.custom")]=V0}catch{Su.prototype.inspect=V0}else Su.prototype.inspect=V0;function V0(){return(this.red?""}var y1=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v1=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],F1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function ov(s0,g0,d0){d0.negative=g0.negative^s0.negative;var c0=s0.length+g0.length|0;d0.length=c0,c0=c0-1|0;var a0=0|s0.words[0],S0=0|g0.words[0],z0=a0*S0,Q0=67108863&z0,p1=z0/67108864|0;d0.words[0]=Q0;for(var T1=1;T1>>26,S1=67108863&p1,n1=Math.min(T1,g0.length-1),V1=Math.max(0,T1-s0.length+1);V1<=n1;V1++){var J1=T1-V1|0;U1+=(z0=(a0=0|s0.words[J1])*(S0=0|g0.words[V1])+S1)/67108864|0,S1=67108863&z0}d0.words[T1]=0|S1,p1=0|U1}return p1!==0?d0.words[T1]=0|p1:d0.length--,d0._strip()}Su.prototype.toString=function(s0,g0){var d0;if(g0=0|g0||1,(s0=s0||10)===16||s0==="hex"){d0="";for(var c0=0,a0=0,S0=0;S0>>24-c0&16777215,(c0+=2)>=26&&(c0-=26,S0--),d0=a0!==0||S0!==this.length-1?y1[6-Q0.length]+Q0+d0:Q0+d0}for(a0!==0&&(d0=a0.toString(16)+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}if(s0===(0|s0)&&s0>=2&&s0<=36){var p1=v1[s0],T1=F1[s0];d0="";var U1=this.clone();for(U1.negative=0;!U1.isZero();){var S1=U1.modrn(T1).toString(s0);d0=(U1=U1.idivn(T1)).isZero()?S1+d0:y1[p1-S1.length]+S1+d0}for(this.isZero()&&(d0="0"+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}mu(!1,"Base should be between 2 and 36")},Su.prototype.toNumber=function(){var s0=this.words[0];return this.length===2?s0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?s0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-s0:s0},Su.prototype.toJSON=function(){return this.toString(16,2)},l0&&(Su.prototype.toBuffer=function(s0,g0){return this.toArrayLike(l0,s0,g0)}),Su.prototype.toArray=function(s0,g0){return this.toArrayLike(Array,s0,g0)},Su.prototype.toArrayLike=function(s0,g0,d0){this._strip();var c0=this.byteLength(),a0=d0||Math.max(1,c0);mu(c0<=a0,"byte array longer than desired length"),mu(a0>0,"Requested array length <= 0");var S0=function(z0,Q0){return z0.allocUnsafe?z0.allocUnsafe(Q0):new z0(Q0)}(s0,a0);return this["_toArrayLike"+(g0==="le"?"LE":"BE")](S0,c0),S0},Su.prototype._toArrayLikeLE=function(s0,g0){for(var d0=0,c0=0,a0=0,S0=0;a0>8&255),d0>16&255),S0===6?(d0>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0=0&&(s0[d0--]=z0>>8&255),d0>=0&&(s0[d0--]=z0>>16&255),S0===6?(d0>=0&&(s0[d0--]=z0>>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0>=0)for(s0[d0--]=c0;d0>=0;)s0[d0--]=0},Math.clz32?Su.prototype._countBits=function(s0){return 32-Math.clz32(s0)}:Su.prototype._countBits=function(s0){var g0=s0,d0=0;return g0>=4096&&(d0+=13,g0>>>=13),g0>=64&&(d0+=7,g0>>>=7),g0>=8&&(d0+=4,g0>>>=4),g0>=2&&(d0+=2,g0>>>=2),d0+g0},Su.prototype._zeroBits=function(s0){if(s0===0)return 26;var g0=s0,d0=0;return!(8191&g0)&&(d0+=13,g0>>>=13),!(127&g0)&&(d0+=7,g0>>>=7),!(15&g0)&&(d0+=4,g0>>>=4),!(3&g0)&&(d0+=2,g0>>>=2),!(1&g0)&&d0++,d0},Su.prototype.bitLength=function(){var s0=this.words[this.length-1],g0=this._countBits(s0);return 26*(this.length-1)+g0},Su.prototype.zeroBits=function(){if(this.isZero())return 0;for(var s0=0,g0=0;g0s0.length?this.clone().ior(s0):s0.clone().ior(this)},Su.prototype.uor=function(s0){return this.length>s0.length?this.clone().iuor(s0):s0.clone().iuor(this)},Su.prototype.iuand=function(s0){var g0;g0=this.length>s0.length?s0:this;for(var d0=0;d0s0.length?this.clone().iand(s0):s0.clone().iand(this)},Su.prototype.uand=function(s0){return this.length>s0.length?this.clone().iuand(s0):s0.clone().iuand(this)},Su.prototype.iuxor=function(s0){var g0,d0;this.length>s0.length?(g0=this,d0=s0):(g0=s0,d0=this);for(var c0=0;c0s0.length?this.clone().ixor(s0):s0.clone().ixor(this)},Su.prototype.uxor=function(s0){return this.length>s0.length?this.clone().iuxor(s0):s0.clone().iuxor(this)},Su.prototype.inotn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=0|Math.ceil(s0/26),d0=s0%26;this._expand(g0),d0>0&&g0--;for(var c0=0;c00&&(this.words[c0]=~this.words[c0]&67108863>>26-d0),this._strip()},Su.prototype.notn=function(s0){return this.clone().inotn(s0)},Su.prototype.setn=function(s0,g0){mu(typeof s0=="number"&&s0>=0);var d0=s0/26|0,c0=s0%26;return this._expand(d0+1),this.words[d0]=g0?this.words[d0]|1<s0.length?(d0=this,c0=s0):(d0=s0,c0=this);for(var a0=0,S0=0;S0>>26;for(;a0!==0&&S0>>26;if(this.length=d0.length,a0!==0)this.words[this.length]=a0,this.length++;else if(d0!==this)for(;S0s0.length?this.clone().iadd(s0):s0.clone().iadd(this)},Su.prototype.isub=function(s0){if(s0.negative!==0){s0.negative=0;var g0=this.iadd(s0);return s0.negative=1,g0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(s0),this.negative=1,this._normSign();var d0,c0,a0=this.cmp(s0);if(a0===0)return this.negative=0,this.length=1,this.words[0]=0,this;a0>0?(d0=this,c0=s0):(d0=s0,c0=this);for(var S0=0,z0=0;z0>26,this.words[z0]=67108863&g0;for(;S0!==0&&z0>26,this.words[z0]=67108863&g0;if(S0===0&&z0>>13,V1=0|z0[1],J1=8191&V1,wv=V1>>>13,Sv=0|z0[2],Hv=8191&Sv,ty=Sv>>>13,gy=0|z0[3],yv=8191&gy,Av=gy>>>13,Dv=0|z0[4],ry=8191&Dv,Jv=Dv>>>13,Fv=0|z0[5],iy=8191&Fv,cy=Fv>>>13,Uy=0|z0[6],r2=8191&Uy,f2=Uy>>>13,j2=0|z0[7],mw=8191&j2,p2=j2>>>13,Vw=0|z0[8],Ew=8191&Vw,q2=Vw>>>13,$3=0|z0[9],Rw=8191&$3,K2=$3>>>13,Xw=0|Q0[0],a3=8191&Xw,F2=Xw>>>13,Qw=0|Q0[1],vt=8191&Qw,wt=Qw>>>13,Ws=0|Q0[2],pu=8191&Ws,Ru=Ws>>>13,wu=0|Q0[3],t0=8191&wu,m0=wu>>>13,k0=0|Q0[4],_0=8191&k0,R0=k0>>>13,N0=0|Q0[5],l1=8191&N0,a1=N0>>>13,x1=0|Q0[6],K1=8191&x1,W1=x1>>>13,_g=0|Q0[7],uv=8191&_g,Tv=_g>>>13,Uv=0|Q0[8],Wv=8191&Uv,ny=Uv>>>13,Rv=0|Q0[9],Gv=8191&Rv,C0=Rv>>>13;d0.negative=s0.negative^g0.negative,d0.length=19;var J0=(T1+(c0=Math.imul(S1,a3))|0)+((8191&(a0=(a0=Math.imul(S1,F2))+Math.imul(n1,a3)|0))<<13)|0;T1=((S0=Math.imul(n1,F2))+(a0>>>13)|0)+(J0>>>26)|0,J0&=67108863,c0=Math.imul(J1,a3),a0=(a0=Math.imul(J1,F2))+Math.imul(wv,a3)|0,S0=Math.imul(wv,F2);var f0=(T1+(c0=c0+Math.imul(S1,vt)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,wt)|0)+Math.imul(n1,vt)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,wt)|0)+(a0>>>13)|0)+(f0>>>26)|0,f0&=67108863,c0=Math.imul(Hv,a3),a0=(a0=Math.imul(Hv,F2))+Math.imul(ty,a3)|0,S0=Math.imul(ty,F2),c0=c0+Math.imul(J1,vt)|0,a0=(a0=a0+Math.imul(J1,wt)|0)+Math.imul(wv,vt)|0,S0=S0+Math.imul(wv,wt)|0;var v0=(T1+(c0=c0+Math.imul(S1,pu)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Ru)|0)+Math.imul(n1,pu)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Ru)|0)+(a0>>>13)|0)+(v0>>>26)|0,v0&=67108863,c0=Math.imul(yv,a3),a0=(a0=Math.imul(yv,F2))+Math.imul(Av,a3)|0,S0=Math.imul(Av,F2),c0=c0+Math.imul(Hv,vt)|0,a0=(a0=a0+Math.imul(Hv,wt)|0)+Math.imul(ty,vt)|0,S0=S0+Math.imul(ty,wt)|0,c0=c0+Math.imul(J1,pu)|0,a0=(a0=a0+Math.imul(J1,Ru)|0)+Math.imul(wv,pu)|0,S0=S0+Math.imul(wv,Ru)|0;var h0=(T1+(c0=c0+Math.imul(S1,t0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,m0)|0)+Math.imul(n1,t0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,m0)|0)+(a0>>>13)|0)+(h0>>>26)|0,h0&=67108863,c0=Math.imul(ry,a3),a0=(a0=Math.imul(ry,F2))+Math.imul(Jv,a3)|0,S0=Math.imul(Jv,F2),c0=c0+Math.imul(yv,vt)|0,a0=(a0=a0+Math.imul(yv,wt)|0)+Math.imul(Av,vt)|0,S0=S0+Math.imul(Av,wt)|0,c0=c0+Math.imul(Hv,pu)|0,a0=(a0=a0+Math.imul(Hv,Ru)|0)+Math.imul(ty,pu)|0,S0=S0+Math.imul(ty,Ru)|0,c0=c0+Math.imul(J1,t0)|0,a0=(a0=a0+Math.imul(J1,m0)|0)+Math.imul(wv,t0)|0,S0=S0+Math.imul(wv,m0)|0;var u0=(T1+(c0=c0+Math.imul(S1,_0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,R0)|0)+Math.imul(n1,_0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,R0)|0)+(a0>>>13)|0)+(u0>>>26)|0,u0&=67108863,c0=Math.imul(iy,a3),a0=(a0=Math.imul(iy,F2))+Math.imul(cy,a3)|0,S0=Math.imul(cy,F2),c0=c0+Math.imul(ry,vt)|0,a0=(a0=a0+Math.imul(ry,wt)|0)+Math.imul(Jv,vt)|0,S0=S0+Math.imul(Jv,wt)|0,c0=c0+Math.imul(yv,pu)|0,a0=(a0=a0+Math.imul(yv,Ru)|0)+Math.imul(Av,pu)|0,S0=S0+Math.imul(Av,Ru)|0,c0=c0+Math.imul(Hv,t0)|0,a0=(a0=a0+Math.imul(Hv,m0)|0)+Math.imul(ty,t0)|0,S0=S0+Math.imul(ty,m0)|0,c0=c0+Math.imul(J1,_0)|0,a0=(a0=a0+Math.imul(J1,R0)|0)+Math.imul(wv,_0)|0,S0=S0+Math.imul(wv,R0)|0;var o0=(T1+(c0=c0+Math.imul(S1,l1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,a1)|0)+Math.imul(n1,l1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,a1)|0)+(a0>>>13)|0)+(o0>>>26)|0,o0&=67108863,c0=Math.imul(r2,a3),a0=(a0=Math.imul(r2,F2))+Math.imul(f2,a3)|0,S0=Math.imul(f2,F2),c0=c0+Math.imul(iy,vt)|0,a0=(a0=a0+Math.imul(iy,wt)|0)+Math.imul(cy,vt)|0,S0=S0+Math.imul(cy,wt)|0,c0=c0+Math.imul(ry,pu)|0,a0=(a0=a0+Math.imul(ry,Ru)|0)+Math.imul(Jv,pu)|0,S0=S0+Math.imul(Jv,Ru)|0,c0=c0+Math.imul(yv,t0)|0,a0=(a0=a0+Math.imul(yv,m0)|0)+Math.imul(Av,t0)|0,S0=S0+Math.imul(Av,m0)|0,c0=c0+Math.imul(Hv,_0)|0,a0=(a0=a0+Math.imul(Hv,R0)|0)+Math.imul(ty,_0)|0,S0=S0+Math.imul(ty,R0)|0,c0=c0+Math.imul(J1,l1)|0,a0=(a0=a0+Math.imul(J1,a1)|0)+Math.imul(wv,l1)|0,S0=S0+Math.imul(wv,a1)|0;var x0=(T1+(c0=c0+Math.imul(S1,K1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,W1)|0)+Math.imul(n1,K1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,W1)|0)+(a0>>>13)|0)+(x0>>>26)|0,x0&=67108863,c0=Math.imul(mw,a3),a0=(a0=Math.imul(mw,F2))+Math.imul(p2,a3)|0,S0=Math.imul(p2,F2),c0=c0+Math.imul(r2,vt)|0,a0=(a0=a0+Math.imul(r2,wt)|0)+Math.imul(f2,vt)|0,S0=S0+Math.imul(f2,wt)|0,c0=c0+Math.imul(iy,pu)|0,a0=(a0=a0+Math.imul(iy,Ru)|0)+Math.imul(cy,pu)|0,S0=S0+Math.imul(cy,Ru)|0,c0=c0+Math.imul(ry,t0)|0,a0=(a0=a0+Math.imul(ry,m0)|0)+Math.imul(Jv,t0)|0,S0=S0+Math.imul(Jv,m0)|0,c0=c0+Math.imul(yv,_0)|0,a0=(a0=a0+Math.imul(yv,R0)|0)+Math.imul(Av,_0)|0,S0=S0+Math.imul(Av,R0)|0,c0=c0+Math.imul(Hv,l1)|0,a0=(a0=a0+Math.imul(Hv,a1)|0)+Math.imul(ty,l1)|0,S0=S0+Math.imul(ty,a1)|0,c0=c0+Math.imul(J1,K1)|0,a0=(a0=a0+Math.imul(J1,W1)|0)+Math.imul(wv,K1)|0,S0=S0+Math.imul(wv,W1)|0;var U0=(T1+(c0=c0+Math.imul(S1,uv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Tv)|0)+Math.imul(n1,uv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Tv)|0)+(a0>>>13)|0)+(U0>>>26)|0,U0&=67108863,c0=Math.imul(Ew,a3),a0=(a0=Math.imul(Ew,F2))+Math.imul(q2,a3)|0,S0=Math.imul(q2,F2),c0=c0+Math.imul(mw,vt)|0,a0=(a0=a0+Math.imul(mw,wt)|0)+Math.imul(p2,vt)|0,S0=S0+Math.imul(p2,wt)|0,c0=c0+Math.imul(r2,pu)|0,a0=(a0=a0+Math.imul(r2,Ru)|0)+Math.imul(f2,pu)|0,S0=S0+Math.imul(f2,Ru)|0,c0=c0+Math.imul(iy,t0)|0,a0=(a0=a0+Math.imul(iy,m0)|0)+Math.imul(cy,t0)|0,S0=S0+Math.imul(cy,m0)|0,c0=c0+Math.imul(ry,_0)|0,a0=(a0=a0+Math.imul(ry,R0)|0)+Math.imul(Jv,_0)|0,S0=S0+Math.imul(Jv,R0)|0,c0=c0+Math.imul(yv,l1)|0,a0=(a0=a0+Math.imul(yv,a1)|0)+Math.imul(Av,l1)|0,S0=S0+Math.imul(Av,a1)|0,c0=c0+Math.imul(Hv,K1)|0,a0=(a0=a0+Math.imul(Hv,W1)|0)+Math.imul(ty,K1)|0,S0=S0+Math.imul(ty,W1)|0,c0=c0+Math.imul(J1,uv)|0,a0=(a0=a0+Math.imul(J1,Tv)|0)+Math.imul(wv,uv)|0,S0=S0+Math.imul(wv,Tv)|0;var e1=(T1+(c0=c0+Math.imul(S1,Wv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,ny)|0)+Math.imul(n1,Wv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,ny)|0)+(a0>>>13)|0)+(e1>>>26)|0,e1&=67108863,c0=Math.imul(Rw,a3),a0=(a0=Math.imul(Rw,F2))+Math.imul(K2,a3)|0,S0=Math.imul(K2,F2),c0=c0+Math.imul(Ew,vt)|0,a0=(a0=a0+Math.imul(Ew,wt)|0)+Math.imul(q2,vt)|0,S0=S0+Math.imul(q2,wt)|0,c0=c0+Math.imul(mw,pu)|0,a0=(a0=a0+Math.imul(mw,Ru)|0)+Math.imul(p2,pu)|0,S0=S0+Math.imul(p2,Ru)|0,c0=c0+Math.imul(r2,t0)|0,a0=(a0=a0+Math.imul(r2,m0)|0)+Math.imul(f2,t0)|0,S0=S0+Math.imul(f2,m0)|0,c0=c0+Math.imul(iy,_0)|0,a0=(a0=a0+Math.imul(iy,R0)|0)+Math.imul(cy,_0)|0,S0=S0+Math.imul(cy,R0)|0,c0=c0+Math.imul(ry,l1)|0,a0=(a0=a0+Math.imul(ry,a1)|0)+Math.imul(Jv,l1)|0,S0=S0+Math.imul(Jv,a1)|0,c0=c0+Math.imul(yv,K1)|0,a0=(a0=a0+Math.imul(yv,W1)|0)+Math.imul(Av,K1)|0,S0=S0+Math.imul(Av,W1)|0,c0=c0+Math.imul(Hv,uv)|0,a0=(a0=a0+Math.imul(Hv,Tv)|0)+Math.imul(ty,uv)|0,S0=S0+Math.imul(ty,Tv)|0,c0=c0+Math.imul(J1,Wv)|0,a0=(a0=a0+Math.imul(J1,ny)|0)+Math.imul(wv,Wv)|0,S0=S0+Math.imul(wv,ny)|0;var h1=(T1+(c0=c0+Math.imul(S1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,C0)|0)+Math.imul(n1,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,C0)|0)+(a0>>>13)|0)+(h1>>>26)|0,h1&=67108863,c0=Math.imul(Rw,vt),a0=(a0=Math.imul(Rw,wt))+Math.imul(K2,vt)|0,S0=Math.imul(K2,wt),c0=c0+Math.imul(Ew,pu)|0,a0=(a0=a0+Math.imul(Ew,Ru)|0)+Math.imul(q2,pu)|0,S0=S0+Math.imul(q2,Ru)|0,c0=c0+Math.imul(mw,t0)|0,a0=(a0=a0+Math.imul(mw,m0)|0)+Math.imul(p2,t0)|0,S0=S0+Math.imul(p2,m0)|0,c0=c0+Math.imul(r2,_0)|0,a0=(a0=a0+Math.imul(r2,R0)|0)+Math.imul(f2,_0)|0,S0=S0+Math.imul(f2,R0)|0,c0=c0+Math.imul(iy,l1)|0,a0=(a0=a0+Math.imul(iy,a1)|0)+Math.imul(cy,l1)|0,S0=S0+Math.imul(cy,a1)|0,c0=c0+Math.imul(ry,K1)|0,a0=(a0=a0+Math.imul(ry,W1)|0)+Math.imul(Jv,K1)|0,S0=S0+Math.imul(Jv,W1)|0,c0=c0+Math.imul(yv,uv)|0,a0=(a0=a0+Math.imul(yv,Tv)|0)+Math.imul(Av,uv)|0,S0=S0+Math.imul(Av,Tv)|0,c0=c0+Math.imul(Hv,Wv)|0,a0=(a0=a0+Math.imul(Hv,ny)|0)+Math.imul(ty,Wv)|0,S0=S0+Math.imul(ty,ny)|0;var k1=(T1+(c0=c0+Math.imul(J1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(J1,C0)|0)+Math.imul(wv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(wv,C0)|0)+(a0>>>13)|0)+(k1>>>26)|0,k1&=67108863,c0=Math.imul(Rw,pu),a0=(a0=Math.imul(Rw,Ru))+Math.imul(K2,pu)|0,S0=Math.imul(K2,Ru),c0=c0+Math.imul(Ew,t0)|0,a0=(a0=a0+Math.imul(Ew,m0)|0)+Math.imul(q2,t0)|0,S0=S0+Math.imul(q2,m0)|0,c0=c0+Math.imul(mw,_0)|0,a0=(a0=a0+Math.imul(mw,R0)|0)+Math.imul(p2,_0)|0,S0=S0+Math.imul(p2,R0)|0,c0=c0+Math.imul(r2,l1)|0,a0=(a0=a0+Math.imul(r2,a1)|0)+Math.imul(f2,l1)|0,S0=S0+Math.imul(f2,a1)|0,c0=c0+Math.imul(iy,K1)|0,a0=(a0=a0+Math.imul(iy,W1)|0)+Math.imul(cy,K1)|0,S0=S0+Math.imul(cy,W1)|0,c0=c0+Math.imul(ry,uv)|0,a0=(a0=a0+Math.imul(ry,Tv)|0)+Math.imul(Jv,uv)|0,S0=S0+Math.imul(Jv,Tv)|0,c0=c0+Math.imul(yv,Wv)|0,a0=(a0=a0+Math.imul(yv,ny)|0)+Math.imul(Av,Wv)|0,S0=S0+Math.imul(Av,ny)|0;var q1=(T1+(c0=c0+Math.imul(Hv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Hv,C0)|0)+Math.imul(ty,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(ty,C0)|0)+(a0>>>13)|0)+(q1>>>26)|0,q1&=67108863,c0=Math.imul(Rw,t0),a0=(a0=Math.imul(Rw,m0))+Math.imul(K2,t0)|0,S0=Math.imul(K2,m0),c0=c0+Math.imul(Ew,_0)|0,a0=(a0=a0+Math.imul(Ew,R0)|0)+Math.imul(q2,_0)|0,S0=S0+Math.imul(q2,R0)|0,c0=c0+Math.imul(mw,l1)|0,a0=(a0=a0+Math.imul(mw,a1)|0)+Math.imul(p2,l1)|0,S0=S0+Math.imul(p2,a1)|0,c0=c0+Math.imul(r2,K1)|0,a0=(a0=a0+Math.imul(r2,W1)|0)+Math.imul(f2,K1)|0,S0=S0+Math.imul(f2,W1)|0,c0=c0+Math.imul(iy,uv)|0,a0=(a0=a0+Math.imul(iy,Tv)|0)+Math.imul(cy,uv)|0,S0=S0+Math.imul(cy,Tv)|0,c0=c0+Math.imul(ry,Wv)|0,a0=(a0=a0+Math.imul(ry,ny)|0)+Math.imul(Jv,Wv)|0,S0=S0+Math.imul(Jv,ny)|0;var L1=(T1+(c0=c0+Math.imul(yv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(yv,C0)|0)+Math.imul(Av,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Av,C0)|0)+(a0>>>13)|0)+(L1>>>26)|0,L1&=67108863,c0=Math.imul(Rw,_0),a0=(a0=Math.imul(Rw,R0))+Math.imul(K2,_0)|0,S0=Math.imul(K2,R0),c0=c0+Math.imul(Ew,l1)|0,a0=(a0=a0+Math.imul(Ew,a1)|0)+Math.imul(q2,l1)|0,S0=S0+Math.imul(q2,a1)|0,c0=c0+Math.imul(mw,K1)|0,a0=(a0=a0+Math.imul(mw,W1)|0)+Math.imul(p2,K1)|0,S0=S0+Math.imul(p2,W1)|0,c0=c0+Math.imul(r2,uv)|0,a0=(a0=a0+Math.imul(r2,Tv)|0)+Math.imul(f2,uv)|0,S0=S0+Math.imul(f2,Tv)|0,c0=c0+Math.imul(iy,Wv)|0,a0=(a0=a0+Math.imul(iy,ny)|0)+Math.imul(cy,Wv)|0,S0=S0+Math.imul(cy,ny)|0;var A1=(T1+(c0=c0+Math.imul(ry,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(ry,C0)|0)+Math.imul(Jv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Jv,C0)|0)+(a0>>>13)|0)+(A1>>>26)|0,A1&=67108863,c0=Math.imul(Rw,l1),a0=(a0=Math.imul(Rw,a1))+Math.imul(K2,l1)|0,S0=Math.imul(K2,a1),c0=c0+Math.imul(Ew,K1)|0,a0=(a0=a0+Math.imul(Ew,W1)|0)+Math.imul(q2,K1)|0,S0=S0+Math.imul(q2,W1)|0,c0=c0+Math.imul(mw,uv)|0,a0=(a0=a0+Math.imul(mw,Tv)|0)+Math.imul(p2,uv)|0,S0=S0+Math.imul(p2,Tv)|0,c0=c0+Math.imul(r2,Wv)|0,a0=(a0=a0+Math.imul(r2,ny)|0)+Math.imul(f2,Wv)|0,S0=S0+Math.imul(f2,ny)|0;var M1=(T1+(c0=c0+Math.imul(iy,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(iy,C0)|0)+Math.imul(cy,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(cy,C0)|0)+(a0>>>13)|0)+(M1>>>26)|0,M1&=67108863,c0=Math.imul(Rw,K1),a0=(a0=Math.imul(Rw,W1))+Math.imul(K2,K1)|0,S0=Math.imul(K2,W1),c0=c0+Math.imul(Ew,uv)|0,a0=(a0=a0+Math.imul(Ew,Tv)|0)+Math.imul(q2,uv)|0,S0=S0+Math.imul(q2,Tv)|0,c0=c0+Math.imul(mw,Wv)|0,a0=(a0=a0+Math.imul(mw,ny)|0)+Math.imul(p2,Wv)|0,S0=S0+Math.imul(p2,ny)|0;var X1=(T1+(c0=c0+Math.imul(r2,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(r2,C0)|0)+Math.imul(f2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(f2,C0)|0)+(a0>>>13)|0)+(X1>>>26)|0,X1&=67108863,c0=Math.imul(Rw,uv),a0=(a0=Math.imul(Rw,Tv))+Math.imul(K2,uv)|0,S0=Math.imul(K2,Tv),c0=c0+Math.imul(Ew,Wv)|0,a0=(a0=a0+Math.imul(Ew,ny)|0)+Math.imul(q2,Wv)|0,S0=S0+Math.imul(q2,ny)|0;var dv=(T1+(c0=c0+Math.imul(mw,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(mw,C0)|0)+Math.imul(p2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(p2,C0)|0)+(a0>>>13)|0)+(dv>>>26)|0,dv&=67108863,c0=Math.imul(Rw,Wv),a0=(a0=Math.imul(Rw,ny))+Math.imul(K2,Wv)|0,S0=Math.imul(K2,ny);var I1=(T1+(c0=c0+Math.imul(Ew,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Ew,C0)|0)+Math.imul(q2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(q2,C0)|0)+(a0>>>13)|0)+(I1>>>26)|0,I1&=67108863;var iv=(T1+(c0=Math.imul(Rw,Gv))|0)+((8191&(a0=(a0=Math.imul(Rw,C0))+Math.imul(K2,Gv)|0))<<13)|0;return T1=((S0=Math.imul(K2,C0))+(a0>>>13)|0)+(iv>>>26)|0,iv&=67108863,p1[0]=J0,p1[1]=f0,p1[2]=v0,p1[3]=h0,p1[4]=u0,p1[5]=o0,p1[6]=x0,p1[7]=U0,p1[8]=e1,p1[9]=h1,p1[10]=k1,p1[11]=q1,p1[12]=L1,p1[13]=A1,p1[14]=M1,p1[15]=X1,p1[16]=dv,p1[17]=I1,p1[18]=iv,T1!==0&&(p1[19]=T1,d0.length++),d0};function gv(s0,g0,d0){d0.negative=g0.negative^s0.negative,d0.length=s0.length+g0.length;for(var c0=0,a0=0,S0=0;S0>>26)|0)>>>26,z0&=67108863}d0.words[S0]=Q0,c0=z0,z0=a0}return c0!==0?d0.words[S0]=c0:d0.length--,d0._strip()}function xv(s0,g0,d0){return gv(s0,g0,d0)}Math.imul||(bv=ov),Su.prototype.mulTo=function(s0,g0){var d0=this.length+s0.length;return this.length===10&&s0.length===10?bv(this,s0,g0):d0<63?ov(this,s0,g0):d0<1024?gv(this,s0,g0):xv(this,s0,g0)},Su.prototype.mul=function(s0){var g0=new Su(null);return g0.words=new Array(this.length+s0.length),this.mulTo(s0,g0)},Su.prototype.mulf=function(s0){var g0=new Su(null);return g0.words=new Array(this.length+s0.length),xv(this,s0,g0)},Su.prototype.imul=function(s0){return this.clone().mulTo(s0,this)},Su.prototype.imuln=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(typeof s0=="number"),mu(s0<67108864);for(var d0=0,c0=0;c0>=26,d0+=a0/67108864|0,d0+=S0>>>26,this.words[c0]=67108863&S0}return d0!==0&&(this.words[c0]=d0,this.length++),g0?this.ineg():this},Su.prototype.muln=function(s0){return this.clone().imuln(s0)},Su.prototype.sqr=function(){return this.mul(this)},Su.prototype.isqr=function(){return this.imul(this.clone())},Su.prototype.pow=function(s0){var g0=function(S0){for(var z0=new Array(S0.bitLength()),Q0=0;Q0>>T1&1}return z0}(s0);if(g0.length===0)return new Su(1);for(var d0=this,c0=0;c0=0);var g0,d0=s0%26,c0=(s0-d0)/26,a0=67108863>>>26-d0<<26-d0;if(d0!==0){var S0=0;for(g0=0;g0>>26-d0}S0&&(this.words[g0]=S0,this.length++)}if(c0!==0){for(g0=this.length-1;g0>=0;g0--)this.words[g0+c0]=this.words[g0];for(g0=0;g0=0),c0=g0?(g0-g0%26)/26:0;var a0=s0%26,S0=Math.min((s0-a0)/26,this.length),z0=67108863^67108863>>>a0<S0)for(this.length-=S0,p1=0;p1=0&&(T1!==0||p1>=c0);p1--){var U1=0|this.words[p1];this.words[p1]=T1<<26-a0|U1>>>a0,T1=U1&z0}return Q0&&T1!==0&&(Q0.words[Q0.length++]=T1),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},Su.prototype.ishrn=function(s0,g0,d0){return mu(this.negative===0),this.iushrn(s0,g0,d0)},Su.prototype.shln=function(s0){return this.clone().ishln(s0)},Su.prototype.ushln=function(s0){return this.clone().iushln(s0)},Su.prototype.shrn=function(s0){return this.clone().ishrn(s0)},Su.prototype.ushrn=function(s0){return this.clone().iushrn(s0)},Su.prototype.testn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=s0%26,d0=(s0-g0)/26,c0=1<=0);var g0=s0%26,d0=(s0-g0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=d0)return this;if(g0!==0&&d0++,this.length=Math.min(d0,this.length),g0!==0){var c0=67108863^67108863>>>g0<=67108864;g0++)this.words[g0]-=67108864,g0===this.length-1?this.words[g0+1]=1:this.words[g0+1]++;return this.length=Math.max(this.length,g0+1),this},Su.prototype.isubn=function(s0){if(mu(typeof s0=="number"),mu(s0<67108864),s0<0)return this.iaddn(-s0);if(this.negative!==0)return this.negative=0,this.iaddn(s0),this.negative=1,this;if(this.words[0]-=s0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var g0=0;g0>26)-(Q0/67108864|0),this.words[c0+d0]=67108863&a0}for(;c0>26,this.words[c0+d0]=67108863&a0;if(z0===0)return this._strip();for(mu(z0===-1),z0=0,c0=0;c0>26,this.words[c0]=67108863&a0;return this.negative=1,this._strip()},Su.prototype._wordDiv=function(s0,g0){var d0=(this.length,s0.length),c0=this.clone(),a0=s0,S0=0|a0.words[a0.length-1];(d0=26-this._countBits(S0))!=0&&(a0=a0.ushln(d0),c0.iushln(d0),S0=0|a0.words[a0.length-1]);var z0,Q0=c0.length-a0.length;if(g0!=="mod"){(z0=new Su(null)).length=Q0+1,z0.words=new Array(z0.length);for(var p1=0;p1=0;U1--){var S1=67108864*(0|c0.words[a0.length+U1])+(0|c0.words[a0.length+U1-1]);for(S1=Math.min(S1/S0|0,67108863),c0._ishlnsubmul(a0,S1,U1);c0.negative!==0;)S1--,c0.negative=0,c0._ishlnsubmul(a0,1,U1),c0.isZero()||(c0.negative^=1);z0&&(z0.words[U1]=S1)}return z0&&z0._strip(),c0._strip(),g0!=="div"&&d0!==0&&c0.iushrn(d0),{div:z0||null,mod:c0}},Su.prototype.divmod=function(s0,g0,d0){return mu(!s0.isZero()),this.isZero()?{div:new Su(0),mod:new Su(0)}:this.negative!==0&&s0.negative===0?(S0=this.neg().divmod(s0,g0),g0!=="mod"&&(c0=S0.div.neg()),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.iadd(s0)),{div:c0,mod:a0}):this.negative===0&&s0.negative!==0?(S0=this.divmod(s0.neg(),g0),g0!=="mod"&&(c0=S0.div.neg()),{div:c0,mod:S0.mod}):this.negative&s0.negative?(S0=this.neg().divmod(s0.neg(),g0),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.isub(s0)),{div:S0.div,mod:a0}):s0.length>this.length||this.cmp(s0)<0?{div:new Su(0),mod:this}:s0.length===1?g0==="div"?{div:this.divn(s0.words[0]),mod:null}:g0==="mod"?{div:null,mod:new Su(this.modrn(s0.words[0]))}:{div:this.divn(s0.words[0]),mod:new Su(this.modrn(s0.words[0]))}:this._wordDiv(s0,g0);var c0,a0,S0},Su.prototype.div=function(s0){return this.divmod(s0,"div",!1).div},Su.prototype.mod=function(s0){return this.divmod(s0,"mod",!1).mod},Su.prototype.umod=function(s0){return this.divmod(s0,"mod",!0).mod},Su.prototype.divRound=function(s0){var g0=this.divmod(s0);if(g0.mod.isZero())return g0.div;var d0=g0.div.negative!==0?g0.mod.isub(s0):g0.mod,c0=s0.ushrn(1),a0=s0.andln(1),S0=d0.cmp(c0);return S0<0||a0===1&&S0===0?g0.div:g0.div.negative!==0?g0.div.isubn(1):g0.div.iaddn(1)},Su.prototype.modrn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=(1<<26)%s0,c0=0,a0=this.length-1;a0>=0;a0--)c0=(d0*c0+(0|this.words[a0]))%s0;return g0?-c0:c0},Su.prototype.modn=function(s0){return this.modrn(s0)},Su.prototype.idivn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=0,c0=this.length-1;c0>=0;c0--){var a0=(0|this.words[c0])+67108864*d0;this.words[c0]=a0/s0|0,d0=a0%s0}return this._strip(),g0?this.ineg():this},Su.prototype.divn=function(s0){return this.clone().idivn(s0)},Su.prototype.egcd=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0=new Su(1),a0=new Su(0),S0=new Su(0),z0=new Su(1),Q0=0;g0.isEven()&&d0.isEven();)g0.iushrn(1),d0.iushrn(1),++Q0;for(var p1=d0.clone(),T1=g0.clone();!g0.isZero();){for(var U1=0,S1=1;!(g0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(g0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(p1),a0.isub(T1)),c0.iushrn(1),a0.iushrn(1);for(var n1=0,V1=1;!(d0.words[0]&V1)&&n1<26;++n1,V1<<=1);if(n1>0)for(d0.iushrn(n1);n1-- >0;)(S0.isOdd()||z0.isOdd())&&(S0.iadd(p1),z0.isub(T1)),S0.iushrn(1),z0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),c0.isub(S0),a0.isub(z0)):(d0.isub(g0),S0.isub(c0),z0.isub(a0))}return{a:S0,b:z0,gcd:d0.iushln(Q0)}},Su.prototype._invmp=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0,a0=new Su(1),S0=new Su(0),z0=d0.clone();g0.cmpn(1)>0&&d0.cmpn(1)>0;){for(var Q0=0,p1=1;!(g0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(g0.iushrn(Q0);Q0-- >0;)a0.isOdd()&&a0.iadd(z0),a0.iushrn(1);for(var T1=0,U1=1;!(d0.words[0]&U1)&&T1<26;++T1,U1<<=1);if(T1>0)for(d0.iushrn(T1);T1-- >0;)S0.isOdd()&&S0.iadd(z0),S0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),a0.isub(S0)):(d0.isub(g0),S0.isub(a0))}return(c0=g0.cmpn(1)===0?a0:S0).cmpn(0)<0&&c0.iadd(s0),c0},Su.prototype.gcd=function(s0){if(this.isZero())return s0.abs();if(s0.isZero())return this.abs();var g0=this.clone(),d0=s0.clone();g0.negative=0,d0.negative=0;for(var c0=0;g0.isEven()&&d0.isEven();c0++)g0.iushrn(1),d0.iushrn(1);for(;;){for(;g0.isEven();)g0.iushrn(1);for(;d0.isEven();)d0.iushrn(1);var a0=g0.cmp(d0);if(a0<0){var S0=g0;g0=d0,d0=S0}else if(a0===0||d0.cmpn(1)===0)break;g0.isub(d0)}return d0.iushln(c0)},Su.prototype.invm=function(s0){return this.egcd(s0).a.umod(s0)},Su.prototype.isEven=function(){return(1&this.words[0])==0},Su.prototype.isOdd=function(){return(1&this.words[0])==1},Su.prototype.andln=function(s0){return this.words[0]&s0},Su.prototype.bincn=function(s0){mu(typeof s0=="number");var g0=s0%26,d0=(s0-g0)/26,c0=1<>>26,z0&=67108863,this.words[S0]=z0}return a0!==0&&(this.words[S0]=a0,this.length++),this},Su.prototype.isZero=function(){return this.length===1&&this.words[0]===0},Su.prototype.cmpn=function(s0){var g0,d0=s0<0;if(this.negative!==0&&!d0)return-1;if(this.negative===0&&d0)return 1;if(this._strip(),this.length>1)g0=1;else{d0&&(s0=-s0),mu(s0<=67108863,"Number is too big");var c0=0|this.words[0];g0=c0===s0?0:c0s0.length)return 1;if(this.length=0;d0--){var c0=0|this.words[d0],a0=0|s0.words[d0];if(c0!==a0){c0a0&&(g0=1);break}}return g0},Su.prototype.gtn=function(s0){return this.cmpn(s0)===1},Su.prototype.gt=function(s0){return this.cmp(s0)===1},Su.prototype.gten=function(s0){return this.cmpn(s0)>=0},Su.prototype.gte=function(s0){return this.cmp(s0)>=0},Su.prototype.ltn=function(s0){return this.cmpn(s0)===-1},Su.prototype.lt=function(s0){return this.cmp(s0)===-1},Su.prototype.lten=function(s0){return this.cmpn(s0)<=0},Su.prototype.lte=function(s0){return this.cmp(s0)<=0},Su.prototype.eqn=function(s0){return this.cmpn(s0)===0},Su.prototype.eq=function(s0){return this.cmp(s0)===0},Su.red=function(s0){return new T0(s0)},Su.prototype.toRed=function(s0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),s0.convertTo(this)._forceRed(s0)},Su.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},Su.prototype._forceRed=function(s0){return this.red=s0,this},Su.prototype.forceRed=function(s0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(s0)},Su.prototype.redAdd=function(s0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,s0)},Su.prototype.redIAdd=function(s0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,s0)},Su.prototype.redSub=function(s0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,s0)},Su.prototype.redISub=function(s0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,s0)},Su.prototype.redShl=function(s0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,s0)},Su.prototype.redMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.mul(this,s0)},Su.prototype.redIMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.imul(this,s0)},Su.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},Su.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},Su.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},Su.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},Su.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},Su.prototype.redPow=function(s0){return mu(this.red&&!s0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,s0)};var hy={k256:null,p224:null,p192:null,p25519:null};function oy(s0,g0){this.name=s0,this.p=new Su(g0,16),this.n=this.p.bitLength(),this.k=new Su(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function fy(){oy.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function Fy(){oy.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function qv(){oy.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Qv(){oy.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T0(s0){if(typeof s0=="string"){var g0=Su._prime(s0);this.m=g0.p,this.prime=g0}else mu(s0.gtn(1),"modulus must be greater than 1"),this.m=s0,this.prime=null}function X0(s0){T0.call(this,s0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new Su(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}oy.prototype._tmp=function(){var s0=new Su(null);return s0.words=new Array(Math.ceil(this.n/13)),s0},oy.prototype.ireduce=function(s0){var g0,d0=s0;do this.split(d0,this.tmp),g0=(d0=(d0=this.imulK(d0)).iadd(this.tmp)).bitLength();while(g0>this.n);var c0=g00?d0.isub(this.p):d0.strip!==void 0?d0.strip():d0._strip(),d0},oy.prototype.split=function(s0,g0){s0.iushrn(this.n,0,g0)},oy.prototype.imulK=function(s0){return s0.imul(this.k)},Mu(fy,oy),fy.prototype.split=function(s0,g0){for(var d0=4194303,c0=Math.min(s0.length,9),a0=0;a0>>22,S0=z0}S0>>>=22,s0.words[a0-10]=S0,S0===0&&s0.length>10?s0.length-=10:s0.length-=9},fy.prototype.imulK=function(s0){s0.words[s0.length]=0,s0.words[s0.length+1]=0,s0.length+=2;for(var g0=0,d0=0;d0>>=26,s0.words[d0]=a0,g0=c0}return g0!==0&&(s0.words[s0.length++]=g0),s0},Su._prime=function(s0){if(hy[s0])return hy[s0];var g0;if(s0==="k256")g0=new fy;else if(s0==="p224")g0=new Fy;else if(s0==="p192")g0=new qv;else{if(s0!=="p25519")throw new Error("Unknown prime "+s0);g0=new Qv}return hy[s0]=g0,g0},T0.prototype._verify1=function(s0){mu(s0.negative===0,"red works only with positives"),mu(s0.red,"red works only with red numbers")},T0.prototype._verify2=function(s0,g0){mu((s0.negative|g0.negative)==0,"red works only with positives"),mu(s0.red&&s0.red===g0.red,"red works only with red numbers")},T0.prototype.imod=function(s0){return this.prime?this.prime.ireduce(s0)._forceRed(this):(B0(s0,s0.umod(this.m)._forceRed(this)),s0)},T0.prototype.neg=function(s0){return s0.isZero()?s0.clone():this.m.sub(s0)._forceRed(this)},T0.prototype.add=function(s0,g0){this._verify2(s0,g0);var d0=s0.add(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0._forceRed(this)},T0.prototype.iadd=function(s0,g0){this._verify2(s0,g0);var d0=s0.iadd(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0},T0.prototype.sub=function(s0,g0){this._verify2(s0,g0);var d0=s0.sub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0._forceRed(this)},T0.prototype.isub=function(s0,g0){this._verify2(s0,g0);var d0=s0.isub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0},T0.prototype.shl=function(s0,g0){return this._verify1(s0),this.imod(s0.ushln(g0))},T0.prototype.imul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.imul(g0))},T0.prototype.mul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.mul(g0))},T0.prototype.isqr=function(s0){return this.imul(s0,s0.clone())},T0.prototype.sqr=function(s0){return this.mul(s0,s0)},T0.prototype.sqrt=function(s0){if(s0.isZero())return s0.clone();var g0=this.m.andln(3);if(mu(g0%2==1),g0===3){var d0=this.m.add(new Su(1)).iushrn(2);return this.pow(s0,d0)}for(var c0=this.m.subn(1),a0=0;!c0.isZero()&&c0.andln(1)===0;)a0++,c0.iushrn(1);mu(!c0.isZero());var S0=new Su(1).toRed(this),z0=S0.redNeg(),Q0=this.m.subn(1).iushrn(1),p1=this.m.bitLength();for(p1=new Su(2*p1*p1).toRed(this);this.pow(p1,Q0).cmp(z0)!==0;)p1.redIAdd(z0);for(var T1=this.pow(p1,c0),U1=this.pow(s0,c0.addn(1).iushrn(1)),S1=this.pow(s0,c0),n1=a0;S1.cmp(S0)!==0;){for(var V1=S1,J1=0;V1.cmp(S0)!==0;J1++)V1=V1.redSqr();mu(J1=0;c0--){for(var p1=g0.words[c0],T1=Q0-1;T1>=0;T1--){var U1=p1>>T1&1;a0!==d0[0]&&(a0=this.sqr(a0)),U1!==0||S0!==0?(S0<<=1,S0|=U1,(++z0==4||c0===0&&T1===0)&&(a0=this.mul(a0,d0[S0]),z0=0,S0=0)):z0=0}Q0=26}return a0},T0.prototype.convertTo=function(s0){var g0=s0.umod(this.m);return g0===s0?g0.clone():g0},T0.prototype.convertFrom=function(s0){var g0=s0.clone();return g0.red=null,g0},Su.mont=function(s0){return new X0(s0)},Mu(X0,T0),X0.prototype.convertTo=function(s0){return this.imod(s0.ushln(this.shift))},X0.prototype.convertFrom=function(s0){var g0=this.imod(s0.mul(this.rinv));return g0.red=null,g0},X0.prototype.imul=function(s0,g0){if(s0.isZero()||g0.isZero())return s0.words[0]=0,s0.length=1,s0;var d0=s0.imul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.mul=function(s0,g0){if(s0.isZero()||g0.isZero())return new Su(0)._forceRed(this);var d0=s0.mul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.invm=function(s0){return this.imod(s0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})(Cte);var AF=Cte.exports,S0e=i$;function ule(yt){var ir,_c=yt.modulus.byteLength();do ir=new AF(S0e(_c));while(ir.cmp(yt.modulus)>=0||!ir.umod(yt.prime1)||!ir.umod(yt.prime2));return ir}function Xz(yt,ir){var _c=function(v1){var F1=ule(v1);return{blinder:F1.toRed(AF.mont(v1.modulus)).redPow(new AF(v1.publicExponent)).fromRed(),unblinder:F1.invm(v1.modulus)}}(ir),mu=ir.modulus.byteLength(),Mu=new AF(yt).mul(_c.blinder).umod(ir.modulus),Su=Mu.toRed(AF.mont(ir.prime1)),l0=Mu.toRed(AF.mont(ir.prime2)),E0=ir.coefficient,j0=ir.prime1,M0=ir.prime2,B0=Su.redPow(ir.exponent1).fromRed(),V0=l0.redPow(ir.exponent2).fromRed(),y1=B0.isub(V0).imul(E0).umod(j0).imul(M0);return V0.iadd(y1).imul(_c.unblinder).umod(ir.modulus).toArrayLike(F0,"be",mu)}Xz.getr=ule;var KY=Xz,_F={},x0e={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}},VC={},VY={};(function(yt){var ir=yt;function _c(Mu){return Mu.length===1?"0"+Mu:Mu}function mu(Mu){for(var Su="",l0=0;l0>8,B0=255&j0;M0?l0.push(M0,B0):l0.push(B0)}return l0},ir.zero2=_c,ir.toHex=mu,ir.encode=function(Mu,Su){return Su==="hex"?mu(Mu):Mu}})(VY),function(yt){var ir=yt,_c=US,mu=Zx,Mu=VY;ir.assert=mu,ir.toArray=Mu.toArray,ir.zero2=Mu.zero2,ir.toHex=Mu.toHex,ir.encode=Mu.encode,ir.getNAF=function(Su,l0,E0){var j0=new Array(Math.max(Su.bitLength(),E0)+1);j0.fill(0);for(var M0=1<(M0>>1)-1?(M0>>1)-v1:v1,B0.isubn(y1)):y1=0,j0[V0]=y1,B0.iushrn(1)}return j0},ir.getJSF=function(Su,l0){var E0=[[],[]];Su=Su.clone(),l0=l0.clone();for(var j0,M0=0,B0=0;Su.cmpn(-M0)>0||l0.cmpn(-B0)>0;){var V0,y1,v1=Su.andln(3)+M0&3,F1=l0.andln(3)+B0&3;v1===3&&(v1=-1),F1===3&&(F1=-1),V0=1&v1?(j0=Su.andln(7)+M0&7)!=3&&j0!==5||F1!==2?v1:-v1:0,E0[0].push(V0),y1=1&F1?(j0=l0.andln(7)+B0&7)!=3&&j0!==5||v1!==2?F1:-F1:0,E0[1].push(y1),2*M0===V0+1&&(M0=1-M0),2*B0===y1+1&&(B0=1-B0),Su.iushrn(1),l0.iushrn(1)}return E0},ir.cachedProperty=function(Su,l0,E0){var j0="_"+l0;Su.prototype[l0]=function(){return this[j0]!==void 0?this[j0]:this[j0]=E0.call(this)}},ir.parseBytes=function(Su){return typeof Su=="string"?ir.toArray(Su,"hex"):Su},ir.intFromLE=function(Su){return new _c(Su,"hex","le")}}(VC);var I4={},dB=US,O4=VC,rx=O4.getNAF,Tte=O4.getJSF,Qz=O4.assert;function qC(yt,ir){this.type=yt,this.p=new dB(ir.p,16),this.red=ir.prime?dB.red(ir.prime):dB.mont(this.p),this.zero=new dB(0).toRed(this.red),this.one=new dB(1).toRed(this.red),this.two=new dB(2).toRed(this.red),this.n=ir.n&&new dB(ir.n,16),this.g=ir.g&&this.pointFromJSON(ir.g,ir.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var _c=this.n&&this.p.div(this.n);!_c||_c.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var hB=qC;function _k(yt,ir){this.curve=yt,this.type=ir,this.precomputed=null}qC.prototype.point=function(){throw new Error("Not implemented")},qC.prototype.validate=function(){throw new Error("Not implemented")},qC.prototype._fixedNafMul=function(yt,ir){Qz(yt.precomputed);var _c=yt._getDoubles(),mu=rx(ir,1,this._bitLength),Mu=(1<<_c.step+1)-(_c.step%2==0?2:1);Mu/=3;var Su,l0,E0=[];for(Su=0;Su=Su;j0--)l0=(l0<<1)+mu[j0];E0.push(l0)}for(var M0=this.jpoint(null,null,null),B0=this.jpoint(null,null,null),V0=Mu;V0>0;V0--){for(Su=0;Su=0;E0--){for(var j0=0;E0>=0&&Su[E0]===0;E0--)j0++;if(E0>=0&&j0++,l0=l0.dblp(j0),E0<0)break;var M0=Su[E0];Qz(M0!==0),l0=yt.type==="affine"?M0>0?l0.mixedAdd(Mu[M0-1>>1]):l0.mixedAdd(Mu[-M0-1>>1].neg()):M0>0?l0.add(Mu[M0-1>>1]):l0.add(Mu[-M0-1>>1].neg())}return yt.type==="affine"?l0.toP():l0},qC.prototype._wnafMulAdd=function(yt,ir,_c,mu,Mu){var Su,l0,E0,j0=this._wnafT1,M0=this._wnafT2,B0=this._wnafT3,V0=0;for(Su=0;Su=1;Su-=2){var v1=Su-1,F1=Su;if(j0[v1]===1&&j0[F1]===1){var ov=[ir[v1],null,null,ir[F1]];ir[v1].y.cmp(ir[F1].y)===0?(ov[1]=ir[v1].add(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg())):ir[v1].y.cmp(ir[F1].y.redNeg())===0?(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].add(ir[F1].neg())):(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg()));var bv=[-3,-1,-5,-7,0,7,5,1,3],gv=Tte(_c[v1],_c[F1]);for(V0=Math.max(gv[0].length,V0),B0[v1]=new Array(V0),B0[F1]=new Array(V0),l0=0;l0=0;Su--){for(var Fy=0;Su>=0;){var qv=!0;for(l0=0;l0=0&&Fy++,oy=oy.dblp(Fy),Su<0)break;for(l0=0;l00?E0=M0[l0][Qv-1>>1]:Qv<0&&(E0=M0[l0][-Qv-1>>1].neg()),oy=E0.type==="affine"?oy.mixedAdd(E0):oy.add(E0))}}for(Su=0;Su=Math.ceil((yt.bitLength()+1)/ir.step)},_k.prototype._getDoubles=function(yt,ir){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var _c=[this],mu=this,Mu=0;Mu=0&&(Su=ir,l0=_c),mu.negative&&(mu=mu.neg(),Mu=Mu.neg()),Su.negative&&(Su=Su.neg(),l0=l0.neg()),[{a:mu,b:Mu},{a:Su,b:l0}]},$8.prototype._endoSplit=function(yt){var ir=this.endo.basis,_c=ir[0],mu=ir[1],Mu=mu.b.mul(yt).divRound(this.n),Su=_c.b.neg().mul(yt).divRound(this.n),l0=Mu.mul(_c.a),E0=Su.mul(mu.a),j0=Mu.mul(_c.b),M0=Su.mul(mu.b);return{k1:yt.sub(l0).sub(E0),k2:j0.add(M0).neg()}},$8.prototype.pointFromX=function(yt,ir){(yt=new F8(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr().redMul(yt).redIAdd(yt.redMul(this.a)).redIAdd(this.b),mu=_c.redSqrt();if(mu.redSqr().redSub(_c).cmp(this.zero)!==0)throw new Error("invalid point");var Mu=mu.fromRed().isOdd();return(ir&&!Mu||!ir&&Mu)&&(mu=mu.redNeg()),this.point(yt,mu)},$8.prototype.validate=function(yt){if(yt.inf)return!0;var ir=yt.x,_c=yt.y,mu=this.a.redMul(ir),Mu=ir.redSqr().redMul(ir).redIAdd(mu).redIAdd(this.b);return _c.redSqr().redISub(Mu).cmpn(0)===0},$8.prototype._endoWnafMulAdd=function(yt,ir,_c){for(var mu=this._endoWnafT1,Mu=this._endoWnafT2,Su=0;Su":""},zS.prototype.isInfinity=function(){return this.inf},zS.prototype.add=function(yt){if(this.inf)return yt;if(yt.inf)return this;if(this.eq(yt))return this.dbl();if(this.neg().eq(yt))return this.curve.point(null,null);if(this.x.cmp(yt.x)===0)return this.curve.point(null,null);var ir=this.y.redSub(yt.y);ir.cmpn(0)!==0&&(ir=ir.redMul(this.x.redSub(yt.x).redInvm()));var _c=ir.redSqr().redISub(this.x).redISub(yt.x),mu=ir.redMul(this.x.redSub(_c)).redISub(this.y);return this.curve.point(_c,mu)},zS.prototype.dbl=function(){if(this.inf)return this;var yt=this.y.redAdd(this.y);if(yt.cmpn(0)===0)return this.curve.point(null,null);var ir=this.curve.a,_c=this.x.redSqr(),mu=yt.redInvm(),Mu=_c.redAdd(_c).redIAdd(_c).redIAdd(ir).redMul(mu),Su=Mu.redSqr().redISub(this.x.redAdd(this.x)),l0=Mu.redMul(this.x.redSub(Su)).redISub(this.y);return this.curve.point(Su,l0)},zS.prototype.getX=function(){return this.x.fromRed()},zS.prototype.getY=function(){return this.y.fromRed()},zS.prototype.mul=function(yt){return yt=new F8(yt,16),this.isInfinity()?this:this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve.endo?this.curve._endoWnafMulAdd([this],[yt]):this.curve._wnafMul(this,yt)},zS.prototype.mulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu):this.curve._wnafMulAdd(1,mu,Mu,2)},zS.prototype.jmulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu,!0):this.curve._wnafMulAdd(1,mu,Mu,2,!0)},zS.prototype.eq=function(yt){return this===yt||this.inf===yt.inf&&(this.inf||this.x.cmp(yt.x)===0&&this.y.cmp(yt.y)===0)},zS.prototype.neg=function(yt){if(this.inf)return this;var ir=this.curve.point(this.x,this.y.redNeg());if(yt&&this.precomputed){var _c=this.precomputed,mu=function(Mu){return Mu.neg()};ir.precomputed={naf:_c.naf&&{wnd:_c.naf.wnd,points:_c.naf.points.map(mu)},doubles:_c.doubles&&{step:_c.doubles.step,points:_c.doubles.points.map(mu)}}}return ir},zS.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},eH(z8,fR.BasePoint),$8.prototype.jpoint=function(yt,ir,_c){return new z8(this,yt,ir,_c)},z8.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var yt=this.z.redInvm(),ir=yt.redSqr(),_c=this.x.redMul(ir),mu=this.y.redMul(ir).redMul(yt);return this.curve.point(_c,mu)},z8.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},z8.prototype.add=function(yt){if(this.isInfinity())return yt;if(yt.isInfinity())return this;var ir=yt.z.redSqr(),_c=this.z.redSqr(),mu=this.x.redMul(ir),Mu=yt.x.redMul(_c),Su=this.y.redMul(ir.redMul(yt.z)),l0=yt.y.redMul(_c.redMul(this.z)),E0=mu.redSub(Mu),j0=Su.redSub(l0);if(E0.cmpn(0)===0)return j0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var M0=E0.redSqr(),B0=M0.redMul(E0),V0=mu.redMul(M0),y1=j0.redSqr().redIAdd(B0).redISub(V0).redISub(V0),v1=j0.redMul(V0.redISub(y1)).redISub(Su.redMul(B0)),F1=this.z.redMul(yt.z).redMul(E0);return this.curve.jpoint(y1,v1,F1)},z8.prototype.mixedAdd=function(yt){if(this.isInfinity())return yt.toJ();if(yt.isInfinity())return this;var ir=this.z.redSqr(),_c=this.x,mu=yt.x.redMul(ir),Mu=this.y,Su=yt.y.redMul(ir).redMul(this.z),l0=_c.redSub(mu),E0=Mu.redSub(Su);if(l0.cmpn(0)===0)return E0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var j0=l0.redSqr(),M0=j0.redMul(l0),B0=_c.redMul(j0),V0=E0.redSqr().redIAdd(M0).redISub(B0).redISub(B0),y1=E0.redMul(B0.redISub(V0)).redISub(Mu.redMul(M0)),v1=this.z.redMul(l0);return this.curve.jpoint(V0,y1,v1)},z8.prototype.dblp=function(yt){if(yt===0)return this;if(this.isInfinity())return this;if(!yt)return this.dbl();var ir;if(this.curve.zeroA||this.curve.threeA){var _c=this;for(ir=0;ir=0)return!1;if(_c.redIAdd(Mu),this.x.cmp(_c)===0)return!0}},z8.prototype.inspect=function(){return this.isInfinity()?"":""},z8.prototype.isInfinity=function(){return this.z.cmpn(0)===0};var tH=US,dR=Gw,WY=hB,T7=VC;function H8(yt){WY.call(this,"mont",yt),this.a=new tH(yt.a,16).toRed(this.red),this.b=new tH(yt.b,16).toRed(this.red),this.i4=new tH(4).toRed(this.red).redInvm(),this.two=new tH(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}dR(H8,WY);var rH=H8;function L6(yt,ir,_c){WY.BasePoint.call(this,yt,"projective"),ir===null&&_c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new tH(ir,16),this.z=new tH(_c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}H8.prototype.validate=function(yt){var ir=yt.normalize().x,_c=ir.redSqr(),mu=_c.redMul(ir).redAdd(_c.redMul(this.a)).redAdd(ir);return mu.redSqrt().redSqr().cmp(mu)===0},dR(L6,WY.BasePoint),H8.prototype.decodePoint=function(yt,ir){return this.point(T7.toArray(yt,ir),1)},H8.prototype.point=function(yt,ir){return new L6(this,yt,ir)},H8.prototype.pointFromJSON=function(yt){return L6.fromJSON(this,yt)},L6.prototype.precompute=function(){},L6.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},L6.fromJSON=function(yt,ir){return new L6(yt,ir[0],ir[1]||yt.one)},L6.prototype.inspect=function(){return this.isInfinity()?"":""},L6.prototype.isInfinity=function(){return this.z.cmpn(0)===0},L6.prototype.dbl=function(){var yt=this.x.redAdd(this.z).redSqr(),ir=this.x.redSub(this.z).redSqr(),_c=yt.redSub(ir),mu=yt.redMul(ir),Mu=_c.redMul(ir.redAdd(this.curve.a24.redMul(_c)));return this.curve.point(mu,Mu)},L6.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},L6.prototype.diffAdd=function(yt,ir){var _c=this.x.redAdd(this.z),mu=this.x.redSub(this.z),Mu=yt.x.redAdd(yt.z),Su=yt.x.redSub(yt.z).redMul(_c),l0=Mu.redMul(mu),E0=ir.z.redMul(Su.redAdd(l0).redSqr()),j0=ir.x.redMul(Su.redISub(l0).redSqr());return this.curve.point(E0,j0)},L6.prototype.mul=function(yt){for(var ir=yt.clone(),_c=this,mu=this.curve.point(null,null),Mu=[];ir.cmpn(0)!==0;ir.iushrn(1))Mu.push(ir.andln(1));for(var Su=Mu.length-1;Su>=0;Su--)Mu[Su]===0?(_c=_c.diffAdd(mu,this),mu=mu.dbl()):(mu=_c.diffAdd(mu,this),_c=_c.dbl());return mu},L6.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},L6.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},L6.prototype.eq=function(yt){return this.getX().cmp(yt.getX())===0},L6.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},L6.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var $M=US,fle=Gw,wN=hB,k0e=VC.assert;function c_(yt){this.twisted=(0|yt.a)!=1,this.mOneA=this.twisted&&(0|yt.a)==-1,this.extended=this.mOneA,wN.call(this,"edwards",yt),this.a=new $M(yt.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new $M(yt.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new $M(yt.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),k0e(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(0|yt.c)==1}fle(c_,wN);var $N=c_;function u_(yt,ir,_c,mu,Mu){wN.BasePoint.call(this,yt,"projective"),ir===null&&_c===null&&mu===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new $M(ir,16),this.y=new $M(_c,16),this.z=mu?new $M(mu,16):this.curve.one,this.t=Mu&&new $M(Mu,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}c_.prototype._mulA=function(yt){return this.mOneA?yt.redNeg():this.a.redMul(yt)},c_.prototype._mulC=function(yt){return this.oneC?yt:this.c.redMul(yt)},c_.prototype.jpoint=function(yt,ir,_c,mu){return this.point(yt,ir,_c,mu)},c_.prototype.pointFromX=function(yt,ir){(yt=new $M(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=this.c2.redSub(this.a.redMul(_c)),Mu=this.one.redSub(this.c2.redMul(this.d).redMul(_c)),Su=mu.redMul(Mu.redInvm()),l0=Su.redSqrt();if(l0.redSqr().redSub(Su).cmp(this.zero)!==0)throw new Error("invalid point");var E0=l0.fromRed().isOdd();return(ir&&!E0||!ir&&E0)&&(l0=l0.redNeg()),this.point(yt,l0)},c_.prototype.pointFromY=function(yt,ir){(yt=new $M(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=_c.redSub(this.c2),Mu=_c.redMul(this.d).redMul(this.c2).redSub(this.a),Su=mu.redMul(Mu.redInvm());if(Su.cmp(this.zero)===0){if(ir)throw new Error("invalid point");return this.point(this.zero,yt)}var l0=Su.redSqrt();if(l0.redSqr().redSub(Su).cmp(this.zero)!==0)throw new Error("invalid point");return l0.fromRed().isOdd()!==ir&&(l0=l0.redNeg()),this.point(l0,yt)},c_.prototype.validate=function(yt){if(yt.isInfinity())return!0;yt.normalize();var ir=yt.x.redSqr(),_c=yt.y.redSqr(),mu=ir.redMul(this.a).redAdd(_c),Mu=this.c2.redMul(this.one.redAdd(this.d.redMul(ir).redMul(_c)));return mu.cmp(Mu)===0},fle(u_,wN.BasePoint),c_.prototype.pointFromJSON=function(yt){return u_.fromJSON(this,yt)},c_.prototype.point=function(yt,ir,_c,mu){return new u_(this,yt,ir,_c,mu)},u_.fromJSON=function(yt,ir){return new u_(yt,ir[0],ir[1],ir[2])},u_.prototype.inspect=function(){return this.isInfinity()?"":""},u_.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},u_.prototype._extDbl=function(){var yt=this.x.redSqr(),ir=this.y.redSqr(),_c=this.z.redSqr();_c=_c.redIAdd(_c);var mu=this.curve._mulA(yt),Mu=this.x.redAdd(this.y).redSqr().redISub(yt).redISub(ir),Su=mu.redAdd(ir),l0=Su.redSub(_c),E0=mu.redSub(ir),j0=Mu.redMul(l0),M0=Su.redMul(E0),B0=Mu.redMul(E0),V0=l0.redMul(Su);return this.curve.point(j0,M0,V0,B0)},u_.prototype._projDbl=function(){var yt,ir,_c,mu,Mu,Su,l0=this.x.redAdd(this.y).redSqr(),E0=this.x.redSqr(),j0=this.y.redSqr();if(this.curve.twisted){var M0=(mu=this.curve._mulA(E0)).redAdd(j0);this.zOne?(yt=l0.redSub(E0).redSub(j0).redMul(M0.redSub(this.curve.two)),ir=M0.redMul(mu.redSub(j0)),_c=M0.redSqr().redSub(M0).redSub(M0)):(Mu=this.z.redSqr(),Su=M0.redSub(Mu).redISub(Mu),yt=l0.redSub(E0).redISub(j0).redMul(Su),ir=M0.redMul(mu.redSub(j0)),_c=M0.redMul(Su))}else mu=E0.redAdd(j0),Mu=this.curve._mulC(this.z).redSqr(),Su=mu.redSub(Mu).redSub(Mu),yt=this.curve._mulC(l0.redISub(mu)).redMul(Su),ir=this.curve._mulC(mu).redMul(E0.redISub(j0)),_c=mu.redMul(Su);return this.curve.point(yt,ir,_c)},u_.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u_.prototype._extAdd=function(yt){var ir=this.y.redSub(this.x).redMul(yt.y.redSub(yt.x)),_c=this.y.redAdd(this.x).redMul(yt.y.redAdd(yt.x)),mu=this.t.redMul(this.curve.dd).redMul(yt.t),Mu=this.z.redMul(yt.z.redAdd(yt.z)),Su=_c.redSub(ir),l0=Mu.redSub(mu),E0=Mu.redAdd(mu),j0=_c.redAdd(ir),M0=Su.redMul(l0),B0=E0.redMul(j0),V0=Su.redMul(j0),y1=l0.redMul(E0);return this.curve.point(M0,B0,y1,V0)},u_.prototype._projAdd=function(yt){var ir,_c,mu=this.z.redMul(yt.z),Mu=mu.redSqr(),Su=this.x.redMul(yt.x),l0=this.y.redMul(yt.y),E0=this.curve.d.redMul(Su).redMul(l0),j0=Mu.redSub(E0),M0=Mu.redAdd(E0),B0=this.x.redAdd(this.y).redMul(yt.x.redAdd(yt.y)).redISub(Su).redISub(l0),V0=mu.redMul(j0).redMul(B0);return this.curve.twisted?(ir=mu.redMul(M0).redMul(l0.redSub(this.curve._mulA(Su))),_c=j0.redMul(M0)):(ir=mu.redMul(M0).redMul(l0.redSub(Su)),_c=this.curve._mulC(j0).redMul(M0)),this.curve.point(V0,ir,_c)},u_.prototype.add=function(yt){return this.isInfinity()?yt:yt.isInfinity()?this:this.curve.extended?this._extAdd(yt):this._projAdd(yt)},u_.prototype.mul=function(yt){return this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve._wnafMul(this,yt)},u_.prototype.mulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!1)},u_.prototype.jmulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!0)},u_.prototype.normalize=function(){if(this.zOne)return this;var yt=this.z.redInvm();return this.x=this.x.redMul(yt),this.y=this.y.redMul(yt),this.t&&(this.t=this.t.redMul(yt)),this.z=this.curve.one,this.zOne=!0,this},u_.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u_.prototype.getX=function(){return this.normalize(),this.x.fromRed()},u_.prototype.getY=function(){return this.normalize(),this.y.fromRed()},u_.prototype.eq=function(yt){return this===yt||this.getX().cmp(yt.getX())===0&&this.getY().cmp(yt.getY())===0},u_.prototype.eqXToP=function(yt){var ir=yt.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(ir)===0)return!0;for(var _c=yt.clone(),mu=this.curve.redN.redMul(this.z);;){if(_c.iadd(this.curve.n),_c.cmp(this.curve.p)>=0)return!1;if(ir.redIAdd(mu),this.x.cmp(ir)===0)return!0}},u_.prototype.toP=u_.prototype.normalize,u_.prototype.mixedAdd=u_.prototype.add,function(yt){var ir=yt;ir.base=hB,ir.short=U8,ir.mont=rH,ir.edwards=$N}(I4);var SF={},GY={},W$={},C0e=Zx,E_=Gw;function YY(yt,ir){return(64512&yt.charCodeAt(ir))==55296&&!(ir<0||ir+1>=yt.length)&&(64512&yt.charCodeAt(ir+1))==56320}function P4(yt){return(yt>>>24|yt>>>8&65280|yt<<8&16711680|(255&yt)<<24)>>>0}function xE(yt){return yt.length===1?"0"+yt:yt}function dle(yt){return yt.length===7?"0"+yt:yt.length===6?"00"+yt:yt.length===5?"000"+yt:yt.length===4?"0000"+yt:yt.length===3?"00000"+yt:yt.length===2?"000000"+yt:yt.length===1?"0000000"+yt:yt}W$.inherits=E_,W$.toArray=function(yt,ir){if(Array.isArray(yt))return yt.slice();if(!yt)return[];var _c=[];if(typeof yt=="string")if(ir){if(ir==="hex")for((yt=yt.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(yt="0"+yt),Mu=0;Mu>6|192,_c[mu++]=63&Su|128):YY(yt,Mu)?(Su=65536+((1023&Su)<<10)+(1023&yt.charCodeAt(++Mu)),_c[mu++]=Su>>18|240,_c[mu++]=Su>>12&63|128,_c[mu++]=Su>>6&63|128,_c[mu++]=63&Su|128):(_c[mu++]=Su>>12|224,_c[mu++]=Su>>6&63|128,_c[mu++]=63&Su|128)}else for(Mu=0;Mu>>0}return Su},W$.split32=function(yt,ir){for(var _c=new Array(4*yt.length),mu=0,Mu=0;mu>>24,_c[Mu+1]=Su>>>16&255,_c[Mu+2]=Su>>>8&255,_c[Mu+3]=255&Su):(_c[Mu+3]=Su>>>24,_c[Mu+2]=Su>>>16&255,_c[Mu+1]=Su>>>8&255,_c[Mu]=255&Su)}return _c},W$.rotr32=function(yt,ir){return yt>>>ir|yt<<32-ir},W$.rotl32=function(yt,ir){return yt<>>32-ir},W$.sum32=function(yt,ir){return yt+ir>>>0},W$.sum32_3=function(yt,ir,_c){return yt+ir+_c>>>0},W$.sum32_4=function(yt,ir,_c,mu){return yt+ir+_c+mu>>>0},W$.sum32_5=function(yt,ir,_c,mu,Mu){return yt+ir+_c+mu+Mu>>>0},W$.sum64=function(yt,ir,_c,mu){var Mu=yt[ir],Su=mu+yt[ir+1]>>>0,l0=(Su>>0,yt[ir+1]=Su},W$.sum64_hi=function(yt,ir,_c,mu){return(ir+mu>>>0>>0},W$.sum64_lo=function(yt,ir,_c,mu){return ir+mu>>>0},W$.sum64_4_hi=function(yt,ir,_c,mu,Mu,Su,l0,E0){var j0=0,M0=ir;return j0+=(M0=M0+mu>>>0)>>0)>>0)>>0},W$.sum64_4_lo=function(yt,ir,_c,mu,Mu,Su,l0,E0){return ir+mu+Su+E0>>>0},W$.sum64_5_hi=function(yt,ir,_c,mu,Mu,Su,l0,E0,j0,M0){var B0=0,V0=ir;return B0+=(V0=V0+mu>>>0)>>0)>>0)>>0)>>0},W$.sum64_5_lo=function(yt,ir,_c,mu,Mu,Su,l0,E0,j0,M0){return ir+mu+Su+E0+M0>>>0},W$.rotr64_hi=function(yt,ir,_c){return(ir<<32-_c|yt>>>_c)>>>0},W$.rotr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0},W$.shr64_hi=function(yt,ir,_c){return yt>>>_c},W$.shr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0};var nH={},hle=W$,ple=Zx;function j4(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}nH.BlockHash=j4,j4.prototype.update=function(yt,ir){if(yt=hle.toArray(yt,ir),this.pending?this.pending=this.pending.concat(yt):this.pending=yt,this.pendingTotal+=yt.length,this.pending.length>=this._delta8){var _c=(yt=this.pending).length%this._delta8;this.pending=yt.slice(yt.length-_c,yt.length),this.pending.length===0&&(this.pending=null),yt=hle.join32(yt,0,yt.length-_c,this.endian);for(var mu=0;mu>>24&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>8&255,mu[Mu++]=255&yt}else for(mu[Mu++]=255&yt,mu[Mu++]=yt>>>8&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>24&255,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,Su=8;Su>>3},eC.g1_256=function(yt){return QI(yt,17)^QI(yt,19)^yt>>>10};var tC=W$,kO=nH,gle=eC,ZY=tC.rotl32,iH=tC.sum32,oH=tC.sum32_5,T0e=gle.ft_1,vle=kO.BlockHash,Rte=[1518500249,1859775393,2400959708,3395469782];function WC(){if(!(this instanceof WC))return new WC;vle.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}tC.inherits(WC,vle);var R0e=WC;WC.blockSize=512,WC.outSize=160,WC.hmacStrength=80,WC.padLength=64,WC.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=ZY(_c[mu-3]^_c[mu-8]^_c[mu-14]^_c[mu-16],1);var Mu=this.h[0],Su=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4];for(mu=0;mu<_c.length;mu++){var M0=~~(mu/20),B0=oH(ZY(Mu,5),T0e(M0,Su,l0,E0),j0,_c[mu],Rte[M0]);j0=E0,E0=l0,l0=ZY(Su,30),Su=Mu,Mu=B0}this.h[0]=iH(this.h[0],Mu),this.h[1]=iH(this.h[1],Su),this.h[2]=iH(this.h[2],l0),this.h[3]=iH(this.h[3],E0),this.h[4]=iH(this.h[4],j0)},WC.prototype._digest=function(yt){return yt==="hex"?tC.toHex32(this.h,"big"):tC.split32(this.h,"big")};var aH=W$,yle=nH,sH=eC,CO=Zx,e5=aH.sum32,lH=aH.sum32_4,M0e=aH.sum32_5,cH=sH.ch32,I0e=sH.maj32,t5=sH.s0_256,O0e=sH.s1_256,P0e=sH.g0_256,j0e=sH.g1_256,ble=yle.BlockHash,N0e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function TO(){if(!(this instanceof TO))return new TO;ble.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=N0e,this.W=new Array(64)}aH.inherits(TO,ble);var wle=TO;TO.blockSize=512,TO.outSize=256,TO.hmacStrength=192,TO.padLength=64,TO.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=lH(j0e(_c[mu-2]),_c[mu-7],P0e(_c[mu-15]),_c[mu-16]);var Mu=this.h[0],Su=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4],M0=this.h[5],B0=this.h[6],V0=this.h[7];for(CO(this.k.length===_c.length),mu=0;mu<_c.length;mu++){var y1=M0e(V0,O0e(j0),cH(j0,M0,B0),this.k[mu],_c[mu]),v1=e5(t5(Mu),I0e(Mu,Su,l0));V0=B0,B0=M0,M0=j0,j0=e5(E0,y1),E0=l0,l0=Su,Su=Mu,Mu=e5(y1,v1)}this.h[0]=e5(this.h[0],Mu),this.h[1]=e5(this.h[1],Su),this.h[2]=e5(this.h[2],l0),this.h[3]=e5(this.h[3],E0),this.h[4]=e5(this.h[4],j0),this.h[5]=e5(this.h[5],M0),this.h[6]=e5(this.h[6],B0),this.h[7]=e5(this.h[7],V0)},TO.prototype._digest=function(yt){return yt==="hex"?aH.toHex32(this.h,"big"):aH.split32(this.h,"big")};var Mte=W$,Ite=wle;function EN(){if(!(this instanceof EN))return new EN;Ite.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}Mte.inherits(EN,Ite);var RO=EN;EN.blockSize=512,EN.outSize=224,EN.hmacStrength=192,EN.padLength=64,EN.prototype._digest=function(yt){return yt==="hex"?Mte.toHex32(this.h.slice(0,7),"big"):Mte.split32(this.h.slice(0,7),"big")};var rC=W$,Ote=nH,$le=Zx,R7=rC.rotr64_hi,MO=rC.rotr64_lo,nC=rC.shr64_hi,Ele=rC.shr64_lo,pB=rC.sum64,EM=rC.sum64_hi,AM=rC.sum64_lo,Ale=rC.sum64_4_hi,_le=rC.sum64_4_lo,mB=rC.sum64_5_hi,Pte=rC.sum64_5_lo,JY=Ote.BlockHash,L0e=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function r5(){if(!(this instanceof r5))return new r5;JY.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=L0e,this.W=new Array(160)}rC.inherits(r5,JY);var Sle=r5;function B0e(yt,ir,_c,mu,Mu){var Su=yt&_c^~ytΜreturn Su<0&&(Su+=4294967296),Su}function xle(yt,ir,_c,mu,Mu,Su){var l0=ir&mu^~ir&Su;return l0<0&&(l0+=4294967296),l0}function D0e(yt,ir,_c,mu,Mu){var Su=yt&_c^yt&Mu^_cΜreturn Su<0&&(Su+=4294967296),Su}function n5(yt,ir,_c,mu,Mu,Su){var l0=ir&mu^ir&Su^mu&Su;return l0<0&&(l0+=4294967296),l0}function kle(yt,ir){var _c=R7(yt,ir,28)^R7(ir,yt,2)^R7(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function F0e(yt,ir){var _c=MO(yt,ir,28)^MO(ir,yt,2)^MO(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function U0e(yt,ir){var _c=R7(yt,ir,14)^R7(yt,ir,18)^R7(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function z0e(yt,ir){var _c=MO(yt,ir,14)^MO(yt,ir,18)^MO(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function H0e(yt,ir){var _c=R7(yt,ir,1)^R7(yt,ir,8)^nC(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function K0e(yt,ir){var _c=MO(yt,ir,1)^MO(yt,ir,8)^Ele(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function V0e(yt,ir){var _c=R7(yt,ir,19)^R7(ir,yt,29)^nC(yt,ir,6);return _c<0&&(_c+=4294967296),_c}function q0e(yt,ir){var _c=MO(yt,ir,19)^MO(ir,yt,29)^Ele(yt,ir,6);return _c<0&&(_c+=4294967296),_c}r5.blockSize=1024,r5.outSize=512,r5.hmacStrength=192,r5.padLength=128,r5.prototype._prepareBlock=function(yt,ir){for(var _c=this.W,mu=0;mu<32;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu+=2){var Mu=V0e(_c[mu-4],_c[mu-3]),Su=q0e(_c[mu-4],_c[mu-3]),l0=_c[mu-14],E0=_c[mu-13],j0=H0e(_c[mu-30],_c[mu-29]),M0=K0e(_c[mu-30],_c[mu-29]),B0=_c[mu-32],V0=_c[mu-31];_c[mu]=Ale(Mu,Su,l0,E0,j0,M0,B0,V0),_c[mu+1]=_le(Mu,Su,l0,E0,j0,M0,B0,V0)}},r5.prototype._update=function(yt,ir){this._prepareBlock(yt,ir);var _c=this.W,mu=this.h[0],Mu=this.h[1],Su=this.h[2],l0=this.h[3],E0=this.h[4],j0=this.h[5],M0=this.h[6],B0=this.h[7],V0=this.h[8],y1=this.h[9],v1=this.h[10],F1=this.h[11],ov=this.h[12],bv=this.h[13],gv=this.h[14],xv=this.h[15];$le(this.k.length===_c.length);for(var hy=0;hy<_c.length;hy+=2){var oy=gv,fy=xv,Fy=U0e(V0,y1),qv=z0e(V0,y1),Qv=B0e(V0,0,v1,0,ov),T0=xle(0,y1,0,F1,0,bv),X0=this.k[hy],s0=this.k[hy+1],g0=_c[hy],d0=_c[hy+1],c0=mB(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0),a0=Pte(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0);oy=kle(mu,Mu),fy=F0e(mu,Mu),Fy=D0e(mu,0,Su,0,E0),qv=n5(0,Mu,0,l0,0,j0);var S0=EM(oy,fy,Fy,qv),z0=AM(oy,fy,Fy,qv);gv=ov,xv=bv,ov=v1,bv=F1,v1=V0,F1=y1,V0=EM(M0,B0,c0,a0),y1=AM(B0,B0,c0,a0),M0=E0,B0=j0,E0=Su,j0=l0,Su=mu,l0=Mu,mu=EM(c0,a0,S0,z0),Mu=AM(c0,a0,S0,z0)}pB(this.h,0,mu,Mu),pB(this.h,2,Su,l0),pB(this.h,4,E0,j0),pB(this.h,6,M0,B0),pB(this.h,8,V0,y1),pB(this.h,10,v1,F1),pB(this.h,12,ov,bv),pB(this.h,14,gv,xv)},r5.prototype._digest=function(yt){return yt==="hex"?rC.toHex32(this.h,"big"):rC.split32(this.h,"big")};var jte=W$,Cle=Sle;function AN(){if(!(this instanceof AN))return new AN;Cle.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}jte.inherits(AN,Cle);var W0e=AN;AN.blockSize=1024,AN.outSize=384,AN.hmacStrength=192,AN.padLength=128,AN.prototype._digest=function(yt){return yt==="hex"?jte.toHex32(this.h.slice(0,12),"big"):jte.split32(this.h.slice(0,12),"big")},xF.sha1=R0e,xF.sha224=RO,xF.sha256=wle,xF.sha384=W0e,xF.sha512=Sle;var Tle={},_N=W$,Rle=nH,_M=_N.rotl32,Mle=_N.sum32,uH=_N.sum32_3,gB=_N.sum32_4,Ile=Rle.BlockHash;function hR(){if(!(this instanceof hR))return new hR;Ile.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function Nte(yt,ir,_c,mu){return yt<=15?ir^_c^mu:yt<=31?ir&_c|~ir&mu:yt<=47?(ir|~_c)^mu:yt<=63?ir&mu|_c&~mu:ir^(_c|~mu)}function B4(yt){return yt<=15?0:yt<=31?1518500249:yt<=47?1859775393:yt<=63?2400959708:2840853838}function Ole(yt){return yt<=15?1352829926:yt<=31?1548603684:yt<=47?1836072691:yt<=63?2053994217:0}_N.inherits(hR,Ile),Tle.ripemd160=hR,hR.blockSize=512,hR.outSize=160,hR.hmacStrength=192,hR.padLength=64,hR.prototype._update=function(yt,ir){for(var _c=this.h[0],mu=this.h[1],Mu=this.h[2],Su=this.h[3],l0=this.h[4],E0=_c,j0=mu,M0=Mu,B0=Su,V0=l0,y1=0;y1<80;y1++){var v1=Mle(_M(gB(_c,Nte(y1,mu,Mu,Su),yt[Ple[y1]+ir],B4(y1)),jle[y1]),l0);_c=l0,l0=Su,Su=_M(Mu,10),Mu=mu,mu=v1,v1=Mle(_M(gB(E0,Nte(79-y1,j0,M0,B0),yt[IO[y1]+ir],Ole(y1)),G0e[y1]),V0),E0=V0,V0=B0,B0=_M(M0,10),M0=j0,j0=v1}v1=uH(this.h[1],Mu,B0),this.h[1]=uH(this.h[2],Su,V0),this.h[2]=uH(this.h[3],l0,E0),this.h[3]=uH(this.h[4],_c,j0),this.h[4]=uH(this.h[0],mu,M0),this.h[0]=v1},hR.prototype._digest=function(yt){return yt==="hex"?_N.toHex32(this.h,"little"):_N.split32(this.h,"little")};var Ple=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],IO=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],jle=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],G0e=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],Y0e=W$,Z0e=Zx;function fH(yt,ir,_c){if(!(this instanceof fH))return new fH(yt,ir,_c);this.Hash=yt,this.blockSize=yt.blockSize/8,this.outSize=yt.outSize/8,this.inner=null,this.outer=null,this._init(Y0e.toArray(ir,_c))}var Nle,Lle,J0e=fH;fH.prototype._init=function(yt){yt.length>this.blockSize&&(yt=new this.Hash().update(yt).digest()),Z0e(yt.length<=this.blockSize);for(var ir=yt.length;ir=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(ir,_c,mu)}var Q0e=SN;SN.prototype._init=function(yt,ir,_c){var mu=yt.concat(ir).concat(_c);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var Mu=0;Mu=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(yt.concat(_c||[])),this._reseed=1},SN.prototype.generate=function(yt,ir,_c,mu){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof ir!="string"&&(mu=_c,_c=ir,ir=null),_c&&(_c=SM.toArray(_c,mu||"hex"),this._update(_c));for(var Mu=[];Mu.length"};var XY=US,Bte=VC,Dte=Bte.assert;function B6(yt,ir){if(yt instanceof B6)return yt;this._importDER(yt,ir)||(Dte(yt.r&&yt.s,"Signature without r or s"),this.r=new XY(yt.r,16),this.s=new XY(yt.s,16),yt.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=yt.recoveryParam)}var Fte,D4,Ute=B6;function t1e(){this.place=0}function dH(yt,ir){var _c=yt[ir.place++];if(!(128&_c))return _c;var mu=15&_c;if(mu===0||mu>4)return!1;for(var Mu=0,Su=0,l0=ir.place;Su>>=0;return!(Mu<=127)&&(ir.place=l0,Mu)}function QY(yt){for(var ir=0,_c=yt.length-1;!yt[ir]&&!(128&yt[ir+1])&&ir<_c;)ir++;return ir===0?yt:yt.slice(ir)}function eZ(yt,ir){if(ir<128)yt.push(ir);else{var _c=1+(Math.log(ir)/Math.LN2>>>3);for(yt.push(128|_c);--_c;)yt.push(ir>>>(_c<<3)&255);yt.push(ir)}}B6.prototype._importDER=function(yt,ir){yt=Bte.toArray(yt,ir);var _c=new t1e;if(yt[_c.place++]!==48)return!1;var mu=dH(yt,_c);if(mu===!1||mu+_c.place!==yt.length||yt[_c.place++]!==2)return!1;var Mu=dH(yt,_c);if(Mu===!1)return!1;var Su=yt.slice(_c.place,Mu+_c.place);if(_c.place+=Mu,yt[_c.place++]!==2)return!1;var l0=dH(yt,_c);if(l0===!1||yt.length!==l0+_c.place)return!1;var E0=yt.slice(_c.place,l0+_c.place);if(Su[0]===0){if(!(128&Su[1]))return!1;Su=Su.slice(1)}if(E0[0]===0){if(!(128&E0[1]))return!1;E0=E0.slice(1)}return this.r=new XY(Su),this.s=new XY(E0),this.recoveryParam=null,!0},B6.prototype.toDER=function(yt){var ir=this.r.toArray(),_c=this.s.toArray();for(128&ir[0]&&(ir=[0].concat(ir)),128&_c[0]&&(_c=[0].concat(_c)),ir=QY(ir),_c=QY(_c);!(_c[0]||128&_c[1]);)_c=_c.slice(1);var mu=[2];eZ(mu,ir.length),(mu=mu.concat(ir)).push(2),eZ(mu,_c.length);var Mu=mu.concat(_c),Su=[48];return eZ(Su,Mu.length),Su=Su.concat(Mu),Bte.encode(Su,yt)};var F4=VC,Ble=F4.assert,tZ=F4.parseBytes,CF=F4.cachedProperty;function HS(yt,ir){this.eddsa=yt,this._secret=tZ(ir.secret),yt.isPoint(ir.pub)?this._pub=ir.pub:this._pubBytes=tZ(ir.pub)}HS.fromPublic=function(yt,ir){return ir instanceof HS?ir:new HS(yt,{pub:ir})},HS.fromSecret=function(yt,ir){return ir instanceof HS?ir:new HS(yt,{secret:ir})},HS.prototype.secret=function(){return this._secret},CF(HS,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),CF(HS,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),CF(HS,"privBytes",function(){var yt=this.eddsa,ir=this.hash(),_c=yt.encodingLength-1,mu=ir.slice(0,yt.encodingLength);return mu[0]&=248,mu[_c]&=127,mu[_c]|=64,mu}),CF(HS,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),CF(HS,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),CF(HS,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),HS.prototype.sign=function(yt){return Ble(this._secret,"KeyPair can only verify"),this.eddsa.sign(yt,this)},HS.prototype.verify=function(yt,ir){return this.eddsa.verify(yt,ir,this)},HS.prototype.getSecret=function(yt){return Ble(this._secret,"KeyPair is public only"),F4.encode(this.secret(),yt)},HS.prototype.getPublic=function(yt){return F4.encode(this.pubBytes(),yt)};var U4=HS,Dle=US,z4=VC,hH=z4.assert,lS=z4.cachedProperty,r1e=z4.parseBytes;function TF(yt,ir){this.eddsa=yt,typeof ir!="object"&&(ir=r1e(ir)),Array.isArray(ir)&&(ir={R:ir.slice(0,yt.encodingLength),S:ir.slice(yt.encodingLength)}),hH(ir.R&&ir.S,"Signature without R or S"),yt.isPoint(ir.R)&&(this._R=ir.R),ir.S instanceof Dle&&(this._S=ir.S),this._Rencoded=Array.isArray(ir.R)?ir.R:ir.Rencoded,this._Sencoded=Array.isArray(ir.S)?ir.S:ir.Sencoded}lS(TF,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),lS(TF,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),lS(TF,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),lS(TF,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),TF.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},TF.prototype.toHex=function(){return z4.encode(this.toBytes(),"hex").toUpperCase()};var rZ=TF,n1e=GY,nZ=SF,pH=VC,RF=pH.assert,Fle=pH.parseBytes,Ule=U4,zle=rZ;function D6(yt){if(RF(yt==="ed25519","only tested with ed25519 so far"),!(this instanceof D6))return new D6(yt);yt=nZ[yt].curve,this.curve=yt,this.g=yt.g,this.g.precompute(yt.n.bitLength()+1),this.pointClass=yt.point().constructor,this.encodingLength=Math.ceil(yt.n.bitLength()/8),this.hash=n1e.sha512}var Hle,Kle=D6;function iZ(){return Hle||(Hle=1,function(yt){var ir=yt;ir.version=x0e.version,ir.utils=VC,ir.rand=M4(),ir.curve=I4,ir.curves=SF,ir.ec=function(){if(D4)return Fte;D4=1;var _c=US,mu=Q0e,Mu=VC,Su=SF,l0=M4(),E0=Mu.assert,j0=vB,M0=Ute;function B0(V0){if(!(this instanceof B0))return new B0(V0);typeof V0=="string"&&(E0(Object.prototype.hasOwnProperty.call(Su,V0),"Unknown curve "+V0),V0=Su[V0]),V0 instanceof Su.PresetCurve&&(V0={curve:V0}),this.curve=V0.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=V0.curve.g,this.g.precompute(V0.curve.n.bitLength()+1),this.hash=V0.hash||V0.curve.hash}return Fte=B0,B0.prototype.keyPair=function(V0){return new j0(this,V0)},B0.prototype.keyFromPrivate=function(V0,y1){return j0.fromPrivate(this,V0,y1)},B0.prototype.keyFromPublic=function(V0,y1){return j0.fromPublic(this,V0,y1)},B0.prototype.genKeyPair=function(V0){V0||(V0={});for(var y1=new mu({hash:this.hash,pers:V0.pers,persEnc:V0.persEnc||"utf8",entropy:V0.entropy||l0(this.hash.hmacStrength),entropyEnc:V0.entropy&&V0.entropyEnc||"utf8",nonce:this.n.toArray()}),v1=this.n.byteLength(),F1=this.n.sub(new _c(2));;){var ov=new _c(y1.generate(v1));if(!(ov.cmp(F1)>0))return ov.iaddn(1),this.keyFromPrivate(ov)}},B0.prototype._truncateToN=function(V0,y1){var v1=8*V0.byteLength()-this.n.bitLength();return v1>0&&(V0=V0.ushrn(v1)),!y1&&V0.cmp(this.n)>=0?V0.sub(this.n):V0},B0.prototype.sign=function(V0,y1,v1,F1){typeof v1=="object"&&(F1=v1,v1=null),F1||(F1={}),y1=this.keyFromPrivate(y1,v1),V0=this._truncateToN(new _c(V0,16));for(var ov=this.n.byteLength(),bv=y1.getPrivate().toArray("be",ov),gv=V0.toArray("be",ov),xv=new mu({hash:this.hash,entropy:bv,nonce:gv,pers:F1.pers,persEnc:F1.persEnc||"utf8"}),hy=this.n.sub(new _c(1)),oy=0;;oy++){var fy=F1.k?F1.k(oy):new _c(xv.generate(this.n.byteLength()));if(!((fy=this._truncateToN(fy,!0)).cmpn(1)<=0||fy.cmp(hy)>=0)){var Fy=this.g.mul(fy);if(!Fy.isInfinity()){var qv=Fy.getX(),Qv=qv.umod(this.n);if(Qv.cmpn(0)!==0){var T0=fy.invm(this.n).mul(Qv.mul(y1.getPrivate()).iadd(V0));if((T0=T0.umod(this.n)).cmpn(0)!==0){var X0=(Fy.getY().isOdd()?1:0)|(qv.cmp(Qv)!==0?2:0);return F1.canonical&&T0.cmp(this.nh)>0&&(T0=this.n.sub(T0),X0^=1),new M0({r:Qv,s:T0,recoveryParam:X0})}}}}}},B0.prototype.verify=function(V0,y1,v1,F1){V0=this._truncateToN(new _c(V0,16)),v1=this.keyFromPublic(v1,F1);var ov=(y1=new M0(y1,"hex")).r,bv=y1.s;if(ov.cmpn(1)<0||ov.cmp(this.n)>=0||bv.cmpn(1)<0||bv.cmp(this.n)>=0)return!1;var gv,xv=bv.invm(this.n),hy=xv.mul(V0).umod(this.n),oy=xv.mul(ov).umod(this.n);return this.curve._maxwellTrick?!(gv=this.g.jmulAdd(hy,v1.getPublic(),oy)).isInfinity()&&gv.eqXToP(ov):!(gv=this.g.mulAdd(hy,v1.getPublic(),oy)).isInfinity()&&gv.getX().umod(this.n).cmp(ov)===0},B0.prototype.recoverPubKey=function(V0,y1,v1,F1){E0((3&v1)===v1,"The recovery param is more than two bits"),y1=new M0(y1,F1);var ov=this.n,bv=new _c(V0),gv=y1.r,xv=y1.s,hy=1&v1,oy=v1>>1;if(gv.cmp(this.curve.p.umod(this.curve.n))>=0&&oy)throw new Error("Unable to find sencond key candinate");gv=oy?this.curve.pointFromX(gv.add(this.curve.n),hy):this.curve.pointFromX(gv,hy);var fy=y1.r.invm(ov),Fy=ov.sub(bv).mul(fy).umod(ov),qv=xv.mul(fy).umod(ov);return this.g.mulAdd(Fy,gv,qv)},B0.prototype.getKeyRecoveryParam=function(V0,y1,v1,F1){if((y1=new M0(y1,F1)).recoveryParam!==null)return y1.recoveryParam;for(var ov=0;ov<4;ov++){var bv;try{bv=this.recoverPubKey(V0,y1,ov)}catch{continue}if(bv.eq(v1))return ov}throw new Error("Unable to find valid recovery factor")},Fte}(),ir.eddsa=Kle}(_F)),_F}D6.prototype.sign=function(yt,ir){yt=Fle(yt);var _c=this.keyFromSecret(ir),mu=this.hashInt(_c.messagePrefix(),yt),Mu=this.g.mul(mu),Su=this.encodePoint(Mu),l0=this.hashInt(Su,_c.pubBytes(),yt).mul(_c.priv()),E0=mu.add(l0).umod(this.curve.n);return this.makeSignature({R:Mu,S:E0,Rencoded:Su})},D6.prototype.verify=function(yt,ir,_c){yt=Fle(yt),ir=this.makeSignature(ir);var mu=this.keyFromPublic(_c),Mu=this.hashInt(ir.Rencoded(),mu.pubBytes(),yt),Su=this.g.mul(ir.S());return ir.R().add(mu.pub().mul(Mu)).eq(Su)},D6.prototype.hashInt=function(){for(var yt=this.hash(),ir=0;ir=48&&d0<=57?d0-48:d0>=65&&d0<=70?d0-55:d0>=97&&d0<=102?d0-87:void mu(!1,"Invalid character in "+s0)}function j0(s0,g0,d0){var c0=E0(s0,d0);return d0-1>=g0&&(c0|=E0(s0,d0-1)<<4),c0}function M0(s0,g0,d0,c0){for(var a0=0,S0=0,z0=Math.min(s0.length,d0),Q0=g0;Q0=49?p1-49+10:p1>=17?p1-17+10:p1,mu(p1>=0&&S00?s0:g0},Su.min=function(s0,g0){return s0.cmp(g0)<0?s0:g0},Su.prototype._init=function(s0,g0,d0){if(typeof s0=="number")return this._initNumber(s0,g0,d0);if(typeof s0=="object")return this._initArray(s0,g0,d0);g0==="hex"&&(g0=16),mu(g0===(0|g0)&&g0>=2&&g0<=36);var c0=0;(s0=s0.toString().replace(/\s+/g,""))[0]==="-"&&(c0++,this.negative=1),c0=0;c0-=3)S0=s0[c0]|s0[c0-1]<<8|s0[c0-2]<<16,this.words[a0]|=S0<>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);else if(d0==="le")for(c0=0,a0=0;c0>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);return this._strip()},Su.prototype._parseHex=function(s0,g0,d0){this.length=Math.ceil((s0.length-g0)/6),this.words=new Array(this.length);for(var c0=0;c0=g0;c0-=2)a0=j0(s0,g0,c0)<=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;else for(c0=(s0.length-g0)%2==0?g0+1:g0;c0=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;this._strip()},Su.prototype._parseBase=function(s0,g0,d0){this.words=[0],this.length=1;for(var c0=0,a0=1;a0<=67108863;a0*=g0)c0++;c0--,a0=a0/g0|0;for(var S0=s0.length-d0,z0=S0%c0,Q0=Math.min(S0,S0-z0)+d0,p1=0,T1=d0;T11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},Su.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{Su.prototype[Symbol.for("nodejs.util.inspect.custom")]=V0}catch{Su.prototype.inspect=V0}else Su.prototype.inspect=V0;function V0(){return(this.red?""}var y1=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v1=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],F1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function ov(s0,g0,d0){d0.negative=g0.negative^s0.negative;var c0=s0.length+g0.length|0;d0.length=c0,c0=c0-1|0;var a0=0|s0.words[0],S0=0|g0.words[0],z0=a0*S0,Q0=67108863&z0,p1=z0/67108864|0;d0.words[0]=Q0;for(var T1=1;T1>>26,S1=67108863&p1,n1=Math.min(T1,g0.length-1),V1=Math.max(0,T1-s0.length+1);V1<=n1;V1++){var J1=T1-V1|0;U1+=(z0=(a0=0|s0.words[J1])*(S0=0|g0.words[V1])+S1)/67108864|0,S1=67108863&z0}d0.words[T1]=0|S1,p1=0|U1}return p1!==0?d0.words[T1]=0|p1:d0.length--,d0._strip()}Su.prototype.toString=function(s0,g0){var d0;if(g0=0|g0||1,(s0=s0||10)===16||s0==="hex"){d0="";for(var c0=0,a0=0,S0=0;S0>>24-c0&16777215,(c0+=2)>=26&&(c0-=26,S0--),d0=a0!==0||S0!==this.length-1?y1[6-Q0.length]+Q0+d0:Q0+d0}for(a0!==0&&(d0=a0.toString(16)+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}if(s0===(0|s0)&&s0>=2&&s0<=36){var p1=v1[s0],T1=F1[s0];d0="";var U1=this.clone();for(U1.negative=0;!U1.isZero();){var S1=U1.modrn(T1).toString(s0);d0=(U1=U1.idivn(T1)).isZero()?S1+d0:y1[p1-S1.length]+S1+d0}for(this.isZero()&&(d0="0"+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}mu(!1,"Base should be between 2 and 36")},Su.prototype.toNumber=function(){var s0=this.words[0];return this.length===2?s0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?s0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-s0:s0},Su.prototype.toJSON=function(){return this.toString(16,2)},l0&&(Su.prototype.toBuffer=function(s0,g0){return this.toArrayLike(l0,s0,g0)}),Su.prototype.toArray=function(s0,g0){return this.toArrayLike(Array,s0,g0)},Su.prototype.toArrayLike=function(s0,g0,d0){this._strip();var c0=this.byteLength(),a0=d0||Math.max(1,c0);mu(c0<=a0,"byte array longer than desired length"),mu(a0>0,"Requested array length <= 0");var S0=function(z0,Q0){return z0.allocUnsafe?z0.allocUnsafe(Q0):new z0(Q0)}(s0,a0);return this["_toArrayLike"+(g0==="le"?"LE":"BE")](S0,c0),S0},Su.prototype._toArrayLikeLE=function(s0,g0){for(var d0=0,c0=0,a0=0,S0=0;a0>8&255),d0>16&255),S0===6?(d0>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0=0&&(s0[d0--]=z0>>8&255),d0>=0&&(s0[d0--]=z0>>16&255),S0===6?(d0>=0&&(s0[d0--]=z0>>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0>=0)for(s0[d0--]=c0;d0>=0;)s0[d0--]=0},Math.clz32?Su.prototype._countBits=function(s0){return 32-Math.clz32(s0)}:Su.prototype._countBits=function(s0){var g0=s0,d0=0;return g0>=4096&&(d0+=13,g0>>>=13),g0>=64&&(d0+=7,g0>>>=7),g0>=8&&(d0+=4,g0>>>=4),g0>=2&&(d0+=2,g0>>>=2),d0+g0},Su.prototype._zeroBits=function(s0){if(s0===0)return 26;var g0=s0,d0=0;return!(8191&g0)&&(d0+=13,g0>>>=13),!(127&g0)&&(d0+=7,g0>>>=7),!(15&g0)&&(d0+=4,g0>>>=4),!(3&g0)&&(d0+=2,g0>>>=2),!(1&g0)&&d0++,d0},Su.prototype.bitLength=function(){var s0=this.words[this.length-1],g0=this._countBits(s0);return 26*(this.length-1)+g0},Su.prototype.zeroBits=function(){if(this.isZero())return 0;for(var s0=0,g0=0;g0s0.length?this.clone().ior(s0):s0.clone().ior(this)},Su.prototype.uor=function(s0){return this.length>s0.length?this.clone().iuor(s0):s0.clone().iuor(this)},Su.prototype.iuand=function(s0){var g0;g0=this.length>s0.length?s0:this;for(var d0=0;d0s0.length?this.clone().iand(s0):s0.clone().iand(this)},Su.prototype.uand=function(s0){return this.length>s0.length?this.clone().iuand(s0):s0.clone().iuand(this)},Su.prototype.iuxor=function(s0){var g0,d0;this.length>s0.length?(g0=this,d0=s0):(g0=s0,d0=this);for(var c0=0;c0s0.length?this.clone().ixor(s0):s0.clone().ixor(this)},Su.prototype.uxor=function(s0){return this.length>s0.length?this.clone().iuxor(s0):s0.clone().iuxor(this)},Su.prototype.inotn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=0|Math.ceil(s0/26),d0=s0%26;this._expand(g0),d0>0&&g0--;for(var c0=0;c00&&(this.words[c0]=~this.words[c0]&67108863>>26-d0),this._strip()},Su.prototype.notn=function(s0){return this.clone().inotn(s0)},Su.prototype.setn=function(s0,g0){mu(typeof s0=="number"&&s0>=0);var d0=s0/26|0,c0=s0%26;return this._expand(d0+1),this.words[d0]=g0?this.words[d0]|1<s0.length?(d0=this,c0=s0):(d0=s0,c0=this);for(var a0=0,S0=0;S0>>26;for(;a0!==0&&S0>>26;if(this.length=d0.length,a0!==0)this.words[this.length]=a0,this.length++;else if(d0!==this)for(;S0s0.length?this.clone().iadd(s0):s0.clone().iadd(this)},Su.prototype.isub=function(s0){if(s0.negative!==0){s0.negative=0;var g0=this.iadd(s0);return s0.negative=1,g0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(s0),this.negative=1,this._normSign();var d0,c0,a0=this.cmp(s0);if(a0===0)return this.negative=0,this.length=1,this.words[0]=0,this;a0>0?(d0=this,c0=s0):(d0=s0,c0=this);for(var S0=0,z0=0;z0>26,this.words[z0]=67108863&g0;for(;S0!==0&&z0>26,this.words[z0]=67108863&g0;if(S0===0&&z0>>13,V1=0|z0[1],J1=8191&V1,wv=V1>>>13,Sv=0|z0[2],Hv=8191&Sv,ty=Sv>>>13,gy=0|z0[3],yv=8191&gy,Av=gy>>>13,Dv=0|z0[4],ry=8191&Dv,Jv=Dv>>>13,Fv=0|z0[5],iy=8191&Fv,cy=Fv>>>13,Uy=0|z0[6],r2=8191&Uy,f2=Uy>>>13,j2=0|z0[7],mw=8191&j2,p2=j2>>>13,Vw=0|z0[8],Ew=8191&Vw,q2=Vw>>>13,$3=0|z0[9],Rw=8191&$3,K2=$3>>>13,Xw=0|Q0[0],a3=8191&Xw,F2=Xw>>>13,Qw=0|Q0[1],vt=8191&Qw,wt=Qw>>>13,Ws=0|Q0[2],pu=8191&Ws,Ru=Ws>>>13,wu=0|Q0[3],t0=8191&wu,m0=wu>>>13,k0=0|Q0[4],_0=8191&k0,R0=k0>>>13,N0=0|Q0[5],l1=8191&N0,a1=N0>>>13,x1=0|Q0[6],K1=8191&x1,W1=x1>>>13,_g=0|Q0[7],uv=8191&_g,Tv=_g>>>13,Uv=0|Q0[8],Wv=8191&Uv,ny=Uv>>>13,Rv=0|Q0[9],Gv=8191&Rv,C0=Rv>>>13;d0.negative=s0.negative^g0.negative,d0.length=19;var J0=(T1+(c0=Math.imul(S1,a3))|0)+((8191&(a0=(a0=Math.imul(S1,F2))+Math.imul(n1,a3)|0))<<13)|0;T1=((S0=Math.imul(n1,F2))+(a0>>>13)|0)+(J0>>>26)|0,J0&=67108863,c0=Math.imul(J1,a3),a0=(a0=Math.imul(J1,F2))+Math.imul(wv,a3)|0,S0=Math.imul(wv,F2);var f0=(T1+(c0=c0+Math.imul(S1,vt)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,wt)|0)+Math.imul(n1,vt)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,wt)|0)+(a0>>>13)|0)+(f0>>>26)|0,f0&=67108863,c0=Math.imul(Hv,a3),a0=(a0=Math.imul(Hv,F2))+Math.imul(ty,a3)|0,S0=Math.imul(ty,F2),c0=c0+Math.imul(J1,vt)|0,a0=(a0=a0+Math.imul(J1,wt)|0)+Math.imul(wv,vt)|0,S0=S0+Math.imul(wv,wt)|0;var v0=(T1+(c0=c0+Math.imul(S1,pu)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Ru)|0)+Math.imul(n1,pu)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Ru)|0)+(a0>>>13)|0)+(v0>>>26)|0,v0&=67108863,c0=Math.imul(yv,a3),a0=(a0=Math.imul(yv,F2))+Math.imul(Av,a3)|0,S0=Math.imul(Av,F2),c0=c0+Math.imul(Hv,vt)|0,a0=(a0=a0+Math.imul(Hv,wt)|0)+Math.imul(ty,vt)|0,S0=S0+Math.imul(ty,wt)|0,c0=c0+Math.imul(J1,pu)|0,a0=(a0=a0+Math.imul(J1,Ru)|0)+Math.imul(wv,pu)|0,S0=S0+Math.imul(wv,Ru)|0;var h0=(T1+(c0=c0+Math.imul(S1,t0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,m0)|0)+Math.imul(n1,t0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,m0)|0)+(a0>>>13)|0)+(h0>>>26)|0,h0&=67108863,c0=Math.imul(ry,a3),a0=(a0=Math.imul(ry,F2))+Math.imul(Jv,a3)|0,S0=Math.imul(Jv,F2),c0=c0+Math.imul(yv,vt)|0,a0=(a0=a0+Math.imul(yv,wt)|0)+Math.imul(Av,vt)|0,S0=S0+Math.imul(Av,wt)|0,c0=c0+Math.imul(Hv,pu)|0,a0=(a0=a0+Math.imul(Hv,Ru)|0)+Math.imul(ty,pu)|0,S0=S0+Math.imul(ty,Ru)|0,c0=c0+Math.imul(J1,t0)|0,a0=(a0=a0+Math.imul(J1,m0)|0)+Math.imul(wv,t0)|0,S0=S0+Math.imul(wv,m0)|0;var u0=(T1+(c0=c0+Math.imul(S1,_0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,R0)|0)+Math.imul(n1,_0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,R0)|0)+(a0>>>13)|0)+(u0>>>26)|0,u0&=67108863,c0=Math.imul(iy,a3),a0=(a0=Math.imul(iy,F2))+Math.imul(cy,a3)|0,S0=Math.imul(cy,F2),c0=c0+Math.imul(ry,vt)|0,a0=(a0=a0+Math.imul(ry,wt)|0)+Math.imul(Jv,vt)|0,S0=S0+Math.imul(Jv,wt)|0,c0=c0+Math.imul(yv,pu)|0,a0=(a0=a0+Math.imul(yv,Ru)|0)+Math.imul(Av,pu)|0,S0=S0+Math.imul(Av,Ru)|0,c0=c0+Math.imul(Hv,t0)|0,a0=(a0=a0+Math.imul(Hv,m0)|0)+Math.imul(ty,t0)|0,S0=S0+Math.imul(ty,m0)|0,c0=c0+Math.imul(J1,_0)|0,a0=(a0=a0+Math.imul(J1,R0)|0)+Math.imul(wv,_0)|0,S0=S0+Math.imul(wv,R0)|0;var o0=(T1+(c0=c0+Math.imul(S1,l1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,a1)|0)+Math.imul(n1,l1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,a1)|0)+(a0>>>13)|0)+(o0>>>26)|0,o0&=67108863,c0=Math.imul(r2,a3),a0=(a0=Math.imul(r2,F2))+Math.imul(f2,a3)|0,S0=Math.imul(f2,F2),c0=c0+Math.imul(iy,vt)|0,a0=(a0=a0+Math.imul(iy,wt)|0)+Math.imul(cy,vt)|0,S0=S0+Math.imul(cy,wt)|0,c0=c0+Math.imul(ry,pu)|0,a0=(a0=a0+Math.imul(ry,Ru)|0)+Math.imul(Jv,pu)|0,S0=S0+Math.imul(Jv,Ru)|0,c0=c0+Math.imul(yv,t0)|0,a0=(a0=a0+Math.imul(yv,m0)|0)+Math.imul(Av,t0)|0,S0=S0+Math.imul(Av,m0)|0,c0=c0+Math.imul(Hv,_0)|0,a0=(a0=a0+Math.imul(Hv,R0)|0)+Math.imul(ty,_0)|0,S0=S0+Math.imul(ty,R0)|0,c0=c0+Math.imul(J1,l1)|0,a0=(a0=a0+Math.imul(J1,a1)|0)+Math.imul(wv,l1)|0,S0=S0+Math.imul(wv,a1)|0;var x0=(T1+(c0=c0+Math.imul(S1,K1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,W1)|0)+Math.imul(n1,K1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,W1)|0)+(a0>>>13)|0)+(x0>>>26)|0,x0&=67108863,c0=Math.imul(mw,a3),a0=(a0=Math.imul(mw,F2))+Math.imul(p2,a3)|0,S0=Math.imul(p2,F2),c0=c0+Math.imul(r2,vt)|0,a0=(a0=a0+Math.imul(r2,wt)|0)+Math.imul(f2,vt)|0,S0=S0+Math.imul(f2,wt)|0,c0=c0+Math.imul(iy,pu)|0,a0=(a0=a0+Math.imul(iy,Ru)|0)+Math.imul(cy,pu)|0,S0=S0+Math.imul(cy,Ru)|0,c0=c0+Math.imul(ry,t0)|0,a0=(a0=a0+Math.imul(ry,m0)|0)+Math.imul(Jv,t0)|0,S0=S0+Math.imul(Jv,m0)|0,c0=c0+Math.imul(yv,_0)|0,a0=(a0=a0+Math.imul(yv,R0)|0)+Math.imul(Av,_0)|0,S0=S0+Math.imul(Av,R0)|0,c0=c0+Math.imul(Hv,l1)|0,a0=(a0=a0+Math.imul(Hv,a1)|0)+Math.imul(ty,l1)|0,S0=S0+Math.imul(ty,a1)|0,c0=c0+Math.imul(J1,K1)|0,a0=(a0=a0+Math.imul(J1,W1)|0)+Math.imul(wv,K1)|0,S0=S0+Math.imul(wv,W1)|0;var U0=(T1+(c0=c0+Math.imul(S1,uv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Tv)|0)+Math.imul(n1,uv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Tv)|0)+(a0>>>13)|0)+(U0>>>26)|0,U0&=67108863,c0=Math.imul(Ew,a3),a0=(a0=Math.imul(Ew,F2))+Math.imul(q2,a3)|0,S0=Math.imul(q2,F2),c0=c0+Math.imul(mw,vt)|0,a0=(a0=a0+Math.imul(mw,wt)|0)+Math.imul(p2,vt)|0,S0=S0+Math.imul(p2,wt)|0,c0=c0+Math.imul(r2,pu)|0,a0=(a0=a0+Math.imul(r2,Ru)|0)+Math.imul(f2,pu)|0,S0=S0+Math.imul(f2,Ru)|0,c0=c0+Math.imul(iy,t0)|0,a0=(a0=a0+Math.imul(iy,m0)|0)+Math.imul(cy,t0)|0,S0=S0+Math.imul(cy,m0)|0,c0=c0+Math.imul(ry,_0)|0,a0=(a0=a0+Math.imul(ry,R0)|0)+Math.imul(Jv,_0)|0,S0=S0+Math.imul(Jv,R0)|0,c0=c0+Math.imul(yv,l1)|0,a0=(a0=a0+Math.imul(yv,a1)|0)+Math.imul(Av,l1)|0,S0=S0+Math.imul(Av,a1)|0,c0=c0+Math.imul(Hv,K1)|0,a0=(a0=a0+Math.imul(Hv,W1)|0)+Math.imul(ty,K1)|0,S0=S0+Math.imul(ty,W1)|0,c0=c0+Math.imul(J1,uv)|0,a0=(a0=a0+Math.imul(J1,Tv)|0)+Math.imul(wv,uv)|0,S0=S0+Math.imul(wv,Tv)|0;var e1=(T1+(c0=c0+Math.imul(S1,Wv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,ny)|0)+Math.imul(n1,Wv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,ny)|0)+(a0>>>13)|0)+(e1>>>26)|0,e1&=67108863,c0=Math.imul(Rw,a3),a0=(a0=Math.imul(Rw,F2))+Math.imul(K2,a3)|0,S0=Math.imul(K2,F2),c0=c0+Math.imul(Ew,vt)|0,a0=(a0=a0+Math.imul(Ew,wt)|0)+Math.imul(q2,vt)|0,S0=S0+Math.imul(q2,wt)|0,c0=c0+Math.imul(mw,pu)|0,a0=(a0=a0+Math.imul(mw,Ru)|0)+Math.imul(p2,pu)|0,S0=S0+Math.imul(p2,Ru)|0,c0=c0+Math.imul(r2,t0)|0,a0=(a0=a0+Math.imul(r2,m0)|0)+Math.imul(f2,t0)|0,S0=S0+Math.imul(f2,m0)|0,c0=c0+Math.imul(iy,_0)|0,a0=(a0=a0+Math.imul(iy,R0)|0)+Math.imul(cy,_0)|0,S0=S0+Math.imul(cy,R0)|0,c0=c0+Math.imul(ry,l1)|0,a0=(a0=a0+Math.imul(ry,a1)|0)+Math.imul(Jv,l1)|0,S0=S0+Math.imul(Jv,a1)|0,c0=c0+Math.imul(yv,K1)|0,a0=(a0=a0+Math.imul(yv,W1)|0)+Math.imul(Av,K1)|0,S0=S0+Math.imul(Av,W1)|0,c0=c0+Math.imul(Hv,uv)|0,a0=(a0=a0+Math.imul(Hv,Tv)|0)+Math.imul(ty,uv)|0,S0=S0+Math.imul(ty,Tv)|0,c0=c0+Math.imul(J1,Wv)|0,a0=(a0=a0+Math.imul(J1,ny)|0)+Math.imul(wv,Wv)|0,S0=S0+Math.imul(wv,ny)|0;var h1=(T1+(c0=c0+Math.imul(S1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,C0)|0)+Math.imul(n1,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,C0)|0)+(a0>>>13)|0)+(h1>>>26)|0,h1&=67108863,c0=Math.imul(Rw,vt),a0=(a0=Math.imul(Rw,wt))+Math.imul(K2,vt)|0,S0=Math.imul(K2,wt),c0=c0+Math.imul(Ew,pu)|0,a0=(a0=a0+Math.imul(Ew,Ru)|0)+Math.imul(q2,pu)|0,S0=S0+Math.imul(q2,Ru)|0,c0=c0+Math.imul(mw,t0)|0,a0=(a0=a0+Math.imul(mw,m0)|0)+Math.imul(p2,t0)|0,S0=S0+Math.imul(p2,m0)|0,c0=c0+Math.imul(r2,_0)|0,a0=(a0=a0+Math.imul(r2,R0)|0)+Math.imul(f2,_0)|0,S0=S0+Math.imul(f2,R0)|0,c0=c0+Math.imul(iy,l1)|0,a0=(a0=a0+Math.imul(iy,a1)|0)+Math.imul(cy,l1)|0,S0=S0+Math.imul(cy,a1)|0,c0=c0+Math.imul(ry,K1)|0,a0=(a0=a0+Math.imul(ry,W1)|0)+Math.imul(Jv,K1)|0,S0=S0+Math.imul(Jv,W1)|0,c0=c0+Math.imul(yv,uv)|0,a0=(a0=a0+Math.imul(yv,Tv)|0)+Math.imul(Av,uv)|0,S0=S0+Math.imul(Av,Tv)|0,c0=c0+Math.imul(Hv,Wv)|0,a0=(a0=a0+Math.imul(Hv,ny)|0)+Math.imul(ty,Wv)|0,S0=S0+Math.imul(ty,ny)|0;var k1=(T1+(c0=c0+Math.imul(J1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(J1,C0)|0)+Math.imul(wv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(wv,C0)|0)+(a0>>>13)|0)+(k1>>>26)|0,k1&=67108863,c0=Math.imul(Rw,pu),a0=(a0=Math.imul(Rw,Ru))+Math.imul(K2,pu)|0,S0=Math.imul(K2,Ru),c0=c0+Math.imul(Ew,t0)|0,a0=(a0=a0+Math.imul(Ew,m0)|0)+Math.imul(q2,t0)|0,S0=S0+Math.imul(q2,m0)|0,c0=c0+Math.imul(mw,_0)|0,a0=(a0=a0+Math.imul(mw,R0)|0)+Math.imul(p2,_0)|0,S0=S0+Math.imul(p2,R0)|0,c0=c0+Math.imul(r2,l1)|0,a0=(a0=a0+Math.imul(r2,a1)|0)+Math.imul(f2,l1)|0,S0=S0+Math.imul(f2,a1)|0,c0=c0+Math.imul(iy,K1)|0,a0=(a0=a0+Math.imul(iy,W1)|0)+Math.imul(cy,K1)|0,S0=S0+Math.imul(cy,W1)|0,c0=c0+Math.imul(ry,uv)|0,a0=(a0=a0+Math.imul(ry,Tv)|0)+Math.imul(Jv,uv)|0,S0=S0+Math.imul(Jv,Tv)|0,c0=c0+Math.imul(yv,Wv)|0,a0=(a0=a0+Math.imul(yv,ny)|0)+Math.imul(Av,Wv)|0,S0=S0+Math.imul(Av,ny)|0;var q1=(T1+(c0=c0+Math.imul(Hv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Hv,C0)|0)+Math.imul(ty,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(ty,C0)|0)+(a0>>>13)|0)+(q1>>>26)|0,q1&=67108863,c0=Math.imul(Rw,t0),a0=(a0=Math.imul(Rw,m0))+Math.imul(K2,t0)|0,S0=Math.imul(K2,m0),c0=c0+Math.imul(Ew,_0)|0,a0=(a0=a0+Math.imul(Ew,R0)|0)+Math.imul(q2,_0)|0,S0=S0+Math.imul(q2,R0)|0,c0=c0+Math.imul(mw,l1)|0,a0=(a0=a0+Math.imul(mw,a1)|0)+Math.imul(p2,l1)|0,S0=S0+Math.imul(p2,a1)|0,c0=c0+Math.imul(r2,K1)|0,a0=(a0=a0+Math.imul(r2,W1)|0)+Math.imul(f2,K1)|0,S0=S0+Math.imul(f2,W1)|0,c0=c0+Math.imul(iy,uv)|0,a0=(a0=a0+Math.imul(iy,Tv)|0)+Math.imul(cy,uv)|0,S0=S0+Math.imul(cy,Tv)|0,c0=c0+Math.imul(ry,Wv)|0,a0=(a0=a0+Math.imul(ry,ny)|0)+Math.imul(Jv,Wv)|0,S0=S0+Math.imul(Jv,ny)|0;var L1=(T1+(c0=c0+Math.imul(yv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(yv,C0)|0)+Math.imul(Av,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Av,C0)|0)+(a0>>>13)|0)+(L1>>>26)|0,L1&=67108863,c0=Math.imul(Rw,_0),a0=(a0=Math.imul(Rw,R0))+Math.imul(K2,_0)|0,S0=Math.imul(K2,R0),c0=c0+Math.imul(Ew,l1)|0,a0=(a0=a0+Math.imul(Ew,a1)|0)+Math.imul(q2,l1)|0,S0=S0+Math.imul(q2,a1)|0,c0=c0+Math.imul(mw,K1)|0,a0=(a0=a0+Math.imul(mw,W1)|0)+Math.imul(p2,K1)|0,S0=S0+Math.imul(p2,W1)|0,c0=c0+Math.imul(r2,uv)|0,a0=(a0=a0+Math.imul(r2,Tv)|0)+Math.imul(f2,uv)|0,S0=S0+Math.imul(f2,Tv)|0,c0=c0+Math.imul(iy,Wv)|0,a0=(a0=a0+Math.imul(iy,ny)|0)+Math.imul(cy,Wv)|0,S0=S0+Math.imul(cy,ny)|0;var A1=(T1+(c0=c0+Math.imul(ry,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(ry,C0)|0)+Math.imul(Jv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Jv,C0)|0)+(a0>>>13)|0)+(A1>>>26)|0,A1&=67108863,c0=Math.imul(Rw,l1),a0=(a0=Math.imul(Rw,a1))+Math.imul(K2,l1)|0,S0=Math.imul(K2,a1),c0=c0+Math.imul(Ew,K1)|0,a0=(a0=a0+Math.imul(Ew,W1)|0)+Math.imul(q2,K1)|0,S0=S0+Math.imul(q2,W1)|0,c0=c0+Math.imul(mw,uv)|0,a0=(a0=a0+Math.imul(mw,Tv)|0)+Math.imul(p2,uv)|0,S0=S0+Math.imul(p2,Tv)|0,c0=c0+Math.imul(r2,Wv)|0,a0=(a0=a0+Math.imul(r2,ny)|0)+Math.imul(f2,Wv)|0,S0=S0+Math.imul(f2,ny)|0;var M1=(T1+(c0=c0+Math.imul(iy,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(iy,C0)|0)+Math.imul(cy,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(cy,C0)|0)+(a0>>>13)|0)+(M1>>>26)|0,M1&=67108863,c0=Math.imul(Rw,K1),a0=(a0=Math.imul(Rw,W1))+Math.imul(K2,K1)|0,S0=Math.imul(K2,W1),c0=c0+Math.imul(Ew,uv)|0,a0=(a0=a0+Math.imul(Ew,Tv)|0)+Math.imul(q2,uv)|0,S0=S0+Math.imul(q2,Tv)|0,c0=c0+Math.imul(mw,Wv)|0,a0=(a0=a0+Math.imul(mw,ny)|0)+Math.imul(p2,Wv)|0,S0=S0+Math.imul(p2,ny)|0;var X1=(T1+(c0=c0+Math.imul(r2,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(r2,C0)|0)+Math.imul(f2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(f2,C0)|0)+(a0>>>13)|0)+(X1>>>26)|0,X1&=67108863,c0=Math.imul(Rw,uv),a0=(a0=Math.imul(Rw,Tv))+Math.imul(K2,uv)|0,S0=Math.imul(K2,Tv),c0=c0+Math.imul(Ew,Wv)|0,a0=(a0=a0+Math.imul(Ew,ny)|0)+Math.imul(q2,Wv)|0,S0=S0+Math.imul(q2,ny)|0;var dv=(T1+(c0=c0+Math.imul(mw,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(mw,C0)|0)+Math.imul(p2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(p2,C0)|0)+(a0>>>13)|0)+(dv>>>26)|0,dv&=67108863,c0=Math.imul(Rw,Wv),a0=(a0=Math.imul(Rw,ny))+Math.imul(K2,Wv)|0,S0=Math.imul(K2,ny);var I1=(T1+(c0=c0+Math.imul(Ew,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Ew,C0)|0)+Math.imul(q2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(q2,C0)|0)+(a0>>>13)|0)+(I1>>>26)|0,I1&=67108863;var iv=(T1+(c0=Math.imul(Rw,Gv))|0)+((8191&(a0=(a0=Math.imul(Rw,C0))+Math.imul(K2,Gv)|0))<<13)|0;return T1=((S0=Math.imul(K2,C0))+(a0>>>13)|0)+(iv>>>26)|0,iv&=67108863,p1[0]=J0,p1[1]=f0,p1[2]=v0,p1[3]=h0,p1[4]=u0,p1[5]=o0,p1[6]=x0,p1[7]=U0,p1[8]=e1,p1[9]=h1,p1[10]=k1,p1[11]=q1,p1[12]=L1,p1[13]=A1,p1[14]=M1,p1[15]=X1,p1[16]=dv,p1[17]=I1,p1[18]=iv,T1!==0&&(p1[19]=T1,d0.length++),d0};function gv(s0,g0,d0){d0.negative=g0.negative^s0.negative,d0.length=s0.length+g0.length;for(var c0=0,a0=0,S0=0;S0>>26)|0)>>>26,z0&=67108863}d0.words[S0]=Q0,c0=z0,z0=a0}return c0!==0?d0.words[S0]=c0:d0.length--,d0._strip()}function xv(s0,g0,d0){return gv(s0,g0,d0)}Math.imul||(bv=ov),Su.prototype.mulTo=function(s0,g0){var d0=this.length+s0.length;return this.length===10&&s0.length===10?bv(this,s0,g0):d0<63?ov(this,s0,g0):d0<1024?gv(this,s0,g0):xv(this,s0,g0)},Su.prototype.mul=function(s0){var g0=new Su(null);return g0.words=new Array(this.length+s0.length),this.mulTo(s0,g0)},Su.prototype.mulf=function(s0){var g0=new Su(null);return g0.words=new Array(this.length+s0.length),xv(this,s0,g0)},Su.prototype.imul=function(s0){return this.clone().mulTo(s0,this)},Su.prototype.imuln=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(typeof s0=="number"),mu(s0<67108864);for(var d0=0,c0=0;c0>=26,d0+=a0/67108864|0,d0+=S0>>>26,this.words[c0]=67108863&S0}return d0!==0&&(this.words[c0]=d0,this.length++),g0?this.ineg():this},Su.prototype.muln=function(s0){return this.clone().imuln(s0)},Su.prototype.sqr=function(){return this.mul(this)},Su.prototype.isqr=function(){return this.imul(this.clone())},Su.prototype.pow=function(s0){var g0=function(S0){for(var z0=new Array(S0.bitLength()),Q0=0;Q0>>T1&1}return z0}(s0);if(g0.length===0)return new Su(1);for(var d0=this,c0=0;c0=0);var g0,d0=s0%26,c0=(s0-d0)/26,a0=67108863>>>26-d0<<26-d0;if(d0!==0){var S0=0;for(g0=0;g0>>26-d0}S0&&(this.words[g0]=S0,this.length++)}if(c0!==0){for(g0=this.length-1;g0>=0;g0--)this.words[g0+c0]=this.words[g0];for(g0=0;g0=0),c0=g0?(g0-g0%26)/26:0;var a0=s0%26,S0=Math.min((s0-a0)/26,this.length),z0=67108863^67108863>>>a0<S0)for(this.length-=S0,p1=0;p1=0&&(T1!==0||p1>=c0);p1--){var U1=0|this.words[p1];this.words[p1]=T1<<26-a0|U1>>>a0,T1=U1&z0}return Q0&&T1!==0&&(Q0.words[Q0.length++]=T1),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},Su.prototype.ishrn=function(s0,g0,d0){return mu(this.negative===0),this.iushrn(s0,g0,d0)},Su.prototype.shln=function(s0){return this.clone().ishln(s0)},Su.prototype.ushln=function(s0){return this.clone().iushln(s0)},Su.prototype.shrn=function(s0){return this.clone().ishrn(s0)},Su.prototype.ushrn=function(s0){return this.clone().iushrn(s0)},Su.prototype.testn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=s0%26,d0=(s0-g0)/26,c0=1<=0);var g0=s0%26,d0=(s0-g0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=d0)return this;if(g0!==0&&d0++,this.length=Math.min(d0,this.length),g0!==0){var c0=67108863^67108863>>>g0<=67108864;g0++)this.words[g0]-=67108864,g0===this.length-1?this.words[g0+1]=1:this.words[g0+1]++;return this.length=Math.max(this.length,g0+1),this},Su.prototype.isubn=function(s0){if(mu(typeof s0=="number"),mu(s0<67108864),s0<0)return this.iaddn(-s0);if(this.negative!==0)return this.negative=0,this.iaddn(s0),this.negative=1,this;if(this.words[0]-=s0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var g0=0;g0>26)-(Q0/67108864|0),this.words[c0+d0]=67108863&a0}for(;c0>26,this.words[c0+d0]=67108863&a0;if(z0===0)return this._strip();for(mu(z0===-1),z0=0,c0=0;c0>26,this.words[c0]=67108863&a0;return this.negative=1,this._strip()},Su.prototype._wordDiv=function(s0,g0){var d0=(this.length,s0.length),c0=this.clone(),a0=s0,S0=0|a0.words[a0.length-1];(d0=26-this._countBits(S0))!=0&&(a0=a0.ushln(d0),c0.iushln(d0),S0=0|a0.words[a0.length-1]);var z0,Q0=c0.length-a0.length;if(g0!=="mod"){(z0=new Su(null)).length=Q0+1,z0.words=new Array(z0.length);for(var p1=0;p1=0;U1--){var S1=67108864*(0|c0.words[a0.length+U1])+(0|c0.words[a0.length+U1-1]);for(S1=Math.min(S1/S0|0,67108863),c0._ishlnsubmul(a0,S1,U1);c0.negative!==0;)S1--,c0.negative=0,c0._ishlnsubmul(a0,1,U1),c0.isZero()||(c0.negative^=1);z0&&(z0.words[U1]=S1)}return z0&&z0._strip(),c0._strip(),g0!=="div"&&d0!==0&&c0.iushrn(d0),{div:z0||null,mod:c0}},Su.prototype.divmod=function(s0,g0,d0){return mu(!s0.isZero()),this.isZero()?{div:new Su(0),mod:new Su(0)}:this.negative!==0&&s0.negative===0?(S0=this.neg().divmod(s0,g0),g0!=="mod"&&(c0=S0.div.neg()),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.iadd(s0)),{div:c0,mod:a0}):this.negative===0&&s0.negative!==0?(S0=this.divmod(s0.neg(),g0),g0!=="mod"&&(c0=S0.div.neg()),{div:c0,mod:S0.mod}):this.negative&s0.negative?(S0=this.neg().divmod(s0.neg(),g0),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.isub(s0)),{div:S0.div,mod:a0}):s0.length>this.length||this.cmp(s0)<0?{div:new Su(0),mod:this}:s0.length===1?g0==="div"?{div:this.divn(s0.words[0]),mod:null}:g0==="mod"?{div:null,mod:new Su(this.modrn(s0.words[0]))}:{div:this.divn(s0.words[0]),mod:new Su(this.modrn(s0.words[0]))}:this._wordDiv(s0,g0);var c0,a0,S0},Su.prototype.div=function(s0){return this.divmod(s0,"div",!1).div},Su.prototype.mod=function(s0){return this.divmod(s0,"mod",!1).mod},Su.prototype.umod=function(s0){return this.divmod(s0,"mod",!0).mod},Su.prototype.divRound=function(s0){var g0=this.divmod(s0);if(g0.mod.isZero())return g0.div;var d0=g0.div.negative!==0?g0.mod.isub(s0):g0.mod,c0=s0.ushrn(1),a0=s0.andln(1),S0=d0.cmp(c0);return S0<0||a0===1&&S0===0?g0.div:g0.div.negative!==0?g0.div.isubn(1):g0.div.iaddn(1)},Su.prototype.modrn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=(1<<26)%s0,c0=0,a0=this.length-1;a0>=0;a0--)c0=(d0*c0+(0|this.words[a0]))%s0;return g0?-c0:c0},Su.prototype.modn=function(s0){return this.modrn(s0)},Su.prototype.idivn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=0,c0=this.length-1;c0>=0;c0--){var a0=(0|this.words[c0])+67108864*d0;this.words[c0]=a0/s0|0,d0=a0%s0}return this._strip(),g0?this.ineg():this},Su.prototype.divn=function(s0){return this.clone().idivn(s0)},Su.prototype.egcd=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0=new Su(1),a0=new Su(0),S0=new Su(0),z0=new Su(1),Q0=0;g0.isEven()&&d0.isEven();)g0.iushrn(1),d0.iushrn(1),++Q0;for(var p1=d0.clone(),T1=g0.clone();!g0.isZero();){for(var U1=0,S1=1;!(g0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(g0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(p1),a0.isub(T1)),c0.iushrn(1),a0.iushrn(1);for(var n1=0,V1=1;!(d0.words[0]&V1)&&n1<26;++n1,V1<<=1);if(n1>0)for(d0.iushrn(n1);n1-- >0;)(S0.isOdd()||z0.isOdd())&&(S0.iadd(p1),z0.isub(T1)),S0.iushrn(1),z0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),c0.isub(S0),a0.isub(z0)):(d0.isub(g0),S0.isub(c0),z0.isub(a0))}return{a:S0,b:z0,gcd:d0.iushln(Q0)}},Su.prototype._invmp=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0,a0=new Su(1),S0=new Su(0),z0=d0.clone();g0.cmpn(1)>0&&d0.cmpn(1)>0;){for(var Q0=0,p1=1;!(g0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(g0.iushrn(Q0);Q0-- >0;)a0.isOdd()&&a0.iadd(z0),a0.iushrn(1);for(var T1=0,U1=1;!(d0.words[0]&U1)&&T1<26;++T1,U1<<=1);if(T1>0)for(d0.iushrn(T1);T1-- >0;)S0.isOdd()&&S0.iadd(z0),S0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),a0.isub(S0)):(d0.isub(g0),S0.isub(a0))}return(c0=g0.cmpn(1)===0?a0:S0).cmpn(0)<0&&c0.iadd(s0),c0},Su.prototype.gcd=function(s0){if(this.isZero())return s0.abs();if(s0.isZero())return this.abs();var g0=this.clone(),d0=s0.clone();g0.negative=0,d0.negative=0;for(var c0=0;g0.isEven()&&d0.isEven();c0++)g0.iushrn(1),d0.iushrn(1);for(;;){for(;g0.isEven();)g0.iushrn(1);for(;d0.isEven();)d0.iushrn(1);var a0=g0.cmp(d0);if(a0<0){var S0=g0;g0=d0,d0=S0}else if(a0===0||d0.cmpn(1)===0)break;g0.isub(d0)}return d0.iushln(c0)},Su.prototype.invm=function(s0){return this.egcd(s0).a.umod(s0)},Su.prototype.isEven=function(){return(1&this.words[0])==0},Su.prototype.isOdd=function(){return(1&this.words[0])==1},Su.prototype.andln=function(s0){return this.words[0]&s0},Su.prototype.bincn=function(s0){mu(typeof s0=="number");var g0=s0%26,d0=(s0-g0)/26,c0=1<>>26,z0&=67108863,this.words[S0]=z0}return a0!==0&&(this.words[S0]=a0,this.length++),this},Su.prototype.isZero=function(){return this.length===1&&this.words[0]===0},Su.prototype.cmpn=function(s0){var g0,d0=s0<0;if(this.negative!==0&&!d0)return-1;if(this.negative===0&&d0)return 1;if(this._strip(),this.length>1)g0=1;else{d0&&(s0=-s0),mu(s0<=67108863,"Number is too big");var c0=0|this.words[0];g0=c0===s0?0:c0s0.length)return 1;if(this.length=0;d0--){var c0=0|this.words[d0],a0=0|s0.words[d0];if(c0!==a0){c0a0&&(g0=1);break}}return g0},Su.prototype.gtn=function(s0){return this.cmpn(s0)===1},Su.prototype.gt=function(s0){return this.cmp(s0)===1},Su.prototype.gten=function(s0){return this.cmpn(s0)>=0},Su.prototype.gte=function(s0){return this.cmp(s0)>=0},Su.prototype.ltn=function(s0){return this.cmpn(s0)===-1},Su.prototype.lt=function(s0){return this.cmp(s0)===-1},Su.prototype.lten=function(s0){return this.cmpn(s0)<=0},Su.prototype.lte=function(s0){return this.cmp(s0)<=0},Su.prototype.eqn=function(s0){return this.cmpn(s0)===0},Su.prototype.eq=function(s0){return this.cmp(s0)===0},Su.red=function(s0){return new T0(s0)},Su.prototype.toRed=function(s0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),s0.convertTo(this)._forceRed(s0)},Su.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},Su.prototype._forceRed=function(s0){return this.red=s0,this},Su.prototype.forceRed=function(s0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(s0)},Su.prototype.redAdd=function(s0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,s0)},Su.prototype.redIAdd=function(s0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,s0)},Su.prototype.redSub=function(s0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,s0)},Su.prototype.redISub=function(s0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,s0)},Su.prototype.redShl=function(s0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,s0)},Su.prototype.redMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.mul(this,s0)},Su.prototype.redIMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.imul(this,s0)},Su.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},Su.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},Su.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},Su.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},Su.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},Su.prototype.redPow=function(s0){return mu(this.red&&!s0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,s0)};var hy={k256:null,p224:null,p192:null,p25519:null};function oy(s0,g0){this.name=s0,this.p=new Su(g0,16),this.n=this.p.bitLength(),this.k=new Su(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function fy(){oy.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function Fy(){oy.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function qv(){oy.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Qv(){oy.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T0(s0){if(typeof s0=="string"){var g0=Su._prime(s0);this.m=g0.p,this.prime=g0}else mu(s0.gtn(1),"modulus must be greater than 1"),this.m=s0,this.prime=null}function X0(s0){T0.call(this,s0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new Su(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}oy.prototype._tmp=function(){var s0=new Su(null);return s0.words=new Array(Math.ceil(this.n/13)),s0},oy.prototype.ireduce=function(s0){var g0,d0=s0;do this.split(d0,this.tmp),g0=(d0=(d0=this.imulK(d0)).iadd(this.tmp)).bitLength();while(g0>this.n);var c0=g00?d0.isub(this.p):d0.strip!==void 0?d0.strip():d0._strip(),d0},oy.prototype.split=function(s0,g0){s0.iushrn(this.n,0,g0)},oy.prototype.imulK=function(s0){return s0.imul(this.k)},Mu(fy,oy),fy.prototype.split=function(s0,g0){for(var d0=4194303,c0=Math.min(s0.length,9),a0=0;a0>>22,S0=z0}S0>>>=22,s0.words[a0-10]=S0,S0===0&&s0.length>10?s0.length-=10:s0.length-=9},fy.prototype.imulK=function(s0){s0.words[s0.length]=0,s0.words[s0.length+1]=0,s0.length+=2;for(var g0=0,d0=0;d0>>=26,s0.words[d0]=a0,g0=c0}return g0!==0&&(s0.words[s0.length++]=g0),s0},Su._prime=function(s0){if(hy[s0])return hy[s0];var g0;if(s0==="k256")g0=new fy;else if(s0==="p224")g0=new Fy;else if(s0==="p192")g0=new qv;else{if(s0!=="p25519")throw new Error("Unknown prime "+s0);g0=new Qv}return hy[s0]=g0,g0},T0.prototype._verify1=function(s0){mu(s0.negative===0,"red works only with positives"),mu(s0.red,"red works only with red numbers")},T0.prototype._verify2=function(s0,g0){mu((s0.negative|g0.negative)==0,"red works only with positives"),mu(s0.red&&s0.red===g0.red,"red works only with red numbers")},T0.prototype.imod=function(s0){return this.prime?this.prime.ireduce(s0)._forceRed(this):(B0(s0,s0.umod(this.m)._forceRed(this)),s0)},T0.prototype.neg=function(s0){return s0.isZero()?s0.clone():this.m.sub(s0)._forceRed(this)},T0.prototype.add=function(s0,g0){this._verify2(s0,g0);var d0=s0.add(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0._forceRed(this)},T0.prototype.iadd=function(s0,g0){this._verify2(s0,g0);var d0=s0.iadd(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0},T0.prototype.sub=function(s0,g0){this._verify2(s0,g0);var d0=s0.sub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0._forceRed(this)},T0.prototype.isub=function(s0,g0){this._verify2(s0,g0);var d0=s0.isub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0},T0.prototype.shl=function(s0,g0){return this._verify1(s0),this.imod(s0.ushln(g0))},T0.prototype.imul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.imul(g0))},T0.prototype.mul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.mul(g0))},T0.prototype.isqr=function(s0){return this.imul(s0,s0.clone())},T0.prototype.sqr=function(s0){return this.mul(s0,s0)},T0.prototype.sqrt=function(s0){if(s0.isZero())return s0.clone();var g0=this.m.andln(3);if(mu(g0%2==1),g0===3){var d0=this.m.add(new Su(1)).iushrn(2);return this.pow(s0,d0)}for(var c0=this.m.subn(1),a0=0;!c0.isZero()&&c0.andln(1)===0;)a0++,c0.iushrn(1);mu(!c0.isZero());var S0=new Su(1).toRed(this),z0=S0.redNeg(),Q0=this.m.subn(1).iushrn(1),p1=this.m.bitLength();for(p1=new Su(2*p1*p1).toRed(this);this.pow(p1,Q0).cmp(z0)!==0;)p1.redIAdd(z0);for(var T1=this.pow(p1,c0),U1=this.pow(s0,c0.addn(1).iushrn(1)),S1=this.pow(s0,c0),n1=a0;S1.cmp(S0)!==0;){for(var V1=S1,J1=0;V1.cmp(S0)!==0;J1++)V1=V1.redSqr();mu(J1=0;c0--){for(var p1=g0.words[c0],T1=Q0-1;T1>=0;T1--){var U1=p1>>T1&1;a0!==d0[0]&&(a0=this.sqr(a0)),U1!==0||S0!==0?(S0<<=1,S0|=U1,(++z0==4||c0===0&&T1===0)&&(a0=this.mul(a0,d0[S0]),z0=0,S0=0)):z0=0}Q0=26}return a0},T0.prototype.convertTo=function(s0){var g0=s0.umod(this.m);return g0===s0?g0.clone():g0},T0.prototype.convertFrom=function(s0){var g0=s0.clone();return g0.red=null,g0},Su.mont=function(s0){return new X0(s0)},Mu(X0,T0),X0.prototype.convertTo=function(s0){return this.imod(s0.ushln(this.shift))},X0.prototype.convertFrom=function(s0){var g0=this.imod(s0.mul(this.rinv));return g0.red=null,g0},X0.prototype.imul=function(s0,g0){if(s0.isZero()||g0.isZero())return s0.words[0]=0,s0.length=1,s0;var d0=s0.imul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.mul=function(s0,g0){if(s0.isZero()||g0.isZero())return new Su(0)._forceRed(this);var d0=s0.mul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.invm=function(s0){return this.imod(s0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})(zte);var F_,Hte=zte.exports,i5={},H4={},Kte={},GC={},K4=zw,nx=K4.Buffer,YC={};for(F_ in K4)K4.hasOwnProperty(F_)&&F_!=="SlowBuffer"&&F_!=="Buffer"&&(YC[F_]=K4[F_]);var MF=YC.Buffer={};for(F_ in nx)nx.hasOwnProperty(F_)&&F_!=="allocUnsafe"&&F_!=="allocUnsafeSlow"&&(MF[F_]=nx[F_]);if(YC.Buffer.prototype=nx.prototype,MF.from&&MF.from!==Uint8Array.from||(MF.from=function(yt,ir,_c){if(typeof yt=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof yt);if(yt&&yt.length===void 0)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof yt);return nx(yt,ir,_c)}),MF.alloc||(MF.alloc=function(yt,ir,_c){if(typeof yt!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof yt);if(yt<0||yt>=2*(1<<30))throw new RangeError('The value "'+yt+'" is invalid for option "size"');var mu=nx(yt);return ir&&ir.length!==0?typeof _c=="string"?mu.fill(ir,_c):mu.fill(ir):mu.fill(0),mu}),!YC.kStringMaxLength)try{YC.kStringMaxLength=Kv.binding("buffer").kStringMaxLength}catch{}YC.constants||(YC.constants={MAX_LENGTH:YC.kMaxLength},YC.kStringMaxLength&&(YC.constants.MAX_STRING_LENGTH=YC.kStringMaxLength));var V4=YC,IF={};const mH=Gw;function E8(yt){this._reporterState={obj:null,path:[],options:yt||{},errors:[]}}function o5(yt,ir){this.path=yt,this.rethrow(ir)}IF.Reporter=E8,E8.prototype.isError=function(yt){return yt instanceof o5},E8.prototype.save=function(){const yt=this._reporterState;return{obj:yt.obj,pathLen:yt.path.length}},E8.prototype.restore=function(yt){const ir=this._reporterState;ir.obj=yt.obj,ir.path=ir.path.slice(0,yt.pathLen)},E8.prototype.enterKey=function(yt){return this._reporterState.path.push(yt)},E8.prototype.exitKey=function(yt){const ir=this._reporterState;ir.path=ir.path.slice(0,yt-1)},E8.prototype.leaveKey=function(yt,ir,_c){const mu=this._reporterState;this.exitKey(yt),mu.obj!==null&&(mu.obj[ir]=_c)},E8.prototype.path=function(){return this._reporterState.path.join("/")},E8.prototype.enterObject=function(){const yt=this._reporterState,ir=yt.obj;return yt.obj={},ir},E8.prototype.leaveObject=function(yt){const ir=this._reporterState,_c=ir.obj;return ir.obj=yt,_c},E8.prototype.error=function(yt){let ir;const _c=this._reporterState,mu=yt instanceof o5;if(ir=mu?yt:new o5(_c.path.map(function(Mu){return"["+JSON.stringify(Mu)+"]"}).join(""),yt.message||yt,yt.stack),!_c.options.partial)throw ir;return mu||_c.errors.push(ir),ir},E8.prototype.wrapResult=function(yt){const ir=this._reporterState;return ir.options.partial?{result:this.isError(yt)?null:yt,errors:ir.errors}:yt},mH(o5,Error),o5.prototype.rethrow=function(yt){if(this.message=yt+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,o5),!this.stack)try{throw new Error(this.message)}catch(ir){this.stack=ir.stack}return this};var kN={};const oZ=Gw,aZ=IF.Reporter,p9=V4.Buffer;function m9(yt,ir){aZ.call(this,ir),p9.isBuffer(yt)?(this.base=yt,this.offset=0,this.length=yt.length):this.error("Input not Buffer")}function xM(yt,ir){if(Array.isArray(yt))this.length=0,this.value=yt.map(function(_c){return xM.isEncoderBuffer(_c)||(_c=new xM(_c,ir)),this.length+=_c.length,_c},this);else if(typeof yt=="number"){if(!(0<=yt&&yt<=255))return ir.error("non-byte EncoderBuffer value");this.value=yt,this.length=1}else if(typeof yt=="string")this.value=yt,this.length=p9.byteLength(yt);else{if(!p9.isBuffer(yt))return ir.error("Unsupported type: "+typeof yt);this.value=yt,this.length=yt.length}}oZ(m9,aZ),kN.DecoderBuffer=m9,m9.isDecoderBuffer=function(yt){return yt instanceof m9||typeof yt=="object"&&p9.isBuffer(yt.base)&&yt.constructor.name==="DecoderBuffer"&&typeof yt.offset=="number"&&typeof yt.length=="number"&&typeof yt.save=="function"&&typeof yt.restore=="function"&&typeof yt.isEmpty=="function"&&typeof yt.readUInt8=="function"&&typeof yt.skip=="function"&&typeof yt.raw=="function"},m9.prototype.save=function(){return{offset:this.offset,reporter:aZ.prototype.save.call(this)}},m9.prototype.restore=function(yt){const ir=new m9(this.base);return ir.offset=yt.offset,ir.length=this.offset,this.offset=yt.offset,aZ.prototype.restore.call(this,yt.reporter),ir},m9.prototype.isEmpty=function(){return this.offset===this.length},m9.prototype.readUInt8=function(yt){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(yt||"DecoderBuffer overrun")},m9.prototype.skip=function(yt,ir){if(!(this.offset+yt<=this.length))return this.error(ir||"DecoderBuffer overrun");const _c=new m9(this.base);return _c._reporterState=this._reporterState,_c.offset=this.offset,_c.length=this.offset+yt,this.offset+=yt,_c},m9.prototype.raw=function(yt){return this.base.slice(yt?yt.offset:this.offset,this.length)},kN.EncoderBuffer=xM,xM.isEncoderBuffer=function(yt){return yt instanceof xM||typeof yt=="object"&&yt.constructor.name==="EncoderBuffer"&&typeof yt.length=="number"&&typeof yt.join=="function"},xM.prototype.join=function(yt,ir){return yt||(yt=p9.alloc(this.length)),ir||(ir=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(_c){_c.join(yt,ir),ir+=_c.length}):(typeof this.value=="number"?yt[ir]=this.value:typeof this.value=="string"?yt.write(this.value,ir):p9.isBuffer(this.value)&&this.value.copy(yt,ir),ir+=this.length)),yt};const i1e=IF.Reporter,sZ=kN.EncoderBuffer,gH=kN.DecoderBuffer,A_=Zx,OF=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],o1e=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(OF);function YA(yt,ir,_c){const mu={};this._baseState=mu,mu.name=_c,mu.enc=yt,mu.parent=ir||null,mu.children=null,mu.tag=null,mu.args=null,mu.reverseArgs=null,mu.choice=null,mu.optional=!1,mu.any=!1,mu.obj=!1,mu.use=null,mu.useDecoder=null,mu.key=null,mu.default=null,mu.explicit=null,mu.implicit=null,mu.contains=null,mu.parent||(mu.children=[],this._wrap())}var Vte=YA;const iC=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];YA.prototype.clone=function(){const yt=this._baseState,ir={};iC.forEach(function(mu){ir[mu]=yt[mu]});const _c=new this.constructor(ir.parent);return _c._baseState=ir,_c},YA.prototype._wrap=function(){const yt=this._baseState;o1e.forEach(function(ir){this[ir]=function(){const _c=new this.constructor(this);return yt.children.push(_c),_c[ir].apply(_c,arguments)}},this)},YA.prototype._init=function(yt){const ir=this._baseState;A_(ir.parent===null),yt.call(this),ir.children=ir.children.filter(function(_c){return _c._baseState.parent===this},this),A_.equal(ir.children.length,1,"Root node can have only one child")},YA.prototype._useArgs=function(yt){const ir=this._baseState,_c=yt.filter(function(mu){return mu instanceof this.constructor},this);yt=yt.filter(function(mu){return!(mu instanceof this.constructor)},this),_c.length!==0&&(A_(ir.children===null),ir.children=_c,_c.forEach(function(mu){mu._baseState.parent=this},this)),yt.length!==0&&(A_(ir.args===null),ir.args=yt,ir.reverseArgs=yt.map(function(mu){if(typeof mu!="object"||mu.constructor!==Object)return mu;const Mu={};return Object.keys(mu).forEach(function(Su){Su==(0|Su)&&(Su|=0);const l0=mu[Su];Mu[l0]=Su}),Mu}))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach(function(yt){YA.prototype[yt]=function(){const ir=this._baseState;throw new Error(yt+" not implemented for encoding: "+ir.enc)}}),OF.forEach(function(yt){YA.prototype[yt]=function(){const ir=this._baseState,_c=Array.prototype.slice.call(arguments);return A_(ir.tag===null),ir.tag=yt,this._useArgs(_c),this}}),YA.prototype.use=function(yt){A_(yt);const ir=this._baseState;return A_(ir.use===null),ir.use=yt,this},YA.prototype.optional=function(){return this._baseState.optional=!0,this},YA.prototype.def=function(yt){const ir=this._baseState;return A_(ir.default===null),ir.default=yt,ir.optional=!0,this},YA.prototype.explicit=function(yt){const ir=this._baseState;return A_(ir.explicit===null&&ir.implicit===null),ir.explicit=yt,this},YA.prototype.implicit=function(yt){const ir=this._baseState;return A_(ir.explicit===null&&ir.implicit===null),ir.implicit=yt,this},YA.prototype.obj=function(){const yt=this._baseState,ir=Array.prototype.slice.call(arguments);return yt.obj=!0,ir.length!==0&&this._useArgs(ir),this},YA.prototype.key=function(yt){const ir=this._baseState;return A_(ir.key===null),ir.key=yt,this},YA.prototype.any=function(){return this._baseState.any=!0,this},YA.prototype.choice=function(yt){const ir=this._baseState;return A_(ir.choice===null),ir.choice=yt,this._useArgs(Object.keys(yt).map(function(_c){return yt[_c]})),this},YA.prototype.contains=function(yt){const ir=this._baseState;return A_(ir.use===null),ir.contains=yt,this},YA.prototype._decode=function(yt,ir){const _c=this._baseState;if(_c.parent===null)return yt.wrapResult(_c.children[0]._decode(yt,ir));let mu,Mu=_c.default,Su=!0,l0=null;if(_c.key!==null&&(l0=yt.enterKey(_c.key)),_c.optional){let E0=null;if(_c.explicit!==null?E0=_c.explicit:_c.implicit!==null?E0=_c.implicit:_c.tag!==null&&(E0=_c.tag),E0!==null||_c.any){if(Su=this._peekTag(yt,E0,_c.any),yt.isError(Su))return Su}else{const j0=yt.save();try{_c.choice===null?this._decodeGeneric(_c.tag,yt,ir):this._decodeChoice(yt,ir),Su=!0}catch{Su=!1}yt.restore(j0)}}if(_c.obj&&Su&&(mu=yt.enterObject()),Su){if(_c.explicit!==null){const j0=this._decodeTag(yt,_c.explicit);if(yt.isError(j0))return j0;yt=j0}const E0=yt.offset;if(_c.use===null&&_c.choice===null){let j0;_c.any&&(j0=yt.save());const M0=this._decodeTag(yt,_c.implicit!==null?_c.implicit:_c.tag,_c.any);if(yt.isError(M0))return M0;_c.any?Mu=yt.raw(j0):yt=M0}if(ir&&ir.track&&_c.tag!==null&&ir.track(yt.path(),E0,yt.length,"tagged"),ir&&ir.track&&_c.tag!==null&&ir.track(yt.path(),yt.offset,yt.length,"content"),_c.any||(Mu=_c.choice===null?this._decodeGeneric(_c.tag,yt,ir):this._decodeChoice(yt,ir)),yt.isError(Mu))return Mu;if(_c.any||_c.choice!==null||_c.children===null||_c.children.forEach(function(j0){j0._decode(yt,ir)}),_c.contains&&(_c.tag==="octstr"||_c.tag==="bitstr")){const j0=new gH(Mu);Mu=this._getUse(_c.contains,yt._reporterState.obj)._decode(j0,ir)}}return _c.obj&&Su&&(Mu=yt.leaveObject(mu)),_c.key===null||Mu===null&&Su!==!0?l0!==null&&yt.exitKey(l0):yt.leaveKey(l0,_c.key,Mu),Mu},YA.prototype._decodeGeneric=function(yt,ir,_c){const mu=this._baseState;return yt==="seq"||yt==="set"?null:yt==="seqof"||yt==="setof"?this._decodeList(ir,yt,mu.args[0],_c):/str$/.test(yt)?this._decodeStr(ir,yt,_c):yt==="objid"&&mu.args?this._decodeObjid(ir,mu.args[0],mu.args[1],_c):yt==="objid"?this._decodeObjid(ir,null,null,_c):yt==="gentime"||yt==="utctime"?this._decodeTime(ir,yt,_c):yt==="null_"?this._decodeNull(ir,_c):yt==="bool"?this._decodeBool(ir,_c):yt==="objDesc"?this._decodeStr(ir,yt,_c):yt==="int"||yt==="enum"?this._decodeInt(ir,mu.args&&mu.args[0],_c):mu.use!==null?this._getUse(mu.use,ir._reporterState.obj)._decode(ir,_c):ir.error("unknown tag: "+yt)},YA.prototype._getUse=function(yt,ir){const _c=this._baseState;return _c.useDecoder=this._use(yt,ir),A_(_c.useDecoder._baseState.parent===null),_c.useDecoder=_c.useDecoder._baseState.children[0],_c.implicit!==_c.useDecoder._baseState.implicit&&(_c.useDecoder=_c.useDecoder.clone(),_c.useDecoder._baseState.implicit=_c.implicit),_c.useDecoder},YA.prototype._decodeChoice=function(yt,ir){const _c=this._baseState;let mu=null,Mu=!1;return Object.keys(_c.choice).some(function(Su){const l0=yt.save(),E0=_c.choice[Su];try{const j0=E0._decode(yt,ir);if(yt.isError(j0))return!1;mu={type:Su,value:j0},Mu=!0}catch{return yt.restore(l0),!1}return!0},this),Mu?mu:yt.error("Choice not matched")},YA.prototype._createEncoderBuffer=function(yt){return new sZ(yt,this.reporter)},YA.prototype._encode=function(yt,ir,_c){const mu=this._baseState;if(mu.default!==null&&mu.default===yt)return;const Mu=this._encodeValue(yt,ir,_c);return Mu===void 0||this._skipDefault(Mu,ir,_c)?void 0:Mu},YA.prototype._encodeValue=function(yt,ir,_c){const mu=this._baseState;if(mu.parent===null)return mu.children[0]._encode(yt,ir||new i1e);let Mu=null;if(this.reporter=ir,mu.optional&&yt===void 0){if(mu.default===null)return;yt=mu.default}let Su=null,l0=!1;if(mu.any)Mu=this._createEncoderBuffer(yt);else if(mu.choice)Mu=this._encodeChoice(yt,ir);else if(mu.contains)Su=this._getUse(mu.contains,_c)._encode(yt,ir),l0=!0;else if(mu.children)Su=mu.children.map(function(E0){if(E0._baseState.tag==="null_")return E0._encode(null,ir,yt);if(E0._baseState.key===null)return ir.error("Child should have a key");const j0=ir.enterKey(E0._baseState.key);if(typeof yt!="object")return ir.error("Child expected, but input is not object");const M0=E0._encode(yt[E0._baseState.key],ir,yt);return ir.leaveKey(j0),M0},this).filter(function(E0){return E0}),Su=this._createEncoderBuffer(Su);else if(mu.tag==="seqof"||mu.tag==="setof"){if(!mu.args||mu.args.length!==1)return ir.error("Too many args for : "+mu.tag);if(!Array.isArray(yt))return ir.error("seqof/setof, but data is not Array");const E0=this.clone();E0._baseState.implicit=null,Su=this._createEncoderBuffer(yt.map(function(j0){const M0=this._baseState;return this._getUse(M0.args[0],yt)._encode(j0,ir)},E0))}else mu.use!==null?Mu=this._getUse(mu.use,_c)._encode(yt,ir):(Su=this._encodePrimitive(mu.tag,yt),l0=!0);if(!mu.any&&mu.choice===null){const E0=mu.implicit!==null?mu.implicit:mu.tag,j0=mu.implicit===null?"universal":"context";E0===null?mu.use===null&&ir.error("Tag could be omitted only for .use()"):mu.use===null&&(Mu=this._encodeComposite(E0,l0,j0,Su))}return mu.explicit!==null&&(Mu=this._encodeComposite(mu.explicit,!1,"context",Mu)),Mu},YA.prototype._encodeChoice=function(yt,ir){const _c=this._baseState,mu=_c.choice[yt.type];return mu||A_(!1,yt.type+" not found in "+JSON.stringify(Object.keys(_c.choice))),mu._encode(yt.value,ir)},YA.prototype._encodePrimitive=function(yt,ir){const _c=this._baseState;if(/str$/.test(yt))return this._encodeStr(ir,yt);if(yt==="objid"&&_c.args)return this._encodeObjid(ir,_c.reverseArgs[0],_c.args[1]);if(yt==="objid")return this._encodeObjid(ir,null,null);if(yt==="gentime"||yt==="utctime")return this._encodeTime(ir,yt);if(yt==="null_")return this._encodeNull();if(yt==="int"||yt==="enum")return this._encodeInt(ir,_c.args&&_c.reverseArgs[0]);if(yt==="bool")return this._encodeBool(ir);if(yt==="objDesc")return this._encodeStr(ir,yt);throw new Error("Unsupported tag: "+yt)},YA.prototype._isNumstr=function(yt){return/^[0-9 ]*$/.test(yt)},YA.prototype._isPrintstr=function(yt){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(yt)};var q4={};(function(yt){function ir(_c){const mu={};return Object.keys(_c).forEach(function(Mu){(0|Mu)==Mu&&(Mu|=0);const Su=_c[Mu];mu[Su]=Mu}),mu}yt.tagClass={0:"universal",1:"application",2:"context",3:"private"},yt.tagClassByName=ir(yt.tagClass),yt.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},yt.tagByName=ir(yt.tag)})(q4);const a1e=Gw,PE=V4.Buffer,lZ=Vte,qte=q4;function W4(yt){this.enc="der",this.name=yt.name,this.entity=yt,this.tree=new F6,this.tree._init(yt.body)}var Vle=W4;function F6(yt){lZ.call(this,"der",yt)}function pR(yt){return yt<10?"0"+yt:yt}W4.prototype.encode=function(yt,ir){return this.tree._encode(yt,ir).join()},a1e(F6,lZ),F6.prototype._encodeComposite=function(yt,ir,_c,mu){const Mu=function(E0,j0,M0,B0){let V0;if(E0==="seqof"?E0="seq":E0==="setof"&&(E0="set"),qte.tagByName.hasOwnProperty(E0))V0=qte.tagByName[E0];else{if(typeof E0!="number"||(0|E0)!==E0)return B0.error("Unknown tag: "+E0);V0=E0}return V0>=31?B0.error("Multi-octet tag encoding unsupported"):(j0||(V0|=32),V0|=qte.tagClassByName[M0||"universal"]<<6,V0)}(yt,ir,_c,this.reporter);if(mu.length<128){const E0=PE.alloc(2);return E0[0]=Mu,E0[1]=mu.length,this._createEncoderBuffer([E0,mu])}let Su=1;for(let E0=mu.length;E0>=256;E0>>=8)Su++;const l0=PE.alloc(2+Su);l0[0]=Mu,l0[1]=128|Su;for(let E0=1+Su,j0=mu.length;j0>0;E0--,j0>>=8)l0[E0]=255&j0;return this._createEncoderBuffer([l0,mu])},F6.prototype._encodeStr=function(yt,ir){if(ir==="bitstr")return this._createEncoderBuffer([0|yt.unused,yt.data]);if(ir==="bmpstr"){const _c=PE.alloc(2*yt.length);for(let mu=0;mu=40)return this.reporter.error("Second objid identifier OOB");yt.splice(0,2,40*yt[0]+yt[1])}let mu=0;for(let l0=0;l0=128;E0>>=7)mu++}const Mu=PE.alloc(mu);let Su=Mu.length-1;for(let l0=yt.length-1;l0>=0;l0--){let E0=yt[l0];for(Mu[Su--]=127&E0;(E0>>=7)>0;)Mu[Su--]=128|127&E0}return this._createEncoderBuffer(Mu)},F6.prototype._encodeTime=function(yt,ir){let _c;const mu=new Date(yt);return ir==="gentime"?_c=[pR(mu.getUTCFullYear()),pR(mu.getUTCMonth()+1),pR(mu.getUTCDate()),pR(mu.getUTCHours()),pR(mu.getUTCMinutes()),pR(mu.getUTCSeconds()),"Z"].join(""):ir==="utctime"?_c=[pR(mu.getUTCFullYear()%100),pR(mu.getUTCMonth()+1),pR(mu.getUTCDate()),pR(mu.getUTCHours()),pR(mu.getUTCMinutes()),pR(mu.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+ir+" time is not supported yet"),this._encodeStr(_c,"octstr")},F6.prototype._encodeNull=function(){return this._createEncoderBuffer("")},F6.prototype._encodeInt=function(yt,ir){if(typeof yt=="string"){if(!ir)return this.reporter.error("String int or enum given, but no values map");if(!ir.hasOwnProperty(yt))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(yt));yt=ir[yt]}if(typeof yt!="number"&&!PE.isBuffer(yt)){const Mu=yt.toArray();!yt.sign&&128&Mu[0]&&Mu.unshift(0),yt=PE.from(Mu)}if(PE.isBuffer(yt)){let Mu=yt.length;yt.length===0&&Mu++;const Su=PE.alloc(Mu);return yt.copy(Su),yt.length===0&&(Su[0]=0),this._createEncoderBuffer(Su)}if(yt<128)return this._createEncoderBuffer(yt);if(yt<256)return this._createEncoderBuffer([0,yt]);let _c=1;for(let Mu=yt;Mu>=256;Mu>>=8)_c++;const mu=new Array(_c);for(let Mu=mu.length-1;Mu>=0;Mu--)mu[Mu]=255&yt,yt>>=8;return 128&mu[0]&&mu.unshift(0),this._createEncoderBuffer(PE.from(mu))},F6.prototype._encodeBool=function(yt){return this._createEncoderBuffer(yt?255:0)},F6.prototype._use=function(yt,ir){return typeof yt=="function"&&(yt=yt(ir)),yt._getEncoder("der").tree},F6.prototype._skipDefault=function(yt,ir,_c){const mu=this._baseState;let Mu;if(mu.default===null)return!1;const Su=yt.join();if(mu.defaultBuffer===void 0&&(mu.defaultBuffer=this._encodeValue(mu.default,ir,_c).join()),Su.length!==mu.defaultBuffer.length)return!1;for(Mu=0;Mu>6],Mu=(32&_c)==0;if((31&_c)==31){let Su=_c;for(_c=0;(128&Su)==128;){if(Su=yt.readUInt8(ir),yt.isError(Su))return Su;_c<<=7,_c|=127&Su}}else _c&=31;return{cls:mu,primitive:Mu,tag:_c,tagStr:fZ.tag[_c]}}function Gte(yt,ir,_c){let mu=yt.readUInt8(_c);if(yt.isError(mu))return mu;if(!ir&&mu===128)return null;if(!(128&mu))return mu;const Mu=127μif(Mu>4)return yt.error("length octect is too long");mu=0;for(let Su=0;Suj0-y1-2)throw new Error("message too long");var v1=l5.alloc(j0-M0-y1-2),F1=j0-V0-1,ov=J4(V0),bv=tre(l5.concat([B0,v1,l5.alloc(1,1),E0],F1),hce(ov,F1)),gv=tre(ov,hce(bv,V0));return new $Z(l5.concat([l5.alloc(1),gv,bv],j0))}(Su,ir);else if(mu===1)Mu=function(l0,E0,j0){var M0,B0=E0.length,V0=l0.modulus.byteLength();if(B0>V0-11)throw new Error("message too long");return M0=j0?l5.alloc(V0-B0-3,255):function(y1){for(var v1,F1=l5.allocUnsafe(y1),ov=0,bv=J4(2*y1),gv=0;ov=0)throw new Error("data too long for modulus")}return _c?pce(Mu,Su):k1e(Mu,Su)},C1e=g9,nre=wZ,ire=Qte,EZ=US,T1e=KY,R1e=d4,c5=ere,X4=Sy().Buffer,M1e=function(yt,ir,_c){var mu;mu=yt.padding?yt.padding:_c?1:4;var Mu,Su=C1e(yt),l0=Su.modulus.byteLength();if(ir.length>l0||new EZ(ir).cmp(Su.modulus)>=0)throw new Error("decryption error");Mu=_c?c5(new EZ(ir),Su):T1e(ir,Su);var E0=X4.alloc(l0-Mu.length);if(Mu=X4.concat([E0,Mu],l0),mu===4)return function(j0,M0){var B0=j0.modulus.byteLength(),V0=R1e("sha1").update(X4.alloc(0)).digest(),y1=V0.length;if(M0[0]!==0)throw new Error("decryption error");var v1=M0.slice(1,y1+1),F1=M0.slice(y1+1),ov=ire(v1,nre(F1,y1)),bv=ire(F1,nre(ov,B0-y1-1));if(function(xv,hy){xv=X4.from(xv),hy=X4.from(hy);var oy=0,fy=xv.length;xv.length!==hy.length&&(oy++,fy=Math.min(xv.length,hy.length));for(var Fy=-1;++Fy=M0.length){v1++;break}var F1=M0.slice(2,y1-1);if((V0.toString("hex")!=="0002"&&!B0||V0.toString("hex")!=="0001"&&B0)&&v1++,F1.length<8&&v1++,v1)throw new Error("decryption error");return M0.slice(y1)}(0,Mu,_c);if(mu===3)return Mu;throw new Error("unknown padding")};(function(yt){yt.publicEncrypt=rre,yt.privateDecrypt=M1e,yt.privateEncrypt=function(ir,_c){return yt.publicEncrypt(ir,_c,!0)},yt.publicDecrypt=function(ir,_c){return yt.privateDecrypt(ir,_c,!0)}})(Xte);var yH={};function ore(){throw new Error(`secure random number generation not supported by this browser -use chrome, FireFox or Internet Explorer 11`)}var are,mce=Sy(),gce=mce.Buffer,vce=mce.kMaxLength,PF=c.crypto||c.msCrypto,yce=Math.pow(2,32)-1;function bH(yt,ir){if(typeof yt!="number"||yt!=yt)throw new TypeError("offset must be a number");if(yt>yce||yt<0)throw new TypeError("offset must be a uint32");if(yt>vce||yt>ir)throw new RangeError("offset out of range")}function sre(yt,ir,_c){if(typeof yt!="number"||yt!=yt)throw new TypeError("size must be a number");if(yt>yce||yt<0)throw new TypeError("size must be a uint32");if(yt+ir>_c||yt>vce)throw new RangeError("buffer too small")}function lre(yt,ir,_c,mu){var Mu=yt.buffer,Su=new Uint8Array(Mu,ir,_c);return PF.getRandomValues(Su),mu?void $2(function(){mu(null,yt)}):yt}function Q4(){if(are)return A2;are=1,A2.randomBytes=A2.rng=A2.pseudoRandomBytes=A2.prng=i$,A2.createHash=A2.Hash=d4,A2.createHmac=A2.Hmac=SY;var yt=m4,ir=Object.keys(yt),_c=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(ir);A2.getHashes=function(){return _c};var mu=g4;A2.pbkdf2=mu.pbkdf2,A2.pbkdf2Sync=mu.pbkdf2Sync;var Mu=cR;A2.Cipher=Mu.Cipher,A2.createCipher=Mu.createCipher,A2.Cipheriv=Mu.Cipheriv,A2.createCipheriv=Mu.createCipheriv,A2.Decipher=Mu.Decipher,A2.createDecipher=Mu.createDecipher,A2.Decipheriv=Mu.Decipheriv,A2.createDecipheriv=Mu.createDecipheriv,A2.getCiphers=Mu.getCiphers,A2.listCiphers=Mu.listCiphers;var Su=function(){if(kte)return Qx;kte=1;var M0=j6(),B0=cle,V0=function(){if(HY)return Jz;HY=1;var v1=US,F1=new(xte()),ov=new v1(24),bv=new v1(11),gv=new v1(10),xv=new v1(3),hy=new v1(7),oy=j6(),fy=i$;function Fy(s0,g0){return g0=g0||"utf8",vw(s0)||(s0=new F0(s0,g0)),this._pub=new v1(s0),this}function qv(s0,g0){return g0=g0||"utf8",vw(s0)||(s0=new F0(s0,g0)),this._priv=new v1(s0),this}Jz=T0;var Qv={};function T0(s0,g0,d0){this.setGenerator(g0),this.__prime=new v1(s0),this._prime=v1.mont(this.__prime),this._primeLen=s0.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,d0?(this.setPublicKey=Fy,this.setPrivateKey=qv):this._primeCode=8}function X0(s0,g0){var d0=new F0(s0.toArray());return g0?d0.toString(g0):d0}return Object.defineProperty(T0.prototype,"verifyError",{enumerable:!0,get:function(){return typeof this._primeCode!="number"&&(this._primeCode=function(s0,g0){var d0=g0.toString("hex"),c0=[d0,s0.toString(16)].join("_");if(c0 in Qv)return Qv[c0];var a0,S0=0;if(s0.isEven()||!oy.simpleSieve||!oy.fermatTest(s0)||!F1.test(s0))return S0+=1,S0+=d0==="02"||d0==="05"?8:4,Qv[c0]=S0,S0;switch(F1.test(s0.shrn(1))||(S0+=2),d0){case"02":s0.mod(ov).cmp(bv)&&(S0+=8);break;case"05":(a0=s0.mod(gv)).cmp(xv)&&a0.cmp(hy)&&(S0+=8);break;default:S0+=4}return Qv[c0]=S0,S0}(this.__prime,this.__gen)),this._primeCode}}),T0.prototype.generateKeys=function(){return this._priv||(this._priv=new v1(fy(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},T0.prototype.computeSecret=function(s0){var g0=new F0((s0=(s0=new v1(s0)).toRed(this._prime)).redPow(this._priv).fromRed().toArray()),d0=this.getPrime();if(g0.length0&&z0.ishrn(Q0),z0}function d0(a0,S0,z0){var Q0,p1;do{for(Q0=oy.alloc(0);8*Q0.length=s0)throw new Error("invalid sig")}return Zte=function(X0,s0,g0,d0,c0){var a0=qv(g0);if(a0.type==="ec"){if(d0!=="ecdsa"&&d0!=="ecdsa/rsa")throw new Error("wrong public key type");return function(S1,n1,V1){var J1=Qv[V1.data.algorithm.curve.join(".")];if(!J1)throw new Error("unknown curve "+V1.data.algorithm.curve.join("."));var wv=new Fy(J1),Sv=V1.data.subjectPrivateKey.data;return wv.verify(n1,S1,Sv)}(X0,s0,a0)}if(a0.type==="dsa"){if(d0!=="dsa")throw new Error("wrong public key type");return function(S1,n1,V1){var J1=V1.data.p,wv=V1.data.q,Sv=V1.data.g,Hv=V1.data.pub_key,ty=qv.signature.decode(S1,"der"),gy=ty.s,yv=ty.r;T0(gy,wv),T0(yv,wv);var Av=fy.mont(J1),Dv=gy.invm(wv);return Sv.toRed(Av).redPow(new fy(n1).mul(Dv).mod(wv)).fromRed().mul(Hv.toRed(Av).redPow(yv.mul(Dv).mod(wv)).fromRed()).mod(J1).mod(wv).cmp(yv)===0}(X0,s0,a0)}if(d0!=="rsa"&&d0!=="ecdsa/rsa")throw new Error("wrong public key type");s0=oy.concat([c0,s0]);for(var S0=a0.modulus.byteLength(),z0=[1],Q0=0;s0.length+z0.length+2{switch(yt){case"sha256":case"sha3-256":case"blake2s256":return 32;case"sha512":case"sha3-512":case"blake2b512":return 64;case"sha224":case"sha3-224":return 28;case"sha384":case"sha3-384":return 48;case"sha1":return 20;case"md5":return 16;default:{let ir=cre[yt];return ir===void 0&&(ir=bce(yt).digest().length,cre[yt]=ir),ir}}},fre=(yt,ir,_c,mu)=>{const Mu=yB.isBuffer(_c)?_c:yB.from(_c),Su=mu&&mu.length?yB.from(mu):yB.alloc(ir,0);return AZ(yt,Su).update(Mu).digest()},dre=(yt,ir,_c,mu,Mu)=>{const Su=yB.isBuffer(Mu)?Mu:yB.from(Mu||""),l0=Su.length,E0=Math.ceil(mu/ir);if(E0>255)throw new Error(`OKM length ${mu} is too long for ${yt} hash`);const j0=yB.alloc(ir*E0+l0+1);for(let M0=1,B0=0,V0=0;M0<=E0;++M0)Su.copy(j0,V0),j0[V0+l0]=M0,AZ(yt,_c).update(j0.slice(B0,V0+l0+1)).digest().copy(j0,V0),B0=V0,V0+=ir;return j0.slice(0,mu)};function tq(yt,ir,{salt:_c="",info:mu="",hash:Mu="SHA-256"}={}){Mu=Mu.toLowerCase().replace("-","");const Su=ure(Mu),l0=fre(Mu,Su,yt,_c);return dre(Mu,Su,l0,ir,mu)}Object.defineProperties(tq,{hash_length:{configurable:!1,enumerable:!1,writable:!1,value:ure},extract:{configurable:!1,enumerable:!1,writable:!1,value:fre},expand:{configurable:!1,enumerable:!1,writable:!1,value:dre}});var bB=tq;const wH="Impossible case. Please create issue.",hre="The tweak was out of range or the resulted private key is invalid",pre="The tweak was out of range or equal to zero",wB="Public Key could not be parsed",rq="Public Key serialization error",$H="Signature could not be parsed";function vR(yt,ir){if(!yt)throw new Error(ir)}function FE(yt,ir,_c){if(vR(ir instanceof Uint8Array,`Expected ${yt} to be an Uint8Array`),_c!==void 0)if(Array.isArray(_c)){const mu=`Expected ${yt} to be an Uint8Array with length [${_c.join(", ")}]`;vR(_c.includes(ir.length),mu)}else{const mu=`Expected ${yt} to be an Uint8Array with length ${_c}`;vR(ir.length===_c,mu)}}function TM(yt){vR(jF(yt)==="Boolean","Expected compressed to be a Boolean")}function RM(yt=_c=>new Uint8Array(_c),ir){return typeof yt=="function"&&(yt=yt(ir)),FE("output",yt,ir),yt}function jF(yt){return Object.prototype.toString.call(yt).slice(8,-1)}var wce={},yR={},$B={exports:{}};(function(yt){(function(ir,_c){function mu(T0,X0){if(!T0)throw new Error(X0||"Assertion failed")}function Mu(T0,X0){T0.super_=X0;var s0=function(){};s0.prototype=X0.prototype,T0.prototype=new s0,T0.prototype.constructor=T0}function Su(T0,X0,s0){if(Su.isBN(T0))return T0;this.negative=0,this.words=null,this.length=0,this.red=null,T0!==null&&(X0!=="le"&&X0!=="be"||(s0=X0,X0=10),this._init(T0||0,X0||10,s0||"be"))}var l0;typeof ir=="object"?ir.exports=Su:_c.BN=Su,Su.BN=Su,Su.wordSize=26;try{l0=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:zw.Buffer}catch{}function E0(T0,X0){var s0=T0.charCodeAt(X0);return s0>=65&&s0<=70?s0-55:s0>=97&&s0<=102?s0-87:s0-48&15}function j0(T0,X0,s0){var g0=E0(T0,s0);return s0-1>=X0&&(g0|=E0(T0,s0-1)<<4),g0}function M0(T0,X0,s0,g0){for(var d0=0,c0=Math.min(T0.length,s0),a0=X0;a0=49?S0-49+10:S0>=17?S0-17+10:S0}return d0}Su.isBN=function(T0){return T0 instanceof Su||T0!==null&&typeof T0=="object"&&T0.constructor.wordSize===Su.wordSize&&Array.isArray(T0.words)},Su.max=function(T0,X0){return T0.cmp(X0)>0?T0:X0},Su.min=function(T0,X0){return T0.cmp(X0)<0?T0:X0},Su.prototype._init=function(T0,X0,s0){if(typeof T0=="number")return this._initNumber(T0,X0,s0);if(typeof T0=="object")return this._initArray(T0,X0,s0);X0==="hex"&&(X0=16),mu(X0===(0|X0)&&X0>=2&&X0<=36);var g0=0;(T0=T0.toString().replace(/\s+/g,""))[0]==="-"&&(g0++,this.negative=1),g0=0;g0-=3)c0=T0[g0]|T0[g0-1]<<8|T0[g0-2]<<16,this.words[d0]|=c0<>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);else if(s0==="le")for(g0=0,d0=0;g0>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);return this.strip()},Su.prototype._parseHex=function(T0,X0,s0){this.length=Math.ceil((T0.length-X0)/6),this.words=new Array(this.length);for(var g0=0;g0=X0;g0-=2)d0=j0(T0,X0,g0)<=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;else for(g0=(T0.length-X0)%2==0?X0+1:X0;g0=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;this.strip()},Su.prototype._parseBase=function(T0,X0,s0){this.words=[0],this.length=1;for(var g0=0,d0=1;d0<=67108863;d0*=X0)g0++;g0--,d0=d0/X0|0;for(var c0=T0.length-s0,a0=c0%g0,S0=Math.min(c0,c0-a0)+s0,z0=0,Q0=s0;Q01&&this.words[this.length-1]===0;)this.length--;return this._normSign()},Su.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},Su.prototype.inspect=function(){return(this.red?""};var B0=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],V0=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],y1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function v1(T0,X0,s0){s0.negative=X0.negative^T0.negative;var g0=T0.length+X0.length|0;s0.length=g0,g0=g0-1|0;var d0=0|T0.words[0],c0=0|X0.words[0],a0=d0*c0,S0=67108863&a0,z0=a0/67108864|0;s0.words[0]=S0;for(var Q0=1;Q0>>26,T1=67108863&z0,U1=Math.min(Q0,X0.length-1),S1=Math.max(0,Q0-T0.length+1);S1<=U1;S1++){var n1=Q0-S1|0;p1+=(a0=(d0=0|T0.words[n1])*(c0=0|X0.words[S1])+T1)/67108864|0,T1=67108863&a0}s0.words[Q0]=0|T1,z0=0|p1}return z0!==0?s0.words[Q0]=0|z0:s0.length--,s0.strip()}Su.prototype.toString=function(T0,X0){var s0;if(X0=0|X0||1,(T0=T0||10)===16||T0==="hex"){s0="";for(var g0=0,d0=0,c0=0;c0>>24-g0&16777215)!=0||c0!==this.length-1?B0[6-S0.length]+S0+s0:S0+s0,(g0+=2)>=26&&(g0-=26,c0--)}for(d0!==0&&(s0=d0.toString(16)+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}if(T0===(0|T0)&&T0>=2&&T0<=36){var z0=V0[T0],Q0=y1[T0];s0="";var p1=this.clone();for(p1.negative=0;!p1.isZero();){var T1=p1.modn(Q0).toString(T0);s0=(p1=p1.idivn(Q0)).isZero()?T1+s0:B0[z0-T1.length]+T1+s0}for(this.isZero()&&(s0="0"+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}mu(!1,"Base should be between 2 and 36")},Su.prototype.toNumber=function(){var T0=this.words[0];return this.length===2?T0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?T0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-T0:T0},Su.prototype.toJSON=function(){return this.toString(16)},Su.prototype.toBuffer=function(T0,X0){return mu(l0!==void 0),this.toArrayLike(l0,T0,X0)},Su.prototype.toArray=function(T0,X0){return this.toArrayLike(Array,T0,X0)},Su.prototype.toArrayLike=function(T0,X0,s0){var g0=this.byteLength(),d0=s0||Math.max(1,g0);mu(g0<=d0,"byte array longer than desired length"),mu(d0>0,"Requested array length <= 0"),this.strip();var c0,a0,S0=X0==="le",z0=new T0(d0),Q0=this.clone();if(S0){for(a0=0;!Q0.isZero();a0++)c0=Q0.andln(255),Q0.iushrn(8),z0[a0]=c0;for(;a0=4096&&(s0+=13,X0>>>=13),X0>=64&&(s0+=7,X0>>>=7),X0>=8&&(s0+=4,X0>>>=4),X0>=2&&(s0+=2,X0>>>=2),s0+X0},Su.prototype._zeroBits=function(T0){if(T0===0)return 26;var X0=T0,s0=0;return!(8191&X0)&&(s0+=13,X0>>>=13),!(127&X0)&&(s0+=7,X0>>>=7),!(15&X0)&&(s0+=4,X0>>>=4),!(3&X0)&&(s0+=2,X0>>>=2),!(1&X0)&&s0++,s0},Su.prototype.bitLength=function(){var T0=this.words[this.length-1],X0=this._countBits(T0);return 26*(this.length-1)+X0},Su.prototype.zeroBits=function(){if(this.isZero())return 0;for(var T0=0,X0=0;X0T0.length?this.clone().ior(T0):T0.clone().ior(this)},Su.prototype.uor=function(T0){return this.length>T0.length?this.clone().iuor(T0):T0.clone().iuor(this)},Su.prototype.iuand=function(T0){var X0;X0=this.length>T0.length?T0:this;for(var s0=0;s0T0.length?this.clone().iand(T0):T0.clone().iand(this)},Su.prototype.uand=function(T0){return this.length>T0.length?this.clone().iuand(T0):T0.clone().iuand(this)},Su.prototype.iuxor=function(T0){var X0,s0;this.length>T0.length?(X0=this,s0=T0):(X0=T0,s0=this);for(var g0=0;g0T0.length?this.clone().ixor(T0):T0.clone().ixor(this)},Su.prototype.uxor=function(T0){return this.length>T0.length?this.clone().iuxor(T0):T0.clone().iuxor(this)},Su.prototype.inotn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=0|Math.ceil(T0/26),s0=T0%26;this._expand(X0),s0>0&&X0--;for(var g0=0;g00&&(this.words[g0]=~this.words[g0]&67108863>>26-s0),this.strip()},Su.prototype.notn=function(T0){return this.clone().inotn(T0)},Su.prototype.setn=function(T0,X0){mu(typeof T0=="number"&&T0>=0);var s0=T0/26|0,g0=T0%26;return this._expand(s0+1),this.words[s0]=X0?this.words[s0]|1<T0.length?(s0=this,g0=T0):(s0=T0,g0=this);for(var d0=0,c0=0;c0>>26;for(;d0!==0&&c0>>26;if(this.length=s0.length,d0!==0)this.words[this.length]=d0,this.length++;else if(s0!==this)for(;c0T0.length?this.clone().iadd(T0):T0.clone().iadd(this)},Su.prototype.isub=function(T0){if(T0.negative!==0){T0.negative=0;var X0=this.iadd(T0);return T0.negative=1,X0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(T0),this.negative=1,this._normSign();var s0,g0,d0=this.cmp(T0);if(d0===0)return this.negative=0,this.length=1,this.words[0]=0,this;d0>0?(s0=this,g0=T0):(s0=T0,g0=this);for(var c0=0,a0=0;a0>26,this.words[a0]=67108863&X0;for(;c0!==0&&a0>26,this.words[a0]=67108863&X0;if(c0===0&&a0>>13,S1=0|a0[1],n1=8191&S1,V1=S1>>>13,J1=0|a0[2],wv=8191&J1,Sv=J1>>>13,Hv=0|a0[3],ty=8191&Hv,gy=Hv>>>13,yv=0|a0[4],Av=8191&yv,Dv=yv>>>13,ry=0|a0[5],Jv=8191&ry,Fv=ry>>>13,iy=0|a0[6],cy=8191&iy,Uy=iy>>>13,r2=0|a0[7],f2=8191&r2,j2=r2>>>13,mw=0|a0[8],p2=8191&mw,Vw=mw>>>13,Ew=0|a0[9],q2=8191&Ew,$3=Ew>>>13,Rw=0|S0[0],K2=8191&Rw,Xw=Rw>>>13,a3=0|S0[1],F2=8191&a3,Qw=a3>>>13,vt=0|S0[2],wt=8191&vt,Ws=vt>>>13,pu=0|S0[3],Ru=8191&pu,wu=pu>>>13,t0=0|S0[4],m0=8191&t0,k0=t0>>>13,_0=0|S0[5],R0=8191&_0,N0=_0>>>13,l1=0|S0[6],a1=8191&l1,x1=l1>>>13,K1=0|S0[7],W1=8191&K1,_g=K1>>>13,uv=0|S0[8],Tv=8191&uv,Uv=uv>>>13,Wv=0|S0[9],ny=8191&Wv,Rv=Wv>>>13;s0.negative=T0.negative^X0.negative,s0.length=19;var Gv=(Q0+(g0=Math.imul(T1,K2))|0)+((8191&(d0=(d0=Math.imul(T1,Xw))+Math.imul(U1,K2)|0))<<13)|0;Q0=((c0=Math.imul(U1,Xw))+(d0>>>13)|0)+(Gv>>>26)|0,Gv&=67108863,g0=Math.imul(n1,K2),d0=(d0=Math.imul(n1,Xw))+Math.imul(V1,K2)|0,c0=Math.imul(V1,Xw);var C0=(Q0+(g0=g0+Math.imul(T1,F2)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Qw)|0)+Math.imul(U1,F2)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Qw)|0)+(d0>>>13)|0)+(C0>>>26)|0,C0&=67108863,g0=Math.imul(wv,K2),d0=(d0=Math.imul(wv,Xw))+Math.imul(Sv,K2)|0,c0=Math.imul(Sv,Xw),g0=g0+Math.imul(n1,F2)|0,d0=(d0=d0+Math.imul(n1,Qw)|0)+Math.imul(V1,F2)|0,c0=c0+Math.imul(V1,Qw)|0;var J0=(Q0+(g0=g0+Math.imul(T1,wt)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Ws)|0)+Math.imul(U1,wt)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Ws)|0)+(d0>>>13)|0)+(J0>>>26)|0,J0&=67108863,g0=Math.imul(ty,K2),d0=(d0=Math.imul(ty,Xw))+Math.imul(gy,K2)|0,c0=Math.imul(gy,Xw),g0=g0+Math.imul(wv,F2)|0,d0=(d0=d0+Math.imul(wv,Qw)|0)+Math.imul(Sv,F2)|0,c0=c0+Math.imul(Sv,Qw)|0,g0=g0+Math.imul(n1,wt)|0,d0=(d0=d0+Math.imul(n1,Ws)|0)+Math.imul(V1,wt)|0,c0=c0+Math.imul(V1,Ws)|0;var f0=(Q0+(g0=g0+Math.imul(T1,Ru)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,wu)|0)+Math.imul(U1,Ru)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,wu)|0)+(d0>>>13)|0)+(f0>>>26)|0,f0&=67108863,g0=Math.imul(Av,K2),d0=(d0=Math.imul(Av,Xw))+Math.imul(Dv,K2)|0,c0=Math.imul(Dv,Xw),g0=g0+Math.imul(ty,F2)|0,d0=(d0=d0+Math.imul(ty,Qw)|0)+Math.imul(gy,F2)|0,c0=c0+Math.imul(gy,Qw)|0,g0=g0+Math.imul(wv,wt)|0,d0=(d0=d0+Math.imul(wv,Ws)|0)+Math.imul(Sv,wt)|0,c0=c0+Math.imul(Sv,Ws)|0,g0=g0+Math.imul(n1,Ru)|0,d0=(d0=d0+Math.imul(n1,wu)|0)+Math.imul(V1,Ru)|0,c0=c0+Math.imul(V1,wu)|0;var v0=(Q0+(g0=g0+Math.imul(T1,m0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,k0)|0)+Math.imul(U1,m0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,k0)|0)+(d0>>>13)|0)+(v0>>>26)|0,v0&=67108863,g0=Math.imul(Jv,K2),d0=(d0=Math.imul(Jv,Xw))+Math.imul(Fv,K2)|0,c0=Math.imul(Fv,Xw),g0=g0+Math.imul(Av,F2)|0,d0=(d0=d0+Math.imul(Av,Qw)|0)+Math.imul(Dv,F2)|0,c0=c0+Math.imul(Dv,Qw)|0,g0=g0+Math.imul(ty,wt)|0,d0=(d0=d0+Math.imul(ty,Ws)|0)+Math.imul(gy,wt)|0,c0=c0+Math.imul(gy,Ws)|0,g0=g0+Math.imul(wv,Ru)|0,d0=(d0=d0+Math.imul(wv,wu)|0)+Math.imul(Sv,Ru)|0,c0=c0+Math.imul(Sv,wu)|0,g0=g0+Math.imul(n1,m0)|0,d0=(d0=d0+Math.imul(n1,k0)|0)+Math.imul(V1,m0)|0,c0=c0+Math.imul(V1,k0)|0;var h0=(Q0+(g0=g0+Math.imul(T1,R0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,N0)|0)+Math.imul(U1,R0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,N0)|0)+(d0>>>13)|0)+(h0>>>26)|0,h0&=67108863,g0=Math.imul(cy,K2),d0=(d0=Math.imul(cy,Xw))+Math.imul(Uy,K2)|0,c0=Math.imul(Uy,Xw),g0=g0+Math.imul(Jv,F2)|0,d0=(d0=d0+Math.imul(Jv,Qw)|0)+Math.imul(Fv,F2)|0,c0=c0+Math.imul(Fv,Qw)|0,g0=g0+Math.imul(Av,wt)|0,d0=(d0=d0+Math.imul(Av,Ws)|0)+Math.imul(Dv,wt)|0,c0=c0+Math.imul(Dv,Ws)|0,g0=g0+Math.imul(ty,Ru)|0,d0=(d0=d0+Math.imul(ty,wu)|0)+Math.imul(gy,Ru)|0,c0=c0+Math.imul(gy,wu)|0,g0=g0+Math.imul(wv,m0)|0,d0=(d0=d0+Math.imul(wv,k0)|0)+Math.imul(Sv,m0)|0,c0=c0+Math.imul(Sv,k0)|0,g0=g0+Math.imul(n1,R0)|0,d0=(d0=d0+Math.imul(n1,N0)|0)+Math.imul(V1,R0)|0,c0=c0+Math.imul(V1,N0)|0;var u0=(Q0+(g0=g0+Math.imul(T1,a1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,x1)|0)+Math.imul(U1,a1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,x1)|0)+(d0>>>13)|0)+(u0>>>26)|0,u0&=67108863,g0=Math.imul(f2,K2),d0=(d0=Math.imul(f2,Xw))+Math.imul(j2,K2)|0,c0=Math.imul(j2,Xw),g0=g0+Math.imul(cy,F2)|0,d0=(d0=d0+Math.imul(cy,Qw)|0)+Math.imul(Uy,F2)|0,c0=c0+Math.imul(Uy,Qw)|0,g0=g0+Math.imul(Jv,wt)|0,d0=(d0=d0+Math.imul(Jv,Ws)|0)+Math.imul(Fv,wt)|0,c0=c0+Math.imul(Fv,Ws)|0,g0=g0+Math.imul(Av,Ru)|0,d0=(d0=d0+Math.imul(Av,wu)|0)+Math.imul(Dv,Ru)|0,c0=c0+Math.imul(Dv,wu)|0,g0=g0+Math.imul(ty,m0)|0,d0=(d0=d0+Math.imul(ty,k0)|0)+Math.imul(gy,m0)|0,c0=c0+Math.imul(gy,k0)|0,g0=g0+Math.imul(wv,R0)|0,d0=(d0=d0+Math.imul(wv,N0)|0)+Math.imul(Sv,R0)|0,c0=c0+Math.imul(Sv,N0)|0,g0=g0+Math.imul(n1,a1)|0,d0=(d0=d0+Math.imul(n1,x1)|0)+Math.imul(V1,a1)|0,c0=c0+Math.imul(V1,x1)|0;var o0=(Q0+(g0=g0+Math.imul(T1,W1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,_g)|0)+Math.imul(U1,W1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,_g)|0)+(d0>>>13)|0)+(o0>>>26)|0,o0&=67108863,g0=Math.imul(p2,K2),d0=(d0=Math.imul(p2,Xw))+Math.imul(Vw,K2)|0,c0=Math.imul(Vw,Xw),g0=g0+Math.imul(f2,F2)|0,d0=(d0=d0+Math.imul(f2,Qw)|0)+Math.imul(j2,F2)|0,c0=c0+Math.imul(j2,Qw)|0,g0=g0+Math.imul(cy,wt)|0,d0=(d0=d0+Math.imul(cy,Ws)|0)+Math.imul(Uy,wt)|0,c0=c0+Math.imul(Uy,Ws)|0,g0=g0+Math.imul(Jv,Ru)|0,d0=(d0=d0+Math.imul(Jv,wu)|0)+Math.imul(Fv,Ru)|0,c0=c0+Math.imul(Fv,wu)|0,g0=g0+Math.imul(Av,m0)|0,d0=(d0=d0+Math.imul(Av,k0)|0)+Math.imul(Dv,m0)|0,c0=c0+Math.imul(Dv,k0)|0,g0=g0+Math.imul(ty,R0)|0,d0=(d0=d0+Math.imul(ty,N0)|0)+Math.imul(gy,R0)|0,c0=c0+Math.imul(gy,N0)|0,g0=g0+Math.imul(wv,a1)|0,d0=(d0=d0+Math.imul(wv,x1)|0)+Math.imul(Sv,a1)|0,c0=c0+Math.imul(Sv,x1)|0,g0=g0+Math.imul(n1,W1)|0,d0=(d0=d0+Math.imul(n1,_g)|0)+Math.imul(V1,W1)|0,c0=c0+Math.imul(V1,_g)|0;var x0=(Q0+(g0=g0+Math.imul(T1,Tv)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Uv)|0)+Math.imul(U1,Tv)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Uv)|0)+(d0>>>13)|0)+(x0>>>26)|0,x0&=67108863,g0=Math.imul(q2,K2),d0=(d0=Math.imul(q2,Xw))+Math.imul($3,K2)|0,c0=Math.imul($3,Xw),g0=g0+Math.imul(p2,F2)|0,d0=(d0=d0+Math.imul(p2,Qw)|0)+Math.imul(Vw,F2)|0,c0=c0+Math.imul(Vw,Qw)|0,g0=g0+Math.imul(f2,wt)|0,d0=(d0=d0+Math.imul(f2,Ws)|0)+Math.imul(j2,wt)|0,c0=c0+Math.imul(j2,Ws)|0,g0=g0+Math.imul(cy,Ru)|0,d0=(d0=d0+Math.imul(cy,wu)|0)+Math.imul(Uy,Ru)|0,c0=c0+Math.imul(Uy,wu)|0,g0=g0+Math.imul(Jv,m0)|0,d0=(d0=d0+Math.imul(Jv,k0)|0)+Math.imul(Fv,m0)|0,c0=c0+Math.imul(Fv,k0)|0,g0=g0+Math.imul(Av,R0)|0,d0=(d0=d0+Math.imul(Av,N0)|0)+Math.imul(Dv,R0)|0,c0=c0+Math.imul(Dv,N0)|0,g0=g0+Math.imul(ty,a1)|0,d0=(d0=d0+Math.imul(ty,x1)|0)+Math.imul(gy,a1)|0,c0=c0+Math.imul(gy,x1)|0,g0=g0+Math.imul(wv,W1)|0,d0=(d0=d0+Math.imul(wv,_g)|0)+Math.imul(Sv,W1)|0,c0=c0+Math.imul(Sv,_g)|0,g0=g0+Math.imul(n1,Tv)|0,d0=(d0=d0+Math.imul(n1,Uv)|0)+Math.imul(V1,Tv)|0,c0=c0+Math.imul(V1,Uv)|0;var U0=(Q0+(g0=g0+Math.imul(T1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Rv)|0)+Math.imul(U1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Rv)|0)+(d0>>>13)|0)+(U0>>>26)|0,U0&=67108863,g0=Math.imul(q2,F2),d0=(d0=Math.imul(q2,Qw))+Math.imul($3,F2)|0,c0=Math.imul($3,Qw),g0=g0+Math.imul(p2,wt)|0,d0=(d0=d0+Math.imul(p2,Ws)|0)+Math.imul(Vw,wt)|0,c0=c0+Math.imul(Vw,Ws)|0,g0=g0+Math.imul(f2,Ru)|0,d0=(d0=d0+Math.imul(f2,wu)|0)+Math.imul(j2,Ru)|0,c0=c0+Math.imul(j2,wu)|0,g0=g0+Math.imul(cy,m0)|0,d0=(d0=d0+Math.imul(cy,k0)|0)+Math.imul(Uy,m0)|0,c0=c0+Math.imul(Uy,k0)|0,g0=g0+Math.imul(Jv,R0)|0,d0=(d0=d0+Math.imul(Jv,N0)|0)+Math.imul(Fv,R0)|0,c0=c0+Math.imul(Fv,N0)|0,g0=g0+Math.imul(Av,a1)|0,d0=(d0=d0+Math.imul(Av,x1)|0)+Math.imul(Dv,a1)|0,c0=c0+Math.imul(Dv,x1)|0,g0=g0+Math.imul(ty,W1)|0,d0=(d0=d0+Math.imul(ty,_g)|0)+Math.imul(gy,W1)|0,c0=c0+Math.imul(gy,_g)|0,g0=g0+Math.imul(wv,Tv)|0,d0=(d0=d0+Math.imul(wv,Uv)|0)+Math.imul(Sv,Tv)|0,c0=c0+Math.imul(Sv,Uv)|0;var e1=(Q0+(g0=g0+Math.imul(n1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(n1,Rv)|0)+Math.imul(V1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(V1,Rv)|0)+(d0>>>13)|0)+(e1>>>26)|0,e1&=67108863,g0=Math.imul(q2,wt),d0=(d0=Math.imul(q2,Ws))+Math.imul($3,wt)|0,c0=Math.imul($3,Ws),g0=g0+Math.imul(p2,Ru)|0,d0=(d0=d0+Math.imul(p2,wu)|0)+Math.imul(Vw,Ru)|0,c0=c0+Math.imul(Vw,wu)|0,g0=g0+Math.imul(f2,m0)|0,d0=(d0=d0+Math.imul(f2,k0)|0)+Math.imul(j2,m0)|0,c0=c0+Math.imul(j2,k0)|0,g0=g0+Math.imul(cy,R0)|0,d0=(d0=d0+Math.imul(cy,N0)|0)+Math.imul(Uy,R0)|0,c0=c0+Math.imul(Uy,N0)|0,g0=g0+Math.imul(Jv,a1)|0,d0=(d0=d0+Math.imul(Jv,x1)|0)+Math.imul(Fv,a1)|0,c0=c0+Math.imul(Fv,x1)|0,g0=g0+Math.imul(Av,W1)|0,d0=(d0=d0+Math.imul(Av,_g)|0)+Math.imul(Dv,W1)|0,c0=c0+Math.imul(Dv,_g)|0,g0=g0+Math.imul(ty,Tv)|0,d0=(d0=d0+Math.imul(ty,Uv)|0)+Math.imul(gy,Tv)|0,c0=c0+Math.imul(gy,Uv)|0;var h1=(Q0+(g0=g0+Math.imul(wv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(wv,Rv)|0)+Math.imul(Sv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Sv,Rv)|0)+(d0>>>13)|0)+(h1>>>26)|0,h1&=67108863,g0=Math.imul(q2,Ru),d0=(d0=Math.imul(q2,wu))+Math.imul($3,Ru)|0,c0=Math.imul($3,wu),g0=g0+Math.imul(p2,m0)|0,d0=(d0=d0+Math.imul(p2,k0)|0)+Math.imul(Vw,m0)|0,c0=c0+Math.imul(Vw,k0)|0,g0=g0+Math.imul(f2,R0)|0,d0=(d0=d0+Math.imul(f2,N0)|0)+Math.imul(j2,R0)|0,c0=c0+Math.imul(j2,N0)|0,g0=g0+Math.imul(cy,a1)|0,d0=(d0=d0+Math.imul(cy,x1)|0)+Math.imul(Uy,a1)|0,c0=c0+Math.imul(Uy,x1)|0,g0=g0+Math.imul(Jv,W1)|0,d0=(d0=d0+Math.imul(Jv,_g)|0)+Math.imul(Fv,W1)|0,c0=c0+Math.imul(Fv,_g)|0,g0=g0+Math.imul(Av,Tv)|0,d0=(d0=d0+Math.imul(Av,Uv)|0)+Math.imul(Dv,Tv)|0,c0=c0+Math.imul(Dv,Uv)|0;var k1=(Q0+(g0=g0+Math.imul(ty,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(ty,Rv)|0)+Math.imul(gy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(gy,Rv)|0)+(d0>>>13)|0)+(k1>>>26)|0,k1&=67108863,g0=Math.imul(q2,m0),d0=(d0=Math.imul(q2,k0))+Math.imul($3,m0)|0,c0=Math.imul($3,k0),g0=g0+Math.imul(p2,R0)|0,d0=(d0=d0+Math.imul(p2,N0)|0)+Math.imul(Vw,R0)|0,c0=c0+Math.imul(Vw,N0)|0,g0=g0+Math.imul(f2,a1)|0,d0=(d0=d0+Math.imul(f2,x1)|0)+Math.imul(j2,a1)|0,c0=c0+Math.imul(j2,x1)|0,g0=g0+Math.imul(cy,W1)|0,d0=(d0=d0+Math.imul(cy,_g)|0)+Math.imul(Uy,W1)|0,c0=c0+Math.imul(Uy,_g)|0,g0=g0+Math.imul(Jv,Tv)|0,d0=(d0=d0+Math.imul(Jv,Uv)|0)+Math.imul(Fv,Tv)|0,c0=c0+Math.imul(Fv,Uv)|0;var q1=(Q0+(g0=g0+Math.imul(Av,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Av,Rv)|0)+Math.imul(Dv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Dv,Rv)|0)+(d0>>>13)|0)+(q1>>>26)|0,q1&=67108863,g0=Math.imul(q2,R0),d0=(d0=Math.imul(q2,N0))+Math.imul($3,R0)|0,c0=Math.imul($3,N0),g0=g0+Math.imul(p2,a1)|0,d0=(d0=d0+Math.imul(p2,x1)|0)+Math.imul(Vw,a1)|0,c0=c0+Math.imul(Vw,x1)|0,g0=g0+Math.imul(f2,W1)|0,d0=(d0=d0+Math.imul(f2,_g)|0)+Math.imul(j2,W1)|0,c0=c0+Math.imul(j2,_g)|0,g0=g0+Math.imul(cy,Tv)|0,d0=(d0=d0+Math.imul(cy,Uv)|0)+Math.imul(Uy,Tv)|0,c0=c0+Math.imul(Uy,Uv)|0;var L1=(Q0+(g0=g0+Math.imul(Jv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Jv,Rv)|0)+Math.imul(Fv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Fv,Rv)|0)+(d0>>>13)|0)+(L1>>>26)|0,L1&=67108863,g0=Math.imul(q2,a1),d0=(d0=Math.imul(q2,x1))+Math.imul($3,a1)|0,c0=Math.imul($3,x1),g0=g0+Math.imul(p2,W1)|0,d0=(d0=d0+Math.imul(p2,_g)|0)+Math.imul(Vw,W1)|0,c0=c0+Math.imul(Vw,_g)|0,g0=g0+Math.imul(f2,Tv)|0,d0=(d0=d0+Math.imul(f2,Uv)|0)+Math.imul(j2,Tv)|0,c0=c0+Math.imul(j2,Uv)|0;var A1=(Q0+(g0=g0+Math.imul(cy,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(cy,Rv)|0)+Math.imul(Uy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Uy,Rv)|0)+(d0>>>13)|0)+(A1>>>26)|0,A1&=67108863,g0=Math.imul(q2,W1),d0=(d0=Math.imul(q2,_g))+Math.imul($3,W1)|0,c0=Math.imul($3,_g),g0=g0+Math.imul(p2,Tv)|0,d0=(d0=d0+Math.imul(p2,Uv)|0)+Math.imul(Vw,Tv)|0,c0=c0+Math.imul(Vw,Uv)|0;var M1=(Q0+(g0=g0+Math.imul(f2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(f2,Rv)|0)+Math.imul(j2,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(j2,Rv)|0)+(d0>>>13)|0)+(M1>>>26)|0,M1&=67108863,g0=Math.imul(q2,Tv),d0=(d0=Math.imul(q2,Uv))+Math.imul($3,Tv)|0,c0=Math.imul($3,Uv);var X1=(Q0+(g0=g0+Math.imul(p2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(p2,Rv)|0)+Math.imul(Vw,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Vw,Rv)|0)+(d0>>>13)|0)+(X1>>>26)|0,X1&=67108863;var dv=(Q0+(g0=Math.imul(q2,ny))|0)+((8191&(d0=(d0=Math.imul(q2,Rv))+Math.imul($3,ny)|0))<<13)|0;return Q0=((c0=Math.imul($3,Rv))+(d0>>>13)|0)+(dv>>>26)|0,dv&=67108863,z0[0]=Gv,z0[1]=C0,z0[2]=J0,z0[3]=f0,z0[4]=v0,z0[5]=h0,z0[6]=u0,z0[7]=o0,z0[8]=x0,z0[9]=U0,z0[10]=e1,z0[11]=h1,z0[12]=k1,z0[13]=q1,z0[14]=L1,z0[15]=A1,z0[16]=M1,z0[17]=X1,z0[18]=dv,Q0!==0&&(z0[19]=Q0,s0.length++),s0};function ov(T0,X0,s0){return new bv().mulp(T0,X0,s0)}function bv(T0,X0){this.x=T0,this.y=X0}Math.imul||(F1=v1),Su.prototype.mulTo=function(T0,X0){var s0,g0=this.length+T0.length;return s0=this.length===10&&T0.length===10?F1(this,T0,X0):g0<63?v1(this,T0,X0):g0<1024?function(d0,c0,a0){a0.negative=c0.negative^d0.negative,a0.length=d0.length+c0.length;for(var S0=0,z0=0,Q0=0;Q0>>26)|0)>>>26,p1&=67108863}a0.words[Q0]=T1,S0=p1,p1=z0}return S0!==0?a0.words[Q0]=S0:a0.length--,a0.strip()}(this,T0,X0):ov(this,T0,X0),s0},bv.prototype.makeRBT=function(T0){for(var X0=new Array(T0),s0=Su.prototype._countBits(T0)-1,g0=0;g0>=1;return g0},bv.prototype.permute=function(T0,X0,s0,g0,d0,c0){for(var a0=0;a0>>=1)d0++;return 1<>>=13,s0[2*c0+1]=8191&d0,d0>>>=13;for(c0=2*X0;c0>=26,X0+=g0/67108864|0,X0+=d0>>>26,this.words[s0]=67108863&d0}return X0!==0&&(this.words[s0]=X0,this.length++),this},Su.prototype.muln=function(T0){return this.clone().imuln(T0)},Su.prototype.sqr=function(){return this.mul(this)},Su.prototype.isqr=function(){return this.imul(this.clone())},Su.prototype.pow=function(T0){var X0=function(c0){for(var a0=new Array(c0.bitLength()),S0=0;S0>>Q0}return a0}(T0);if(X0.length===0)return new Su(1);for(var s0=this,g0=0;g0=0);var X0,s0=T0%26,g0=(T0-s0)/26,d0=67108863>>>26-s0<<26-s0;if(s0!==0){var c0=0;for(X0=0;X0>>26-s0}c0&&(this.words[X0]=c0,this.length++)}if(g0!==0){for(X0=this.length-1;X0>=0;X0--)this.words[X0+g0]=this.words[X0];for(X0=0;X0=0),g0=X0?(X0-X0%26)/26:0;var d0=T0%26,c0=Math.min((T0-d0)/26,this.length),a0=67108863^67108863>>>d0<c0)for(this.length-=c0,z0=0;z0=0&&(Q0!==0||z0>=g0);z0--){var p1=0|this.words[z0];this.words[z0]=Q0<<26-d0|p1>>>d0,Q0=p1&a0}return S0&&Q0!==0&&(S0.words[S0.length++]=Q0),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},Su.prototype.ishrn=function(T0,X0,s0){return mu(this.negative===0),this.iushrn(T0,X0,s0)},Su.prototype.shln=function(T0){return this.clone().ishln(T0)},Su.prototype.ushln=function(T0){return this.clone().iushln(T0)},Su.prototype.shrn=function(T0){return this.clone().ishrn(T0)},Su.prototype.ushrn=function(T0){return this.clone().iushrn(T0)},Su.prototype.testn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=T0%26,s0=(T0-X0)/26,g0=1<=0);var X0=T0%26,s0=(T0-X0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=s0)return this;if(X0!==0&&s0++,this.length=Math.min(s0,this.length),X0!==0){var g0=67108863^67108863>>>X0<=67108864;X0++)this.words[X0]-=67108864,X0===this.length-1?this.words[X0+1]=1:this.words[X0+1]++;return this.length=Math.max(this.length,X0+1),this},Su.prototype.isubn=function(T0){if(mu(typeof T0=="number"),mu(T0<67108864),T0<0)return this.iaddn(-T0);if(this.negative!==0)return this.negative=0,this.iaddn(T0),this.negative=1,this;if(this.words[0]-=T0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var X0=0;X0>26)-(S0/67108864|0),this.words[g0+s0]=67108863&d0}for(;g0>26,this.words[g0+s0]=67108863&d0;if(a0===0)return this.strip();for(mu(a0===-1),a0=0,g0=0;g0>26,this.words[g0]=67108863&d0;return this.negative=1,this.strip()},Su.prototype._wordDiv=function(T0,X0){var s0=(this.length,T0.length),g0=this.clone(),d0=T0,c0=0|d0.words[d0.length-1];(s0=26-this._countBits(c0))!=0&&(d0=d0.ushln(s0),g0.iushln(s0),c0=0|d0.words[d0.length-1]);var a0,S0=g0.length-d0.length;if(X0!=="mod"){(a0=new Su(null)).length=S0+1,a0.words=new Array(a0.length);for(var z0=0;z0=0;p1--){var T1=67108864*(0|g0.words[d0.length+p1])+(0|g0.words[d0.length+p1-1]);for(T1=Math.min(T1/c0|0,67108863),g0._ishlnsubmul(d0,T1,p1);g0.negative!==0;)T1--,g0.negative=0,g0._ishlnsubmul(d0,1,p1),g0.isZero()||(g0.negative^=1);a0&&(a0.words[p1]=T1)}return a0&&a0.strip(),g0.strip(),X0!=="div"&&s0!==0&&g0.iushrn(s0),{div:a0||null,mod:g0}},Su.prototype.divmod=function(T0,X0,s0){return mu(!T0.isZero()),this.isZero()?{div:new Su(0),mod:new Su(0)}:this.negative!==0&&T0.negative===0?(c0=this.neg().divmod(T0,X0),X0!=="mod"&&(g0=c0.div.neg()),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.iadd(T0)),{div:g0,mod:d0}):this.negative===0&&T0.negative!==0?(c0=this.divmod(T0.neg(),X0),X0!=="mod"&&(g0=c0.div.neg()),{div:g0,mod:c0.mod}):this.negative&T0.negative?(c0=this.neg().divmod(T0.neg(),X0),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.isub(T0)),{div:c0.div,mod:d0}):T0.length>this.length||this.cmp(T0)<0?{div:new Su(0),mod:this}:T0.length===1?X0==="div"?{div:this.divn(T0.words[0]),mod:null}:X0==="mod"?{div:null,mod:new Su(this.modn(T0.words[0]))}:{div:this.divn(T0.words[0]),mod:new Su(this.modn(T0.words[0]))}:this._wordDiv(T0,X0);var g0,d0,c0},Su.prototype.div=function(T0){return this.divmod(T0,"div",!1).div},Su.prototype.mod=function(T0){return this.divmod(T0,"mod",!1).mod},Su.prototype.umod=function(T0){return this.divmod(T0,"mod",!0).mod},Su.prototype.divRound=function(T0){var X0=this.divmod(T0);if(X0.mod.isZero())return X0.div;var s0=X0.div.negative!==0?X0.mod.isub(T0):X0.mod,g0=T0.ushrn(1),d0=T0.andln(1),c0=s0.cmp(g0);return c0<0||d0===1&&c0===0?X0.div:X0.div.negative!==0?X0.div.isubn(1):X0.div.iaddn(1)},Su.prototype.modn=function(T0){mu(T0<=67108863);for(var X0=(1<<26)%T0,s0=0,g0=this.length-1;g0>=0;g0--)s0=(X0*s0+(0|this.words[g0]))%T0;return s0},Su.prototype.idivn=function(T0){mu(T0<=67108863);for(var X0=0,s0=this.length-1;s0>=0;s0--){var g0=(0|this.words[s0])+67108864*X0;this.words[s0]=g0/T0|0,X0=g0%T0}return this.strip()},Su.prototype.divn=function(T0){return this.clone().idivn(T0)},Su.prototype.egcd=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0=new Su(1),d0=new Su(0),c0=new Su(0),a0=new Su(1),S0=0;X0.isEven()&&s0.isEven();)X0.iushrn(1),s0.iushrn(1),++S0;for(var z0=s0.clone(),Q0=X0.clone();!X0.isZero();){for(var p1=0,T1=1;!(X0.words[0]&T1)&&p1<26;++p1,T1<<=1);if(p1>0)for(X0.iushrn(p1);p1-- >0;)(g0.isOdd()||d0.isOdd())&&(g0.iadd(z0),d0.isub(Q0)),g0.iushrn(1),d0.iushrn(1);for(var U1=0,S1=1;!(s0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(s0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(z0),a0.isub(Q0)),c0.iushrn(1),a0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),g0.isub(c0),d0.isub(a0)):(s0.isub(X0),c0.isub(g0),a0.isub(d0))}return{a:c0,b:a0,gcd:s0.iushln(S0)}},Su.prototype._invmp=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0,d0=new Su(1),c0=new Su(0),a0=s0.clone();X0.cmpn(1)>0&&s0.cmpn(1)>0;){for(var S0=0,z0=1;!(X0.words[0]&z0)&&S0<26;++S0,z0<<=1);if(S0>0)for(X0.iushrn(S0);S0-- >0;)d0.isOdd()&&d0.iadd(a0),d0.iushrn(1);for(var Q0=0,p1=1;!(s0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(s0.iushrn(Q0);Q0-- >0;)c0.isOdd()&&c0.iadd(a0),c0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),d0.isub(c0)):(s0.isub(X0),c0.isub(d0))}return(g0=X0.cmpn(1)===0?d0:c0).cmpn(0)<0&&g0.iadd(T0),g0},Su.prototype.gcd=function(T0){if(this.isZero())return T0.abs();if(T0.isZero())return this.abs();var X0=this.clone(),s0=T0.clone();X0.negative=0,s0.negative=0;for(var g0=0;X0.isEven()&&s0.isEven();g0++)X0.iushrn(1),s0.iushrn(1);for(;;){for(;X0.isEven();)X0.iushrn(1);for(;s0.isEven();)s0.iushrn(1);var d0=X0.cmp(s0);if(d0<0){var c0=X0;X0=s0,s0=c0}else if(d0===0||s0.cmpn(1)===0)break;X0.isub(s0)}return s0.iushln(g0)},Su.prototype.invm=function(T0){return this.egcd(T0).a.umod(T0)},Su.prototype.isEven=function(){return(1&this.words[0])==0},Su.prototype.isOdd=function(){return(1&this.words[0])==1},Su.prototype.andln=function(T0){return this.words[0]&T0},Su.prototype.bincn=function(T0){mu(typeof T0=="number");var X0=T0%26,s0=(T0-X0)/26,g0=1<>>26,a0&=67108863,this.words[c0]=a0}return d0!==0&&(this.words[c0]=d0,this.length++),this},Su.prototype.isZero=function(){return this.length===1&&this.words[0]===0},Su.prototype.cmpn=function(T0){var X0,s0=T0<0;if(this.negative!==0&&!s0)return-1;if(this.negative===0&&s0)return 1;if(this.strip(),this.length>1)X0=1;else{s0&&(T0=-T0),mu(T0<=67108863,"Number is too big");var g0=0|this.words[0];X0=g0===T0?0:g0T0.length)return 1;if(this.length=0;s0--){var g0=0|this.words[s0],d0=0|T0.words[s0];if(g0!==d0){g0d0&&(X0=1);break}}return X0},Su.prototype.gtn=function(T0){return this.cmpn(T0)===1},Su.prototype.gt=function(T0){return this.cmp(T0)===1},Su.prototype.gten=function(T0){return this.cmpn(T0)>=0},Su.prototype.gte=function(T0){return this.cmp(T0)>=0},Su.prototype.ltn=function(T0){return this.cmpn(T0)===-1},Su.prototype.lt=function(T0){return this.cmp(T0)===-1},Su.prototype.lten=function(T0){return this.cmpn(T0)<=0},Su.prototype.lte=function(T0){return this.cmp(T0)<=0},Su.prototype.eqn=function(T0){return this.cmpn(T0)===0},Su.prototype.eq=function(T0){return this.cmp(T0)===0},Su.red=function(T0){return new qv(T0)},Su.prototype.toRed=function(T0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),T0.convertTo(this)._forceRed(T0)},Su.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},Su.prototype._forceRed=function(T0){return this.red=T0,this},Su.prototype.forceRed=function(T0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(T0)},Su.prototype.redAdd=function(T0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,T0)},Su.prototype.redIAdd=function(T0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,T0)},Su.prototype.redSub=function(T0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,T0)},Su.prototype.redISub=function(T0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,T0)},Su.prototype.redShl=function(T0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,T0)},Su.prototype.redMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.mul(this,T0)},Su.prototype.redIMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.imul(this,T0)},Su.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},Su.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},Su.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},Su.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},Su.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},Su.prototype.redPow=function(T0){return mu(this.red&&!T0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,T0)};var gv={k256:null,p224:null,p192:null,p25519:null};function xv(T0,X0){this.name=T0,this.p=new Su(X0,16),this.n=this.p.bitLength(),this.k=new Su(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function hy(){xv.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function oy(){xv.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function fy(){xv.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Fy(){xv.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function qv(T0){if(typeof T0=="string"){var X0=Su._prime(T0);this.m=X0.p,this.prime=X0}else mu(T0.gtn(1),"modulus must be greater than 1"),this.m=T0,this.prime=null}function Qv(T0){qv.call(this,T0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new Su(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}xv.prototype._tmp=function(){var T0=new Su(null);return T0.words=new Array(Math.ceil(this.n/13)),T0},xv.prototype.ireduce=function(T0){var X0,s0=T0;do this.split(s0,this.tmp),X0=(s0=(s0=this.imulK(s0)).iadd(this.tmp)).bitLength();while(X0>this.n);var g0=X00?s0.isub(this.p):s0.strip!==void 0?s0.strip():s0._strip(),s0},xv.prototype.split=function(T0,X0){T0.iushrn(this.n,0,X0)},xv.prototype.imulK=function(T0){return T0.imul(this.k)},Mu(hy,xv),hy.prototype.split=function(T0,X0){for(var s0=4194303,g0=Math.min(T0.length,9),d0=0;d0>>22,c0=a0}c0>>>=22,T0.words[d0-10]=c0,c0===0&&T0.length>10?T0.length-=10:T0.length-=9},hy.prototype.imulK=function(T0){T0.words[T0.length]=0,T0.words[T0.length+1]=0,T0.length+=2;for(var X0=0,s0=0;s0>>=26,T0.words[s0]=d0,X0=g0}return X0!==0&&(T0.words[T0.length++]=X0),T0},Su._prime=function(T0){if(gv[T0])return gv[T0];var X0;if(T0==="k256")X0=new hy;else if(T0==="p224")X0=new oy;else if(T0==="p192")X0=new fy;else{if(T0!=="p25519")throw new Error("Unknown prime "+T0);X0=new Fy}return gv[T0]=X0,X0},qv.prototype._verify1=function(T0){mu(T0.negative===0,"red works only with positives"),mu(T0.red,"red works only with red numbers")},qv.prototype._verify2=function(T0,X0){mu((T0.negative|X0.negative)==0,"red works only with positives"),mu(T0.red&&T0.red===X0.red,"red works only with red numbers")},qv.prototype.imod=function(T0){return this.prime?this.prime.ireduce(T0)._forceRed(this):T0.umod(this.m)._forceRed(this)},qv.prototype.neg=function(T0){return T0.isZero()?T0.clone():this.m.sub(T0)._forceRed(this)},qv.prototype.add=function(T0,X0){this._verify2(T0,X0);var s0=T0.add(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0._forceRed(this)},qv.prototype.iadd=function(T0,X0){this._verify2(T0,X0);var s0=T0.iadd(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0},qv.prototype.sub=function(T0,X0){this._verify2(T0,X0);var s0=T0.sub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0._forceRed(this)},qv.prototype.isub=function(T0,X0){this._verify2(T0,X0);var s0=T0.isub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0},qv.prototype.shl=function(T0,X0){return this._verify1(T0),this.imod(T0.ushln(X0))},qv.prototype.imul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.imul(X0))},qv.prototype.mul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.mul(X0))},qv.prototype.isqr=function(T0){return this.imul(T0,T0.clone())},qv.prototype.sqr=function(T0){return this.mul(T0,T0)},qv.prototype.sqrt=function(T0){if(T0.isZero())return T0.clone();var X0=this.m.andln(3);if(mu(X0%2==1),X0===3){var s0=this.m.add(new Su(1)).iushrn(2);return this.pow(T0,s0)}for(var g0=this.m.subn(1),d0=0;!g0.isZero()&&g0.andln(1)===0;)d0++,g0.iushrn(1);mu(!g0.isZero());var c0=new Su(1).toRed(this),a0=c0.redNeg(),S0=this.m.subn(1).iushrn(1),z0=this.m.bitLength();for(z0=new Su(2*z0*z0).toRed(this);this.pow(z0,S0).cmp(a0)!==0;)z0.redIAdd(a0);for(var Q0=this.pow(z0,g0),p1=this.pow(T0,g0.addn(1).iushrn(1)),T1=this.pow(T0,g0),U1=d0;T1.cmp(c0)!==0;){for(var S1=T1,n1=0;S1.cmp(c0)!==0;n1++)S1=S1.redSqr();mu(n1=0;g0--){for(var z0=X0.words[g0],Q0=S0-1;Q0>=0;Q0--){var p1=z0>>Q0&1;d0!==s0[0]&&(d0=this.sqr(d0)),p1!==0||c0!==0?(c0<<=1,c0|=p1,(++a0==4||g0===0&&Q0===0)&&(d0=this.mul(d0,s0[c0]),a0=0,c0=0)):a0=0}S0=26}return d0},qv.prototype.convertTo=function(T0){var X0=T0.umod(this.m);return X0===T0?X0.clone():X0},qv.prototype.convertFrom=function(T0){var X0=T0.clone();return X0.red=null,X0},Su.mont=function(T0){return new Qv(T0)},Mu(Qv,qv),Qv.prototype.convertTo=function(T0){return this.imod(T0.ushln(this.shift))},Qv.prototype.convertFrom=function(T0){var X0=this.imod(T0.mul(this.rinv));return X0.red=null,X0},Qv.prototype.imul=function(T0,X0){if(T0.isZero()||X0.isZero())return T0.words[0]=0,T0.length=1,T0;var s0=T0.imul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.mul=function(T0,X0){if(T0.isZero()||X0.isZero())return new Su(0)._forceRed(this);var s0=T0.mul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.invm=function(T0){return this.imod(T0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})($B);var MM=$B.exports,NF=EH;function EH(yt,ir){if(!yt)throw new Error(ir||"Assertion failed")}EH.equal=function(yt,ir,_c){if(yt!=ir)throw new Error(_c||"Assertion failed: "+yt+" != "+ir)};var mre={};(function(yt){var ir=yt;function _c(Mu){return Mu.length===1?"0"+Mu:Mu}function mu(Mu){for(var Su="",l0=0;l0>8,B0=255&j0;M0?l0.push(M0,B0):l0.push(B0)}return l0},ir.zero2=_c,ir.toHex=mu,ir.encode=function(Mu,Su){return Su==="hex"?mu(Mu):Mu}})(mre),function(yt){var ir=yt,_c=MM,mu=NF,Mu=mre;ir.assert=mu,ir.toArray=Mu.toArray,ir.zero2=Mu.zero2,ir.toHex=Mu.toHex,ir.encode=Mu.encode,ir.getNAF=function(Su,l0,E0){var j0=new Array(Math.max(Su.bitLength(),E0)+1);j0.fill(0);for(var M0=1<(M0>>1)-1?(M0>>1)-v1:v1,B0.isubn(y1)):y1=0,j0[V0]=y1,B0.iushrn(1)}return j0},ir.getJSF=function(Su,l0){var E0=[[],[]];Su=Su.clone(),l0=l0.clone();for(var j0,M0=0,B0=0;Su.cmpn(-M0)>0||l0.cmpn(-B0)>0;){var V0,y1,v1=Su.andln(3)+M0&3,F1=l0.andln(3)+B0&3;v1===3&&(v1=-1),F1===3&&(F1=-1),V0=1&v1?(j0=Su.andln(7)+M0&7)!=3&&j0!==5||F1!==2?v1:-v1:0,E0[0].push(V0),y1=1&F1?(j0=l0.andln(7)+B0&7)!=3&&j0!==5||v1!==2?F1:-F1:0,E0[1].push(y1),2*M0===V0+1&&(M0=1-M0),2*B0===y1+1&&(B0=1-B0),Su.iushrn(1),l0.iushrn(1)}return E0},ir.cachedProperty=function(Su,l0,E0){var j0="_"+l0;Su.prototype[l0]=function(){return this[j0]!==void 0?this[j0]:this[j0]=E0.call(this)}},ir.parseBytes=function(Su){return typeof Su=="string"?ir.toArray(Su,"hex"):Su},ir.intFromLE=function(Su){return new _c(Su,"hex","le")}}(yR);var gre,vre={exports:{}};function U6(yt){this.rand=yt}if(vre.exports=function(yt){return gre||(gre=new U6(null)),gre.generate(yt)},vre.exports.Rand=U6,U6.prototype.generate=function(yt){return this._rand(yt)},U6.prototype._rand=function(yt){if(this.rand.getBytes)return this.rand.getBytes(yt);for(var ir=new Uint8Array(yt),_c=0;_c0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var OO=ix;function $R(yt,ir){this.curve=yt,this.type=ir,this.precomputed=null}ix.prototype.point=function(){throw new Error("Not implemented")},ix.prototype.validate=function(){throw new Error("Not implemented")},ix.prototype._fixedNafMul=function(yt,ir){nq(yt.precomputed);var _c=yt._getDoubles(),mu=_Z(ir,1,this._bitLength),Mu=(1<<_c.step+1)-(_c.step%2==0?2:1);Mu/=3;var Su,l0,E0=[];for(Su=0;Su=Su;j0--)l0=(l0<<1)+mu[j0];E0.push(l0)}for(var M0=this.jpoint(null,null,null),B0=this.jpoint(null,null,null),V0=Mu;V0>0;V0--){for(Su=0;Su=0;E0--){for(var j0=0;E0>=0&&Su[E0]===0;E0--)j0++;if(E0>=0&&j0++,l0=l0.dblp(j0),E0<0)break;var M0=Su[E0];nq(M0!==0),l0=yt.type==="affine"?M0>0?l0.mixedAdd(Mu[M0-1>>1]):l0.mixedAdd(Mu[-M0-1>>1].neg()):M0>0?l0.add(Mu[M0-1>>1]):l0.add(Mu[-M0-1>>1].neg())}return yt.type==="affine"?l0.toP():l0},ix.prototype._wnafMulAdd=function(yt,ir,_c,mu,Mu){var Su,l0,E0,j0=this._wnafT1,M0=this._wnafT2,B0=this._wnafT3,V0=0;for(Su=0;Su=1;Su-=2){var v1=Su-1,F1=Su;if(j0[v1]===1&&j0[F1]===1){var ov=[ir[v1],null,null,ir[F1]];ir[v1].y.cmp(ir[F1].y)===0?(ov[1]=ir[v1].add(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg())):ir[v1].y.cmp(ir[F1].y.redNeg())===0?(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].add(ir[F1].neg())):(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg()));var bv=[-3,-1,-5,-7,0,7,5,1,3],gv=wR(_c[v1],_c[F1]);for(V0=Math.max(gv[0].length,V0),B0[v1]=new Array(V0),B0[F1]=new Array(V0),l0=0;l0=0;Su--){for(var Fy=0;Su>=0;){var qv=!0;for(l0=0;l0=0&&Fy++,oy=oy.dblp(Fy),Su<0)break;for(l0=0;l00?E0=M0[l0][Qv-1>>1]:Qv<0&&(E0=M0[l0][-Qv-1>>1].neg()),oy=E0.type==="affine"?oy.mixedAdd(E0):oy.add(E0))}}for(Su=0;Su=Math.ceil((yt.bitLength()+1)/ir.step)},$R.prototype._getDoubles=function(yt,ir){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var _c=[this],mu=this,Mu=0;Mu=0&&(Su=ir,l0=_c),mu.negative&&(mu=mu.neg(),Mu=Mu.neg()),Su.negative&&(Su=Su.neg(),l0=l0.neg()),[{a:mu,b:Mu},{a:Su,b:l0}]},XC.prototype._endoSplit=function(yt){var ir=this.endo.basis,_c=ir[0],mu=ir[1],Mu=mu.b.mul(yt).divRound(this.n),Su=_c.b.neg().mul(yt).divRound(this.n),l0=Mu.mul(_c.a),E0=Su.mul(mu.a),j0=Mu.mul(_c.b),M0=Su.mul(mu.b);return{k1:yt.sub(l0).sub(E0),k2:j0.add(M0).neg()}},XC.prototype.pointFromX=function(yt,ir){(yt=new e8(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr().redMul(yt).redIAdd(yt.redMul(this.a)).redIAdd(this.b),mu=_c.redSqrt();if(mu.redSqr().redSub(_c).cmp(this.zero)!==0)throw new Error("invalid point");var Mu=mu.fromRed().isOdd();return(ir&&!Mu||!ir&&Mu)&&(mu=mu.redNeg()),this.point(yt,mu)},XC.prototype.validate=function(yt){if(yt.inf)return!0;var ir=yt.x,_c=yt.y,mu=this.a.redMul(ir),Mu=ir.redSqr().redMul(ir).redIAdd(mu).redIAdd(this.b);return _c.redSqr().redISub(Mu).cmpn(0)===0},XC.prototype._endoWnafMulAdd=function(yt,ir,_c){for(var mu=this._endoWnafT1,Mu=this._endoWnafT2,Su=0;Su":""},K8.prototype.isInfinity=function(){return this.inf},K8.prototype.add=function(yt){if(this.inf)return yt;if(yt.inf)return this;if(this.eq(yt))return this.dbl();if(this.neg().eq(yt))return this.curve.point(null,null);if(this.x.cmp(yt.x)===0)return this.curve.point(null,null);var ir=this.y.redSub(yt.y);ir.cmpn(0)!==0&&(ir=ir.redMul(this.x.redSub(yt.x).redInvm()));var _c=ir.redSqr().redISub(this.x).redISub(yt.x),mu=ir.redMul(this.x.redSub(_c)).redISub(this.y);return this.curve.point(_c,mu)},K8.prototype.dbl=function(){if(this.inf)return this;var yt=this.y.redAdd(this.y);if(yt.cmpn(0)===0)return this.curve.point(null,null);var ir=this.curve.a,_c=this.x.redSqr(),mu=yt.redInvm(),Mu=_c.redAdd(_c).redIAdd(_c).redIAdd(ir).redMul(mu),Su=Mu.redSqr().redISub(this.x.redAdd(this.x)),l0=Mu.redMul(this.x.redSub(Su)).redISub(this.y);return this.curve.point(Su,l0)},K8.prototype.getX=function(){return this.x.fromRed()},K8.prototype.getY=function(){return this.y.fromRed()},K8.prototype.mul=function(yt){return yt=new e8(yt,16),this.isInfinity()?this:this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve.endo?this.curve._endoWnafMulAdd([this],[yt]):this.curve._wnafMul(this,yt)},K8.prototype.mulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu):this.curve._wnafMulAdd(1,mu,Mu,2)},K8.prototype.jmulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu,!0):this.curve._wnafMulAdd(1,mu,Mu,2,!0)},K8.prototype.eq=function(yt){return this===yt||this.inf===yt.inf&&(this.inf||this.x.cmp(yt.x)===0&&this.y.cmp(yt.y)===0)},K8.prototype.neg=function(yt){if(this.inf)return this;var ir=this.curve.point(this.x,this.y.redNeg());if(yt&&this.precomputed){var _c=this.precomputed,mu=function(Mu){return Mu.neg()};ir.precomputed={naf:_c.naf&&{wnd:_c.naf.wnd,points:_c.naf.points.map(mu)},doubles:_c.doubles&&{step:_c.doubles.step,points:_c.doubles.points.map(mu)}}}return ir},K8.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},PO(KS,LF.BasePoint),XC.prototype.jpoint=function(yt,ir,_c){return new KS(this,yt,ir,_c)},KS.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var yt=this.z.redInvm(),ir=yt.redSqr(),_c=this.x.redMul(ir),mu=this.y.redMul(ir).redMul(yt);return this.curve.point(_c,mu)},KS.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},KS.prototype.add=function(yt){if(this.isInfinity())return yt;if(yt.isInfinity())return this;var ir=yt.z.redSqr(),_c=this.z.redSqr(),mu=this.x.redMul(ir),Mu=yt.x.redMul(_c),Su=this.y.redMul(ir.redMul(yt.z)),l0=yt.y.redMul(_c.redMul(this.z)),E0=mu.redSub(Mu),j0=Su.redSub(l0);if(E0.cmpn(0)===0)return j0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var M0=E0.redSqr(),B0=M0.redMul(E0),V0=mu.redMul(M0),y1=j0.redSqr().redIAdd(B0).redISub(V0).redISub(V0),v1=j0.redMul(V0.redISub(y1)).redISub(Su.redMul(B0)),F1=this.z.redMul(yt.z).redMul(E0);return this.curve.jpoint(y1,v1,F1)},KS.prototype.mixedAdd=function(yt){if(this.isInfinity())return yt.toJ();if(yt.isInfinity())return this;var ir=this.z.redSqr(),_c=this.x,mu=yt.x.redMul(ir),Mu=this.y,Su=yt.y.redMul(ir).redMul(this.z),l0=_c.redSub(mu),E0=Mu.redSub(Su);if(l0.cmpn(0)===0)return E0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var j0=l0.redSqr(),M0=j0.redMul(l0),B0=_c.redMul(j0),V0=E0.redSqr().redIAdd(M0).redISub(B0).redISub(B0),y1=E0.redMul(B0.redISub(V0)).redISub(Mu.redMul(M0)),v1=this.z.redMul(l0);return this.curve.jpoint(V0,y1,v1)},KS.prototype.dblp=function(yt){if(yt===0)return this;if(this.isInfinity())return this;if(!yt)return this.dbl();var ir;if(this.curve.zeroA||this.curve.threeA){var _c=this;for(ir=0;ir=0)return!1;if(_c.redIAdd(Mu),this.x.cmp(_c)===0)return!0}},KS.prototype.inspect=function(){return this.isInfinity()?"":""},KS.prototype.isInfinity=function(){return this.z.cmpn(0)===0};var SH=MM,oq=_H,u5=OO,SZ=yR;function v9(yt){u5.call(this,"mont",yt),this.a=new SH(yt.a,16).toRed(this.red),this.b=new SH(yt.b,16).toRed(this.red),this.i4=new SH(4).toRed(this.red).redInvm(),this.two=new SH(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}oq(v9,u5);var yre=v9;function cS(yt,ir,_c){u5.BasePoint.call(this,yt,"projective"),ir===null&&_c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new SH(ir,16),this.z=new SH(_c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}v9.prototype.validate=function(yt){var ir=yt.normalize().x,_c=ir.redSqr(),mu=_c.redMul(ir).redAdd(_c.redMul(this.a)).redAdd(ir);return mu.redSqrt().redSqr().cmp(mu)===0},oq(cS,u5.BasePoint),v9.prototype.decodePoint=function(yt,ir){return this.point(SZ.toArray(yt,ir),1)},v9.prototype.point=function(yt,ir){return new cS(this,yt,ir)},v9.prototype.pointFromJSON=function(yt){return cS.fromJSON(this,yt)},cS.prototype.precompute=function(){},cS.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},cS.fromJSON=function(yt,ir){return new cS(yt,ir[0],ir[1]||yt.one)},cS.prototype.inspect=function(){return this.isInfinity()?"":""},cS.prototype.isInfinity=function(){return this.z.cmpn(0)===0},cS.prototype.dbl=function(){var yt=this.x.redAdd(this.z).redSqr(),ir=this.x.redSub(this.z).redSqr(),_c=yt.redSub(ir),mu=yt.redMul(ir),Mu=_c.redMul(ir.redAdd(this.curve.a24.redMul(_c)));return this.curve.point(mu,Mu)},cS.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},cS.prototype.diffAdd=function(yt,ir){var _c=this.x.redAdd(this.z),mu=this.x.redSub(this.z),Mu=yt.x.redAdd(yt.z),Su=yt.x.redSub(yt.z).redMul(_c),l0=Mu.redMul(mu),E0=ir.z.redMul(Su.redAdd(l0).redSqr()),j0=ir.x.redMul(Su.redISub(l0).redSqr());return this.curve.point(E0,j0)},cS.prototype.mul=function(yt){for(var ir=yt.clone(),_c=this,mu=this.curve.point(null,null),Mu=[];ir.cmpn(0)!==0;ir.iushrn(1))Mu.push(ir.andln(1));for(var Su=Mu.length-1;Su>=0;Su--)Mu[Su]===0?(_c=_c.diffAdd(mu,this),mu=mu.dbl()):(mu=_c.diffAdd(mu,this),_c=_c.dbl());return mu},cS.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},cS.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},cS.prototype.eq=function(yt){return this.getX().cmp(yt.getX())===0},cS.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},cS.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var MA=MM,xZ=_H,CN=OO,I1e=yR.assert;function uS(yt){this.twisted=(0|yt.a)!=1,this.mOneA=this.twisted&&(0|yt.a)==-1,this.extended=this.mOneA,CN.call(this,"edwards",yt),this.a=new MA(yt.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new MA(yt.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new MA(yt.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),I1e(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(0|yt.c)==1}xZ(uS,CN);var O1e=uS;function iE(yt,ir,_c,mu,Mu){CN.BasePoint.call(this,yt,"projective"),ir===null&&_c===null&&mu===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new MA(ir,16),this.y=new MA(_c,16),this.z=mu?new MA(mu,16):this.curve.one,this.t=Mu&&new MA(Mu,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}uS.prototype._mulA=function(yt){return this.mOneA?yt.redNeg():this.a.redMul(yt)},uS.prototype._mulC=function(yt){return this.oneC?yt:this.c.redMul(yt)},uS.prototype.jpoint=function(yt,ir,_c,mu){return this.point(yt,ir,_c,mu)},uS.prototype.pointFromX=function(yt,ir){(yt=new MA(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=this.c2.redSub(this.a.redMul(_c)),Mu=this.one.redSub(this.c2.redMul(this.d).redMul(_c)),Su=mu.redMul(Mu.redInvm()),l0=Su.redSqrt();if(l0.redSqr().redSub(Su).cmp(this.zero)!==0)throw new Error("invalid point");var E0=l0.fromRed().isOdd();return(ir&&!E0||!ir&&E0)&&(l0=l0.redNeg()),this.point(yt,l0)},uS.prototype.pointFromY=function(yt,ir){(yt=new MA(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=_c.redSub(this.c2),Mu=_c.redMul(this.d).redMul(this.c2).redSub(this.a),Su=mu.redMul(Mu.redInvm());if(Su.cmp(this.zero)===0){if(ir)throw new Error("invalid point");return this.point(this.zero,yt)}var l0=Su.redSqrt();if(l0.redSqr().redSub(Su).cmp(this.zero)!==0)throw new Error("invalid point");return l0.fromRed().isOdd()!==ir&&(l0=l0.redNeg()),this.point(l0,yt)},uS.prototype.validate=function(yt){if(yt.isInfinity())return!0;yt.normalize();var ir=yt.x.redSqr(),_c=yt.y.redSqr(),mu=ir.redMul(this.a).redAdd(_c),Mu=this.c2.redMul(this.one.redAdd(this.d.redMul(ir).redMul(_c)));return mu.cmp(Mu)===0},xZ(iE,CN.BasePoint),uS.prototype.pointFromJSON=function(yt){return iE.fromJSON(this,yt)},uS.prototype.point=function(yt,ir,_c,mu){return new iE(this,yt,ir,_c,mu)},iE.fromJSON=function(yt,ir){return new iE(yt,ir[0],ir[1],ir[2])},iE.prototype.inspect=function(){return this.isInfinity()?"":""},iE.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},iE.prototype._extDbl=function(){var yt=this.x.redSqr(),ir=this.y.redSqr(),_c=this.z.redSqr();_c=_c.redIAdd(_c);var mu=this.curve._mulA(yt),Mu=this.x.redAdd(this.y).redSqr().redISub(yt).redISub(ir),Su=mu.redAdd(ir),l0=Su.redSub(_c),E0=mu.redSub(ir),j0=Mu.redMul(l0),M0=Su.redMul(E0),B0=Mu.redMul(E0),V0=l0.redMul(Su);return this.curve.point(j0,M0,V0,B0)},iE.prototype._projDbl=function(){var yt,ir,_c,mu,Mu,Su,l0=this.x.redAdd(this.y).redSqr(),E0=this.x.redSqr(),j0=this.y.redSqr();if(this.curve.twisted){var M0=(mu=this.curve._mulA(E0)).redAdd(j0);this.zOne?(yt=l0.redSub(E0).redSub(j0).redMul(M0.redSub(this.curve.two)),ir=M0.redMul(mu.redSub(j0)),_c=M0.redSqr().redSub(M0).redSub(M0)):(Mu=this.z.redSqr(),Su=M0.redSub(Mu).redISub(Mu),yt=l0.redSub(E0).redISub(j0).redMul(Su),ir=M0.redMul(mu.redSub(j0)),_c=M0.redMul(Su))}else mu=E0.redAdd(j0),Mu=this.curve._mulC(this.z).redSqr(),Su=mu.redSub(Mu).redSub(Mu),yt=this.curve._mulC(l0.redISub(mu)).redMul(Su),ir=this.curve._mulC(mu).redMul(E0.redISub(j0)),_c=mu.redMul(Su);return this.curve.point(yt,ir,_c)},iE.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},iE.prototype._extAdd=function(yt){var ir=this.y.redSub(this.x).redMul(yt.y.redSub(yt.x)),_c=this.y.redAdd(this.x).redMul(yt.y.redAdd(yt.x)),mu=this.t.redMul(this.curve.dd).redMul(yt.t),Mu=this.z.redMul(yt.z.redAdd(yt.z)),Su=_c.redSub(ir),l0=Mu.redSub(mu),E0=Mu.redAdd(mu),j0=_c.redAdd(ir),M0=Su.redMul(l0),B0=E0.redMul(j0),V0=Su.redMul(j0),y1=l0.redMul(E0);return this.curve.point(M0,B0,y1,V0)},iE.prototype._projAdd=function(yt){var ir,_c,mu=this.z.redMul(yt.z),Mu=mu.redSqr(),Su=this.x.redMul(yt.x),l0=this.y.redMul(yt.y),E0=this.curve.d.redMul(Su).redMul(l0),j0=Mu.redSub(E0),M0=Mu.redAdd(E0),B0=this.x.redAdd(this.y).redMul(yt.x.redAdd(yt.y)).redISub(Su).redISub(l0),V0=mu.redMul(j0).redMul(B0);return this.curve.twisted?(ir=mu.redMul(M0).redMul(l0.redSub(this.curve._mulA(Su))),_c=j0.redMul(M0)):(ir=mu.redMul(M0).redMul(l0.redSub(Su)),_c=this.curve._mulC(j0).redMul(M0)),this.curve.point(V0,ir,_c)},iE.prototype.add=function(yt){return this.isInfinity()?yt:yt.isInfinity()?this:this.curve.extended?this._extAdd(yt):this._projAdd(yt)},iE.prototype.mul=function(yt){return this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve._wnafMul(this,yt)},iE.prototype.mulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!1)},iE.prototype.jmulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!0)},iE.prototype.normalize=function(){if(this.zOne)return this;var yt=this.z.redInvm();return this.x=this.x.redMul(yt),this.y=this.y.redMul(yt),this.t&&(this.t=this.t.redMul(yt)),this.z=this.curve.one,this.zOne=!0,this},iE.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},iE.prototype.getX=function(){return this.normalize(),this.x.fromRed()},iE.prototype.getY=function(){return this.normalize(),this.y.fromRed()},iE.prototype.eq=function(yt){return this===yt||this.getX().cmp(yt.getX())===0&&this.getY().cmp(yt.getY())===0},iE.prototype.eqXToP=function(yt){var ir=yt.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(ir)===0)return!0;for(var _c=yt.clone(),mu=this.curve.redN.redMul(this.z);;){if(_c.iadd(this.curve.n),_c.cmp(this.curve.p)>=0)return!1;if(ir.redIAdd(mu),this.x.cmp(ir)===0)return!0}},iE.prototype.toP=iE.prototype.normalize,iE.prototype.mixedAdd=iE.prototype.add,function(yt){var ir=yt;ir.base=OO,ir.short=BF,ir.mont=yre,ir.edwards=O1e}(bR);var VS={},TN={},kE={},kZ=NF,P1e=_H;function xH(yt,ir){return(64512&yt.charCodeAt(ir))==55296&&!(ir<0||ir+1>=yt.length)&&(64512&yt.charCodeAt(ir+1))==56320}function Ece(yt){return(yt>>>24|yt>>>8&65280|yt<<8&16711680|(255&yt)<<24)>>>0}function z6(yt){return yt.length===1?"0"+yt:yt}function jO(yt){return yt.length===7?"0"+yt:yt.length===6?"00"+yt:yt.length===5?"000"+yt:yt.length===4?"0000"+yt:yt.length===3?"00000"+yt:yt.length===2?"000000"+yt:yt.length===1?"0000000"+yt:yt}kE.inherits=P1e,kE.toArray=function(yt,ir){if(Array.isArray(yt))return yt.slice();if(!yt)return[];var _c=[];if(typeof yt=="string")if(ir){if(ir==="hex")for((yt=yt.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(yt="0"+yt),Mu=0;Mu>6|192,_c[mu++]=63&Su|128):xH(yt,Mu)?(Su=65536+((1023&Su)<<10)+(1023&yt.charCodeAt(++Mu)),_c[mu++]=Su>>18|240,_c[mu++]=Su>>12&63|128,_c[mu++]=Su>>6&63|128,_c[mu++]=63&Su|128):(_c[mu++]=Su>>12|224,_c[mu++]=Su>>6&63|128,_c[mu++]=63&Su|128)}else for(Mu=0;Mu>>0}return Su},kE.split32=function(yt,ir){for(var _c=new Array(4*yt.length),mu=0,Mu=0;mu>>24,_c[Mu+1]=Su>>>16&255,_c[Mu+2]=Su>>>8&255,_c[Mu+3]=255&Su):(_c[Mu+3]=Su>>>24,_c[Mu+2]=Su>>>16&255,_c[Mu+1]=Su>>>8&255,_c[Mu]=255&Su)}return _c},kE.rotr32=function(yt,ir){return yt>>>ir|yt<<32-ir},kE.rotl32=function(yt,ir){return yt<>>32-ir},kE.sum32=function(yt,ir){return yt+ir>>>0},kE.sum32_3=function(yt,ir,_c){return yt+ir+_c>>>0},kE.sum32_4=function(yt,ir,_c,mu){return yt+ir+_c+mu>>>0},kE.sum32_5=function(yt,ir,_c,mu,Mu){return yt+ir+_c+mu+Mu>>>0},kE.sum64=function(yt,ir,_c,mu){var Mu=yt[ir],Su=mu+yt[ir+1]>>>0,l0=(Su>>0,yt[ir+1]=Su},kE.sum64_hi=function(yt,ir,_c,mu){return(ir+mu>>>0>>0},kE.sum64_lo=function(yt,ir,_c,mu){return ir+mu>>>0},kE.sum64_4_hi=function(yt,ir,_c,mu,Mu,Su,l0,E0){var j0=0,M0=ir;return j0+=(M0=M0+mu>>>0)>>0)>>0)>>0},kE.sum64_4_lo=function(yt,ir,_c,mu,Mu,Su,l0,E0){return ir+mu+Su+E0>>>0},kE.sum64_5_hi=function(yt,ir,_c,mu,Mu,Su,l0,E0,j0,M0){var B0=0,V0=ir;return B0+=(V0=V0+mu>>>0)>>0)>>0)>>0)>>0},kE.sum64_5_lo=function(yt,ir,_c,mu,Mu,Su,l0,E0,j0,M0){return ir+mu+Su+E0+M0>>>0},kE.rotr64_hi=function(yt,ir,_c){return(ir<<32-_c|yt>>>_c)>>>0},kE.rotr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0},kE.shr64_hi=function(yt,ir,_c){return yt>>>_c},kE.shr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0};var DF={},aq=kE,j1e=NF;function ER(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}DF.BlockHash=ER,ER.prototype.update=function(yt,ir){if(yt=aq.toArray(yt,ir),this.pending?this.pending=this.pending.concat(yt):this.pending=yt,this.pendingTotal+=yt.length,this.pending.length>=this._delta8){var _c=(yt=this.pending).length%this._delta8;this.pending=yt.slice(yt.length-_c,yt.length),this.pending.length===0&&(this.pending=null),yt=aq.join32(yt,0,yt.length-_c,this.endian);for(var mu=0;mu>>24&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>8&255,mu[Mu++]=255&yt}else for(mu[Mu++]=255&yt,mu[Mu++]=yt>>>8&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>24&255,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,Su=8;Su>>3},zE.g1_256=function(yt){return AR(yt,17)^AR(yt,19)^yt>>>10};var CH=kE,N1e=DF,_ce=zE,CZ=CH.rotl32,TH=CH.sum32,RH=CH.sum32_5,Sce=_ce.ft_1,xce=N1e.BlockHash,TZ=[1518500249,1859775393,2400959708,3395469782];function aC(){if(!(this instanceof aC))return new aC;xce.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}CH.inherits(aC,xce);var NO=aC;aC.blockSize=512,aC.outSize=160,aC.hmacStrength=80,aC.padLength=64,aC.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=CZ(_c[mu-3]^_c[mu-8]^_c[mu-14]^_c[mu-16],1);var Mu=this.h[0],Su=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4];for(mu=0;mu<_c.length;mu++){var M0=~~(mu/20),B0=RH(CZ(Mu,5),Sce(M0,Su,l0,E0),j0,_c[mu],TZ[M0]);j0=E0,E0=l0,l0=CZ(Su,30),Su=Mu,Mu=B0}this.h[0]=TH(this.h[0],Mu),this.h[1]=TH(this.h[1],Su),this.h[2]=TH(this.h[2],l0),this.h[3]=TH(this.h[3],E0),this.h[4]=TH(this.h[4],j0)},aC.prototype._digest=function(yt){return yt==="hex"?CH.toHex32(this.h,"big"):CH.split32(this.h,"big")};var sC=kE,kce=DF,UF=zE,Cce=NF,ox=sC.sum32,L1e=sC.sum32_4,B1e=sC.sum32_5,bre=UF.ch32,lq=UF.maj32,D1e=UF.s0_256,F1e=UF.s1_256,Tce=UF.g0_256,U1e=UF.g1_256,f5=kce.BlockHash,z1e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function lC(){if(!(this instanceof lC))return new lC;f5.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=z1e,this.W=new Array(64)}sC.inherits(lC,f5);var Rce=lC;lC.blockSize=512,lC.outSize=256,lC.hmacStrength=192,lC.padLength=64,lC.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=L1e(U1e(_c[mu-2]),_c[mu-7],Tce(_c[mu-15]),_c[mu-16]);var Mu=this.h[0],Su=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4],M0=this.h[5],B0=this.h[6],V0=this.h[7];for(Cce(this.k.length===_c.length),mu=0;mu<_c.length;mu++){var y1=B1e(V0,F1e(j0),bre(j0,M0,B0),this.k[mu],_c[mu]),v1=ox(D1e(Mu),lq(Mu,Su,l0));V0=B0,B0=M0,M0=j0,j0=ox(E0,y1),E0=l0,l0=Su,Su=Mu,Mu=ox(y1,v1)}this.h[0]=ox(this.h[0],Mu),this.h[1]=ox(this.h[1],Su),this.h[2]=ox(this.h[2],l0),this.h[3]=ox(this.h[3],E0),this.h[4]=ox(this.h[4],j0),this.h[5]=ox(this.h[5],M0),this.h[6]=ox(this.h[6],B0),this.h[7]=ox(this.h[7],V0)},lC.prototype._digest=function(yt){return yt==="hex"?sC.toHex32(this.h,"big"):sC.split32(this.h,"big")};var AB=kE,Mce=Rce;function H6(){if(!(this instanceof H6))return new H6;Mce.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}AB.inherits(H6,Mce);var H1e=H6;H6.blockSize=512,H6.outSize=224,H6.hmacStrength=192,H6.padLength=64,H6.prototype._digest=function(yt){return yt==="hex"?AB.toHex32(this.h.slice(0,7),"big"):AB.split32(this.h.slice(0,7),"big")};var QC=kE,K1e=DF,V1e=NF,LO=QC.rotr64_hi,BO=QC.rotr64_lo,Ice=QC.shr64_hi,Oce=QC.shr64_lo,RN=QC.sum64,wre=QC.sum64_hi,OM=QC.sum64_lo,Pce=QC.sum64_4_hi,$re=QC.sum64_4_lo,jce=QC.sum64_5_hi,MN=QC.sum64_5_lo,Nce=K1e.BlockHash,eT=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function d5(){if(!(this instanceof d5))return new d5;Nce.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=eT,this.W=new Array(160)}QC.inherits(d5,Nce);var Lce=d5;function DO(yt,ir,_c,mu,Mu){var Su=yt&_c^~ytΜreturn Su<0&&(Su+=4294967296),Su}function FO(yt,ir,_c,mu,Mu,Su){var l0=ir&mu^~ir&Su;return l0<0&&(l0+=4294967296),l0}function Bce(yt,ir,_c,mu,Mu){var Su=yt&_c^yt&Mu^_cΜreturn Su<0&&(Su+=4294967296),Su}function Dce(yt,ir,_c,mu,Mu,Su){var l0=ir&mu^ir&Su^mu&Su;return l0<0&&(l0+=4294967296),l0}function _B(yt,ir){var _c=LO(yt,ir,28)^LO(ir,yt,2)^LO(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function Ere(yt,ir){var _c=BO(yt,ir,28)^BO(ir,yt,2)^BO(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function Are(yt,ir){var _c=LO(yt,ir,14)^LO(yt,ir,18)^LO(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function q1e(yt,ir){var _c=BO(yt,ir,14)^BO(yt,ir,18)^BO(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function W1e(yt,ir){var _c=LO(yt,ir,1)^LO(yt,ir,8)^Ice(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function G1e(yt,ir){var _c=BO(yt,ir,1)^BO(yt,ir,8)^Oce(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function Y1e(yt,ir){var _c=LO(yt,ir,19)^LO(ir,yt,29)^Ice(yt,ir,6);return _c<0&&(_c+=4294967296),_c}function Fce(yt,ir){var _c=BO(yt,ir,19)^BO(ir,yt,29)^Oce(yt,ir,6);return _c<0&&(_c+=4294967296),_c}d5.blockSize=1024,d5.outSize=512,d5.hmacStrength=192,d5.padLength=128,d5.prototype._prepareBlock=function(yt,ir){for(var _c=this.W,mu=0;mu<32;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu+=2){var Mu=Y1e(_c[mu-4],_c[mu-3]),Su=Fce(_c[mu-4],_c[mu-3]),l0=_c[mu-14],E0=_c[mu-13],j0=W1e(_c[mu-30],_c[mu-29]),M0=G1e(_c[mu-30],_c[mu-29]),B0=_c[mu-32],V0=_c[mu-31];_c[mu]=Pce(Mu,Su,l0,E0,j0,M0,B0,V0),_c[mu+1]=$re(Mu,Su,l0,E0,j0,M0,B0,V0)}},d5.prototype._update=function(yt,ir){this._prepareBlock(yt,ir);var _c=this.W,mu=this.h[0],Mu=this.h[1],Su=this.h[2],l0=this.h[3],E0=this.h[4],j0=this.h[5],M0=this.h[6],B0=this.h[7],V0=this.h[8],y1=this.h[9],v1=this.h[10],F1=this.h[11],ov=this.h[12],bv=this.h[13],gv=this.h[14],xv=this.h[15];V1e(this.k.length===_c.length);for(var hy=0;hy<_c.length;hy+=2){var oy=gv,fy=xv,Fy=Are(V0,y1),qv=q1e(V0,y1),Qv=DO(V0,0,v1,0,ov),T0=FO(0,y1,0,F1,0,bv),X0=this.k[hy],s0=this.k[hy+1],g0=_c[hy],d0=_c[hy+1],c0=jce(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0),a0=MN(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0);oy=_B(mu,Mu),fy=Ere(mu,Mu),Fy=Bce(mu,0,Su,0,E0),qv=Dce(0,Mu,0,l0,0,j0);var S0=wre(oy,fy,Fy,qv),z0=OM(oy,fy,Fy,qv);gv=ov,xv=bv,ov=v1,bv=F1,v1=V0,F1=y1,V0=wre(M0,B0,c0,a0),y1=OM(B0,B0,c0,a0),M0=E0,B0=j0,E0=Su,j0=l0,Su=mu,l0=Mu,mu=wre(c0,a0,S0,z0),Mu=OM(c0,a0,S0,z0)}RN(this.h,0,mu,Mu),RN(this.h,2,Su,l0),RN(this.h,4,E0,j0),RN(this.h,6,M0,B0),RN(this.h,8,V0,y1),RN(this.h,10,v1,F1),RN(this.h,12,ov,bv),RN(this.h,14,gv,xv)},d5.prototype._digest=function(yt){return yt==="hex"?QC.toHex32(this.h,"big"):QC.split32(this.h,"big")};var _re=kE,PM=Lce;function UO(){if(!(this instanceof UO))return new UO;PM.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}_re.inherits(UO,PM);var Z1e=UO;UO.blockSize=1024,UO.outSize=384,UO.hmacStrength=192,UO.padLength=128,UO.prototype._digest=function(yt){return yt==="hex"?_re.toHex32(this.h.slice(0,12),"big"):_re.split32(this.h.slice(0,12),"big")},kH.sha1=NO,kH.sha224=H1e,kH.sha256=Rce,kH.sha384=Z1e,kH.sha512=Lce;var Uce={},zF=kE,J1e=DF,RZ=zF.rotl32,zce=zF.sum32,cq=zF.sum32_3,Hce=zF.sum32_4,Kce=J1e.BlockHash;function zO(){if(!(this instanceof zO))return new zO;Kce.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function Vce(yt,ir,_c,mu){return yt<=15?ir^_c^mu:yt<=31?ir&_c|~ir&mu:yt<=47?(ir|~_c)^mu:yt<=63?ir&mu|_c&~mu:ir^(_c|~mu)}function X1e(yt){return yt<=15?0:yt<=31?1518500249:yt<=47?1859775393:yt<=63?2400959708:2840853838}function Sre(yt){return yt<=15?1352829926:yt<=31?1548603684:yt<=47?1836072691:yt<=63?2053994217:0}zF.inherits(zO,Kce),Uce.ripemd160=zO,zO.blockSize=512,zO.outSize=160,zO.hmacStrength=192,zO.padLength=64,zO.prototype._update=function(yt,ir){for(var _c=this.h[0],mu=this.h[1],Mu=this.h[2],Su=this.h[3],l0=this.h[4],E0=_c,j0=mu,M0=Mu,B0=Su,V0=l0,y1=0;y1<80;y1++){var v1=zce(RZ(Hce(_c,Vce(y1,mu,Mu,Su),yt[qce[y1]+ir],X1e(y1)),Q1e[y1]),l0);_c=l0,l0=Su,Su=RZ(Mu,10),Mu=mu,mu=v1,v1=zce(RZ(Hce(E0,Vce(79-y1,j0,M0,B0),yt[IN[y1]+ir],Sre(y1)),Wce[y1]),V0),E0=V0,V0=B0,B0=RZ(M0,10),M0=j0,j0=v1}v1=cq(this.h[1],Mu,B0),this.h[1]=cq(this.h[2],Su,V0),this.h[2]=cq(this.h[3],l0,E0),this.h[3]=cq(this.h[4],_c,j0),this.h[4]=cq(this.h[0],mu,M0),this.h[0]=v1},zO.prototype._digest=function(yt){return yt==="hex"?zF.toHex32(this.h,"little"):zF.split32(this.h,"little")};var qce=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],IN=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],Q1e=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],Wce=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],HF=kE,eme=NF;function ON(yt,ir,_c){if(!(this instanceof ON))return new ON(yt,ir,_c);this.Hash=yt,this.blockSize=yt.blockSize/8,this.outSize=yt.outSize/8,this.inner=null,this.outer=null,this._init(HF.toArray(ir,_c))}var xre,MH,Gce=ON;ON.prototype._init=function(yt){yt.length>this.blockSize&&(yt=new this.Hash().update(yt).digest()),eme(yt.length<=this.blockSize);for(var ir=yt.length;ir=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(ir,_c,mu)}var tme=SB;SB.prototype._init=function(yt,ir,_c){var mu=yt.concat(ir).concat(_c);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var Mu=0;Mu=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(yt.concat(_c||[])),this._reseed=1},SB.prototype.generate=function(yt,ir,_c,mu){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof ir!="string"&&(mu=_c,_c=ir,ir=null),_c&&(_c=ax.toArray(_c,mu||"hex"),this._update(_c));for(var Mu=[];Mu.length"};var MZ=MM,Tre=yR,IH=Tre.assert;function uq(yt,ir){if(yt instanceof uq)return yt;this._importDER(yt,ir)||(IH(yt.r&&yt.s,"Signature without r or s"),this.r=new MZ(yt.r,16),this.s=new MZ(yt.s,16),yt.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=yt.recoveryParam)}var Zce=uq;function ime(){this.place=0}function Rre(yt,ir){var _c=yt[ir.place++];if(!(128&_c))return _c;var mu=15&_c;if(mu===0||mu>4)return!1;for(var Mu=0,Su=0,l0=ir.place;Su>>=0;return!(Mu<=127)&&(ir.place=l0,Mu)}function xB(yt){for(var ir=0,_c=yt.length-1;!yt[ir]&&!(128&yt[ir+1])&&ir<_c;)ir++;return ir===0?yt:yt.slice(ir)}function IZ(yt,ir){if(ir<128)yt.push(ir);else{var _c=1+(Math.log(ir)/Math.LN2>>>3);for(yt.push(128|_c);--_c;)yt.push(ir>>>(_c<<3)&255);yt.push(ir)}}uq.prototype._importDER=function(yt,ir){yt=Tre.toArray(yt,ir);var _c=new ime;if(yt[_c.place++]!==48)return!1;var mu=Rre(yt,_c);if(mu===!1||mu+_c.place!==yt.length||yt[_c.place++]!==2)return!1;var Mu=Rre(yt,_c);if(Mu===!1)return!1;var Su=yt.slice(_c.place,Mu+_c.place);if(_c.place+=Mu,yt[_c.place++]!==2)return!1;var l0=Rre(yt,_c);if(l0===!1||yt.length!==l0+_c.place)return!1;var E0=yt.slice(_c.place,l0+_c.place);if(Su[0]===0){if(!(128&Su[1]))return!1;Su=Su.slice(1)}if(E0[0]===0){if(!(128&E0[1]))return!1;E0=E0.slice(1)}return this.r=new MZ(Su),this.s=new MZ(E0),this.recoveryParam=null,!0},uq.prototype.toDER=function(yt){var ir=this.r.toArray(),_c=this.s.toArray();for(128&ir[0]&&(ir=[0].concat(ir)),128&_c[0]&&(_c=[0].concat(_c)),ir=xB(ir),_c=xB(_c);!(_c[0]||128&_c[1]);)_c=_c.slice(1);var mu=[2];IZ(mu,ir.length),(mu=mu.concat(ir)).push(2),IZ(mu,_c.length);var Mu=mu.concat(_c),Su=[48];return IZ(Su,Mu.length),Su=Su.concat(Mu),Tre.encode(Su,yt)};var tT=MM,Jce=tme,Mre=VS,Ire=EB,y9=yR.assert,Ore=nme,KF=Zce;function rT(yt){if(!(this instanceof rT))return new rT(yt);typeof yt=="string"&&(y9(Object.prototype.hasOwnProperty.call(Mre,yt),"Unknown curve "+yt),yt=Mre[yt]),yt instanceof Mre.PresetCurve&&(yt={curve:yt}),this.curve=yt.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=yt.curve.g,this.g.precompute(yt.curve.n.bitLength()+1),this.hash=yt.hash||yt.curve.hash}var ome=rT;rT.prototype.keyPair=function(yt){return new Ore(this,yt)},rT.prototype.keyFromPrivate=function(yt,ir){return Ore.fromPrivate(this,yt,ir)},rT.prototype.keyFromPublic=function(yt,ir){return Ore.fromPublic(this,yt,ir)},rT.prototype.genKeyPair=function(yt){yt||(yt={});for(var ir=new Jce({hash:this.hash,pers:yt.pers,persEnc:yt.persEnc||"utf8",entropy:yt.entropy||Ire(this.hash.hmacStrength),entropyEnc:yt.entropy&&yt.entropyEnc||"utf8",nonce:this.n.toArray()}),_c=this.n.byteLength(),mu=this.n.sub(new tT(2));;){var Mu=new tT(ir.generate(_c));if(!(Mu.cmp(mu)>0))return Mu.iaddn(1),this.keyFromPrivate(Mu)}},rT.prototype._truncateToN=function(yt,ir){var _c=8*yt.byteLength()-this.n.bitLength();return _c>0&&(yt=yt.ushrn(_c)),!ir&&yt.cmp(this.n)>=0?yt.sub(this.n):yt},rT.prototype.sign=function(yt,ir,_c,mu){typeof _c=="object"&&(mu=_c,_c=null),mu||(mu={}),ir=this.keyFromPrivate(ir,_c),yt=this._truncateToN(new tT(yt,16));for(var Mu=this.n.byteLength(),Su=ir.getPrivate().toArray("be",Mu),l0=yt.toArray("be",Mu),E0=new Jce({hash:this.hash,entropy:Su,nonce:l0,pers:mu.pers,persEnc:mu.persEnc||"utf8"}),j0=this.n.sub(new tT(1)),M0=0;;M0++){var B0=mu.k?mu.k(M0):new tT(E0.generate(this.n.byteLength()));if(!((B0=this._truncateToN(B0,!0)).cmpn(1)<=0||B0.cmp(j0)>=0)){var V0=this.g.mul(B0);if(!V0.isInfinity()){var y1=V0.getX(),v1=y1.umod(this.n);if(v1.cmpn(0)!==0){var F1=B0.invm(this.n).mul(v1.mul(ir.getPrivate()).iadd(yt));if((F1=F1.umod(this.n)).cmpn(0)!==0){var ov=(V0.getY().isOdd()?1:0)|(y1.cmp(v1)!==0?2:0);return mu.canonical&&F1.cmp(this.nh)>0&&(F1=this.n.sub(F1),ov^=1),new KF({r:v1,s:F1,recoveryParam:ov})}}}}}},rT.prototype.verify=function(yt,ir,_c,mu){yt=this._truncateToN(new tT(yt,16)),_c=this.keyFromPublic(_c,mu);var Mu=(ir=new KF(ir,"hex")).r,Su=ir.s;if(Mu.cmpn(1)<0||Mu.cmp(this.n)>=0||Su.cmpn(1)<0||Su.cmp(this.n)>=0)return!1;var l0,E0=Su.invm(this.n),j0=E0.mul(yt).umod(this.n),M0=E0.mul(Mu).umod(this.n);return this.curve._maxwellTrick?!(l0=this.g.jmulAdd(j0,_c.getPublic(),M0)).isInfinity()&&l0.eqXToP(Mu):!(l0=this.g.mulAdd(j0,_c.getPublic(),M0)).isInfinity()&&l0.getX().umod(this.n).cmp(Mu)===0},rT.prototype.recoverPubKey=function(yt,ir,_c,mu){y9((3&_c)===_c,"The recovery param is more than two bits"),ir=new KF(ir,mu);var Mu=this.n,Su=new tT(yt),l0=ir.r,E0=ir.s,j0=1&_c,M0=_c>>1;if(l0.cmp(this.curve.p.umod(this.curve.n))>=0&&M0)throw new Error("Unable to find sencond key candinate");l0=M0?this.curve.pointFromX(l0.add(this.curve.n),j0):this.curve.pointFromX(l0,j0);var B0=ir.r.invm(Mu),V0=Mu.sub(Su).mul(B0).umod(Mu),y1=E0.mul(B0).umod(Mu);return this.g.mulAdd(V0,l0,y1)},rT.prototype.getKeyRecoveryParam=function(yt,ir,_c,mu){if((ir=new KF(ir,mu)).recoveryParam!==null)return ir.recoveryParam;for(var Mu=0;Mu<4;Mu++){var Su;try{Su=this.recoverPubKey(yt,ir,Mu)}catch{continue}if(Su.eq(_c))return Mu}throw new Error("Unable to find valid recovery factor")};var kB=yR,Xce=kB.assert,Qce=kB.parseBytes,CB=kB.cachedProperty;function K6(yt,ir){this.eddsa=yt,this._secret=Qce(ir.secret),yt.isPoint(ir.pub)?this._pub=ir.pub:this._pubBytes=Qce(ir.pub)}K6.fromPublic=function(yt,ir){return ir instanceof K6?ir:new K6(yt,{pub:ir})},K6.fromSecret=function(yt,ir){return ir instanceof K6?ir:new K6(yt,{secret:ir})},K6.prototype.secret=function(){return this._secret},CB(K6,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),CB(K6,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),CB(K6,"privBytes",function(){var yt=this.eddsa,ir=this.hash(),_c=yt.encodingLength-1,mu=ir.slice(0,yt.encodingLength);return mu[0]&=248,mu[_c]&=127,mu[_c]|=64,mu}),CB(K6,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),CB(K6,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),CB(K6,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),K6.prototype.sign=function(yt){return Xce(this._secret,"KeyPair can only verify"),this.eddsa.sign(yt,this)},K6.prototype.verify=function(yt,ir){return this.eddsa.verify(yt,ir,this)},K6.prototype.getSecret=function(yt){return Xce(this._secret,"KeyPair is public only"),kB.encode(this.secret(),yt)},K6.prototype.getPublic=function(yt){return kB.encode(this.pubBytes(),yt)};var Pre=K6,VF=MM,fq=yR,jre=fq.assert,OZ=fq.cachedProperty,eue=fq.parseBytes;function PN(yt,ir){this.eddsa=yt,typeof ir!="object"&&(ir=eue(ir)),Array.isArray(ir)&&(ir={R:ir.slice(0,yt.encodingLength),S:ir.slice(yt.encodingLength)}),jre(ir.R&&ir.S,"Signature without R or S"),yt.isPoint(ir.R)&&(this._R=ir.R),ir.S instanceof VF&&(this._S=ir.S),this._Rencoded=Array.isArray(ir.R)?ir.R:ir.Rencoded,this._Sencoded=Array.isArray(ir.S)?ir.S:ir.Sencoded}OZ(PN,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),OZ(PN,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),OZ(PN,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),OZ(PN,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),PN.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},PN.prototype.toHex=function(){return fq.encode(this.toBytes(),"hex").toUpperCase()};var PZ=PN,jM=TN,ame=VS,HO=yR,tue=HO.assert,Nre=HO.parseBytes,qF=Pre,V6=PZ;function nT(yt){if(tue(yt==="ed25519","only tested with ed25519 so far"),!(this instanceof nT))return new nT(yt);yt=ame[yt].curve,this.curve=yt,this.g=yt.g,this.g.precompute(yt.n.bitLength()+1),this.pointClass=yt.point().constructor,this.encodingLength=Math.ceil(yt.n.bitLength()/8),this.hash=jM.sha512}var sme=nT;nT.prototype.sign=function(yt,ir){yt=Nre(yt);var _c=this.keyFromSecret(ir),mu=this.hashInt(_c.messagePrefix(),yt),Mu=this.g.mul(mu),Su=this.encodePoint(Mu),l0=this.hashInt(Su,_c.pubBytes(),yt).mul(_c.priv()),E0=mu.add(l0).umod(this.curve.n);return this.makeSignature({R:Mu,S:E0,Rencoded:Su})},nT.prototype.verify=function(yt,ir,_c){yt=Nre(yt),ir=this.makeSignature(ir);var mu=this.keyFromPublic(_c),Mu=this.hashInt(ir.Rencoded(),mu.pubBytes(),yt),Su=this.g.mul(ir.S());return ir.R().add(mu.pub().mul(Mu)).eq(Su)},nT.prototype.hashInt=function(){for(var yt=this.hash(),ir=0;ir=0)return null;Mu=Mu.toRed(HE.red);let Su=Mu.redSqr().redIMul(Mu).redIAdd(HE.b).redSqrt();return _c===3!==Su.isOdd()&&(Su=Su.redNeg()),_R.keyPair({pub:{x:Mu,y:Su}})}(ir,yt.subarray(1,33));case 4:case 6:case 7:return yt.length!==65?null:function(_c,mu,Mu){let Su=new IA(mu),l0=new IA(Mu);if(Su.cmp(HE.p)>=0||l0.cmp(HE.p)>=0||(Su=Su.toRed(HE.red),l0=l0.toRed(HE.red),(_c===6||_c===7)&&l0.isOdd()!==(_c===7)))return null;const E0=Su.redSqr().redIMul(Su);return l0.redSqr().redISub(E0.redIAdd(HE.b)).isZero()?_R.keyPair({pub:{x:Su,y:l0}}):null}(ir,yt.subarray(1,33),yt.subarray(33,65));default:return null}}function SR(yt,ir){const _c=ir.encode(null,yt.length===33);for(let mu=0;mu0,privateKeyVerify(yt){const ir=new IA(yt);return ir.cmp(HE.n)<0&&!ir.isZero()?0:1},privateKeyNegate(yt){const ir=new IA(yt),_c=HE.n.sub(ir).umod(HE.n).toArrayLike(Uint8Array,"be",32);return yt.set(_c),0},privateKeyTweakAdd(yt,ir){const _c=new IA(ir);if(_c.cmp(HE.n)>=0||(_c.iadd(new IA(yt)),_c.cmp(HE.n)>=0&&_c.isub(HE.n),_c.isZero()))return 1;const mu=_c.toArrayLike(Uint8Array,"be",32);return yt.set(mu),0},privateKeyTweakMul(yt,ir){let _c=new IA(ir);if(_c.cmp(HE.n)>=0||_c.isZero())return 1;_c.imul(new IA(yt)),_c.cmp(HE.n)>=0&&(_c=_c.umod(HE.n));const mu=_c.toArrayLike(Uint8Array,"be",32);return yt.set(mu),0},publicKeyVerify:yt=>TB(yt)===null?1:0,publicKeyCreate(yt,ir){const _c=new IA(ir);return _c.cmp(HE.n)>=0||_c.isZero()?1:(SR(yt,_R.keyFromPrivate(ir).getPublic()),0)},publicKeyConvert(yt,ir){const _c=TB(ir);return _c===null?1:(SR(yt,_c.getPublic()),0)},publicKeyNegate(yt,ir){const _c=TB(ir);if(_c===null)return 1;const mu=_c.getPublic();return mu.y=mu.y.redNeg(),SR(yt,mu),0},publicKeyCombine(yt,ir){const _c=new Array(ir.length);for(let Mu=0;Mu=0)return 2;const Mu=mu.getPublic().add(HE.g.mul(_c));return Mu.isInfinity()?2:(SR(yt,Mu),0)},publicKeyTweakMul(yt,ir,_c){const mu=TB(ir);return mu===null?1:(_c=new IA(_c)).cmp(HE.n)>=0||_c.isZero()?2:(SR(yt,mu.getPublic().mul(_c)),0)},signatureNormalize(yt){const ir=new IA(yt.subarray(0,32)),_c=new IA(yt.subarray(32,64));return ir.cmp(HE.n)>=0||_c.cmp(HE.n)>=0?1:(_c.cmp(_R.nh)===1&&yt.set(HE.n.sub(_c).toArrayLike(Uint8Array,"be",32),32),0)},signatureExport(yt,ir){const _c=ir.subarray(0,32),mu=ir.subarray(32,64);if(new IA(_c).cmp(HE.n)>=0||new IA(mu).cmp(HE.n)>=0)return 1;const{output:Mu}=yt;let Su=Mu.subarray(4,37);Su[0]=0,Su.set(_c,1);let l0=33,E0=0;for(;l0>1&&Su[E0]===0&&!(128&Su[E0+1]);--l0,++E0);if(Su=Su.subarray(E0),128&Su[0]||l0>1&&Su[0]===0&&!(128&Su[1]))return 1;let j0=Mu.subarray(39,72);j0[0]=0,j0.set(mu,1);let M0=33,B0=0;for(;M0>1&&j0[B0]===0&&!(128&j0[B0+1]);--M0,++B0);return j0=j0.subarray(B0),128&j0[0]||M0>1&&j0[0]===0&&!(128&j0[1])?1:(yt.outputlen=6+l0+M0,Mu[0]=48,Mu[1]=yt.outputlen-2,Mu[2]=2,Mu[3]=Su.length,Mu.set(Su,4),Mu[4+l0]=2,Mu[5+l0]=j0.length,Mu.set(j0,6+l0),0)},signatureImport(yt,ir){if(ir.length<8||ir.length>72||ir[0]!==48||ir[1]!==ir.length-2||ir[2]!==2)return 1;const _c=ir[3];if(_c===0||5+_c>=ir.length||ir[4+_c]!==2)return 1;const mu=ir[5+_c];if(mu===0||6+_c+mu!==ir.length||128&ir[4]||_c>1&&ir[4]===0&&!(128&ir[5])||128&ir[_c+6]||mu>1&&ir[_c+6]===0&&!(128&ir[_c+7]))return 1;let Mu=ir.subarray(4,4+_c);if(Mu.length===33&&Mu[0]===0&&(Mu=Mu.subarray(1)),Mu.length>32)return 1;let Su=ir.subarray(6+_c);if(Su.length===33&&Su[0]===0&&(Su=Su.slice(1)),Su.length>32)throw new Error("S length is too long");let l0=new IA(Mu);l0.cmp(HE.n)>=0&&(l0=new IA(0));let E0=new IA(ir.subarray(6+_c));return E0.cmp(HE.n)>=0&&(E0=new IA(0)),yt.set(l0.toArrayLike(Uint8Array,"be",32),0),yt.set(E0.toArrayLike(Uint8Array,"be",32),32),0},ecdsaSign(yt,ir,_c,mu,Mu){if(Mu){const E0=Mu;Mu=j0=>{const M0=E0(ir,_c,null,mu,j0);if(!(M0 instanceof Uint8Array&&M0.length===32))throw new Error("This is the way");return new IA(M0)}}const Su=new IA(_c);if(Su.cmp(HE.n)>=0||Su.isZero())return 1;let l0;try{l0=_R.sign(ir,_c,{canonical:!0,k:Mu,pers:mu})}catch{return 1}return yt.signature.set(l0.r.toArrayLike(Uint8Array,"be",32),0),yt.signature.set(l0.s.toArrayLike(Uint8Array,"be",32),32),yt.recid=l0.recoveryParam,0},ecdsaVerify(yt,ir,_c){const mu={r:yt.subarray(0,32),s:yt.subarray(32,64)},Mu=new IA(mu.r),Su=new IA(mu.s);if(Mu.cmp(HE.n)>=0||Su.cmp(HE.n)>=0)return 1;if(Su.cmp(_R.nh)===1||Mu.isZero()||Su.isZero())return 3;const l0=TB(_c);if(l0===null)return 2;const E0=l0.getPublic();return _R.verify(ir,mu,E0)?0:3},ecdsaRecover(yt,ir,_c,mu){const Mu={r:ir.slice(0,32),s:ir.slice(32,64)},Su=new IA(Mu.r),l0=new IA(Mu.s);if(Su.cmp(HE.n)>=0||l0.cmp(HE.n)>=0)return 1;if(Su.isZero()||l0.isZero())return 2;let E0;try{E0=_R.recoverPubKey(mu,Mu,_c)}catch{return 2}return SR(yt,E0),0},ecdh(yt,ir,_c,mu,Mu,Su,l0){const E0=TB(ir);if(E0===null)return 1;const j0=new IA(_c);if(j0.cmp(HE.n)>=0||j0.isZero())return 2;const M0=E0.getPublic().mul(j0);if(Mu===void 0){const B0=M0.encode(null,!0),V0=_R.hash().update(B0).digest();for(let y1=0;y1<32;++y1)yt[y1]=V0[y1]}else{Su||(Su=new Uint8Array(32));const B0=M0.getX().toArray("be",32);for(let v1=0;v1<32;++v1)Su[v1]=B0[v1];l0||(l0=new Uint8Array(32));const V0=M0.getY().toArray("be",32);for(let v1=0;v1<32;++v1)l0[v1]=V0[v1];const y1=Mu(Su,l0,mu);if(!(y1 instanceof Uint8Array&&y1.length===yt.length))return 2;yt.set(y1)}return 0}},Lre=(yt=>({contextRandomize(ir){if(vR(ir===null||ir instanceof Uint8Array,"Expected seed to be an Uint8Array or null"),ir!==null&&FE("seed",ir,32),yt.contextRandomize(ir)===1)throw new Error("Unknow error on context randomization")},privateKeyVerify:ir=>(FE("private key",ir,32),yt.privateKeyVerify(ir)===0),privateKeyNegate(ir){switch(FE("private key",ir,32),yt.privateKeyNegate(ir)){case 0:return ir;case 1:throw new Error(wH)}},privateKeyTweakAdd(ir,_c){switch(FE("private key",ir,32),FE("tweak",_c,32),yt.privateKeyTweakAdd(ir,_c)){case 0:return ir;case 1:throw new Error(hre)}},privateKeyTweakMul(ir,_c){switch(FE("private key",ir,32),FE("tweak",_c,32),yt.privateKeyTweakMul(ir,_c)){case 0:return ir;case 1:throw new Error(pre)}},publicKeyVerify:ir=>(FE("public key",ir,[33,65]),yt.publicKeyVerify(ir)===0),publicKeyCreate(ir,_c=!0,mu){switch(FE("private key",ir,32),TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyCreate(mu,ir)){case 0:return mu;case 1:throw new Error("Private Key is invalid");case 2:throw new Error(rq)}},publicKeyConvert(ir,_c=!0,mu){switch(FE("public key",ir,[33,65]),TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyConvert(mu,ir)){case 0:return mu;case 1:throw new Error(wB);case 2:throw new Error(rq)}},publicKeyNegate(ir,_c=!0,mu){switch(FE("public key",ir,[33,65]),TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyNegate(mu,ir)){case 0:return mu;case 1:throw new Error(wB);case 2:throw new Error(wH);case 3:throw new Error(rq)}},publicKeyCombine(ir,_c=!0,mu){vR(Array.isArray(ir),"Expected public keys to be an Array"),vR(ir.length>0,"Expected public keys array will have more than zero items");for(const Mu of ir)FE("public key",Mu,[33,65]);switch(TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyCombine(mu,ir)){case 0:return mu;case 1:throw new Error(wB);case 2:throw new Error("The sum of the public keys is not valid");case 3:throw new Error(rq)}},publicKeyTweakAdd(ir,_c,mu=!0,Mu){switch(FE("public key",ir,[33,65]),FE("tweak",_c,32),TM(mu),Mu=RM(Mu,mu?33:65),yt.publicKeyTweakAdd(Mu,ir,_c)){case 0:return Mu;case 1:throw new Error(wB);case 2:throw new Error(hre)}},publicKeyTweakMul(ir,_c,mu=!0,Mu){switch(FE("public key",ir,[33,65]),FE("tweak",_c,32),TM(mu),Mu=RM(Mu,mu?33:65),yt.publicKeyTweakMul(Mu,ir,_c)){case 0:return Mu;case 1:throw new Error(wB);case 2:throw new Error(pre)}},signatureNormalize(ir){switch(FE("signature",ir,64),yt.signatureNormalize(ir)){case 0:return ir;case 1:throw new Error($H)}},signatureExport(ir,_c){FE("signature",ir,64);const mu={output:_c=RM(_c,72),outputlen:72};switch(yt.signatureExport(mu,ir)){case 0:return _c.slice(0,mu.outputlen);case 1:throw new Error($H);case 2:throw new Error(wH)}},signatureImport(ir,_c){switch(FE("signature",ir),_c=RM(_c,64),yt.signatureImport(_c,ir)){case 0:return _c;case 1:throw new Error($H);case 2:throw new Error(wH)}},ecdsaSign(ir,_c,mu={},Mu){FE("message",ir,32),FE("private key",_c,32),vR(jF(mu)==="Object","Expected options to be an Object"),mu.data!==void 0&&FE("options.data",mu.data),mu.noncefn!==void 0&&vR(jF(mu.noncefn)==="Function","Expected options.noncefn to be a Function");const Su={signature:Mu=RM(Mu,64),recid:null};switch(yt.ecdsaSign(Su,ir,_c,mu.data,mu.noncefn)){case 0:return Su;case 1:throw new Error("The nonce generation function failed, or the private key was invalid");case 2:throw new Error(wH)}},ecdsaVerify(ir,_c,mu){switch(FE("signature",ir,64),FE("message",_c,32),FE("public key",mu,[33,65]),yt.ecdsaVerify(ir,_c,mu)){case 0:return!0;case 3:return!1;case 1:throw new Error($H);case 2:throw new Error(wB)}},ecdsaRecover(ir,_c,mu,Mu=!0,Su){switch(FE("signature",ir,64),vR(jF(_c)==="Number"&&_c>=0&&_c<=3,"Expected recovery id to be a Number within interval [0, 3]"),FE("message",mu,32),TM(Mu),Su=RM(Su,Mu?33:65),yt.ecdsaRecover(Su,ir,_c,mu)){case 0:return Su;case 1:throw new Error($H);case 2:throw new Error("Public key could not be recover");case 3:throw new Error(wH)}},ecdh(ir,_c,mu={},Mu){switch(FE("public key",ir,[33,65]),FE("private key",_c,32),vR(jF(mu)==="Object","Expected options to be an Object"),mu.data!==void 0&&FE("options.data",mu.data),mu.hashfn!==void 0?(vR(jF(mu.hashfn)==="Function","Expected options.hashfn to be a Function"),mu.xbuf!==void 0&&FE("options.xbuf",mu.xbuf,32),mu.ybuf!==void 0&&FE("options.ybuf",mu.ybuf,32),FE("output",Mu)):Mu=RM(Mu,32),yt.ecdh(Mu,ir,_c,mu.data,mu.hashfn,mu.xbuf,mu.ybuf)){case 0:return Mu;case 1:throw new Error(wB);case 2:throw new Error("Scalar was invalid (zero or overflow)")}}}))(lme),iT={},jN={};(function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.SECRET_KEY_LENGTH=yt.AES_IV_PLUS_TAG_LENGTH=yt.AES_TAG_LENGTH=yt.AES_IV_LENGTH=yt.UNCOMPRESSED_PUBLIC_KEY_SIZE=void 0,yt.UNCOMPRESSED_PUBLIC_KEY_SIZE=65,yt.AES_IV_LENGTH=16,yt.AES_TAG_LENGTH=16,yt.AES_IV_PLUS_TAG_LENGTH=yt.AES_IV_LENGTH+yt.AES_TAG_LENGTH,yt.SECRET_KEY_LENGTH=32})(jN);var cme=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(iT,"__esModule",{value:!0}),iT.aesDecrypt=iT.aesEncrypt=iT.getValidSecret=iT.decodeHex=iT.remove0x=void 0;var dq=Q4(),rue=cme(Lre),WF=jN;function cC(yt){return yt.startsWith("0x")||yt.startsWith("0X")?yt.slice(2):yt}iT.remove0x=cC,iT.decodeHex=function(yt){return F0.from(cC(yt),"hex")},iT.getValidSecret=function(){var yt;do yt=(0,dq.randomBytes)(WF.SECRET_KEY_LENGTH);while(!rue.default.privateKeyVerify(yt));return yt},iT.aesEncrypt=function(yt,ir){var _c=(0,dq.randomBytes)(WF.AES_IV_LENGTH),mu=(0,dq.createCipheriv)("aes-256-gcm",yt,_c),Mu=F0.concat([mu.update(ir),mu.final()]),Su=mu.getAuthTag();return F0.concat([_c,Su,Mu])},iT.aesDecrypt=function(yt,ir){var _c=ir.slice(0,WF.AES_IV_LENGTH),mu=ir.slice(WF.AES_IV_LENGTH,WF.AES_IV_PLUS_TAG_LENGTH),Mu=ir.slice(WF.AES_IV_PLUS_TAG_LENGTH),Su=(0,dq.createDecipheriv)("aes-256-gcm",yt,_c);return Su.setAuthTag(mu),F0.concat([Su.update(Mu),Su.final()])};var jZ={},h5=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(jZ,"__esModule",{value:!0});var KE=h5(bB),ZA=h5(Lre),RB=iT,GF=jN,ume=function(){function yt(ir){this.uncompressed=F0.from(ZA.default.publicKeyConvert(ir,!1)),this.compressed=F0.from(ZA.default.publicKeyConvert(ir,!0))}return yt.fromHex=function(ir){var _c=(0,RB.decodeHex)(ir);if(_c.length===GF.UNCOMPRESSED_PUBLIC_KEY_SIZE-1){var mu=F0.from([4]);return new yt(F0.concat([mu,_c]))}return new yt(_c)},yt.prototype.toHex=function(ir){return ir===void 0&&(ir=!0),ir?this.compressed.toString("hex"):this.uncompressed.toString("hex")},yt.prototype.decapsulate=function(ir){var _c=F0.concat([this.uncompressed,ir.multiply(this)]);return(0,KE.default)(_c,32,{hash:"SHA-256"})},yt.prototype.equals=function(ir){return this.uncompressed.equals(ir.uncompressed)},yt}();jZ.default=ume;var hq=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(Lw,"__esModule",{value:!0});var oT=hq(bB),OH=hq(Lre),nue=iT,NZ=hq(jZ),fme=function(){function yt(ir){if(this.secret=ir||(0,nue.getValidSecret)(),!OH.default.privateKeyVerify(this.secret))throw new Error("Invalid private key");this.publicKey=new NZ.default(F0.from(OH.default.publicKeyCreate(this.secret)))}return yt.fromHex=function(ir){return new yt((0,nue.decodeHex)(ir))},yt.prototype.toHex=function(){return"0x".concat(this.secret.toString("hex"))},yt.prototype.encapsulate=function(ir){var _c=F0.concat([this.publicKey.uncompressed,this.multiply(ir)]);return(0,oT.default)(_c,32,{hash:"SHA-256"})},yt.prototype.multiply=function(ir){return F0.from(OH.default.publicKeyTweakMul(ir.compressed,this.secret,!1))},yt.prototype.equals=function(ir){return this.secret.equals(ir.secret)},yt}();Lw.default=fme,function(yt){var ir=c&&c.__importDefault||function(Mu){return Mu&&Mu.__esModule?Mu:{default:Mu}};Object.defineProperty(yt,"__esModule",{value:!0}),yt.PublicKey=yt.PrivateKey=void 0;var _c=Lw;Object.defineProperty(yt,"PrivateKey",{enumerable:!0,get:function(){return ir(_c).default}});var mu=jZ;Object.defineProperty(yt,"PublicKey",{enumerable:!0,get:function(){return ir(mu).default}})}(lw),function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.utils=yt.PublicKey=yt.PrivateKey=yt.decrypt=yt.encrypt=void 0;var ir=lw,_c=iT,mu=jN;yt.encrypt=function(Su,l0){var E0=new ir.PrivateKey,j0=Su instanceof F0?new ir.PublicKey(Su):ir.PublicKey.fromHex(Su),M0=E0.encapsulate(j0),B0=(0,_c.aesEncrypt)(M0,l0);return F0.concat([E0.publicKey.uncompressed,B0])},yt.decrypt=function(Su,l0){var E0=Su instanceof F0?new ir.PrivateKey(Su):ir.PrivateKey.fromHex(Su),j0=new ir.PublicKey(l0.slice(0,mu.UNCOMPRESSED_PUBLIC_KEY_SIZE)),M0=l0.slice(mu.UNCOMPRESSED_PUBLIC_KEY_SIZE),B0=j0.decapsulate(E0);return(0,_c.aesDecrypt)(B0,M0)};var Mu=lw;Object.defineProperty(yt,"PrivateKey",{enumerable:!0,get:function(){return Mu.PrivateKey}}),Object.defineProperty(yt,"PublicKey",{enumerable:!0,get:function(){return Mu.PublicKey}}),yt.utils={aesDecrypt:_c.aesDecrypt,aesEncrypt:_c.aesEncrypt,decodeHex:_c.decodeHex,getValidSecret:_c.getValidSecret,remove0x:_c.remove0x}}(Nw);var YF={exports:{}};(function(yt,ir){(function(_c){var mu=Object.hasOwnProperty,Mu=Array.isArray?Array.isArray:function(a0){return Object.prototype.toString.call(a0)==="[object Array]"},Su=typeof Kv=="object"&&!0,l0=typeof Symbol=="function",E0=typeof Reflect=="object",j0=typeof setImmediate=="function"?setImmediate:setTimeout,M0=l0?E0&&typeof Reflect.ownKeys=="function"?Reflect.ownKeys:function(a0){var S0=Object.getOwnPropertyNames(a0);return S0.push.apply(S0,Object.getOwnPropertySymbols(a0)),S0}:Object.keys;function B0(){this._events={},this._conf&&V0.call(this,this._conf)}function V0(a0){a0&&(this._conf=a0,a0.delimiter&&(this.delimiter=a0.delimiter),a0.maxListeners!==_c&&(this._maxListeners=a0.maxListeners),a0.wildcard&&(this.wildcard=a0.wildcard),a0.newListener&&(this._newListener=a0.newListener),a0.removeListener&&(this._removeListener=a0.removeListener),a0.verboseMemoryLeak&&(this.verboseMemoryLeak=a0.verboseMemoryLeak),a0.ignoreErrors&&(this.ignoreErrors=a0.ignoreErrors),this.wildcard&&(this.listenerTree={}))}function y1(a0,S0){var z0="(node) warning: possible EventEmitter memory leak detected. "+a0+" listeners added. Use emitter.setMaxListeners() to increase limit.";if(this.verboseMemoryLeak&&(z0+=" Event name: "+S0+"."),Kv!==void 0&&Kv.emitWarning){var Q0=new Error(z0);Q0.name="MaxListenersExceededWarning",Q0.emitter=this,Q0.count=a0,Kv.emitWarning(Q0)}else console.error(z0),console.trace&&console.trace()}var v1=function(a0,S0,z0){var Q0=arguments.length;switch(Q0){case 0:return[];case 1:return[a0];case 2:return[a0,S0];case 3:return[a0,S0,z0];default:for(var p1=new Array(Q0);Q0--;)p1[Q0]=arguments[Q0];return p1}};function F1(a0,S0){for(var z0={},Q0=a0.length,p1=0,T1=0;T10;)if(S1===a0[n1])return T1;U1(S0)}}Object.assign(ov.prototype,{subscribe:function(a0,S0,z0){var Q0=this,p1=this._target,T1=this._emitter,U1=this._listeners,S1=function(){var n1=v1.apply(null,arguments),V1={data:n1,name:S0,original:a0};z0?z0.call(p1,V1)!==!1&&T1.emit.apply(T1,[V1.name].concat(n1)):T1.emit.apply(T1,[S0].concat(n1))};if(U1[a0])throw Error("Event '"+a0+"' is already listening");this._listenersCount++,T1._newListener&&T1._removeListener&&!Q0._onNewListener?(this._onNewListener=function(n1){n1===S0&&U1[a0]===null&&(U1[a0]=S1,Q0._on.call(p1,a0,S1))},T1.on("newListener",this._onNewListener),this._onRemoveListener=function(n1){n1===S0&&!T1.hasListeners(n1)&&U1[a0]&&(U1[a0]=null,Q0._off.call(p1,a0,S1))},U1[a0]=null,T1.on("removeListener",this._onRemoveListener)):(U1[a0]=S1,Q0._on.call(p1,a0,S1))},unsubscribe:function(a0){var S0,z0,Q0,p1=this,T1=this._listeners,U1=this._emitter,S1=this._off,n1=this._target;if(a0&&typeof a0!="string")throw TypeError("event must be a string");function V1(){p1._onNewListener&&(U1.off("newListener",p1._onNewListener),U1.off("removeListener",p1._onRemoveListener),p1._onNewListener=null,p1._onRemoveListener=null);var J1=Fy.call(U1,p1);U1._observers.splice(J1,1)}if(a0){if(!(S0=T1[a0]))return;S1.call(n1,a0,S0),delete T1[a0],--this._listenersCount||V1()}else{for(Q0=(z0=M0(T1)).length;Q0-- >0;)a0=z0[Q0],S1.call(n1,a0,T1[a0]);this._listeners={},this._listenersCount=0,V1()}}});var hy=xv(["function"]),oy=xv(["object","function"]);function fy(a0,S0,z0){var Q0,p1,T1,U1=0,S1=new a0(function(n1,V1,J1){function wv(){p1&&(p1=null),U1&&(clearTimeout(U1),U1=0)}z0=bv(z0,{timeout:0,overload:!1},{timeout:function(ty,gy){return(typeof(ty*=1)!="number"||ty<0||!Number.isFinite(ty))&&gy("timeout must be a positive number"),ty}}),Q0=!z0.overload&&typeof a0.prototype.cancel=="function"&&typeof J1=="function";var Sv=function(ty){wv(),n1(ty)},Hv=function(ty){wv(),V1(ty)};Q0?S0(Sv,Hv,J1):(p1=[function(ty){Hv(ty||Error("canceled"))}],S0(Sv,Hv,function(ty){if(T1)throw Error("Unable to subscribe on cancel event asynchronously");if(typeof ty!="function")throw TypeError("onCancel callback must be a function");p1.push(ty)}),T1=!0),z0.timeout>0&&(U1=setTimeout(function(){var ty=Error("timeout");ty.code="ETIMEDOUT",U1=0,S1.cancel(ty),V1(ty)},z0.timeout))});return Q0||(S1.cancel=function(n1){if(p1){for(var V1=p1.length,J1=1;J10;)(Sv=Av[S1])!=="_listeners"&&(Dv=qv(a0,S0,z0[Sv],Q0+1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv);return ry}if(Jv==="**"){for((yv=Q0+1===p1||Q0+2===p1&&Fv==="*")&&z0._listeners&&(ry=qv(a0,S0,z0,p1,p1)),S1=(Av=M0(z0)).length;S1-- >0;)(Sv=Av[S1])!=="_listeners"&&(Sv==="*"||Sv==="**"?(z0[Sv]._listeners&&!yv&&(Dv=qv(a0,S0,z0[Sv],p1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv),Dv=qv(a0,S0,z0[Sv],Q0,p1)):Dv=qv(a0,S0,z0[Sv],Sv===Fv?Q0+2:Q0,p1),Dv&&(ry?ry.push.apply(ry,Dv):ry=Dv));return ry}z0[Jv]&&(ry=qv(a0,S0,z0[Jv],Q0+1,p1))}if((Hv=z0["*"])&&qv(a0,S0,Hv,Q0+1,p1),ty=z0["**"])if(Q00;)(Sv=Av[S1])!=="_listeners"&&(Sv===Fv?qv(a0,S0,ty[Sv],Q0+2,p1):Sv===Jv?qv(a0,S0,ty[Sv],Q0+1,p1):((gy={})[Sv]=ty[Sv],qv(a0,S0,{"**":gy},Q0+1,p1)));else ty._listeners?qv(a0,S0,ty,p1,p1):ty["*"]&&ty["*"]._listeners&&qv(a0,S0,ty["*"],p1,p1);return ry}function Qv(a0,S0,z0){var Q0,p1,T1=0,U1=0,S1=this.delimiter,n1=S1.length;if(typeof a0=="string")if((Q0=a0.indexOf(S1))!==-1){p1=new Array(5);do p1[T1++]=a0.slice(U1,Q0),U1=Q0+n1;while((Q0=a0.indexOf(S1,U1))!==-1);p1[T1++]=a0.slice(U1)}else p1=[a0],T1=1;else p1=a0,T1=a0.length;if(T1>1){for(Q0=0;Q0+10&&J1._listeners.length>this._maxListeners&&(J1._listeners.warned=!0,y1.call(this,J1._listeners.length,V1))):J1._listeners=S0,!0;return!0}function T0(a0,S0,z0,Q0){for(var p1,T1,U1,S1,n1=M0(a0),V1=n1.length,J1=a0._listeners;V1-- >0;)p1=a0[T1=n1[V1]],U1=T1==="_listeners"?z0:z0?z0.concat(T1):[T1],S1=Q0||typeof T1=="symbol",J1&&S0.push(S1?U1:U1.join(this.delimiter)),typeof p1=="object"&&T0.call(this,p1,S0,U1,S1);return S0}function X0(a0){for(var S0,z0,Q0,p1=M0(a0),T1=p1.length;T1-- >0;)(S0=a0[z0=p1[T1]])&&(Q0=!0,z0==="_listeners"||X0(S0)||delete a0[z0]);return Q0}function s0(a0,S0,z0){this.emitter=a0,this.event=S0,this.listener=z0}function g0(a0,S0,z0){if(z0===!0)p1=!0;else if(z0===!1)Q0=!0;else{if(!z0||typeof z0!="object")throw TypeError("options should be an object or true");var Q0=z0.async,p1=z0.promisify,T1=z0.nextTick,U1=z0.objectify}if(Q0||T1||p1){var S1=S0,n1=S0._origin||S0;if(T1&&!Su)throw Error("process.nextTick is not supported");p1===_c&&(p1=S0.constructor.name==="AsyncFunction"),S0=function(){var V1=arguments,J1=this,wv=this.event;return p1?T1?Promise.resolve():new Promise(function(Sv){j0(Sv)}).then(function(){return J1.event=wv,S1.apply(J1,V1)}):(T1?$2:j0)(function(){J1.event=wv,S1.apply(J1,V1)})},S0._async=!0,S0._origin=n1}return[S0,U1?new s0(this,a0,S0):this]}function d0(a0){this._events={},this._newListener=!1,this._removeListener=!1,this.verboseMemoryLeak=!1,V0.call(this,a0)}s0.prototype.off=function(){return this.emitter.off(this.event,this.listener),this},d0.EventEmitter2=d0,d0.prototype.listenTo=function(a0,S0,z0){if(typeof a0!="object")throw TypeError("target musts be an object");var Q0=this;function p1(T1){if(typeof T1!="object")throw TypeError("events must be an object");var U1,S1=z0.reducers,n1=Fy.call(Q0,a0);U1=n1===-1?new ov(Q0,a0,z0):Q0._observers[n1];for(var V1,J1=M0(T1),wv=J1.length,Sv=typeof S1=="function",Hv=0;Hv0;)Q0=z0[p1],a0&&Q0._target!==a0||(Q0.unsubscribe(S0),T1=!0);return T1},d0.prototype.delimiter=".",d0.prototype.setMaxListeners=function(a0){a0!==_c&&(this._maxListeners=a0,this._conf||(this._conf={}),this._conf.maxListeners=a0)},d0.prototype.getMaxListeners=function(){return this._maxListeners},d0.prototype.event="",d0.prototype.once=function(a0,S0,z0){return this._once(a0,S0,!1,z0)},d0.prototype.prependOnceListener=function(a0,S0,z0){return this._once(a0,S0,!0,z0)},d0.prototype._once=function(a0,S0,z0,Q0){return this._many(a0,1,S0,z0,Q0)},d0.prototype.many=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!1,Q0)},d0.prototype.prependMany=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!0,Q0)},d0.prototype._many=function(a0,S0,z0,Q0,p1){var T1=this;if(typeof z0!="function")throw new Error("many only accepts instances of Function");function U1(){return--S0==0&&T1.off(a0,U1),z0.apply(this,arguments)}return U1._origin=z0,this._on(a0,U1,Q0,p1)},d0.prototype.emit=function(){if(!this._events&&!this._all)return!1;this._events||B0.call(this);var a0,S0,z0,Q0,p1,T1,U1=arguments[0],S1=this.wildcard;if(U1==="newListener"&&!this._newListener&&!this._events.newListener)return!1;if(S1&&(a0=U1,U1!=="newListener"&&U1!=="removeListener"&&typeof U1=="object")){if(z0=U1.length,l0){for(Q0=0;Q03)for(S0=new Array(V1-1),p1=1;p13)for(z0=new Array(J1-1),T1=1;T10&&this._events[a0].length>this._maxListeners&&(this._events[a0].warned=!0,y1.call(this,this._events[a0].length,a0))):this._events[a0]=S0,T1)},d0.prototype.off=function(a0,S0){if(typeof S0!="function")throw new Error("removeListener only takes instances of Function");var z0,Q0=[];if(this.wildcard){var p1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();if(!(Q0=qv.call(this,null,p1,this.listenerTree,0)))return this}else{if(!this._events[a0])return this;z0=this._events[a0],Q0.push({_listeners:z0})}for(var T1=0;T10){for(z0=0,Q0=(S0=this._all).length;z00;)typeof(z0=U1[S0[p1]])=="function"?Q0.push(z0):Q0.push.apply(Q0,z0);return Q0}if(this.wildcard){if(!(T1=this.listenerTree))return[];var S1=[],n1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S1,n1,T1,0),S1}return U1&&(z0=U1[a0])?typeof z0=="function"?[z0]:z0:[]},d0.prototype.eventNames=function(a0){var S0=this._events;return this.wildcard?T0.call(this,this.listenerTree,[],null,a0):S0?M0(S0):[]},d0.prototype.listenerCount=function(a0){return this.listeners(a0).length},d0.prototype.hasListeners=function(a0){if(this.wildcard){var S0=[],z0=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S0,z0,this.listenerTree,0),S0.length>0}var Q0=this._events,p1=this._all;return!!(p1&&p1.length||Q0&&(a0===_c?M0(Q0).length:Q0[a0]))},d0.prototype.listenersAny=function(){return this._all?this._all:[]},d0.prototype.waitFor=function(a0,S0){var z0=this,Q0=typeof S0;return Q0==="number"?S0={timeout:S0}:Q0==="function"&&(S0={filter:S0}),fy((S0=bv(S0,{timeout:0,filter:_c,handleError:!1,Promise,overload:!1},{filter:hy,Promise:gv})).Promise,function(p1,T1,U1){function S1(){var n1=S0.filter;if(!n1||n1.apply(z0,arguments))if(z0.off(a0,S1),S0.handleError){var V1=arguments[0];V1?T1(V1):p1(v1.apply(null,arguments).slice(1))}else p1(v1.apply(null,arguments))}U1(function(){z0.off(a0,S1)}),z0._on(a0,S1,!1)},{timeout:S0.timeout,overload:S0.overload})};var c0=d0.prototype;Object.defineProperties(d0,{defaultMaxListeners:{get:function(){return c0._maxListeners},set:function(a0){if(typeof a0!="number"||a0<0||Number.isNaN(a0))throw TypeError("n must be a non-negative number");c0._maxListeners=a0},enumerable:!0},once:{value:function(a0,S0,z0){return fy((z0=bv(z0,{Promise,timeout:0,overload:!1},{Promise:gv})).Promise,function(Q0,p1,T1){var U1;if(typeof a0.addEventListener=="function")return U1=function(){Q0(v1.apply(null,arguments))},T1(function(){a0.removeEventListener(S0,U1)}),void a0.addEventListener(S0,U1,{once:!0});var S1,n1=function(){S1&&a0.removeListener("error",S1),Q0(v1.apply(null,arguments))};S0!=="error"&&(S1=function(V1){a0.removeListener(S0,n1),p1(V1)},a0.once("error",S1)),T1(function(){S1&&a0.removeListener("error",S1),a0.removeListener(S0,n1)}),a0.once(S0,n1)},{timeout:z0.timeout,overload:z0.overload})},writable:!0,configurable:!0}}),Object.defineProperties(c0,{_maxListeners:{value:10,writable:!0,configurable:!0},_observers:{value:null,writable:!0,configurable:!0}}),yt.exports=d0})()})(YF);var LZ,PH=YF.exports,iue=new Uint8Array(16);function dme(){if(!LZ&&!(LZ=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return LZ(iue)}var oue=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function aue(yt){return typeof yt=="string"&&oue.test(yt)}for(var b9=[],Bre=0;Bre<256;++Bre)b9.push((Bre+256).toString(16).substr(1));function BZ(yt,ir,_c){var mu=(yt=yt||{}).random||(yt.rng||dme)();return mu[6]=15&mu[6]|64,mu[8]=63&mu[8]|128,function(Mu){var Su=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,l0=(b9[Mu[Su+0]]+b9[Mu[Su+1]]+b9[Mu[Su+2]]+b9[Mu[Su+3]]+"-"+b9[Mu[Su+4]]+b9[Mu[Su+5]]+"-"+b9[Mu[Su+6]]+b9[Mu[Su+7]]+"-"+b9[Mu[Su+8]]+b9[Mu[Su+9]]+"-"+b9[Mu[Su+10]]+b9[Mu[Su+11]]+b9[Mu[Su+12]]+b9[Mu[Su+13]]+b9[Mu[Su+14]]+b9[Mu[Su+15]]).toLowerCase();if(!aue(l0))throw TypeError("Stringified UUID is invalid");return l0}(mu)}const KO=Object.create(null);KO.open="0",KO.close="1",KO.ping="2",KO.pong="3",KO.message="4",KO.upgrade="5",KO.noop="6";const jH=Object.create(null);Object.keys(KO).forEach(yt=>{jH[KO[yt]]=yt});const sue={type:"error",data:"parser error"},lue=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",cue=typeof ArrayBuffer=="function",Dre=yt=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(yt):yt&&yt.buffer instanceof ArrayBuffer,pq=({type:yt,data:ir},_c,mu)=>lue&&ir instanceof Blob?_c?mu(ir):DZ(ir,mu):cue&&(ir instanceof ArrayBuffer||Dre(ir))?_c?mu(ir):DZ(new Blob([ir]),mu):mu(KO[yt]+(ir||"")),DZ=(yt,ir)=>{const _c=new FileReader;return _c.onload=function(){const mu=_c.result.split(",")[1];ir("b"+(mu||""))},_c.readAsDataURL(yt)};function uue(yt){return yt instanceof Uint8Array?yt:yt instanceof ArrayBuffer?new Uint8Array(yt):new Uint8Array(yt.buffer,yt.byteOffset,yt.byteLength)}let Fre;function hme(yt,ir){return lue&&yt.data instanceof Blob?yt.data.arrayBuffer().then(uue).then(ir):cue&&(yt.data instanceof ArrayBuffer||Dre(yt.data))?ir(uue(yt.data)):void pq(yt,!1,_c=>{Fre||(Fre=new TextEncoder),ir(Fre.encode(_c))})}const NH=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let yt=0;yt<64;yt++)NH["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(yt)]=yt;const w9=typeof ArrayBuffer=="function",mq=(yt,ir)=>{if(typeof yt!="string")return{type:"message",data:p5(yt,ir)};const _c=yt.charAt(0);return _c==="b"?{type:"message",data:fue(yt.substring(1),ir)}:jH[_c]?yt.length>1?{type:jH[_c],data:yt.substring(1)}:{type:jH[_c]}:sue},fue=(yt,ir)=>{if(w9){const _c=(mu=>{let Mu,Su,l0,E0,j0,M0=.75*mu.length,B0=mu.length,V0=0;mu[mu.length-1]==="="&&(M0--,mu[mu.length-2]==="="&&M0--);const y1=new ArrayBuffer(M0),v1=new Uint8Array(y1);for(Mu=0;Mu>4,v1[V0++]=(15&l0)<<4|E0>>2,v1[V0++]=(3&E0)<<6|63&j0;return y1})(yt);return p5(_c,ir)}return{base64:!0,data:yt}},p5=(yt,ir)=>ir==="blob"?yt instanceof Blob?yt:new Blob([yt]):yt instanceof ArrayBuffer?yt:yt.buffer,gq="";let Ure;function fS(yt){if(yt)return function(ir){for(var _c in fS.prototype)ir[_c]=fS.prototype[_c];return ir}(yt)}fS.prototype.on=fS.prototype.addEventListener=function(yt,ir){return this._callbacks=this._callbacks||{},(this._callbacks["$"+yt]=this._callbacks["$"+yt]||[]).push(ir),this},fS.prototype.once=function(yt,ir){function _c(){this.off(yt,_c),ir.apply(this,arguments)}return _c.fn=ir,this.on(yt,_c),this},fS.prototype.off=fS.prototype.removeListener=fS.prototype.removeAllListeners=fS.prototype.removeEventListener=function(yt,ir){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var _c,mu=this._callbacks["$"+yt];if(!mu)return this;if(arguments.length==1)return delete this._callbacks["$"+yt],this;for(var Mu=0;Mu(yt.hasOwnProperty(mu)&&(_c[mu]=yt[mu]),_c),{})}const Hre=xR.setTimeout,due=xR.clearTimeout;function vq(yt,ir){ir.useNativeTimers?(yt.setTimeoutFn=Hre.bind(xR),yt.clearTimeoutFn=due.bind(xR)):(yt.setTimeoutFn=xR.setTimeout.bind(xR),yt.clearTimeoutFn=xR.clearTimeout.bind(xR))}class Kre extends Error{constructor(ir,_c,mu){super(ir),this.description=_c,this.context=mu,this.type="TransportError"}}class Vre extends fS{constructor(ir){super(),this.writable=!1,vq(this,ir),this.opts=ir,this.query=ir.query,this.socket=ir.socket}onError(ir,_c,mu){return super.emitReserved("error",new Kre(ir,_c,mu)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return this.readyState!=="opening"&&this.readyState!=="open"||(this.doClose(),this.onClose()),this}send(ir){this.readyState==="open"&&this.write(ir)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(ir){const _c=mq(ir,this.socket.binaryType);this.onPacket(_c)}onPacket(ir){super.emitReserved("packet",ir)}onClose(ir){this.readyState="closed",super.emitReserved("close",ir)}pause(ir){}createUri(ir,_c={}){return ir+"://"+this._hostname()+this._port()+this.opts.path+this._query(_c)}_hostname(){const ir=this.opts.hostname;return ir.indexOf(":")===-1?ir:"["+ir+"]"}_port(){return this.opts.port&&(this.opts.secure&&+(this.opts.port!==443)||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(ir){const _c=function(mu){let Mu="";for(let Su in mu)mu.hasOwnProperty(Su)&&(Mu.length&&(Mu+="&"),Mu+=encodeURIComponent(Su)+"="+encodeURIComponent(mu[Su]));return Mu}(ir);return _c.length?"?"+_c:""}}const hue="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),ZF=64,pme={};let FZ,pue=0,yq=0;function qre(yt){let ir="";do ir=hue[yt%ZF]+ir,yt=Math.floor(yt/ZF);while(yt>0);return ir}function UZ(){const yt=qre(+new Date);return yt!==FZ?(pue=0,FZ=yt):yt+"."+qre(pue++)}for(;yq{var Mu;mu.readyState===3&&((Mu=this.opts.cookieJar)===null||Mu===void 0||Mu.parseCookies(mu)),mu.readyState===4&&(mu.status===200||mu.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof mu.status=="number"?mu.status:0)},0))},mu.send(this.data)}catch(Mu){return void this.setTimeoutFn(()=>{this.onError(Mu)},0)}typeof document<"u"&&(this.index=kR.requestsCount++,kR.requests[this.index]=this)}onError(ir){this.emitReserved("error",ir,this.xhr),this.cleanup(!0)}cleanup(ir){if(this.xhr!==void 0&&this.xhr!==null){if(this.xhr.onreadystatechange=mme,ir)try{this.xhr.abort()}catch{}typeof document<"u"&&delete kR.requests[this.index],this.xhr=null}}onLoad(){const ir=this.xhr.responseText;ir!==null&&(this.emitReserved("data",ir),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}function mue(){for(let yt in kR.requests)kR.requests.hasOwnProperty(yt)&&kR.requests[yt].abort()}kR.requestsCount=0,kR.requests={},typeof document<"u"&&(typeof attachEvent=="function"?attachEvent("onunload",mue):typeof addEventListener=="function"&&addEventListener("onpagehide"in xR?"pagehide":"unload",mue,!1));const bq=typeof Promise=="function"&&typeof Promise.resolve=="function"?yt=>Promise.resolve().then(yt):(yt,ir)=>ir(yt,0),wq=xR.WebSocket||xR.MozWebSocket,zZ=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";function vme(yt,ir){return yt.type==="message"&&typeof yt.data!="string"&&ir[0]>=48&&ir[0]<=54}const gue={websocket:class extends Vre{constructor(yt){super(yt),this.supportsBinary=!yt.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const yt=this.uri(),ir=this.opts.protocols,_c=zZ?{}:zre(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(_c.headers=this.opts.extraHeaders);try{this.ws=zZ?new wq(yt,ir,_c):ir?new wq(yt,ir):new wq(yt)}catch(mu){return this.emitReserved("error",mu)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=yt=>this.onClose({description:"websocket connection closed",context:yt}),this.ws.onmessage=yt=>this.onData(yt.data),this.ws.onerror=yt=>this.onError("websocket error",yt)}write(yt){this.writable=!1;for(let ir=0;ir{try{this.ws.send(Mu)}catch{}mu&&bq(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){this.ws!==void 0&&(this.ws.close(),this.ws=null)}uri(){const yt=this.opts.secure?"wss":"ws",ir=this.query||{};return this.opts.timestampRequests&&(ir[this.opts.timestampParam]=UZ()),this.supportsBinary||(ir.b64=1),this.createUri(yt,ir)}check(){return!!wq}},webtransport:class extends Vre{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(yt=>{this.onError("webtransport error",yt)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(yt=>{const ir=yt.readable.getReader();let _c;this.writer=yt.writable.getWriter();const mu=()=>{ir.read().then(({done:Su,value:l0})=>{Su||(_c||l0.byteLength!==1||l0[0]!==54?(this.onPacket(function(E0,j0,M0){Ure||(Ure=new TextDecoder);const B0=j0||E0[0]<48||E0[0]>54;return mq(B0?E0:Ure.decode(E0),"arraybuffer")}(l0,_c)),_c=!1):_c=!0,mu())}).catch(Su=>{})};mu();const Mu=this.query.sid?`0{"sid":"${this.query.sid}"}`:"0";this.writer.write(new TextEncoder().encode(Mu)).then(()=>this.onOpen())})}))}write(yt){this.writable=!1;for(let ir=0;ir{vme(_c,Mu)&&this.writer.write(Uint8Array.of(54)),this.writer.write(Mu).then(()=>{mu&&bq(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})})}}doClose(){var yt;(yt=this.transport)===null||yt===void 0||yt.close()}},polling:class extends Vre{constructor(yt){if(super(yt),this.polling=!1,typeof location<"u"){const _c=location.protocol==="https:";let mu=location.port;mu||(mu=_c?"443":"80"),this.xd=typeof location<"u"&&yt.hostname!==location.hostname||mu!==yt.port}const ir=yt&&yt.forceBase64;this.supportsBinary=gme&&!ir,this.opts.withCredentials&&(this.cookieJar=void 0)}get name(){return"polling"}doOpen(){this.poll()}pause(yt){this.readyState="pausing";const ir=()=>{this.readyState="paused",yt()};if(this.polling||!this.writable){let _c=0;this.polling&&(_c++,this.once("pollComplete",function(){--_c||ir()})),this.writable||(_c++,this.once("drain",function(){--_c||ir()}))}else ir()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(yt){((ir,_c)=>{const mu=ir.split(gq),Mu=[];for(let Su=0;Su{if(this.readyState==="opening"&&ir.type==="open"&&this.onOpen(),ir.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(ir)}),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const yt=()=>{this.write([{type:"close"}])};this.readyState==="open"?yt():this.once("open",yt)}write(yt){this.writable=!1,((ir,_c)=>{const mu=ir.length,Mu=new Array(mu);let Su=0;ir.forEach((l0,E0)=>{pq(l0,!1,j0=>{Mu[E0]=j0,++Su===mu&&_c(Mu.join(gq))})})})(yt,ir=>{this.doWrite(ir,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const yt=this.opts.secure?"https":"http",ir=this.query||{};return this.opts.timestampRequests!==!1&&(ir[this.opts.timestampParam]=UZ()),this.supportsBinary||ir.sid||(ir.b64=1),this.createUri(yt,ir)}request(yt={}){return Object.assign(yt,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new kR(this.uri(),yt)}doWrite(yt,ir){const _c=this.request({method:"POST",data:yt});_c.on("success",ir),_c.on("error",(mu,Mu)=>{this.onError("xhr post error",mu,Mu)})}doPoll(){const yt=this.request();yt.on("data",this.onData.bind(this)),yt.on("error",(ir,_c)=>{this.onError("xhr poll error",ir,_c)}),this.pollXhr=yt}}},vue=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,HZ=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function KZ(yt){const ir=yt,_c=yt.indexOf("["),mu=yt.indexOf("]");_c!=-1&&mu!=-1&&(yt=yt.substring(0,_c)+yt.substring(_c,mu).replace(/:/g,";")+yt.substring(mu,yt.length));let Mu=vue.exec(yt||""),Su={},l0=14;for(;l0--;)Su[HZ[l0]]=Mu[l0]||"";return _c!=-1&&mu!=-1&&(Su.source=ir,Su.host=Su.host.substring(1,Su.host.length-1).replace(/;/g,":"),Su.authority=Su.authority.replace("[","").replace("]","").replace(/;/g,":"),Su.ipv6uri=!0),Su.pathNames=function(E0,j0){const M0=j0.replace(/\/{2,9}/g,"/").split("/");return j0.slice(0,1)!="/"&&j0.length!==0||M0.splice(0,1),j0.slice(-1)=="/"&&M0.splice(M0.length-1,1),M0}(0,Su.path),Su.queryKey=function(E0,j0){const M0={};return j0.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(B0,V0,y1){V0&&(M0[V0]=y1)}),M0}(0,Su.query),Su}let Gre=class cee extends fS{constructor(ir,_c={}){super(),this.writeBuffer=[],ir&&typeof ir=="object"&&(_c=ir,ir=null),ir?(ir=KZ(ir),_c.hostname=ir.host,_c.secure=ir.protocol==="https"||ir.protocol==="wss",_c.port=ir.port,ir.query&&(_c.query=ir.query)):_c.host&&(_c.hostname=KZ(_c.host).host),vq(this,_c),this.secure=_c.secure!=null?_c.secure:typeof location<"u"&&location.protocol==="https:",_c.hostname&&!_c.port&&(_c.port=this.secure?"443":"80"),this.hostname=_c.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=_c.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=_c.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},_c),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=function(mu){let Mu={},Su=mu.split("&");for(let l0=0,E0=Su.length;l0{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(ir){const _c=Object.assign({},this.opts.query);_c.EIO=4,_c.transport=ir,this.id&&(_c.sid=this.id);const mu=Object.assign({},this.opts,{query:_c,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[ir]);return new gue[ir](mu)}open(){let ir;if(this.opts.rememberUpgrade&&cee.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)ir="websocket";else{if(this.transports.length===0)return void this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);ir=this.transports[0]}this.readyState="opening";try{ir=this.createTransport(ir)}catch{return this.transports.shift(),void this.open()}ir.open(),this.setTransport(ir)}setTransport(ir){this.transport&&this.transport.removeAllListeners(),this.transport=ir,ir.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",_c=>this.onClose("transport close",_c))}probe(ir){let _c=this.createTransport(ir),mu=!1;cee.priorWebsocketSuccess=!1;const Mu=()=>{mu||(_c.send([{type:"ping",data:"probe"}]),_c.once("packet",V0=>{if(!mu)if(V0.type==="pong"&&V0.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",_c),!_c)return;cee.priorWebsocketSuccess=_c.name==="websocket",this.transport.pause(()=>{mu||this.readyState!=="closed"&&(B0(),this.setTransport(_c),_c.send([{type:"upgrade"}]),this.emitReserved("upgrade",_c),_c=null,this.upgrading=!1,this.flush())})}else{const y1=new Error("probe error");y1.transport=_c.name,this.emitReserved("upgradeError",y1)}}))};function Su(){mu||(mu=!0,B0(),_c.close(),_c=null)}const l0=V0=>{const y1=new Error("probe error: "+V0);y1.transport=_c.name,Su(),this.emitReserved("upgradeError",y1)};function E0(){l0("transport closed")}function j0(){l0("socket closed")}function M0(V0){_c&&V0.name!==_c.name&&Su()}const B0=()=>{_c.removeListener("open",Mu),_c.removeListener("error",l0),_c.removeListener("close",E0),this.off("close",j0),this.off("upgrading",M0)};_c.once("open",Mu),_c.once("error",l0),_c.once("close",E0),this.once("close",j0),this.once("upgrading",M0),this.upgrades.indexOf("webtransport")!==-1&&ir!=="webtransport"?this.setTimeoutFn(()=>{mu||_c.open()},200):_c.open()}onOpen(){if(this.readyState="open",cee.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let ir=0;const _c=this.upgrades.length;for(;ir<_c;ir++)this.probe(this.upgrades[ir])}}onPacket(ir){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",ir),this.emitReserved("heartbeat"),ir.type){case"open":this.onHandshake(JSON.parse(ir.data));break;case"ping":this.resetPingTimeout(),this.sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong");break;case"error":const _c=new Error("server error");_c.code=ir.data,this.onError(_c);break;case"message":this.emitReserved("data",ir.data),this.emitReserved("message",ir.data)}}onHandshake(ir){this.emitReserved("handshake",ir),this.id=ir.sid,this.transport.query.sid=ir.sid,this.upgrades=this.filterUpgrades(ir.upgrades),this.pingInterval=ir.pingInterval,this.pingTimeout=ir.pingTimeout,this.maxPayload=ir.maxPayload,this.onOpen(),this.readyState!=="closed"&&this.resetPingTimeout()}resetPingTimeout(){this.clearTimeoutFn(this.pingTimeoutTimer),this.pingTimeoutTimer=this.setTimeoutFn(()=>{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const ir=this.getWritablePackets();this.transport.send(ir),this.prevBufferLen=ir.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let ir=1;for(let mu=0;mu=57344?E0+=3:(j0++,E0+=4);return E0}(_c):Math.ceil(1.33*(_c.byteLength||_c.size))),mu>0&&ir>this.maxPayload)return this.writeBuffer.slice(0,mu);ir+=2}var _c;return this.writeBuffer}write(ir,_c,mu){return this.sendPacket("message",ir,_c,mu),this}send(ir,_c,mu){return this.sendPacket("message",ir,_c,mu),this}sendPacket(ir,_c,mu,Mu){if(typeof _c=="function"&&(Mu=_c,_c=void 0),typeof mu=="function"&&(Mu=mu,mu=null),this.readyState==="closing"||this.readyState==="closed")return;(mu=mu||{}).compress=mu.compress!==!1;const Su={type:ir,data:_c,options:mu};this.emitReserved("packetCreate",Su),this.writeBuffer.push(Su),Mu&&this.once("flush",Mu),this.flush()}close(){const ir=()=>{this.onClose("forced close"),this.transport.close()},_c=()=>{this.off("upgrade",_c),this.off("upgradeError",_c),ir()},mu=()=>{this.once("upgrade",_c),this.once("upgradeError",_c)};return this.readyState!=="opening"&&this.readyState!=="open"||(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?mu():ir()}):this.upgrading?mu():ir()),this}onError(ir){cee.priorWebsocketSuccess=!1,this.emitReserved("error",ir),this.onClose("transport error",ir)}onClose(ir,_c){this.readyState!=="opening"&&this.readyState!=="open"&&this.readyState!=="closing"||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",ir,_c),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(ir){const _c=[];let mu=0;const Mu=ir.length;for(;mutypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(yt):yt.buffer instanceof ArrayBuffer,Yre=Object.prototype.toString,bme=typeof Blob=="function"||typeof Blob<"u"&&Yre.call(Blob)==="[object BlobConstructor]",wme=typeof File=="function"||typeof File<"u"&&Yre.call(File)==="[object FileConstructor]";function LM(yt){return yue&&(yt instanceof ArrayBuffer||yme(yt))||bme&&yt instanceof Blob||wme&&yt instanceof File}function $q(yt,ir){if(!yt||typeof yt!="object")return!1;if(Array.isArray(yt)){for(let _c=0,mu=yt.length;_c=0&&yt.num{delete this.acks[ir];for(let l0=0;l0{this.io.clearTimeoutFn(Su),_c.apply(this,[null,...l0])}}emitWithAck(ir,..._c){const mu=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((Mu,Su)=>{_c.push((l0,E0)=>mu?l0?Su(l0):Mu(E0):Mu(l0)),this.emit(ir,..._c)})}_addToQueue(ir){let _c;typeof ir[ir.length-1]=="function"&&(_c=ir.pop());const mu={id:this._queueSeq++,tryCount:0,pending:!1,args:ir,flags:Object.assign({fromQueue:!0},this.flags)};ir.push((Mu,...Su)=>{if(mu===this._queue[0])return Mu!==null?mu.tryCount>this._opts.retries&&(this._queue.shift(),_c&&_c(Mu)):(this._queue.shift(),_c&&_c(null,...Su)),mu.pending=!1,this._drainQueue()}),this._queue.push(mu),this._drainQueue()}_drainQueue(ir=!1){if(!this.connected||this._queue.length===0)return;const _c=this._queue[0];_c.pending&&!ir||(_c.pending=!0,_c.tryCount++,this.flags=_c.flags,this.emit.apply(this,_c.args))}packet(ir){ir.nsp=this.nsp,this.io._packet(ir)}onopen(){typeof this.auth=="function"?this.auth(ir=>{this._sendConnectPacket(ir)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(ir){this.packet({type:VE.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},ir):ir})}onerror(ir){this.connected||this.emitReserved("connect_error",ir)}onclose(ir,_c){this.connected=!1,delete this.id,this.emitReserved("disconnect",ir,_c)}onpacket(ir){if(ir.nsp===this.nsp)switch(ir.type){case VE.CONNECT:ir.data&&ir.data.sid?this.onconnect(ir.data.sid,ir.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case VE.EVENT:case VE.BINARY_EVENT:this.onevent(ir);break;case VE.ACK:case VE.BINARY_ACK:this.onack(ir);break;case VE.DISCONNECT:this.ondisconnect();break;case VE.CONNECT_ERROR:this.destroy();const _c=new Error(ir.data.message);_c.data=ir.data.data,this.emitReserved("connect_error",_c)}}onevent(ir){const _c=ir.data||[];ir.id!=null&&_c.push(this.ack(ir.id)),this.connected?this.emitEvent(_c):this.receiveBuffer.push(Object.freeze(_c))}emitEvent(ir){if(this._anyListeners&&this._anyListeners.length){const _c=this._anyListeners.slice();for(const mu of _c)mu.apply(this,ir)}super.emit.apply(this,ir),this._pid&&ir.length&&typeof ir[ir.length-1]=="string"&&(this._lastOffset=ir[ir.length-1])}ack(ir){const _c=this;let mu=!1;return function(...Mu){mu||(mu=!0,_c.packet({type:VE.ACK,id:ir,data:Mu}))}}onack(ir){const _c=this.acks[ir.id];typeof _c=="function"&&(_c.apply(this,ir.data),delete this.acks[ir.id])}onconnect(ir,_c){this.id=ir,this.recovered=_c&&this._pid===_c,this._pid=_c,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(ir=>this.emitEvent(ir)),this.receiveBuffer=[],this.sendBuffer.forEach(ir=>{this.notifyOutgoingListeners(ir),this.packet(ir)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(ir=>ir()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:VE.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(ir){return this.flags.compress=ir,this}get volatile(){return this.flags.volatile=!0,this}timeout(ir){return this.flags.timeout=ir,this}onAny(ir){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(ir),this}prependAny(ir){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(ir),this}offAny(ir){if(!this._anyListeners)return this;if(ir){const _c=this._anyListeners;for(let mu=0;mu<_c.length;mu++)if(ir===_c[mu])return _c.splice(mu,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(ir){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(ir),this}prependAnyOutgoing(ir){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(ir),this}offAnyOutgoing(ir){if(!this._anyOutgoingListeners)return this;if(ir){const _c=this._anyOutgoingListeners;for(let mu=0;mu<_c.length;mu++)if(ir===_c[mu])return _c.splice(mu,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(ir){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const _c=this._anyOutgoingListeners.slice();for(const mu of _c)mu.apply(this,ir.data)}}}function BH(yt){yt=yt||{},this.ms=yt.min||100,this.max=yt.max||1e4,this.factor=yt.factor||2,this.jitter=yt.jitter>0&&yt.jitter<=1?yt.jitter:0,this.attempts=0}BH.prototype.duration=function(){var yt=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var ir=Math.random(),_c=Math.floor(ir*this.jitter*yt);yt=1&Math.floor(10*ir)?yt+_c:yt-_c}return 0|Math.min(yt,this.max)},BH.prototype.reset=function(){this.attempts=0},BH.prototype.setMin=function(yt){this.ms=yt},BH.prototype.setMax=function(yt){this.max=yt},BH.prototype.setJitter=function(yt){this.jitter=yt};class Aq extends fS{constructor(ir,_c){var mu;super(),this.nsps={},this.subs=[],ir&&typeof ir=="object"&&(_c=ir,ir=void 0),(_c=_c||{}).path=_c.path||"/socket.io",this.opts=_c,vq(this,_c),this.reconnection(_c.reconnection!==!1),this.reconnectionAttempts(_c.reconnectionAttempts||1/0),this.reconnectionDelay(_c.reconnectionDelay||1e3),this.reconnectionDelayMax(_c.reconnectionDelayMax||5e3),this.randomizationFactor((mu=_c.randomizationFactor)!==null&&mu!==void 0?mu:.5),this.backoff=new BH({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(_c.timeout==null?2e4:_c.timeout),this._readyState="closed",this.uri=ir;const Mu=_c.parser||Eme;this.encoder=new Mu.Encoder,this.decoder=new Mu.Decoder,this._autoConnect=_c.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(ir){return arguments.length?(this._reconnection=!!ir,this):this._reconnection}reconnectionAttempts(ir){return ir===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=ir,this)}reconnectionDelay(ir){var _c;return ir===void 0?this._reconnectionDelay:(this._reconnectionDelay=ir,(_c=this.backoff)===null||_c===void 0||_c.setMin(ir),this)}randomizationFactor(ir){var _c;return ir===void 0?this._randomizationFactor:(this._randomizationFactor=ir,(_c=this.backoff)===null||_c===void 0||_c.setJitter(ir),this)}reconnectionDelayMax(ir){var _c;return ir===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=ir,(_c=this.backoff)===null||_c===void 0||_c.setMax(ir),this)}timeout(ir){return arguments.length?(this._timeout=ir,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(ir){if(~this._readyState.indexOf("open"))return this;this.engine=new Gre(this.uri,this.opts);const _c=this.engine,mu=this;this._readyState="opening",this.skipReconnect=!1;const Mu=m5(_c,"open",function(){mu.onopen(),ir&&ir()}),Su=E0=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",E0),ir?ir(E0):this.maybeReconnectOnOpen()},l0=m5(_c,"error",Su);if(this._timeout!==!1){const E0=this._timeout,j0=this.setTimeoutFn(()=>{Mu(),Su(new Error("timeout")),_c.close()},E0);this.opts.autoUnref&&j0.unref(),this.subs.push(()=>{this.clearTimeoutFn(j0)})}return this.subs.push(Mu),this.subs.push(l0),this}connect(ir){return this.open(ir)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const ir=this.engine;this.subs.push(m5(ir,"ping",this.onping.bind(this)),m5(ir,"data",this.ondata.bind(this)),m5(ir,"error",this.onerror.bind(this)),m5(ir,"close",this.onclose.bind(this)),m5(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(ir){try{this.decoder.add(ir)}catch(_c){this.onclose("parse error",_c)}}ondecoded(ir){bq(()=>{this.emitReserved("packet",ir)},this.setTimeoutFn)}onerror(ir){this.emitReserved("error",ir)}socket(ir,_c){let mu=this.nsps[ir];return mu?this._autoConnect&&!mu.active&&mu.connect():(mu=new Aue(this,ir,_c),this.nsps[ir]=mu),mu}_destroy(ir){const _c=Object.keys(this.nsps);for(const mu of _c)if(this.nsps[mu].active)return;this._close()}_packet(ir){const _c=this.encoder.encode(ir);for(let mu=0;mu<_c.length;mu++)this.engine.write(_c[mu],ir.options)}cleanup(){this.subs.forEach(ir=>ir()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(ir,_c){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",ir,_c),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const ir=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const _c=this.backoff.duration();this._reconnecting=!0;const mu=this.setTimeoutFn(()=>{ir.skipReconnect||(this.emitReserved("reconnect_attempt",ir.backoff.attempts),ir.skipReconnect||ir.open(Mu=>{Mu?(ir._reconnecting=!1,ir.reconnect(),this.emitReserved("reconnect_error",Mu)):ir.onreconnect()}))},_c);this.opts.autoUnref&&mu.unref(),this.subs.push(()=>{this.clearTimeoutFn(mu)})}}onreconnect(){const ir=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",ir)}}const MB={};function VZ(yt,ir){typeof yt=="object"&&(ir=yt,yt=void 0);const _c=function(j0,M0="",B0){let V0=j0;B0=B0||typeof location<"u"&&location,j0==null&&(j0=B0.protocol+"//"+B0.host),typeof j0=="string"&&(j0.charAt(0)==="/"&&(j0=j0.charAt(1)==="/"?B0.protocol+j0:B0.host+j0),/^(https?|wss?):\/\//.test(j0)||(j0=B0!==void 0?B0.protocol+"//"+j0:"https://"+j0),V0=KZ(j0)),V0.port||(/^(http|ws)$/.test(V0.protocol)?V0.port="80":/^(http|ws)s$/.test(V0.protocol)&&(V0.port="443")),V0.path=V0.path||"/";const y1=V0.host.indexOf(":")!==-1?"["+V0.host+"]":V0.host;return V0.id=V0.protocol+"://"+y1+":"+V0.port+M0,V0.href=V0.protocol+"://"+y1+(B0&&B0.port===V0.port?"":":"+V0.port),V0}(yt,(ir=ir||{}).path||"/socket.io"),mu=_c.source,Mu=_c.id,Su=_c.path,l0=MB[Mu]&&Su in MB[Mu].nsps;let E0;return ir.forceNew||ir["force new connection"]||ir.multiplex===!1||l0?E0=new Aq(mu,ir):(MB[Mu]||(MB[Mu]=new Aq(mu,ir)),E0=MB[Mu]),_c.query&&!ir.query&&(ir.query=_c.queryKey),E0.socket(_c.path,ir)}function hS(yt,ir,_c,mu){return new(_c||(_c=Promise))(function(Mu,Su){function l0(M0){try{j0(mu.next(M0))}catch(B0){Su(B0)}}function E0(M0){try{j0(mu.throw(M0))}catch(B0){Su(B0)}}function j0(M0){var B0;M0.done?Mu(M0.value):(B0=M0.value,B0 instanceof _c?B0:new _c(function(V0){V0(B0)})).then(l0,E0)}j0((mu=mu.apply(yt,[])).next())})}Object.assign(VZ,{Manager:Aq,Socket:Aue,io:VZ,connect:VZ}),typeof SuppressedError=="function"&&SuppressedError;var _q=a!==void 0?a:typeof self<"u"?self:typeof window<"u"?window:{};function qZ(){throw new Error("setTimeout has not been defined")}function _ue(){throw new Error("clearTimeout has not been defined")}var cE=qZ,NN=_ue;function WZ(yt){if(cE===setTimeout)return setTimeout(yt,0);if((cE===qZ||!cE)&&setTimeout)return cE=setTimeout,setTimeout(yt,0);try{return cE(yt,0)}catch{try{return cE.call(null,yt,0)}catch{return cE.call(this,yt,0)}}}typeof _q.setTimeout=="function"&&(cE=setTimeout),typeof _q.clearTimeout=="function"&&(NN=clearTimeout);var JF,LN=[],lx=!1,GZ=-1;function Sue(){lx&&JF&&(lx=!1,JF.length?LN=JF.concat(LN):GZ=-1,LN.length&&XF())}function XF(){if(!lx){var yt=WZ(Sue);lx=!0;for(var ir=LN.length;ir;){for(JF=LN,LN=[];++GZ1)for(var _c=1;_c{E0!=="%%"&&(Su++,E0==="%c"&&(l0=Su))}),mu.splice(l0,0,Mu)},ir.save=function(mu){try{mu?ir.storage.setItem("debug",mu):ir.storage.removeItem("debug")}catch{}},ir.load=function(){let mu;try{mu=ir.storage.getItem("debug")}catch{}return!mu&&Xre!==void 0&&"env"in Xre&&(mu=Xre.env.DEBUG),mu},ir.useColors=function(){return!(typeof window>"u"||!window.process||window.process.type!=="renderer"&&!window.process.__nwjs)||(typeof navigator>"u"||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&(typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},ir.storage=function(){try{return localStorage}catch{}}(),ir.destroy=(()=>{let mu=!1;return()=>{mu||(mu=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),ir.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],ir.log=console.debug||console.log||(()=>{}),yt.exports=function(mu){function Mu(E0){let j0,M0,B0,V0=null;function y1(...v1){if(!y1.enabled)return;const F1=y1,ov=Number(new Date),bv=ov-(j0||ov);F1.diff=bv,F1.prev=j0,F1.curr=ov,j0=ov,v1[0]=Mu.coerce(v1[0]),typeof v1[0]!="string"&&v1.unshift("%O");let gv=0;v1[0]=v1[0].replace(/%([a-zA-Z%])/g,(xv,hy)=>{if(xv==="%%")return"%";gv++;const oy=Mu.formatters[hy];if(typeof oy=="function"){const fy=v1[gv];xv=oy.call(F1,fy),v1.splice(gv,1),gv--}return xv}),Mu.formatArgs.call(F1,v1),(F1.log||Mu.log).apply(F1,v1)}return y1.namespace=E0,y1.useColors=Mu.useColors(),y1.color=Mu.selectColor(E0),y1.extend=Su,y1.destroy=Mu.destroy,Object.defineProperty(y1,"enabled",{enumerable:!0,configurable:!1,get:()=>V0!==null?V0:(M0!==Mu.namespaces&&(M0=Mu.namespaces,B0=Mu.enabled(E0)),B0),set:v1=>{V0=v1}}),typeof Mu.init=="function"&&Mu.init(y1),y1}function Su(E0,j0){const M0=Mu(this.namespace+(j0===void 0?":":j0)+E0);return M0.log=this.log,M0}function l0(E0){return E0.toString().substring(2,E0.toString().length-2).replace(/\.\*\?$/,"*")}return Mu.debug=Mu,Mu.default=Mu,Mu.coerce=function(E0){return E0 instanceof Error?E0.stack||E0.message:E0},Mu.disable=function(){const E0=[...Mu.names.map(l0),...Mu.skips.map(l0).map(j0=>"-"+j0)].join(",");return Mu.enable(""),E0},Mu.enable=function(E0){let j0;Mu.save(E0),Mu.namespaces=E0,Mu.names=[],Mu.skips=[];const M0=(typeof E0=="string"?E0:"").split(/[\s,]+/),B0=M0.length;for(j0=0;j0=1.5*F1;return Math.round(y1/F1)+" "+ov+(bv?"s":"")}return Sq=function(y1,v1){v1=v1||{};var F1=typeof y1;if(F1==="string"&&y1.length>0)return function(ov){if(!((ov=String(ov)).length>100)){var bv=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(ov);if(bv){var gv=parseFloat(bv[1]);switch((bv[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*gv;case"weeks":case"week":case"w":return 6048e5*gv;case"days":case"day":case"d":return gv*B0;case"hours":case"hour":case"hrs":case"hr":case"h":return gv*M0;case"minutes":case"minute":case"mins":case"min":case"m":return gv*j0;case"seconds":case"second":case"secs":case"sec":case"s":return gv*E0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return gv;default:return}}}}(y1);if(F1==="number"&&isFinite(y1))return v1.long?function(ov){var bv=Math.abs(ov);return bv>=B0?V0(ov,bv,B0,"day"):bv>=M0?V0(ov,bv,M0,"hour"):bv>=j0?V0(ov,bv,j0,"minute"):bv>=E0?V0(ov,bv,E0,"second"):ov+" ms"}(y1):function(ov){var bv=Math.abs(ov);return bv>=B0?Math.round(ov/B0)+"d":bv>=M0?Math.round(ov/M0)+"h":bv>=j0?Math.round(ov/j0)+"m":bv>=E0?Math.round(ov/E0)+"s":ov+"ms"}(y1);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(y1))}}(),Mu.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(mu).forEach(E0=>{Mu[E0]=mu[E0]}),Mu.names=[],Mu.skips=[],Mu.formatters={},Mu.selectColor=function(E0){let j0=0;for(let M0=0;M0hS(void 0,void 0,void 0,function*(){var _c;kq=ir,_c=yt,tne.push(_c),function(mu){return hS(this,void 0,void 0,function*(){if(!kq||!mu)return;(function(){const E0=tne;tne=XZ,XZ=E0})();const Mu=kq.endsWith("/")?`${kq}debug`:`${kq}/debug`,Su=Object.assign({},mu);if(delete Su.params,mu.params)for(const[E0,j0]of Object.entries(mu.params))Su[E0]=j0;const l0=JSON.stringify(Su);J2.RemoteCommunication(`[sendBufferedEvents] Sending ${XZ.length} analytics events to ${Mu}`);try{const E0=yield $a(Mu,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:l0}),j0=yield E0.text();J2.RemoteCommunication(`[sendBufferedEvents] Response: ${j0}`),XZ.length=0}catch(E0){console.warn("Error sending analytics",E0)}})}(yt).catch(()=>{})});var VO=[],$9=[],Ame=typeof Uint8Array<"u"?Uint8Array:Array,rne=!1;function QZ(){rne=!0;for(var yt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ir=0;ir<64;++ir)VO[ir]=yt[ir],$9[yt.charCodeAt(ir)]=ir;$9[45]=62,$9[95]=63}function nne(yt,ir,_c){for(var mu,Mu,Su=[],l0=ir;l0<_c;l0+=3)mu=(yt[l0]<<16)+(yt[l0+1]<<8)+yt[l0+2],Su.push(VO[(Mu=mu)>>18&63]+VO[Mu>>12&63]+VO[Mu>>6&63]+VO[63&Mu]);return Su.join("")}function Rue(yt){var ir;rne||QZ();for(var _c=yt.length,mu=_c%3,Mu="",Su=[],l0=16383,E0=0,j0=_c-mu;E0j0?j0:E0+l0));return mu===1?(ir=yt[_c-1],Mu+=VO[ir>>2],Mu+=VO[ir<<4&63],Mu+="=="):mu===2&&(ir=(yt[_c-2]<<8)+yt[_c-1],Mu+=VO[ir>>10],Mu+=VO[ir>>4&63],Mu+=VO[ir<<2&63],Mu+="="),Su.push(Mu),Su.join("")}function CR(yt,ir,_c,mu,Mu){var Su,l0,E0=8*Mu-mu-1,j0=(1<>1,B0=-7,V0=_c?Mu-1:0,y1=_c?-1:1,v1=yt[ir+V0];for(V0+=y1,Su=v1&(1<<-B0)-1,v1>>=-B0,B0+=E0;B0>0;Su=256*Su+yt[ir+V0],V0+=y1,B0-=8);for(l0=Su&(1<<-B0)-1,Su>>=-B0,B0+=mu;B0>0;l0=256*l0+yt[ir+V0],V0+=y1,B0-=8);if(Su===0)Su=1-M0;else{if(Su===j0)return l0?NaN:1/0*(v1?-1:1);l0+=Math.pow(2,mu),Su-=M0}return(v1?-1:1)*l0*Math.pow(2,Su-mu)}function ine(yt,ir,_c,mu,Mu,Su){var l0,E0,j0,M0=8*Su-Mu-1,B0=(1<>1,y1=Mu===23?Math.pow(2,-24)-Math.pow(2,-77):0,v1=mu?0:Su-1,F1=mu?1:-1,ov=ir<0||ir===0&&1/ir<0?1:0;for(ir=Math.abs(ir),isNaN(ir)||ir===1/0?(E0=isNaN(ir)?1:0,l0=B0):(l0=Math.floor(Math.log(ir)/Math.LN2),ir*(j0=Math.pow(2,-l0))<1&&(l0--,j0*=2),(ir+=l0+V0>=1?y1/j0:y1*Math.pow(2,1-V0))*j0>=2&&(l0++,j0/=2),l0+V0>=B0?(E0=0,l0=B0):l0+V0>=1?(E0=(ir*j0-1)*Math.pow(2,Mu),l0+=V0):(E0=ir*Math.pow(2,V0-1)*Math.pow(2,Mu),l0=0));Mu>=8;yt[_c+v1]=255&E0,v1+=F1,E0/=256,Mu-=8);for(l0=l0<0;yt[_c+v1]=255&l0,v1+=F1,l0/=256,M0-=8);yt[_c+v1-F1]|=128*ov}var Mue={}.toString,one=Array.isArray||function(yt){return Mue.call(yt)=="[object Array]"};function Cq(){return yw.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function B2(yt,ir){if(Cq()=Cq())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Cq().toString(16)+" bytes");return 0|yt}function pS(yt){return!(yt==null||!yt._isBuffer)}function Iue(yt,ir){if(pS(yt))return yt.length;if(typeof ArrayBuffer<"u"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(yt)||yt instanceof ArrayBuffer))return yt.byteLength;typeof yt!="string"&&(yt=""+yt);var _c=yt.length;if(_c===0)return 0;for(var mu=!1;;)switch(ir){case"ascii":case"latin1":case"binary":return _c;case"utf8":case"utf-8":case void 0:return nJ(yt).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*_c;case"hex":return _c>>>1;case"base64":return Fue(yt).length;default:if(mu)return nJ(yt).length;ir=(""+ir).toLowerCase(),mu=!0}}function sne(yt,ir,_c){var mu=!1;if((ir===void 0||ir<0)&&(ir=0),ir>this.length||((_c===void 0||_c>this.length)&&(_c=this.length),_c<=0)||(_c>>>=0)<=(ir>>>=0))return"";for(yt||(yt="utf8");;)switch(yt){case"hex":return hne(this,ir,_c);case"utf8":case"utf-8":return cne(this,ir,_c);case"ascii":return fne(this,ir,_c);case"latin1":case"binary":return dne(this,ir,_c);case"base64":return kw(this,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return qO(this,ir,_c);default:if(mu)throw new TypeError("Unknown encoding: "+yt);yt=(yt+"").toLowerCase(),mu=!0}}function NB(yt,ir,_c){var mu=yt[ir];yt[ir]=yt[_c],yt[_c]=mu}function Oue(yt,ir,_c,mu,Mu){if(yt.length===0)return-1;if(typeof _c=="string"?(mu=_c,_c=0):_c>2147483647?_c=2147483647:_c<-2147483648&&(_c=-2147483648),_c=+_c,isNaN(_c)&&(_c=Mu?0:yt.length-1),_c<0&&(_c=yt.length+_c),_c>=yt.length){if(Mu)return-1;_c=yt.length-1}else if(_c<0){if(!Mu)return-1;_c=0}if(typeof ir=="string"&&(ir=yw.from(ir,mu)),pS(ir))return ir.length===0?-1:lne(yt,ir,_c,mu,Mu);if(typeof ir=="number")return ir&=255,yw.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?Mu?Uint8Array.prototype.indexOf.call(yt,ir,_c):Uint8Array.prototype.lastIndexOf.call(yt,ir,_c):lne(yt,[ir],_c,mu,Mu);throw new TypeError("val must be string, number or Buffer")}function lne(yt,ir,_c,mu,Mu){var Su,l0=1,E0=yt.length,j0=ir.length;if(mu!==void 0&&((mu=String(mu).toLowerCase())==="ucs2"||mu==="ucs-2"||mu==="utf16le"||mu==="utf-16le")){if(yt.length<2||ir.length<2)return-1;l0=2,E0/=2,j0/=2,_c/=2}function M0(v1,F1){return l0===1?v1[F1]:v1.readUInt16BE(F1*l0)}if(Mu){var B0=-1;for(Su=_c;SuE0&&(_c=E0-j0),Su=_c;Su>=0;Su--){for(var V0=!0,y1=0;y1Mu&&(mu=Mu):mu=Mu;var Su=ir.length;if(Su%2!=0)throw new TypeError("Invalid hex string");mu>Su/2&&(mu=Su/2);for(var l0=0;l0>8,j0=l0%256,M0.push(j0),M0.push(E0);return M0}(ir,yt.length-_c),yt,_c,mu)}function kw(yt,ir,_c){return ir===0&&_c===yt.length?Rue(yt):Rue(yt.slice(ir,_c))}function cne(yt,ir,_c){_c=Math.min(yt.length,_c);for(var mu=[],Mu=ir;Mu<_c;){var Su,l0,E0,j0,M0=yt[Mu],B0=null,V0=M0>239?4:M0>223?3:M0>191?2:1;if(Mu+V0<=_c)switch(V0){case 1:M0<128&&(B0=M0);break;case 2:(192&(Su=yt[Mu+1]))==128&&(j0=(31&M0)<<6|63&Su)>127&&(B0=j0);break;case 3:Su=yt[Mu+1],l0=yt[Mu+2],(192&Su)==128&&(192&l0)==128&&(j0=(15&M0)<<12|(63&Su)<<6|63&l0)>2047&&(j0<55296||j0>57343)&&(B0=j0);break;case 4:Su=yt[Mu+1],l0=yt[Mu+2],E0=yt[Mu+3],(192&Su)==128&&(192&l0)==128&&(192&E0)==128&&(j0=(15&M0)<<18|(63&Su)<<12|(63&l0)<<6|63&E0)>65535&&j0<1114112&&(B0=j0)}B0===null?(B0=65533,V0=1):B0>65535&&(B0-=65536,mu.push(B0>>>10&1023|55296),B0=56320|1023&B0),mu.push(B0),Mu+=V0}return function(y1){var v1=y1.length;if(v1<=une)return String.fromCharCode.apply(String,y1);for(var F1="",ov=0;ov0&&(yt=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(yt+=" ... ")),""},yw.prototype.compare=function(yt,ir,_c,mu,Mu){if(!pS(yt))throw new TypeError("Argument must be a Buffer");if(ir===void 0&&(ir=0),_c===void 0&&(_c=yt?yt.length:0),mu===void 0&&(mu=0),Mu===void 0&&(Mu=this.length),ir<0||_c>yt.length||mu<0||Mu>this.length)throw new RangeError("out of range index");if(mu>=Mu&&ir>=_c)return 0;if(mu>=Mu)return-1;if(ir>=_c)return 1;if(this===yt)return 0;for(var Su=(Mu>>>=0)-(mu>>>=0),l0=(_c>>>=0)-(ir>>>=0),E0=Math.min(Su,l0),j0=this.slice(mu,Mu),M0=yt.slice(ir,_c),B0=0;B0Mu)&&(_c=Mu),yt.length>0&&(_c<0||ir<0)||ir>this.length)throw new RangeError("Attempt to write outside buffer bounds");mu||(mu="utf8");for(var Su=!1;;)switch(mu){case"hex":return tJ(this,yt,ir,_c);case"utf8":case"utf-8":return Pue(this,yt,ir,_c);case"ascii":return jue(this,yt,ir,_c);case"latin1":case"binary":return Nue(this,yt,ir,_c);case"base64":return rJ(this,yt,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return DN(this,yt,ir,_c);default:if(Su)throw new TypeError("Unknown encoding: "+mu);mu=(""+mu).toLowerCase(),Su=!0}},yw.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var une=4096;function fne(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(127&yt[Mu]);return mu}function dne(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(yt[Mu]);return mu}function hne(yt,ir,_c){var mu=yt.length;(!ir||ir<0)&&(ir=0),(!_c||_c<0||_c>mu)&&(_c=mu);for(var Mu="",Su=ir;Su<_c;++Su)Mu+=_me(yt[Su]);return Mu}function qO(yt,ir,_c){for(var mu=yt.slice(ir,_c),Mu="",Su=0;Su_c)throw new RangeError("Trying to access beyond buffer length")}function sT(yt,ir,_c,mu,Mu,Su){if(!pS(yt))throw new TypeError('"buffer" argument must be a Buffer instance');if(ir>Mu||iryt.length)throw new RangeError("Index out of range")}function WO(yt,ir,_c,mu){ir<0&&(ir=65535+ir+1);for(var Mu=0,Su=Math.min(yt.length-_c,2);Mu>>8*(mu?Mu:1-Mu)}function Rq(yt,ir,_c,mu){ir<0&&(ir=4294967295+ir+1);for(var Mu=0,Su=Math.min(yt.length-_c,4);Mu>>8*(mu?Mu:3-Mu)&255}function pne(yt,ir,_c,mu,Mu,Su){if(_c+mu>yt.length)throw new RangeError("Index out of range");if(_c<0)throw new RangeError("Index out of range")}function Lue(yt,ir,_c,mu,Mu){return Mu||pne(yt,0,_c,4),ine(yt,ir,_c,mu,23,4),_c+4}function Bue(yt,ir,_c,mu,Mu){return Mu||pne(yt,0,_c,8),ine(yt,ir,_c,mu,52,8),_c+8}yw.prototype.slice=function(yt,ir){var _c,mu=this.length;if((yt=~~yt)<0?(yt+=mu)<0&&(yt=0):yt>mu&&(yt=mu),(ir=ir===void 0?mu:~~ir)<0?(ir+=mu)<0&&(ir=0):ir>mu&&(ir=mu),ir0&&(Mu*=256);)mu+=this[yt+--ir]*Mu;return mu},yw.prototype.readUInt8=function(yt,ir){return ir||q6(yt,1,this.length),this[yt]},yw.prototype.readUInt16LE=function(yt,ir){return ir||q6(yt,2,this.length),this[yt]|this[yt+1]<<8},yw.prototype.readUInt16BE=function(yt,ir){return ir||q6(yt,2,this.length),this[yt]<<8|this[yt+1]},yw.prototype.readUInt32LE=function(yt,ir){return ir||q6(yt,4,this.length),(this[yt]|this[yt+1]<<8|this[yt+2]<<16)+16777216*this[yt+3]},yw.prototype.readUInt32BE=function(yt,ir){return ir||q6(yt,4,this.length),16777216*this[yt]+(this[yt+1]<<16|this[yt+2]<<8|this[yt+3])},yw.prototype.readIntLE=function(yt,ir,_c){yt|=0,ir|=0,_c||q6(yt,ir,this.length);for(var mu=this[yt],Mu=1,Su=0;++Su=(Mu*=128)&&(mu-=Math.pow(2,8*ir)),mu},yw.prototype.readIntBE=function(yt,ir,_c){yt|=0,ir|=0,_c||q6(yt,ir,this.length);for(var mu=ir,Mu=1,Su=this[yt+--mu];mu>0&&(Mu*=256);)Su+=this[yt+--mu]*Mu;return Su>=(Mu*=128)&&(Su-=Math.pow(2,8*ir)),Su},yw.prototype.readInt8=function(yt,ir){return ir||q6(yt,1,this.length),128&this[yt]?-1*(255-this[yt]+1):this[yt]},yw.prototype.readInt16LE=function(yt,ir){ir||q6(yt,2,this.length);var _c=this[yt]|this[yt+1]<<8;return 32768&_c?4294901760|_c:_c},yw.prototype.readInt16BE=function(yt,ir){ir||q6(yt,2,this.length);var _c=this[yt+1]|this[yt]<<8;return 32768&_c?4294901760|_c:_c},yw.prototype.readInt32LE=function(yt,ir){return ir||q6(yt,4,this.length),this[yt]|this[yt+1]<<8|this[yt+2]<<16|this[yt+3]<<24},yw.prototype.readInt32BE=function(yt,ir){return ir||q6(yt,4,this.length),this[yt]<<24|this[yt+1]<<16|this[yt+2]<<8|this[yt+3]},yw.prototype.readFloatLE=function(yt,ir){return ir||q6(yt,4,this.length),CR(this,yt,!0,23,4)},yw.prototype.readFloatBE=function(yt,ir){return ir||q6(yt,4,this.length),CR(this,yt,!1,23,4)},yw.prototype.readDoubleLE=function(yt,ir){return ir||q6(yt,8,this.length),CR(this,yt,!0,52,8)},yw.prototype.readDoubleBE=function(yt,ir){return ir||q6(yt,8,this.length),CR(this,yt,!1,52,8)},yw.prototype.writeUIntLE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||sT(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=1,Su=0;for(this[ir]=255&yt;++Su<_c&&(Mu*=256);)this[ir+Su]=yt/Mu&255;return ir+_c},yw.prototype.writeUIntBE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||sT(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=_c-1,Su=1;for(this[ir+Mu]=255&yt;--Mu>=0&&(Su*=256);)this[ir+Mu]=yt/Su&255;return ir+_c},yw.prototype.writeUInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,1,255,0),yw.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),this[ir]=255&yt,ir+1},yw.prototype.writeUInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,65535,0),yw.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):WO(this,yt,ir,!0),ir+2},yw.prototype.writeUInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,65535,0),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):WO(this,yt,ir,!1),ir+2},yw.prototype.writeUInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,4294967295,0),yw.TYPED_ARRAY_SUPPORT?(this[ir+3]=yt>>>24,this[ir+2]=yt>>>16,this[ir+1]=yt>>>8,this[ir]=255&yt):Rq(this,yt,ir,!0),ir+4},yw.prototype.writeUInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,4294967295,0),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):Rq(this,yt,ir,!1),ir+4},yw.prototype.writeIntLE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);sT(this,yt,ir,_c,Mu-1,-Mu)}var Su=0,l0=1,E0=0;for(this[ir]=255&yt;++Su<_c&&(l0*=256);)yt<0&&E0===0&&this[ir+Su-1]!==0&&(E0=1),this[ir+Su]=(yt/l0>>0)-E0&255;return ir+_c},yw.prototype.writeIntBE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);sT(this,yt,ir,_c,Mu-1,-Mu)}var Su=_c-1,l0=1,E0=0;for(this[ir+Su]=255&yt;--Su>=0&&(l0*=256);)yt<0&&E0===0&&this[ir+Su+1]!==0&&(E0=1),this[ir+Su]=(yt/l0>>0)-E0&255;return ir+_c},yw.prototype.writeInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,1,127,-128),yw.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),yt<0&&(yt=255+yt+1),this[ir]=255&yt,ir+1},yw.prototype.writeInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,32767,-32768),yw.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):WO(this,yt,ir,!0),ir+2},yw.prototype.writeInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,32767,-32768),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):WO(this,yt,ir,!1),ir+2},yw.prototype.writeInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,2147483647,-2147483648),yw.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8,this[ir+2]=yt>>>16,this[ir+3]=yt>>>24):Rq(this,yt,ir,!0),ir+4},yw.prototype.writeInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,2147483647,-2147483648),yt<0&&(yt=4294967295+yt+1),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):Rq(this,yt,ir,!1),ir+4},yw.prototype.writeFloatLE=function(yt,ir,_c){return Lue(this,yt,ir,!0,_c)},yw.prototype.writeFloatBE=function(yt,ir,_c){return Lue(this,yt,ir,!1,_c)},yw.prototype.writeDoubleLE=function(yt,ir,_c){return Bue(this,yt,ir,!0,_c)},yw.prototype.writeDoubleBE=function(yt,ir,_c){return Bue(this,yt,ir,!1,_c)},yw.prototype.copy=function(yt,ir,_c,mu){if(_c||(_c=0),mu||mu===0||(mu=this.length),ir>=yt.length&&(ir=yt.length),ir||(ir=0),mu>0&&mu<_c&&(mu=_c),mu===_c||yt.length===0||this.length===0)return 0;if(ir<0)throw new RangeError("targetStart out of bounds");if(_c<0||_c>=this.length)throw new RangeError("sourceStart out of bounds");if(mu<0)throw new RangeError("sourceEnd out of bounds");mu>this.length&&(mu=this.length),yt.length-ir=0;--Mu)yt[Mu+ir]=this[Mu+_c];else if(Su<1e3||!yw.TYPED_ARRAY_SUPPORT)for(Mu=0;Mu>>=0,_c=_c===void 0?this.length:_c>>>0,yt||(yt=0),typeof yt=="number")for(Su=ir;Su<_c;++Su)this[Su]=yt;else{var l0=pS(yt)?yt:nJ(new yw(yt,mu).toString()),E0=l0.length;for(Su=0;Su<_c-ir;++Su)this[Su+ir]=l0[Su%E0]}return this};var Due=/[^+\/0-9A-Za-z-_]/g;function _me(yt){return yt<16?"0"+yt.toString(16):yt.toString(16)}function nJ(yt,ir){var _c;ir=ir||1/0;for(var mu=yt.length,Mu=null,Su=[],l0=0;l055295&&_c<57344){if(!Mu){if(_c>56319){(ir-=3)>-1&&Su.push(239,191,189);continue}if(l0+1===mu){(ir-=3)>-1&&Su.push(239,191,189);continue}Mu=_c;continue}if(_c<56320){(ir-=3)>-1&&Su.push(239,191,189),Mu=_c;continue}_c=65536+(Mu-55296<<10|_c-56320)}else Mu&&(ir-=3)>-1&&Su.push(239,191,189);if(Mu=null,_c<128){if((ir-=1)<0)break;Su.push(_c)}else if(_c<2048){if((ir-=2)<0)break;Su.push(_c>>6|192,63&_c|128)}else if(_c<65536){if((ir-=3)<0)break;Su.push(_c>>12|224,_c>>6&63|128,63&_c|128)}else{if(!(_c<1114112))throw new Error("Invalid code point");if((ir-=4)<0)break;Su.push(_c>>18|240,_c>>12&63|128,_c>>6&63|128,63&_c|128)}}return Su}function Fue(yt){return function(ir){var _c,mu,Mu,Su,l0,E0;rne||QZ();var j0=ir.length;if(j0%4>0)throw new Error("Invalid string. Length must be a multiple of 4");l0=ir[j0-2]==="="?2:ir[j0-1]==="="?1:0,E0=new Ame(3*j0/4-l0),Mu=l0>0?j0-4:j0;var M0=0;for(_c=0,mu=0;_c>16&255,E0[M0++]=Su>>8&255,E0[M0++]=255&Su;return l0===2?(Su=$9[ir.charCodeAt(_c)]<<2|$9[ir.charCodeAt(_c+1)]>>4,E0[M0++]=255&Su):l0===1&&(Su=$9[ir.charCodeAt(_c)]<<10|$9[ir.charCodeAt(_c+1)]<<4|$9[ir.charCodeAt(_c+2)]>>2,E0[M0++]=Su>>8&255,E0[M0++]=255&Su),E0}(function(ir){if((ir=function(_c){return _c.trim?_c.trim():_c.replace(/^\s+|\s+$/g,"")}(ir).replace(Due,"")).length<2)return"";for(;ir.length%4!=0;)ir+="=";return ir}(yt))}function iJ(yt,ir,_c,mu){for(var Mu=0;Mu=ir.length||Mu>=yt.length);++Mu)ir[Mu+_c]=yt[Mu];return Mu}function mne(yt){return!!yt.constructor&&typeof yt.constructor.isBuffer=="function"&&yt.constructor.isBuffer(yt)}class oJ{constructor(ir){this.enabled=!0,ir!=null&&ir.debug&&v5.enable("Ecies:Layer"),ir!=null&&ir.privateKey?this.ecies=Nw.PrivateKey.fromHex(ir.privateKey):this.ecies=new Nw.PrivateKey,J2.Ecies("[ECIES constructor()] initialized secret: ",this.ecies.toHex()),J2.Ecies("[ECIES constructor()] initialized public: ",this.ecies.publicKey.toHex()),J2.Ecies("[ECIES constructor()] init with",this)}generateECIES(){this.ecies=new Nw.PrivateKey}getPublicKey(){return this.ecies.publicKey.toHex()}encrypt(ir,_c){let mu=ir;if(this.enabled)try{J2.Ecies("[ECIES: encrypt()] using otherPublicKey",_c);const Mu=yw.from(ir),Su=Nw.encrypt(_c,Mu);mu=yw.from(Su).toString("base64")}catch(Mu){throw J2.Ecies("[ECIES: encrypt()] error encrypt:",Mu),J2.Ecies("[ECIES: encrypt()] private: ",this.ecies.toHex()),J2.Ecies("[ECIES: encrypt()] data: ",ir),J2.Ecies("[ECIES: encrypt()] otherkey: ",_c),Mu}return mu}decrypt(ir){let _c=ir;if(this.enabled)try{J2.Ecies("[ECIES: decrypt()] using privateKey",this.ecies.toHex());const mu=yw.from(ir.toString(),"base64");_c=Nw.decrypt(this.ecies.toHex(),mu).toString()}catch(mu){throw J2.Ecies("[ECIES: decrypt()] error decrypt",mu),J2.Ecies("[ECIES: decrypt()] private: ",this.ecies.toHex()),J2.Ecies("[ECIES: decrypt()] encryptedData: ",ir),mu}return _c}getKeyInfo(){return{private:this.ecies.toHex(),public:this.ecies.publicKey.toHex()}}toString(){J2.Ecies("[ECIES: toString()]",this.getKeyInfo())}}var eU="0.20.4";const LB="https://metamask-sdk.api.cx.metamask.io/",Sme=["websocket"],aJ=6048e5,M7="eth_requestAccounts";function uC(yt){const{context:ir}=yt;J2.RemoteCommunication(`[RemoteCommunication: clean()] context=${ir}`),yt.channelConfig=void 0,yt.ready=!1,yt.originatorConnectStarted=!1}var tU,yA;o.ConnectionStatus=void 0,o.EventType=void 0,o.MessageType=void 0,function(yt){yt.DISCONNECTED="disconnected",yt.WAITING="waiting",yt.TIMEOUT="timeout",yt.LINKED="linked",yt.PAUSED="paused",yt.TERMINATED="terminated"}(o.ConnectionStatus||(o.ConnectionStatus={})),function(yt){yt.KEY_INFO="key_info",yt.SERVICE_STATUS="service_status",yt.PROVIDER_UPDATE="provider_update",yt.RPC_UPDATE="rpc_update",yt.KEYS_EXCHANGED="keys_exchanged",yt.JOIN_CHANNEL="join_channel",yt.CHANNEL_CREATED="channel_created",yt.CLIENTS_CONNECTED="clients_connected",yt.CLIENTS_DISCONNECTED="clients_disconnected",yt.CLIENTS_WAITING="clients_waiting",yt.CLIENTS_READY="clients_ready",yt.CHANNEL_PERSISTENCE="channel_persistence",yt.MESSAGE_ACK="ack",yt.SOCKET_DISCONNECTED="socket_disconnected",yt.SOCKET_RECONNECT="socket_reconnect",yt.OTP="otp",yt.SDK_RPC_CALL="sdk_rpc_call",yt.AUTHORIZED="authorized",yt.CONNECTION_STATUS="connection_status",yt.MESSAGE="message",yt.TERMINATE="terminate"}(o.EventType||(o.EventType={})),function(yt){yt.KEY_EXCHANGE="key_exchange"}(tU||(tU={})),function(yt){yt.KEY_HANDSHAKE_START="key_handshake_start",yt.KEY_HANDSHAKE_CHECK="key_handshake_check",yt.KEY_HANDSHAKE_SYN="key_handshake_SYN",yt.KEY_HANDSHAKE_SYNACK="key_handshake_SYNACK",yt.KEY_HANDSHAKE_ACK="key_handshake_ACK",yt.KEY_HANDSHAKE_NONE="none"}(yA||(yA={}));class Uue extends PH.EventEmitter2{constructor({communicationLayer:ir,otherPublicKey:_c,context:mu,ecies:Mu,logging:Su}){super(),this.keysExchanged=!1,this.step=yA.KEY_HANDSHAKE_NONE,this.debug=!1,this.context=mu,this.communicationLayer=ir,Mu!=null&&Mu.privateKey&&_c&&(J2.KeyExchange(`[KeyExchange: constructor()] otherPubKey=${_c} set keysExchanged to true!`,Mu),this.keysExchanged=!0),this.myECIES=new oJ(Object.assign(Object.assign({},Mu),{debug:Su==null?void 0:Su.eciesLayer})),this.myPublicKey=this.myECIES.getPublicKey(),this.debug=(Su==null?void 0:Su.keyExchangeLayer)===!0,_c&&this.setOtherPublicKey(_c),this.communicationLayer.on(tU.KEY_EXCHANGE,this.onKeyExchangeMessage.bind(this))}onKeyExchangeMessage(ir){const{relayPersistence:_c}=this.communicationLayer.remote.state;if(J2.KeyExchange(`[KeyExchange: onKeyExchangeMessage()] context=${this.context} keysExchanged=${this.keysExchanged} relayPersistence=${_c}`,ir),_c)return void J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] Ignoring key exchange message because relay persistence is activated");const{message:mu}=ir;this.keysExchanged&&J2.KeyExchange(`[KeyExchange: onKeyExchangeMessage()] context=${this.context} received handshake while already exchanged. step=${this.step} otherPubKey=${this.otherPublicKey}`),this.emit(o.EventType.KEY_INFO,mu.type),mu.type===yA.KEY_HANDSHAKE_SYN?(this.checkStep([yA.KEY_HANDSHAKE_NONE,yA.KEY_HANDSHAKE_ACK]),J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] KEY_HANDSHAKE_SYN",mu),mu.pubkey&&this.setOtherPublicKey(mu.pubkey),this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_SYNACK,pubkey:this.myPublicKey}),this.setStep(yA.KEY_HANDSHAKE_ACK)):mu.type===yA.KEY_HANDSHAKE_SYNACK?(this.checkStep([yA.KEY_HANDSHAKE_SYNACK,yA.KEY_HANDSHAKE_ACK,yA.KEY_HANDSHAKE_NONE]),J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] KEY_HANDSHAKE_SYNACK"),mu.pubkey&&this.setOtherPublicKey(mu.pubkey),this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_ACK}),this.keysExchanged=!0,this.setStep(yA.KEY_HANDSHAKE_ACK),this.emit(o.EventType.KEYS_EXCHANGED)):mu.type===yA.KEY_HANDSHAKE_ACK&&(J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] KEY_HANDSHAKE_ACK set keysExchanged to true!"),this.checkStep([yA.KEY_HANDSHAKE_ACK,yA.KEY_HANDSHAKE_NONE]),this.keysExchanged=!0,this.setStep(yA.KEY_HANDSHAKE_ACK),this.emit(o.EventType.KEYS_EXCHANGED))}resetKeys(ir){this.clean(),this.myECIES=new oJ(ir)}clean(){J2.KeyExchange(`[KeyExchange: clean()] context=${this.context} reset handshake state`),this.setStep(yA.KEY_HANDSHAKE_NONE),this.emit(o.EventType.KEY_INFO,this.step),this.keysExchanged=!1}start({isOriginator:ir,force:_c}){const{relayPersistence:mu,protocolVersion:Mu}=this.communicationLayer.remote.state,Su=Mu>=2;if(mu)return J2.KeyExchange("[KeyExchange: start()] Ignoring key exchange message because relay persistence is activated"),void console.log(`[KeyExchange: start()] relayPersistence=${mu}`);J2.KeyExchange(`[KeyExchange: start()] context=${this.context} protocolVersion=${Mu} isOriginator=${ir} step=${this.step} force=${_c} relayPersistence=${mu} keysExchanged=${this.keysExchanged}`),ir?!(this.keysExchanged||this.step!==yA.KEY_HANDSHAKE_NONE&&this.step!==yA.KEY_HANDSHAKE_SYNACK)||_c?(J2.KeyExchange(`[KeyExchange: start()] context=${this.context} -- start key exchange (force=${_c}) -- step=${this.step}`,this.step),this.clean(),this.setStep(yA.KEY_HANDSHAKE_SYNACK),this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_SYN,pubkey:this.myPublicKey,v:2})):J2.KeyExchange(`[KeyExchange: start()] context=${this.context} -- key exchange already ${this.keysExchanged?"done":"in progress"} -- aborted.`,this.step):this.keysExchanged&&_c!==!0?J2.KeyExchange("[KeyExchange: start()] don't send KEY_HANDSHAKE_START -- exchange already done."):Su?this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_SYNACK,pubkey:this.myPublicKey,v:2}):(this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_START}),this.clean())}setStep(ir){this.step=ir,this.emit(o.EventType.KEY_INFO,ir)}checkStep(ir){ir.length>0&&ir.indexOf(this.step.toString())===-1&&console.warn(`[KeyExchange: checkStep()] Wrong Step "${this.step}" not within ${ir}`)}setRelayPersistence({localKey:ir,otherKey:_c}){this.otherPublicKey=_c,this.myECIES=new oJ({privateKey:ir,debug:this.debug}),this.keysExchanged=!0}setKeysExchanged(ir){this.keysExchanged=ir}areKeysExchanged(){return this.keysExchanged}getMyPublicKey(){return this.myPublicKey}getOtherPublicKey(){return this.otherPublicKey}setOtherPublicKey(ir){J2.KeyExchange("[KeyExchange: setOtherPubKey()]",ir),this.otherPublicKey=ir}encryptMessage(ir){if(!this.otherPublicKey)throw new Error("encryptMessage: Keys not exchanged - missing otherPubKey");return this.myECIES.encrypt(ir,this.otherPublicKey)}decryptMessage(ir){if(!this.otherPublicKey)throw new Error("decryptMessage: Keys not exchanged - missing otherPubKey");return this.myECIES.decrypt(ir)}getKeyInfo(){return{ecies:Object.assign(Object.assign({},this.myECIES.getKeyInfo()),{otherPubKey:this.otherPublicKey}),step:this.step,keysExchanged:this.areKeysExchanged()}}toString(){const ir={keyInfo:this.getKeyInfo(),keysExchanged:this.keysExchanged,step:this.step};return JSON.stringify(ir)}}(function(yt){yt.TERMINATE="terminate",yt.ANSWER="answer",yt.OFFER="offer",yt.CANDIDATE="candidate",yt.JSONRPC="jsonrpc",yt.WALLET_INFO="wallet_info",yt.ORIGINATOR_INFO="originator_info",yt.PAUSE="pause",yt.OTP="otp",yt.AUTHORIZED="authorized",yt.PING="ping",yt.READY="ready"})(o.MessageType||(o.MessageType={}));const UH=yt=>new Promise(ir=>{setTimeout(ir,yt)}),gne=(yt,ir,_c=200)=>hS(void 0,void 0,void 0,function*(){let mu;const Mu=Date.now();let Su=!1;for(;!Su;){if(Su=Date.now()-Mu>3e5,mu=ir[yt],mu.elapsedTime!==void 0)return mu;yield UH(_c)}throw new Error(`RPC ${yt} timed out`)}),zue=yt=>hS(void 0,void 0,void 0,function*(){var ir,_c,mu,Mu,Su;return yt.remote.state.terminated?(J2.SocketService(`[SocketService: reconnectSocket()] instance.remote.state.terminated=${yt.remote.state.terminated} socket already terminated`,yt),!1):(J2.SocketService(`[SocketService: reconnectSocket()] instance.state.socket?.connected=${(ir=yt.state.socket)===null||ir===void 0?void 0:ir.connected} trying to reconnect after socketio disconnection`,yt),yield UH(200),!((_c=yt.state.socket)===null||_c===void 0)&&_c.connected||(yt.state.resumed=!0,(mu=yt.state.socket)===null||mu===void 0||mu.connect(),yt.emit(o.EventType.SOCKET_RECONNECT),(Mu=yt.state.socket)===null||Mu===void 0||Mu.emit(o.EventType.JOIN_CHANNEL,{channelId:yt.state.channelId,context:`${yt.state.context}connect_again`,clientType:yt.state.isOriginator?"dapp":"wallet"})),yield UH(100),(Su=yt.state.socket)===null||Su===void 0?void 0:Su.connected)});var W6,FN;(function(yt){yt.REQUEST="sdk_connect_request_started",yt.REQUEST_MOBILE="sdk_connect_request_started_mobile",yt.RECONNECT="sdk_reconnect_request_started",yt.CONNECTED="sdk_connection_established",yt.CONNECTED_MOBILE="sdk_connection_established_mobile",yt.AUTHORIZED="sdk_connection_authorized",yt.REJECTED="sdk_connection_rejected",yt.TERMINATED="sdk_connection_terminated",yt.DISCONNECTED="sdk_disconnected",yt.SDK_USE_EXTENSION="sdk_use_extension",yt.SDK_RPC_REQUEST="sdk_rpc_request",yt.SDK_RPC_REQUEST_RECEIVED="sdk_rpc_request_received",yt.SDK_RPC_REQUEST_DONE="sdk_rpc_request_done",yt.SDK_EXTENSION_UTILIZED="sdk_extension_utilized",yt.SDK_USE_INAPP_BROWSER="sdk_use_inapp_browser"})(W6||(W6={})),function(yt){yt.RPC_CHECK="rpcCheck",yt.SKIPPED_RPC="skippedRpc"}(FN||(FN={}));const vne=["eth_sendTransaction","eth_signTypedData","eth_signTransaction","personal_sign","wallet_requestPermissions","wallet_switchEthereumChain","eth_signTypedData_v3","eth_signTypedData_v4","metamask_connectSign","metamask_connectWith","metamask_batch"].map(yt=>yt.toLowerCase());function sJ(yt,ir){var _c,mu,Mu,Su;if(!yt.state.channelId)throw new Error("Create a channel first");J2.SocketService(`[SocketService: handleSendMessage()] context=${yt.state.context} areKeysExchanged=${(_c=yt.state.keyExchange)===null||_c===void 0?void 0:_c.areKeysExchanged()}`,ir),!((mu=ir==null?void 0:ir.type)===null||mu===void 0)&&mu.startsWith("key_handshake")?function(l0,E0){var j0;J2.SocketService(`[SocketService: handleKeyHandshake()] context=${l0.state.context}`,E0),(j0=l0.state.socket)===null||j0===void 0||j0.emit(o.EventType.MESSAGE,{id:l0.state.channelId,context:l0.state.context,clientType:l0.state.isOriginator?"dapp":"wallet",message:E0})}(yt,ir):(function(l0,E0){var j0;if(!(!((j0=l0.state.keyExchange)===null||j0===void 0)&&j0.areKeysExchanged())&&!l0.remote.state.relayPersistence)throw J2.SocketService(`[SocketService: validateKeyExchange()] context=${l0.state.context} ERROR keys not exchanged`,E0),console.error("[SocketService: validateKeyExchange()] ERROR keys not exchanged",E0),new Error("Keys not exchanged BBB")}(yt,ir),function(l0,E0){var j0;const M0=(j0=E0==null?void 0:E0.method)!==null&&j0!==void 0?j0:"",B0=E0==null?void 0:E0.id;l0.state.isOriginator&&B0&&(l0.state.rpcMethodTracker[B0]={id:B0,timestamp:Date.now(),method:M0},l0.emit(o.EventType.RPC_UPDATE,l0.state.rpcMethodTracker[B0]))}(yt,ir),function(l0,E0){var j0,M0;const B0=(j0=l0.state.keyExchange)===null||j0===void 0?void 0:j0.encryptMessage(JSON.stringify(E0)),V0={id:l0.state.channelId,context:l0.state.context,clientType:l0.state.isOriginator?"dapp":"wallet",message:B0,plaintext:l0.state.hasPlaintext?JSON.stringify(E0):void 0};J2.SocketService(`[SocketService: encryptAndSendMessage()] context=${l0.state.context}`,V0),E0.type===o.MessageType.TERMINATE&&(l0.state.manualDisconnect=!0),(M0=l0.state.socket)===null||M0===void 0||M0.emit(o.EventType.MESSAGE,V0)}(yt,ir),yt.remote.state.analytics&&yt.remote.state.isOriginator&&ir.method&&vne.includes(ir.method.toLowerCase())&&FH({id:(Mu=yt.remote.state.channelId)!==null&&Mu!==void 0?Mu:"",event:W6.SDK_RPC_REQUEST,sdkVersion:yt.remote.state.sdkVersion,commLayerVersion:eU,walletVersion:(Su=yt.remote.state.walletInfo)===null||Su===void 0?void 0:Su.version,params:{method:ir.method,from:"mobile"}},yt.remote.state.communicationServerUrl).catch(l0=>{console.error("Cannot send analytics",l0)}),function(l0,E0){var j0;return hS(this,void 0,void 0,function*(){const M0=E0==null?void 0:E0.id,B0=(j0=E0==null?void 0:E0.method)!==null&&j0!==void 0?j0:"";if(l0.state.isOriginator&&M0)try{const V0=gne(M0,l0.state.rpcMethodTracker,200).then(F1=>({type:FN.RPC_CHECK,result:F1})),y1=hS(this,void 0,void 0,function*(){const F1=yield(({rpcId:bv,instance:gv})=>hS(void 0,void 0,void 0,function*(){for(;gv.state.lastRpcId===bv||gv.state.lastRpcId===void 0;)yield UH(200);return gv.state.lastRpcId}))({instance:l0,rpcId:M0}),ov=yield gne(F1,l0.state.rpcMethodTracker,200);return{type:FN.SKIPPED_RPC,result:ov}}),v1=yield Promise.race([V0,y1]);if(v1.type===FN.RPC_CHECK){const F1=v1.result;J2.SocketService(`[SocketService:handleRpcReplies()] id=${E0.id} ${B0} ( ${F1.elapsedTime} ms)`,F1.result)}else{if(v1.type!==FN.SKIPPED_RPC)throw new Error(`Error handling RPC replies for ${M0}`);{const{result:F1}=v1;console.warn(`[SocketService handleRpcReplies()] RPC METHOD HAS BEEN SKIPPED rpcid=${M0} method=${B0}`,F1);const ov=Object.assign(Object.assign({},l0.state.rpcMethodTracker[M0]),{error:new Error("SDK_CONNECTION_ISSUE")});l0.emit(o.EventType.RPC_UPDATE,ov);const bv={data:Object.assign(Object.assign({},ov),{jsonrpc:"2.0"}),name:"metamask-provider"};l0.emit(o.EventType.MESSAGE,{message:bv})}}}catch(V0){throw console.warn(`[SocketService handleRpcReplies()] Error rpcId=${E0.id} ${B0}`,V0),V0}})}(yt,ir).catch(l0=>{console.warn("Error handleRpcReplies",l0)}))}const Hue=[{event:"clients_connected",handler:function(yt,ir){return _c=>hS(this,void 0,void 0,function*(){var mu,Mu,Su,l0,E0,j0,M0,B0,V0,y1,v1;const F1=(Mu=(mu=yt.remote.state.channelConfig)===null||mu===void 0?void 0:mu.relayPersistence)!==null&&Mu!==void 0&Μif(J2.SocketService(`[SocketService: handleClientsConnected()] context=${yt.state.context} on 'clients_connected-${ir}' relayPersistence=${F1} resumed=${yt.state.resumed} clientsPaused=${yt.state.clientsPaused} keysExchanged=${(Su=yt.state.keyExchange)===null||Su===void 0?void 0:Su.areKeysExchanged()} isOriginator=${yt.state.isOriginator}`),yt.emit(o.EventType.CLIENTS_CONNECTED,{isOriginator:yt.state.isOriginator,keysExchanged:(l0=yt.state.keyExchange)===null||l0===void 0?void 0:l0.areKeysExchanged(),context:yt.state.context}),yt.state.resumed)yt.state.isOriginator||(J2.SocketService(`[SocketService: handleClientsConnected()] context=${yt.state.context} 'clients_connected' / keysExchanged=${(E0=yt.state.keyExchange)===null||E0===void 0?void 0:E0.areKeysExchanged()} -- backward compatibility`),(j0=yt.state.keyExchange)===null||j0===void 0||j0.start({isOriginator:(M0=yt.state.isOriginator)!==null&&M0!==void 0&&M0})),yt.state.resumed=!1;else if(yt.state.clientsPaused)J2.SocketService("[SocketService: handleClientsConnected()] 'clients_connected' skip sending originatorInfo on pause");else if(!yt.state.isOriginator){const ov=!F1;console.log(`[SocketService: handleClientsConnected()] context=${yt.state.context} on 'clients_connected' / keysExchanged=${(B0=yt.state.keyExchange)===null||B0===void 0?void 0:B0.areKeysExchanged()} -- force=${ov} -- backward compatibility`),J2.SocketService(`[SocketService: handleClientsConnected()] context=${yt.state.context} on 'clients_connected' / keysExchanged=${(V0=yt.state.keyExchange)===null||V0===void 0?void 0:V0.areKeysExchanged()} -- force=${ov} -- backward compatibility`),(y1=yt.state.keyExchange)===null||y1===void 0||y1.start({isOriginator:(v1=yt.state.isOriginator)!==null&&v1!==void 0&&v1,force:ov})}yt.state.clientsConnected=!0,yt.state.clientsPaused=!1})}},{event:"channel_created",handler:function(yt,ir){return _c=>{J2.SocketService(`[SocketService: handleChannelCreated()] context=${yt.state.context} on 'channel_created-${ir}'`,_c),yt.emit(o.EventType.CHANNEL_CREATED,_c)}}},{event:"clients_disconnected",handler:function(yt,ir){return()=>{var _c;yt.state.clientsConnected=!1,J2.SocketService(`[SocketService: handlesClientsDisconnected()] context=${yt.state.context} on 'clients_disconnected-${ir}'`),yt.remote.state.relayPersistence?J2.SocketService(`[SocketService: handlesClientsDisconnected()] context=${yt.state.context} on 'clients_disconnected-${ir}' - relayPersistence enabled, skipping key exchange cleanup.`):(yt.state.isOriginator&&!yt.state.clientsPaused&&((_c=yt.state.keyExchange)===null||_c===void 0||_c.clean()),yt.emit(o.EventType.CLIENTS_DISCONNECTED,ir))}}},{event:"config",handler:function(yt,ir){return _c=>hS(this,void 0,void 0,function*(){var mu,Mu;J2.SocketService(`[SocketService: handleChannelConfig()] update relayPersistence on 'config-${ir}'`,_c),yt.remote.state.relayPersistence=!0,yt.remote.emit(o.EventType.CHANNEL_PERSISTENCE),(mu=yt.state.keyExchange)===null||mu===void 0||mu.setKeysExchanged(!0),yt.state.isOriginator&&yt.remote.state.channelConfig&&!yt.remote.state.channelConfig.relayPersistence&&(yt.remote.state.channelConfig.relayPersistence=!0,(Mu=yt.remote.state.storageManager)===null||Mu===void 0||Mu.persistChannelConfig(yt.remote.state.channelConfig))})}},{event:"message",handler:function(yt,ir){return _c=>{var mu,Mu,Su,l0,E0,j0,M0,B0,V0,y1,v1,F1,ov,bv,gv,xv,hy,oy;const{id:fy,ackId:Fy,message:qv,error:Qv}=_c,T0=(mu=yt.remote.state.relayPersistence)!==null&&mu!==void 0&μif(J2.SocketService(`[SocketService handleMessage()] relayPersistence=${T0} context=${yt.state.context} on 'message' ${ir} keysExchanged=${(Mu=yt.state.keyExchange)===null||Mu===void 0?void 0:Mu.areKeysExchanged()}`,_c),Qv)throw J2.SocketService(` - [SocketService handleMessage()] context=${yt.state.context}::on 'message' error=${Qv}`),new Error(Qv);try{(function(d0,c0){if(c0!==d0.channelId)throw d0.debug&&console.error(`Wrong id ${c0} - should be ${d0.channelId}`),new Error("Wrong id")})(yt.state,fy)}catch{return void console.error("ignore message --- wrong id ",qv)}const X0=typeof qv=="string";if(!X0&&(qv==null?void 0:qv.type)===yA.KEY_HANDSHAKE_START)return T0?void console.warn("[SocketService handleMessage()] Ignoring key exchange message because relay persistence is activated",qv):(J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' received HANDSHAKE_START isOriginator=${yt.state.isOriginator}`,qv),void((Su=yt.state.keyExchange)===null||Su===void 0||Su.start({isOriginator:(l0=yt.state.isOriginator)!==null&&l0!==void 0&&l0,force:!0})));if(!X0&&(!((E0=qv==null?void 0:qv.type)===null||E0===void 0)&&E0.startsWith("key_handshake")))return T0?void console.warn("[SocketService handleMessage()] Ignoring key exchange message because relay persistence is activated",qv):(J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' emit KEY_EXCHANGE`,qv),void yt.emit(tU.KEY_EXCHANGE,{message:qv,context:yt.state.context}));if(X0&&!(!((j0=yt.state.keyExchange)===null||j0===void 0)&&j0.areKeysExchanged())){let d0=!1;try{J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' trying to decrypt message`),(M0=yt.state.keyExchange)===null||M0===void 0||M0.decryptMessage(qv),d0=!0}catch(c0){J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' error`,c0)}if(!d0)return yt.state.isOriginator?(V0=yt.state.keyExchange)===null||V0===void 0||V0.start({isOriginator:(y1=yt.state.isOriginator)!==null&&y1!==void 0&&y1}):yt.sendMessage({type:yA.KEY_HANDSHAKE_START}),void J2.SocketService(`Message ignored because invalid key exchange status. step=${(v1=yt.state.keyExchange)===null||v1===void 0?void 0:v1.getKeyInfo().step}`,(F1=yt.state.keyExchange)===null||F1===void 0?void 0:F1.getKeyInfo(),qv);J2.SocketService("Invalid key exchange status detected --- updating it."),(B0=yt.state.keyExchange)===null||B0===void 0||B0.setKeysExchanged(!0)}else if(!X0&&(qv!=null&&qv.type))return console.warn("[SocketService handleMessage() ::on 'message' received non encrypted unkwown message"),void yt.emit(o.EventType.MESSAGE,qv);if(!X0)return console.warn("[SocketService handleMessage() ::on 'message' received unkwown message",qv),void yt.emit(o.EventType.MESSAGE,qv);const s0=(ov=yt.state.keyExchange)===null||ov===void 0?void 0:ov.decryptMessage(qv),g0=JSON.parse(s0??"{}");if(Fy&&(Fy==null?void 0:Fy.length)>0&&(J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' ackid=${Fy} channelId=${fy}`),(bv=yt.state.socket)===null||bv===void 0||bv.emit(o.EventType.MESSAGE_ACK,{ackId:Fy,channelId:fy,clientType:yt.state.isOriginator?"dapp":"wallet"})),(g0==null?void 0:g0.type)===o.MessageType.PAUSE?yt.state.clientsPaused=!0:yt.state.clientsPaused=!1,yt.state.isOriginator&&g0.data){const d0=g0.data,c0=yt.state.rpcMethodTracker[d0.id];if(c0){const a0=Date.now()-c0.timestamp;J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' received answer for id=${d0.id} method=${c0.method} responseTime=${a0}`,g0),yt.remote.state.analytics&&vne.includes(c0.method.toLowerCase())&&FH({id:(gv=yt.remote.state.channelId)!==null&&gv!==void 0?gv:"",event:W6.SDK_RPC_REQUEST_DONE,sdkVersion:yt.remote.state.sdkVersion,commLayerVersion:eU,walletVersion:(xv=yt.remote.state.walletInfo)===null||xv===void 0?void 0:xv.version,params:{method:c0.method,from:"mobile"}},yt.remote.state.communicationServerUrl).catch(z0=>{console.error("Cannot send analytics",z0)});const S0=Object.assign(Object.assign({},c0),{result:d0.result,error:d0.error?{code:(hy=d0.error)===null||hy===void 0?void 0:hy.code,message:(oy=d0.error)===null||oy===void 0?void 0:oy.message}:void 0,elapsedTime:a0});yt.state.rpcMethodTracker[d0.id]=S0,yt.emit(o.EventType.RPC_UPDATE,S0)}}yt.emit(o.EventType.MESSAGE,{message:g0})}}},{event:"clients_waiting_to_join",handler:function(yt,ir){return _c=>{J2.SocketService(`[SocketService: handleClientsWaitingToJoin()] context=${yt.state.context} on 'clients_waiting_to_join-${ir}'`,_c),yt.emit(o.EventType.CLIENTS_WAITING,_c)}}}],yne=[{event:o.EventType.KEY_INFO,handler:function(yt){return ir=>{J2.SocketService("[SocketService: handleKeyInfo()] on 'KEY_INFO'",ir),yt.emit(o.EventType.KEY_INFO,ir)}}},{event:o.EventType.KEYS_EXCHANGED,handler:function(yt){return()=>{var ir,_c,mu;J2.SocketService(`[SocketService: handleKeysExchanged()] on 'keys_exchanged' keyschanged=${(ir=yt.state.keyExchange)===null||ir===void 0?void 0:ir.areKeysExchanged()}`);const{channelConfig:Mu}=yt.remote.state;if(Mu){const l0=yt.getKeyExchange().getKeyInfo().ecies;Mu.localKey=l0.private,Mu.otherKey=l0.otherPubKey,yt.remote.state.channelConfig=Mu,(_c=yt.remote.state.storageManager)===null||_c===void 0||_c.persistChannelConfig(Mu).catch(E0=>{console.error("Error persisting channel config",E0)})}yt.emit(o.EventType.KEYS_EXCHANGED,{keysExchanged:(mu=yt.state.keyExchange)===null||mu===void 0?void 0:mu.areKeysExchanged(),isOriginator:yt.state.isOriginator});const Su={keyInfo:yt.getKeyInfo()};yt.emit(o.EventType.SERVICE_STATUS,Su)}}}];function BB(yt,ir){J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} setting socket listeners for channel ${ir}...`);const{socket:_c}=yt.state,{keyExchange:mu}=yt.state;yt.state.setupChannelListeners&&console.warn(`[SocketService: setupChannelListener()] context=${yt.state.context} socket listeners already set up for channel ${ir}`),_c&&yt.state.isOriginator&&(yt.state.debug&&(_c==null||_c.io.on("error",Mu=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=error`,Mu)}),_c==null||_c.io.on("reconnect",Mu=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=reconnect`,Mu)}),_c==null||_c.io.on("reconnect_error",Mu=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=reconnect_error`,Mu)}),_c==null||_c.io.on("reconnect_failed",()=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=reconnect_failed`)}),_c==null||_c.io.on("ping",()=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket`)})),_c==null||_c.on("disconnect",Mu=>(J2.SocketService(`[SocketService: setupChannelListener()] on 'disconnect' -- MetaMaskSDK socket disconnected '${Mu}' begin recovery...`),function(Su){return l0=>{J2.SocketService(`[SocketService: handleDisconnect()] on 'disconnect' manualDisconnect=${Su.state.manualDisconnect}`,l0),Su.state.manualDisconnect||(Su.emit(o.EventType.SOCKET_DISCONNECTED),function(E0){typeof window<"u"&&typeof document<"u"&&(J2.SocketService(`[SocketService: checkFocusAndReconnect()] hasFocus=${document.hasFocus()}`,E0),document.hasFocus()?zue(E0).then(j0=>{J2.SocketService(`SocketService::checkFocus reconnectSocket success=${j0}`,E0)}).catch(j0=>{console.error("SocketService::checkFocus Error reconnecting socket",j0)}):window.addEventListener("focus",()=>{zue(E0).catch(j0=>{console.error("SocketService::checkFocus Error reconnecting socket",j0)})},{once:!0}))}(Su))}}(yt)(Mu)))),Hue.forEach(({event:Mu,handler:Su})=>{const l0=`${Mu}-${ir}`;_c==null||_c.on(l0,Su(yt,ir))}),yne.forEach(({event:Mu,handler:Su})=>{mu==null||mu.on(Mu,Su(yt))}),yt.state.setupChannelListeners=!0}class DB extends PH.EventEmitter2{constructor({otherPublicKey:ir,reconnect:_c,communicationLayerPreference:mu,transports:Mu,communicationServerUrl:Su,context:l0,ecies:E0,remote:j0,logging:M0}){super(),this.state={clientsConnected:!1,clientsPaused:!1,manualDisconnect:!1,lastRpcId:void 0,rpcMethodTracker:{},hasPlaintext:!1,communicationServerUrl:""},this.state.resumed=_c,this.state.context=l0,this.state.isOriginator=j0.state.isOriginator,this.state.communicationLayerPreference=mu,this.state.debug=(M0==null?void 0:M0.serviceLayer)===!0,this.remote=j0,(M0==null?void 0:M0.serviceLayer)===!0&&v5.enable("SocketService:Layer"),this.state.communicationServerUrl=Su,this.state.hasPlaintext=this.state.communicationServerUrl!==LB&&(M0==null?void 0:M0.plaintext)===!0;const B0={autoConnect:!1,transports:Sme,withCredentials:!0};Mu&&(B0.transports=Mu),J2.SocketService(`[SocketService: constructor()] Socket IO url: ${this.state.communicationServerUrl}`),this.state.socket=VZ(Su,B0);const V0={communicationLayer:this,otherPublicKey:ir,sendPublicKey:!1,context:this.state.context,ecies:E0,logging:M0};this.state.keyExchange=new Uue(V0)}resetKeys(){return J2.SocketService("[SocketService: resetKeys()] Resetting keys."),void((ir=this.state.keyExchange)===null||ir===void 0||ir.resetKeys());var ir}createChannel(){return function(ir){var _c,mu,Mu,Su;if(J2.SocketService(`[SocketService: createChannel()] context=${ir.state.context}`),(_c=ir.state.socket)===null||_c===void 0?void 0:_c.connected)throw console.error("[SocketService: createChannel()] socket already connected"),new Error("socket already connected");console.log("create channel",ir.state.socket),(mu=ir.state.socket)===null||mu===void 0||mu.connect(),ir.state.manualDisconnect=!1,ir.state.isOriginator=!0;const l0=BZ();return ir.state.channelId=l0,BB(ir,l0),(Mu=ir.state.socket)===null||Mu===void 0||Mu.emit(o.EventType.JOIN_CHANNEL,{channelId:l0,context:`${ir.state.context}createChannel`,clientType:"dapp"}),{channelId:l0,pubKey:((Su=ir.state.keyExchange)===null||Su===void 0?void 0:Su.getMyPublicKey())||""}}(this)}connectToChannel({channelId:ir,withKeyExchange:_c=!1}){return function({options:mu,instance:Mu}){var Su,l0,E0,j0,M0,B0,V0,y1;const{channelId:v1,withKeyExchange:F1}=mu,ov=(Su=Mu.state.isOriginator)!==null&&Su!==void 0&&Su;if(J2.SocketService(`[SocketService: connectToChannel()] context=${Mu.state.context} channelId=${v1} isOriginator=${ov}`,(l0=Mu.state.keyExchange)===null||l0===void 0?void 0:l0.toString()),(E0=Mu.state.socket)===null||E0===void 0?void 0:E0.connected)throw console.error("[SocketService: connectToChannel()] socket already connected"),new Error("socket already connected");const{channelConfig:bv}=Mu.remote.state;ov&&(bv!=null&&bv.relayPersistence)&&(bv.localKey&&((j0=bv==null?void 0:bv.localKey)===null||j0===void 0?void 0:j0.length)>0&&bv.otherKey&&((M0=bv==null?void 0:bv.otherKey)===null||M0===void 0?void 0:M0.length)>0?(B0=Mu.state.keyExchange)===null||B0===void 0||B0.setRelayPersistence({localKey:bv.localKey,otherKey:bv.otherKey}):console.warn("Missing keys in relay persistence",bv)),Mu.state.manualDisconnect=!1,(V0=Mu.state.socket)===null||V0===void 0||V0.connect(),Mu.state.withKeyExchange=F1,Mu.state.isOriginator=ov,Mu.state.channelId=v1,BB(Mu,v1),(y1=Mu.state.socket)===null||y1===void 0||y1.emit(o.EventType.JOIN_CHANNEL,{channelId:v1,context:`${Mu.state.context}_connectToChannel`,clientType:ov?"dapp":"wallet"},(gv,xv)=>{gv==="error_terminated"?Mu.emit(o.EventType.TERMINATE):typeof xv=="object"&&xv.persistence&&Mu.emit(o.EventType.CHANNEL_PERSISTENCE)})}({options:{channelId:ir,withKeyExchange:_c},instance:this})}getKeyInfo(){return this.state.keyExchange.getKeyInfo()}keyCheck(){var ir,_c;(_c=(ir=this).state.socket)===null||_c===void 0||_c.emit(o.EventType.MESSAGE,{id:ir.state.channelId,context:ir.state.context,message:{type:yA.KEY_HANDSHAKE_CHECK,pubkey:ir.getKeyInfo().ecies.otherPubKey}})}getKeyExchange(){return this.state.keyExchange}sendMessage(ir){return sJ(this,ir)}ping(){return ir=this,J2.SocketService(`[SocketService: ping()] context=${ir.state.context} originator=${ir.state.isOriginator} keysExchanged=${(_c=ir.state.keyExchange)===null||_c===void 0?void 0:_c.areKeysExchanged()}`),ir.state.isOriginator&&(!((mu=ir.state.keyExchange)===null||mu===void 0)&&mu.areKeysExchanged()?(console.warn(`[SocketService:ping()] context=${ir.state.context} sending READY message`),ir.sendMessage({type:o.MessageType.READY})):(console.warn(`[SocketService: ping()] context=${ir.state.context} starting key exchange`),(Mu=ir.state.keyExchange)===null||Mu===void 0||Mu.start({isOriginator:(Su=ir.state.isOriginator)!==null&&Su!==void 0&&Su}))),void((l0=ir.state.socket)===null||l0===void 0||l0.emit(o.EventType.MESSAGE,{id:ir.state.channelId,context:ir.state.context,clientType:ir.remote.state.isOriginator?"dapp":"wallet",message:{type:o.MessageType.PING}}));var ir,_c,mu,Mu,Su,l0}pause(){return ir=this,J2.SocketService(`[SocketService: pause()] context=${ir.state.context}`),ir.state.manualDisconnect=!0,!((_c=ir.state.keyExchange)===null||_c===void 0)&&_c.areKeysExchanged()&&ir.sendMessage({type:o.MessageType.PAUSE}),void((mu=ir.state.socket)===null||mu===void 0||mu.disconnect());var ir,_c,mu}isConnected(){var ir;return(ir=this.state.socket)===null||ir===void 0?void 0:ir.connected}resume(){return ir=this,J2.SocketService(`[SocketService: resume()] context=${ir.state.context} connected=${(_c=ir.state.socket)===null||_c===void 0?void 0:_c.connected} manualDisconnect=${ir.state.manualDisconnect} resumed=${ir.state.resumed} keysExchanged=${(mu=ir.state.keyExchange)===null||mu===void 0?void 0:mu.areKeysExchanged()}`),!((Mu=ir.state.socket)===null||Mu===void 0)&&Mu.connected?J2.SocketService("[SocketService: resume()] already connected."):((Su=ir.state.socket)===null||Su===void 0||Su.connect(),J2.SocketService(`[SocketService: resume()] after connecting socket --> connected=${(l0=ir.state.socket)===null||l0===void 0?void 0:l0.connected}`),(E0=ir.state.socket)===null||E0===void 0||E0.emit(o.EventType.JOIN_CHANNEL,{channelId:ir.state.channelId,context:`${ir.state.context}_resume`,clientType:ir.remote.state.isOriginator?"dapp":"wallet"})),!((j0=ir.state.keyExchange)===null||j0===void 0)&&j0.areKeysExchanged()?ir.state.isOriginator||ir.sendMessage({type:o.MessageType.READY}):ir.state.isOriginator||(M0=ir.state.keyExchange)===null||M0===void 0||M0.start({isOriginator:(B0=ir.state.isOriginator)!==null&&B0!==void 0&&B0}),ir.state.manualDisconnect=!1,void(ir.state.resumed=!0);var ir,_c,mu,Mu,Su,l0,E0,j0,M0,B0}getRPCMethodTracker(){return this.state.rpcMethodTracker}disconnect(ir){return function(_c,mu){var Mu,Su;J2.SocketService(`[SocketService: disconnect()] context=${_c.state.context}`,mu),mu!=null&&mu.terminate&&(_c.state.channelId=mu.channelId,(Mu=_c.state.keyExchange)===null||Mu===void 0||Mu.clean(),_c.state.rpcMethodTracker={}),_c.state.manualDisconnect=!0,(Su=_c.state.socket)===null||Su===void 0||Su.disconnect()}(this,ir)}}var Kue;function lJ(yt){return()=>hS(this,void 0,void 0,function*(){var ir,_c,mu;const{state:Mu}=yt;if(Mu.authorized)return;yield hS(this,void 0,void 0,function*(){for(;!Mu.walletInfo;)yield UH(500)});const Su="7.3".localeCompare(((ir=Mu.walletInfo)===null||ir===void 0?void 0:ir.version)||"");if(J2.RemoteCommunication(`[RemoteCommunication: handleAuthorizedEvent()] HACK 'authorized' version=${(_c=Mu.walletInfo)===null||_c===void 0?void 0:_c.version} compareValue=${Su}`),Su!==1)return;const l0=Mu.platformType===o.PlatformType.MobileWeb||Mu.platformType===o.PlatformType.ReactNative||Mu.platformType===o.PlatformType.MetaMaskMobileWebview;J2.RemoteCommunication(`[RemoteCommunication: handleAuthorizedEvent()] HACK 'authorized' platform=${Mu.platformType} secure=${l0} channel=${Mu.channelId} walletVersion=${(mu=Mu.walletInfo)===null||mu===void 0?void 0:mu.version}`),l0&&(Mu.authorized=!0,yt.emit(o.EventType.AUTHORIZED))})}function xme(yt){return ir=>{const{state:_c}=yt;J2.RemoteCommunication(`[RemoteCommunication: handleChannelCreatedEvent()] context=${_c.context} on 'channel_created' channelId=${ir}`),yt.emit(o.EventType.CHANNEL_CREATED,ir)}}function Vue(yt,ir){return()=>{var _c,mu,Mu,Su;const{state:l0}=yt;if(J2.RemoteCommunication(`[RemoteCommunication: handleClientsConnectedEvent()] on 'clients_connected' channel=${l0.channelId} keysExchanged=${(mu=(_c=l0.communicationLayer)===null||_c===void 0?void 0:_c.getKeyInfo())===null||mu===void 0?void 0:mu.keysExchanged}`),l0.analytics){const E0=l0.isOriginator?W6.REQUEST:W6.REQUEST_MOBILE;FH(Object.assign(Object.assign({id:(Mu=l0.channelId)!==null&&Mu!==void 0?Mu:"",event:l0.reconnection?W6.RECONNECT:E0},l0.originatorInfo),{commLayer:ir,sdkVersion:l0.sdkVersion,walletVersion:(Su=l0.walletInfo)===null||Su===void 0?void 0:Su.version,commLayerVersion:eU}),l0.communicationServerUrl).catch(j0=>{console.error("Cannot send analytics",j0)})}l0.clientsConnected=!0,l0.originatorInfoSent=!1,yt.emit(o.EventType.CLIENTS_CONNECTED)}}function cJ(yt,ir){return _c=>{var mu;const{state:Mu}=yt;J2.RemoteCommunication(`[RemoteCommunication: handleClientsDisconnectedEvent()] context=${Mu.context} on 'clients_disconnected' channelId=${_c}`),Mu.relayPersistence||(Mu.clientsConnected=!1,Mu.ready=!1,Mu.authorized=!1),yt.emit(o.EventType.CLIENTS_DISCONNECTED,Mu.channelId),yt.setConnectionStatus(o.ConnectionStatus.DISCONNECTED),Mu.analytics&&Mu.channelId&&FH({id:Mu.channelId,event:W6.DISCONNECTED,sdkVersion:Mu.sdkVersion,commLayer:ir,commLayerVersion:eU,walletVersion:(mu=Mu.walletInfo)===null||mu===void 0?void 0:mu.version},Mu.communicationServerUrl).catch(Su=>{console.error("Cannot send analytics",Su)})}}function JA(yt){return ir=>{var _c;const{state:mu}=yt;if(J2.RemoteCommunication(`[RemoteCommunication: handleClientsWaitingEvent()] context=${mu.context} on 'clients_waiting' numberUsers=${ir} ready=${mu.ready} autoStarted=${mu.originatorConnectStarted}`),yt.setConnectionStatus(o.ConnectionStatus.WAITING),yt.emit(o.EventType.CLIENTS_WAITING,ir),mu.originatorConnectStarted){J2.RemoteCommunication(`[RemoteCommunication: handleClientsWaitingEvent()] on 'clients_waiting' watch autoStarted=${mu.originatorConnectStarted} timeout`,mu.autoConnectOptions);const Mu=((_c=mu.autoConnectOptions)===null||_c===void 0?void 0:_c.timeout)||3e3,Su=setTimeout(()=>{J2.RemoteCommunication(`[RemoteCommunication: handleClientsWaitingEvent()] setTimeout(${Mu}) terminate channelConfig`,mu.autoConnectOptions),mu.originatorConnectStarted=!1,mu.ready||yt.setConnectionStatus(o.ConnectionStatus.TIMEOUT),clearTimeout(Su)},Mu)}}}function kme(yt,ir){return _c=>{var mu,Mu,Su,l0,E0,j0,M0,B0;const{state:V0}=yt;if(J2.RemoteCommunication(`[RemoteCommunication: handleKeysExchangedEvent()] context=${V0.context} on commLayer.'keys_exchanged' channel=${V0.channelId}`,_c),(Mu=(mu=V0.communicationLayer)===null||mu===void 0?void 0:mu.getKeyInfo())===null||Mu===void 0?void 0:Mu.keysExchanged){const y1=Object.assign(Object.assign({},V0.channelConfig),{channelId:(Su=V0.channelId)!==null&&Su!==void 0?Su:"",validUntil:((l0=V0.channelConfig)===null||l0===void 0?void 0:l0.validUntil)||aJ,localKey:V0.communicationLayer.getKeyInfo().ecies.private,otherKey:V0.communicationLayer.getKeyInfo().ecies.otherPubKey});(E0=V0.storageManager)===null||E0===void 0||E0.persistChannelConfig(y1).catch(v1=>{console.error("Error persisting channel config",v1)}),yt.setConnectionStatus(o.ConnectionStatus.LINKED)}(function(y1,v1){var F1,ov,bv,gv,xv,hy,oy,fy;const{state:Fy}=y1;J2.RemoteCommunication(`[RemoteCommunication: setLastActiveDate()] channel=${Fy.channelId}`,v1);const qv=Object.assign(Object.assign({},Fy.channelConfig),{channelId:(F1=Fy.channelId)!==null&&F1!==void 0?F1:"",validUntil:(bv=(ov=Fy.channelConfig)===null||ov===void 0?void 0:ov.validUntil)!==null&&bv!==void 0?bv:0,relayPersistence:Fy.relayPersistence,localKey:(xv=(gv=Fy.communicationLayer)===null||gv===void 0?void 0:gv.state.keyExchange)===null||xv===void 0?void 0:xv.getKeyInfo().ecies.private,otherKey:(oy=(hy=Fy.communicationLayer)===null||hy===void 0?void 0:hy.state.keyExchange)===null||oy===void 0?void 0:oy.getKeyInfo().ecies.otherPubKey,lastActive:v1.getTime()});(fy=Fy.storageManager)===null||fy===void 0||fy.persistChannelConfig(qv)})(yt,new Date),V0.analytics&&V0.channelId&&FH({id:V0.channelId,event:_c.isOriginator?W6.CONNECTED:W6.CONNECTED_MOBILE,sdkVersion:V0.sdkVersion,commLayer:ir,commLayerVersion:eU,walletVersion:(j0=V0.walletInfo)===null||j0===void 0?void 0:j0.version},V0.communicationServerUrl).catch(y1=>{console.error("Cannot send analytics",y1)}),V0.isOriginator=_c.isOriginator,_c.isOriginator||((M0=V0.communicationLayer)===null||M0===void 0||M0.sendMessage({type:o.MessageType.READY}),V0.ready=!0,V0.paused=!1),_c.isOriginator&&!V0.originatorInfoSent&&((B0=V0.communicationLayer)===null||B0===void 0||B0.sendMessage({type:o.MessageType.ORIGINATOR_INFO,originatorInfo:V0.originatorInfo,originator:V0.originatorInfo}),V0.originatorInfoSent=!0)}}function Mq(yt){return ir=>{let _c=ir;ir.message&&(_c=_c.message),function(mu,Mu){const{state:Su}=Mu;if(J2.RemoteCommunication(`[RemoteCommunication: onCommunicationLayerMessage()] context=${Su.context} on 'message' typeof=${typeof mu}`,mu),Mu.state.ready=!0,Su.isOriginator||mu.type!==o.MessageType.ORIGINATOR_INFO)if(Su.isOriginator&&mu.type===o.MessageType.WALLET_INFO)(function(l0,E0){const{state:j0}=l0;j0.walletInfo=E0.walletInfo,j0.paused=!1})(Mu,mu);else{if(mu.type===o.MessageType.TERMINATE)(function(l0){const{state:E0}=l0;E0.isOriginator&&(rU({options:{terminate:!0,sendMessage:!1},instance:l0}),console.debug(),l0.emit(o.EventType.TERMINATE))})(Mu);else if(mu.type===o.MessageType.PAUSE)(function(l0){const{state:E0}=l0;E0.paused=!0,l0.setConnectionStatus(o.ConnectionStatus.PAUSED)})(Mu);else if(mu.type===o.MessageType.READY&&Su.isOriginator)(function(l0){const{state:E0}=l0;l0.setConnectionStatus(o.ConnectionStatus.LINKED);const j0=E0.paused;E0.paused=!1,l0.emit(o.EventType.CLIENTS_READY,{isOriginator:E0.isOriginator,walletInfo:E0.walletInfo}),j0&&(E0.authorized=!0,l0.emit(o.EventType.AUTHORIZED))})(Mu);else{if(mu.type===o.MessageType.OTP&&Su.isOriginator)return void function(l0,E0){var j0;const{state:M0}=l0;l0.emit(o.EventType.OTP,E0.otpAnswer),"6.6".localeCompare(((j0=M0.walletInfo)===null||j0===void 0?void 0:j0.version)||"")===1&&(console.warn("RemoteCommunication::on 'otp' -- backward compatibility <6.6 -- triger eth_requestAccounts"),l0.emit(o.EventType.SDK_RPC_CALL,{method:M7,params:[]}))}(Mu,mu);mu.type===o.MessageType.AUTHORIZED&&Su.isOriginator&&function(l0){const{state:E0}=l0;E0.authorized=!0,l0.emit(o.EventType.AUTHORIZED)}(Mu)}Mu.emit(o.EventType.MESSAGE,mu)}else(function(l0,E0){var j0;const{state:M0}=l0;(j0=M0.communicationLayer)===null||j0===void 0||j0.sendMessage({type:o.MessageType.WALLET_INFO,walletInfo:M0.walletInfo}),M0.originatorInfo=E0.originatorInfo||E0.originator,l0.emit(o.EventType.CLIENTS_READY,{isOriginator:M0.isOriginator,originatorInfo:M0.originatorInfo}),M0.paused=!1})(Mu,mu)}(_c,yt)}}function que(yt){return()=>{const{state:ir}=yt;J2.RemoteCommunication("[RemoteCommunication: handleSocketReconnectEvent()] on 'socket_reconnect' -- reset key exchange status / set ready to false"),ir.ready=!1,ir.authorized=!1,uC(ir),yt.emitServiceStatusEvent({context:"socket_reconnect"})}}function Wue(yt){return()=>{const{state:ir}=yt;J2.RemoteCommunication("[RemoteCommunication: handleSocketDisconnectedEvent()] on 'socket_Disconnected' set ready to false"),ir.ready=!1}}function G6(yt){return()=>hS(this,void 0,void 0,function*(){var ir,_c,mu,Mu,Su,l0,E0;const{state:j0}=yt;J2.RemoteCommunication(`[RemoteCommunication: handleFullPersistenceEvent()] context=${j0.context}`),yt.state.ready=!0,yt.state.clientsConnected=!0,yt.state.authorized=!0,yt.state.relayPersistence=!0,(ir=yt.state.communicationLayer)===null||ir===void 0||ir.getKeyExchange().setKeysExchanged(!0),yt.emit(o.EventType.KEYS_EXCHANGED,{keysExchanged:!0,isOriginator:!0}),yt.emit(o.EventType.AUTHORIZED),yt.emit(o.EventType.CLIENTS_READY),yt.emit(o.EventType.CHANNEL_PERSISTENCE);try{j0.channelConfig=Object.assign(Object.assign({},j0.channelConfig),{localKey:(_c=j0.communicationLayer)===null||_c===void 0?void 0:_c.getKeyExchange().getKeyInfo().ecies.private,otherKey:(mu=j0.communicationLayer)===null||mu===void 0?void 0:mu.getKeyExchange().getOtherPublicKey(),channelId:(Mu=j0.channelId)!==null&&Mu!==void 0?Mu:"",validUntil:(l0=(Su=j0.channelConfig)===null||Su===void 0?void 0:Su.validUntil)!==null&&l0!==void 0?l0:aJ,relayPersistence:!0}),yield(E0=j0.storageManager)===null||E0===void 0?void 0:E0.persistChannelConfig(j0.channelConfig)}catch(M0){console.error("Error persisting channel config",M0)}})}function rU({options:yt,instance:ir}){var _c,mu,Mu,Su,l0,E0;const{state:j0}=ir;J2.RemoteCommunication(`[RemoteCommunication: disconnect()] channel=${j0.channelId}`,yt),j0.ready=!1,j0.paused=!1,yt!=null&&yt.terminate?((_c=j0.storageManager)===null||_c===void 0||_c.terminate((mu=j0.channelId)!==null&&mu!==void 0?mu:""),ir.state.terminated=!0,yt.sendMessage&&(!((Mu=j0.communicationLayer)===null||Mu===void 0)&&Mu.getKeyInfo().keysExchanged)&&((Su=j0.communicationLayer)===null||Su===void 0||Su.sendMessage({type:o.MessageType.TERMINATE})),j0.relayPersistence=!1,j0.channelId=BZ(),yt.channelId=j0.channelId,j0.channelConfig=void 0,j0.originatorConnectStarted=!1,(l0=j0.communicationLayer)===null||l0===void 0||l0.disconnect(yt),ir.setConnectionStatus(o.ConnectionStatus.TERMINATED)):((E0=j0.communicationLayer)===null||E0===void 0||E0.disconnect(yt),ir.setConnectionStatus(o.ConnectionStatus.DISCONNECTED))}o.CommunicationLayerPreference=void 0,o.PlatformType=void 0,function(yt){yt.SOCKET="socket"}(o.CommunicationLayerPreference||(o.CommunicationLayerPreference={})),function(yt){yt.NonBrowser="nodejs",yt.MetaMaskMobileWebview="in-app-browser",yt.DesktopWeb="web-desktop",yt.MobileWeb="web-mobile",yt.ReactNative="react-native"}(o.PlatformType||(o.PlatformType={}));class Gue extends PH.EventEmitter2{constructor({platformType:ir,communicationLayerPreference:_c,otherPublicKey:mu,reconnect:Mu,walletInfo:Su,dappMetadata:l0,protocolVersion:E0,transports:j0,context:M0,relayPersistence:B0,ecies:V0,analytics:y1=!1,storage:v1,sdkVersion:F1,communicationServerUrl:ov=LB,logging:bv,autoConnect:gv={timeout:3e3}}){super(),this.state={ready:!1,authorized:!1,isOriginator:!1,terminated:!1,protocolVersion:1,paused:!1,platformType:"metamask-mobile",analytics:!1,reconnection:!1,originatorInfoSent:!1,communicationServerUrl:LB,context:"",persist:!1,clientsConnected:!1,sessionDuration:aJ,originatorConnectStarted:!1,debug:!1,_connectionStatus:o.ConnectionStatus.DISCONNECTED},this.state.otherPublicKey=mu,this.state.dappMetadata=l0,this.state.walletInfo=Su,this.state.transports=j0,this.state.platformType=ir,this.state.analytics=y1,this.state.protocolVersion=E0??1,this.state.isOriginator=!mu,this.state.relayPersistence=B0,this.state.communicationServerUrl=ov,this.state.context=M0,this.state.terminated=!1,this.state.sdkVersion=F1,this.setMaxListeners(50),this.setConnectionStatus(o.ConnectionStatus.DISCONNECTED),v1!=null&&v1.duration&&(this.state.sessionDuration=aJ),this.state.storageOptions=v1,this.state.autoConnectOptions=gv,this.state.debug=(bv==null?void 0:bv.remoteLayer)===!0,(bv==null?void 0:bv.remoteLayer)===!0&&v5.enable("RemoteCommunication:Layer"),(bv==null?void 0:bv.serviceLayer)===!0&&v5.enable("SocketService:Layer"),(bv==null?void 0:bv.eciesLayer)===!0&&v5.enable("ECIES:Layer"),(bv==null?void 0:bv.keyExchangeLayer)===!0&&v5.enable("KeyExchange:Layer"),this.state.logging=bv,v1!=null&&v1.storageManager&&(this.state.storageManager=v1.storageManager),J2.RemoteCommunication(`[RemoteCommunication: constructor()] protocolVersion=${E0} relayPersistence=${B0} isOriginator=${this.state.isOriginator} communicationLayerPreference=${_c} otherPublicKey=${mu} reconnect=${Mu}`),this.initCommunicationLayer({communicationLayerPreference:_c,otherPublicKey:mu,reconnect:Mu,ecies:V0,communicationServerUrl:ov}),this.emitServiceStatusEvent({context:"constructor"})}initCommunicationLayer({communicationLayerPreference:ir,otherPublicKey:_c,reconnect:mu,ecies:Mu,communicationServerUrl:Su=LB}){return function({communicationLayerPreference:l0,otherPublicKey:E0,reconnect:j0,ecies:M0,communicationServerUrl:B0=LB,instance:V0}){var y1,v1,F1,ov,bv,gv,xv,hy,oy;const{state:fy}=V0;if(J2.RemoteCommunication("[initCommunicationLayer()] ",JSON.stringify(fy,null,2)),l0!==o.CommunicationLayerPreference.SOCKET)throw new Error("Invalid communication protocol");fy.communicationLayer=new DB({communicationLayerPreference:l0,otherPublicKey:E0,reconnect:j0,transports:fy.transports,communicationServerUrl:B0,context:fy.context,ecies:M0,logging:fy.logging,remote:V0});let Fy=typeof document<"u"&&document.URL||"",qv=typeof document<"u"&&document.title||"";!((y1=fy.dappMetadata)===null||y1===void 0)&&y1.url&&(Fy=fy.dappMetadata.url),!((v1=fy.dappMetadata)===null||v1===void 0)&&v1.name&&(qv=fy.dappMetadata.name);const Qv=typeof window<"u"&&window.location!==void 0?window.location.hostname:(gv=(ov=(F1=fy.dappMetadata)===null||F1===void 0?void 0:F1.name)!==null&&ov!==void 0?ov:(bv=fy.dappMetadata)===null||bv===void 0?void 0:bv.url)!==null&&gv!==void 0?gv:"unkown",T0={url:Fy,title:qv,source:(xv=fy.dappMetadata)===null||xv===void 0?void 0:xv.source,dappId:Qv,icon:((hy=fy.dappMetadata)===null||hy===void 0?void 0:hy.iconUrl)||((oy=fy.dappMetadata)===null||oy===void 0?void 0:oy.base64Icon),platform:fy.platformType,apiVersion:eU};fy.originatorInfo=T0;const X0={[o.EventType.AUTHORIZED]:lJ(V0),[o.EventType.MESSAGE]:Mq(V0),[o.EventType.CHANNEL_PERSISTENCE]:G6(V0),[o.EventType.CLIENTS_CONNECTED]:Vue(V0,l0),[o.EventType.KEYS_EXCHANGED]:kme(V0,l0),[o.EventType.SOCKET_DISCONNECTED]:Wue(V0),[o.EventType.SOCKET_RECONNECT]:que(V0),[o.EventType.CLIENTS_DISCONNECTED]:cJ(V0,l0),[o.EventType.KEY_INFO]:()=>{},[o.EventType.CHANNEL_CREATED]:xme(V0),[o.EventType.CLIENTS_WAITING]:JA(V0),[o.EventType.RPC_UPDATE]:s0=>{V0.emit(o.EventType.RPC_UPDATE,s0)}};for(const[s0,g0]of Object.entries(X0))try{fy.communicationLayer.on(s0,g0)}catch(d0){console.error(`Error registering handler for ${s0}:`,d0)}}({communicationLayerPreference:ir,otherPublicKey:_c,reconnect:mu,ecies:Mu,communicationServerUrl:Su,instance:this})}originatorSessionConnect(){return hS(this,void 0,void 0,function*(){return yield function(ir){var _c;return hS(this,void 0,void 0,function*(){const{state:mu}=ir;if(!mu.storageManager)return void J2.RemoteCommunication("[RemoteCommunication: originatorSessionConnect()] no storage manager defined - skip");const Mu=yield mu.storageManager.getPersistedChannelConfig();if(J2.RemoteCommunication(`[RemoteCommunication: originatorSessionConnect()] autoStarted=${mu.originatorConnectStarted} channelConfig`,Mu),(_c=mu.communicationLayer)===null||_c===void 0?void 0:_c.isConnected())return J2.RemoteCommunication("[RemoteCommunication: originatorSessionConnect()] socket already connected - skip"),Mu;if(Mu){if(Mu.validUntil>Date.now())return mu.channelConfig=Mu,mu.originatorConnectStarted=!0,mu.channelId=Mu==null?void 0:Mu.channelId,mu.reconnection=!0,Mu;J2.RemoteCommunication("[RemoteCommunication: autoConnect()] Session has expired")}mu.originatorConnectStarted=!1})}(this)})}generateChannelIdConnect(){return hS(this,void 0,void 0,function*(){return function(ir){var _c,mu,Mu,Su;if(!ir.communicationLayer)throw new Error("communication layer not initialized");if(ir.ready)throw new Error("Channel already connected");if(ir.channelId&&(!((_c=ir.communicationLayer)===null||_c===void 0)&&_c.isConnected()))return console.warn("Channel already exists -- interrupt generateChannelId",ir.channelConfig),ir.channelConfig=Object.assign(Object.assign({},ir.channelConfig),{channelId:ir.channelId,validUntil:Date.now()+ir.sessionDuration}),(mu=ir.storageManager)===null||mu===void 0||mu.persistChannelConfig(ir.channelConfig),{channelId:ir.channelId,pubKey:(Su=(Mu=ir.communicationLayer)===null||Mu===void 0?void 0:Mu.getKeyInfo())===null||Su===void 0?void 0:Su.ecies.public};J2.RemoteCommunication("[RemoteCommunication: generateChannelId()]");const l0=ir.communicationLayer.createChannel();J2.RemoteCommunication("[RemoteCommunication: generateChannelId()] channel created",l0);const E0=Object.assign(Object.assign({},ir.channelConfig),{channelId:l0.channelId,validUntil:Date.now()+ir.sessionDuration});return ir.channelId=l0.channelId,ir.channelConfig=E0,{channelId:ir.channelId,pubKey:l0.pubKey}}(this.state)})}clean(){return uC(this.state)}connectToChannel({channelId:ir,withKeyExchange:_c}){return function({channelId:mu,withKeyExchange:Mu,state:Su}){var l0,E0,j0;if(!aue(mu))throw J2.RemoteCommunication(`[RemoteCommunication: connectToChannel()] context=${Su.context} invalid channel channelId=${mu}`),new Error(`Invalid channel ${mu}`);if(J2.RemoteCommunication(`[RemoteCommunication: connectToChannel()] context=${Su.context} channelId=${mu} withKeyExchange=${Mu}`),(l0=Su.communicationLayer)===null||l0===void 0?void 0:l0.isConnected())return void J2.RemoteCommunication(`[RemoteCommunication: connectToChannel()] context=${Su.context} already connected - interrupt connection.`);Su.channelId=mu,(E0=Su.communicationLayer)===null||E0===void 0||E0.connectToChannel({channelId:mu,withKeyExchange:Mu});const M0=Object.assign(Object.assign({},Su.channelConfig),{channelId:mu,validUntil:Date.now()+Su.sessionDuration});Su.channelConfig=M0,(j0=Su.storageManager)===null||j0===void 0||j0.persistChannelConfig(M0)}({channelId:ir,withKeyExchange:_c,state:this.state})}sendMessage(ir){return function(_c,mu){var Mu,Su;return hS(this,void 0,void 0,function*(){const{state:l0}=_c;J2.RemoteCommunication(`[RemoteCommunication: sendMessage()] context=${l0.context} paused=${l0.paused} ready=${l0.ready} relayPersistence=${l0.relayPersistence} authorized=${l0.authorized} socket=${(Mu=l0.communicationLayer)===null||Mu===void 0?void 0:Mu.isConnected()} clientsConnected=${l0.clientsConnected} status=${l0._connectionStatus}`,mu),l0.relayPersistence||l0.ready&&(!((Su=l0.communicationLayer)===null||Su===void 0)&&Su.isConnected())&&l0.clientsConnected||(J2.RemoteCommunication(`[RemoteCommunication: sendMessage()] context=${l0.context} SKIP message waiting for MM mobile readiness.`),yield new Promise(E0=>{_c.once(o.EventType.CLIENTS_READY,E0)}),J2.RemoteCommunication(`[RemoteCommunication: sendMessage()] context=${l0.context} AFTER SKIP / READY -- sending pending message`));try{yield function(E0,j0){return hS(this,void 0,void 0,function*(){return new Promise(M0=>{var B0,V0,y1,v1;const{state:F1}=E0;if(J2.RemoteCommunication(`[RemoteCommunication: handleAuthorization()] context=${F1.context} ready=${F1.ready} authorized=${F1.authorized} method=${j0.method}`),"7.3".localeCompare(((B0=F1.walletInfo)===null||B0===void 0?void 0:B0.version)||"")===1)return J2.RemoteCommunication(`[RemoteCommunication: handleAuthorization()] compatibility hack wallet version > ${(V0=F1.walletInfo)===null||V0===void 0?void 0:V0.version}`),(y1=F1.communicationLayer)===null||y1===void 0||y1.sendMessage(j0),void M0();!F1.isOriginator||F1.authorized||F1.relayPersistence?((v1=F1.communicationLayer)===null||v1===void 0||v1.sendMessage(j0),M0()):E0.once(o.EventType.AUTHORIZED,()=>{var ov;J2.RemoteCommunication(`[RemoteCommunication: handleAuthorization()] context=${F1.context} AFTER SKIP / AUTHORIZED -- sending pending message`),(ov=F1.communicationLayer)===null||ov===void 0||ov.sendMessage(j0),M0()})})})}(_c,mu)}catch(E0){throw console.error(`[RemoteCommunication: sendMessage()] context=${l0.context} ERROR`,E0),E0}})}(this,ir)}testStorage(){return hS(this,void 0,void 0,function*(){return function(ir){var _c;return hS(this,void 0,void 0,function*(){const mu=yield(_c=ir.storageManager)===null||_c===void 0?void 0:_c.getPersistedChannelConfig();J2.RemoteCommunication("[RemoteCommunication: testStorage()] res",mu)})}(this.state)})}getChannelConfig(){return this.state.channelConfig}isReady(){return this.state.ready}isConnected(){var ir;return(ir=this.state.communicationLayer)===null||ir===void 0?void 0:ir.isConnected()}isAuthorized(){return this.state.authorized}isPaused(){return this.state.paused}getCommunicationLayer(){return this.state.communicationLayer}ping(){var ir;J2.RemoteCommunication(`[RemoteCommunication: ping()] channel=${this.state.channelId}`),(ir=this.state.communicationLayer)===null||ir===void 0||ir.ping()}testLogger(){J2.RemoteCommunication(`testLogger() channel=${this.state.channelId}`),J2.SocketService(`testLogger() channel=${this.state.channelId}`),J2.Ecies(`testLogger() channel=${this.state.channelId}`),J2.KeyExchange(`testLogger() channel=${this.state.channelId}`)}keyCheck(){var ir;J2.RemoteCommunication(`[RemoteCommunication: keyCheck()] channel=${this.state.channelId}`),(ir=this.state.communicationLayer)===null||ir===void 0||ir.keyCheck()}setConnectionStatus(ir){this.state._connectionStatus!==ir&&(this.state._connectionStatus=ir,this.emit(o.EventType.CONNECTION_STATUS,ir),this.emitServiceStatusEvent({context:"setConnectionStatus"}))}emitServiceStatusEvent(ir={}){this.emit(o.EventType.SERVICE_STATUS,this.getServiceStatus())}getConnectionStatus(){return this.state._connectionStatus}getServiceStatus(){return{originatorInfo:this.state.originatorInfo,keyInfo:this.getKeyInfo(),connectionStatus:this.state._connectionStatus,channelConfig:this.state.channelConfig,channelId:this.state.channelId}}getKeyInfo(){var ir;return(ir=this.state.communicationLayer)===null||ir===void 0?void 0:ir.getKeyInfo()}resetKeys(){var ir;(ir=this.state.communicationLayer)===null||ir===void 0||ir.resetKeys()}setOtherPublicKey(ir){var _c;const mu=(_c=this.state.communicationLayer)===null||_c===void 0?void 0:_c.getKeyExchange();if(!mu)throw new Error("KeyExchange is not initialized.");mu.getOtherPublicKey()!==ir&&mu.setOtherPublicKey(ir)}pause(){var ir;J2.RemoteCommunication(`[RemoteCommunication: pause()] channel=${this.state.channelId}`),(ir=this.state.communicationLayer)===null||ir===void 0||ir.pause(),this.setConnectionStatus(o.ConnectionStatus.PAUSED)}getVersion(){return eU}hasRelayPersistence(){var ir;return(ir=this.state.relayPersistence)!==null&&ir!==void 0&&ir}resume(){return function(ir){var _c;const{state:mu}=ir;J2.RemoteCommunication(`[RemoteCommunication: resume()] channel=${mu.channelId}`),(_c=mu.communicationLayer)===null||_c===void 0||_c.resume(),ir.setConnectionStatus(o.ConnectionStatus.LINKED)}(this)}getChannelId(){return this.state.channelId}getRPCMethodTracker(){var ir;return(ir=this.state.communicationLayer)===null||ir===void 0?void 0:ir.getRPCMethodTracker()}disconnect(ir){return rU({options:ir,instance:this})}}function s$(yt,ir,_c,mu){return new(_c||(_c=Promise))(function(Mu,Su){function l0(M0){try{j0(mu.next(M0))}catch(B0){Su(B0)}}function E0(M0){try{j0(mu.throw(M0))}catch(B0){Su(B0)}}function j0(M0){M0.done?Mu(M0.value):function(B0){return B0 instanceof _c?B0:new _c(function(V0){V0(B0)})}(M0.value).then(l0,E0)}j0((mu=mu.apply(yt,[])).next())})}function bne(yt,ir,_c,mu){if(typeof ir=="function"?yt!==ir||!mu:!ir.has(yt))throw new TypeError("Cannot read private member from an object whose class did not declare it");return ir.get(yt)}function wne(yt,ir,_c,mu,Mu){if(typeof ir=="function"?yt!==ir||!Mu:!ir.has(yt))throw new TypeError("Cannot write private member to an object whose class did not declare it");return ir.set(yt,_c),_c}(function(yt){yt.RENEW="renew",yt.LINK="link"})(Kue||(Kue={})),typeof SuppressedError=="function"&&SuppressedError;var Yue="ERC721",Cme="ERC1155",A8={errors:{disconnected:()=>"MetaMask: Disconnected from chain. Attempting to connect.",permanentlyDisconnected:()=>"MetaMask: Disconnected from MetaMask background. Page reload required.",sendSiteMetadata:()=>"MetaMask: Failed to send site metadata. This is an internal error, please report this bug.",unsupportedSync:yt=>`MetaMask: The MetaMask Ethereum provider does not support synchronous methods like ${yt} without a callback parameter.`,invalidDuplexStream:()=>"Must provide a Node.js-style duplex stream.",invalidNetworkParams:()=>"MetaMask: Received invalid network parameters. Please report this bug.",invalidRequestArgs:()=>"Expected a single, non-array, object argument.",invalidRequestMethod:()=>"'args.method' must be a non-empty string.",invalidRequestParams:()=>"'args.params' must be an object or array if provided.",invalidLoggerObject:()=>"'args.logger' must be an object if provided.",invalidLoggerMethod:yt=>`'args.logger' must include required method '${yt}'.`},info:{connected:yt=>`MetaMask: Connected to chain with ID "${yt}".`},warnings:{chainIdDeprecation:`MetaMask: 'ethereum.chainId' is deprecated and may be removed in the future. Please use the 'eth_chainId' RPC method instead. +`)):E0=yt.stylize("[Circular]","special")),qI(l0)){if(xu&&Mu.match(/^\d+$/))return E0;(l0=JSON.stringify(""+Mu)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(l0=l0.substr(1,l0.length-2),l0=yt.stylize(l0,"name")):(l0=l0.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),l0=yt.stylize(l0,"string"))}return l0+": "+E0}function VI(yt){return Array.isArray(yt)}function Rz(yt){return typeof yt=="boolean"}function qL(yt){return yt===null}function Mz(yt){return yt==null}function qG(yt){return typeof yt=="number"}function rF(yt){return typeof yt=="string"}function Iz(yt){return typeof yt=="symbol"}function qI(yt){return yt===void 0}function DC(yt){return WI(yt)&&WG(yt)==="[object RegExp]"}function WI(yt){return typeof yt=="object"&&yt!==null}function EO(yt){return WI(yt)&&WG(yt)==="[object Date]"}function WL(yt){return WI(yt)&&(WG(yt)==="[object Error]"||yt instanceof Error)}function sN(yt){return typeof yt=="function"}function Oz(yt){return yt===null||typeof yt=="boolean"||typeof yt=="number"||typeof yt=="string"||typeof yt=="symbol"||yt===void 0}function fee(yt){return vw(yt)}function WG(yt){return Object.prototype.toString.call(yt)}function qV(yt){return yt<10?"0"+yt.toString(10):yt.toString(10)}I6.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},I6.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};var dee=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function qae(){console.log("%s - %s",function(){var yt=new Date,ir=[qV(yt.getHours()),qV(yt.getMinutes()),qV(yt.getSeconds())].join(":");return[yt.getDate(),dee[yt.getMonth()],ir].join(" ")}(),g8.apply(null,arguments))}function GG(yt,ir){if(!ir||!WI(ir))return yt;for(var _c=Object.keys(ir),mu=_c.length;mu--;)yt[_c[mu]]=ir[_c[mu]];return yt}function YG(yt,ir){return Object.prototype.hasOwnProperty.call(yt,ir)}var ZG,JG,Wae={inherits:D_,_extend:GG,log:qae,isBuffer:fee,isPrimitive:Oz,isFunction:sN,isError:WL,isDate:EO,isObject:WI,isRegExp:DC,isUndefined:qI,isSymbol:Iz,isString:rF,isNumber:qG,isNullOrUndefined:Mz,isNull:qL,isBoolean:Rz,isArray:VI,inspect:I6,deprecate:y8,format:g8,debuglog:sR},Gae=tt(Object.freeze({__proto__:null,_extend:GG,debuglog:sR,default:Wae,deprecate:y8,format:g8,inherits:D_,inspect:I6,isArray:VI,isBoolean:Rz,isBuffer:fee,isDate:EO,isError:WL,isFunction:sN,isNull:qL,isNullOrUndefined:Mz,isNumber:qG,isObject:WI,isPrimitive:Oz,isRegExp:DC,isString:rF,isSymbol:Iz,isUndefined:qI,log:qae}));function hee(yt,ir){QG(yt,ir),XG(yt)}function XG(yt){yt._writableState&&!yt._writableState.emitClose||yt._readableState&&!yt._readableState.emitClose||yt.emit("close")}function QG(yt,ir){yt.emit("error",ir)}var WV={destroy:function(yt,ir){var _c=this,mu=this._readableState&&this._readableState.destroyed,Mu=this._writableState&&this._writableState.destroyed;return mu||Mu?(ir?ir(yt):yt&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,$2(QG,this,yt)):$2(QG,this,yt)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(yt||null,function(xu){!ir&&xu?_c._writableState?_c._writableState.errorEmitted?$2(XG,_c):(_c._writableState.errorEmitted=!0,$2(hee,_c,xu)):$2(hee,_c,xu):ir?($2(XG,_c),ir(xu)):$2(XG,_c)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(yt,ir){var _c=yt._readableState,mu=yt._writableState;_c&&_c.autoDestroy||mu&&mu.autoDestroy?yt.destroy(ir):yt.emit("error",ir)}},lN={},pee={};function A7(yt,ir,_c){_c||(_c=Error);var mu=function(Mu){var xu,l0;function E0(j0,M0,B0){return Mu.call(this,function(q0,y1,v1){return typeof ir=="string"?ir:ir(q0,y1,v1)}(j0,M0,B0))||this}return l0=Mu,(xu=E0).prototype=Object.create(l0.prototype),xu.prototype.constructor=xu,xu.__proto__=l0,E0}(_c);mu.prototype.name=_c.name,mu.prototype.code=yt,pee[yt]=mu}function mee(yt,ir){if(Array.isArray(yt)){var _c=yt.length;return yt=yt.map(function(mu){return String(mu)}),_c>2?"one of ".concat(ir," ").concat(yt.slice(0,_c-1).join(", "),", or ")+yt[_c-1]:_c===2?"one of ".concat(ir," ").concat(yt[0]," or ").concat(yt[1]):"of ".concat(ir," ").concat(yt[0])}return"of ".concat(ir," ").concat(String(yt))}A7("ERR_INVALID_OPT_VALUE",function(yt,ir){return'The value "'+ir+'" is invalid for option "'+yt+'"'},TypeError),A7("ERR_INVALID_ARG_TYPE",function(yt,ir,_c){var mu,Mu,xu;if(typeof ir=="string"&&(Mu="not ",ir.substr(0,4)===Mu)?(mu="must not be",ir=ir.replace(/^not /,"")):mu="must be",function(E0,j0,M0){return(M0===void 0||M0>E0.length)&&(M0=E0.length),E0.substring(M0-9,M0)===j0}(yt," argument"))xu="The ".concat(yt," ").concat(mu," ").concat(mee(ir,"type"));else{var l0=function(E0,j0,M0){return typeof M0!="number"&&(M0=0),!(M0+1>E0.length)&&E0.indexOf(".",M0)!==-1}(yt)?"property":"argument";xu='The "'.concat(yt,'" ').concat(l0," ").concat(mu," ").concat(mee(ir,"type"))}return xu+". Received type ".concat(typeof _c)},TypeError),A7("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),A7("ERR_METHOD_NOT_IMPLEMENTED",function(yt){return"The "+yt+" method is not implemented"}),A7("ERR_STREAM_PREMATURE_CLOSE","Premature close"),A7("ERR_STREAM_DESTROYED",function(yt){return"Cannot call "+yt+" after a stream was destroyed"}),A7("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),A7("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),A7("ERR_STREAM_WRITE_AFTER_END","write after end"),A7("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),A7("ERR_UNKNOWN_ENCODING",function(yt){return"Unknown encoding: "+yt},TypeError),A7("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),lN.codes=pee;var FC,gee,GV,vee,yee=lN.codes.ERR_INVALID_OPT_VALUE,bee={getHighWaterMark:function(yt,ir,_c,mu){var Mu=function(xu,l0,E0){return xu.highWaterMark!=null?xu.highWaterMark:l0?xu[E0]:null}(ir,mu,_c);if(Mu!=null){if(!isFinite(Mu)||Math.floor(Mu)!==Mu||Mu<0)throw new yee(mu?_c:"highWaterMark",Mu);return Math.floor(Mu)}return yt.objectMode?16:16384}},mpe=function(yt,ir){if(eY("noDeprecation"))return yt;var _c=!1;return function(){if(!_c){if(eY("throwDeprecation"))throw new Error(ir);eY("traceDeprecation")?console.trace(ir):console.warn(ir),_c=!0}return yt.apply(this,arguments)}};function eY(yt){try{if(!c.localStorage)return!1}catch{return!1}var ir=c.localStorage[yt];return ir!=null&&String(ir).toLowerCase()==="true"}function Yae(){if(gee)return FC;function yt(g0){var d0=this;this.next=null,this.entry=null,this.finish=function(){(function(c0,a0,S0){var z0=c0.entry;for(c0.entry=null;z0;){var Q0=z0.callback;a0.pendingcb--,Q0(void 0),z0=z0.next}a0.corkedRequestsFree.next=c0})(d0,g0)}}var ir;gee=1,FC=fy,fy.WritableState=oy;var _c,mu=mpe,Mu=M6,xu=zw.Buffer,l0=(c!==void 0?c:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){},E0=WV,j0=bee.getHighWaterMark,M0=lN.codes,B0=M0.ERR_INVALID_ARG_TYPE,q0=M0.ERR_METHOD_NOT_IMPLEMENTED,y1=M0.ERR_MULTIPLE_CALLBACK,v1=M0.ERR_STREAM_CANNOT_PIPE,F1=M0.ERR_STREAM_DESTROYED,ov=M0.ERR_STREAM_NULL_VALUES,bv=M0.ERR_STREAM_WRITE_AFTER_END,gv=M0.ERR_UNKNOWN_ENCODING,xv=E0.errorOrDestroy;function hy(){}function oy(g0,d0,c0){ir=ir||GL(),g0=g0||{},typeof c0!="boolean"&&(c0=d0 instanceof ir),this.objectMode=!!g0.objectMode,c0&&(this.objectMode=this.objectMode||!!g0.writableObjectMode),this.highWaterMark=j0(this,g0,"writableHighWaterMark",c0),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a0=g0.decodeStrings===!1;this.decodeStrings=!a0,this.defaultEncoding=g0.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(S0){(function(z0,Q0){var p1=z0._writableState,T1=p1.sync,U1=p1.writecb;if(typeof U1!="function")throw new y1;if(function(n1){n1.writing=!1,n1.writecb=null,n1.length-=n1.writelen,n1.writelen=0}(p1),Q0)(function(n1,V1,J1,wv,Sv){--V1.pendingcb,J1?($2(Sv,wv),$2(s0,n1,V1),n1._writableState.errorEmitted=!0,xv(n1,wv)):(Sv(wv),n1._writableState.errorEmitted=!0,xv(n1,wv),s0(n1,V1))})(z0,p1,T1,Q0,U1);else{var S1=T0(p1)||z0.destroyed;S1||p1.corked||p1.bufferProcessing||!p1.bufferedRequest||Qv(z0,p1),T1?$2(qv,z0,p1,S1,U1):qv(z0,p1,S1,U1)}})(d0,S0)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=g0.emitClose!==!1,this.autoDestroy=!!g0.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new yt(this)}function fy(g0){var d0=this instanceof(ir=ir||GL());if(!d0&&!_c.call(fy,this))return new fy(g0);this._writableState=new oy(g0,this,d0),this.writable=!0,g0&&(typeof g0.write=="function"&&(this._write=g0.write),typeof g0.writev=="function"&&(this._writev=g0.writev),typeof g0.destroy=="function"&&(this._destroy=g0.destroy),typeof g0.final=="function"&&(this._final=g0.final)),Mu.call(this)}function Fy(g0,d0,c0,a0,S0,z0,Q0){d0.writelen=a0,d0.writecb=Q0,d0.writing=!0,d0.sync=!0,d0.destroyed?d0.onwrite(new F1("write")):c0?g0._writev(S0,d0.onwrite):g0._write(S0,z0,d0.onwrite),d0.sync=!1}function qv(g0,d0,c0,a0){c0||function(S0,z0){z0.length===0&&z0.needDrain&&(z0.needDrain=!1,S0.emit("drain"))}(g0,d0),d0.pendingcb--,a0(),s0(g0,d0)}function Qv(g0,d0){d0.bufferProcessing=!0;var c0=d0.bufferedRequest;if(g0._writev&&c0&&c0.next){var a0=d0.bufferedRequestCount,S0=new Array(a0),z0=d0.corkedRequestsFree;z0.entry=c0;for(var Q0=0,p1=!0;c0;)S0[Q0]=c0,c0.isBuf||(p1=!1),c0=c0.next,Q0+=1;S0.allBuffers=p1,Fy(g0,d0,!0,d0.length,S0,"",z0.finish),d0.pendingcb++,d0.lastBufferedRequest=null,z0.next?(d0.corkedRequestsFree=z0.next,z0.next=null):d0.corkedRequestsFree=new yt(d0),d0.bufferedRequestCount=0}else{for(;c0;){var T1=c0.chunk,U1=c0.encoding,S1=c0.callback;if(Fy(g0,d0,!1,d0.objectMode?1:T1.length,T1,U1,S1),c0=c0.next,d0.bufferedRequestCount--,d0.writing)break}c0===null&&(d0.lastBufferedRequest=null)}d0.bufferedRequest=c0,d0.bufferProcessing=!1}function T0(g0){return g0.ending&&g0.length===0&&g0.bufferedRequest===null&&!g0.finished&&!g0.writing}function X0(g0,d0){g0._final(function(c0){d0.pendingcb--,c0&&xv(g0,c0),d0.prefinished=!0,g0.emit("prefinish"),s0(g0,d0)})}function s0(g0,d0){var c0=T0(d0);if(c0&&(function(S0,z0){z0.prefinished||z0.finalCalled||(typeof S0._final!="function"||z0.destroyed?(z0.prefinished=!0,S0.emit("prefinish")):(z0.pendingcb++,z0.finalCalled=!0,$2(X0,S0,z0)))}(g0,d0),d0.pendingcb===0&&(d0.finished=!0,g0.emit("finish"),d0.autoDestroy))){var a0=g0._readableState;(!a0||a0.autoDestroy&&a0.endEmitted)&&g0.destroy()}return c0}return Gw(fy,Mu),oy.prototype.getBuffer=function(){for(var g0=this.bufferedRequest,d0=[];g0;)d0.push(g0),g0=g0.next;return d0},function(){try{Object.defineProperty(oy.prototype,"buffer",{get:mu(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}(),typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(_c=Function.prototype[Symbol.hasInstance],Object.defineProperty(fy,Symbol.hasInstance,{value:function(g0){return!!_c.call(this,g0)||this===fy&&g0&&g0._writableState instanceof oy}})):_c=function(g0){return g0 instanceof this},fy.prototype.pipe=function(){xv(this,new v1)},fy.prototype.write=function(g0,d0,c0){var a0,S0=this._writableState,z0=!1,Q0=!S0.objectMode&&(a0=g0,xu.isBuffer(a0)||a0 instanceof l0);return Q0&&!xu.isBuffer(g0)&&(g0=function(p1){return xu.from(p1)}(g0)),typeof d0=="function"&&(c0=d0,d0=null),Q0?d0="buffer":d0||(d0=S0.defaultEncoding),typeof c0!="function"&&(c0=hy),S0.ending?function(p1,T1){var U1=new bv;xv(p1,U1),$2(T1,U1)}(this,c0):(Q0||function(p1,T1,U1,S1){var n1;return U1===null?n1=new ov:typeof U1=="string"||T1.objectMode||(n1=new B0("chunk",["string","Buffer"],U1)),!n1||(xv(p1,n1),$2(S1,n1),!1)}(this,S0,g0,c0))&&(S0.pendingcb++,z0=function(p1,T1,U1,S1,n1,V1){if(!U1){var J1=function(ty,gy,yv){return ty.objectMode||ty.decodeStrings===!1||typeof gy!="string"||(gy=xu.from(gy,yv)),gy}(T1,S1,n1);S1!==J1&&(U1=!0,n1="buffer",S1=J1)}var wv=T1.objectMode?1:S1.length;T1.length+=wv;var Sv=T1.length-1))throw new gv(g0);return this._writableState.defaultEncoding=g0,this},Object.defineProperty(fy.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(fy.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),fy.prototype._write=function(g0,d0,c0){c0(new q0("_write()"))},fy.prototype._writev=null,fy.prototype.end=function(g0,d0,c0){var a0=this._writableState;return typeof g0=="function"?(c0=g0,g0=null,d0=null):typeof d0=="function"&&(c0=d0,d0=null),g0!=null&&this.write(g0,d0),a0.corked&&(a0.corked=1,this.uncork()),a0.ending||function(S0,z0,Q0){z0.ending=!0,s0(S0,z0),Q0&&(z0.finished?$2(Q0):S0.once("finish",Q0)),z0.ended=!0,S0.writable=!1}(this,a0,c0),this},Object.defineProperty(fy.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(fy.prototype,"destroyed",{enumerable:!1,get:function(){return this._writableState!==void 0&&this._writableState.destroyed},set:function(g0){this._writableState&&(this._writableState.destroyed=g0)}}),fy.prototype.destroy=E0.destroy,fy.prototype._undestroy=E0.undestroy,fy.prototype._destroy=function(g0,d0){d0(g0)},FC}function GL(){if(vee)return GV;vee=1;var yt=Object.keys||function(M0){var B0=[];for(var q0 in M0)B0.push(q0);return B0};GV=l0;var ir=_ee(),_c=Yae();Gw(l0,ir);for(var mu=yt(_c.prototype),Mu=0;Mu>5==6?2:q0>>4==14?3:q0>>3==30?4:q0>>6==2?-1:-2}function Mu(q0){var y1=this.lastTotal-this.lastNeed,v1=function(F1,ov,bv){if((192&ov[0])!=128)return F1.lastNeed=0,"�";if(F1.lastNeed>1&&ov.length>1){if((192&ov[1])!=128)return F1.lastNeed=1,"�";if(F1.lastNeed>2&&ov.length>2&&(192&ov[2])!=128)return F1.lastNeed=2,"�"}}(this,q0);return v1!==void 0?v1:this.lastNeed<=q0.length?(q0.copy(this.lastChar,y1,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(q0.copy(this.lastChar,y1,0,q0.length),void(this.lastNeed-=q0.length))}function xu(q0,y1){if((q0.length-y1)%2==0){var v1=q0.toString("utf16le",y1);if(v1){var F1=v1.charCodeAt(v1.length-1);if(F1>=55296&&F1<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=q0[q0.length-2],this.lastChar[1]=q0[q0.length-1],v1.slice(0,-1)}return v1}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=q0[q0.length-1],q0.toString("utf16le",y1,q0.length-1)}function l0(q0){var y1=q0&&q0.length?this.write(q0):"";if(this.lastNeed){var v1=this.lastTotal-this.lastNeed;return y1+this.lastChar.toString("utf16le",0,v1)}return y1}function E0(q0,y1){var v1=(q0.length-y1)%3;return v1===0?q0.toString("base64",y1):(this.lastNeed=3-v1,this.lastTotal=3,v1===1?this.lastChar[0]=q0[q0.length-1]:(this.lastChar[0]=q0[q0.length-2],this.lastChar[1]=q0[q0.length-1]),q0.toString("base64",y1,q0.length-v1))}function j0(q0){var y1=q0&&q0.length?this.write(q0):"";return this.lastNeed?y1+this.lastChar.toString("base64",0,3-this.lastNeed):y1}function M0(q0){return q0.toString(this.encoding)}function B0(q0){return q0&&q0.length?this.write(q0):""}return YL.StringDecoder=_c,_c.prototype.write=function(q0){if(q0.length===0)return"";var y1,v1;if(this.lastNeed){if((y1=this.fillLast(q0))===void 0)return"";v1=this.lastNeed,this.lastNeed=0}else v1=0;return v1=0?(hy>0&&(ov.lastNeed=hy-1),hy):--xv=0?(hy>0&&(ov.lastNeed=hy-2),hy):--xv=0?(hy>0&&(hy===2?hy=0:ov.lastNeed=hy-3),hy):0}(this,q0,y1);if(!this.lastNeed)return q0.toString("utf8",y1);this.lastTotal=v1;var F1=q0.length-(v1-this.lastNeed);return q0.copy(this.lastChar,0,F1),q0.toString("utf8",y1,F1)},_c.prototype.fillLast=function(q0){if(this.lastNeed<=q0.length)return q0.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);q0.copy(this.lastChar,this.lastTotal-this.lastNeed,0,q0.length),this.lastNeed-=q0.length},YL}var tY=lN.codes.ERR_STREAM_PREMATURE_CLOSE;function Zae(){}var rY,Jae,nY,Eee,iY,Aee,YV=function yt(ir,_c,mu){if(typeof _c=="function")return yt(ir,null,_c);_c||(_c={}),mu=function(F1){var ov=!1;return function(){if(!ov){ov=!0;for(var bv=arguments.length,gv=new Array(bv),xv=0;xv0?this.tail.next=ry:this.head=ry,this.tail=ry,++this.length}},{key:"unshift",value:function(Dv){var ry={data:Dv,next:this.head};this.length===0&&(this.tail=ry),this.head=ry,++this.length}},{key:"shift",value:function(){if(this.length!==0){var Dv=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,Dv}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(Dv){if(this.length===0)return"";for(var ry=this.head,Jv=""+ry.data;ry=ry.next;)Jv+=Dv+ry.data;return Jv}},{key:"concat",value:function(Dv){if(this.length===0)return Sv.alloc(0);for(var ry,Jv,Fv,iy=Sv.allocUnsafe(Dv>>>0),cy=this.head,Uy=0;cy;)ry=cy.data,Jv=iy,Fv=Uy,Sv.prototype.copy.call(ry,Jv,Fv),Uy+=cy.data.length,cy=cy.next;return iy}},{key:"consume",value:function(Dv,ry){var Jv;return Dviy.length?iy.length:Dv;if(cy===iy.length?Fv+=iy:Fv+=iy.slice(0,Dv),(Dv-=cy)==0){cy===iy.length?(++Jv,ry.next?this.head=ry.next:this.head=this.tail=null):(this.head=ry,ry.data=iy.slice(cy));break}++Jv}return this.length-=Jv,Fv}},{key:"_getBuffer",value:function(Dv){var ry=Sv.allocUnsafe(Dv),Jv=this.head,Fv=1;for(Jv.data.copy(ry),Dv-=Jv.data.length;Jv=Jv.next;){var iy=Jv.data,cy=Dv>iy.length?iy.length:Dv;if(iy.copy(ry,ry.length-Dv,0,cy),(Dv-=cy)==0){cy===iy.length?(++Fv,Jv.next?this.head=Jv.next:this.head=this.tail=null):(this.head=Jv,Jv.data=iy.slice(cy));break}++Fv}return this.length-=Fv,ry}},{key:ty,value:function(Dv,ry){return Hv(this,n1(n1({},ry),{},{depth:0,customInspect:!1}))}}],Av&&J1(yv.prototype,Av),Object.defineProperty(yv,"prototype",{writable:!1}),gy}(),ZG}(),q0=WV,y1=bee.getHighWaterMark,v1=lN.codes,F1=v1.ERR_INVALID_ARG_TYPE,ov=v1.ERR_STREAM_PUSH_AFTER_EOF,bv=v1.ERR_METHOD_NOT_IMPLEMENTED,gv=v1.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;Gw(fy,mu);var xv=q0.errorOrDestroy,hy=["error","close","destroy","pause","resume"];function oy(S1,n1,V1){yt=yt||GL(),S1=S1||{},typeof V1!="boolean"&&(V1=n1 instanceof yt),this.objectMode=!!S1.objectMode,V1&&(this.objectMode=this.objectMode||!!S1.readableObjectMode),this.highWaterMark=y1(this,S1,"readableHighWaterMark",V1),this.buffer=new B0,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=S1.emitClose!==!1,this.autoDestroy=!!S1.autoDestroy,this.destroyed=!1,this.defaultEncoding=S1.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,S1.encoding&&(E0||(E0=$ee().StringDecoder),this.decoder=new E0(S1.encoding),this.encoding=S1.encoding)}function fy(S1){if(yt=yt||GL(),!(this instanceof fy))return new fy(S1);var n1=this instanceof yt;this._readableState=new oy(S1,this,n1),this.readable=!0,S1&&(typeof S1.read=="function"&&(this._read=S1.read),typeof S1.destroy=="function"&&(this._destroy=S1.destroy)),mu.call(this)}function Fy(S1,n1,V1,J1,wv){ir("readableAddChunk",n1);var Sv,Hv=S1._readableState;if(n1===null)Hv.reading=!1,function(ty,gy){if(ir("onEofChunk"),!gy.ended){if(gy.decoder){var yv=gy.decoder.end();yv&&yv.length&&(gy.buffer.push(yv),gy.length+=gy.objectMode?1:yv.length)}gy.ended=!0,gy.sync?X0(ty):(gy.needReadable=!1,gy.emittedReadable||(gy.emittedReadable=!0,s0(ty)))}}(S1,Hv);else if(wv||(Sv=function(ty,gy){var yv,Av;return Av=gy,Mu.isBuffer(Av)||Av instanceof xu||typeof gy=="string"||gy===void 0||ty.objectMode||(yv=new F1("chunk",["string","Buffer","Uint8Array"],gy)),yv}(Hv,n1)),Sv)xv(S1,Sv);else if(Hv.objectMode||n1&&n1.length>0)if(typeof n1=="string"||Hv.objectMode||Object.getPrototypeOf(n1)===Mu.prototype||(n1=function(ty){return Mu.from(ty)}(n1)),J1)Hv.endEmitted?xv(S1,new gv):qv(S1,Hv,n1,!0);else if(Hv.ended)xv(S1,new ov);else{if(Hv.destroyed)return!1;Hv.reading=!1,Hv.decoder&&!V1?(n1=Hv.decoder.write(n1),Hv.objectMode||n1.length!==0?qv(S1,Hv,n1,!1):g0(S1,Hv)):qv(S1,Hv,n1,!1)}else J1||(Hv.reading=!1,g0(S1,Hv));return!Hv.ended&&(Hv.lengthn1.highWaterMark&&(n1.highWaterMark=function(V1){return V1>=Qv?V1=Qv:(V1--,V1|=V1>>>1,V1|=V1>>>2,V1|=V1>>>4,V1|=V1>>>8,V1|=V1>>>16,V1++),V1}(S1)),S1<=n1.length?S1:n1.ended?n1.length:(n1.needReadable=!0,0))}function X0(S1){var n1=S1._readableState;ir("emitReadable",n1.needReadable,n1.emittedReadable),n1.needReadable=!1,n1.emittedReadable||(ir("emitReadable",n1.flowing),n1.emittedReadable=!0,$2(s0,S1))}function s0(S1){var n1=S1._readableState;ir("emitReadable_",n1.destroyed,n1.length,n1.ended),n1.destroyed||!n1.length&&!n1.ended||(S1.emit("readable"),n1.emittedReadable=!1),n1.needReadable=!n1.flowing&&!n1.ended&&n1.length<=n1.highWaterMark,z0(S1)}function g0(S1,n1){n1.readingMore||(n1.readingMore=!0,$2(d0,S1,n1))}function d0(S1,n1){for(;!n1.reading&&!n1.ended&&(n1.length0,n1.resumeScheduled&&!n1.paused?n1.flowing=!0:S1.listenerCount("data")>0&&S1.resume()}function a0(S1){ir("readable nexttick read 0"),S1.read(0)}function S0(S1,n1){ir("resume",n1.reading),n1.reading||S1.read(0),n1.resumeScheduled=!1,S1.emit("resume"),z0(S1),n1.flowing&&!n1.reading&&S1.read(0)}function z0(S1){var n1=S1._readableState;for(ir("flow",n1.flowing);n1.flowing&&S1.read()!==null;);}function Q0(S1,n1){return n1.length===0?null:(n1.objectMode?V1=n1.buffer.shift():!S1||S1>=n1.length?(V1=n1.decoder?n1.buffer.join(""):n1.buffer.length===1?n1.buffer.first():n1.buffer.concat(n1.length),n1.buffer.clear()):V1=n1.buffer.consume(S1,n1.decoder),V1);var V1}function p1(S1){var n1=S1._readableState;ir("endReadable",n1.endEmitted),n1.endEmitted||(n1.ended=!0,$2(T1,n1,S1))}function T1(S1,n1){if(ir("endReadableNT",S1.endEmitted,S1.length),!S1.endEmitted&&S1.length===0&&(S1.endEmitted=!0,n1.readable=!1,n1.emit("end"),S1.autoDestroy)){var V1=n1._writableState;(!V1||V1.autoDestroy&&V1.finished)&&n1.destroy()}}function U1(S1,n1){for(var V1=0,J1=S1.length;V1=n1.highWaterMark:n1.length>0)||n1.ended))return ir("read: emitReadable",n1.length,n1.ended),n1.length===0&&n1.ended?p1(this):X0(this),null;if((S1=T0(S1,n1))===0&&n1.ended)return n1.length===0&&p1(this),null;var J1,wv=n1.needReadable;return ir("need readable",wv),(n1.length===0||n1.length-S10?Q0(S1,n1):null)===null?(n1.needReadable=n1.length<=n1.highWaterMark,S1=0):(n1.length-=S1,n1.awaitDrain=0),n1.length===0&&(n1.ended||(n1.needReadable=!0),V1!==S1&&n1.ended&&p1(this)),J1!==null&&this.emit("data",J1),J1},fy.prototype._read=function(S1){xv(this,new bv("_read()"))},fy.prototype.pipe=function(S1,n1){var V1=this,J1=this._readableState;switch(J1.pipesCount){case 0:J1.pipes=S1;break;case 1:J1.pipes=[J1.pipes,S1];break;default:J1.pipes.push(S1)}J1.pipesCount+=1,ir("pipe count=%d opts=%j",J1.pipesCount,n1);var wv=n1&&n1.end===!1||S1===Kv.stdout||S1===Kv.stderr?ry:Sv;function Sv(){ir("onend"),S1.end()}J1.endEmitted?$2(wv):V1.once("end",wv),S1.on("unpipe",function Jv(Fv,iy){ir("onunpipe"),Fv===V1&&iy&&iy.hasUnpiped===!1&&(iy.hasUnpiped=!0,ir("cleanup"),S1.removeListener("close",Av),S1.removeListener("finish",Dv),S1.removeListener("drain",Hv),S1.removeListener("error",yv),S1.removeListener("unpipe",Jv),V1.removeListener("end",Sv),V1.removeListener("end",ry),V1.removeListener("data",gy),ty=!0,!J1.awaitDrain||S1._writableState&&!S1._writableState.needDrain||Hv())});var Hv=function(Jv){return function(){var Fv=Jv._readableState;ir("pipeOnDrain",Fv.awaitDrain),Fv.awaitDrain&&Fv.awaitDrain--,Fv.awaitDrain===0&&_c(Jv,"data")&&(Fv.flowing=!0,z0(Jv))}}(V1);S1.on("drain",Hv);var ty=!1;function gy(Jv){ir("ondata");var Fv=S1.write(Jv);ir("dest.write",Fv),Fv===!1&&((J1.pipesCount===1&&J1.pipes===S1||J1.pipesCount>1&&U1(J1.pipes,S1)!==-1)&&!ty&&(ir("false write response, pause",J1.awaitDrain),J1.awaitDrain++),V1.pause())}function yv(Jv){ir("onerror",Jv),ry(),S1.removeListener("error",yv),_c(S1,"error")===0&&xv(S1,Jv)}function Av(){S1.removeListener("finish",Dv),ry()}function Dv(){ir("onfinish"),S1.removeListener("close",Av),ry()}function ry(){ir("unpipe"),V1.unpipe(S1)}return V1.on("data",gy),function(Jv,Fv,iy){if(typeof Jv.prependListener=="function")return Jv.prependListener(Fv,iy);Jv._events&&Jv._events[Fv]?Array.isArray(Jv._events[Fv])?Jv._events[Fv].unshift(iy):Jv._events[Fv]=[iy,Jv._events[Fv]]:Jv.on(Fv,iy)}(S1,"error",yv),S1.once("close",Av),S1.once("finish",Dv),S1.emit("pipe",V1),J1.flowing||(ir("pipe resume"),V1.resume()),S1},fy.prototype.unpipe=function(S1){var n1=this._readableState,V1={hasUnpiped:!1};if(n1.pipesCount===0)return this;if(n1.pipesCount===1)return S1&&S1!==n1.pipes||(S1||(S1=n1.pipes),n1.pipes=null,n1.pipesCount=0,n1.flowing=!1,S1&&S1.emit("unpipe",this,V1)),this;if(!S1){var J1=n1.pipes,wv=n1.pipesCount;n1.pipes=null,n1.pipesCount=0,n1.flowing=!1;for(var Sv=0;Sv0,J1.flowing!==!1&&this.resume()):S1==="readable"&&(J1.endEmitted||J1.readableListening||(J1.readableListening=J1.needReadable=!0,J1.flowing=!1,J1.emittedReadable=!1,ir("on readable",J1.length,J1.reading),J1.length?X0(this):J1.reading||$2(a0,this))),V1},fy.prototype.addListener=fy.prototype.on,fy.prototype.removeListener=function(S1,n1){var V1=mu.prototype.removeListener.call(this,S1,n1);return S1==="readable"&&$2(c0,this),V1},fy.prototype.removeAllListeners=function(S1){var n1=mu.prototype.removeAllListeners.apply(this,arguments);return S1!=="readable"&&S1!==void 0||$2(c0,this),n1},fy.prototype.resume=function(){var S1=this._readableState;return S1.flowing||(ir("resume"),S1.flowing=!S1.readableListening,function(n1,V1){V1.resumeScheduled||(V1.resumeScheduled=!0,$2(S0,n1,V1))}(this,S1)),S1.paused=!1,this},fy.prototype.pause=function(){return ir("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(ir("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},fy.prototype.wrap=function(S1){var n1=this,V1=this._readableState,J1=!1;for(var wv in S1.on("end",function(){if(ir("wrapped end"),V1.decoder&&!V1.ended){var Hv=V1.decoder.end();Hv&&Hv.length&&n1.push(Hv)}n1.push(null)}),S1.on("data",function(Hv){ir("wrapped data"),V1.decoder&&(Hv=V1.decoder.write(Hv)),V1.objectMode&&Hv==null||(V1.objectMode||Hv&&Hv.length)&&(n1.push(Hv)||(J1=!0,S1.pause()))}),S1)this[wv]===void 0&&typeof S1[wv]=="function"&&(this[wv]=function(Hv){return function(){return S1[Hv].apply(S1,arguments)}}(wv));for(var Sv=0;Sv0,function(M0){mu||(mu=M0),M0&&xu.forEach(nse),j0||(xu.forEach(nse),Mu(mu))})});return ir.reduce(bpe)};(function(yt,ir){(ir=yt.exports=_ee()).Stream=ir,ir.Readable=ir,ir.Writable=Yae(),ir.Duplex=GL(),ir.Transform=oY,ir.PassThrough=ype,ir.finished=YV,ir.pipeline=ise})(g3,g3.exports);var AO=g3.exports,uY=Sy().Buffer,ose=AO.Transform;function X9(yt){ose.call(this),this._block=uY.allocUnsafe(yt),this._blockSize=yt,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}Gw(X9,ose),X9.prototype._transform=function(yt,ir,_c){var mu=null;try{this.update(yt,ir)}catch(Mu){mu=Mu}_c(mu)},X9.prototype._flush=function(yt){var ir=null;try{this.push(this.digest())}catch(_c){ir=_c}yt(ir)},X9.prototype.update=function(yt,ir){if(function(E0,j0){if(!uY.isBuffer(E0)&&typeof E0!="string")throw new TypeError("Data must be a string or a buffer")}(yt),this._finalized)throw new Error("Digest already called");uY.isBuffer(yt)||(yt=uY.from(yt,ir));for(var _c=this._block,mu=0;this._blockOffset+yt.length-mu>=this._blockSize;){for(var Mu=this._blockOffset;Mu0;++xu)this._length[xu]+=l0,(l0=this._length[xu]/4294967296|0)>0&&(this._length[xu]-=4294967296*l0);return this},X9.prototype._update=function(){throw new Error("_update is not implemented")},X9.prototype.digest=function(yt){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var ir=this._digest();yt!==void 0&&(ir=ir.toString(yt)),this._block.fill(0),this._blockOffset=0;for(var _c=0;_c<4;++_c)this._length[_c]=0;return ir},X9.prototype._digest=function(){throw new Error("_digest is not implemented")};var JV=X9,ase=Gw,uN=JV,sse=Sy().Buffer,wpe=new Array(16);function XV(){uN.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function fY(yt,ir){return yt<>>32-ir}function Q9(yt,ir,_c,mu,Mu,xu,l0){return fY(yt+(ir&_c|~ir&mu)+Mu+xu|0,l0)+ir|0}function O6(yt,ir,_c,mu,Mu,xu,l0){return fY(yt+(ir&mu|_c&~mu)+Mu+xu|0,l0)+ir|0}function P6(yt,ir,_c,mu,Mu,xu,l0){return fY(yt+(ir^_c^mu)+Mu+xu|0,l0)+ir|0}function vA(yt,ir,_c,mu,Mu,xu,l0){return fY(yt+(_c^(ir|~mu))+Mu+xu|0,l0)+ir|0}ase(XV,uN),XV.prototype._update=function(){for(var yt=wpe,ir=0;ir<16;++ir)yt[ir]=this._block.readInt32LE(4*ir);var _c=this._a,mu=this._b,Mu=this._c,xu=this._d;_c=Q9(_c,mu,Mu,xu,yt[0],3614090360,7),xu=Q9(xu,_c,mu,Mu,yt[1],3905402710,12),Mu=Q9(Mu,xu,_c,mu,yt[2],606105819,17),mu=Q9(mu,Mu,xu,_c,yt[3],3250441966,22),_c=Q9(_c,mu,Mu,xu,yt[4],4118548399,7),xu=Q9(xu,_c,mu,Mu,yt[5],1200080426,12),Mu=Q9(Mu,xu,_c,mu,yt[6],2821735955,17),mu=Q9(mu,Mu,xu,_c,yt[7],4249261313,22),_c=Q9(_c,mu,Mu,xu,yt[8],1770035416,7),xu=Q9(xu,_c,mu,Mu,yt[9],2336552879,12),Mu=Q9(Mu,xu,_c,mu,yt[10],4294925233,17),mu=Q9(mu,Mu,xu,_c,yt[11],2304563134,22),_c=Q9(_c,mu,Mu,xu,yt[12],1804603682,7),xu=Q9(xu,_c,mu,Mu,yt[13],4254626195,12),Mu=Q9(Mu,xu,_c,mu,yt[14],2792965006,17),_c=O6(_c,mu=Q9(mu,Mu,xu,_c,yt[15],1236535329,22),Mu,xu,yt[1],4129170786,5),xu=O6(xu,_c,mu,Mu,yt[6],3225465664,9),Mu=O6(Mu,xu,_c,mu,yt[11],643717713,14),mu=O6(mu,Mu,xu,_c,yt[0],3921069994,20),_c=O6(_c,mu,Mu,xu,yt[5],3593408605,5),xu=O6(xu,_c,mu,Mu,yt[10],38016083,9),Mu=O6(Mu,xu,_c,mu,yt[15],3634488961,14),mu=O6(mu,Mu,xu,_c,yt[4],3889429448,20),_c=O6(_c,mu,Mu,xu,yt[9],568446438,5),xu=O6(xu,_c,mu,Mu,yt[14],3275163606,9),Mu=O6(Mu,xu,_c,mu,yt[3],4107603335,14),mu=O6(mu,Mu,xu,_c,yt[8],1163531501,20),_c=O6(_c,mu,Mu,xu,yt[13],2850285829,5),xu=O6(xu,_c,mu,Mu,yt[2],4243563512,9),Mu=O6(Mu,xu,_c,mu,yt[7],1735328473,14),_c=P6(_c,mu=O6(mu,Mu,xu,_c,yt[12],2368359562,20),Mu,xu,yt[5],4294588738,4),xu=P6(xu,_c,mu,Mu,yt[8],2272392833,11),Mu=P6(Mu,xu,_c,mu,yt[11],1839030562,16),mu=P6(mu,Mu,xu,_c,yt[14],4259657740,23),_c=P6(_c,mu,Mu,xu,yt[1],2763975236,4),xu=P6(xu,_c,mu,Mu,yt[4],1272893353,11),Mu=P6(Mu,xu,_c,mu,yt[7],4139469664,16),mu=P6(mu,Mu,xu,_c,yt[10],3200236656,23),_c=P6(_c,mu,Mu,xu,yt[13],681279174,4),xu=P6(xu,_c,mu,Mu,yt[0],3936430074,11),Mu=P6(Mu,xu,_c,mu,yt[3],3572445317,16),mu=P6(mu,Mu,xu,_c,yt[6],76029189,23),_c=P6(_c,mu,Mu,xu,yt[9],3654602809,4),xu=P6(xu,_c,mu,Mu,yt[12],3873151461,11),Mu=P6(Mu,xu,_c,mu,yt[15],530742520,16),_c=vA(_c,mu=P6(mu,Mu,xu,_c,yt[2],3299628645,23),Mu,xu,yt[0],4096336452,6),xu=vA(xu,_c,mu,Mu,yt[7],1126891415,10),Mu=vA(Mu,xu,_c,mu,yt[14],2878612391,15),mu=vA(mu,Mu,xu,_c,yt[5],4237533241,21),_c=vA(_c,mu,Mu,xu,yt[12],1700485571,6),xu=vA(xu,_c,mu,Mu,yt[3],2399980690,10),Mu=vA(Mu,xu,_c,mu,yt[10],4293915773,15),mu=vA(mu,Mu,xu,_c,yt[1],2240044497,21),_c=vA(_c,mu,Mu,xu,yt[8],1873313359,6),xu=vA(xu,_c,mu,Mu,yt[15],4264355552,10),Mu=vA(Mu,xu,_c,mu,yt[6],2734768916,15),mu=vA(mu,Mu,xu,_c,yt[13],1309151649,21),_c=vA(_c,mu,Mu,xu,yt[4],4149444226,6),xu=vA(xu,_c,mu,Mu,yt[11],3174756917,10),Mu=vA(Mu,xu,_c,mu,yt[2],718787259,15),mu=vA(mu,Mu,xu,_c,yt[9],3951481745,21),this._a=this._a+_c|0,this._b=this._b+mu|0,this._c=this._c+Mu|0,this._d=this._d+xu|0},XV.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var yt=sse.allocUnsafe(16);return yt.writeInt32LE(this._a,0),yt.writeInt32LE(this._b,4),yt.writeInt32LE(this._c,8),yt.writeInt32LE(this._d,12),yt};var _7=XV,S7=zw.Buffer,ex=Gw,dY=JV,kee=new Array(16),QV=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],Pz=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],e4=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],fN=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],dN=[0,1518500249,1859775393,2400959708,2840853838],hN=[1352829926,1548603684,1836072691,2053994217,0];function ZL(){dY.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function YI(yt,ir){return yt<>>32-ir}function jz(yt,ir,_c,mu,Mu,xu,l0,E0){return YI(yt+(ir^_c^mu)+xu+l0|0,E0)+Mu|0}function t4(yt,ir,_c,mu,Mu,xu,l0,E0){return YI(yt+(ir&_c|~ir&mu)+xu+l0|0,E0)+Mu|0}function JL(yt,ir,_c,mu,Mu,xu,l0,E0){return YI(yt+((ir|~_c)^mu)+xu+l0|0,E0)+Mu|0}function Cee(yt,ir,_c,mu,Mu,xu,l0,E0){return YI(yt+(ir&mu|_c&~mu)+xu+l0|0,E0)+Mu|0}function Tee(yt,ir,_c,mu,Mu,xu,l0,E0){return YI(yt+(ir^(_c|~mu))+xu+l0|0,E0)+Mu|0}ex(ZL,dY),ZL.prototype._update=function(){for(var yt=kee,ir=0;ir<16;++ir)yt[ir]=this._block.readInt32LE(4*ir);for(var _c=0|this._a,mu=0|this._b,Mu=0|this._c,xu=0|this._d,l0=0|this._e,E0=0|this._a,j0=0|this._b,M0=0|this._c,B0=0|this._d,q0=0|this._e,y1=0;y1<80;y1+=1){var v1,F1;y1<16?(v1=jz(_c,mu,Mu,xu,l0,yt[QV[y1]],dN[0],e4[y1]),F1=Tee(E0,j0,M0,B0,q0,yt[Pz[y1]],hN[0],fN[y1])):y1<32?(v1=t4(_c,mu,Mu,xu,l0,yt[QV[y1]],dN[1],e4[y1]),F1=Cee(E0,j0,M0,B0,q0,yt[Pz[y1]],hN[1],fN[y1])):y1<48?(v1=JL(_c,mu,Mu,xu,l0,yt[QV[y1]],dN[2],e4[y1]),F1=JL(E0,j0,M0,B0,q0,yt[Pz[y1]],hN[2],fN[y1])):y1<64?(v1=Cee(_c,mu,Mu,xu,l0,yt[QV[y1]],dN[3],e4[y1]),F1=t4(E0,j0,M0,B0,q0,yt[Pz[y1]],hN[3],fN[y1])):(v1=Tee(_c,mu,Mu,xu,l0,yt[QV[y1]],dN[4],e4[y1]),F1=jz(E0,j0,M0,B0,q0,yt[Pz[y1]],hN[4],fN[y1])),_c=l0,l0=xu,xu=YI(Mu,10),Mu=mu,mu=v1,E0=q0,q0=B0,B0=YI(M0,10),M0=j0,j0=F1}var ov=this._b+Mu+B0|0;this._b=this._c+xu+q0|0,this._c=this._d+l0+E0|0,this._d=this._e+_c+j0|0,this._e=this._a+mu+M0|0,this._a=ov},ZL.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var yt=S7.alloc?S7.alloc(20):new S7(20);return yt.writeInt32LE(this._a,0),yt.writeInt32LE(this._b,4),yt.writeInt32LE(this._c,8),yt.writeInt32LE(this._d,12),yt.writeInt32LE(this._e,16),yt};var hY=ZL,Ree={exports:{}},Mee=Sy().Buffer;function Nz(yt,ir){this._block=Mee.alloc(yt),this._finalSize=ir,this._blockSize=yt,this._len=0}Nz.prototype.update=function(yt,ir){typeof yt=="string"&&(ir=ir||"utf8",yt=Mee.from(yt,ir));for(var _c=this._block,mu=this._blockSize,Mu=yt.length,xu=this._len,l0=0;l0=this._finalSize&&(this._update(this._block),this._block.fill(0));var _c=8*this._len;if(_c<=4294967295)this._block.writeUInt32BE(_c,this._blockSize-4);else{var mu=(4294967295&_c)>>>0,Mu=(_c-mu)/4294967296;this._block.writeUInt32BE(Mu,this._blockSize-8),this._block.writeUInt32BE(mu,this._blockSize-4)}this._update(this._block);var xu=this._hash();return yt?xu.toString(yt):xu},Nz.prototype._update=function(){throw new Error("_update must be implemented by subclass")};var iF=Nz,lse=Gw,r4=iF,Lz=Sy().Buffer,$pe=[1518500249,1859775393,-1894007588,-899497514],cse=new Array(80);function n4(){this.init(),this._w=cse,r4.call(this,64,56)}function Epe(yt){return yt<<30|yt>>>2}function Ape(yt,ir,_c,mu){return yt===0?ir&_c|~ir&mu:yt===2?ir&_c|ir&mu|_c&mu:ir^_c^mu}lse(n4,r4),n4.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},n4.prototype._update=function(yt){for(var ir,_c=this._w,mu=0|this._a,Mu=0|this._b,xu=0|this._c,l0=0|this._d,E0=0|this._e,j0=0;j0<16;++j0)_c[j0]=yt.readInt32BE(4*j0);for(;j0<80;++j0)_c[j0]=_c[j0-3]^_c[j0-8]^_c[j0-14]^_c[j0-16];for(var M0=0;M0<80;++M0){var B0=~~(M0/20),q0=0|((ir=mu)<<5|ir>>>27)+Ape(B0,Mu,xu,l0)+E0+_c[M0]+$pe[B0];E0=l0,l0=xu,xu=Epe(Mu),Mu=mu,mu=q0}this._a=mu+this._a|0,this._b=Mu+this._b|0,this._c=xu+this._c|0,this._d=l0+this._d|0,this._e=E0+this._e|0},n4.prototype._hash=function(){var yt=Lz.allocUnsafe(20);return yt.writeInt32BE(0|this._a,0),yt.writeInt32BE(0|this._b,4),yt.writeInt32BE(0|this._c,8),yt.writeInt32BE(0|this._d,12),yt.writeInt32BE(0|this._e,16),yt};var i4=n4,_pe=Gw,use=iF,Spe=Sy().Buffer,xpe=[1518500249,1859775393,-1894007588,-899497514],fse=new Array(80);function o4(){this.init(),this._w=fse,use.call(this,64,56)}function kpe(yt){return yt<<5|yt>>>27}function Cpe(yt){return yt<<30|yt>>>2}function a4(yt,ir,_c,mu){return yt===0?ir&_c|~ir&mu:yt===2?ir&_c|ir&mu|_c&mu:ir^_c^mu}_pe(o4,use),o4.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},o4.prototype._update=function(yt){for(var ir,_c=this._w,mu=0|this._a,Mu=0|this._b,xu=0|this._c,l0=0|this._d,E0=0|this._e,j0=0;j0<16;++j0)_c[j0]=yt.readInt32BE(4*j0);for(;j0<80;++j0)_c[j0]=(ir=_c[j0-3]^_c[j0-8]^_c[j0-14]^_c[j0-16])<<1|ir>>>31;for(var M0=0;M0<80;++M0){var B0=~~(M0/20),q0=kpe(mu)+a4(B0,Mu,xu,l0)+E0+_c[M0]+xpe[B0]|0;E0=l0,l0=xu,xu=Cpe(Mu),Mu=mu,mu=q0}this._a=mu+this._a|0,this._b=Mu+this._b|0,this._c=xu+this._c|0,this._d=l0+this._d|0,this._e=E0+this._e|0},o4.prototype._hash=function(){var yt=Spe.allocUnsafe(20);return yt.writeInt32BE(0|this._a,0),yt.writeInt32BE(0|this._b,4),yt.writeInt32BE(0|this._c,8),yt.writeInt32BE(0|this._d,12),yt.writeInt32BE(0|this._e,16),yt};var Tpe=o4,Rpe=Gw,dse=iF,Mpe=Sy().Buffer,Ipe=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],hse=new Array(64);function s4(){this.init(),this._w=hse,dse.call(this,64,56)}function Ope(yt,ir,_c){return _c^yt&(ir^_c)}function Ppe(yt,ir,_c){return yt&ir|_c&(yt|ir)}function l4(yt){return(yt>>>2|yt<<30)^(yt>>>13|yt<<19)^(yt>>>22|yt<<10)}function jpe(yt){return(yt>>>6|yt<<26)^(yt>>>11|yt<<21)^(yt>>>25|yt<<7)}function Npe(yt){return(yt>>>7|yt<<25)^(yt>>>18|yt<<14)^yt>>>3}function Lpe(yt){return(yt>>>17|yt<<15)^(yt>>>19|yt<<13)^yt>>>10}Rpe(s4,dse),s4.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},s4.prototype._update=function(yt){for(var ir=this._w,_c=0|this._a,mu=0|this._b,Mu=0|this._c,xu=0|this._d,l0=0|this._e,E0=0|this._f,j0=0|this._g,M0=0|this._h,B0=0;B0<16;++B0)ir[B0]=yt.readInt32BE(4*B0);for(;B0<64;++B0)ir[B0]=Lpe(ir[B0-2])+ir[B0-7]+Npe(ir[B0-15])+ir[B0-16]|0;for(var q0=0;q0<64;++q0){var y1=M0+jpe(l0)+Ope(l0,E0,j0)+Ipe[q0]+ir[q0]|0,v1=l4(_c)+Ppe(_c,mu,Mu)|0;M0=j0,j0=E0,E0=l0,l0=xu+y1|0,xu=Mu,Mu=mu,mu=_c,_c=y1+v1|0}this._a=_c+this._a|0,this._b=mu+this._b|0,this._c=Mu+this._c|0,this._d=xu+this._d|0,this._e=l0+this._e|0,this._f=E0+this._f|0,this._g=j0+this._g|0,this._h=M0+this._h|0},s4.prototype._hash=function(){var yt=Mpe.allocUnsafe(32);return yt.writeInt32BE(this._a,0),yt.writeInt32BE(this._b,4),yt.writeInt32BE(this._c,8),yt.writeInt32BE(this._d,12),yt.writeInt32BE(this._e,16),yt.writeInt32BE(this._f,20),yt.writeInt32BE(this._g,24),yt.writeInt32BE(this._h,28),yt};var pse=s4,Bpe=Gw,Dpe=pse,mse=iF,Fpe=Sy().Buffer,Upe=new Array(64);function pY(){this.init(),this._w=Upe,mse.call(this,64,56)}Bpe(pY,Dpe),pY.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},pY.prototype._hash=function(){var yt=Fpe.allocUnsafe(28);return yt.writeInt32BE(this._a,0),yt.writeInt32BE(this._b,4),yt.writeInt32BE(this._c,8),yt.writeInt32BE(this._d,12),yt.writeInt32BE(this._e,16),yt.writeInt32BE(this._f,20),yt.writeInt32BE(this._g,24),yt};var zpe=pY,Hpe=Gw,c4=iF,Kpe=Sy().Buffer,gse=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],vse=new Array(160);function u4(){this.init(),this._w=vse,c4.call(this,128,112)}function Iee(yt,ir,_c){return _c^yt&(ir^_c)}function yse(yt,ir,_c){return yt&ir|_c&(yt|ir)}function Bz(yt,ir){return(yt>>>28|ir<<4)^(ir>>>2|yt<<30)^(ir>>>7|yt<<25)}function Oee(yt,ir){return(yt>>>14|ir<<18)^(yt>>>18|ir<<14)^(ir>>>9|yt<<23)}function bse(yt,ir){return(yt>>>1|ir<<31)^(yt>>>8|ir<<24)^yt>>>7}function wse(yt,ir){return(yt>>>1|ir<<31)^(yt>>>8|ir<<24)^(yt>>>7|ir<<25)}function $se(yt,ir){return(yt>>>19|ir<<13)^(ir>>>29|yt<<3)^yt>>>6}function Vpe(yt,ir){return(yt>>>19|ir<<13)^(ir>>>29|yt<<3)^(yt>>>6|ir<<26)}function x7(yt,ir){return yt>>>0>>0?1:0}Hpe(u4,c4),u4.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u4.prototype._update=function(yt){for(var ir=this._w,_c=0|this._ah,mu=0|this._bh,Mu=0|this._ch,xu=0|this._dh,l0=0|this._eh,E0=0|this._fh,j0=0|this._gh,M0=0|this._hh,B0=0|this._al,q0=0|this._bl,y1=0|this._cl,v1=0|this._dl,F1=0|this._el,ov=0|this._fl,bv=0|this._gl,gv=0|this._hl,xv=0;xv<32;xv+=2)ir[xv]=yt.readInt32BE(4*xv),ir[xv+1]=yt.readInt32BE(4*xv+4);for(;xv<160;xv+=2){var hy=ir[xv-30],oy=ir[xv-30+1],fy=bse(hy,oy),Fy=wse(oy,hy),qv=$se(hy=ir[xv-4],oy=ir[xv-4+1]),Qv=Vpe(oy,hy),T0=ir[xv-14],X0=ir[xv-14+1],s0=ir[xv-32],g0=ir[xv-32+1],d0=Fy+X0|0,c0=fy+T0+x7(d0,Fy)|0;c0=(c0=c0+qv+x7(d0=d0+Qv|0,Qv)|0)+s0+x7(d0=d0+g0|0,g0)|0,ir[xv]=c0,ir[xv+1]=d0}for(var a0=0;a0<160;a0+=2){c0=ir[a0],d0=ir[a0+1];var S0=yse(_c,mu,Mu),z0=yse(B0,q0,y1),Q0=Bz(_c,B0),p1=Bz(B0,_c),T1=Oee(l0,F1),U1=Oee(F1,l0),S1=gse[a0],n1=gse[a0+1],V1=Iee(l0,E0,j0),J1=Iee(F1,ov,bv),wv=gv+U1|0,Sv=M0+T1+x7(wv,gv)|0;Sv=(Sv=(Sv=Sv+V1+x7(wv=wv+J1|0,J1)|0)+S1+x7(wv=wv+n1|0,n1)|0)+c0+x7(wv=wv+d0|0,d0)|0;var Hv=p1+z0|0,ty=Q0+S0+x7(Hv,p1)|0;M0=j0,gv=bv,j0=E0,bv=ov,E0=l0,ov=F1,l0=xu+Sv+x7(F1=v1+wv|0,v1)|0,xu=Mu,v1=y1,Mu=mu,y1=q0,mu=_c,q0=B0,_c=Sv+ty+x7(B0=wv+Hv|0,wv)|0}this._al=this._al+B0|0,this._bl=this._bl+q0|0,this._cl=this._cl+y1|0,this._dl=this._dl+v1|0,this._el=this._el+F1|0,this._fl=this._fl+ov|0,this._gl=this._gl+bv|0,this._hl=this._hl+gv|0,this._ah=this._ah+_c+x7(this._al,B0)|0,this._bh=this._bh+mu+x7(this._bl,q0)|0,this._ch=this._ch+Mu+x7(this._cl,y1)|0,this._dh=this._dh+xu+x7(this._dl,v1)|0,this._eh=this._eh+l0+x7(this._el,F1)|0,this._fh=this._fh+E0+x7(this._fl,ov)|0,this._gh=this._gh+j0+x7(this._gl,bv)|0,this._hh=this._hh+M0+x7(this._hl,gv)|0},u4.prototype._hash=function(){var yt=Kpe.allocUnsafe(64);function ir(_c,mu,Mu){yt.writeInt32BE(_c,Mu),yt.writeInt32BE(mu,Mu+4)}return ir(this._ah,this._al,0),ir(this._bh,this._bl,8),ir(this._ch,this._cl,16),ir(this._dh,this._dl,24),ir(this._eh,this._el,32),ir(this._fh,this._fl,40),ir(this._gh,this._gl,48),ir(this._hh,this._hl,56),yt};var Ese=u4,qpe=Gw,k7=Ese,Ase=iF,Wpe=Sy().Buffer,Gpe=new Array(160);function mY(){this.init(),this._w=Gpe,Ase.call(this,128,112)}qpe(mY,k7),mY.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},mY.prototype._hash=function(){var yt=Wpe.allocUnsafe(48);function ir(_c,mu,Mu){yt.writeInt32BE(_c,Mu),yt.writeInt32BE(mu,Mu+4)}return ir(this._ah,this._al,0),ir(this._bh,this._bl,8),ir(this._ch,this._cl,16),ir(this._dh,this._dl,24),ir(this._eh,this._el,32),ir(this._fh,this._fl,40),yt};var Ype=mY,oF=Ree.exports=function(yt){yt=yt.toLowerCase();var ir=oF[yt];if(!ir)throw new Error(yt+" is not supported (we accept pull requests)");return new ir};oF.sha=i4,oF.sha1=Tpe,oF.sha224=zpe,oF.sha256=pse,oF.sha384=Ype,oF.sha512=Ese;var Dz=Ree.exports;function aF(){this.head=null,this.tail=null,this.length=0}aF.prototype.push=function(yt){var ir={data:yt,next:null};this.length>0?this.tail.next=ir:this.head=ir,this.tail=ir,++this.length},aF.prototype.unshift=function(yt){var ir={data:yt,next:this.head};this.length===0&&(this.tail=ir),this.head=ir,++this.length},aF.prototype.shift=function(){if(this.length!==0){var yt=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,yt}},aF.prototype.clear=function(){this.head=this.tail=null,this.length=0},aF.prototype.join=function(yt){if(this.length===0)return"";for(var ir=this.head,_c=""+ir.data;ir=ir.next;)_c+=yt+ir.data;return _c},aF.prototype.concat=function(yt){if(this.length===0)return F0.alloc(0);if(this.length===1)return this.head.data;for(var ir=F0.allocUnsafe(yt>>>0),_c=this.head,mu=0;_c;)_c.data.copy(ir,mu),mu+=_c.data.length,_c=_c.next;return ir};var sF=F0.isEncoding||function(yt){switch(yt&&yt.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function XL(yt){switch(this.encoding=(yt||"utf8").toLowerCase().replace(/[-_]/,""),function(ir){if(ir&&!sF(ir))throw new Error("Unknown encoding: "+ir)}(yt),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=Zpe;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=Fz;break;default:return void(this.write=lF)}this.charBuffer=new F0(6),this.charReceived=0,this.charLength=0}function lF(yt){return yt.toString(this.encoding)}function Zpe(yt){this.charReceived=yt.length%2,this.charLength=this.charReceived?2:0}function Fz(yt){this.charReceived=yt.length%3,this.charLength=this.charReceived?3:0}XL.prototype.write=function(yt){for(var ir="";this.charLength;){var _c=yt.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:yt.length;if(yt.copy(this.charBuffer,this.charReceived,0,_c),this.charReceived+=_c,this.charReceived=55296&&mu<=56319)){if(this.charReceived=this.charLength=0,yt.length===0)return ir;break}this.charLength+=this.surrogateSize,ir=""}this.detectIncompleteChar(yt);var mu,Mu=yt.length;if(this.charLength&&(yt.copy(this.charBuffer,0,yt.length-this.charReceived,Mu),Mu-=this.charReceived),Mu=(ir+=yt.toString(this.encoding,0,Mu)).length-1,(mu=ir.charCodeAt(Mu))>=55296&&mu<=56319){var xu=this.surrogateSize;return this.charLength+=xu,this.charReceived+=xu,this.charBuffer.copy(this.charBuffer,xu,0,xu),yt.copy(this.charBuffer,0,0,xu),ir.substring(0,Mu)}return ir},XL.prototype.detectIncompleteChar=function(yt){for(var ir=yt.length>=3?3:yt.length;ir>0;ir--){var _c=yt[yt.length-ir];if(ir==1&&_c>>5==6){this.charLength=2;break}if(ir<=2&&_c>>4==14){this.charLength=3;break}if(ir<=3&&_c>>3==30){this.charLength=4;break}}this.charReceived=ir},XL.prototype.end=function(yt){var ir="";if(yt&&yt.length&&(ir=this.write(yt)),this.charReceived){var _c=this.charReceived,mu=this.charBuffer,Mu=this.encoding;ir+=mu.slice(0,_c).toString(Mu)}return ir};var Jpe=Object.freeze({__proto__:null,StringDecoder:XL});b8.ReadableState=_se;var zA=sR("stream");function _se(yt,ir){yt=yt||{},this.objectMode=!!yt.objectMode,ir instanceof UC&&(this.objectMode=this.objectMode||!!yt.readableObjectMode);var _c=yt.highWaterMark,mu=this.objectMode?16:16384;this.highWaterMark=_c||_c===0?_c:mu,this.highWaterMark=~~this.highWaterMark,this.buffer=new aF,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=yt.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,yt.encoding&&(this.decoder=new XL(yt.encoding),this.encoding=yt.encoding)}function b8(yt){if(!(this instanceof b8))return new b8(yt);this._readableState=new _se(yt,this),this.readable=!0,yt&&typeof yt.read=="function"&&(this._read=yt.read),$w.call(this)}function TA(yt,ir,_c,mu,Mu){var xu=function(M0,B0){var q0=null;return vw(B0)||typeof B0=="string"||B0==null||M0.objectMode||(q0=new TypeError("Invalid non-string/buffer chunk")),q0}(ir,_c);if(xu)yt.emit("error",xu);else if(_c===null)ir.reading=!1,function(M0,B0){if(!B0.ended){if(B0.decoder){var q0=B0.decoder.end();q0&&q0.length&&(B0.buffer.push(q0),B0.length+=B0.objectMode?1:q0.length)}B0.ended=!0,f4(M0)}}(yt,ir);else if(ir.objectMode||_c&&_c.length>0)if(ir.ended&&!Mu){var l0=new Error("stream.push() after EOF");yt.emit("error",l0)}else if(ir.endEmitted&&Mu){var E0=new Error("stream.unshift() after end event");yt.emit("error",E0)}else{var j0;!ir.decoder||Mu||mu||(_c=ir.decoder.write(_c),j0=!ir.objectMode&&_c.length===0),Mu||(ir.reading=!1),j0||(ir.flowing&&ir.length===0&&!ir.sync?(yt.emit("data",_c),yt.read(0)):(ir.length+=ir.objectMode?1:_c.length,Mu?ir.buffer.unshift(_c):ir.buffer.push(_c),ir.needReadable&&f4(yt))),function(M0,B0){B0.readingMore||(B0.readingMore=!0,$2(Sse,M0,B0))}(yt,ir)}else Mu||(ir.reading=!1);return function(M0){return!M0.ended&&(M0.needReadable||M0.lengthir.highWaterMark&&(ir.highWaterMark=function(_c){return _c>=Pee?_c=Pee:(_c--,_c|=_c>>>1,_c|=_c>>>2,_c|=_c>>>4,_c|=_c>>>8,_c|=_c>>>16,_c++),_c}(yt)),yt<=ir.length?yt:ir.ended?ir.length:(ir.needReadable=!0,0))}function f4(yt){var ir=yt._readableState;ir.needReadable=!1,ir.emittedReadable||(zA("emitReadable",ir.flowing),ir.emittedReadable=!0,ir.sync?$2(jee,yt):jee(yt))}function jee(yt){zA("emit readable"),yt.emit("readable"),Nee(yt)}function Sse(yt,ir){for(var _c=ir.length;!ir.reading&&!ir.flowing&&!ir.ended&&ir.length=ir.length?(_c=ir.decoder?ir.buffer.join(""):ir.buffer.length===1?ir.buffer.head.data:ir.buffer.concat(ir.length),ir.buffer.clear()):_c=function(mu,Mu,xu){var l0;return muy1.length?y1.length:E0;if(v1===y1.length?q0+=y1:q0+=y1.slice(0,E0),(E0-=v1)==0){v1===y1.length?(++B0,M0.next?j0.head=M0.next:j0.head=j0.tail=null):(j0.head=M0,M0.data=y1.slice(v1));break}++B0}return j0.length-=B0,q0}(mu,Mu):function(E0,j0){var M0=F0.allocUnsafe(E0),B0=j0.head,q0=1;for(B0.data.copy(M0),E0-=B0.data.length;B0=B0.next;){var y1=B0.data,v1=E0>y1.length?y1.length:E0;if(y1.copy(M0,M0.length-E0,0,v1),(E0-=v1)==0){v1===y1.length?(++q0,B0.next?j0.head=B0.next:j0.head=j0.tail=null):(j0.head=B0,B0.data=y1.slice(v1));break}++q0}return j0.length-=q0,M0}(mu,Mu),l0}(yt,ir.buffer,ir.decoder),_c);var _c}function Lee(yt){var ir=yt._readableState;if(ir.length>0)throw new Error('"endReadable()" called on non-empty stream');ir.endEmitted||(ir.ended=!0,$2(Bee,ir,yt))}function Bee(yt,ir){yt.endEmitted||yt.length!==0||(yt.endEmitted=!0,ir.readable=!1,ir.emit("end"))}function Dee(yt,ir){for(var _c=0,mu=yt.length;_c=ir.highWaterMark||ir.ended))return zA("read: emitReadable",ir.length,ir.ended),ir.length===0&&ir.ended?Lee(this):f4(this),null;if((yt=Q_(yt,ir))===0&&ir.ended)return ir.length===0&&Lee(this),null;var mu,Mu=ir.needReadable;return zA("need readable",Mu),(ir.length===0||ir.length-yt0?kse(yt,ir):null)===null?(ir.needReadable=!0,yt=0):ir.length-=yt,ir.length===0&&(ir.ended||(ir.needReadable=!0),_c!==yt&&ir.ended&&Lee(this)),mu!==null&&this.emit("data",mu),mu},b8.prototype._read=function(yt){this.emit("error",new Error("not implemented"))},b8.prototype.pipe=function(yt,ir){var _c=this,mu=this._readableState;switch(mu.pipesCount){case 0:mu.pipes=yt;break;case 1:mu.pipes=[mu.pipes,yt];break;default:mu.pipes.push(yt)}mu.pipesCount+=1,zA("pipe count=%d opts=%j",mu.pipesCount,ir);var Mu=ir&&ir.end===!1?M0:l0;function xu(bv){zA("onunpipe"),bv===_c&&M0()}function l0(){zA("onend"),yt.end()}mu.endEmitted?$2(Mu):_c.once("end",Mu),yt.on("unpipe",xu);var E0=function(bv){return function(){var gv=bv._readableState;zA("pipeOnDrain",gv.awaitDrain),gv.awaitDrain&&gv.awaitDrain--,gv.awaitDrain===0&&bv.listeners("data").length&&(gv.flowing=!0,Nee(bv))}}(_c);yt.on("drain",E0);var j0=!1;function M0(){zA("cleanup"),yt.removeListener("close",v1),yt.removeListener("finish",F1),yt.removeListener("drain",E0),yt.removeListener("error",y1),yt.removeListener("unpipe",xu),_c.removeListener("end",l0),_c.removeListener("end",M0),_c.removeListener("data",q0),j0=!0,!mu.awaitDrain||yt._writableState&&!yt._writableState.needDrain||E0()}var B0=!1;function q0(bv){zA("ondata"),B0=!1,yt.write(bv)!==!1||B0||((mu.pipesCount===1&&mu.pipes===yt||mu.pipesCount>1&&Dee(mu.pipes,yt)!==-1)&&!j0&&(zA("false write response, pause",_c._readableState.awaitDrain),_c._readableState.awaitDrain++,B0=!0),_c.pause())}function y1(bv){zA("onerror",bv),ov(),yt.removeListener("error",y1),function(gv,xv){return gv.listeners("error").length}(yt)===0&&yt.emit("error",bv)}function v1(){yt.removeListener("finish",F1),ov()}function F1(){zA("onfinish"),yt.removeListener("close",v1),ov()}function ov(){zA("unpipe"),_c.unpipe(yt)}return _c.on("data",q0),function(bv,gv,xv){if(typeof bv.prependListener=="function")return bv.prependListener(gv,xv);bv._events&&bv._events[gv]?Array.isArray(bv._events[gv])?bv._events[gv].unshift(xv):bv._events[gv]=[xv,bv._events[gv]]:bv.on(gv,xv)}(yt,"error",y1),yt.once("close",v1),yt.once("finish",F1),yt.emit("pipe",_c),mu.flowing||(zA("pipe resume"),_c.resume()),yt},b8.prototype.unpipe=function(yt){var ir=this._readableState;if(ir.pipesCount===0)return this;if(ir.pipesCount===1)return yt&&yt!==ir.pipes||(yt||(yt=ir.pipes),ir.pipes=null,ir.pipesCount=0,ir.flowing=!1,yt&&yt.emit("unpipe",this)),this;if(!yt){var _c=ir.pipes,mu=ir.pipesCount;ir.pipes=null,ir.pipesCount=0,ir.flowing=!1;for(var Mu=0;Mu-1))throw new TypeError("Unknown encoding: "+yt);return this._writableState.defaultEncoding=yt,this},u9.prototype._write=function(yt,ir,_c){_c(new Error("not implemented"))},u9.prototype._writev=null,u9.prototype.end=function(yt,ir,_c){var mu=this._writableState;typeof yt=="function"?(_c=yt,yt=null,ir=null):typeof ir=="function"&&(_c=ir,ir=null),yt!=null&&this.write(yt,ir),mu.corked&&(mu.corked=1,this.uncork()),mu.ending||mu.finished||function(Mu,xu,l0){xu.ending=!0,Hee(Mu,xu),l0&&(xu.finished?$2(l0):Mu.once("finish",l0)),xu.ended=!0,Mu.writable=!1}(this,mu,_c)},D_(UC,b8);for(var Vee=Object.keys(u9.prototype),wY=0;wYwM?ir=yt(ir):ir.length_c?ir=(yt==="rmd160"?new _Y:uF(yt)).update(ir).digest():ir.length<_c&&(ir=p4.concat([ir,o0e],_c));for(var mu=this._ipad=p4.allocUnsafe(_c),Mu=this._opad=p4.allocUnsafe(_c),xu=0;xu<_c;xu++)mu[xu]=54^ir[xu],Mu[xu]=92^ir[xu];this._hash=yt==="rmd160"?new _Y:uF(yt),this._hash.update(mu)}AY(fF,Gee),fF.prototype._update=function(yt){this._hash.update(yt)},fF.prototype._final=function(){var yt=this._hash.digest();return(this._alg==="rmd160"?new _Y:uF(this._alg)).update(this._opad).update(yt).digest()};var SY=function(yt,ir){return(yt=yt.toLowerCase())==="rmd160"||yt==="ripemd160"?new fF("rmd160",ir):yt==="md5"?new n0e(i0e,ir):new fF(yt,ir)},Ose={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}},m4=Ose,g4={},Pse=Math.pow(2,30)-1,jse=function(yt,ir){if(typeof yt!="number")throw new TypeError("Iterations not a number");if(yt<0)throw new TypeError("Bad iterations");if(typeof ir!="number")throw new TypeError("Key length not a number");if(ir<0||ir>Pse||ir!=ir)throw new TypeError("Bad key length")},v4=c.process&&c.process.browser?"utf-8":c.process&&c.process.version?parseInt(Kv.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary":"utf-8",Yee=Sy().Buffer,Zee=function(yt,ir,_c){if(Yee.isBuffer(yt))return yt;if(typeof yt=="string")return Yee.from(yt,ir);if(ArrayBuffer.isView(yt))return Yee.from(yt.buffer);throw new TypeError(_c+" must be a string, a Buffer, a typed array or a DataView")},Nse=cF,Jee=hY,Lse=Dz,dF=Sy().Buffer,a0e=jse,Bse=v4,eB=Zee,s0e=dF.alloc(128),y4={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function Xee(yt,ir,_c){var mu=function(M0){return M0==="rmd160"||M0==="ripemd160"?function(B0){return new Jee().update(B0).digest()}:M0==="md5"?Nse:function(B0){return Lse(M0).update(B0).digest()}}(yt),Mu=yt==="sha512"||yt==="sha384"?128:64;ir.length>Mu?ir=mu(ir):ir.length>>0},writeUInt32BE:function(yt,ir,_c){yt[0+_c]=ir>>>24,yt[1+_c]=ir>>>16&255,yt[2+_c]=ir>>>8&255,yt[3+_c]=255&ir},ip:function(yt,ir,_c,mu){for(var Mu=0,xu=0,l0=6;l0>=0;l0-=2){for(var E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=ir>>>E0+l0&1;for(E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=yt>>>E0+l0&1}for(l0=6;l0>=0;l0-=2){for(E0=1;E0<=25;E0+=8)xu<<=1,xu|=ir>>>E0+l0&1;for(E0=1;E0<=25;E0+=8)xu<<=1,xu|=yt>>>E0+l0&1}_c[mu+0]=Mu>>>0,_c[mu+1]=xu>>>0},rip:function(yt,ir,_c,mu){for(var Mu=0,xu=0,l0=0;l0<4;l0++)for(var E0=24;E0>=0;E0-=8)Mu<<=1,Mu|=ir>>>E0+l0&1,Mu<<=1,Mu|=yt>>>E0+l0&1;for(l0=4;l0<8;l0++)for(E0=24;E0>=0;E0-=8)xu<<=1,xu|=ir>>>E0+l0&1,xu<<=1,xu|=yt>>>E0+l0&1;_c[mu+0]=Mu>>>0,_c[mu+1]=xu>>>0},pc1:function(yt,ir,_c,mu){for(var Mu=0,xu=0,l0=7;l0>=5;l0--){for(var E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=ir>>E0+l0&1;for(E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=yt>>E0+l0&1}for(E0=0;E0<=24;E0+=8)Mu<<=1,Mu|=ir>>E0+l0&1;for(l0=1;l0<=3;l0++){for(E0=0;E0<=24;E0+=8)xu<<=1,xu|=ir>>E0+l0&1;for(E0=0;E0<=24;E0+=8)xu<<=1,xu|=yt>>E0+l0&1}for(E0=0;E0<=24;E0+=8)xu<<=1,xu|=yt>>E0+l0&1;_c[mu+0]=Mu>>>0,_c[mu+1]=xu>>>0},r28shl:function(yt,ir){return yt<>>28-ir}},zC=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];rB.pc2=function(yt,ir,_c,mu){for(var Mu=0,xu=0,l0=zC.length>>>1,E0=0;E0>>zC[E0]&1;for(E0=l0;E0>>zC[E0]&1;_c[mu+0]=Mu>>>0,_c[mu+1]=xu>>>0},rB.expand=function(yt,ir,_c){var mu=0,Mu=0;mu=(1&yt)<<5|yt>>>27;for(var xu=23;xu>=15;xu-=4)mu<<=6,mu|=yt>>>xu&63;for(xu=11;xu>=3;xu-=4)Mu|=yt>>>xu&63,Mu<<=6;Mu|=(31&yt)<<1|yt>>>31,ir[_c+0]=mu>>>0,ir[_c+1]=Mu>>>0};var pF=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];rB.substitute=function(yt,ir){for(var _c=0,mu=0;mu<4;mu++)_c<<=4,_c|=pF[64*mu+(yt>>>18-6*mu&63)];for(mu=0;mu<4;mu++)_c<<=4,_c|=pF[256+64*mu+(ir>>>18-6*mu&63)];return _c>>>0};var nB=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];rB.permute=function(yt){for(var ir=0,_c=0;_c>>nB[_c]&1;return ir>>>0},rB.padSplit=function(yt,ir,_c){for(var mu=yt.toString(2);mu.length0;mu--)ir+=this._buffer(yt,ir),_c+=this._flushBuffer(Mu,_c);return ir+=this._buffer(yt,ir),Mu},w8.prototype.final=function(yt){var ir,_c;return yt&&(ir=this.update(yt)),_c=this.type==="encrypt"?this._finalEncrypt():this._finalDecrypt(),ir?ir.concat(_c):_c},w8.prototype._pad=function(yt,ir){if(ir===0)return!1;for(;ir>>1];_c=RA.r28shl(_c,xu),mu=RA.r28shl(mu,xu),RA.pc2(_c,mu,yt.keys,Mu)}},GA.prototype._update=function(yt,ir,_c,mu){var Mu=this._desState,xu=RA.readUInt32BE(yt,ir),l0=RA.readUInt32BE(yt,ir+4);RA.ip(xu,l0,Mu.tmp,0),xu=Mu.tmp[0],l0=Mu.tmp[1],this.type==="encrypt"?this._encrypt(Mu,xu,l0,Mu.tmp,0):this._decrypt(Mu,xu,l0,Mu.tmp,0),xu=Mu.tmp[0],l0=Mu.tmp[1],RA.writeUInt32BE(_c,xu,mu),RA.writeUInt32BE(_c,l0,mu+4)},GA.prototype._pad=function(yt,ir){if(this.padding===!1)return!1;for(var _c=yt.length-ir,mu=ir;mu>>0,xu=q0}RA.rip(l0,xu,mu,Mu)},GA.prototype._decrypt=function(yt,ir,_c,mu,Mu){for(var xu=_c,l0=ir,E0=yt.keys.length-2;E0>=0;E0-=2){var j0=yt.keys[E0],M0=yt.keys[E0+1];RA.expand(xu,yt.tmp,0),j0^=yt.tmp[0],M0^=yt.tmp[1];var B0=RA.substitute(j0,M0),q0=xu;xu=(l0^RA.permute(B0))>>>0,l0=q0}RA.rip(xu,l0,mu,Mu)};var XI={},qse=Zx,c0e=Gw,w4={};function u0e(yt){qse.equal(yt.length,8,"Invalid IV length"),this.iv=new Array(8);for(var ir=0;ir>xu%8,yt._prev=g0e(yt._prev,_c?mu:Mu);return l0}function g0e(yt,ir){var _c=yt.length,mu=-1,Mu=A4.allocUnsafe(yt.length);for(yt=A4.concat([yt,A4.from([ir])]);++mu<_c;)Mu[mu]=yt[mu]<<1|yt[mu+1]>>7;return Mu}lte.encrypt=function(yt,ir,_c){for(var mu=ir.length,Mu=A4.allocUnsafe(mu),xu=-1;++xu>>24]^B0[F1>>>16&255]^q0[ov>>>8&255]^y1[255&bv]^ir[gv++],l0=M0[F1>>>24]^B0[ov>>>16&255]^q0[bv>>>8&255]^y1[255&v1]^ir[gv++],E0=M0[ov>>>24]^B0[bv>>>16&255]^q0[v1>>>8&255]^y1[255&F1]^ir[gv++],j0=M0[bv>>>24]^B0[v1>>>16&255]^q0[F1>>>8&255]^y1[255&ov]^ir[gv++],v1=xu,F1=l0,ov=E0,bv=j0;return xu=(mu[v1>>>24]<<24|mu[F1>>>16&255]<<16|mu[ov>>>8&255]<<8|mu[255&bv])^ir[gv++],l0=(mu[F1>>>24]<<24|mu[ov>>>16&255]<<16|mu[bv>>>8&255]<<8|mu[255&v1])^ir[gv++],E0=(mu[ov>>>24]<<24|mu[bv>>>16&255]<<16|mu[v1>>>8&255]<<8|mu[255&F1])^ir[gv++],j0=(mu[bv>>>24]<<24|mu[v1>>>16&255]<<16|mu[F1>>>8&255]<<8|mu[255&ov])^ir[gv++],[xu>>>=0,l0>>>=0,E0>>>=0,j0>>>=0]}var jY=[0,1,2,4,8,16,32,64,128,27,54],D8=function(){for(var yt=new Array(256),ir=0;ir<256;ir++)yt[ir]=ir<128?ir<<1:ir<<1^283;for(var _c=[],mu=[],Mu=[[],[],[],[]],xu=[[],[],[],[]],l0=0,E0=0,j0=0;j0<256;++j0){var M0=E0^E0<<1^E0<<2^E0<<3^E0<<4;M0=M0>>>8^255&M0^99,_c[l0]=M0,mu[M0]=l0;var B0=yt[l0],q0=yt[B0],y1=yt[q0],v1=257*yt[M0]^16843008*M0;Mu[0][l0]=v1<<24|v1>>>8,Mu[1][l0]=v1<<16|v1>>>16,Mu[2][l0]=v1<<8|v1>>>24,Mu[3][l0]=v1,v1=16843009*y1^65537*q0^257*B0^16843008*l0,xu[0][M0]=v1<<24|v1>>>8,xu[1][M0]=v1<<16|v1>>>16,xu[2][M0]=v1<<8|v1>>>24,xu[3][M0]=v1,l0===0?l0=E0=1:(l0=B0^yt[yt[yt[y1^B0]]],E0^=yt[yt[E0]])}return{SBOX:_c,INV_SBOX:mu,SUB_MIX:Mu,INV_SUB_MIX:xu}}();function HC(yt){this._key=PY(yt),this._reset()}HC.blockSize=16,HC.keySize=32,HC.prototype.blockSize=HC.blockSize,HC.prototype.keySize=HC.keySize,HC.prototype._reset=function(){for(var yt=this._key,ir=yt.length,_c=ir+6,mu=4*(_c+1),Mu=[],xu=0;xu>>24,l0=D8.SBOX[l0>>>24]<<24|D8.SBOX[l0>>>16&255]<<16|D8.SBOX[l0>>>8&255]<<8|D8.SBOX[255&l0],l0^=jY[xu/ir|0]<<24):ir>6&&xu%ir==4&&(l0=D8.SBOX[l0>>>24]<<24|D8.SBOX[l0>>>16&255]<<16|D8.SBOX[l0>>>8&255]<<8|D8.SBOX[255&l0]),Mu[xu]=Mu[xu-ir]^l0}for(var E0=[],j0=0;j0>>24]]^D8.INV_SUB_MIX[1][D8.SBOX[B0>>>16&255]]^D8.INV_SUB_MIX[2][D8.SBOX[B0>>>8&255]]^D8.INV_SUB_MIX[3][D8.SBOX[255&B0]]}this._nRounds=_c,this._keySchedule=Mu,this._invKeySchedule=E0},HC.prototype.encryptBlockRaw=function(yt){return qz(yt=PY(yt),this._keySchedule,D8.SUB_MIX,D8.SBOX,this._nRounds)},HC.prototype.encryptBlock=function(yt){var ir=this.encryptBlockRaw(yt),_c=vF.allocUnsafe(16);return _c.writeUInt32BE(ir[0],0),_c.writeUInt32BE(ir[1],4),_c.writeUInt32BE(ir[2],8),_c.writeUInt32BE(ir[3],12),_c},HC.prototype.decryptBlock=function(yt){var ir=(yt=PY(yt))[1];yt[1]=yt[3],yt[3]=ir;var _c=qz(yt,this._invKeySchedule,D8.INV_SUB_MIX,D8.INV_SBOX,this._nRounds),mu=vF.allocUnsafe(16);return mu.writeUInt32BE(_c[0],0),mu.writeUInt32BE(_c[3],4),mu.writeUInt32BE(_c[2],8),mu.writeUInt32BE(_c[1],12),mu},HC.prototype.scrub=function(){S4(this._keySchedule),S4(this._invKeySchedule),S4(this._key)},_4.AES=HC;var yF=Sy().Buffer,b0e=yF.alloc(16,0);function sS(yt){var ir=yF.allocUnsafe(16);return ir.writeUInt32BE(yt[0]>>>0,0),ir.writeUInt32BE(yt[1]>>>0,4),ir.writeUInt32BE(yt[2]>>>0,8),ir.writeUInt32BE(yt[3]>>>0,12),ir}function tx(yt){this.h=yt,this.state=yF.alloc(16,0),this.cache=yF.allocUnsafe(0)}tx.prototype.ghash=function(yt){for(var ir=-1;++ir0;ir--)mu[ir]=mu[ir]>>>1|(1&mu[ir-1])<<31;mu[0]=mu[0]>>>1,_c&&(mu[0]=mu[0]^225<<24)}this.state=sS(Mu)},tx.prototype.update=function(yt){var ir;for(this.cache=yF.concat([this.cache,yt]);this.cache.length>=16;)ir=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(ir)},tx.prototype.final=function(yt,ir){return this.cache.length&&this.ghash(yF.concat([this.cache,b0e],16)),this.ghash(sS([0,yt,0,ir])),this.state};var Wz=tx,w0e=_4,Xx=Sy().Buffer,Gz=pN,ele=Wz,$0e=d9,KC=dte;function lB(yt,ir,_c,mu){Gz.call(this);var Mu=Xx.alloc(4,0);this._cipher=new w0e.AES(ir);var xu=this._cipher.encryptBlock(Mu);this._ghash=new ele(xu),_c=function(l0,E0,j0){if(E0.length===12)return l0._finID=Xx.concat([E0,Xx.from([0,0,0,1])]),Xx.concat([E0,Xx.from([0,0,0,2])]);var M0=new ele(j0),B0=E0.length,q0=B0%16;M0.update(E0),q0&&(q0=16-q0,M0.update(Xx.alloc(q0,0))),M0.update(Xx.alloc(8,0));var y1=8*B0,v1=Xx.alloc(8);v1.writeUIntBE(y1,0,8),M0.update(v1),l0._finID=M0.state;var F1=Xx.from(l0._finID);return KC(F1),F1}(this,_c,xu),this._prev=Xx.from(_c),this._cache=Xx.allocUnsafe(0),this._secCache=Xx.allocUnsafe(0),this._decrypt=mu,this._alen=0,this._len=0,this._mode=yt,this._authTag=null,this._called=!1}Gw(lB,Gz),lB.prototype._update=function(yt){if(!this._called&&this._alen){var ir=16-this._alen%16;ir<16&&(ir=Xx.alloc(ir,0),this._ghash.update(ir))}this._called=!0;var _c=this._mode.encrypt(this,yt);return this._decrypt?this._ghash.update(yt):this._ghash.update(_c),this._len+=yt.length,_c},lB.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var yt=$0e(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(ir,_c){var mu=0;ir.length!==_c.length&&mu++;for(var Mu=Math.min(ir.length,_c.length),xu=0;xu0||mu>0;){var j0=new rle;j0.update(E0),j0.update(yt),ir&&j0.update(ir),E0=j0.digest();var M0=0;if(Mu>0){var B0=xu.length-Mu;M0=Math.min(Mu,E0.length),E0.copy(xu,B0,0,M0),Mu-=M0}if(M00){var q0=l0.length-mu,y1=Math.min(mu,E0.length-M0);E0.copy(l0,q0,M0,M0+y1),mu-=y1}}return E0.fill(0),{key:xu,iv:l0}},gte=OY,wF=pte,gN=Sy().Buffer,NY=tle,vte=pN,A0e=_4,vN=bF;function k4(yt,ir,_c){vte.call(this),this._cache=new LY,this._cipher=new A0e.AES(ir),this._prev=gN.from(_c),this._mode=yt,this._autopadding=!0}Gw(k4,vte),k4.prototype._update=function(yt){var ir,_c;this._cache.add(yt);for(var mu=[];ir=this._cache.get();)_c=this._mode.encrypt(this,ir),mu.push(_c);return gN.concat(mu)};var nle=gN.alloc(16,16);function LY(){this.cache=gN.allocUnsafe(0)}function ile(yt,ir,_c){var mu=gte[yt.toLowerCase()];if(!mu)throw new TypeError("invalid suite type");if(typeof ir=="string"&&(ir=gN.from(ir)),ir.length!==mu.key/8)throw new TypeError("invalid key length "+ir.length);if(typeof _c=="string"&&(_c=gN.from(_c)),mu.mode!=="GCM"&&_c.length!==mu.iv)throw new TypeError("invalid iv length "+_c.length);return mu.type==="stream"?new NY(mu.module,ir,_c):mu.type==="auth"?new wF(mu.module,ir,_c):new k4(mu.module,ir,_c)}k4.prototype._final=function(){var yt=this._cache.flush();if(this._autopadding)return yt=this._mode.encrypt(this,yt),this._cipher.scrub(),yt;if(!yt.equals(nle))throw this._cipher.scrub(),new Error("data not multiple of block length")},k4.prototype.setAutoPadding=function(yt){return this._autopadding=!!yt,this},LY.prototype.add=function(yt){this.cache=gN.concat([this.cache,yt])},LY.prototype.get=function(){if(this.cache.length>15){var yt=this.cache.slice(0,16);return this.cache=this.cache.slice(16),yt}return null},LY.prototype.flush=function(){for(var yt=16-this.cache.length,ir=gN.allocUnsafe(yt),_c=-1;++_c16)throw new Error("unable to decrypt data");for(var mu=-1;++mu<_c;)if(ir[mu+(16-_c)]!==_c)throw new Error("unable to decrypt data");if(_c!==16)return ir.slice(0,16-_c)}(this._mode.decrypt(this,yt));if(yt)throw new Error("data not multiple of block length")},C4.prototype.setAutoPadding=function(yt){return this._autopadding=!!yt,this},T4.prototype.add=function(yt){this.cache=yN.concat([this.cache,yt])},T4.prototype.get=function(yt){var ir;if(yt){if(this.cache.length>16)return ir=this.cache.slice(0,16),this.cache=this.cache.slice(16),ir}else if(this.cache.length>=16)return ir=this.cache.slice(0,16),this.cache=this.cache.slice(16),ir;return null},T4.prototype.flush=function(){if(this.cache.length)return this.cache},$F.createDecipher=function(yt,ir){var _c=yte[yt.toLowerCase()];if(!_c)throw new TypeError("invalid suite type");var mu=ale(ir,!1,_c.key,_c.iv);return sle(yt,mu.key,mu.iv)},$F.createDecipheriv=sle;var lle=ote,Zz=$F,BY=Jse;f9.createCipher=f9.Cipher=lle.createCipher,f9.createCipheriv=f9.Cipheriv=lle.createCipheriv,f9.createDecipher=f9.Decipher=Zz.createDecipher,f9.createDecipheriv=f9.Decipheriv=Zz.createDecipheriv,f9.listCiphers=f9.getCiphers=function(){return Object.keys(BY)};var wte={};(function(yt){yt["des-ecb"]={key:8,iv:0},yt["des-cbc"]=yt.des={key:8,iv:8},yt["des-ede3-cbc"]=yt.des3={key:24,iv:8},yt["des-ede3"]={key:24,iv:0},yt["des-ede-cbc"]={key:16,iv:8},yt["des-ede"]={key:16,iv:0}})(wte);var $te=p0e,DY=f9,uB=OY,xO=wte,Ete=bF;function FY(yt,ir,_c){if(yt=yt.toLowerCase(),uB[yt])return DY.createCipheriv(yt,ir,_c);if(xO[yt])return new $te({key:ir,iv:_c,mode:yt});throw new TypeError("invalid suite type")}function bN(yt,ir,_c){if(yt=yt.toLowerCase(),uB[yt])return DY.createDecipheriv(yt,ir,_c);if(xO[yt])return new $te({key:ir,iv:_c,mode:yt,decrypt:!0});throw new TypeError("invalid suite type")}cR.createCipher=cR.Cipher=function(yt,ir){var _c,mu;if(yt=yt.toLowerCase(),uB[yt])_c=uB[yt].key,mu=uB[yt].iv;else{if(!xO[yt])throw new TypeError("invalid suite type");_c=8*xO[yt].key,mu=xO[yt].iv}var Mu=Ete(ir,!1,_c,mu);return FY(yt,Mu.key,Mu.iv)},cR.createCipheriv=cR.Cipheriv=FY,cR.createDecipher=cR.Decipher=function(yt,ir){var _c,mu;if(yt=yt.toLowerCase(),uB[yt])_c=uB[yt].key,mu=uB[yt].iv;else{if(!xO[yt])throw new TypeError("invalid suite type");_c=8*xO[yt].key,mu=xO[yt].iv}var Mu=Ete(ir,!1,_c,mu);return bN(yt,Mu.key,Mu.iv)},cR.createDecipheriv=cR.Decipheriv=bN,cR.listCiphers=cR.getCiphers=function(){return Object.keys(xO).concat(DY.getCiphers())};var Qx={},Ate={exports:{}};(function(yt){(function(ir,_c){function mu(T0,X0){if(!T0)throw new Error(X0||"Assertion failed")}function Mu(T0,X0){T0.super_=X0;var s0=function(){};s0.prototype=X0.prototype,T0.prototype=new s0,T0.prototype.constructor=T0}function xu(T0,X0,s0){if(xu.isBN(T0))return T0;this.negative=0,this.words=null,this.length=0,this.red=null,T0!==null&&(X0!=="le"&&X0!=="be"||(s0=X0,X0=10),this._init(T0||0,X0||10,s0||"be"))}var l0;typeof ir=="object"?ir.exports=xu:_c.BN=xu,xu.BN=xu,xu.wordSize=26;try{l0=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:zw.Buffer}catch{}function E0(T0,X0){var s0=T0.charCodeAt(X0);return s0>=65&&s0<=70?s0-55:s0>=97&&s0<=102?s0-87:s0-48&15}function j0(T0,X0,s0){var g0=E0(T0,s0);return s0-1>=X0&&(g0|=E0(T0,s0-1)<<4),g0}function M0(T0,X0,s0,g0){for(var d0=0,c0=Math.min(T0.length,s0),a0=X0;a0=49?S0-49+10:S0>=17?S0-17+10:S0}return d0}xu.isBN=function(T0){return T0 instanceof xu||T0!==null&&typeof T0=="object"&&T0.constructor.wordSize===xu.wordSize&&Array.isArray(T0.words)},xu.max=function(T0,X0){return T0.cmp(X0)>0?T0:X0},xu.min=function(T0,X0){return T0.cmp(X0)<0?T0:X0},xu.prototype._init=function(T0,X0,s0){if(typeof T0=="number")return this._initNumber(T0,X0,s0);if(typeof T0=="object")return this._initArray(T0,X0,s0);X0==="hex"&&(X0=16),mu(X0===(0|X0)&&X0>=2&&X0<=36);var g0=0;(T0=T0.toString().replace(/\s+/g,""))[0]==="-"&&(g0++,this.negative=1),g0=0;g0-=3)c0=T0[g0]|T0[g0-1]<<8|T0[g0-2]<<16,this.words[d0]|=c0<>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);else if(s0==="le")for(g0=0,d0=0;g0>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);return this.strip()},xu.prototype._parseHex=function(T0,X0,s0){this.length=Math.ceil((T0.length-X0)/6),this.words=new Array(this.length);for(var g0=0;g0=X0;g0-=2)d0=j0(T0,X0,g0)<=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;else for(g0=(T0.length-X0)%2==0?X0+1:X0;g0=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;this.strip()},xu.prototype._parseBase=function(T0,X0,s0){this.words=[0],this.length=1;for(var g0=0,d0=1;d0<=67108863;d0*=X0)g0++;g0--,d0=d0/X0|0;for(var c0=T0.length-s0,a0=c0%g0,S0=Math.min(c0,c0-a0)+s0,z0=0,Q0=s0;Q01&&this.words[this.length-1]===0;)this.length--;return this._normSign()},xu.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},xu.prototype.inspect=function(){return(this.red?""};var B0=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],q0=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],y1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function v1(T0,X0,s0){s0.negative=X0.negative^T0.negative;var g0=T0.length+X0.length|0;s0.length=g0,g0=g0-1|0;var d0=0|T0.words[0],c0=0|X0.words[0],a0=d0*c0,S0=67108863&a0,z0=a0/67108864|0;s0.words[0]=S0;for(var Q0=1;Q0>>26,T1=67108863&z0,U1=Math.min(Q0,X0.length-1),S1=Math.max(0,Q0-T0.length+1);S1<=U1;S1++){var n1=Q0-S1|0;p1+=(a0=(d0=0|T0.words[n1])*(c0=0|X0.words[S1])+T1)/67108864|0,T1=67108863&a0}s0.words[Q0]=0|T1,z0=0|p1}return z0!==0?s0.words[Q0]=0|z0:s0.length--,s0.strip()}xu.prototype.toString=function(T0,X0){var s0;if(X0=0|X0||1,(T0=T0||10)===16||T0==="hex"){s0="";for(var g0=0,d0=0,c0=0;c0>>24-g0&16777215)!=0||c0!==this.length-1?B0[6-S0.length]+S0+s0:S0+s0,(g0+=2)>=26&&(g0-=26,c0--)}for(d0!==0&&(s0=d0.toString(16)+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}if(T0===(0|T0)&&T0>=2&&T0<=36){var z0=q0[T0],Q0=y1[T0];s0="";var p1=this.clone();for(p1.negative=0;!p1.isZero();){var T1=p1.modn(Q0).toString(T0);s0=(p1=p1.idivn(Q0)).isZero()?T1+s0:B0[z0-T1.length]+T1+s0}for(this.isZero()&&(s0="0"+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}mu(!1,"Base should be between 2 and 36")},xu.prototype.toNumber=function(){var T0=this.words[0];return this.length===2?T0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?T0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-T0:T0},xu.prototype.toJSON=function(){return this.toString(16)},xu.prototype.toBuffer=function(T0,X0){return mu(l0!==void 0),this.toArrayLike(l0,T0,X0)},xu.prototype.toArray=function(T0,X0){return this.toArrayLike(Array,T0,X0)},xu.prototype.toArrayLike=function(T0,X0,s0){var g0=this.byteLength(),d0=s0||Math.max(1,g0);mu(g0<=d0,"byte array longer than desired length"),mu(d0>0,"Requested array length <= 0"),this.strip();var c0,a0,S0=X0==="le",z0=new T0(d0),Q0=this.clone();if(S0){for(a0=0;!Q0.isZero();a0++)c0=Q0.andln(255),Q0.iushrn(8),z0[a0]=c0;for(;a0=4096&&(s0+=13,X0>>>=13),X0>=64&&(s0+=7,X0>>>=7),X0>=8&&(s0+=4,X0>>>=4),X0>=2&&(s0+=2,X0>>>=2),s0+X0},xu.prototype._zeroBits=function(T0){if(T0===0)return 26;var X0=T0,s0=0;return!(8191&X0)&&(s0+=13,X0>>>=13),!(127&X0)&&(s0+=7,X0>>>=7),!(15&X0)&&(s0+=4,X0>>>=4),!(3&X0)&&(s0+=2,X0>>>=2),!(1&X0)&&s0++,s0},xu.prototype.bitLength=function(){var T0=this.words[this.length-1],X0=this._countBits(T0);return 26*(this.length-1)+X0},xu.prototype.zeroBits=function(){if(this.isZero())return 0;for(var T0=0,X0=0;X0T0.length?this.clone().ior(T0):T0.clone().ior(this)},xu.prototype.uor=function(T0){return this.length>T0.length?this.clone().iuor(T0):T0.clone().iuor(this)},xu.prototype.iuand=function(T0){var X0;X0=this.length>T0.length?T0:this;for(var s0=0;s0T0.length?this.clone().iand(T0):T0.clone().iand(this)},xu.prototype.uand=function(T0){return this.length>T0.length?this.clone().iuand(T0):T0.clone().iuand(this)},xu.prototype.iuxor=function(T0){var X0,s0;this.length>T0.length?(X0=this,s0=T0):(X0=T0,s0=this);for(var g0=0;g0T0.length?this.clone().ixor(T0):T0.clone().ixor(this)},xu.prototype.uxor=function(T0){return this.length>T0.length?this.clone().iuxor(T0):T0.clone().iuxor(this)},xu.prototype.inotn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=0|Math.ceil(T0/26),s0=T0%26;this._expand(X0),s0>0&&X0--;for(var g0=0;g00&&(this.words[g0]=~this.words[g0]&67108863>>26-s0),this.strip()},xu.prototype.notn=function(T0){return this.clone().inotn(T0)},xu.prototype.setn=function(T0,X0){mu(typeof T0=="number"&&T0>=0);var s0=T0/26|0,g0=T0%26;return this._expand(s0+1),this.words[s0]=X0?this.words[s0]|1<T0.length?(s0=this,g0=T0):(s0=T0,g0=this);for(var d0=0,c0=0;c0>>26;for(;d0!==0&&c0>>26;if(this.length=s0.length,d0!==0)this.words[this.length]=d0,this.length++;else if(s0!==this)for(;c0T0.length?this.clone().iadd(T0):T0.clone().iadd(this)},xu.prototype.isub=function(T0){if(T0.negative!==0){T0.negative=0;var X0=this.iadd(T0);return T0.negative=1,X0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(T0),this.negative=1,this._normSign();var s0,g0,d0=this.cmp(T0);if(d0===0)return this.negative=0,this.length=1,this.words[0]=0,this;d0>0?(s0=this,g0=T0):(s0=T0,g0=this);for(var c0=0,a0=0;a0>26,this.words[a0]=67108863&X0;for(;c0!==0&&a0>26,this.words[a0]=67108863&X0;if(c0===0&&a0>>13,S1=0|a0[1],n1=8191&S1,V1=S1>>>13,J1=0|a0[2],wv=8191&J1,Sv=J1>>>13,Hv=0|a0[3],ty=8191&Hv,gy=Hv>>>13,yv=0|a0[4],Av=8191&yv,Dv=yv>>>13,ry=0|a0[5],Jv=8191&ry,Fv=ry>>>13,iy=0|a0[6],cy=8191&iy,Uy=iy>>>13,r2=0|a0[7],f2=8191&r2,j2=r2>>>13,mw=0|a0[8],p2=8191&mw,Vw=mw>>>13,Ew=0|a0[9],q2=8191&Ew,$3=Ew>>>13,Rw=0|S0[0],K2=8191&Rw,Xw=Rw>>>13,a3=0|S0[1],F2=8191&a3,Qw=a3>>>13,vt=0|S0[2],wt=8191&vt,Ys=vt>>>13,pu=0|S0[3],Ru=8191&pu,wu=pu>>>13,t0=0|S0[4],m0=8191&t0,k0=t0>>>13,_0=0|S0[5],R0=8191&_0,N0=_0>>>13,l1=0|S0[6],a1=8191&l1,x1=l1>>>13,K1=0|S0[7],W1=8191&K1,_g=K1>>>13,uv=0|S0[8],Tv=8191&uv,Uv=uv>>>13,Wv=0|S0[9],ny=8191&Wv,Rv=Wv>>>13;s0.negative=T0.negative^X0.negative,s0.length=19;var Gv=(Q0+(g0=Math.imul(T1,K2))|0)+((8191&(d0=(d0=Math.imul(T1,Xw))+Math.imul(U1,K2)|0))<<13)|0;Q0=((c0=Math.imul(U1,Xw))+(d0>>>13)|0)+(Gv>>>26)|0,Gv&=67108863,g0=Math.imul(n1,K2),d0=(d0=Math.imul(n1,Xw))+Math.imul(V1,K2)|0,c0=Math.imul(V1,Xw);var C0=(Q0+(g0=g0+Math.imul(T1,F2)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Qw)|0)+Math.imul(U1,F2)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Qw)|0)+(d0>>>13)|0)+(C0>>>26)|0,C0&=67108863,g0=Math.imul(wv,K2),d0=(d0=Math.imul(wv,Xw))+Math.imul(Sv,K2)|0,c0=Math.imul(Sv,Xw),g0=g0+Math.imul(n1,F2)|0,d0=(d0=d0+Math.imul(n1,Qw)|0)+Math.imul(V1,F2)|0,c0=c0+Math.imul(V1,Qw)|0;var J0=(Q0+(g0=g0+Math.imul(T1,wt)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Ys)|0)+Math.imul(U1,wt)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Ys)|0)+(d0>>>13)|0)+(J0>>>26)|0,J0&=67108863,g0=Math.imul(ty,K2),d0=(d0=Math.imul(ty,Xw))+Math.imul(gy,K2)|0,c0=Math.imul(gy,Xw),g0=g0+Math.imul(wv,F2)|0,d0=(d0=d0+Math.imul(wv,Qw)|0)+Math.imul(Sv,F2)|0,c0=c0+Math.imul(Sv,Qw)|0,g0=g0+Math.imul(n1,wt)|0,d0=(d0=d0+Math.imul(n1,Ys)|0)+Math.imul(V1,wt)|0,c0=c0+Math.imul(V1,Ys)|0;var f0=(Q0+(g0=g0+Math.imul(T1,Ru)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,wu)|0)+Math.imul(U1,Ru)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,wu)|0)+(d0>>>13)|0)+(f0>>>26)|0,f0&=67108863,g0=Math.imul(Av,K2),d0=(d0=Math.imul(Av,Xw))+Math.imul(Dv,K2)|0,c0=Math.imul(Dv,Xw),g0=g0+Math.imul(ty,F2)|0,d0=(d0=d0+Math.imul(ty,Qw)|0)+Math.imul(gy,F2)|0,c0=c0+Math.imul(gy,Qw)|0,g0=g0+Math.imul(wv,wt)|0,d0=(d0=d0+Math.imul(wv,Ys)|0)+Math.imul(Sv,wt)|0,c0=c0+Math.imul(Sv,Ys)|0,g0=g0+Math.imul(n1,Ru)|0,d0=(d0=d0+Math.imul(n1,wu)|0)+Math.imul(V1,Ru)|0,c0=c0+Math.imul(V1,wu)|0;var v0=(Q0+(g0=g0+Math.imul(T1,m0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,k0)|0)+Math.imul(U1,m0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,k0)|0)+(d0>>>13)|0)+(v0>>>26)|0,v0&=67108863,g0=Math.imul(Jv,K2),d0=(d0=Math.imul(Jv,Xw))+Math.imul(Fv,K2)|0,c0=Math.imul(Fv,Xw),g0=g0+Math.imul(Av,F2)|0,d0=(d0=d0+Math.imul(Av,Qw)|0)+Math.imul(Dv,F2)|0,c0=c0+Math.imul(Dv,Qw)|0,g0=g0+Math.imul(ty,wt)|0,d0=(d0=d0+Math.imul(ty,Ys)|0)+Math.imul(gy,wt)|0,c0=c0+Math.imul(gy,Ys)|0,g0=g0+Math.imul(wv,Ru)|0,d0=(d0=d0+Math.imul(wv,wu)|0)+Math.imul(Sv,Ru)|0,c0=c0+Math.imul(Sv,wu)|0,g0=g0+Math.imul(n1,m0)|0,d0=(d0=d0+Math.imul(n1,k0)|0)+Math.imul(V1,m0)|0,c0=c0+Math.imul(V1,k0)|0;var h0=(Q0+(g0=g0+Math.imul(T1,R0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,N0)|0)+Math.imul(U1,R0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,N0)|0)+(d0>>>13)|0)+(h0>>>26)|0,h0&=67108863,g0=Math.imul(cy,K2),d0=(d0=Math.imul(cy,Xw))+Math.imul(Uy,K2)|0,c0=Math.imul(Uy,Xw),g0=g0+Math.imul(Jv,F2)|0,d0=(d0=d0+Math.imul(Jv,Qw)|0)+Math.imul(Fv,F2)|0,c0=c0+Math.imul(Fv,Qw)|0,g0=g0+Math.imul(Av,wt)|0,d0=(d0=d0+Math.imul(Av,Ys)|0)+Math.imul(Dv,wt)|0,c0=c0+Math.imul(Dv,Ys)|0,g0=g0+Math.imul(ty,Ru)|0,d0=(d0=d0+Math.imul(ty,wu)|0)+Math.imul(gy,Ru)|0,c0=c0+Math.imul(gy,wu)|0,g0=g0+Math.imul(wv,m0)|0,d0=(d0=d0+Math.imul(wv,k0)|0)+Math.imul(Sv,m0)|0,c0=c0+Math.imul(Sv,k0)|0,g0=g0+Math.imul(n1,R0)|0,d0=(d0=d0+Math.imul(n1,N0)|0)+Math.imul(V1,R0)|0,c0=c0+Math.imul(V1,N0)|0;var u0=(Q0+(g0=g0+Math.imul(T1,a1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,x1)|0)+Math.imul(U1,a1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,x1)|0)+(d0>>>13)|0)+(u0>>>26)|0,u0&=67108863,g0=Math.imul(f2,K2),d0=(d0=Math.imul(f2,Xw))+Math.imul(j2,K2)|0,c0=Math.imul(j2,Xw),g0=g0+Math.imul(cy,F2)|0,d0=(d0=d0+Math.imul(cy,Qw)|0)+Math.imul(Uy,F2)|0,c0=c0+Math.imul(Uy,Qw)|0,g0=g0+Math.imul(Jv,wt)|0,d0=(d0=d0+Math.imul(Jv,Ys)|0)+Math.imul(Fv,wt)|0,c0=c0+Math.imul(Fv,Ys)|0,g0=g0+Math.imul(Av,Ru)|0,d0=(d0=d0+Math.imul(Av,wu)|0)+Math.imul(Dv,Ru)|0,c0=c0+Math.imul(Dv,wu)|0,g0=g0+Math.imul(ty,m0)|0,d0=(d0=d0+Math.imul(ty,k0)|0)+Math.imul(gy,m0)|0,c0=c0+Math.imul(gy,k0)|0,g0=g0+Math.imul(wv,R0)|0,d0=(d0=d0+Math.imul(wv,N0)|0)+Math.imul(Sv,R0)|0,c0=c0+Math.imul(Sv,N0)|0,g0=g0+Math.imul(n1,a1)|0,d0=(d0=d0+Math.imul(n1,x1)|0)+Math.imul(V1,a1)|0,c0=c0+Math.imul(V1,x1)|0;var o0=(Q0+(g0=g0+Math.imul(T1,W1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,_g)|0)+Math.imul(U1,W1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,_g)|0)+(d0>>>13)|0)+(o0>>>26)|0,o0&=67108863,g0=Math.imul(p2,K2),d0=(d0=Math.imul(p2,Xw))+Math.imul(Vw,K2)|0,c0=Math.imul(Vw,Xw),g0=g0+Math.imul(f2,F2)|0,d0=(d0=d0+Math.imul(f2,Qw)|0)+Math.imul(j2,F2)|0,c0=c0+Math.imul(j2,Qw)|0,g0=g0+Math.imul(cy,wt)|0,d0=(d0=d0+Math.imul(cy,Ys)|0)+Math.imul(Uy,wt)|0,c0=c0+Math.imul(Uy,Ys)|0,g0=g0+Math.imul(Jv,Ru)|0,d0=(d0=d0+Math.imul(Jv,wu)|0)+Math.imul(Fv,Ru)|0,c0=c0+Math.imul(Fv,wu)|0,g0=g0+Math.imul(Av,m0)|0,d0=(d0=d0+Math.imul(Av,k0)|0)+Math.imul(Dv,m0)|0,c0=c0+Math.imul(Dv,k0)|0,g0=g0+Math.imul(ty,R0)|0,d0=(d0=d0+Math.imul(ty,N0)|0)+Math.imul(gy,R0)|0,c0=c0+Math.imul(gy,N0)|0,g0=g0+Math.imul(wv,a1)|0,d0=(d0=d0+Math.imul(wv,x1)|0)+Math.imul(Sv,a1)|0,c0=c0+Math.imul(Sv,x1)|0,g0=g0+Math.imul(n1,W1)|0,d0=(d0=d0+Math.imul(n1,_g)|0)+Math.imul(V1,W1)|0,c0=c0+Math.imul(V1,_g)|0;var x0=(Q0+(g0=g0+Math.imul(T1,Tv)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Uv)|0)+Math.imul(U1,Tv)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Uv)|0)+(d0>>>13)|0)+(x0>>>26)|0,x0&=67108863,g0=Math.imul(q2,K2),d0=(d0=Math.imul(q2,Xw))+Math.imul($3,K2)|0,c0=Math.imul($3,Xw),g0=g0+Math.imul(p2,F2)|0,d0=(d0=d0+Math.imul(p2,Qw)|0)+Math.imul(Vw,F2)|0,c0=c0+Math.imul(Vw,Qw)|0,g0=g0+Math.imul(f2,wt)|0,d0=(d0=d0+Math.imul(f2,Ys)|0)+Math.imul(j2,wt)|0,c0=c0+Math.imul(j2,Ys)|0,g0=g0+Math.imul(cy,Ru)|0,d0=(d0=d0+Math.imul(cy,wu)|0)+Math.imul(Uy,Ru)|0,c0=c0+Math.imul(Uy,wu)|0,g0=g0+Math.imul(Jv,m0)|0,d0=(d0=d0+Math.imul(Jv,k0)|0)+Math.imul(Fv,m0)|0,c0=c0+Math.imul(Fv,k0)|0,g0=g0+Math.imul(Av,R0)|0,d0=(d0=d0+Math.imul(Av,N0)|0)+Math.imul(Dv,R0)|0,c0=c0+Math.imul(Dv,N0)|0,g0=g0+Math.imul(ty,a1)|0,d0=(d0=d0+Math.imul(ty,x1)|0)+Math.imul(gy,a1)|0,c0=c0+Math.imul(gy,x1)|0,g0=g0+Math.imul(wv,W1)|0,d0=(d0=d0+Math.imul(wv,_g)|0)+Math.imul(Sv,W1)|0,c0=c0+Math.imul(Sv,_g)|0,g0=g0+Math.imul(n1,Tv)|0,d0=(d0=d0+Math.imul(n1,Uv)|0)+Math.imul(V1,Tv)|0,c0=c0+Math.imul(V1,Uv)|0;var U0=(Q0+(g0=g0+Math.imul(T1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Rv)|0)+Math.imul(U1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Rv)|0)+(d0>>>13)|0)+(U0>>>26)|0,U0&=67108863,g0=Math.imul(q2,F2),d0=(d0=Math.imul(q2,Qw))+Math.imul($3,F2)|0,c0=Math.imul($3,Qw),g0=g0+Math.imul(p2,wt)|0,d0=(d0=d0+Math.imul(p2,Ys)|0)+Math.imul(Vw,wt)|0,c0=c0+Math.imul(Vw,Ys)|0,g0=g0+Math.imul(f2,Ru)|0,d0=(d0=d0+Math.imul(f2,wu)|0)+Math.imul(j2,Ru)|0,c0=c0+Math.imul(j2,wu)|0,g0=g0+Math.imul(cy,m0)|0,d0=(d0=d0+Math.imul(cy,k0)|0)+Math.imul(Uy,m0)|0,c0=c0+Math.imul(Uy,k0)|0,g0=g0+Math.imul(Jv,R0)|0,d0=(d0=d0+Math.imul(Jv,N0)|0)+Math.imul(Fv,R0)|0,c0=c0+Math.imul(Fv,N0)|0,g0=g0+Math.imul(Av,a1)|0,d0=(d0=d0+Math.imul(Av,x1)|0)+Math.imul(Dv,a1)|0,c0=c0+Math.imul(Dv,x1)|0,g0=g0+Math.imul(ty,W1)|0,d0=(d0=d0+Math.imul(ty,_g)|0)+Math.imul(gy,W1)|0,c0=c0+Math.imul(gy,_g)|0,g0=g0+Math.imul(wv,Tv)|0,d0=(d0=d0+Math.imul(wv,Uv)|0)+Math.imul(Sv,Tv)|0,c0=c0+Math.imul(Sv,Uv)|0;var e1=(Q0+(g0=g0+Math.imul(n1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(n1,Rv)|0)+Math.imul(V1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(V1,Rv)|0)+(d0>>>13)|0)+(e1>>>26)|0,e1&=67108863,g0=Math.imul(q2,wt),d0=(d0=Math.imul(q2,Ys))+Math.imul($3,wt)|0,c0=Math.imul($3,Ys),g0=g0+Math.imul(p2,Ru)|0,d0=(d0=d0+Math.imul(p2,wu)|0)+Math.imul(Vw,Ru)|0,c0=c0+Math.imul(Vw,wu)|0,g0=g0+Math.imul(f2,m0)|0,d0=(d0=d0+Math.imul(f2,k0)|0)+Math.imul(j2,m0)|0,c0=c0+Math.imul(j2,k0)|0,g0=g0+Math.imul(cy,R0)|0,d0=(d0=d0+Math.imul(cy,N0)|0)+Math.imul(Uy,R0)|0,c0=c0+Math.imul(Uy,N0)|0,g0=g0+Math.imul(Jv,a1)|0,d0=(d0=d0+Math.imul(Jv,x1)|0)+Math.imul(Fv,a1)|0,c0=c0+Math.imul(Fv,x1)|0,g0=g0+Math.imul(Av,W1)|0,d0=(d0=d0+Math.imul(Av,_g)|0)+Math.imul(Dv,W1)|0,c0=c0+Math.imul(Dv,_g)|0,g0=g0+Math.imul(ty,Tv)|0,d0=(d0=d0+Math.imul(ty,Uv)|0)+Math.imul(gy,Tv)|0,c0=c0+Math.imul(gy,Uv)|0;var h1=(Q0+(g0=g0+Math.imul(wv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(wv,Rv)|0)+Math.imul(Sv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Sv,Rv)|0)+(d0>>>13)|0)+(h1>>>26)|0,h1&=67108863,g0=Math.imul(q2,Ru),d0=(d0=Math.imul(q2,wu))+Math.imul($3,Ru)|0,c0=Math.imul($3,wu),g0=g0+Math.imul(p2,m0)|0,d0=(d0=d0+Math.imul(p2,k0)|0)+Math.imul(Vw,m0)|0,c0=c0+Math.imul(Vw,k0)|0,g0=g0+Math.imul(f2,R0)|0,d0=(d0=d0+Math.imul(f2,N0)|0)+Math.imul(j2,R0)|0,c0=c0+Math.imul(j2,N0)|0,g0=g0+Math.imul(cy,a1)|0,d0=(d0=d0+Math.imul(cy,x1)|0)+Math.imul(Uy,a1)|0,c0=c0+Math.imul(Uy,x1)|0,g0=g0+Math.imul(Jv,W1)|0,d0=(d0=d0+Math.imul(Jv,_g)|0)+Math.imul(Fv,W1)|0,c0=c0+Math.imul(Fv,_g)|0,g0=g0+Math.imul(Av,Tv)|0,d0=(d0=d0+Math.imul(Av,Uv)|0)+Math.imul(Dv,Tv)|0,c0=c0+Math.imul(Dv,Uv)|0;var k1=(Q0+(g0=g0+Math.imul(ty,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(ty,Rv)|0)+Math.imul(gy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(gy,Rv)|0)+(d0>>>13)|0)+(k1>>>26)|0,k1&=67108863,g0=Math.imul(q2,m0),d0=(d0=Math.imul(q2,k0))+Math.imul($3,m0)|0,c0=Math.imul($3,k0),g0=g0+Math.imul(p2,R0)|0,d0=(d0=d0+Math.imul(p2,N0)|0)+Math.imul(Vw,R0)|0,c0=c0+Math.imul(Vw,N0)|0,g0=g0+Math.imul(f2,a1)|0,d0=(d0=d0+Math.imul(f2,x1)|0)+Math.imul(j2,a1)|0,c0=c0+Math.imul(j2,x1)|0,g0=g0+Math.imul(cy,W1)|0,d0=(d0=d0+Math.imul(cy,_g)|0)+Math.imul(Uy,W1)|0,c0=c0+Math.imul(Uy,_g)|0,g0=g0+Math.imul(Jv,Tv)|0,d0=(d0=d0+Math.imul(Jv,Uv)|0)+Math.imul(Fv,Tv)|0,c0=c0+Math.imul(Fv,Uv)|0;var q1=(Q0+(g0=g0+Math.imul(Av,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Av,Rv)|0)+Math.imul(Dv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Dv,Rv)|0)+(d0>>>13)|0)+(q1>>>26)|0,q1&=67108863,g0=Math.imul(q2,R0),d0=(d0=Math.imul(q2,N0))+Math.imul($3,R0)|0,c0=Math.imul($3,N0),g0=g0+Math.imul(p2,a1)|0,d0=(d0=d0+Math.imul(p2,x1)|0)+Math.imul(Vw,a1)|0,c0=c0+Math.imul(Vw,x1)|0,g0=g0+Math.imul(f2,W1)|0,d0=(d0=d0+Math.imul(f2,_g)|0)+Math.imul(j2,W1)|0,c0=c0+Math.imul(j2,_g)|0,g0=g0+Math.imul(cy,Tv)|0,d0=(d0=d0+Math.imul(cy,Uv)|0)+Math.imul(Uy,Tv)|0,c0=c0+Math.imul(Uy,Uv)|0;var L1=(Q0+(g0=g0+Math.imul(Jv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Jv,Rv)|0)+Math.imul(Fv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Fv,Rv)|0)+(d0>>>13)|0)+(L1>>>26)|0,L1&=67108863,g0=Math.imul(q2,a1),d0=(d0=Math.imul(q2,x1))+Math.imul($3,a1)|0,c0=Math.imul($3,x1),g0=g0+Math.imul(p2,W1)|0,d0=(d0=d0+Math.imul(p2,_g)|0)+Math.imul(Vw,W1)|0,c0=c0+Math.imul(Vw,_g)|0,g0=g0+Math.imul(f2,Tv)|0,d0=(d0=d0+Math.imul(f2,Uv)|0)+Math.imul(j2,Tv)|0,c0=c0+Math.imul(j2,Uv)|0;var A1=(Q0+(g0=g0+Math.imul(cy,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(cy,Rv)|0)+Math.imul(Uy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Uy,Rv)|0)+(d0>>>13)|0)+(A1>>>26)|0,A1&=67108863,g0=Math.imul(q2,W1),d0=(d0=Math.imul(q2,_g))+Math.imul($3,W1)|0,c0=Math.imul($3,_g),g0=g0+Math.imul(p2,Tv)|0,d0=(d0=d0+Math.imul(p2,Uv)|0)+Math.imul(Vw,Tv)|0,c0=c0+Math.imul(Vw,Uv)|0;var M1=(Q0+(g0=g0+Math.imul(f2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(f2,Rv)|0)+Math.imul(j2,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(j2,Rv)|0)+(d0>>>13)|0)+(M1>>>26)|0,M1&=67108863,g0=Math.imul(q2,Tv),d0=(d0=Math.imul(q2,Uv))+Math.imul($3,Tv)|0,c0=Math.imul($3,Uv);var X1=(Q0+(g0=g0+Math.imul(p2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(p2,Rv)|0)+Math.imul(Vw,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Vw,Rv)|0)+(d0>>>13)|0)+(X1>>>26)|0,X1&=67108863;var dv=(Q0+(g0=Math.imul(q2,ny))|0)+((8191&(d0=(d0=Math.imul(q2,Rv))+Math.imul($3,ny)|0))<<13)|0;return Q0=((c0=Math.imul($3,Rv))+(d0>>>13)|0)+(dv>>>26)|0,dv&=67108863,z0[0]=Gv,z0[1]=C0,z0[2]=J0,z0[3]=f0,z0[4]=v0,z0[5]=h0,z0[6]=u0,z0[7]=o0,z0[8]=x0,z0[9]=U0,z0[10]=e1,z0[11]=h1,z0[12]=k1,z0[13]=q1,z0[14]=L1,z0[15]=A1,z0[16]=M1,z0[17]=X1,z0[18]=dv,Q0!==0&&(z0[19]=Q0,s0.length++),s0};function ov(T0,X0,s0){return new bv().mulp(T0,X0,s0)}function bv(T0,X0){this.x=T0,this.y=X0}Math.imul||(F1=v1),xu.prototype.mulTo=function(T0,X0){var s0,g0=this.length+T0.length;return s0=this.length===10&&T0.length===10?F1(this,T0,X0):g0<63?v1(this,T0,X0):g0<1024?function(d0,c0,a0){a0.negative=c0.negative^d0.negative,a0.length=d0.length+c0.length;for(var S0=0,z0=0,Q0=0;Q0>>26)|0)>>>26,p1&=67108863}a0.words[Q0]=T1,S0=p1,p1=z0}return S0!==0?a0.words[Q0]=S0:a0.length--,a0.strip()}(this,T0,X0):ov(this,T0,X0),s0},bv.prototype.makeRBT=function(T0){for(var X0=new Array(T0),s0=xu.prototype._countBits(T0)-1,g0=0;g0>=1;return g0},bv.prototype.permute=function(T0,X0,s0,g0,d0,c0){for(var a0=0;a0>>=1)d0++;return 1<>>=13,s0[2*c0+1]=8191&d0,d0>>>=13;for(c0=2*X0;c0>=26,X0+=g0/67108864|0,X0+=d0>>>26,this.words[s0]=67108863&d0}return X0!==0&&(this.words[s0]=X0,this.length++),this},xu.prototype.muln=function(T0){return this.clone().imuln(T0)},xu.prototype.sqr=function(){return this.mul(this)},xu.prototype.isqr=function(){return this.imul(this.clone())},xu.prototype.pow=function(T0){var X0=function(c0){for(var a0=new Array(c0.bitLength()),S0=0;S0>>Q0}return a0}(T0);if(X0.length===0)return new xu(1);for(var s0=this,g0=0;g0=0);var X0,s0=T0%26,g0=(T0-s0)/26,d0=67108863>>>26-s0<<26-s0;if(s0!==0){var c0=0;for(X0=0;X0>>26-s0}c0&&(this.words[X0]=c0,this.length++)}if(g0!==0){for(X0=this.length-1;X0>=0;X0--)this.words[X0+g0]=this.words[X0];for(X0=0;X0=0),g0=X0?(X0-X0%26)/26:0;var d0=T0%26,c0=Math.min((T0-d0)/26,this.length),a0=67108863^67108863>>>d0<c0)for(this.length-=c0,z0=0;z0=0&&(Q0!==0||z0>=g0);z0--){var p1=0|this.words[z0];this.words[z0]=Q0<<26-d0|p1>>>d0,Q0=p1&a0}return S0&&Q0!==0&&(S0.words[S0.length++]=Q0),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},xu.prototype.ishrn=function(T0,X0,s0){return mu(this.negative===0),this.iushrn(T0,X0,s0)},xu.prototype.shln=function(T0){return this.clone().ishln(T0)},xu.prototype.ushln=function(T0){return this.clone().iushln(T0)},xu.prototype.shrn=function(T0){return this.clone().ishrn(T0)},xu.prototype.ushrn=function(T0){return this.clone().iushrn(T0)},xu.prototype.testn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=T0%26,s0=(T0-X0)/26,g0=1<=0);var X0=T0%26,s0=(T0-X0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=s0)return this;if(X0!==0&&s0++,this.length=Math.min(s0,this.length),X0!==0){var g0=67108863^67108863>>>X0<=67108864;X0++)this.words[X0]-=67108864,X0===this.length-1?this.words[X0+1]=1:this.words[X0+1]++;return this.length=Math.max(this.length,X0+1),this},xu.prototype.isubn=function(T0){if(mu(typeof T0=="number"),mu(T0<67108864),T0<0)return this.iaddn(-T0);if(this.negative!==0)return this.negative=0,this.iaddn(T0),this.negative=1,this;if(this.words[0]-=T0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var X0=0;X0>26)-(S0/67108864|0),this.words[g0+s0]=67108863&d0}for(;g0>26,this.words[g0+s0]=67108863&d0;if(a0===0)return this.strip();for(mu(a0===-1),a0=0,g0=0;g0>26,this.words[g0]=67108863&d0;return this.negative=1,this.strip()},xu.prototype._wordDiv=function(T0,X0){var s0=(this.length,T0.length),g0=this.clone(),d0=T0,c0=0|d0.words[d0.length-1];(s0=26-this._countBits(c0))!=0&&(d0=d0.ushln(s0),g0.iushln(s0),c0=0|d0.words[d0.length-1]);var a0,S0=g0.length-d0.length;if(X0!=="mod"){(a0=new xu(null)).length=S0+1,a0.words=new Array(a0.length);for(var z0=0;z0=0;p1--){var T1=67108864*(0|g0.words[d0.length+p1])+(0|g0.words[d0.length+p1-1]);for(T1=Math.min(T1/c0|0,67108863),g0._ishlnsubmul(d0,T1,p1);g0.negative!==0;)T1--,g0.negative=0,g0._ishlnsubmul(d0,1,p1),g0.isZero()||(g0.negative^=1);a0&&(a0.words[p1]=T1)}return a0&&a0.strip(),g0.strip(),X0!=="div"&&s0!==0&&g0.iushrn(s0),{div:a0||null,mod:g0}},xu.prototype.divmod=function(T0,X0,s0){return mu(!T0.isZero()),this.isZero()?{div:new xu(0),mod:new xu(0)}:this.negative!==0&&T0.negative===0?(c0=this.neg().divmod(T0,X0),X0!=="mod"&&(g0=c0.div.neg()),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.iadd(T0)),{div:g0,mod:d0}):this.negative===0&&T0.negative!==0?(c0=this.divmod(T0.neg(),X0),X0!=="mod"&&(g0=c0.div.neg()),{div:g0,mod:c0.mod}):this.negative&T0.negative?(c0=this.neg().divmod(T0.neg(),X0),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.isub(T0)),{div:c0.div,mod:d0}):T0.length>this.length||this.cmp(T0)<0?{div:new xu(0),mod:this}:T0.length===1?X0==="div"?{div:this.divn(T0.words[0]),mod:null}:X0==="mod"?{div:null,mod:new xu(this.modn(T0.words[0]))}:{div:this.divn(T0.words[0]),mod:new xu(this.modn(T0.words[0]))}:this._wordDiv(T0,X0);var g0,d0,c0},xu.prototype.div=function(T0){return this.divmod(T0,"div",!1).div},xu.prototype.mod=function(T0){return this.divmod(T0,"mod",!1).mod},xu.prototype.umod=function(T0){return this.divmod(T0,"mod",!0).mod},xu.prototype.divRound=function(T0){var X0=this.divmod(T0);if(X0.mod.isZero())return X0.div;var s0=X0.div.negative!==0?X0.mod.isub(T0):X0.mod,g0=T0.ushrn(1),d0=T0.andln(1),c0=s0.cmp(g0);return c0<0||d0===1&&c0===0?X0.div:X0.div.negative!==0?X0.div.isubn(1):X0.div.iaddn(1)},xu.prototype.modn=function(T0){mu(T0<=67108863);for(var X0=(1<<26)%T0,s0=0,g0=this.length-1;g0>=0;g0--)s0=(X0*s0+(0|this.words[g0]))%T0;return s0},xu.prototype.idivn=function(T0){mu(T0<=67108863);for(var X0=0,s0=this.length-1;s0>=0;s0--){var g0=(0|this.words[s0])+67108864*X0;this.words[s0]=g0/T0|0,X0=g0%T0}return this.strip()},xu.prototype.divn=function(T0){return this.clone().idivn(T0)},xu.prototype.egcd=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0=new xu(1),d0=new xu(0),c0=new xu(0),a0=new xu(1),S0=0;X0.isEven()&&s0.isEven();)X0.iushrn(1),s0.iushrn(1),++S0;for(var z0=s0.clone(),Q0=X0.clone();!X0.isZero();){for(var p1=0,T1=1;!(X0.words[0]&T1)&&p1<26;++p1,T1<<=1);if(p1>0)for(X0.iushrn(p1);p1-- >0;)(g0.isOdd()||d0.isOdd())&&(g0.iadd(z0),d0.isub(Q0)),g0.iushrn(1),d0.iushrn(1);for(var U1=0,S1=1;!(s0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(s0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(z0),a0.isub(Q0)),c0.iushrn(1),a0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),g0.isub(c0),d0.isub(a0)):(s0.isub(X0),c0.isub(g0),a0.isub(d0))}return{a:c0,b:a0,gcd:s0.iushln(S0)}},xu.prototype._invmp=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0,d0=new xu(1),c0=new xu(0),a0=s0.clone();X0.cmpn(1)>0&&s0.cmpn(1)>0;){for(var S0=0,z0=1;!(X0.words[0]&z0)&&S0<26;++S0,z0<<=1);if(S0>0)for(X0.iushrn(S0);S0-- >0;)d0.isOdd()&&d0.iadd(a0),d0.iushrn(1);for(var Q0=0,p1=1;!(s0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(s0.iushrn(Q0);Q0-- >0;)c0.isOdd()&&c0.iadd(a0),c0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),d0.isub(c0)):(s0.isub(X0),c0.isub(d0))}return(g0=X0.cmpn(1)===0?d0:c0).cmpn(0)<0&&g0.iadd(T0),g0},xu.prototype.gcd=function(T0){if(this.isZero())return T0.abs();if(T0.isZero())return this.abs();var X0=this.clone(),s0=T0.clone();X0.negative=0,s0.negative=0;for(var g0=0;X0.isEven()&&s0.isEven();g0++)X0.iushrn(1),s0.iushrn(1);for(;;){for(;X0.isEven();)X0.iushrn(1);for(;s0.isEven();)s0.iushrn(1);var d0=X0.cmp(s0);if(d0<0){var c0=X0;X0=s0,s0=c0}else if(d0===0||s0.cmpn(1)===0)break;X0.isub(s0)}return s0.iushln(g0)},xu.prototype.invm=function(T0){return this.egcd(T0).a.umod(T0)},xu.prototype.isEven=function(){return(1&this.words[0])==0},xu.prototype.isOdd=function(){return(1&this.words[0])==1},xu.prototype.andln=function(T0){return this.words[0]&T0},xu.prototype.bincn=function(T0){mu(typeof T0=="number");var X0=T0%26,s0=(T0-X0)/26,g0=1<>>26,a0&=67108863,this.words[c0]=a0}return d0!==0&&(this.words[c0]=d0,this.length++),this},xu.prototype.isZero=function(){return this.length===1&&this.words[0]===0},xu.prototype.cmpn=function(T0){var X0,s0=T0<0;if(this.negative!==0&&!s0)return-1;if(this.negative===0&&s0)return 1;if(this.strip(),this.length>1)X0=1;else{s0&&(T0=-T0),mu(T0<=67108863,"Number is too big");var g0=0|this.words[0];X0=g0===T0?0:g0T0.length)return 1;if(this.length=0;s0--){var g0=0|this.words[s0],d0=0|T0.words[s0];if(g0!==d0){g0d0&&(X0=1);break}}return X0},xu.prototype.gtn=function(T0){return this.cmpn(T0)===1},xu.prototype.gt=function(T0){return this.cmp(T0)===1},xu.prototype.gten=function(T0){return this.cmpn(T0)>=0},xu.prototype.gte=function(T0){return this.cmp(T0)>=0},xu.prototype.ltn=function(T0){return this.cmpn(T0)===-1},xu.prototype.lt=function(T0){return this.cmp(T0)===-1},xu.prototype.lten=function(T0){return this.cmpn(T0)<=0},xu.prototype.lte=function(T0){return this.cmp(T0)<=0},xu.prototype.eqn=function(T0){return this.cmpn(T0)===0},xu.prototype.eq=function(T0){return this.cmp(T0)===0},xu.red=function(T0){return new qv(T0)},xu.prototype.toRed=function(T0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),T0.convertTo(this)._forceRed(T0)},xu.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},xu.prototype._forceRed=function(T0){return this.red=T0,this},xu.prototype.forceRed=function(T0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(T0)},xu.prototype.redAdd=function(T0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,T0)},xu.prototype.redIAdd=function(T0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,T0)},xu.prototype.redSub=function(T0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,T0)},xu.prototype.redISub=function(T0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,T0)},xu.prototype.redShl=function(T0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,T0)},xu.prototype.redMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.mul(this,T0)},xu.prototype.redIMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.imul(this,T0)},xu.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},xu.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},xu.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},xu.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},xu.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},xu.prototype.redPow=function(T0){return mu(this.red&&!T0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,T0)};var gv={k256:null,p224:null,p192:null,p25519:null};function xv(T0,X0){this.name=T0,this.p=new xu(X0,16),this.n=this.p.bitLength(),this.k=new xu(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function hy(){xv.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function oy(){xv.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function fy(){xv.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Fy(){xv.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function qv(T0){if(typeof T0=="string"){var X0=xu._prime(T0);this.m=X0.p,this.prime=X0}else mu(T0.gtn(1),"modulus must be greater than 1"),this.m=T0,this.prime=null}function Qv(T0){qv.call(this,T0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new xu(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}xv.prototype._tmp=function(){var T0=new xu(null);return T0.words=new Array(Math.ceil(this.n/13)),T0},xv.prototype.ireduce=function(T0){var X0,s0=T0;do this.split(s0,this.tmp),X0=(s0=(s0=this.imulK(s0)).iadd(this.tmp)).bitLength();while(X0>this.n);var g0=X00?s0.isub(this.p):s0.strip!==void 0?s0.strip():s0._strip(),s0},xv.prototype.split=function(T0,X0){T0.iushrn(this.n,0,X0)},xv.prototype.imulK=function(T0){return T0.imul(this.k)},Mu(hy,xv),hy.prototype.split=function(T0,X0){for(var s0=4194303,g0=Math.min(T0.length,9),d0=0;d0>>22,c0=a0}c0>>>=22,T0.words[d0-10]=c0,c0===0&&T0.length>10?T0.length-=10:T0.length-=9},hy.prototype.imulK=function(T0){T0.words[T0.length]=0,T0.words[T0.length+1]=0,T0.length+=2;for(var X0=0,s0=0;s0>>=26,T0.words[s0]=d0,X0=g0}return X0!==0&&(T0.words[T0.length++]=X0),T0},xu._prime=function(T0){if(gv[T0])return gv[T0];var X0;if(T0==="k256")X0=new hy;else if(T0==="p224")X0=new oy;else if(T0==="p192")X0=new fy;else{if(T0!=="p25519")throw new Error("Unknown prime "+T0);X0=new Fy}return gv[T0]=X0,X0},qv.prototype._verify1=function(T0){mu(T0.negative===0,"red works only with positives"),mu(T0.red,"red works only with red numbers")},qv.prototype._verify2=function(T0,X0){mu((T0.negative|X0.negative)==0,"red works only with positives"),mu(T0.red&&T0.red===X0.red,"red works only with red numbers")},qv.prototype.imod=function(T0){return this.prime?this.prime.ireduce(T0)._forceRed(this):T0.umod(this.m)._forceRed(this)},qv.prototype.neg=function(T0){return T0.isZero()?T0.clone():this.m.sub(T0)._forceRed(this)},qv.prototype.add=function(T0,X0){this._verify2(T0,X0);var s0=T0.add(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0._forceRed(this)},qv.prototype.iadd=function(T0,X0){this._verify2(T0,X0);var s0=T0.iadd(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0},qv.prototype.sub=function(T0,X0){this._verify2(T0,X0);var s0=T0.sub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0._forceRed(this)},qv.prototype.isub=function(T0,X0){this._verify2(T0,X0);var s0=T0.isub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0},qv.prototype.shl=function(T0,X0){return this._verify1(T0),this.imod(T0.ushln(X0))},qv.prototype.imul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.imul(X0))},qv.prototype.mul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.mul(X0))},qv.prototype.isqr=function(T0){return this.imul(T0,T0.clone())},qv.prototype.sqr=function(T0){return this.mul(T0,T0)},qv.prototype.sqrt=function(T0){if(T0.isZero())return T0.clone();var X0=this.m.andln(3);if(mu(X0%2==1),X0===3){var s0=this.m.add(new xu(1)).iushrn(2);return this.pow(T0,s0)}for(var g0=this.m.subn(1),d0=0;!g0.isZero()&&g0.andln(1)===0;)d0++,g0.iushrn(1);mu(!g0.isZero());var c0=new xu(1).toRed(this),a0=c0.redNeg(),S0=this.m.subn(1).iushrn(1),z0=this.m.bitLength();for(z0=new xu(2*z0*z0).toRed(this);this.pow(z0,S0).cmp(a0)!==0;)z0.redIAdd(a0);for(var Q0=this.pow(z0,g0),p1=this.pow(T0,g0.addn(1).iushrn(1)),T1=this.pow(T0,g0),U1=d0;T1.cmp(c0)!==0;){for(var S1=T1,n1=0;S1.cmp(c0)!==0;n1++)S1=S1.redSqr();mu(n1=0;g0--){for(var z0=X0.words[g0],Q0=S0-1;Q0>=0;Q0--){var p1=z0>>Q0&1;d0!==s0[0]&&(d0=this.sqr(d0)),p1!==0||c0!==0?(c0<<=1,c0|=p1,(++a0==4||g0===0&&Q0===0)&&(d0=this.mul(d0,s0[c0]),a0=0,c0=0)):a0=0}S0=26}return d0},qv.prototype.convertTo=function(T0){var X0=T0.umod(this.m);return X0===T0?X0.clone():X0},qv.prototype.convertFrom=function(T0){var X0=T0.clone();return X0.red=null,X0},xu.mont=function(T0){return new Qv(T0)},Mu(Qv,qv),Qv.prototype.convertTo=function(T0){return this.imod(T0.ushln(this.shift))},Qv.prototype.convertFrom=function(T0){var X0=this.imod(T0.mul(this.rinv));return X0.red=null,X0},Qv.prototype.imul=function(T0,X0){if(T0.isZero()||X0.isZero())return T0.words[0]=0,T0.length=1,T0;var s0=T0.imul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.mul=function(T0,X0){if(T0.isZero()||X0.isZero())return new xu(0)._forceRed(this);var s0=T0.mul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.invm=function(T0){return this.imod(T0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})(Ate);var _te,UY,fB,zY,Ste,US=Ate.exports,R4={exports:{}};function M4(){if(_te)return R4.exports;var yt;function ir(mu){this.rand=mu}if(_te=1,R4.exports=function(mu){return yt||(yt=new ir(null)),yt.generate(mu)},R4.exports.Rand=ir,ir.prototype.generate=function(mu){return this._rand(mu)},ir.prototype._rand=function(mu){if(this.rand.getBytes)return this.rand.getBytes(mu);for(var Mu=new Uint8Array(mu),xu=0;xu=0);return l0},_c.prototype._randrange=function(mu,Mu){var xu=Mu.sub(mu);return mu.add(this._randbelow(xu))},_c.prototype.test=function(mu,Mu,xu){var l0=mu.bitLength(),E0=yt.mont(mu),j0=new yt(1).toRed(E0);Mu||(Mu=Math.max(1,l0/48|0));for(var M0=mu.subn(1),B0=0;!M0.testn(B0);B0++);for(var q0=mu.shrn(B0),y1=M0.toRed(E0);Mu>0;Mu--){var v1=this._randrange(new yt(2),M0);xu&&xu(v1);var F1=v1.toRed(E0).redPow(q0);if(F1.cmp(j0)!==0&&F1.cmp(y1)!==0){for(var ov=1;ov0;Mu--){var y1=this._randrange(new yt(2),j0),v1=mu.gcd(y1);if(v1.cmpn(1)!==0)return v1;var F1=y1.toRed(l0).redPow(B0);if(F1.cmp(E0)!==0&&F1.cmp(q0)!==0){for(var ov=1;ovov;)gv.ishrn(1);if(gv.isEven()&&gv.iadd(Mu),gv.testn(1)||gv.iadd(xu),bv.cmp(xu)){if(!bv.cmp(l0))for(;gv.mod(E0).cmp(j0);)gv.iadd(B0)}else for(;gv.mod(_c).cmp(M0);)gv.iadd(B0);if(y1(xv=gv.shrn(1))&&y1(gv)&&v1(xv)&&v1(gv)&&mu.test(xv)&&mu.test(gv))return gv}}return zY}var Jz,HY,kte,cle={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}},EF={exports:{}},Cte={exports:{}};(function(yt){(function(ir,_c){function mu(s0,g0){if(!s0)throw new Error(g0||"Assertion failed")}function Mu(s0,g0){s0.super_=g0;var d0=function(){};d0.prototype=g0.prototype,s0.prototype=new d0,s0.prototype.constructor=s0}function xu(s0,g0,d0){if(xu.isBN(s0))return s0;this.negative=0,this.words=null,this.length=0,this.red=null,s0!==null&&(g0!=="le"&&g0!=="be"||(d0=g0,g0=10),this._init(s0||0,g0||10,d0||"be"))}var l0;typeof ir=="object"?ir.exports=xu:_c.BN=xu,xu.BN=xu,xu.wordSize=26;try{l0=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:zw.Buffer}catch{}function E0(s0,g0){var d0=s0.charCodeAt(g0);return d0>=48&&d0<=57?d0-48:d0>=65&&d0<=70?d0-55:d0>=97&&d0<=102?d0-87:void mu(!1,"Invalid character in "+s0)}function j0(s0,g0,d0){var c0=E0(s0,d0);return d0-1>=g0&&(c0|=E0(s0,d0-1)<<4),c0}function M0(s0,g0,d0,c0){for(var a0=0,S0=0,z0=Math.min(s0.length,d0),Q0=g0;Q0=49?p1-49+10:p1>=17?p1-17+10:p1,mu(p1>=0&&S00?s0:g0},xu.min=function(s0,g0){return s0.cmp(g0)<0?s0:g0},xu.prototype._init=function(s0,g0,d0){if(typeof s0=="number")return this._initNumber(s0,g0,d0);if(typeof s0=="object")return this._initArray(s0,g0,d0);g0==="hex"&&(g0=16),mu(g0===(0|g0)&&g0>=2&&g0<=36);var c0=0;(s0=s0.toString().replace(/\s+/g,""))[0]==="-"&&(c0++,this.negative=1),c0=0;c0-=3)S0=s0[c0]|s0[c0-1]<<8|s0[c0-2]<<16,this.words[a0]|=S0<>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);else if(d0==="le")for(c0=0,a0=0;c0>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);return this._strip()},xu.prototype._parseHex=function(s0,g0,d0){this.length=Math.ceil((s0.length-g0)/6),this.words=new Array(this.length);for(var c0=0;c0=g0;c0-=2)a0=j0(s0,g0,c0)<=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;else for(c0=(s0.length-g0)%2==0?g0+1:g0;c0=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;this._strip()},xu.prototype._parseBase=function(s0,g0,d0){this.words=[0],this.length=1;for(var c0=0,a0=1;a0<=67108863;a0*=g0)c0++;c0--,a0=a0/g0|0;for(var S0=s0.length-d0,z0=S0%c0,Q0=Math.min(S0,S0-z0)+d0,p1=0,T1=d0;T11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},xu.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{xu.prototype[Symbol.for("nodejs.util.inspect.custom")]=q0}catch{xu.prototype.inspect=q0}else xu.prototype.inspect=q0;function q0(){return(this.red?""}var y1=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v1=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],F1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function ov(s0,g0,d0){d0.negative=g0.negative^s0.negative;var c0=s0.length+g0.length|0;d0.length=c0,c0=c0-1|0;var a0=0|s0.words[0],S0=0|g0.words[0],z0=a0*S0,Q0=67108863&z0,p1=z0/67108864|0;d0.words[0]=Q0;for(var T1=1;T1>>26,S1=67108863&p1,n1=Math.min(T1,g0.length-1),V1=Math.max(0,T1-s0.length+1);V1<=n1;V1++){var J1=T1-V1|0;U1+=(z0=(a0=0|s0.words[J1])*(S0=0|g0.words[V1])+S1)/67108864|0,S1=67108863&z0}d0.words[T1]=0|S1,p1=0|U1}return p1!==0?d0.words[T1]=0|p1:d0.length--,d0._strip()}xu.prototype.toString=function(s0,g0){var d0;if(g0=0|g0||1,(s0=s0||10)===16||s0==="hex"){d0="";for(var c0=0,a0=0,S0=0;S0>>24-c0&16777215,(c0+=2)>=26&&(c0-=26,S0--),d0=a0!==0||S0!==this.length-1?y1[6-Q0.length]+Q0+d0:Q0+d0}for(a0!==0&&(d0=a0.toString(16)+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}if(s0===(0|s0)&&s0>=2&&s0<=36){var p1=v1[s0],T1=F1[s0];d0="";var U1=this.clone();for(U1.negative=0;!U1.isZero();){var S1=U1.modrn(T1).toString(s0);d0=(U1=U1.idivn(T1)).isZero()?S1+d0:y1[p1-S1.length]+S1+d0}for(this.isZero()&&(d0="0"+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}mu(!1,"Base should be between 2 and 36")},xu.prototype.toNumber=function(){var s0=this.words[0];return this.length===2?s0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?s0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-s0:s0},xu.prototype.toJSON=function(){return this.toString(16,2)},l0&&(xu.prototype.toBuffer=function(s0,g0){return this.toArrayLike(l0,s0,g0)}),xu.prototype.toArray=function(s0,g0){return this.toArrayLike(Array,s0,g0)},xu.prototype.toArrayLike=function(s0,g0,d0){this._strip();var c0=this.byteLength(),a0=d0||Math.max(1,c0);mu(c0<=a0,"byte array longer than desired length"),mu(a0>0,"Requested array length <= 0");var S0=function(z0,Q0){return z0.allocUnsafe?z0.allocUnsafe(Q0):new z0(Q0)}(s0,a0);return this["_toArrayLike"+(g0==="le"?"LE":"BE")](S0,c0),S0},xu.prototype._toArrayLikeLE=function(s0,g0){for(var d0=0,c0=0,a0=0,S0=0;a0>8&255),d0>16&255),S0===6?(d0>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0=0&&(s0[d0--]=z0>>8&255),d0>=0&&(s0[d0--]=z0>>16&255),S0===6?(d0>=0&&(s0[d0--]=z0>>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0>=0)for(s0[d0--]=c0;d0>=0;)s0[d0--]=0},Math.clz32?xu.prototype._countBits=function(s0){return 32-Math.clz32(s0)}:xu.prototype._countBits=function(s0){var g0=s0,d0=0;return g0>=4096&&(d0+=13,g0>>>=13),g0>=64&&(d0+=7,g0>>>=7),g0>=8&&(d0+=4,g0>>>=4),g0>=2&&(d0+=2,g0>>>=2),d0+g0},xu.prototype._zeroBits=function(s0){if(s0===0)return 26;var g0=s0,d0=0;return!(8191&g0)&&(d0+=13,g0>>>=13),!(127&g0)&&(d0+=7,g0>>>=7),!(15&g0)&&(d0+=4,g0>>>=4),!(3&g0)&&(d0+=2,g0>>>=2),!(1&g0)&&d0++,d0},xu.prototype.bitLength=function(){var s0=this.words[this.length-1],g0=this._countBits(s0);return 26*(this.length-1)+g0},xu.prototype.zeroBits=function(){if(this.isZero())return 0;for(var s0=0,g0=0;g0s0.length?this.clone().ior(s0):s0.clone().ior(this)},xu.prototype.uor=function(s0){return this.length>s0.length?this.clone().iuor(s0):s0.clone().iuor(this)},xu.prototype.iuand=function(s0){var g0;g0=this.length>s0.length?s0:this;for(var d0=0;d0s0.length?this.clone().iand(s0):s0.clone().iand(this)},xu.prototype.uand=function(s0){return this.length>s0.length?this.clone().iuand(s0):s0.clone().iuand(this)},xu.prototype.iuxor=function(s0){var g0,d0;this.length>s0.length?(g0=this,d0=s0):(g0=s0,d0=this);for(var c0=0;c0s0.length?this.clone().ixor(s0):s0.clone().ixor(this)},xu.prototype.uxor=function(s0){return this.length>s0.length?this.clone().iuxor(s0):s0.clone().iuxor(this)},xu.prototype.inotn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=0|Math.ceil(s0/26),d0=s0%26;this._expand(g0),d0>0&&g0--;for(var c0=0;c00&&(this.words[c0]=~this.words[c0]&67108863>>26-d0),this._strip()},xu.prototype.notn=function(s0){return this.clone().inotn(s0)},xu.prototype.setn=function(s0,g0){mu(typeof s0=="number"&&s0>=0);var d0=s0/26|0,c0=s0%26;return this._expand(d0+1),this.words[d0]=g0?this.words[d0]|1<s0.length?(d0=this,c0=s0):(d0=s0,c0=this);for(var a0=0,S0=0;S0>>26;for(;a0!==0&&S0>>26;if(this.length=d0.length,a0!==0)this.words[this.length]=a0,this.length++;else if(d0!==this)for(;S0s0.length?this.clone().iadd(s0):s0.clone().iadd(this)},xu.prototype.isub=function(s0){if(s0.negative!==0){s0.negative=0;var g0=this.iadd(s0);return s0.negative=1,g0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(s0),this.negative=1,this._normSign();var d0,c0,a0=this.cmp(s0);if(a0===0)return this.negative=0,this.length=1,this.words[0]=0,this;a0>0?(d0=this,c0=s0):(d0=s0,c0=this);for(var S0=0,z0=0;z0>26,this.words[z0]=67108863&g0;for(;S0!==0&&z0>26,this.words[z0]=67108863&g0;if(S0===0&&z0>>13,V1=0|z0[1],J1=8191&V1,wv=V1>>>13,Sv=0|z0[2],Hv=8191&Sv,ty=Sv>>>13,gy=0|z0[3],yv=8191&gy,Av=gy>>>13,Dv=0|z0[4],ry=8191&Dv,Jv=Dv>>>13,Fv=0|z0[5],iy=8191&Fv,cy=Fv>>>13,Uy=0|z0[6],r2=8191&Uy,f2=Uy>>>13,j2=0|z0[7],mw=8191&j2,p2=j2>>>13,Vw=0|z0[8],Ew=8191&Vw,q2=Vw>>>13,$3=0|z0[9],Rw=8191&$3,K2=$3>>>13,Xw=0|Q0[0],a3=8191&Xw,F2=Xw>>>13,Qw=0|Q0[1],vt=8191&Qw,wt=Qw>>>13,Ys=0|Q0[2],pu=8191&Ys,Ru=Ys>>>13,wu=0|Q0[3],t0=8191&wu,m0=wu>>>13,k0=0|Q0[4],_0=8191&k0,R0=k0>>>13,N0=0|Q0[5],l1=8191&N0,a1=N0>>>13,x1=0|Q0[6],K1=8191&x1,W1=x1>>>13,_g=0|Q0[7],uv=8191&_g,Tv=_g>>>13,Uv=0|Q0[8],Wv=8191&Uv,ny=Uv>>>13,Rv=0|Q0[9],Gv=8191&Rv,C0=Rv>>>13;d0.negative=s0.negative^g0.negative,d0.length=19;var J0=(T1+(c0=Math.imul(S1,a3))|0)+((8191&(a0=(a0=Math.imul(S1,F2))+Math.imul(n1,a3)|0))<<13)|0;T1=((S0=Math.imul(n1,F2))+(a0>>>13)|0)+(J0>>>26)|0,J0&=67108863,c0=Math.imul(J1,a3),a0=(a0=Math.imul(J1,F2))+Math.imul(wv,a3)|0,S0=Math.imul(wv,F2);var f0=(T1+(c0=c0+Math.imul(S1,vt)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,wt)|0)+Math.imul(n1,vt)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,wt)|0)+(a0>>>13)|0)+(f0>>>26)|0,f0&=67108863,c0=Math.imul(Hv,a3),a0=(a0=Math.imul(Hv,F2))+Math.imul(ty,a3)|0,S0=Math.imul(ty,F2),c0=c0+Math.imul(J1,vt)|0,a0=(a0=a0+Math.imul(J1,wt)|0)+Math.imul(wv,vt)|0,S0=S0+Math.imul(wv,wt)|0;var v0=(T1+(c0=c0+Math.imul(S1,pu)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Ru)|0)+Math.imul(n1,pu)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Ru)|0)+(a0>>>13)|0)+(v0>>>26)|0,v0&=67108863,c0=Math.imul(yv,a3),a0=(a0=Math.imul(yv,F2))+Math.imul(Av,a3)|0,S0=Math.imul(Av,F2),c0=c0+Math.imul(Hv,vt)|0,a0=(a0=a0+Math.imul(Hv,wt)|0)+Math.imul(ty,vt)|0,S0=S0+Math.imul(ty,wt)|0,c0=c0+Math.imul(J1,pu)|0,a0=(a0=a0+Math.imul(J1,Ru)|0)+Math.imul(wv,pu)|0,S0=S0+Math.imul(wv,Ru)|0;var h0=(T1+(c0=c0+Math.imul(S1,t0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,m0)|0)+Math.imul(n1,t0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,m0)|0)+(a0>>>13)|0)+(h0>>>26)|0,h0&=67108863,c0=Math.imul(ry,a3),a0=(a0=Math.imul(ry,F2))+Math.imul(Jv,a3)|0,S0=Math.imul(Jv,F2),c0=c0+Math.imul(yv,vt)|0,a0=(a0=a0+Math.imul(yv,wt)|0)+Math.imul(Av,vt)|0,S0=S0+Math.imul(Av,wt)|0,c0=c0+Math.imul(Hv,pu)|0,a0=(a0=a0+Math.imul(Hv,Ru)|0)+Math.imul(ty,pu)|0,S0=S0+Math.imul(ty,Ru)|0,c0=c0+Math.imul(J1,t0)|0,a0=(a0=a0+Math.imul(J1,m0)|0)+Math.imul(wv,t0)|0,S0=S0+Math.imul(wv,m0)|0;var u0=(T1+(c0=c0+Math.imul(S1,_0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,R0)|0)+Math.imul(n1,_0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,R0)|0)+(a0>>>13)|0)+(u0>>>26)|0,u0&=67108863,c0=Math.imul(iy,a3),a0=(a0=Math.imul(iy,F2))+Math.imul(cy,a3)|0,S0=Math.imul(cy,F2),c0=c0+Math.imul(ry,vt)|0,a0=(a0=a0+Math.imul(ry,wt)|0)+Math.imul(Jv,vt)|0,S0=S0+Math.imul(Jv,wt)|0,c0=c0+Math.imul(yv,pu)|0,a0=(a0=a0+Math.imul(yv,Ru)|0)+Math.imul(Av,pu)|0,S0=S0+Math.imul(Av,Ru)|0,c0=c0+Math.imul(Hv,t0)|0,a0=(a0=a0+Math.imul(Hv,m0)|0)+Math.imul(ty,t0)|0,S0=S0+Math.imul(ty,m0)|0,c0=c0+Math.imul(J1,_0)|0,a0=(a0=a0+Math.imul(J1,R0)|0)+Math.imul(wv,_0)|0,S0=S0+Math.imul(wv,R0)|0;var o0=(T1+(c0=c0+Math.imul(S1,l1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,a1)|0)+Math.imul(n1,l1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,a1)|0)+(a0>>>13)|0)+(o0>>>26)|0,o0&=67108863,c0=Math.imul(r2,a3),a0=(a0=Math.imul(r2,F2))+Math.imul(f2,a3)|0,S0=Math.imul(f2,F2),c0=c0+Math.imul(iy,vt)|0,a0=(a0=a0+Math.imul(iy,wt)|0)+Math.imul(cy,vt)|0,S0=S0+Math.imul(cy,wt)|0,c0=c0+Math.imul(ry,pu)|0,a0=(a0=a0+Math.imul(ry,Ru)|0)+Math.imul(Jv,pu)|0,S0=S0+Math.imul(Jv,Ru)|0,c0=c0+Math.imul(yv,t0)|0,a0=(a0=a0+Math.imul(yv,m0)|0)+Math.imul(Av,t0)|0,S0=S0+Math.imul(Av,m0)|0,c0=c0+Math.imul(Hv,_0)|0,a0=(a0=a0+Math.imul(Hv,R0)|0)+Math.imul(ty,_0)|0,S0=S0+Math.imul(ty,R0)|0,c0=c0+Math.imul(J1,l1)|0,a0=(a0=a0+Math.imul(J1,a1)|0)+Math.imul(wv,l1)|0,S0=S0+Math.imul(wv,a1)|0;var x0=(T1+(c0=c0+Math.imul(S1,K1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,W1)|0)+Math.imul(n1,K1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,W1)|0)+(a0>>>13)|0)+(x0>>>26)|0,x0&=67108863,c0=Math.imul(mw,a3),a0=(a0=Math.imul(mw,F2))+Math.imul(p2,a3)|0,S0=Math.imul(p2,F2),c0=c0+Math.imul(r2,vt)|0,a0=(a0=a0+Math.imul(r2,wt)|0)+Math.imul(f2,vt)|0,S0=S0+Math.imul(f2,wt)|0,c0=c0+Math.imul(iy,pu)|0,a0=(a0=a0+Math.imul(iy,Ru)|0)+Math.imul(cy,pu)|0,S0=S0+Math.imul(cy,Ru)|0,c0=c0+Math.imul(ry,t0)|0,a0=(a0=a0+Math.imul(ry,m0)|0)+Math.imul(Jv,t0)|0,S0=S0+Math.imul(Jv,m0)|0,c0=c0+Math.imul(yv,_0)|0,a0=(a0=a0+Math.imul(yv,R0)|0)+Math.imul(Av,_0)|0,S0=S0+Math.imul(Av,R0)|0,c0=c0+Math.imul(Hv,l1)|0,a0=(a0=a0+Math.imul(Hv,a1)|0)+Math.imul(ty,l1)|0,S0=S0+Math.imul(ty,a1)|0,c0=c0+Math.imul(J1,K1)|0,a0=(a0=a0+Math.imul(J1,W1)|0)+Math.imul(wv,K1)|0,S0=S0+Math.imul(wv,W1)|0;var U0=(T1+(c0=c0+Math.imul(S1,uv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Tv)|0)+Math.imul(n1,uv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Tv)|0)+(a0>>>13)|0)+(U0>>>26)|0,U0&=67108863,c0=Math.imul(Ew,a3),a0=(a0=Math.imul(Ew,F2))+Math.imul(q2,a3)|0,S0=Math.imul(q2,F2),c0=c0+Math.imul(mw,vt)|0,a0=(a0=a0+Math.imul(mw,wt)|0)+Math.imul(p2,vt)|0,S0=S0+Math.imul(p2,wt)|0,c0=c0+Math.imul(r2,pu)|0,a0=(a0=a0+Math.imul(r2,Ru)|0)+Math.imul(f2,pu)|0,S0=S0+Math.imul(f2,Ru)|0,c0=c0+Math.imul(iy,t0)|0,a0=(a0=a0+Math.imul(iy,m0)|0)+Math.imul(cy,t0)|0,S0=S0+Math.imul(cy,m0)|0,c0=c0+Math.imul(ry,_0)|0,a0=(a0=a0+Math.imul(ry,R0)|0)+Math.imul(Jv,_0)|0,S0=S0+Math.imul(Jv,R0)|0,c0=c0+Math.imul(yv,l1)|0,a0=(a0=a0+Math.imul(yv,a1)|0)+Math.imul(Av,l1)|0,S0=S0+Math.imul(Av,a1)|0,c0=c0+Math.imul(Hv,K1)|0,a0=(a0=a0+Math.imul(Hv,W1)|0)+Math.imul(ty,K1)|0,S0=S0+Math.imul(ty,W1)|0,c0=c0+Math.imul(J1,uv)|0,a0=(a0=a0+Math.imul(J1,Tv)|0)+Math.imul(wv,uv)|0,S0=S0+Math.imul(wv,Tv)|0;var e1=(T1+(c0=c0+Math.imul(S1,Wv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,ny)|0)+Math.imul(n1,Wv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,ny)|0)+(a0>>>13)|0)+(e1>>>26)|0,e1&=67108863,c0=Math.imul(Rw,a3),a0=(a0=Math.imul(Rw,F2))+Math.imul(K2,a3)|0,S0=Math.imul(K2,F2),c0=c0+Math.imul(Ew,vt)|0,a0=(a0=a0+Math.imul(Ew,wt)|0)+Math.imul(q2,vt)|0,S0=S0+Math.imul(q2,wt)|0,c0=c0+Math.imul(mw,pu)|0,a0=(a0=a0+Math.imul(mw,Ru)|0)+Math.imul(p2,pu)|0,S0=S0+Math.imul(p2,Ru)|0,c0=c0+Math.imul(r2,t0)|0,a0=(a0=a0+Math.imul(r2,m0)|0)+Math.imul(f2,t0)|0,S0=S0+Math.imul(f2,m0)|0,c0=c0+Math.imul(iy,_0)|0,a0=(a0=a0+Math.imul(iy,R0)|0)+Math.imul(cy,_0)|0,S0=S0+Math.imul(cy,R0)|0,c0=c0+Math.imul(ry,l1)|0,a0=(a0=a0+Math.imul(ry,a1)|0)+Math.imul(Jv,l1)|0,S0=S0+Math.imul(Jv,a1)|0,c0=c0+Math.imul(yv,K1)|0,a0=(a0=a0+Math.imul(yv,W1)|0)+Math.imul(Av,K1)|0,S0=S0+Math.imul(Av,W1)|0,c0=c0+Math.imul(Hv,uv)|0,a0=(a0=a0+Math.imul(Hv,Tv)|0)+Math.imul(ty,uv)|0,S0=S0+Math.imul(ty,Tv)|0,c0=c0+Math.imul(J1,Wv)|0,a0=(a0=a0+Math.imul(J1,ny)|0)+Math.imul(wv,Wv)|0,S0=S0+Math.imul(wv,ny)|0;var h1=(T1+(c0=c0+Math.imul(S1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,C0)|0)+Math.imul(n1,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,C0)|0)+(a0>>>13)|0)+(h1>>>26)|0,h1&=67108863,c0=Math.imul(Rw,vt),a0=(a0=Math.imul(Rw,wt))+Math.imul(K2,vt)|0,S0=Math.imul(K2,wt),c0=c0+Math.imul(Ew,pu)|0,a0=(a0=a0+Math.imul(Ew,Ru)|0)+Math.imul(q2,pu)|0,S0=S0+Math.imul(q2,Ru)|0,c0=c0+Math.imul(mw,t0)|0,a0=(a0=a0+Math.imul(mw,m0)|0)+Math.imul(p2,t0)|0,S0=S0+Math.imul(p2,m0)|0,c0=c0+Math.imul(r2,_0)|0,a0=(a0=a0+Math.imul(r2,R0)|0)+Math.imul(f2,_0)|0,S0=S0+Math.imul(f2,R0)|0,c0=c0+Math.imul(iy,l1)|0,a0=(a0=a0+Math.imul(iy,a1)|0)+Math.imul(cy,l1)|0,S0=S0+Math.imul(cy,a1)|0,c0=c0+Math.imul(ry,K1)|0,a0=(a0=a0+Math.imul(ry,W1)|0)+Math.imul(Jv,K1)|0,S0=S0+Math.imul(Jv,W1)|0,c0=c0+Math.imul(yv,uv)|0,a0=(a0=a0+Math.imul(yv,Tv)|0)+Math.imul(Av,uv)|0,S0=S0+Math.imul(Av,Tv)|0,c0=c0+Math.imul(Hv,Wv)|0,a0=(a0=a0+Math.imul(Hv,ny)|0)+Math.imul(ty,Wv)|0,S0=S0+Math.imul(ty,ny)|0;var k1=(T1+(c0=c0+Math.imul(J1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(J1,C0)|0)+Math.imul(wv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(wv,C0)|0)+(a0>>>13)|0)+(k1>>>26)|0,k1&=67108863,c0=Math.imul(Rw,pu),a0=(a0=Math.imul(Rw,Ru))+Math.imul(K2,pu)|0,S0=Math.imul(K2,Ru),c0=c0+Math.imul(Ew,t0)|0,a0=(a0=a0+Math.imul(Ew,m0)|0)+Math.imul(q2,t0)|0,S0=S0+Math.imul(q2,m0)|0,c0=c0+Math.imul(mw,_0)|0,a0=(a0=a0+Math.imul(mw,R0)|0)+Math.imul(p2,_0)|0,S0=S0+Math.imul(p2,R0)|0,c0=c0+Math.imul(r2,l1)|0,a0=(a0=a0+Math.imul(r2,a1)|0)+Math.imul(f2,l1)|0,S0=S0+Math.imul(f2,a1)|0,c0=c0+Math.imul(iy,K1)|0,a0=(a0=a0+Math.imul(iy,W1)|0)+Math.imul(cy,K1)|0,S0=S0+Math.imul(cy,W1)|0,c0=c0+Math.imul(ry,uv)|0,a0=(a0=a0+Math.imul(ry,Tv)|0)+Math.imul(Jv,uv)|0,S0=S0+Math.imul(Jv,Tv)|0,c0=c0+Math.imul(yv,Wv)|0,a0=(a0=a0+Math.imul(yv,ny)|0)+Math.imul(Av,Wv)|0,S0=S0+Math.imul(Av,ny)|0;var q1=(T1+(c0=c0+Math.imul(Hv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Hv,C0)|0)+Math.imul(ty,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(ty,C0)|0)+(a0>>>13)|0)+(q1>>>26)|0,q1&=67108863,c0=Math.imul(Rw,t0),a0=(a0=Math.imul(Rw,m0))+Math.imul(K2,t0)|0,S0=Math.imul(K2,m0),c0=c0+Math.imul(Ew,_0)|0,a0=(a0=a0+Math.imul(Ew,R0)|0)+Math.imul(q2,_0)|0,S0=S0+Math.imul(q2,R0)|0,c0=c0+Math.imul(mw,l1)|0,a0=(a0=a0+Math.imul(mw,a1)|0)+Math.imul(p2,l1)|0,S0=S0+Math.imul(p2,a1)|0,c0=c0+Math.imul(r2,K1)|0,a0=(a0=a0+Math.imul(r2,W1)|0)+Math.imul(f2,K1)|0,S0=S0+Math.imul(f2,W1)|0,c0=c0+Math.imul(iy,uv)|0,a0=(a0=a0+Math.imul(iy,Tv)|0)+Math.imul(cy,uv)|0,S0=S0+Math.imul(cy,Tv)|0,c0=c0+Math.imul(ry,Wv)|0,a0=(a0=a0+Math.imul(ry,ny)|0)+Math.imul(Jv,Wv)|0,S0=S0+Math.imul(Jv,ny)|0;var L1=(T1+(c0=c0+Math.imul(yv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(yv,C0)|0)+Math.imul(Av,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Av,C0)|0)+(a0>>>13)|0)+(L1>>>26)|0,L1&=67108863,c0=Math.imul(Rw,_0),a0=(a0=Math.imul(Rw,R0))+Math.imul(K2,_0)|0,S0=Math.imul(K2,R0),c0=c0+Math.imul(Ew,l1)|0,a0=(a0=a0+Math.imul(Ew,a1)|0)+Math.imul(q2,l1)|0,S0=S0+Math.imul(q2,a1)|0,c0=c0+Math.imul(mw,K1)|0,a0=(a0=a0+Math.imul(mw,W1)|0)+Math.imul(p2,K1)|0,S0=S0+Math.imul(p2,W1)|0,c0=c0+Math.imul(r2,uv)|0,a0=(a0=a0+Math.imul(r2,Tv)|0)+Math.imul(f2,uv)|0,S0=S0+Math.imul(f2,Tv)|0,c0=c0+Math.imul(iy,Wv)|0,a0=(a0=a0+Math.imul(iy,ny)|0)+Math.imul(cy,Wv)|0,S0=S0+Math.imul(cy,ny)|0;var A1=(T1+(c0=c0+Math.imul(ry,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(ry,C0)|0)+Math.imul(Jv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Jv,C0)|0)+(a0>>>13)|0)+(A1>>>26)|0,A1&=67108863,c0=Math.imul(Rw,l1),a0=(a0=Math.imul(Rw,a1))+Math.imul(K2,l1)|0,S0=Math.imul(K2,a1),c0=c0+Math.imul(Ew,K1)|0,a0=(a0=a0+Math.imul(Ew,W1)|0)+Math.imul(q2,K1)|0,S0=S0+Math.imul(q2,W1)|0,c0=c0+Math.imul(mw,uv)|0,a0=(a0=a0+Math.imul(mw,Tv)|0)+Math.imul(p2,uv)|0,S0=S0+Math.imul(p2,Tv)|0,c0=c0+Math.imul(r2,Wv)|0,a0=(a0=a0+Math.imul(r2,ny)|0)+Math.imul(f2,Wv)|0,S0=S0+Math.imul(f2,ny)|0;var M1=(T1+(c0=c0+Math.imul(iy,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(iy,C0)|0)+Math.imul(cy,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(cy,C0)|0)+(a0>>>13)|0)+(M1>>>26)|0,M1&=67108863,c0=Math.imul(Rw,K1),a0=(a0=Math.imul(Rw,W1))+Math.imul(K2,K1)|0,S0=Math.imul(K2,W1),c0=c0+Math.imul(Ew,uv)|0,a0=(a0=a0+Math.imul(Ew,Tv)|0)+Math.imul(q2,uv)|0,S0=S0+Math.imul(q2,Tv)|0,c0=c0+Math.imul(mw,Wv)|0,a0=(a0=a0+Math.imul(mw,ny)|0)+Math.imul(p2,Wv)|0,S0=S0+Math.imul(p2,ny)|0;var X1=(T1+(c0=c0+Math.imul(r2,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(r2,C0)|0)+Math.imul(f2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(f2,C0)|0)+(a0>>>13)|0)+(X1>>>26)|0,X1&=67108863,c0=Math.imul(Rw,uv),a0=(a0=Math.imul(Rw,Tv))+Math.imul(K2,uv)|0,S0=Math.imul(K2,Tv),c0=c0+Math.imul(Ew,Wv)|0,a0=(a0=a0+Math.imul(Ew,ny)|0)+Math.imul(q2,Wv)|0,S0=S0+Math.imul(q2,ny)|0;var dv=(T1+(c0=c0+Math.imul(mw,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(mw,C0)|0)+Math.imul(p2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(p2,C0)|0)+(a0>>>13)|0)+(dv>>>26)|0,dv&=67108863,c0=Math.imul(Rw,Wv),a0=(a0=Math.imul(Rw,ny))+Math.imul(K2,Wv)|0,S0=Math.imul(K2,ny);var I1=(T1+(c0=c0+Math.imul(Ew,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Ew,C0)|0)+Math.imul(q2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(q2,C0)|0)+(a0>>>13)|0)+(I1>>>26)|0,I1&=67108863;var iv=(T1+(c0=Math.imul(Rw,Gv))|0)+((8191&(a0=(a0=Math.imul(Rw,C0))+Math.imul(K2,Gv)|0))<<13)|0;return T1=((S0=Math.imul(K2,C0))+(a0>>>13)|0)+(iv>>>26)|0,iv&=67108863,p1[0]=J0,p1[1]=f0,p1[2]=v0,p1[3]=h0,p1[4]=u0,p1[5]=o0,p1[6]=x0,p1[7]=U0,p1[8]=e1,p1[9]=h1,p1[10]=k1,p1[11]=q1,p1[12]=L1,p1[13]=A1,p1[14]=M1,p1[15]=X1,p1[16]=dv,p1[17]=I1,p1[18]=iv,T1!==0&&(p1[19]=T1,d0.length++),d0};function gv(s0,g0,d0){d0.negative=g0.negative^s0.negative,d0.length=s0.length+g0.length;for(var c0=0,a0=0,S0=0;S0>>26)|0)>>>26,z0&=67108863}d0.words[S0]=Q0,c0=z0,z0=a0}return c0!==0?d0.words[S0]=c0:d0.length--,d0._strip()}function xv(s0,g0,d0){return gv(s0,g0,d0)}Math.imul||(bv=ov),xu.prototype.mulTo=function(s0,g0){var d0=this.length+s0.length;return this.length===10&&s0.length===10?bv(this,s0,g0):d0<63?ov(this,s0,g0):d0<1024?gv(this,s0,g0):xv(this,s0,g0)},xu.prototype.mul=function(s0){var g0=new xu(null);return g0.words=new Array(this.length+s0.length),this.mulTo(s0,g0)},xu.prototype.mulf=function(s0){var g0=new xu(null);return g0.words=new Array(this.length+s0.length),xv(this,s0,g0)},xu.prototype.imul=function(s0){return this.clone().mulTo(s0,this)},xu.prototype.imuln=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(typeof s0=="number"),mu(s0<67108864);for(var d0=0,c0=0;c0>=26,d0+=a0/67108864|0,d0+=S0>>>26,this.words[c0]=67108863&S0}return d0!==0&&(this.words[c0]=d0,this.length++),g0?this.ineg():this},xu.prototype.muln=function(s0){return this.clone().imuln(s0)},xu.prototype.sqr=function(){return this.mul(this)},xu.prototype.isqr=function(){return this.imul(this.clone())},xu.prototype.pow=function(s0){var g0=function(S0){for(var z0=new Array(S0.bitLength()),Q0=0;Q0>>T1&1}return z0}(s0);if(g0.length===0)return new xu(1);for(var d0=this,c0=0;c0=0);var g0,d0=s0%26,c0=(s0-d0)/26,a0=67108863>>>26-d0<<26-d0;if(d0!==0){var S0=0;for(g0=0;g0>>26-d0}S0&&(this.words[g0]=S0,this.length++)}if(c0!==0){for(g0=this.length-1;g0>=0;g0--)this.words[g0+c0]=this.words[g0];for(g0=0;g0=0),c0=g0?(g0-g0%26)/26:0;var a0=s0%26,S0=Math.min((s0-a0)/26,this.length),z0=67108863^67108863>>>a0<S0)for(this.length-=S0,p1=0;p1=0&&(T1!==0||p1>=c0);p1--){var U1=0|this.words[p1];this.words[p1]=T1<<26-a0|U1>>>a0,T1=U1&z0}return Q0&&T1!==0&&(Q0.words[Q0.length++]=T1),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},xu.prototype.ishrn=function(s0,g0,d0){return mu(this.negative===0),this.iushrn(s0,g0,d0)},xu.prototype.shln=function(s0){return this.clone().ishln(s0)},xu.prototype.ushln=function(s0){return this.clone().iushln(s0)},xu.prototype.shrn=function(s0){return this.clone().ishrn(s0)},xu.prototype.ushrn=function(s0){return this.clone().iushrn(s0)},xu.prototype.testn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=s0%26,d0=(s0-g0)/26,c0=1<=0);var g0=s0%26,d0=(s0-g0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=d0)return this;if(g0!==0&&d0++,this.length=Math.min(d0,this.length),g0!==0){var c0=67108863^67108863>>>g0<=67108864;g0++)this.words[g0]-=67108864,g0===this.length-1?this.words[g0+1]=1:this.words[g0+1]++;return this.length=Math.max(this.length,g0+1),this},xu.prototype.isubn=function(s0){if(mu(typeof s0=="number"),mu(s0<67108864),s0<0)return this.iaddn(-s0);if(this.negative!==0)return this.negative=0,this.iaddn(s0),this.negative=1,this;if(this.words[0]-=s0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var g0=0;g0>26)-(Q0/67108864|0),this.words[c0+d0]=67108863&a0}for(;c0>26,this.words[c0+d0]=67108863&a0;if(z0===0)return this._strip();for(mu(z0===-1),z0=0,c0=0;c0>26,this.words[c0]=67108863&a0;return this.negative=1,this._strip()},xu.prototype._wordDiv=function(s0,g0){var d0=(this.length,s0.length),c0=this.clone(),a0=s0,S0=0|a0.words[a0.length-1];(d0=26-this._countBits(S0))!=0&&(a0=a0.ushln(d0),c0.iushln(d0),S0=0|a0.words[a0.length-1]);var z0,Q0=c0.length-a0.length;if(g0!=="mod"){(z0=new xu(null)).length=Q0+1,z0.words=new Array(z0.length);for(var p1=0;p1=0;U1--){var S1=67108864*(0|c0.words[a0.length+U1])+(0|c0.words[a0.length+U1-1]);for(S1=Math.min(S1/S0|0,67108863),c0._ishlnsubmul(a0,S1,U1);c0.negative!==0;)S1--,c0.negative=0,c0._ishlnsubmul(a0,1,U1),c0.isZero()||(c0.negative^=1);z0&&(z0.words[U1]=S1)}return z0&&z0._strip(),c0._strip(),g0!=="div"&&d0!==0&&c0.iushrn(d0),{div:z0||null,mod:c0}},xu.prototype.divmod=function(s0,g0,d0){return mu(!s0.isZero()),this.isZero()?{div:new xu(0),mod:new xu(0)}:this.negative!==0&&s0.negative===0?(S0=this.neg().divmod(s0,g0),g0!=="mod"&&(c0=S0.div.neg()),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.iadd(s0)),{div:c0,mod:a0}):this.negative===0&&s0.negative!==0?(S0=this.divmod(s0.neg(),g0),g0!=="mod"&&(c0=S0.div.neg()),{div:c0,mod:S0.mod}):this.negative&s0.negative?(S0=this.neg().divmod(s0.neg(),g0),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.isub(s0)),{div:S0.div,mod:a0}):s0.length>this.length||this.cmp(s0)<0?{div:new xu(0),mod:this}:s0.length===1?g0==="div"?{div:this.divn(s0.words[0]),mod:null}:g0==="mod"?{div:null,mod:new xu(this.modrn(s0.words[0]))}:{div:this.divn(s0.words[0]),mod:new xu(this.modrn(s0.words[0]))}:this._wordDiv(s0,g0);var c0,a0,S0},xu.prototype.div=function(s0){return this.divmod(s0,"div",!1).div},xu.prototype.mod=function(s0){return this.divmod(s0,"mod",!1).mod},xu.prototype.umod=function(s0){return this.divmod(s0,"mod",!0).mod},xu.prototype.divRound=function(s0){var g0=this.divmod(s0);if(g0.mod.isZero())return g0.div;var d0=g0.div.negative!==0?g0.mod.isub(s0):g0.mod,c0=s0.ushrn(1),a0=s0.andln(1),S0=d0.cmp(c0);return S0<0||a0===1&&S0===0?g0.div:g0.div.negative!==0?g0.div.isubn(1):g0.div.iaddn(1)},xu.prototype.modrn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=(1<<26)%s0,c0=0,a0=this.length-1;a0>=0;a0--)c0=(d0*c0+(0|this.words[a0]))%s0;return g0?-c0:c0},xu.prototype.modn=function(s0){return this.modrn(s0)},xu.prototype.idivn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=0,c0=this.length-1;c0>=0;c0--){var a0=(0|this.words[c0])+67108864*d0;this.words[c0]=a0/s0|0,d0=a0%s0}return this._strip(),g0?this.ineg():this},xu.prototype.divn=function(s0){return this.clone().idivn(s0)},xu.prototype.egcd=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0=new xu(1),a0=new xu(0),S0=new xu(0),z0=new xu(1),Q0=0;g0.isEven()&&d0.isEven();)g0.iushrn(1),d0.iushrn(1),++Q0;for(var p1=d0.clone(),T1=g0.clone();!g0.isZero();){for(var U1=0,S1=1;!(g0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(g0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(p1),a0.isub(T1)),c0.iushrn(1),a0.iushrn(1);for(var n1=0,V1=1;!(d0.words[0]&V1)&&n1<26;++n1,V1<<=1);if(n1>0)for(d0.iushrn(n1);n1-- >0;)(S0.isOdd()||z0.isOdd())&&(S0.iadd(p1),z0.isub(T1)),S0.iushrn(1),z0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),c0.isub(S0),a0.isub(z0)):(d0.isub(g0),S0.isub(c0),z0.isub(a0))}return{a:S0,b:z0,gcd:d0.iushln(Q0)}},xu.prototype._invmp=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0,a0=new xu(1),S0=new xu(0),z0=d0.clone();g0.cmpn(1)>0&&d0.cmpn(1)>0;){for(var Q0=0,p1=1;!(g0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(g0.iushrn(Q0);Q0-- >0;)a0.isOdd()&&a0.iadd(z0),a0.iushrn(1);for(var T1=0,U1=1;!(d0.words[0]&U1)&&T1<26;++T1,U1<<=1);if(T1>0)for(d0.iushrn(T1);T1-- >0;)S0.isOdd()&&S0.iadd(z0),S0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),a0.isub(S0)):(d0.isub(g0),S0.isub(a0))}return(c0=g0.cmpn(1)===0?a0:S0).cmpn(0)<0&&c0.iadd(s0),c0},xu.prototype.gcd=function(s0){if(this.isZero())return s0.abs();if(s0.isZero())return this.abs();var g0=this.clone(),d0=s0.clone();g0.negative=0,d0.negative=0;for(var c0=0;g0.isEven()&&d0.isEven();c0++)g0.iushrn(1),d0.iushrn(1);for(;;){for(;g0.isEven();)g0.iushrn(1);for(;d0.isEven();)d0.iushrn(1);var a0=g0.cmp(d0);if(a0<0){var S0=g0;g0=d0,d0=S0}else if(a0===0||d0.cmpn(1)===0)break;g0.isub(d0)}return d0.iushln(c0)},xu.prototype.invm=function(s0){return this.egcd(s0).a.umod(s0)},xu.prototype.isEven=function(){return(1&this.words[0])==0},xu.prototype.isOdd=function(){return(1&this.words[0])==1},xu.prototype.andln=function(s0){return this.words[0]&s0},xu.prototype.bincn=function(s0){mu(typeof s0=="number");var g0=s0%26,d0=(s0-g0)/26,c0=1<>>26,z0&=67108863,this.words[S0]=z0}return a0!==0&&(this.words[S0]=a0,this.length++),this},xu.prototype.isZero=function(){return this.length===1&&this.words[0]===0},xu.prototype.cmpn=function(s0){var g0,d0=s0<0;if(this.negative!==0&&!d0)return-1;if(this.negative===0&&d0)return 1;if(this._strip(),this.length>1)g0=1;else{d0&&(s0=-s0),mu(s0<=67108863,"Number is too big");var c0=0|this.words[0];g0=c0===s0?0:c0s0.length)return 1;if(this.length=0;d0--){var c0=0|this.words[d0],a0=0|s0.words[d0];if(c0!==a0){c0a0&&(g0=1);break}}return g0},xu.prototype.gtn=function(s0){return this.cmpn(s0)===1},xu.prototype.gt=function(s0){return this.cmp(s0)===1},xu.prototype.gten=function(s0){return this.cmpn(s0)>=0},xu.prototype.gte=function(s0){return this.cmp(s0)>=0},xu.prototype.ltn=function(s0){return this.cmpn(s0)===-1},xu.prototype.lt=function(s0){return this.cmp(s0)===-1},xu.prototype.lten=function(s0){return this.cmpn(s0)<=0},xu.prototype.lte=function(s0){return this.cmp(s0)<=0},xu.prototype.eqn=function(s0){return this.cmpn(s0)===0},xu.prototype.eq=function(s0){return this.cmp(s0)===0},xu.red=function(s0){return new T0(s0)},xu.prototype.toRed=function(s0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),s0.convertTo(this)._forceRed(s0)},xu.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},xu.prototype._forceRed=function(s0){return this.red=s0,this},xu.prototype.forceRed=function(s0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(s0)},xu.prototype.redAdd=function(s0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,s0)},xu.prototype.redIAdd=function(s0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,s0)},xu.prototype.redSub=function(s0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,s0)},xu.prototype.redISub=function(s0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,s0)},xu.prototype.redShl=function(s0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,s0)},xu.prototype.redMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.mul(this,s0)},xu.prototype.redIMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.imul(this,s0)},xu.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},xu.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},xu.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},xu.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},xu.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},xu.prototype.redPow=function(s0){return mu(this.red&&!s0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,s0)};var hy={k256:null,p224:null,p192:null,p25519:null};function oy(s0,g0){this.name=s0,this.p=new xu(g0,16),this.n=this.p.bitLength(),this.k=new xu(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function fy(){oy.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function Fy(){oy.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function qv(){oy.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Qv(){oy.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T0(s0){if(typeof s0=="string"){var g0=xu._prime(s0);this.m=g0.p,this.prime=g0}else mu(s0.gtn(1),"modulus must be greater than 1"),this.m=s0,this.prime=null}function X0(s0){T0.call(this,s0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new xu(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}oy.prototype._tmp=function(){var s0=new xu(null);return s0.words=new Array(Math.ceil(this.n/13)),s0},oy.prototype.ireduce=function(s0){var g0,d0=s0;do this.split(d0,this.tmp),g0=(d0=(d0=this.imulK(d0)).iadd(this.tmp)).bitLength();while(g0>this.n);var c0=g00?d0.isub(this.p):d0.strip!==void 0?d0.strip():d0._strip(),d0},oy.prototype.split=function(s0,g0){s0.iushrn(this.n,0,g0)},oy.prototype.imulK=function(s0){return s0.imul(this.k)},Mu(fy,oy),fy.prototype.split=function(s0,g0){for(var d0=4194303,c0=Math.min(s0.length,9),a0=0;a0>>22,S0=z0}S0>>>=22,s0.words[a0-10]=S0,S0===0&&s0.length>10?s0.length-=10:s0.length-=9},fy.prototype.imulK=function(s0){s0.words[s0.length]=0,s0.words[s0.length+1]=0,s0.length+=2;for(var g0=0,d0=0;d0>>=26,s0.words[d0]=a0,g0=c0}return g0!==0&&(s0.words[s0.length++]=g0),s0},xu._prime=function(s0){if(hy[s0])return hy[s0];var g0;if(s0==="k256")g0=new fy;else if(s0==="p224")g0=new Fy;else if(s0==="p192")g0=new qv;else{if(s0!=="p25519")throw new Error("Unknown prime "+s0);g0=new Qv}return hy[s0]=g0,g0},T0.prototype._verify1=function(s0){mu(s0.negative===0,"red works only with positives"),mu(s0.red,"red works only with red numbers")},T0.prototype._verify2=function(s0,g0){mu((s0.negative|g0.negative)==0,"red works only with positives"),mu(s0.red&&s0.red===g0.red,"red works only with red numbers")},T0.prototype.imod=function(s0){return this.prime?this.prime.ireduce(s0)._forceRed(this):(B0(s0,s0.umod(this.m)._forceRed(this)),s0)},T0.prototype.neg=function(s0){return s0.isZero()?s0.clone():this.m.sub(s0)._forceRed(this)},T0.prototype.add=function(s0,g0){this._verify2(s0,g0);var d0=s0.add(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0._forceRed(this)},T0.prototype.iadd=function(s0,g0){this._verify2(s0,g0);var d0=s0.iadd(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0},T0.prototype.sub=function(s0,g0){this._verify2(s0,g0);var d0=s0.sub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0._forceRed(this)},T0.prototype.isub=function(s0,g0){this._verify2(s0,g0);var d0=s0.isub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0},T0.prototype.shl=function(s0,g0){return this._verify1(s0),this.imod(s0.ushln(g0))},T0.prototype.imul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.imul(g0))},T0.prototype.mul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.mul(g0))},T0.prototype.isqr=function(s0){return this.imul(s0,s0.clone())},T0.prototype.sqr=function(s0){return this.mul(s0,s0)},T0.prototype.sqrt=function(s0){if(s0.isZero())return s0.clone();var g0=this.m.andln(3);if(mu(g0%2==1),g0===3){var d0=this.m.add(new xu(1)).iushrn(2);return this.pow(s0,d0)}for(var c0=this.m.subn(1),a0=0;!c0.isZero()&&c0.andln(1)===0;)a0++,c0.iushrn(1);mu(!c0.isZero());var S0=new xu(1).toRed(this),z0=S0.redNeg(),Q0=this.m.subn(1).iushrn(1),p1=this.m.bitLength();for(p1=new xu(2*p1*p1).toRed(this);this.pow(p1,Q0).cmp(z0)!==0;)p1.redIAdd(z0);for(var T1=this.pow(p1,c0),U1=this.pow(s0,c0.addn(1).iushrn(1)),S1=this.pow(s0,c0),n1=a0;S1.cmp(S0)!==0;){for(var V1=S1,J1=0;V1.cmp(S0)!==0;J1++)V1=V1.redSqr();mu(J1=0;c0--){for(var p1=g0.words[c0],T1=Q0-1;T1>=0;T1--){var U1=p1>>T1&1;a0!==d0[0]&&(a0=this.sqr(a0)),U1!==0||S0!==0?(S0<<=1,S0|=U1,(++z0==4||c0===0&&T1===0)&&(a0=this.mul(a0,d0[S0]),z0=0,S0=0)):z0=0}Q0=26}return a0},T0.prototype.convertTo=function(s0){var g0=s0.umod(this.m);return g0===s0?g0.clone():g0},T0.prototype.convertFrom=function(s0){var g0=s0.clone();return g0.red=null,g0},xu.mont=function(s0){return new X0(s0)},Mu(X0,T0),X0.prototype.convertTo=function(s0){return this.imod(s0.ushln(this.shift))},X0.prototype.convertFrom=function(s0){var g0=this.imod(s0.mul(this.rinv));return g0.red=null,g0},X0.prototype.imul=function(s0,g0){if(s0.isZero()||g0.isZero())return s0.words[0]=0,s0.length=1,s0;var d0=s0.imul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.mul=function(s0,g0){if(s0.isZero()||g0.isZero())return new xu(0)._forceRed(this);var d0=s0.mul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.invm=function(s0){return this.imod(s0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})(Cte);var AF=Cte.exports,S0e=i$;function ule(yt){var ir,_c=yt.modulus.byteLength();do ir=new AF(S0e(_c));while(ir.cmp(yt.modulus)>=0||!ir.umod(yt.prime1)||!ir.umod(yt.prime2));return ir}function Xz(yt,ir){var _c=function(v1){var F1=ule(v1);return{blinder:F1.toRed(AF.mont(v1.modulus)).redPow(new AF(v1.publicExponent)).fromRed(),unblinder:F1.invm(v1.modulus)}}(ir),mu=ir.modulus.byteLength(),Mu=new AF(yt).mul(_c.blinder).umod(ir.modulus),xu=Mu.toRed(AF.mont(ir.prime1)),l0=Mu.toRed(AF.mont(ir.prime2)),E0=ir.coefficient,j0=ir.prime1,M0=ir.prime2,B0=xu.redPow(ir.exponent1).fromRed(),q0=l0.redPow(ir.exponent2).fromRed(),y1=B0.isub(q0).imul(E0).umod(j0).imul(M0);return q0.iadd(y1).imul(_c.unblinder).umod(ir.modulus).toArrayLike(F0,"be",mu)}Xz.getr=ule;var KY=Xz,_F={},x0e={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}},VC={},VY={};(function(yt){var ir=yt;function _c(Mu){return Mu.length===1?"0"+Mu:Mu}function mu(Mu){for(var xu="",l0=0;l0>8,B0=255&j0;M0?l0.push(M0,B0):l0.push(B0)}return l0},ir.zero2=_c,ir.toHex=mu,ir.encode=function(Mu,xu){return xu==="hex"?mu(Mu):Mu}})(VY),function(yt){var ir=yt,_c=US,mu=Zx,Mu=VY;ir.assert=mu,ir.toArray=Mu.toArray,ir.zero2=Mu.zero2,ir.toHex=Mu.toHex,ir.encode=Mu.encode,ir.getNAF=function(xu,l0,E0){var j0=new Array(Math.max(xu.bitLength(),E0)+1);j0.fill(0);for(var M0=1<(M0>>1)-1?(M0>>1)-v1:v1,B0.isubn(y1)):y1=0,j0[q0]=y1,B0.iushrn(1)}return j0},ir.getJSF=function(xu,l0){var E0=[[],[]];xu=xu.clone(),l0=l0.clone();for(var j0,M0=0,B0=0;xu.cmpn(-M0)>0||l0.cmpn(-B0)>0;){var q0,y1,v1=xu.andln(3)+M0&3,F1=l0.andln(3)+B0&3;v1===3&&(v1=-1),F1===3&&(F1=-1),q0=1&v1?(j0=xu.andln(7)+M0&7)!=3&&j0!==5||F1!==2?v1:-v1:0,E0[0].push(q0),y1=1&F1?(j0=l0.andln(7)+B0&7)!=3&&j0!==5||v1!==2?F1:-F1:0,E0[1].push(y1),2*M0===q0+1&&(M0=1-M0),2*B0===y1+1&&(B0=1-B0),xu.iushrn(1),l0.iushrn(1)}return E0},ir.cachedProperty=function(xu,l0,E0){var j0="_"+l0;xu.prototype[l0]=function(){return this[j0]!==void 0?this[j0]:this[j0]=E0.call(this)}},ir.parseBytes=function(xu){return typeof xu=="string"?ir.toArray(xu,"hex"):xu},ir.intFromLE=function(xu){return new _c(xu,"hex","le")}}(VC);var I4={},dB=US,O4=VC,rx=O4.getNAF,Tte=O4.getJSF,Qz=O4.assert;function qC(yt,ir){this.type=yt,this.p=new dB(ir.p,16),this.red=ir.prime?dB.red(ir.prime):dB.mont(this.p),this.zero=new dB(0).toRed(this.red),this.one=new dB(1).toRed(this.red),this.two=new dB(2).toRed(this.red),this.n=ir.n&&new dB(ir.n,16),this.g=ir.g&&this.pointFromJSON(ir.g,ir.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var _c=this.n&&this.p.div(this.n);!_c||_c.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var hB=qC;function _k(yt,ir){this.curve=yt,this.type=ir,this.precomputed=null}qC.prototype.point=function(){throw new Error("Not implemented")},qC.prototype.validate=function(){throw new Error("Not implemented")},qC.prototype._fixedNafMul=function(yt,ir){Qz(yt.precomputed);var _c=yt._getDoubles(),mu=rx(ir,1,this._bitLength),Mu=(1<<_c.step+1)-(_c.step%2==0?2:1);Mu/=3;var xu,l0,E0=[];for(xu=0;xu=xu;j0--)l0=(l0<<1)+mu[j0];E0.push(l0)}for(var M0=this.jpoint(null,null,null),B0=this.jpoint(null,null,null),q0=Mu;q0>0;q0--){for(xu=0;xu=0;E0--){for(var j0=0;E0>=0&&xu[E0]===0;E0--)j0++;if(E0>=0&&j0++,l0=l0.dblp(j0),E0<0)break;var M0=xu[E0];Qz(M0!==0),l0=yt.type==="affine"?M0>0?l0.mixedAdd(Mu[M0-1>>1]):l0.mixedAdd(Mu[-M0-1>>1].neg()):M0>0?l0.add(Mu[M0-1>>1]):l0.add(Mu[-M0-1>>1].neg())}return yt.type==="affine"?l0.toP():l0},qC.prototype._wnafMulAdd=function(yt,ir,_c,mu,Mu){var xu,l0,E0,j0=this._wnafT1,M0=this._wnafT2,B0=this._wnafT3,q0=0;for(xu=0;xu=1;xu-=2){var v1=xu-1,F1=xu;if(j0[v1]===1&&j0[F1]===1){var ov=[ir[v1],null,null,ir[F1]];ir[v1].y.cmp(ir[F1].y)===0?(ov[1]=ir[v1].add(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg())):ir[v1].y.cmp(ir[F1].y.redNeg())===0?(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].add(ir[F1].neg())):(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg()));var bv=[-3,-1,-5,-7,0,7,5,1,3],gv=Tte(_c[v1],_c[F1]);for(q0=Math.max(gv[0].length,q0),B0[v1]=new Array(q0),B0[F1]=new Array(q0),l0=0;l0=0;xu--){for(var Fy=0;xu>=0;){var qv=!0;for(l0=0;l0=0&&Fy++,oy=oy.dblp(Fy),xu<0)break;for(l0=0;l00?E0=M0[l0][Qv-1>>1]:Qv<0&&(E0=M0[l0][-Qv-1>>1].neg()),oy=E0.type==="affine"?oy.mixedAdd(E0):oy.add(E0))}}for(xu=0;xu=Math.ceil((yt.bitLength()+1)/ir.step)},_k.prototype._getDoubles=function(yt,ir){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var _c=[this],mu=this,Mu=0;Mu=0&&(xu=ir,l0=_c),mu.negative&&(mu=mu.neg(),Mu=Mu.neg()),xu.negative&&(xu=xu.neg(),l0=l0.neg()),[{a:mu,b:Mu},{a:xu,b:l0}]},$8.prototype._endoSplit=function(yt){var ir=this.endo.basis,_c=ir[0],mu=ir[1],Mu=mu.b.mul(yt).divRound(this.n),xu=_c.b.neg().mul(yt).divRound(this.n),l0=Mu.mul(_c.a),E0=xu.mul(mu.a),j0=Mu.mul(_c.b),M0=xu.mul(mu.b);return{k1:yt.sub(l0).sub(E0),k2:j0.add(M0).neg()}},$8.prototype.pointFromX=function(yt,ir){(yt=new F8(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr().redMul(yt).redIAdd(yt.redMul(this.a)).redIAdd(this.b),mu=_c.redSqrt();if(mu.redSqr().redSub(_c).cmp(this.zero)!==0)throw new Error("invalid point");var Mu=mu.fromRed().isOdd();return(ir&&!Mu||!ir&&Mu)&&(mu=mu.redNeg()),this.point(yt,mu)},$8.prototype.validate=function(yt){if(yt.inf)return!0;var ir=yt.x,_c=yt.y,mu=this.a.redMul(ir),Mu=ir.redSqr().redMul(ir).redIAdd(mu).redIAdd(this.b);return _c.redSqr().redISub(Mu).cmpn(0)===0},$8.prototype._endoWnafMulAdd=function(yt,ir,_c){for(var mu=this._endoWnafT1,Mu=this._endoWnafT2,xu=0;xu":""},zS.prototype.isInfinity=function(){return this.inf},zS.prototype.add=function(yt){if(this.inf)return yt;if(yt.inf)return this;if(this.eq(yt))return this.dbl();if(this.neg().eq(yt))return this.curve.point(null,null);if(this.x.cmp(yt.x)===0)return this.curve.point(null,null);var ir=this.y.redSub(yt.y);ir.cmpn(0)!==0&&(ir=ir.redMul(this.x.redSub(yt.x).redInvm()));var _c=ir.redSqr().redISub(this.x).redISub(yt.x),mu=ir.redMul(this.x.redSub(_c)).redISub(this.y);return this.curve.point(_c,mu)},zS.prototype.dbl=function(){if(this.inf)return this;var yt=this.y.redAdd(this.y);if(yt.cmpn(0)===0)return this.curve.point(null,null);var ir=this.curve.a,_c=this.x.redSqr(),mu=yt.redInvm(),Mu=_c.redAdd(_c).redIAdd(_c).redIAdd(ir).redMul(mu),xu=Mu.redSqr().redISub(this.x.redAdd(this.x)),l0=Mu.redMul(this.x.redSub(xu)).redISub(this.y);return this.curve.point(xu,l0)},zS.prototype.getX=function(){return this.x.fromRed()},zS.prototype.getY=function(){return this.y.fromRed()},zS.prototype.mul=function(yt){return yt=new F8(yt,16),this.isInfinity()?this:this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve.endo?this.curve._endoWnafMulAdd([this],[yt]):this.curve._wnafMul(this,yt)},zS.prototype.mulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu):this.curve._wnafMulAdd(1,mu,Mu,2)},zS.prototype.jmulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu,!0):this.curve._wnafMulAdd(1,mu,Mu,2,!0)},zS.prototype.eq=function(yt){return this===yt||this.inf===yt.inf&&(this.inf||this.x.cmp(yt.x)===0&&this.y.cmp(yt.y)===0)},zS.prototype.neg=function(yt){if(this.inf)return this;var ir=this.curve.point(this.x,this.y.redNeg());if(yt&&this.precomputed){var _c=this.precomputed,mu=function(Mu){return Mu.neg()};ir.precomputed={naf:_c.naf&&{wnd:_c.naf.wnd,points:_c.naf.points.map(mu)},doubles:_c.doubles&&{step:_c.doubles.step,points:_c.doubles.points.map(mu)}}}return ir},zS.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},eH(z8,fR.BasePoint),$8.prototype.jpoint=function(yt,ir,_c){return new z8(this,yt,ir,_c)},z8.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var yt=this.z.redInvm(),ir=yt.redSqr(),_c=this.x.redMul(ir),mu=this.y.redMul(ir).redMul(yt);return this.curve.point(_c,mu)},z8.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},z8.prototype.add=function(yt){if(this.isInfinity())return yt;if(yt.isInfinity())return this;var ir=yt.z.redSqr(),_c=this.z.redSqr(),mu=this.x.redMul(ir),Mu=yt.x.redMul(_c),xu=this.y.redMul(ir.redMul(yt.z)),l0=yt.y.redMul(_c.redMul(this.z)),E0=mu.redSub(Mu),j0=xu.redSub(l0);if(E0.cmpn(0)===0)return j0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var M0=E0.redSqr(),B0=M0.redMul(E0),q0=mu.redMul(M0),y1=j0.redSqr().redIAdd(B0).redISub(q0).redISub(q0),v1=j0.redMul(q0.redISub(y1)).redISub(xu.redMul(B0)),F1=this.z.redMul(yt.z).redMul(E0);return this.curve.jpoint(y1,v1,F1)},z8.prototype.mixedAdd=function(yt){if(this.isInfinity())return yt.toJ();if(yt.isInfinity())return this;var ir=this.z.redSqr(),_c=this.x,mu=yt.x.redMul(ir),Mu=this.y,xu=yt.y.redMul(ir).redMul(this.z),l0=_c.redSub(mu),E0=Mu.redSub(xu);if(l0.cmpn(0)===0)return E0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var j0=l0.redSqr(),M0=j0.redMul(l0),B0=_c.redMul(j0),q0=E0.redSqr().redIAdd(M0).redISub(B0).redISub(B0),y1=E0.redMul(B0.redISub(q0)).redISub(Mu.redMul(M0)),v1=this.z.redMul(l0);return this.curve.jpoint(q0,y1,v1)},z8.prototype.dblp=function(yt){if(yt===0)return this;if(this.isInfinity())return this;if(!yt)return this.dbl();var ir;if(this.curve.zeroA||this.curve.threeA){var _c=this;for(ir=0;ir=0)return!1;if(_c.redIAdd(Mu),this.x.cmp(_c)===0)return!0}},z8.prototype.inspect=function(){return this.isInfinity()?"":""},z8.prototype.isInfinity=function(){return this.z.cmpn(0)===0};var tH=US,dR=Gw,WY=hB,T7=VC;function H8(yt){WY.call(this,"mont",yt),this.a=new tH(yt.a,16).toRed(this.red),this.b=new tH(yt.b,16).toRed(this.red),this.i4=new tH(4).toRed(this.red).redInvm(),this.two=new tH(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}dR(H8,WY);var rH=H8;function L6(yt,ir,_c){WY.BasePoint.call(this,yt,"projective"),ir===null&&_c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new tH(ir,16),this.z=new tH(_c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}H8.prototype.validate=function(yt){var ir=yt.normalize().x,_c=ir.redSqr(),mu=_c.redMul(ir).redAdd(_c.redMul(this.a)).redAdd(ir);return mu.redSqrt().redSqr().cmp(mu)===0},dR(L6,WY.BasePoint),H8.prototype.decodePoint=function(yt,ir){return this.point(T7.toArray(yt,ir),1)},H8.prototype.point=function(yt,ir){return new L6(this,yt,ir)},H8.prototype.pointFromJSON=function(yt){return L6.fromJSON(this,yt)},L6.prototype.precompute=function(){},L6.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},L6.fromJSON=function(yt,ir){return new L6(yt,ir[0],ir[1]||yt.one)},L6.prototype.inspect=function(){return this.isInfinity()?"":""},L6.prototype.isInfinity=function(){return this.z.cmpn(0)===0},L6.prototype.dbl=function(){var yt=this.x.redAdd(this.z).redSqr(),ir=this.x.redSub(this.z).redSqr(),_c=yt.redSub(ir),mu=yt.redMul(ir),Mu=_c.redMul(ir.redAdd(this.curve.a24.redMul(_c)));return this.curve.point(mu,Mu)},L6.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},L6.prototype.diffAdd=function(yt,ir){var _c=this.x.redAdd(this.z),mu=this.x.redSub(this.z),Mu=yt.x.redAdd(yt.z),xu=yt.x.redSub(yt.z).redMul(_c),l0=Mu.redMul(mu),E0=ir.z.redMul(xu.redAdd(l0).redSqr()),j0=ir.x.redMul(xu.redISub(l0).redSqr());return this.curve.point(E0,j0)},L6.prototype.mul=function(yt){for(var ir=yt.clone(),_c=this,mu=this.curve.point(null,null),Mu=[];ir.cmpn(0)!==0;ir.iushrn(1))Mu.push(ir.andln(1));for(var xu=Mu.length-1;xu>=0;xu--)Mu[xu]===0?(_c=_c.diffAdd(mu,this),mu=mu.dbl()):(mu=_c.diffAdd(mu,this),_c=_c.dbl());return mu},L6.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},L6.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},L6.prototype.eq=function(yt){return this.getX().cmp(yt.getX())===0},L6.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},L6.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var $M=US,fle=Gw,wN=hB,k0e=VC.assert;function c_(yt){this.twisted=(0|yt.a)!=1,this.mOneA=this.twisted&&(0|yt.a)==-1,this.extended=this.mOneA,wN.call(this,"edwards",yt),this.a=new $M(yt.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new $M(yt.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new $M(yt.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),k0e(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(0|yt.c)==1}fle(c_,wN);var $N=c_;function u_(yt,ir,_c,mu,Mu){wN.BasePoint.call(this,yt,"projective"),ir===null&&_c===null&&mu===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new $M(ir,16),this.y=new $M(_c,16),this.z=mu?new $M(mu,16):this.curve.one,this.t=Mu&&new $M(Mu,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}c_.prototype._mulA=function(yt){return this.mOneA?yt.redNeg():this.a.redMul(yt)},c_.prototype._mulC=function(yt){return this.oneC?yt:this.c.redMul(yt)},c_.prototype.jpoint=function(yt,ir,_c,mu){return this.point(yt,ir,_c,mu)},c_.prototype.pointFromX=function(yt,ir){(yt=new $M(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=this.c2.redSub(this.a.redMul(_c)),Mu=this.one.redSub(this.c2.redMul(this.d).redMul(_c)),xu=mu.redMul(Mu.redInvm()),l0=xu.redSqrt();if(l0.redSqr().redSub(xu).cmp(this.zero)!==0)throw new Error("invalid point");var E0=l0.fromRed().isOdd();return(ir&&!E0||!ir&&E0)&&(l0=l0.redNeg()),this.point(yt,l0)},c_.prototype.pointFromY=function(yt,ir){(yt=new $M(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=_c.redSub(this.c2),Mu=_c.redMul(this.d).redMul(this.c2).redSub(this.a),xu=mu.redMul(Mu.redInvm());if(xu.cmp(this.zero)===0){if(ir)throw new Error("invalid point");return this.point(this.zero,yt)}var l0=xu.redSqrt();if(l0.redSqr().redSub(xu).cmp(this.zero)!==0)throw new Error("invalid point");return l0.fromRed().isOdd()!==ir&&(l0=l0.redNeg()),this.point(l0,yt)},c_.prototype.validate=function(yt){if(yt.isInfinity())return!0;yt.normalize();var ir=yt.x.redSqr(),_c=yt.y.redSqr(),mu=ir.redMul(this.a).redAdd(_c),Mu=this.c2.redMul(this.one.redAdd(this.d.redMul(ir).redMul(_c)));return mu.cmp(Mu)===0},fle(u_,wN.BasePoint),c_.prototype.pointFromJSON=function(yt){return u_.fromJSON(this,yt)},c_.prototype.point=function(yt,ir,_c,mu){return new u_(this,yt,ir,_c,mu)},u_.fromJSON=function(yt,ir){return new u_(yt,ir[0],ir[1],ir[2])},u_.prototype.inspect=function(){return this.isInfinity()?"":""},u_.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},u_.prototype._extDbl=function(){var yt=this.x.redSqr(),ir=this.y.redSqr(),_c=this.z.redSqr();_c=_c.redIAdd(_c);var mu=this.curve._mulA(yt),Mu=this.x.redAdd(this.y).redSqr().redISub(yt).redISub(ir),xu=mu.redAdd(ir),l0=xu.redSub(_c),E0=mu.redSub(ir),j0=Mu.redMul(l0),M0=xu.redMul(E0),B0=Mu.redMul(E0),q0=l0.redMul(xu);return this.curve.point(j0,M0,q0,B0)},u_.prototype._projDbl=function(){var yt,ir,_c,mu,Mu,xu,l0=this.x.redAdd(this.y).redSqr(),E0=this.x.redSqr(),j0=this.y.redSqr();if(this.curve.twisted){var M0=(mu=this.curve._mulA(E0)).redAdd(j0);this.zOne?(yt=l0.redSub(E0).redSub(j0).redMul(M0.redSub(this.curve.two)),ir=M0.redMul(mu.redSub(j0)),_c=M0.redSqr().redSub(M0).redSub(M0)):(Mu=this.z.redSqr(),xu=M0.redSub(Mu).redISub(Mu),yt=l0.redSub(E0).redISub(j0).redMul(xu),ir=M0.redMul(mu.redSub(j0)),_c=M0.redMul(xu))}else mu=E0.redAdd(j0),Mu=this.curve._mulC(this.z).redSqr(),xu=mu.redSub(Mu).redSub(Mu),yt=this.curve._mulC(l0.redISub(mu)).redMul(xu),ir=this.curve._mulC(mu).redMul(E0.redISub(j0)),_c=mu.redMul(xu);return this.curve.point(yt,ir,_c)},u_.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u_.prototype._extAdd=function(yt){var ir=this.y.redSub(this.x).redMul(yt.y.redSub(yt.x)),_c=this.y.redAdd(this.x).redMul(yt.y.redAdd(yt.x)),mu=this.t.redMul(this.curve.dd).redMul(yt.t),Mu=this.z.redMul(yt.z.redAdd(yt.z)),xu=_c.redSub(ir),l0=Mu.redSub(mu),E0=Mu.redAdd(mu),j0=_c.redAdd(ir),M0=xu.redMul(l0),B0=E0.redMul(j0),q0=xu.redMul(j0),y1=l0.redMul(E0);return this.curve.point(M0,B0,y1,q0)},u_.prototype._projAdd=function(yt){var ir,_c,mu=this.z.redMul(yt.z),Mu=mu.redSqr(),xu=this.x.redMul(yt.x),l0=this.y.redMul(yt.y),E0=this.curve.d.redMul(xu).redMul(l0),j0=Mu.redSub(E0),M0=Mu.redAdd(E0),B0=this.x.redAdd(this.y).redMul(yt.x.redAdd(yt.y)).redISub(xu).redISub(l0),q0=mu.redMul(j0).redMul(B0);return this.curve.twisted?(ir=mu.redMul(M0).redMul(l0.redSub(this.curve._mulA(xu))),_c=j0.redMul(M0)):(ir=mu.redMul(M0).redMul(l0.redSub(xu)),_c=this.curve._mulC(j0).redMul(M0)),this.curve.point(q0,ir,_c)},u_.prototype.add=function(yt){return this.isInfinity()?yt:yt.isInfinity()?this:this.curve.extended?this._extAdd(yt):this._projAdd(yt)},u_.prototype.mul=function(yt){return this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve._wnafMul(this,yt)},u_.prototype.mulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!1)},u_.prototype.jmulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!0)},u_.prototype.normalize=function(){if(this.zOne)return this;var yt=this.z.redInvm();return this.x=this.x.redMul(yt),this.y=this.y.redMul(yt),this.t&&(this.t=this.t.redMul(yt)),this.z=this.curve.one,this.zOne=!0,this},u_.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u_.prototype.getX=function(){return this.normalize(),this.x.fromRed()},u_.prototype.getY=function(){return this.normalize(),this.y.fromRed()},u_.prototype.eq=function(yt){return this===yt||this.getX().cmp(yt.getX())===0&&this.getY().cmp(yt.getY())===0},u_.prototype.eqXToP=function(yt){var ir=yt.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(ir)===0)return!0;for(var _c=yt.clone(),mu=this.curve.redN.redMul(this.z);;){if(_c.iadd(this.curve.n),_c.cmp(this.curve.p)>=0)return!1;if(ir.redIAdd(mu),this.x.cmp(ir)===0)return!0}},u_.prototype.toP=u_.prototype.normalize,u_.prototype.mixedAdd=u_.prototype.add,function(yt){var ir=yt;ir.base=hB,ir.short=U8,ir.mont=rH,ir.edwards=$N}(I4);var SF={},GY={},W$={},C0e=Zx,E_=Gw;function YY(yt,ir){return(64512&yt.charCodeAt(ir))==55296&&!(ir<0||ir+1>=yt.length)&&(64512&yt.charCodeAt(ir+1))==56320}function P4(yt){return(yt>>>24|yt>>>8&65280|yt<<8&16711680|(255&yt)<<24)>>>0}function xE(yt){return yt.length===1?"0"+yt:yt}function dle(yt){return yt.length===7?"0"+yt:yt.length===6?"00"+yt:yt.length===5?"000"+yt:yt.length===4?"0000"+yt:yt.length===3?"00000"+yt:yt.length===2?"000000"+yt:yt.length===1?"0000000"+yt:yt}W$.inherits=E_,W$.toArray=function(yt,ir){if(Array.isArray(yt))return yt.slice();if(!yt)return[];var _c=[];if(typeof yt=="string")if(ir){if(ir==="hex")for((yt=yt.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(yt="0"+yt),Mu=0;Mu>6|192,_c[mu++]=63&xu|128):YY(yt,Mu)?(xu=65536+((1023&xu)<<10)+(1023&yt.charCodeAt(++Mu)),_c[mu++]=xu>>18|240,_c[mu++]=xu>>12&63|128,_c[mu++]=xu>>6&63|128,_c[mu++]=63&xu|128):(_c[mu++]=xu>>12|224,_c[mu++]=xu>>6&63|128,_c[mu++]=63&xu|128)}else for(Mu=0;Mu>>0}return xu},W$.split32=function(yt,ir){for(var _c=new Array(4*yt.length),mu=0,Mu=0;mu>>24,_c[Mu+1]=xu>>>16&255,_c[Mu+2]=xu>>>8&255,_c[Mu+3]=255&xu):(_c[Mu+3]=xu>>>24,_c[Mu+2]=xu>>>16&255,_c[Mu+1]=xu>>>8&255,_c[Mu]=255&xu)}return _c},W$.rotr32=function(yt,ir){return yt>>>ir|yt<<32-ir},W$.rotl32=function(yt,ir){return yt<>>32-ir},W$.sum32=function(yt,ir){return yt+ir>>>0},W$.sum32_3=function(yt,ir,_c){return yt+ir+_c>>>0},W$.sum32_4=function(yt,ir,_c,mu){return yt+ir+_c+mu>>>0},W$.sum32_5=function(yt,ir,_c,mu,Mu){return yt+ir+_c+mu+Mu>>>0},W$.sum64=function(yt,ir,_c,mu){var Mu=yt[ir],xu=mu+yt[ir+1]>>>0,l0=(xu>>0,yt[ir+1]=xu},W$.sum64_hi=function(yt,ir,_c,mu){return(ir+mu>>>0>>0},W$.sum64_lo=function(yt,ir,_c,mu){return ir+mu>>>0},W$.sum64_4_hi=function(yt,ir,_c,mu,Mu,xu,l0,E0){var j0=0,M0=ir;return j0+=(M0=M0+mu>>>0)>>0)>>0)>>0},W$.sum64_4_lo=function(yt,ir,_c,mu,Mu,xu,l0,E0){return ir+mu+xu+E0>>>0},W$.sum64_5_hi=function(yt,ir,_c,mu,Mu,xu,l0,E0,j0,M0){var B0=0,q0=ir;return B0+=(q0=q0+mu>>>0)>>0)>>0)>>0)>>0},W$.sum64_5_lo=function(yt,ir,_c,mu,Mu,xu,l0,E0,j0,M0){return ir+mu+xu+E0+M0>>>0},W$.rotr64_hi=function(yt,ir,_c){return(ir<<32-_c|yt>>>_c)>>>0},W$.rotr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0},W$.shr64_hi=function(yt,ir,_c){return yt>>>_c},W$.shr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0};var nH={},hle=W$,ple=Zx;function j4(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}nH.BlockHash=j4,j4.prototype.update=function(yt,ir){if(yt=hle.toArray(yt,ir),this.pending?this.pending=this.pending.concat(yt):this.pending=yt,this.pendingTotal+=yt.length,this.pending.length>=this._delta8){var _c=(yt=this.pending).length%this._delta8;this.pending=yt.slice(yt.length-_c,yt.length),this.pending.length===0&&(this.pending=null),yt=hle.join32(yt,0,yt.length-_c,this.endian);for(var mu=0;mu>>24&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>8&255,mu[Mu++]=255&yt}else for(mu[Mu++]=255&yt,mu[Mu++]=yt>>>8&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>24&255,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,xu=8;xu>>3},eC.g1_256=function(yt){return QI(yt,17)^QI(yt,19)^yt>>>10};var tC=W$,kO=nH,gle=eC,ZY=tC.rotl32,iH=tC.sum32,oH=tC.sum32_5,T0e=gle.ft_1,vle=kO.BlockHash,Rte=[1518500249,1859775393,2400959708,3395469782];function WC(){if(!(this instanceof WC))return new WC;vle.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}tC.inherits(WC,vle);var R0e=WC;WC.blockSize=512,WC.outSize=160,WC.hmacStrength=80,WC.padLength=64,WC.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=ZY(_c[mu-3]^_c[mu-8]^_c[mu-14]^_c[mu-16],1);var Mu=this.h[0],xu=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4];for(mu=0;mu<_c.length;mu++){var M0=~~(mu/20),B0=oH(ZY(Mu,5),T0e(M0,xu,l0,E0),j0,_c[mu],Rte[M0]);j0=E0,E0=l0,l0=ZY(xu,30),xu=Mu,Mu=B0}this.h[0]=iH(this.h[0],Mu),this.h[1]=iH(this.h[1],xu),this.h[2]=iH(this.h[2],l0),this.h[3]=iH(this.h[3],E0),this.h[4]=iH(this.h[4],j0)},WC.prototype._digest=function(yt){return yt==="hex"?tC.toHex32(this.h,"big"):tC.split32(this.h,"big")};var aH=W$,yle=nH,sH=eC,CO=Zx,e5=aH.sum32,lH=aH.sum32_4,M0e=aH.sum32_5,cH=sH.ch32,I0e=sH.maj32,t5=sH.s0_256,O0e=sH.s1_256,P0e=sH.g0_256,j0e=sH.g1_256,ble=yle.BlockHash,N0e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function TO(){if(!(this instanceof TO))return new TO;ble.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=N0e,this.W=new Array(64)}aH.inherits(TO,ble);var wle=TO;TO.blockSize=512,TO.outSize=256,TO.hmacStrength=192,TO.padLength=64,TO.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=lH(j0e(_c[mu-2]),_c[mu-7],P0e(_c[mu-15]),_c[mu-16]);var Mu=this.h[0],xu=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4],M0=this.h[5],B0=this.h[6],q0=this.h[7];for(CO(this.k.length===_c.length),mu=0;mu<_c.length;mu++){var y1=M0e(q0,O0e(j0),cH(j0,M0,B0),this.k[mu],_c[mu]),v1=e5(t5(Mu),I0e(Mu,xu,l0));q0=B0,B0=M0,M0=j0,j0=e5(E0,y1),E0=l0,l0=xu,xu=Mu,Mu=e5(y1,v1)}this.h[0]=e5(this.h[0],Mu),this.h[1]=e5(this.h[1],xu),this.h[2]=e5(this.h[2],l0),this.h[3]=e5(this.h[3],E0),this.h[4]=e5(this.h[4],j0),this.h[5]=e5(this.h[5],M0),this.h[6]=e5(this.h[6],B0),this.h[7]=e5(this.h[7],q0)},TO.prototype._digest=function(yt){return yt==="hex"?aH.toHex32(this.h,"big"):aH.split32(this.h,"big")};var Mte=W$,Ite=wle;function EN(){if(!(this instanceof EN))return new EN;Ite.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}Mte.inherits(EN,Ite);var RO=EN;EN.blockSize=512,EN.outSize=224,EN.hmacStrength=192,EN.padLength=64,EN.prototype._digest=function(yt){return yt==="hex"?Mte.toHex32(this.h.slice(0,7),"big"):Mte.split32(this.h.slice(0,7),"big")};var rC=W$,Ote=nH,$le=Zx,R7=rC.rotr64_hi,MO=rC.rotr64_lo,nC=rC.shr64_hi,Ele=rC.shr64_lo,pB=rC.sum64,EM=rC.sum64_hi,AM=rC.sum64_lo,Ale=rC.sum64_4_hi,_le=rC.sum64_4_lo,mB=rC.sum64_5_hi,Pte=rC.sum64_5_lo,JY=Ote.BlockHash,L0e=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function r5(){if(!(this instanceof r5))return new r5;JY.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=L0e,this.W=new Array(160)}rC.inherits(r5,JY);var Sle=r5;function B0e(yt,ir,_c,mu,Mu){var xu=yt&_c^~ytΜreturn xu<0&&(xu+=4294967296),xu}function xle(yt,ir,_c,mu,Mu,xu){var l0=ir&mu^~ir&xu;return l0<0&&(l0+=4294967296),l0}function D0e(yt,ir,_c,mu,Mu){var xu=yt&_c^yt&Mu^_cΜreturn xu<0&&(xu+=4294967296),xu}function n5(yt,ir,_c,mu,Mu,xu){var l0=ir&mu^ir&xu^mu&xu;return l0<0&&(l0+=4294967296),l0}function kle(yt,ir){var _c=R7(yt,ir,28)^R7(ir,yt,2)^R7(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function F0e(yt,ir){var _c=MO(yt,ir,28)^MO(ir,yt,2)^MO(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function U0e(yt,ir){var _c=R7(yt,ir,14)^R7(yt,ir,18)^R7(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function z0e(yt,ir){var _c=MO(yt,ir,14)^MO(yt,ir,18)^MO(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function H0e(yt,ir){var _c=R7(yt,ir,1)^R7(yt,ir,8)^nC(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function K0e(yt,ir){var _c=MO(yt,ir,1)^MO(yt,ir,8)^Ele(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function V0e(yt,ir){var _c=R7(yt,ir,19)^R7(ir,yt,29)^nC(yt,ir,6);return _c<0&&(_c+=4294967296),_c}function q0e(yt,ir){var _c=MO(yt,ir,19)^MO(ir,yt,29)^Ele(yt,ir,6);return _c<0&&(_c+=4294967296),_c}r5.blockSize=1024,r5.outSize=512,r5.hmacStrength=192,r5.padLength=128,r5.prototype._prepareBlock=function(yt,ir){for(var _c=this.W,mu=0;mu<32;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu+=2){var Mu=V0e(_c[mu-4],_c[mu-3]),xu=q0e(_c[mu-4],_c[mu-3]),l0=_c[mu-14],E0=_c[mu-13],j0=H0e(_c[mu-30],_c[mu-29]),M0=K0e(_c[mu-30],_c[mu-29]),B0=_c[mu-32],q0=_c[mu-31];_c[mu]=Ale(Mu,xu,l0,E0,j0,M0,B0,q0),_c[mu+1]=_le(Mu,xu,l0,E0,j0,M0,B0,q0)}},r5.prototype._update=function(yt,ir){this._prepareBlock(yt,ir);var _c=this.W,mu=this.h[0],Mu=this.h[1],xu=this.h[2],l0=this.h[3],E0=this.h[4],j0=this.h[5],M0=this.h[6],B0=this.h[7],q0=this.h[8],y1=this.h[9],v1=this.h[10],F1=this.h[11],ov=this.h[12],bv=this.h[13],gv=this.h[14],xv=this.h[15];$le(this.k.length===_c.length);for(var hy=0;hy<_c.length;hy+=2){var oy=gv,fy=xv,Fy=U0e(q0,y1),qv=z0e(q0,y1),Qv=B0e(q0,0,v1,0,ov),T0=xle(0,y1,0,F1,0,bv),X0=this.k[hy],s0=this.k[hy+1],g0=_c[hy],d0=_c[hy+1],c0=mB(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0),a0=Pte(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0);oy=kle(mu,Mu),fy=F0e(mu,Mu),Fy=D0e(mu,0,xu,0,E0),qv=n5(0,Mu,0,l0,0,j0);var S0=EM(oy,fy,Fy,qv),z0=AM(oy,fy,Fy,qv);gv=ov,xv=bv,ov=v1,bv=F1,v1=q0,F1=y1,q0=EM(M0,B0,c0,a0),y1=AM(B0,B0,c0,a0),M0=E0,B0=j0,E0=xu,j0=l0,xu=mu,l0=Mu,mu=EM(c0,a0,S0,z0),Mu=AM(c0,a0,S0,z0)}pB(this.h,0,mu,Mu),pB(this.h,2,xu,l0),pB(this.h,4,E0,j0),pB(this.h,6,M0,B0),pB(this.h,8,q0,y1),pB(this.h,10,v1,F1),pB(this.h,12,ov,bv),pB(this.h,14,gv,xv)},r5.prototype._digest=function(yt){return yt==="hex"?rC.toHex32(this.h,"big"):rC.split32(this.h,"big")};var jte=W$,Cle=Sle;function AN(){if(!(this instanceof AN))return new AN;Cle.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}jte.inherits(AN,Cle);var W0e=AN;AN.blockSize=1024,AN.outSize=384,AN.hmacStrength=192,AN.padLength=128,AN.prototype._digest=function(yt){return yt==="hex"?jte.toHex32(this.h.slice(0,12),"big"):jte.split32(this.h.slice(0,12),"big")},xF.sha1=R0e,xF.sha224=RO,xF.sha256=wle,xF.sha384=W0e,xF.sha512=Sle;var Tle={},_N=W$,Rle=nH,_M=_N.rotl32,Mle=_N.sum32,uH=_N.sum32_3,gB=_N.sum32_4,Ile=Rle.BlockHash;function hR(){if(!(this instanceof hR))return new hR;Ile.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function Nte(yt,ir,_c,mu){return yt<=15?ir^_c^mu:yt<=31?ir&_c|~ir&mu:yt<=47?(ir|~_c)^mu:yt<=63?ir&mu|_c&~mu:ir^(_c|~mu)}function B4(yt){return yt<=15?0:yt<=31?1518500249:yt<=47?1859775393:yt<=63?2400959708:2840853838}function Ole(yt){return yt<=15?1352829926:yt<=31?1548603684:yt<=47?1836072691:yt<=63?2053994217:0}_N.inherits(hR,Ile),Tle.ripemd160=hR,hR.blockSize=512,hR.outSize=160,hR.hmacStrength=192,hR.padLength=64,hR.prototype._update=function(yt,ir){for(var _c=this.h[0],mu=this.h[1],Mu=this.h[2],xu=this.h[3],l0=this.h[4],E0=_c,j0=mu,M0=Mu,B0=xu,q0=l0,y1=0;y1<80;y1++){var v1=Mle(_M(gB(_c,Nte(y1,mu,Mu,xu),yt[Ple[y1]+ir],B4(y1)),jle[y1]),l0);_c=l0,l0=xu,xu=_M(Mu,10),Mu=mu,mu=v1,v1=Mle(_M(gB(E0,Nte(79-y1,j0,M0,B0),yt[IO[y1]+ir],Ole(y1)),G0e[y1]),q0),E0=q0,q0=B0,B0=_M(M0,10),M0=j0,j0=v1}v1=uH(this.h[1],Mu,B0),this.h[1]=uH(this.h[2],xu,q0),this.h[2]=uH(this.h[3],l0,E0),this.h[3]=uH(this.h[4],_c,j0),this.h[4]=uH(this.h[0],mu,M0),this.h[0]=v1},hR.prototype._digest=function(yt){return yt==="hex"?_N.toHex32(this.h,"little"):_N.split32(this.h,"little")};var Ple=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],IO=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],jle=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],G0e=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],Y0e=W$,Z0e=Zx;function fH(yt,ir,_c){if(!(this instanceof fH))return new fH(yt,ir,_c);this.Hash=yt,this.blockSize=yt.blockSize/8,this.outSize=yt.outSize/8,this.inner=null,this.outer=null,this._init(Y0e.toArray(ir,_c))}var Nle,Lle,J0e=fH;fH.prototype._init=function(yt){yt.length>this.blockSize&&(yt=new this.Hash().update(yt).digest()),Z0e(yt.length<=this.blockSize);for(var ir=yt.length;ir=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(ir,_c,mu)}var Q0e=SN;SN.prototype._init=function(yt,ir,_c){var mu=yt.concat(ir).concat(_c);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var Mu=0;Mu=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(yt.concat(_c||[])),this._reseed=1},SN.prototype.generate=function(yt,ir,_c,mu){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof ir!="string"&&(mu=_c,_c=ir,ir=null),_c&&(_c=SM.toArray(_c,mu||"hex"),this._update(_c));for(var Mu=[];Mu.length"};var XY=US,Bte=VC,Dte=Bte.assert;function B6(yt,ir){if(yt instanceof B6)return yt;this._importDER(yt,ir)||(Dte(yt.r&&yt.s,"Signature without r or s"),this.r=new XY(yt.r,16),this.s=new XY(yt.s,16),yt.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=yt.recoveryParam)}var Fte,D4,Ute=B6;function t1e(){this.place=0}function dH(yt,ir){var _c=yt[ir.place++];if(!(128&_c))return _c;var mu=15&_c;if(mu===0||mu>4)return!1;for(var Mu=0,xu=0,l0=ir.place;xu>>=0;return!(Mu<=127)&&(ir.place=l0,Mu)}function QY(yt){for(var ir=0,_c=yt.length-1;!yt[ir]&&!(128&yt[ir+1])&&ir<_c;)ir++;return ir===0?yt:yt.slice(ir)}function eZ(yt,ir){if(ir<128)yt.push(ir);else{var _c=1+(Math.log(ir)/Math.LN2>>>3);for(yt.push(128|_c);--_c;)yt.push(ir>>>(_c<<3)&255);yt.push(ir)}}B6.prototype._importDER=function(yt,ir){yt=Bte.toArray(yt,ir);var _c=new t1e;if(yt[_c.place++]!==48)return!1;var mu=dH(yt,_c);if(mu===!1||mu+_c.place!==yt.length||yt[_c.place++]!==2)return!1;var Mu=dH(yt,_c);if(Mu===!1)return!1;var xu=yt.slice(_c.place,Mu+_c.place);if(_c.place+=Mu,yt[_c.place++]!==2)return!1;var l0=dH(yt,_c);if(l0===!1||yt.length!==l0+_c.place)return!1;var E0=yt.slice(_c.place,l0+_c.place);if(xu[0]===0){if(!(128&xu[1]))return!1;xu=xu.slice(1)}if(E0[0]===0){if(!(128&E0[1]))return!1;E0=E0.slice(1)}return this.r=new XY(xu),this.s=new XY(E0),this.recoveryParam=null,!0},B6.prototype.toDER=function(yt){var ir=this.r.toArray(),_c=this.s.toArray();for(128&ir[0]&&(ir=[0].concat(ir)),128&_c[0]&&(_c=[0].concat(_c)),ir=QY(ir),_c=QY(_c);!(_c[0]||128&_c[1]);)_c=_c.slice(1);var mu=[2];eZ(mu,ir.length),(mu=mu.concat(ir)).push(2),eZ(mu,_c.length);var Mu=mu.concat(_c),xu=[48];return eZ(xu,Mu.length),xu=xu.concat(Mu),Bte.encode(xu,yt)};var F4=VC,Ble=F4.assert,tZ=F4.parseBytes,CF=F4.cachedProperty;function HS(yt,ir){this.eddsa=yt,this._secret=tZ(ir.secret),yt.isPoint(ir.pub)?this._pub=ir.pub:this._pubBytes=tZ(ir.pub)}HS.fromPublic=function(yt,ir){return ir instanceof HS?ir:new HS(yt,{pub:ir})},HS.fromSecret=function(yt,ir){return ir instanceof HS?ir:new HS(yt,{secret:ir})},HS.prototype.secret=function(){return this._secret},CF(HS,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),CF(HS,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),CF(HS,"privBytes",function(){var yt=this.eddsa,ir=this.hash(),_c=yt.encodingLength-1,mu=ir.slice(0,yt.encodingLength);return mu[0]&=248,mu[_c]&=127,mu[_c]|=64,mu}),CF(HS,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),CF(HS,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),CF(HS,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),HS.prototype.sign=function(yt){return Ble(this._secret,"KeyPair can only verify"),this.eddsa.sign(yt,this)},HS.prototype.verify=function(yt,ir){return this.eddsa.verify(yt,ir,this)},HS.prototype.getSecret=function(yt){return Ble(this._secret,"KeyPair is public only"),F4.encode(this.secret(),yt)},HS.prototype.getPublic=function(yt){return F4.encode(this.pubBytes(),yt)};var U4=HS,Dle=US,z4=VC,hH=z4.assert,lS=z4.cachedProperty,r1e=z4.parseBytes;function TF(yt,ir){this.eddsa=yt,typeof ir!="object"&&(ir=r1e(ir)),Array.isArray(ir)&&(ir={R:ir.slice(0,yt.encodingLength),S:ir.slice(yt.encodingLength)}),hH(ir.R&&ir.S,"Signature without R or S"),yt.isPoint(ir.R)&&(this._R=ir.R),ir.S instanceof Dle&&(this._S=ir.S),this._Rencoded=Array.isArray(ir.R)?ir.R:ir.Rencoded,this._Sencoded=Array.isArray(ir.S)?ir.S:ir.Sencoded}lS(TF,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),lS(TF,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),lS(TF,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),lS(TF,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),TF.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},TF.prototype.toHex=function(){return z4.encode(this.toBytes(),"hex").toUpperCase()};var rZ=TF,n1e=GY,nZ=SF,pH=VC,RF=pH.assert,Fle=pH.parseBytes,Ule=U4,zle=rZ;function D6(yt){if(RF(yt==="ed25519","only tested with ed25519 so far"),!(this instanceof D6))return new D6(yt);yt=nZ[yt].curve,this.curve=yt,this.g=yt.g,this.g.precompute(yt.n.bitLength()+1),this.pointClass=yt.point().constructor,this.encodingLength=Math.ceil(yt.n.bitLength()/8),this.hash=n1e.sha512}var Hle,Kle=D6;function iZ(){return Hle||(Hle=1,function(yt){var ir=yt;ir.version=x0e.version,ir.utils=VC,ir.rand=M4(),ir.curve=I4,ir.curves=SF,ir.ec=function(){if(D4)return Fte;D4=1;var _c=US,mu=Q0e,Mu=VC,xu=SF,l0=M4(),E0=Mu.assert,j0=vB,M0=Ute;function B0(q0){if(!(this instanceof B0))return new B0(q0);typeof q0=="string"&&(E0(Object.prototype.hasOwnProperty.call(xu,q0),"Unknown curve "+q0),q0=xu[q0]),q0 instanceof xu.PresetCurve&&(q0={curve:q0}),this.curve=q0.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=q0.curve.g,this.g.precompute(q0.curve.n.bitLength()+1),this.hash=q0.hash||q0.curve.hash}return Fte=B0,B0.prototype.keyPair=function(q0){return new j0(this,q0)},B0.prototype.keyFromPrivate=function(q0,y1){return j0.fromPrivate(this,q0,y1)},B0.prototype.keyFromPublic=function(q0,y1){return j0.fromPublic(this,q0,y1)},B0.prototype.genKeyPair=function(q0){q0||(q0={});for(var y1=new mu({hash:this.hash,pers:q0.pers,persEnc:q0.persEnc||"utf8",entropy:q0.entropy||l0(this.hash.hmacStrength),entropyEnc:q0.entropy&&q0.entropyEnc||"utf8",nonce:this.n.toArray()}),v1=this.n.byteLength(),F1=this.n.sub(new _c(2));;){var ov=new _c(y1.generate(v1));if(!(ov.cmp(F1)>0))return ov.iaddn(1),this.keyFromPrivate(ov)}},B0.prototype._truncateToN=function(q0,y1){var v1=8*q0.byteLength()-this.n.bitLength();return v1>0&&(q0=q0.ushrn(v1)),!y1&&q0.cmp(this.n)>=0?q0.sub(this.n):q0},B0.prototype.sign=function(q0,y1,v1,F1){typeof v1=="object"&&(F1=v1,v1=null),F1||(F1={}),y1=this.keyFromPrivate(y1,v1),q0=this._truncateToN(new _c(q0,16));for(var ov=this.n.byteLength(),bv=y1.getPrivate().toArray("be",ov),gv=q0.toArray("be",ov),xv=new mu({hash:this.hash,entropy:bv,nonce:gv,pers:F1.pers,persEnc:F1.persEnc||"utf8"}),hy=this.n.sub(new _c(1)),oy=0;;oy++){var fy=F1.k?F1.k(oy):new _c(xv.generate(this.n.byteLength()));if(!((fy=this._truncateToN(fy,!0)).cmpn(1)<=0||fy.cmp(hy)>=0)){var Fy=this.g.mul(fy);if(!Fy.isInfinity()){var qv=Fy.getX(),Qv=qv.umod(this.n);if(Qv.cmpn(0)!==0){var T0=fy.invm(this.n).mul(Qv.mul(y1.getPrivate()).iadd(q0));if((T0=T0.umod(this.n)).cmpn(0)!==0){var X0=(Fy.getY().isOdd()?1:0)|(qv.cmp(Qv)!==0?2:0);return F1.canonical&&T0.cmp(this.nh)>0&&(T0=this.n.sub(T0),X0^=1),new M0({r:Qv,s:T0,recoveryParam:X0})}}}}}},B0.prototype.verify=function(q0,y1,v1,F1){q0=this._truncateToN(new _c(q0,16)),v1=this.keyFromPublic(v1,F1);var ov=(y1=new M0(y1,"hex")).r,bv=y1.s;if(ov.cmpn(1)<0||ov.cmp(this.n)>=0||bv.cmpn(1)<0||bv.cmp(this.n)>=0)return!1;var gv,xv=bv.invm(this.n),hy=xv.mul(q0).umod(this.n),oy=xv.mul(ov).umod(this.n);return this.curve._maxwellTrick?!(gv=this.g.jmulAdd(hy,v1.getPublic(),oy)).isInfinity()&&gv.eqXToP(ov):!(gv=this.g.mulAdd(hy,v1.getPublic(),oy)).isInfinity()&&gv.getX().umod(this.n).cmp(ov)===0},B0.prototype.recoverPubKey=function(q0,y1,v1,F1){E0((3&v1)===v1,"The recovery param is more than two bits"),y1=new M0(y1,F1);var ov=this.n,bv=new _c(q0),gv=y1.r,xv=y1.s,hy=1&v1,oy=v1>>1;if(gv.cmp(this.curve.p.umod(this.curve.n))>=0&&oy)throw new Error("Unable to find sencond key candinate");gv=oy?this.curve.pointFromX(gv.add(this.curve.n),hy):this.curve.pointFromX(gv,hy);var fy=y1.r.invm(ov),Fy=ov.sub(bv).mul(fy).umod(ov),qv=xv.mul(fy).umod(ov);return this.g.mulAdd(Fy,gv,qv)},B0.prototype.getKeyRecoveryParam=function(q0,y1,v1,F1){if((y1=new M0(y1,F1)).recoveryParam!==null)return y1.recoveryParam;for(var ov=0;ov<4;ov++){var bv;try{bv=this.recoverPubKey(q0,y1,ov)}catch{continue}if(bv.eq(v1))return ov}throw new Error("Unable to find valid recovery factor")},Fte}(),ir.eddsa=Kle}(_F)),_F}D6.prototype.sign=function(yt,ir){yt=Fle(yt);var _c=this.keyFromSecret(ir),mu=this.hashInt(_c.messagePrefix(),yt),Mu=this.g.mul(mu),xu=this.encodePoint(Mu),l0=this.hashInt(xu,_c.pubBytes(),yt).mul(_c.priv()),E0=mu.add(l0).umod(this.curve.n);return this.makeSignature({R:Mu,S:E0,Rencoded:xu})},D6.prototype.verify=function(yt,ir,_c){yt=Fle(yt),ir=this.makeSignature(ir);var mu=this.keyFromPublic(_c),Mu=this.hashInt(ir.Rencoded(),mu.pubBytes(),yt),xu=this.g.mul(ir.S());return ir.R().add(mu.pub().mul(Mu)).eq(xu)},D6.prototype.hashInt=function(){for(var yt=this.hash(),ir=0;ir=48&&d0<=57?d0-48:d0>=65&&d0<=70?d0-55:d0>=97&&d0<=102?d0-87:void mu(!1,"Invalid character in "+s0)}function j0(s0,g0,d0){var c0=E0(s0,d0);return d0-1>=g0&&(c0|=E0(s0,d0-1)<<4),c0}function M0(s0,g0,d0,c0){for(var a0=0,S0=0,z0=Math.min(s0.length,d0),Q0=g0;Q0=49?p1-49+10:p1>=17?p1-17+10:p1,mu(p1>=0&&S00?s0:g0},xu.min=function(s0,g0){return s0.cmp(g0)<0?s0:g0},xu.prototype._init=function(s0,g0,d0){if(typeof s0=="number")return this._initNumber(s0,g0,d0);if(typeof s0=="object")return this._initArray(s0,g0,d0);g0==="hex"&&(g0=16),mu(g0===(0|g0)&&g0>=2&&g0<=36);var c0=0;(s0=s0.toString().replace(/\s+/g,""))[0]==="-"&&(c0++,this.negative=1),c0=0;c0-=3)S0=s0[c0]|s0[c0-1]<<8|s0[c0-2]<<16,this.words[a0]|=S0<>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);else if(d0==="le")for(c0=0,a0=0;c0>>26-z0&67108863,(z0+=24)>=26&&(z0-=26,a0++);return this._strip()},xu.prototype._parseHex=function(s0,g0,d0){this.length=Math.ceil((s0.length-g0)/6),this.words=new Array(this.length);for(var c0=0;c0=g0;c0-=2)a0=j0(s0,g0,c0)<=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;else for(c0=(s0.length-g0)%2==0?g0+1:g0;c0=18?(S0-=18,z0+=1,this.words[z0]|=a0>>>26):S0+=8;this._strip()},xu.prototype._parseBase=function(s0,g0,d0){this.words=[0],this.length=1;for(var c0=0,a0=1;a0<=67108863;a0*=g0)c0++;c0--,a0=a0/g0|0;for(var S0=s0.length-d0,z0=S0%c0,Q0=Math.min(S0,S0-z0)+d0,p1=0,T1=d0;T11&&this.words[this.length-1]===0;)this.length--;return this._normSign()},xu.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{xu.prototype[Symbol.for("nodejs.util.inspect.custom")]=q0}catch{xu.prototype.inspect=q0}else xu.prototype.inspect=q0;function q0(){return(this.red?""}var y1=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v1=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],F1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function ov(s0,g0,d0){d0.negative=g0.negative^s0.negative;var c0=s0.length+g0.length|0;d0.length=c0,c0=c0-1|0;var a0=0|s0.words[0],S0=0|g0.words[0],z0=a0*S0,Q0=67108863&z0,p1=z0/67108864|0;d0.words[0]=Q0;for(var T1=1;T1>>26,S1=67108863&p1,n1=Math.min(T1,g0.length-1),V1=Math.max(0,T1-s0.length+1);V1<=n1;V1++){var J1=T1-V1|0;U1+=(z0=(a0=0|s0.words[J1])*(S0=0|g0.words[V1])+S1)/67108864|0,S1=67108863&z0}d0.words[T1]=0|S1,p1=0|U1}return p1!==0?d0.words[T1]=0|p1:d0.length--,d0._strip()}xu.prototype.toString=function(s0,g0){var d0;if(g0=0|g0||1,(s0=s0||10)===16||s0==="hex"){d0="";for(var c0=0,a0=0,S0=0;S0>>24-c0&16777215,(c0+=2)>=26&&(c0-=26,S0--),d0=a0!==0||S0!==this.length-1?y1[6-Q0.length]+Q0+d0:Q0+d0}for(a0!==0&&(d0=a0.toString(16)+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}if(s0===(0|s0)&&s0>=2&&s0<=36){var p1=v1[s0],T1=F1[s0];d0="";var U1=this.clone();for(U1.negative=0;!U1.isZero();){var S1=U1.modrn(T1).toString(s0);d0=(U1=U1.idivn(T1)).isZero()?S1+d0:y1[p1-S1.length]+S1+d0}for(this.isZero()&&(d0="0"+d0);d0.length%g0!=0;)d0="0"+d0;return this.negative!==0&&(d0="-"+d0),d0}mu(!1,"Base should be between 2 and 36")},xu.prototype.toNumber=function(){var s0=this.words[0];return this.length===2?s0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?s0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-s0:s0},xu.prototype.toJSON=function(){return this.toString(16,2)},l0&&(xu.prototype.toBuffer=function(s0,g0){return this.toArrayLike(l0,s0,g0)}),xu.prototype.toArray=function(s0,g0){return this.toArrayLike(Array,s0,g0)},xu.prototype.toArrayLike=function(s0,g0,d0){this._strip();var c0=this.byteLength(),a0=d0||Math.max(1,c0);mu(c0<=a0,"byte array longer than desired length"),mu(a0>0,"Requested array length <= 0");var S0=function(z0,Q0){return z0.allocUnsafe?z0.allocUnsafe(Q0):new z0(Q0)}(s0,a0);return this["_toArrayLike"+(g0==="le"?"LE":"BE")](S0,c0),S0},xu.prototype._toArrayLikeLE=function(s0,g0){for(var d0=0,c0=0,a0=0,S0=0;a0>8&255),d0>16&255),S0===6?(d0>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0=0&&(s0[d0--]=z0>>8&255),d0>=0&&(s0[d0--]=z0>>16&255),S0===6?(d0>=0&&(s0[d0--]=z0>>24&255),c0=0,S0=0):(c0=z0>>>24,S0+=2)}if(d0>=0)for(s0[d0--]=c0;d0>=0;)s0[d0--]=0},Math.clz32?xu.prototype._countBits=function(s0){return 32-Math.clz32(s0)}:xu.prototype._countBits=function(s0){var g0=s0,d0=0;return g0>=4096&&(d0+=13,g0>>>=13),g0>=64&&(d0+=7,g0>>>=7),g0>=8&&(d0+=4,g0>>>=4),g0>=2&&(d0+=2,g0>>>=2),d0+g0},xu.prototype._zeroBits=function(s0){if(s0===0)return 26;var g0=s0,d0=0;return!(8191&g0)&&(d0+=13,g0>>>=13),!(127&g0)&&(d0+=7,g0>>>=7),!(15&g0)&&(d0+=4,g0>>>=4),!(3&g0)&&(d0+=2,g0>>>=2),!(1&g0)&&d0++,d0},xu.prototype.bitLength=function(){var s0=this.words[this.length-1],g0=this._countBits(s0);return 26*(this.length-1)+g0},xu.prototype.zeroBits=function(){if(this.isZero())return 0;for(var s0=0,g0=0;g0s0.length?this.clone().ior(s0):s0.clone().ior(this)},xu.prototype.uor=function(s0){return this.length>s0.length?this.clone().iuor(s0):s0.clone().iuor(this)},xu.prototype.iuand=function(s0){var g0;g0=this.length>s0.length?s0:this;for(var d0=0;d0s0.length?this.clone().iand(s0):s0.clone().iand(this)},xu.prototype.uand=function(s0){return this.length>s0.length?this.clone().iuand(s0):s0.clone().iuand(this)},xu.prototype.iuxor=function(s0){var g0,d0;this.length>s0.length?(g0=this,d0=s0):(g0=s0,d0=this);for(var c0=0;c0s0.length?this.clone().ixor(s0):s0.clone().ixor(this)},xu.prototype.uxor=function(s0){return this.length>s0.length?this.clone().iuxor(s0):s0.clone().iuxor(this)},xu.prototype.inotn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=0|Math.ceil(s0/26),d0=s0%26;this._expand(g0),d0>0&&g0--;for(var c0=0;c00&&(this.words[c0]=~this.words[c0]&67108863>>26-d0),this._strip()},xu.prototype.notn=function(s0){return this.clone().inotn(s0)},xu.prototype.setn=function(s0,g0){mu(typeof s0=="number"&&s0>=0);var d0=s0/26|0,c0=s0%26;return this._expand(d0+1),this.words[d0]=g0?this.words[d0]|1<s0.length?(d0=this,c0=s0):(d0=s0,c0=this);for(var a0=0,S0=0;S0>>26;for(;a0!==0&&S0>>26;if(this.length=d0.length,a0!==0)this.words[this.length]=a0,this.length++;else if(d0!==this)for(;S0s0.length?this.clone().iadd(s0):s0.clone().iadd(this)},xu.prototype.isub=function(s0){if(s0.negative!==0){s0.negative=0;var g0=this.iadd(s0);return s0.negative=1,g0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(s0),this.negative=1,this._normSign();var d0,c0,a0=this.cmp(s0);if(a0===0)return this.negative=0,this.length=1,this.words[0]=0,this;a0>0?(d0=this,c0=s0):(d0=s0,c0=this);for(var S0=0,z0=0;z0>26,this.words[z0]=67108863&g0;for(;S0!==0&&z0>26,this.words[z0]=67108863&g0;if(S0===0&&z0>>13,V1=0|z0[1],J1=8191&V1,wv=V1>>>13,Sv=0|z0[2],Hv=8191&Sv,ty=Sv>>>13,gy=0|z0[3],yv=8191&gy,Av=gy>>>13,Dv=0|z0[4],ry=8191&Dv,Jv=Dv>>>13,Fv=0|z0[5],iy=8191&Fv,cy=Fv>>>13,Uy=0|z0[6],r2=8191&Uy,f2=Uy>>>13,j2=0|z0[7],mw=8191&j2,p2=j2>>>13,Vw=0|z0[8],Ew=8191&Vw,q2=Vw>>>13,$3=0|z0[9],Rw=8191&$3,K2=$3>>>13,Xw=0|Q0[0],a3=8191&Xw,F2=Xw>>>13,Qw=0|Q0[1],vt=8191&Qw,wt=Qw>>>13,Ys=0|Q0[2],pu=8191&Ys,Ru=Ys>>>13,wu=0|Q0[3],t0=8191&wu,m0=wu>>>13,k0=0|Q0[4],_0=8191&k0,R0=k0>>>13,N0=0|Q0[5],l1=8191&N0,a1=N0>>>13,x1=0|Q0[6],K1=8191&x1,W1=x1>>>13,_g=0|Q0[7],uv=8191&_g,Tv=_g>>>13,Uv=0|Q0[8],Wv=8191&Uv,ny=Uv>>>13,Rv=0|Q0[9],Gv=8191&Rv,C0=Rv>>>13;d0.negative=s0.negative^g0.negative,d0.length=19;var J0=(T1+(c0=Math.imul(S1,a3))|0)+((8191&(a0=(a0=Math.imul(S1,F2))+Math.imul(n1,a3)|0))<<13)|0;T1=((S0=Math.imul(n1,F2))+(a0>>>13)|0)+(J0>>>26)|0,J0&=67108863,c0=Math.imul(J1,a3),a0=(a0=Math.imul(J1,F2))+Math.imul(wv,a3)|0,S0=Math.imul(wv,F2);var f0=(T1+(c0=c0+Math.imul(S1,vt)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,wt)|0)+Math.imul(n1,vt)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,wt)|0)+(a0>>>13)|0)+(f0>>>26)|0,f0&=67108863,c0=Math.imul(Hv,a3),a0=(a0=Math.imul(Hv,F2))+Math.imul(ty,a3)|0,S0=Math.imul(ty,F2),c0=c0+Math.imul(J1,vt)|0,a0=(a0=a0+Math.imul(J1,wt)|0)+Math.imul(wv,vt)|0,S0=S0+Math.imul(wv,wt)|0;var v0=(T1+(c0=c0+Math.imul(S1,pu)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Ru)|0)+Math.imul(n1,pu)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Ru)|0)+(a0>>>13)|0)+(v0>>>26)|0,v0&=67108863,c0=Math.imul(yv,a3),a0=(a0=Math.imul(yv,F2))+Math.imul(Av,a3)|0,S0=Math.imul(Av,F2),c0=c0+Math.imul(Hv,vt)|0,a0=(a0=a0+Math.imul(Hv,wt)|0)+Math.imul(ty,vt)|0,S0=S0+Math.imul(ty,wt)|0,c0=c0+Math.imul(J1,pu)|0,a0=(a0=a0+Math.imul(J1,Ru)|0)+Math.imul(wv,pu)|0,S0=S0+Math.imul(wv,Ru)|0;var h0=(T1+(c0=c0+Math.imul(S1,t0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,m0)|0)+Math.imul(n1,t0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,m0)|0)+(a0>>>13)|0)+(h0>>>26)|0,h0&=67108863,c0=Math.imul(ry,a3),a0=(a0=Math.imul(ry,F2))+Math.imul(Jv,a3)|0,S0=Math.imul(Jv,F2),c0=c0+Math.imul(yv,vt)|0,a0=(a0=a0+Math.imul(yv,wt)|0)+Math.imul(Av,vt)|0,S0=S0+Math.imul(Av,wt)|0,c0=c0+Math.imul(Hv,pu)|0,a0=(a0=a0+Math.imul(Hv,Ru)|0)+Math.imul(ty,pu)|0,S0=S0+Math.imul(ty,Ru)|0,c0=c0+Math.imul(J1,t0)|0,a0=(a0=a0+Math.imul(J1,m0)|0)+Math.imul(wv,t0)|0,S0=S0+Math.imul(wv,m0)|0;var u0=(T1+(c0=c0+Math.imul(S1,_0)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,R0)|0)+Math.imul(n1,_0)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,R0)|0)+(a0>>>13)|0)+(u0>>>26)|0,u0&=67108863,c0=Math.imul(iy,a3),a0=(a0=Math.imul(iy,F2))+Math.imul(cy,a3)|0,S0=Math.imul(cy,F2),c0=c0+Math.imul(ry,vt)|0,a0=(a0=a0+Math.imul(ry,wt)|0)+Math.imul(Jv,vt)|0,S0=S0+Math.imul(Jv,wt)|0,c0=c0+Math.imul(yv,pu)|0,a0=(a0=a0+Math.imul(yv,Ru)|0)+Math.imul(Av,pu)|0,S0=S0+Math.imul(Av,Ru)|0,c0=c0+Math.imul(Hv,t0)|0,a0=(a0=a0+Math.imul(Hv,m0)|0)+Math.imul(ty,t0)|0,S0=S0+Math.imul(ty,m0)|0,c0=c0+Math.imul(J1,_0)|0,a0=(a0=a0+Math.imul(J1,R0)|0)+Math.imul(wv,_0)|0,S0=S0+Math.imul(wv,R0)|0;var o0=(T1+(c0=c0+Math.imul(S1,l1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,a1)|0)+Math.imul(n1,l1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,a1)|0)+(a0>>>13)|0)+(o0>>>26)|0,o0&=67108863,c0=Math.imul(r2,a3),a0=(a0=Math.imul(r2,F2))+Math.imul(f2,a3)|0,S0=Math.imul(f2,F2),c0=c0+Math.imul(iy,vt)|0,a0=(a0=a0+Math.imul(iy,wt)|0)+Math.imul(cy,vt)|0,S0=S0+Math.imul(cy,wt)|0,c0=c0+Math.imul(ry,pu)|0,a0=(a0=a0+Math.imul(ry,Ru)|0)+Math.imul(Jv,pu)|0,S0=S0+Math.imul(Jv,Ru)|0,c0=c0+Math.imul(yv,t0)|0,a0=(a0=a0+Math.imul(yv,m0)|0)+Math.imul(Av,t0)|0,S0=S0+Math.imul(Av,m0)|0,c0=c0+Math.imul(Hv,_0)|0,a0=(a0=a0+Math.imul(Hv,R0)|0)+Math.imul(ty,_0)|0,S0=S0+Math.imul(ty,R0)|0,c0=c0+Math.imul(J1,l1)|0,a0=(a0=a0+Math.imul(J1,a1)|0)+Math.imul(wv,l1)|0,S0=S0+Math.imul(wv,a1)|0;var x0=(T1+(c0=c0+Math.imul(S1,K1)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,W1)|0)+Math.imul(n1,K1)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,W1)|0)+(a0>>>13)|0)+(x0>>>26)|0,x0&=67108863,c0=Math.imul(mw,a3),a0=(a0=Math.imul(mw,F2))+Math.imul(p2,a3)|0,S0=Math.imul(p2,F2),c0=c0+Math.imul(r2,vt)|0,a0=(a0=a0+Math.imul(r2,wt)|0)+Math.imul(f2,vt)|0,S0=S0+Math.imul(f2,wt)|0,c0=c0+Math.imul(iy,pu)|0,a0=(a0=a0+Math.imul(iy,Ru)|0)+Math.imul(cy,pu)|0,S0=S0+Math.imul(cy,Ru)|0,c0=c0+Math.imul(ry,t0)|0,a0=(a0=a0+Math.imul(ry,m0)|0)+Math.imul(Jv,t0)|0,S0=S0+Math.imul(Jv,m0)|0,c0=c0+Math.imul(yv,_0)|0,a0=(a0=a0+Math.imul(yv,R0)|0)+Math.imul(Av,_0)|0,S0=S0+Math.imul(Av,R0)|0,c0=c0+Math.imul(Hv,l1)|0,a0=(a0=a0+Math.imul(Hv,a1)|0)+Math.imul(ty,l1)|0,S0=S0+Math.imul(ty,a1)|0,c0=c0+Math.imul(J1,K1)|0,a0=(a0=a0+Math.imul(J1,W1)|0)+Math.imul(wv,K1)|0,S0=S0+Math.imul(wv,W1)|0;var U0=(T1+(c0=c0+Math.imul(S1,uv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,Tv)|0)+Math.imul(n1,uv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,Tv)|0)+(a0>>>13)|0)+(U0>>>26)|0,U0&=67108863,c0=Math.imul(Ew,a3),a0=(a0=Math.imul(Ew,F2))+Math.imul(q2,a3)|0,S0=Math.imul(q2,F2),c0=c0+Math.imul(mw,vt)|0,a0=(a0=a0+Math.imul(mw,wt)|0)+Math.imul(p2,vt)|0,S0=S0+Math.imul(p2,wt)|0,c0=c0+Math.imul(r2,pu)|0,a0=(a0=a0+Math.imul(r2,Ru)|0)+Math.imul(f2,pu)|0,S0=S0+Math.imul(f2,Ru)|0,c0=c0+Math.imul(iy,t0)|0,a0=(a0=a0+Math.imul(iy,m0)|0)+Math.imul(cy,t0)|0,S0=S0+Math.imul(cy,m0)|0,c0=c0+Math.imul(ry,_0)|0,a0=(a0=a0+Math.imul(ry,R0)|0)+Math.imul(Jv,_0)|0,S0=S0+Math.imul(Jv,R0)|0,c0=c0+Math.imul(yv,l1)|0,a0=(a0=a0+Math.imul(yv,a1)|0)+Math.imul(Av,l1)|0,S0=S0+Math.imul(Av,a1)|0,c0=c0+Math.imul(Hv,K1)|0,a0=(a0=a0+Math.imul(Hv,W1)|0)+Math.imul(ty,K1)|0,S0=S0+Math.imul(ty,W1)|0,c0=c0+Math.imul(J1,uv)|0,a0=(a0=a0+Math.imul(J1,Tv)|0)+Math.imul(wv,uv)|0,S0=S0+Math.imul(wv,Tv)|0;var e1=(T1+(c0=c0+Math.imul(S1,Wv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,ny)|0)+Math.imul(n1,Wv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,ny)|0)+(a0>>>13)|0)+(e1>>>26)|0,e1&=67108863,c0=Math.imul(Rw,a3),a0=(a0=Math.imul(Rw,F2))+Math.imul(K2,a3)|0,S0=Math.imul(K2,F2),c0=c0+Math.imul(Ew,vt)|0,a0=(a0=a0+Math.imul(Ew,wt)|0)+Math.imul(q2,vt)|0,S0=S0+Math.imul(q2,wt)|0,c0=c0+Math.imul(mw,pu)|0,a0=(a0=a0+Math.imul(mw,Ru)|0)+Math.imul(p2,pu)|0,S0=S0+Math.imul(p2,Ru)|0,c0=c0+Math.imul(r2,t0)|0,a0=(a0=a0+Math.imul(r2,m0)|0)+Math.imul(f2,t0)|0,S0=S0+Math.imul(f2,m0)|0,c0=c0+Math.imul(iy,_0)|0,a0=(a0=a0+Math.imul(iy,R0)|0)+Math.imul(cy,_0)|0,S0=S0+Math.imul(cy,R0)|0,c0=c0+Math.imul(ry,l1)|0,a0=(a0=a0+Math.imul(ry,a1)|0)+Math.imul(Jv,l1)|0,S0=S0+Math.imul(Jv,a1)|0,c0=c0+Math.imul(yv,K1)|0,a0=(a0=a0+Math.imul(yv,W1)|0)+Math.imul(Av,K1)|0,S0=S0+Math.imul(Av,W1)|0,c0=c0+Math.imul(Hv,uv)|0,a0=(a0=a0+Math.imul(Hv,Tv)|0)+Math.imul(ty,uv)|0,S0=S0+Math.imul(ty,Tv)|0,c0=c0+Math.imul(J1,Wv)|0,a0=(a0=a0+Math.imul(J1,ny)|0)+Math.imul(wv,Wv)|0,S0=S0+Math.imul(wv,ny)|0;var h1=(T1+(c0=c0+Math.imul(S1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(S1,C0)|0)+Math.imul(n1,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(n1,C0)|0)+(a0>>>13)|0)+(h1>>>26)|0,h1&=67108863,c0=Math.imul(Rw,vt),a0=(a0=Math.imul(Rw,wt))+Math.imul(K2,vt)|0,S0=Math.imul(K2,wt),c0=c0+Math.imul(Ew,pu)|0,a0=(a0=a0+Math.imul(Ew,Ru)|0)+Math.imul(q2,pu)|0,S0=S0+Math.imul(q2,Ru)|0,c0=c0+Math.imul(mw,t0)|0,a0=(a0=a0+Math.imul(mw,m0)|0)+Math.imul(p2,t0)|0,S0=S0+Math.imul(p2,m0)|0,c0=c0+Math.imul(r2,_0)|0,a0=(a0=a0+Math.imul(r2,R0)|0)+Math.imul(f2,_0)|0,S0=S0+Math.imul(f2,R0)|0,c0=c0+Math.imul(iy,l1)|0,a0=(a0=a0+Math.imul(iy,a1)|0)+Math.imul(cy,l1)|0,S0=S0+Math.imul(cy,a1)|0,c0=c0+Math.imul(ry,K1)|0,a0=(a0=a0+Math.imul(ry,W1)|0)+Math.imul(Jv,K1)|0,S0=S0+Math.imul(Jv,W1)|0,c0=c0+Math.imul(yv,uv)|0,a0=(a0=a0+Math.imul(yv,Tv)|0)+Math.imul(Av,uv)|0,S0=S0+Math.imul(Av,Tv)|0,c0=c0+Math.imul(Hv,Wv)|0,a0=(a0=a0+Math.imul(Hv,ny)|0)+Math.imul(ty,Wv)|0,S0=S0+Math.imul(ty,ny)|0;var k1=(T1+(c0=c0+Math.imul(J1,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(J1,C0)|0)+Math.imul(wv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(wv,C0)|0)+(a0>>>13)|0)+(k1>>>26)|0,k1&=67108863,c0=Math.imul(Rw,pu),a0=(a0=Math.imul(Rw,Ru))+Math.imul(K2,pu)|0,S0=Math.imul(K2,Ru),c0=c0+Math.imul(Ew,t0)|0,a0=(a0=a0+Math.imul(Ew,m0)|0)+Math.imul(q2,t0)|0,S0=S0+Math.imul(q2,m0)|0,c0=c0+Math.imul(mw,_0)|0,a0=(a0=a0+Math.imul(mw,R0)|0)+Math.imul(p2,_0)|0,S0=S0+Math.imul(p2,R0)|0,c0=c0+Math.imul(r2,l1)|0,a0=(a0=a0+Math.imul(r2,a1)|0)+Math.imul(f2,l1)|0,S0=S0+Math.imul(f2,a1)|0,c0=c0+Math.imul(iy,K1)|0,a0=(a0=a0+Math.imul(iy,W1)|0)+Math.imul(cy,K1)|0,S0=S0+Math.imul(cy,W1)|0,c0=c0+Math.imul(ry,uv)|0,a0=(a0=a0+Math.imul(ry,Tv)|0)+Math.imul(Jv,uv)|0,S0=S0+Math.imul(Jv,Tv)|0,c0=c0+Math.imul(yv,Wv)|0,a0=(a0=a0+Math.imul(yv,ny)|0)+Math.imul(Av,Wv)|0,S0=S0+Math.imul(Av,ny)|0;var q1=(T1+(c0=c0+Math.imul(Hv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Hv,C0)|0)+Math.imul(ty,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(ty,C0)|0)+(a0>>>13)|0)+(q1>>>26)|0,q1&=67108863,c0=Math.imul(Rw,t0),a0=(a0=Math.imul(Rw,m0))+Math.imul(K2,t0)|0,S0=Math.imul(K2,m0),c0=c0+Math.imul(Ew,_0)|0,a0=(a0=a0+Math.imul(Ew,R0)|0)+Math.imul(q2,_0)|0,S0=S0+Math.imul(q2,R0)|0,c0=c0+Math.imul(mw,l1)|0,a0=(a0=a0+Math.imul(mw,a1)|0)+Math.imul(p2,l1)|0,S0=S0+Math.imul(p2,a1)|0,c0=c0+Math.imul(r2,K1)|0,a0=(a0=a0+Math.imul(r2,W1)|0)+Math.imul(f2,K1)|0,S0=S0+Math.imul(f2,W1)|0,c0=c0+Math.imul(iy,uv)|0,a0=(a0=a0+Math.imul(iy,Tv)|0)+Math.imul(cy,uv)|0,S0=S0+Math.imul(cy,Tv)|0,c0=c0+Math.imul(ry,Wv)|0,a0=(a0=a0+Math.imul(ry,ny)|0)+Math.imul(Jv,Wv)|0,S0=S0+Math.imul(Jv,ny)|0;var L1=(T1+(c0=c0+Math.imul(yv,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(yv,C0)|0)+Math.imul(Av,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Av,C0)|0)+(a0>>>13)|0)+(L1>>>26)|0,L1&=67108863,c0=Math.imul(Rw,_0),a0=(a0=Math.imul(Rw,R0))+Math.imul(K2,_0)|0,S0=Math.imul(K2,R0),c0=c0+Math.imul(Ew,l1)|0,a0=(a0=a0+Math.imul(Ew,a1)|0)+Math.imul(q2,l1)|0,S0=S0+Math.imul(q2,a1)|0,c0=c0+Math.imul(mw,K1)|0,a0=(a0=a0+Math.imul(mw,W1)|0)+Math.imul(p2,K1)|0,S0=S0+Math.imul(p2,W1)|0,c0=c0+Math.imul(r2,uv)|0,a0=(a0=a0+Math.imul(r2,Tv)|0)+Math.imul(f2,uv)|0,S0=S0+Math.imul(f2,Tv)|0,c0=c0+Math.imul(iy,Wv)|0,a0=(a0=a0+Math.imul(iy,ny)|0)+Math.imul(cy,Wv)|0,S0=S0+Math.imul(cy,ny)|0;var A1=(T1+(c0=c0+Math.imul(ry,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(ry,C0)|0)+Math.imul(Jv,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(Jv,C0)|0)+(a0>>>13)|0)+(A1>>>26)|0,A1&=67108863,c0=Math.imul(Rw,l1),a0=(a0=Math.imul(Rw,a1))+Math.imul(K2,l1)|0,S0=Math.imul(K2,a1),c0=c0+Math.imul(Ew,K1)|0,a0=(a0=a0+Math.imul(Ew,W1)|0)+Math.imul(q2,K1)|0,S0=S0+Math.imul(q2,W1)|0,c0=c0+Math.imul(mw,uv)|0,a0=(a0=a0+Math.imul(mw,Tv)|0)+Math.imul(p2,uv)|0,S0=S0+Math.imul(p2,Tv)|0,c0=c0+Math.imul(r2,Wv)|0,a0=(a0=a0+Math.imul(r2,ny)|0)+Math.imul(f2,Wv)|0,S0=S0+Math.imul(f2,ny)|0;var M1=(T1+(c0=c0+Math.imul(iy,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(iy,C0)|0)+Math.imul(cy,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(cy,C0)|0)+(a0>>>13)|0)+(M1>>>26)|0,M1&=67108863,c0=Math.imul(Rw,K1),a0=(a0=Math.imul(Rw,W1))+Math.imul(K2,K1)|0,S0=Math.imul(K2,W1),c0=c0+Math.imul(Ew,uv)|0,a0=(a0=a0+Math.imul(Ew,Tv)|0)+Math.imul(q2,uv)|0,S0=S0+Math.imul(q2,Tv)|0,c0=c0+Math.imul(mw,Wv)|0,a0=(a0=a0+Math.imul(mw,ny)|0)+Math.imul(p2,Wv)|0,S0=S0+Math.imul(p2,ny)|0;var X1=(T1+(c0=c0+Math.imul(r2,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(r2,C0)|0)+Math.imul(f2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(f2,C0)|0)+(a0>>>13)|0)+(X1>>>26)|0,X1&=67108863,c0=Math.imul(Rw,uv),a0=(a0=Math.imul(Rw,Tv))+Math.imul(K2,uv)|0,S0=Math.imul(K2,Tv),c0=c0+Math.imul(Ew,Wv)|0,a0=(a0=a0+Math.imul(Ew,ny)|0)+Math.imul(q2,Wv)|0,S0=S0+Math.imul(q2,ny)|0;var dv=(T1+(c0=c0+Math.imul(mw,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(mw,C0)|0)+Math.imul(p2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(p2,C0)|0)+(a0>>>13)|0)+(dv>>>26)|0,dv&=67108863,c0=Math.imul(Rw,Wv),a0=(a0=Math.imul(Rw,ny))+Math.imul(K2,Wv)|0,S0=Math.imul(K2,ny);var I1=(T1+(c0=c0+Math.imul(Ew,Gv)|0)|0)+((8191&(a0=(a0=a0+Math.imul(Ew,C0)|0)+Math.imul(q2,Gv)|0))<<13)|0;T1=((S0=S0+Math.imul(q2,C0)|0)+(a0>>>13)|0)+(I1>>>26)|0,I1&=67108863;var iv=(T1+(c0=Math.imul(Rw,Gv))|0)+((8191&(a0=(a0=Math.imul(Rw,C0))+Math.imul(K2,Gv)|0))<<13)|0;return T1=((S0=Math.imul(K2,C0))+(a0>>>13)|0)+(iv>>>26)|0,iv&=67108863,p1[0]=J0,p1[1]=f0,p1[2]=v0,p1[3]=h0,p1[4]=u0,p1[5]=o0,p1[6]=x0,p1[7]=U0,p1[8]=e1,p1[9]=h1,p1[10]=k1,p1[11]=q1,p1[12]=L1,p1[13]=A1,p1[14]=M1,p1[15]=X1,p1[16]=dv,p1[17]=I1,p1[18]=iv,T1!==0&&(p1[19]=T1,d0.length++),d0};function gv(s0,g0,d0){d0.negative=g0.negative^s0.negative,d0.length=s0.length+g0.length;for(var c0=0,a0=0,S0=0;S0>>26)|0)>>>26,z0&=67108863}d0.words[S0]=Q0,c0=z0,z0=a0}return c0!==0?d0.words[S0]=c0:d0.length--,d0._strip()}function xv(s0,g0,d0){return gv(s0,g0,d0)}Math.imul||(bv=ov),xu.prototype.mulTo=function(s0,g0){var d0=this.length+s0.length;return this.length===10&&s0.length===10?bv(this,s0,g0):d0<63?ov(this,s0,g0):d0<1024?gv(this,s0,g0):xv(this,s0,g0)},xu.prototype.mul=function(s0){var g0=new xu(null);return g0.words=new Array(this.length+s0.length),this.mulTo(s0,g0)},xu.prototype.mulf=function(s0){var g0=new xu(null);return g0.words=new Array(this.length+s0.length),xv(this,s0,g0)},xu.prototype.imul=function(s0){return this.clone().mulTo(s0,this)},xu.prototype.imuln=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(typeof s0=="number"),mu(s0<67108864);for(var d0=0,c0=0;c0>=26,d0+=a0/67108864|0,d0+=S0>>>26,this.words[c0]=67108863&S0}return d0!==0&&(this.words[c0]=d0,this.length++),g0?this.ineg():this},xu.prototype.muln=function(s0){return this.clone().imuln(s0)},xu.prototype.sqr=function(){return this.mul(this)},xu.prototype.isqr=function(){return this.imul(this.clone())},xu.prototype.pow=function(s0){var g0=function(S0){for(var z0=new Array(S0.bitLength()),Q0=0;Q0>>T1&1}return z0}(s0);if(g0.length===0)return new xu(1);for(var d0=this,c0=0;c0=0);var g0,d0=s0%26,c0=(s0-d0)/26,a0=67108863>>>26-d0<<26-d0;if(d0!==0){var S0=0;for(g0=0;g0>>26-d0}S0&&(this.words[g0]=S0,this.length++)}if(c0!==0){for(g0=this.length-1;g0>=0;g0--)this.words[g0+c0]=this.words[g0];for(g0=0;g0=0),c0=g0?(g0-g0%26)/26:0;var a0=s0%26,S0=Math.min((s0-a0)/26,this.length),z0=67108863^67108863>>>a0<S0)for(this.length-=S0,p1=0;p1=0&&(T1!==0||p1>=c0);p1--){var U1=0|this.words[p1];this.words[p1]=T1<<26-a0|U1>>>a0,T1=U1&z0}return Q0&&T1!==0&&(Q0.words[Q0.length++]=T1),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},xu.prototype.ishrn=function(s0,g0,d0){return mu(this.negative===0),this.iushrn(s0,g0,d0)},xu.prototype.shln=function(s0){return this.clone().ishln(s0)},xu.prototype.ushln=function(s0){return this.clone().iushln(s0)},xu.prototype.shrn=function(s0){return this.clone().ishrn(s0)},xu.prototype.ushrn=function(s0){return this.clone().iushrn(s0)},xu.prototype.testn=function(s0){mu(typeof s0=="number"&&s0>=0);var g0=s0%26,d0=(s0-g0)/26,c0=1<=0);var g0=s0%26,d0=(s0-g0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=d0)return this;if(g0!==0&&d0++,this.length=Math.min(d0,this.length),g0!==0){var c0=67108863^67108863>>>g0<=67108864;g0++)this.words[g0]-=67108864,g0===this.length-1?this.words[g0+1]=1:this.words[g0+1]++;return this.length=Math.max(this.length,g0+1),this},xu.prototype.isubn=function(s0){if(mu(typeof s0=="number"),mu(s0<67108864),s0<0)return this.iaddn(-s0);if(this.negative!==0)return this.negative=0,this.iaddn(s0),this.negative=1,this;if(this.words[0]-=s0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var g0=0;g0>26)-(Q0/67108864|0),this.words[c0+d0]=67108863&a0}for(;c0>26,this.words[c0+d0]=67108863&a0;if(z0===0)return this._strip();for(mu(z0===-1),z0=0,c0=0;c0>26,this.words[c0]=67108863&a0;return this.negative=1,this._strip()},xu.prototype._wordDiv=function(s0,g0){var d0=(this.length,s0.length),c0=this.clone(),a0=s0,S0=0|a0.words[a0.length-1];(d0=26-this._countBits(S0))!=0&&(a0=a0.ushln(d0),c0.iushln(d0),S0=0|a0.words[a0.length-1]);var z0,Q0=c0.length-a0.length;if(g0!=="mod"){(z0=new xu(null)).length=Q0+1,z0.words=new Array(z0.length);for(var p1=0;p1=0;U1--){var S1=67108864*(0|c0.words[a0.length+U1])+(0|c0.words[a0.length+U1-1]);for(S1=Math.min(S1/S0|0,67108863),c0._ishlnsubmul(a0,S1,U1);c0.negative!==0;)S1--,c0.negative=0,c0._ishlnsubmul(a0,1,U1),c0.isZero()||(c0.negative^=1);z0&&(z0.words[U1]=S1)}return z0&&z0._strip(),c0._strip(),g0!=="div"&&d0!==0&&c0.iushrn(d0),{div:z0||null,mod:c0}},xu.prototype.divmod=function(s0,g0,d0){return mu(!s0.isZero()),this.isZero()?{div:new xu(0),mod:new xu(0)}:this.negative!==0&&s0.negative===0?(S0=this.neg().divmod(s0,g0),g0!=="mod"&&(c0=S0.div.neg()),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.iadd(s0)),{div:c0,mod:a0}):this.negative===0&&s0.negative!==0?(S0=this.divmod(s0.neg(),g0),g0!=="mod"&&(c0=S0.div.neg()),{div:c0,mod:S0.mod}):this.negative&s0.negative?(S0=this.neg().divmod(s0.neg(),g0),g0!=="div"&&(a0=S0.mod.neg(),d0&&a0.negative!==0&&a0.isub(s0)),{div:S0.div,mod:a0}):s0.length>this.length||this.cmp(s0)<0?{div:new xu(0),mod:this}:s0.length===1?g0==="div"?{div:this.divn(s0.words[0]),mod:null}:g0==="mod"?{div:null,mod:new xu(this.modrn(s0.words[0]))}:{div:this.divn(s0.words[0]),mod:new xu(this.modrn(s0.words[0]))}:this._wordDiv(s0,g0);var c0,a0,S0},xu.prototype.div=function(s0){return this.divmod(s0,"div",!1).div},xu.prototype.mod=function(s0){return this.divmod(s0,"mod",!1).mod},xu.prototype.umod=function(s0){return this.divmod(s0,"mod",!0).mod},xu.prototype.divRound=function(s0){var g0=this.divmod(s0);if(g0.mod.isZero())return g0.div;var d0=g0.div.negative!==0?g0.mod.isub(s0):g0.mod,c0=s0.ushrn(1),a0=s0.andln(1),S0=d0.cmp(c0);return S0<0||a0===1&&S0===0?g0.div:g0.div.negative!==0?g0.div.isubn(1):g0.div.iaddn(1)},xu.prototype.modrn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=(1<<26)%s0,c0=0,a0=this.length-1;a0>=0;a0--)c0=(d0*c0+(0|this.words[a0]))%s0;return g0?-c0:c0},xu.prototype.modn=function(s0){return this.modrn(s0)},xu.prototype.idivn=function(s0){var g0=s0<0;g0&&(s0=-s0),mu(s0<=67108863);for(var d0=0,c0=this.length-1;c0>=0;c0--){var a0=(0|this.words[c0])+67108864*d0;this.words[c0]=a0/s0|0,d0=a0%s0}return this._strip(),g0?this.ineg():this},xu.prototype.divn=function(s0){return this.clone().idivn(s0)},xu.prototype.egcd=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0=new xu(1),a0=new xu(0),S0=new xu(0),z0=new xu(1),Q0=0;g0.isEven()&&d0.isEven();)g0.iushrn(1),d0.iushrn(1),++Q0;for(var p1=d0.clone(),T1=g0.clone();!g0.isZero();){for(var U1=0,S1=1;!(g0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(g0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(p1),a0.isub(T1)),c0.iushrn(1),a0.iushrn(1);for(var n1=0,V1=1;!(d0.words[0]&V1)&&n1<26;++n1,V1<<=1);if(n1>0)for(d0.iushrn(n1);n1-- >0;)(S0.isOdd()||z0.isOdd())&&(S0.iadd(p1),z0.isub(T1)),S0.iushrn(1),z0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),c0.isub(S0),a0.isub(z0)):(d0.isub(g0),S0.isub(c0),z0.isub(a0))}return{a:S0,b:z0,gcd:d0.iushln(Q0)}},xu.prototype._invmp=function(s0){mu(s0.negative===0),mu(!s0.isZero());var g0=this,d0=s0.clone();g0=g0.negative!==0?g0.umod(s0):g0.clone();for(var c0,a0=new xu(1),S0=new xu(0),z0=d0.clone();g0.cmpn(1)>0&&d0.cmpn(1)>0;){for(var Q0=0,p1=1;!(g0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(g0.iushrn(Q0);Q0-- >0;)a0.isOdd()&&a0.iadd(z0),a0.iushrn(1);for(var T1=0,U1=1;!(d0.words[0]&U1)&&T1<26;++T1,U1<<=1);if(T1>0)for(d0.iushrn(T1);T1-- >0;)S0.isOdd()&&S0.iadd(z0),S0.iushrn(1);g0.cmp(d0)>=0?(g0.isub(d0),a0.isub(S0)):(d0.isub(g0),S0.isub(a0))}return(c0=g0.cmpn(1)===0?a0:S0).cmpn(0)<0&&c0.iadd(s0),c0},xu.prototype.gcd=function(s0){if(this.isZero())return s0.abs();if(s0.isZero())return this.abs();var g0=this.clone(),d0=s0.clone();g0.negative=0,d0.negative=0;for(var c0=0;g0.isEven()&&d0.isEven();c0++)g0.iushrn(1),d0.iushrn(1);for(;;){for(;g0.isEven();)g0.iushrn(1);for(;d0.isEven();)d0.iushrn(1);var a0=g0.cmp(d0);if(a0<0){var S0=g0;g0=d0,d0=S0}else if(a0===0||d0.cmpn(1)===0)break;g0.isub(d0)}return d0.iushln(c0)},xu.prototype.invm=function(s0){return this.egcd(s0).a.umod(s0)},xu.prototype.isEven=function(){return(1&this.words[0])==0},xu.prototype.isOdd=function(){return(1&this.words[0])==1},xu.prototype.andln=function(s0){return this.words[0]&s0},xu.prototype.bincn=function(s0){mu(typeof s0=="number");var g0=s0%26,d0=(s0-g0)/26,c0=1<>>26,z0&=67108863,this.words[S0]=z0}return a0!==0&&(this.words[S0]=a0,this.length++),this},xu.prototype.isZero=function(){return this.length===1&&this.words[0]===0},xu.prototype.cmpn=function(s0){var g0,d0=s0<0;if(this.negative!==0&&!d0)return-1;if(this.negative===0&&d0)return 1;if(this._strip(),this.length>1)g0=1;else{d0&&(s0=-s0),mu(s0<=67108863,"Number is too big");var c0=0|this.words[0];g0=c0===s0?0:c0s0.length)return 1;if(this.length=0;d0--){var c0=0|this.words[d0],a0=0|s0.words[d0];if(c0!==a0){c0a0&&(g0=1);break}}return g0},xu.prototype.gtn=function(s0){return this.cmpn(s0)===1},xu.prototype.gt=function(s0){return this.cmp(s0)===1},xu.prototype.gten=function(s0){return this.cmpn(s0)>=0},xu.prototype.gte=function(s0){return this.cmp(s0)>=0},xu.prototype.ltn=function(s0){return this.cmpn(s0)===-1},xu.prototype.lt=function(s0){return this.cmp(s0)===-1},xu.prototype.lten=function(s0){return this.cmpn(s0)<=0},xu.prototype.lte=function(s0){return this.cmp(s0)<=0},xu.prototype.eqn=function(s0){return this.cmpn(s0)===0},xu.prototype.eq=function(s0){return this.cmp(s0)===0},xu.red=function(s0){return new T0(s0)},xu.prototype.toRed=function(s0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),s0.convertTo(this)._forceRed(s0)},xu.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},xu.prototype._forceRed=function(s0){return this.red=s0,this},xu.prototype.forceRed=function(s0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(s0)},xu.prototype.redAdd=function(s0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,s0)},xu.prototype.redIAdd=function(s0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,s0)},xu.prototype.redSub=function(s0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,s0)},xu.prototype.redISub=function(s0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,s0)},xu.prototype.redShl=function(s0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,s0)},xu.prototype.redMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.mul(this,s0)},xu.prototype.redIMul=function(s0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,s0),this.red.imul(this,s0)},xu.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},xu.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},xu.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},xu.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},xu.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},xu.prototype.redPow=function(s0){return mu(this.red&&!s0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,s0)};var hy={k256:null,p224:null,p192:null,p25519:null};function oy(s0,g0){this.name=s0,this.p=new xu(g0,16),this.n=this.p.bitLength(),this.k=new xu(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function fy(){oy.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function Fy(){oy.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function qv(){oy.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Qv(){oy.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T0(s0){if(typeof s0=="string"){var g0=xu._prime(s0);this.m=g0.p,this.prime=g0}else mu(s0.gtn(1),"modulus must be greater than 1"),this.m=s0,this.prime=null}function X0(s0){T0.call(this,s0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new xu(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}oy.prototype._tmp=function(){var s0=new xu(null);return s0.words=new Array(Math.ceil(this.n/13)),s0},oy.prototype.ireduce=function(s0){var g0,d0=s0;do this.split(d0,this.tmp),g0=(d0=(d0=this.imulK(d0)).iadd(this.tmp)).bitLength();while(g0>this.n);var c0=g00?d0.isub(this.p):d0.strip!==void 0?d0.strip():d0._strip(),d0},oy.prototype.split=function(s0,g0){s0.iushrn(this.n,0,g0)},oy.prototype.imulK=function(s0){return s0.imul(this.k)},Mu(fy,oy),fy.prototype.split=function(s0,g0){for(var d0=4194303,c0=Math.min(s0.length,9),a0=0;a0>>22,S0=z0}S0>>>=22,s0.words[a0-10]=S0,S0===0&&s0.length>10?s0.length-=10:s0.length-=9},fy.prototype.imulK=function(s0){s0.words[s0.length]=0,s0.words[s0.length+1]=0,s0.length+=2;for(var g0=0,d0=0;d0>>=26,s0.words[d0]=a0,g0=c0}return g0!==0&&(s0.words[s0.length++]=g0),s0},xu._prime=function(s0){if(hy[s0])return hy[s0];var g0;if(s0==="k256")g0=new fy;else if(s0==="p224")g0=new Fy;else if(s0==="p192")g0=new qv;else{if(s0!=="p25519")throw new Error("Unknown prime "+s0);g0=new Qv}return hy[s0]=g0,g0},T0.prototype._verify1=function(s0){mu(s0.negative===0,"red works only with positives"),mu(s0.red,"red works only with red numbers")},T0.prototype._verify2=function(s0,g0){mu((s0.negative|g0.negative)==0,"red works only with positives"),mu(s0.red&&s0.red===g0.red,"red works only with red numbers")},T0.prototype.imod=function(s0){return this.prime?this.prime.ireduce(s0)._forceRed(this):(B0(s0,s0.umod(this.m)._forceRed(this)),s0)},T0.prototype.neg=function(s0){return s0.isZero()?s0.clone():this.m.sub(s0)._forceRed(this)},T0.prototype.add=function(s0,g0){this._verify2(s0,g0);var d0=s0.add(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0._forceRed(this)},T0.prototype.iadd=function(s0,g0){this._verify2(s0,g0);var d0=s0.iadd(g0);return d0.cmp(this.m)>=0&&d0.isub(this.m),d0},T0.prototype.sub=function(s0,g0){this._verify2(s0,g0);var d0=s0.sub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0._forceRed(this)},T0.prototype.isub=function(s0,g0){this._verify2(s0,g0);var d0=s0.isub(g0);return d0.cmpn(0)<0&&d0.iadd(this.m),d0},T0.prototype.shl=function(s0,g0){return this._verify1(s0),this.imod(s0.ushln(g0))},T0.prototype.imul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.imul(g0))},T0.prototype.mul=function(s0,g0){return this._verify2(s0,g0),this.imod(s0.mul(g0))},T0.prototype.isqr=function(s0){return this.imul(s0,s0.clone())},T0.prototype.sqr=function(s0){return this.mul(s0,s0)},T0.prototype.sqrt=function(s0){if(s0.isZero())return s0.clone();var g0=this.m.andln(3);if(mu(g0%2==1),g0===3){var d0=this.m.add(new xu(1)).iushrn(2);return this.pow(s0,d0)}for(var c0=this.m.subn(1),a0=0;!c0.isZero()&&c0.andln(1)===0;)a0++,c0.iushrn(1);mu(!c0.isZero());var S0=new xu(1).toRed(this),z0=S0.redNeg(),Q0=this.m.subn(1).iushrn(1),p1=this.m.bitLength();for(p1=new xu(2*p1*p1).toRed(this);this.pow(p1,Q0).cmp(z0)!==0;)p1.redIAdd(z0);for(var T1=this.pow(p1,c0),U1=this.pow(s0,c0.addn(1).iushrn(1)),S1=this.pow(s0,c0),n1=a0;S1.cmp(S0)!==0;){for(var V1=S1,J1=0;V1.cmp(S0)!==0;J1++)V1=V1.redSqr();mu(J1=0;c0--){for(var p1=g0.words[c0],T1=Q0-1;T1>=0;T1--){var U1=p1>>T1&1;a0!==d0[0]&&(a0=this.sqr(a0)),U1!==0||S0!==0?(S0<<=1,S0|=U1,(++z0==4||c0===0&&T1===0)&&(a0=this.mul(a0,d0[S0]),z0=0,S0=0)):z0=0}Q0=26}return a0},T0.prototype.convertTo=function(s0){var g0=s0.umod(this.m);return g0===s0?g0.clone():g0},T0.prototype.convertFrom=function(s0){var g0=s0.clone();return g0.red=null,g0},xu.mont=function(s0){return new X0(s0)},Mu(X0,T0),X0.prototype.convertTo=function(s0){return this.imod(s0.ushln(this.shift))},X0.prototype.convertFrom=function(s0){var g0=this.imod(s0.mul(this.rinv));return g0.red=null,g0},X0.prototype.imul=function(s0,g0){if(s0.isZero()||g0.isZero())return s0.words[0]=0,s0.length=1,s0;var d0=s0.imul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.mul=function(s0,g0){if(s0.isZero()||g0.isZero())return new xu(0)._forceRed(this);var d0=s0.mul(g0),c0=d0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a0=d0.isub(c0).iushrn(this.shift),S0=a0;return a0.cmp(this.m)>=0?S0=a0.isub(this.m):a0.cmpn(0)<0&&(S0=a0.iadd(this.m)),S0._forceRed(this)},X0.prototype.invm=function(s0){return this.imod(s0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})(zte);var F_,Hte=zte.exports,i5={},H4={},Kte={},GC={},K4=zw,nx=K4.Buffer,YC={};for(F_ in K4)K4.hasOwnProperty(F_)&&F_!=="SlowBuffer"&&F_!=="Buffer"&&(YC[F_]=K4[F_]);var MF=YC.Buffer={};for(F_ in nx)nx.hasOwnProperty(F_)&&F_!=="allocUnsafe"&&F_!=="allocUnsafeSlow"&&(MF[F_]=nx[F_]);if(YC.Buffer.prototype=nx.prototype,MF.from&&MF.from!==Uint8Array.from||(MF.from=function(yt,ir,_c){if(typeof yt=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof yt);if(yt&&yt.length===void 0)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof yt);return nx(yt,ir,_c)}),MF.alloc||(MF.alloc=function(yt,ir,_c){if(typeof yt!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof yt);if(yt<0||yt>=2*(1<<30))throw new RangeError('The value "'+yt+'" is invalid for option "size"');var mu=nx(yt);return ir&&ir.length!==0?typeof _c=="string"?mu.fill(ir,_c):mu.fill(ir):mu.fill(0),mu}),!YC.kStringMaxLength)try{YC.kStringMaxLength=Kv.binding("buffer").kStringMaxLength}catch{}YC.constants||(YC.constants={MAX_LENGTH:YC.kMaxLength},YC.kStringMaxLength&&(YC.constants.MAX_STRING_LENGTH=YC.kStringMaxLength));var V4=YC,IF={};const mH=Gw;function E8(yt){this._reporterState={obj:null,path:[],options:yt||{},errors:[]}}function o5(yt,ir){this.path=yt,this.rethrow(ir)}IF.Reporter=E8,E8.prototype.isError=function(yt){return yt instanceof o5},E8.prototype.save=function(){const yt=this._reporterState;return{obj:yt.obj,pathLen:yt.path.length}},E8.prototype.restore=function(yt){const ir=this._reporterState;ir.obj=yt.obj,ir.path=ir.path.slice(0,yt.pathLen)},E8.prototype.enterKey=function(yt){return this._reporterState.path.push(yt)},E8.prototype.exitKey=function(yt){const ir=this._reporterState;ir.path=ir.path.slice(0,yt-1)},E8.prototype.leaveKey=function(yt,ir,_c){const mu=this._reporterState;this.exitKey(yt),mu.obj!==null&&(mu.obj[ir]=_c)},E8.prototype.path=function(){return this._reporterState.path.join("/")},E8.prototype.enterObject=function(){const yt=this._reporterState,ir=yt.obj;return yt.obj={},ir},E8.prototype.leaveObject=function(yt){const ir=this._reporterState,_c=ir.obj;return ir.obj=yt,_c},E8.prototype.error=function(yt){let ir;const _c=this._reporterState,mu=yt instanceof o5;if(ir=mu?yt:new o5(_c.path.map(function(Mu){return"["+JSON.stringify(Mu)+"]"}).join(""),yt.message||yt,yt.stack),!_c.options.partial)throw ir;return mu||_c.errors.push(ir),ir},E8.prototype.wrapResult=function(yt){const ir=this._reporterState;return ir.options.partial?{result:this.isError(yt)?null:yt,errors:ir.errors}:yt},mH(o5,Error),o5.prototype.rethrow=function(yt){if(this.message=yt+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,o5),!this.stack)try{throw new Error(this.message)}catch(ir){this.stack=ir.stack}return this};var kN={};const oZ=Gw,aZ=IF.Reporter,p9=V4.Buffer;function m9(yt,ir){aZ.call(this,ir),p9.isBuffer(yt)?(this.base=yt,this.offset=0,this.length=yt.length):this.error("Input not Buffer")}function xM(yt,ir){if(Array.isArray(yt))this.length=0,this.value=yt.map(function(_c){return xM.isEncoderBuffer(_c)||(_c=new xM(_c,ir)),this.length+=_c.length,_c},this);else if(typeof yt=="number"){if(!(0<=yt&&yt<=255))return ir.error("non-byte EncoderBuffer value");this.value=yt,this.length=1}else if(typeof yt=="string")this.value=yt,this.length=p9.byteLength(yt);else{if(!p9.isBuffer(yt))return ir.error("Unsupported type: "+typeof yt);this.value=yt,this.length=yt.length}}oZ(m9,aZ),kN.DecoderBuffer=m9,m9.isDecoderBuffer=function(yt){return yt instanceof m9||typeof yt=="object"&&p9.isBuffer(yt.base)&&yt.constructor.name==="DecoderBuffer"&&typeof yt.offset=="number"&&typeof yt.length=="number"&&typeof yt.save=="function"&&typeof yt.restore=="function"&&typeof yt.isEmpty=="function"&&typeof yt.readUInt8=="function"&&typeof yt.skip=="function"&&typeof yt.raw=="function"},m9.prototype.save=function(){return{offset:this.offset,reporter:aZ.prototype.save.call(this)}},m9.prototype.restore=function(yt){const ir=new m9(this.base);return ir.offset=yt.offset,ir.length=this.offset,this.offset=yt.offset,aZ.prototype.restore.call(this,yt.reporter),ir},m9.prototype.isEmpty=function(){return this.offset===this.length},m9.prototype.readUInt8=function(yt){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(yt||"DecoderBuffer overrun")},m9.prototype.skip=function(yt,ir){if(!(this.offset+yt<=this.length))return this.error(ir||"DecoderBuffer overrun");const _c=new m9(this.base);return _c._reporterState=this._reporterState,_c.offset=this.offset,_c.length=this.offset+yt,this.offset+=yt,_c},m9.prototype.raw=function(yt){return this.base.slice(yt?yt.offset:this.offset,this.length)},kN.EncoderBuffer=xM,xM.isEncoderBuffer=function(yt){return yt instanceof xM||typeof yt=="object"&&yt.constructor.name==="EncoderBuffer"&&typeof yt.length=="number"&&typeof yt.join=="function"},xM.prototype.join=function(yt,ir){return yt||(yt=p9.alloc(this.length)),ir||(ir=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(_c){_c.join(yt,ir),ir+=_c.length}):(typeof this.value=="number"?yt[ir]=this.value:typeof this.value=="string"?yt.write(this.value,ir):p9.isBuffer(this.value)&&this.value.copy(yt,ir),ir+=this.length)),yt};const i1e=IF.Reporter,sZ=kN.EncoderBuffer,gH=kN.DecoderBuffer,A_=Zx,OF=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],o1e=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(OF);function YA(yt,ir,_c){const mu={};this._baseState=mu,mu.name=_c,mu.enc=yt,mu.parent=ir||null,mu.children=null,mu.tag=null,mu.args=null,mu.reverseArgs=null,mu.choice=null,mu.optional=!1,mu.any=!1,mu.obj=!1,mu.use=null,mu.useDecoder=null,mu.key=null,mu.default=null,mu.explicit=null,mu.implicit=null,mu.contains=null,mu.parent||(mu.children=[],this._wrap())}var Vte=YA;const iC=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];YA.prototype.clone=function(){const yt=this._baseState,ir={};iC.forEach(function(mu){ir[mu]=yt[mu]});const _c=new this.constructor(ir.parent);return _c._baseState=ir,_c},YA.prototype._wrap=function(){const yt=this._baseState;o1e.forEach(function(ir){this[ir]=function(){const _c=new this.constructor(this);return yt.children.push(_c),_c[ir].apply(_c,arguments)}},this)},YA.prototype._init=function(yt){const ir=this._baseState;A_(ir.parent===null),yt.call(this),ir.children=ir.children.filter(function(_c){return _c._baseState.parent===this},this),A_.equal(ir.children.length,1,"Root node can have only one child")},YA.prototype._useArgs=function(yt){const ir=this._baseState,_c=yt.filter(function(mu){return mu instanceof this.constructor},this);yt=yt.filter(function(mu){return!(mu instanceof this.constructor)},this),_c.length!==0&&(A_(ir.children===null),ir.children=_c,_c.forEach(function(mu){mu._baseState.parent=this},this)),yt.length!==0&&(A_(ir.args===null),ir.args=yt,ir.reverseArgs=yt.map(function(mu){if(typeof mu!="object"||mu.constructor!==Object)return mu;const Mu={};return Object.keys(mu).forEach(function(xu){xu==(0|xu)&&(xu|=0);const l0=mu[xu];Mu[l0]=xu}),Mu}))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach(function(yt){YA.prototype[yt]=function(){const ir=this._baseState;throw new Error(yt+" not implemented for encoding: "+ir.enc)}}),OF.forEach(function(yt){YA.prototype[yt]=function(){const ir=this._baseState,_c=Array.prototype.slice.call(arguments);return A_(ir.tag===null),ir.tag=yt,this._useArgs(_c),this}}),YA.prototype.use=function(yt){A_(yt);const ir=this._baseState;return A_(ir.use===null),ir.use=yt,this},YA.prototype.optional=function(){return this._baseState.optional=!0,this},YA.prototype.def=function(yt){const ir=this._baseState;return A_(ir.default===null),ir.default=yt,ir.optional=!0,this},YA.prototype.explicit=function(yt){const ir=this._baseState;return A_(ir.explicit===null&&ir.implicit===null),ir.explicit=yt,this},YA.prototype.implicit=function(yt){const ir=this._baseState;return A_(ir.explicit===null&&ir.implicit===null),ir.implicit=yt,this},YA.prototype.obj=function(){const yt=this._baseState,ir=Array.prototype.slice.call(arguments);return yt.obj=!0,ir.length!==0&&this._useArgs(ir),this},YA.prototype.key=function(yt){const ir=this._baseState;return A_(ir.key===null),ir.key=yt,this},YA.prototype.any=function(){return this._baseState.any=!0,this},YA.prototype.choice=function(yt){const ir=this._baseState;return A_(ir.choice===null),ir.choice=yt,this._useArgs(Object.keys(yt).map(function(_c){return yt[_c]})),this},YA.prototype.contains=function(yt){const ir=this._baseState;return A_(ir.use===null),ir.contains=yt,this},YA.prototype._decode=function(yt,ir){const _c=this._baseState;if(_c.parent===null)return yt.wrapResult(_c.children[0]._decode(yt,ir));let mu,Mu=_c.default,xu=!0,l0=null;if(_c.key!==null&&(l0=yt.enterKey(_c.key)),_c.optional){let E0=null;if(_c.explicit!==null?E0=_c.explicit:_c.implicit!==null?E0=_c.implicit:_c.tag!==null&&(E0=_c.tag),E0!==null||_c.any){if(xu=this._peekTag(yt,E0,_c.any),yt.isError(xu))return xu}else{const j0=yt.save();try{_c.choice===null?this._decodeGeneric(_c.tag,yt,ir):this._decodeChoice(yt,ir),xu=!0}catch{xu=!1}yt.restore(j0)}}if(_c.obj&&xu&&(mu=yt.enterObject()),xu){if(_c.explicit!==null){const j0=this._decodeTag(yt,_c.explicit);if(yt.isError(j0))return j0;yt=j0}const E0=yt.offset;if(_c.use===null&&_c.choice===null){let j0;_c.any&&(j0=yt.save());const M0=this._decodeTag(yt,_c.implicit!==null?_c.implicit:_c.tag,_c.any);if(yt.isError(M0))return M0;_c.any?Mu=yt.raw(j0):yt=M0}if(ir&&ir.track&&_c.tag!==null&&ir.track(yt.path(),E0,yt.length,"tagged"),ir&&ir.track&&_c.tag!==null&&ir.track(yt.path(),yt.offset,yt.length,"content"),_c.any||(Mu=_c.choice===null?this._decodeGeneric(_c.tag,yt,ir):this._decodeChoice(yt,ir)),yt.isError(Mu))return Mu;if(_c.any||_c.choice!==null||_c.children===null||_c.children.forEach(function(j0){j0._decode(yt,ir)}),_c.contains&&(_c.tag==="octstr"||_c.tag==="bitstr")){const j0=new gH(Mu);Mu=this._getUse(_c.contains,yt._reporterState.obj)._decode(j0,ir)}}return _c.obj&&xu&&(Mu=yt.leaveObject(mu)),_c.key===null||Mu===null&&xu!==!0?l0!==null&&yt.exitKey(l0):yt.leaveKey(l0,_c.key,Mu),Mu},YA.prototype._decodeGeneric=function(yt,ir,_c){const mu=this._baseState;return yt==="seq"||yt==="set"?null:yt==="seqof"||yt==="setof"?this._decodeList(ir,yt,mu.args[0],_c):/str$/.test(yt)?this._decodeStr(ir,yt,_c):yt==="objid"&&mu.args?this._decodeObjid(ir,mu.args[0],mu.args[1],_c):yt==="objid"?this._decodeObjid(ir,null,null,_c):yt==="gentime"||yt==="utctime"?this._decodeTime(ir,yt,_c):yt==="null_"?this._decodeNull(ir,_c):yt==="bool"?this._decodeBool(ir,_c):yt==="objDesc"?this._decodeStr(ir,yt,_c):yt==="int"||yt==="enum"?this._decodeInt(ir,mu.args&&mu.args[0],_c):mu.use!==null?this._getUse(mu.use,ir._reporterState.obj)._decode(ir,_c):ir.error("unknown tag: "+yt)},YA.prototype._getUse=function(yt,ir){const _c=this._baseState;return _c.useDecoder=this._use(yt,ir),A_(_c.useDecoder._baseState.parent===null),_c.useDecoder=_c.useDecoder._baseState.children[0],_c.implicit!==_c.useDecoder._baseState.implicit&&(_c.useDecoder=_c.useDecoder.clone(),_c.useDecoder._baseState.implicit=_c.implicit),_c.useDecoder},YA.prototype._decodeChoice=function(yt,ir){const _c=this._baseState;let mu=null,Mu=!1;return Object.keys(_c.choice).some(function(xu){const l0=yt.save(),E0=_c.choice[xu];try{const j0=E0._decode(yt,ir);if(yt.isError(j0))return!1;mu={type:xu,value:j0},Mu=!0}catch{return yt.restore(l0),!1}return!0},this),Mu?mu:yt.error("Choice not matched")},YA.prototype._createEncoderBuffer=function(yt){return new sZ(yt,this.reporter)},YA.prototype._encode=function(yt,ir,_c){const mu=this._baseState;if(mu.default!==null&&mu.default===yt)return;const Mu=this._encodeValue(yt,ir,_c);return Mu===void 0||this._skipDefault(Mu,ir,_c)?void 0:Mu},YA.prototype._encodeValue=function(yt,ir,_c){const mu=this._baseState;if(mu.parent===null)return mu.children[0]._encode(yt,ir||new i1e);let Mu=null;if(this.reporter=ir,mu.optional&&yt===void 0){if(mu.default===null)return;yt=mu.default}let xu=null,l0=!1;if(mu.any)Mu=this._createEncoderBuffer(yt);else if(mu.choice)Mu=this._encodeChoice(yt,ir);else if(mu.contains)xu=this._getUse(mu.contains,_c)._encode(yt,ir),l0=!0;else if(mu.children)xu=mu.children.map(function(E0){if(E0._baseState.tag==="null_")return E0._encode(null,ir,yt);if(E0._baseState.key===null)return ir.error("Child should have a key");const j0=ir.enterKey(E0._baseState.key);if(typeof yt!="object")return ir.error("Child expected, but input is not object");const M0=E0._encode(yt[E0._baseState.key],ir,yt);return ir.leaveKey(j0),M0},this).filter(function(E0){return E0}),xu=this._createEncoderBuffer(xu);else if(mu.tag==="seqof"||mu.tag==="setof"){if(!mu.args||mu.args.length!==1)return ir.error("Too many args for : "+mu.tag);if(!Array.isArray(yt))return ir.error("seqof/setof, but data is not Array");const E0=this.clone();E0._baseState.implicit=null,xu=this._createEncoderBuffer(yt.map(function(j0){const M0=this._baseState;return this._getUse(M0.args[0],yt)._encode(j0,ir)},E0))}else mu.use!==null?Mu=this._getUse(mu.use,_c)._encode(yt,ir):(xu=this._encodePrimitive(mu.tag,yt),l0=!0);if(!mu.any&&mu.choice===null){const E0=mu.implicit!==null?mu.implicit:mu.tag,j0=mu.implicit===null?"universal":"context";E0===null?mu.use===null&&ir.error("Tag could be omitted only for .use()"):mu.use===null&&(Mu=this._encodeComposite(E0,l0,j0,xu))}return mu.explicit!==null&&(Mu=this._encodeComposite(mu.explicit,!1,"context",Mu)),Mu},YA.prototype._encodeChoice=function(yt,ir){const _c=this._baseState,mu=_c.choice[yt.type];return mu||A_(!1,yt.type+" not found in "+JSON.stringify(Object.keys(_c.choice))),mu._encode(yt.value,ir)},YA.prototype._encodePrimitive=function(yt,ir){const _c=this._baseState;if(/str$/.test(yt))return this._encodeStr(ir,yt);if(yt==="objid"&&_c.args)return this._encodeObjid(ir,_c.reverseArgs[0],_c.args[1]);if(yt==="objid")return this._encodeObjid(ir,null,null);if(yt==="gentime"||yt==="utctime")return this._encodeTime(ir,yt);if(yt==="null_")return this._encodeNull();if(yt==="int"||yt==="enum")return this._encodeInt(ir,_c.args&&_c.reverseArgs[0]);if(yt==="bool")return this._encodeBool(ir);if(yt==="objDesc")return this._encodeStr(ir,yt);throw new Error("Unsupported tag: "+yt)},YA.prototype._isNumstr=function(yt){return/^[0-9 ]*$/.test(yt)},YA.prototype._isPrintstr=function(yt){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(yt)};var q4={};(function(yt){function ir(_c){const mu={};return Object.keys(_c).forEach(function(Mu){(0|Mu)==Mu&&(Mu|=0);const xu=_c[Mu];mu[xu]=Mu}),mu}yt.tagClass={0:"universal",1:"application",2:"context",3:"private"},yt.tagClassByName=ir(yt.tagClass),yt.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},yt.tagByName=ir(yt.tag)})(q4);const a1e=Gw,PE=V4.Buffer,lZ=Vte,qte=q4;function W4(yt){this.enc="der",this.name=yt.name,this.entity=yt,this.tree=new F6,this.tree._init(yt.body)}var Vle=W4;function F6(yt){lZ.call(this,"der",yt)}function pR(yt){return yt<10?"0"+yt:yt}W4.prototype.encode=function(yt,ir){return this.tree._encode(yt,ir).join()},a1e(F6,lZ),F6.prototype._encodeComposite=function(yt,ir,_c,mu){const Mu=function(E0,j0,M0,B0){let q0;if(E0==="seqof"?E0="seq":E0==="setof"&&(E0="set"),qte.tagByName.hasOwnProperty(E0))q0=qte.tagByName[E0];else{if(typeof E0!="number"||(0|E0)!==E0)return B0.error("Unknown tag: "+E0);q0=E0}return q0>=31?B0.error("Multi-octet tag encoding unsupported"):(j0||(q0|=32),q0|=qte.tagClassByName[M0||"universal"]<<6,q0)}(yt,ir,_c,this.reporter);if(mu.length<128){const E0=PE.alloc(2);return E0[0]=Mu,E0[1]=mu.length,this._createEncoderBuffer([E0,mu])}let xu=1;for(let E0=mu.length;E0>=256;E0>>=8)xu++;const l0=PE.alloc(2+xu);l0[0]=Mu,l0[1]=128|xu;for(let E0=1+xu,j0=mu.length;j0>0;E0--,j0>>=8)l0[E0]=255&j0;return this._createEncoderBuffer([l0,mu])},F6.prototype._encodeStr=function(yt,ir){if(ir==="bitstr")return this._createEncoderBuffer([0|yt.unused,yt.data]);if(ir==="bmpstr"){const _c=PE.alloc(2*yt.length);for(let mu=0;mu=40)return this.reporter.error("Second objid identifier OOB");yt.splice(0,2,40*yt[0]+yt[1])}let mu=0;for(let l0=0;l0=128;E0>>=7)mu++}const Mu=PE.alloc(mu);let xu=Mu.length-1;for(let l0=yt.length-1;l0>=0;l0--){let E0=yt[l0];for(Mu[xu--]=127&E0;(E0>>=7)>0;)Mu[xu--]=128|127&E0}return this._createEncoderBuffer(Mu)},F6.prototype._encodeTime=function(yt,ir){let _c;const mu=new Date(yt);return ir==="gentime"?_c=[pR(mu.getUTCFullYear()),pR(mu.getUTCMonth()+1),pR(mu.getUTCDate()),pR(mu.getUTCHours()),pR(mu.getUTCMinutes()),pR(mu.getUTCSeconds()),"Z"].join(""):ir==="utctime"?_c=[pR(mu.getUTCFullYear()%100),pR(mu.getUTCMonth()+1),pR(mu.getUTCDate()),pR(mu.getUTCHours()),pR(mu.getUTCMinutes()),pR(mu.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+ir+" time is not supported yet"),this._encodeStr(_c,"octstr")},F6.prototype._encodeNull=function(){return this._createEncoderBuffer("")},F6.prototype._encodeInt=function(yt,ir){if(typeof yt=="string"){if(!ir)return this.reporter.error("String int or enum given, but no values map");if(!ir.hasOwnProperty(yt))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(yt));yt=ir[yt]}if(typeof yt!="number"&&!PE.isBuffer(yt)){const Mu=yt.toArray();!yt.sign&&128&Mu[0]&&Mu.unshift(0),yt=PE.from(Mu)}if(PE.isBuffer(yt)){let Mu=yt.length;yt.length===0&&Mu++;const xu=PE.alloc(Mu);return yt.copy(xu),yt.length===0&&(xu[0]=0),this._createEncoderBuffer(xu)}if(yt<128)return this._createEncoderBuffer(yt);if(yt<256)return this._createEncoderBuffer([0,yt]);let _c=1;for(let Mu=yt;Mu>=256;Mu>>=8)_c++;const mu=new Array(_c);for(let Mu=mu.length-1;Mu>=0;Mu--)mu[Mu]=255&yt,yt>>=8;return 128&mu[0]&&mu.unshift(0),this._createEncoderBuffer(PE.from(mu))},F6.prototype._encodeBool=function(yt){return this._createEncoderBuffer(yt?255:0)},F6.prototype._use=function(yt,ir){return typeof yt=="function"&&(yt=yt(ir)),yt._getEncoder("der").tree},F6.prototype._skipDefault=function(yt,ir,_c){const mu=this._baseState;let Mu;if(mu.default===null)return!1;const xu=yt.join();if(mu.defaultBuffer===void 0&&(mu.defaultBuffer=this._encodeValue(mu.default,ir,_c).join()),xu.length!==mu.defaultBuffer.length)return!1;for(Mu=0;Mu>6],Mu=(32&_c)==0;if((31&_c)==31){let xu=_c;for(_c=0;(128&xu)==128;){if(xu=yt.readUInt8(ir),yt.isError(xu))return xu;_c<<=7,_c|=127&xu}}else _c&=31;return{cls:mu,primitive:Mu,tag:_c,tagStr:fZ.tag[_c]}}function Gte(yt,ir,_c){let mu=yt.readUInt8(_c);if(yt.isError(mu))return mu;if(!ir&&mu===128)return null;if(!(128&mu))return mu;const Mu=127μif(Mu>4)return yt.error("length octect is too long");mu=0;for(let xu=0;xuj0-y1-2)throw new Error("message too long");var v1=l5.alloc(j0-M0-y1-2),F1=j0-q0-1,ov=J4(q0),bv=tre(l5.concat([B0,v1,l5.alloc(1,1),E0],F1),hce(ov,F1)),gv=tre(ov,hce(bv,q0));return new $Z(l5.concat([l5.alloc(1),gv,bv],j0))}(xu,ir);else if(mu===1)Mu=function(l0,E0,j0){var M0,B0=E0.length,q0=l0.modulus.byteLength();if(B0>q0-11)throw new Error("message too long");return M0=j0?l5.alloc(q0-B0-3,255):function(y1){for(var v1,F1=l5.allocUnsafe(y1),ov=0,bv=J4(2*y1),gv=0;ov=0)throw new Error("data too long for modulus")}return _c?pce(Mu,xu):k1e(Mu,xu)},C1e=g9,nre=wZ,ire=Qte,EZ=US,T1e=KY,R1e=d4,c5=ere,X4=Sy().Buffer,M1e=function(yt,ir,_c){var mu;mu=yt.padding?yt.padding:_c?1:4;var Mu,xu=C1e(yt),l0=xu.modulus.byteLength();if(ir.length>l0||new EZ(ir).cmp(xu.modulus)>=0)throw new Error("decryption error");Mu=_c?c5(new EZ(ir),xu):T1e(ir,xu);var E0=X4.alloc(l0-Mu.length);if(Mu=X4.concat([E0,Mu],l0),mu===4)return function(j0,M0){var B0=j0.modulus.byteLength(),q0=R1e("sha1").update(X4.alloc(0)).digest(),y1=q0.length;if(M0[0]!==0)throw new Error("decryption error");var v1=M0.slice(1,y1+1),F1=M0.slice(y1+1),ov=ire(v1,nre(F1,y1)),bv=ire(F1,nre(ov,B0-y1-1));if(function(xv,hy){xv=X4.from(xv),hy=X4.from(hy);var oy=0,fy=xv.length;xv.length!==hy.length&&(oy++,fy=Math.min(xv.length,hy.length));for(var Fy=-1;++Fy=M0.length){v1++;break}var F1=M0.slice(2,y1-1);if((q0.toString("hex")!=="0002"&&!B0||q0.toString("hex")!=="0001"&&B0)&&v1++,F1.length<8&&v1++,v1)throw new Error("decryption error");return M0.slice(y1)}(0,Mu,_c);if(mu===3)return Mu;throw new Error("unknown padding")};(function(yt){yt.publicEncrypt=rre,yt.privateDecrypt=M1e,yt.privateEncrypt=function(ir,_c){return yt.publicEncrypt(ir,_c,!0)},yt.publicDecrypt=function(ir,_c){return yt.privateDecrypt(ir,_c,!0)}})(Xte);var yH={};function ore(){throw new Error(`secure random number generation not supported by this browser +use chrome, FireFox or Internet Explorer 11`)}var are,mce=Sy(),gce=mce.Buffer,vce=mce.kMaxLength,PF=c.crypto||c.msCrypto,yce=Math.pow(2,32)-1;function bH(yt,ir){if(typeof yt!="number"||yt!=yt)throw new TypeError("offset must be a number");if(yt>yce||yt<0)throw new TypeError("offset must be a uint32");if(yt>vce||yt>ir)throw new RangeError("offset out of range")}function sre(yt,ir,_c){if(typeof yt!="number"||yt!=yt)throw new TypeError("size must be a number");if(yt>yce||yt<0)throw new TypeError("size must be a uint32");if(yt+ir>_c||yt>vce)throw new RangeError("buffer too small")}function lre(yt,ir,_c,mu){var Mu=yt.buffer,xu=new Uint8Array(Mu,ir,_c);return PF.getRandomValues(xu),mu?void $2(function(){mu(null,yt)}):yt}function Q4(){if(are)return A2;are=1,A2.randomBytes=A2.rng=A2.pseudoRandomBytes=A2.prng=i$,A2.createHash=A2.Hash=d4,A2.createHmac=A2.Hmac=SY;var yt=m4,ir=Object.keys(yt),_c=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(ir);A2.getHashes=function(){return _c};var mu=g4;A2.pbkdf2=mu.pbkdf2,A2.pbkdf2Sync=mu.pbkdf2Sync;var Mu=cR;A2.Cipher=Mu.Cipher,A2.createCipher=Mu.createCipher,A2.Cipheriv=Mu.Cipheriv,A2.createCipheriv=Mu.createCipheriv,A2.Decipher=Mu.Decipher,A2.createDecipher=Mu.createDecipher,A2.Decipheriv=Mu.Decipheriv,A2.createDecipheriv=Mu.createDecipheriv,A2.getCiphers=Mu.getCiphers,A2.listCiphers=Mu.listCiphers;var xu=function(){if(kte)return Qx;kte=1;var M0=j6(),B0=cle,q0=function(){if(HY)return Jz;HY=1;var v1=US,F1=new(xte()),ov=new v1(24),bv=new v1(11),gv=new v1(10),xv=new v1(3),hy=new v1(7),oy=j6(),fy=i$;function Fy(s0,g0){return g0=g0||"utf8",vw(s0)||(s0=new F0(s0,g0)),this._pub=new v1(s0),this}function qv(s0,g0){return g0=g0||"utf8",vw(s0)||(s0=new F0(s0,g0)),this._priv=new v1(s0),this}Jz=T0;var Qv={};function T0(s0,g0,d0){this.setGenerator(g0),this.__prime=new v1(s0),this._prime=v1.mont(this.__prime),this._primeLen=s0.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,d0?(this.setPublicKey=Fy,this.setPrivateKey=qv):this._primeCode=8}function X0(s0,g0){var d0=new F0(s0.toArray());return g0?d0.toString(g0):d0}return Object.defineProperty(T0.prototype,"verifyError",{enumerable:!0,get:function(){return typeof this._primeCode!="number"&&(this._primeCode=function(s0,g0){var d0=g0.toString("hex"),c0=[d0,s0.toString(16)].join("_");if(c0 in Qv)return Qv[c0];var a0,S0=0;if(s0.isEven()||!oy.simpleSieve||!oy.fermatTest(s0)||!F1.test(s0))return S0+=1,S0+=d0==="02"||d0==="05"?8:4,Qv[c0]=S0,S0;switch(F1.test(s0.shrn(1))||(S0+=2),d0){case"02":s0.mod(ov).cmp(bv)&&(S0+=8);break;case"05":(a0=s0.mod(gv)).cmp(xv)&&a0.cmp(hy)&&(S0+=8);break;default:S0+=4}return Qv[c0]=S0,S0}(this.__prime,this.__gen)),this._primeCode}}),T0.prototype.generateKeys=function(){return this._priv||(this._priv=new v1(fy(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},T0.prototype.computeSecret=function(s0){var g0=new F0((s0=(s0=new v1(s0)).toRed(this._prime)).redPow(this._priv).fromRed().toArray()),d0=this.getPrime();if(g0.length0&&z0.ishrn(Q0),z0}function d0(a0,S0,z0){var Q0,p1;do{for(Q0=oy.alloc(0);8*Q0.length=s0)throw new Error("invalid sig")}return Zte=function(X0,s0,g0,d0,c0){var a0=qv(g0);if(a0.type==="ec"){if(d0!=="ecdsa"&&d0!=="ecdsa/rsa")throw new Error("wrong public key type");return function(S1,n1,V1){var J1=Qv[V1.data.algorithm.curve.join(".")];if(!J1)throw new Error("unknown curve "+V1.data.algorithm.curve.join("."));var wv=new Fy(J1),Sv=V1.data.subjectPrivateKey.data;return wv.verify(n1,S1,Sv)}(X0,s0,a0)}if(a0.type==="dsa"){if(d0!=="dsa")throw new Error("wrong public key type");return function(S1,n1,V1){var J1=V1.data.p,wv=V1.data.q,Sv=V1.data.g,Hv=V1.data.pub_key,ty=qv.signature.decode(S1,"der"),gy=ty.s,yv=ty.r;T0(gy,wv),T0(yv,wv);var Av=fy.mont(J1),Dv=gy.invm(wv);return Sv.toRed(Av).redPow(new fy(n1).mul(Dv).mod(wv)).fromRed().mul(Hv.toRed(Av).redPow(yv.mul(Dv).mod(wv)).fromRed()).mod(J1).mod(wv).cmp(yv)===0}(X0,s0,a0)}if(d0!=="rsa"&&d0!=="ecdsa/rsa")throw new Error("wrong public key type");s0=oy.concat([c0,s0]);for(var S0=a0.modulus.byteLength(),z0=[1],Q0=0;s0.length+z0.length+2{switch(yt){case"sha256":case"sha3-256":case"blake2s256":return 32;case"sha512":case"sha3-512":case"blake2b512":return 64;case"sha224":case"sha3-224":return 28;case"sha384":case"sha3-384":return 48;case"sha1":return 20;case"md5":return 16;default:{let ir=cre[yt];return ir===void 0&&(ir=bce(yt).digest().length,cre[yt]=ir),ir}}},fre=(yt,ir,_c,mu)=>{const Mu=yB.isBuffer(_c)?_c:yB.from(_c),xu=mu&&mu.length?yB.from(mu):yB.alloc(ir,0);return AZ(yt,xu).update(Mu).digest()},dre=(yt,ir,_c,mu,Mu)=>{const xu=yB.isBuffer(Mu)?Mu:yB.from(Mu||""),l0=xu.length,E0=Math.ceil(mu/ir);if(E0>255)throw new Error(`OKM length ${mu} is too long for ${yt} hash`);const j0=yB.alloc(ir*E0+l0+1);for(let M0=1,B0=0,q0=0;M0<=E0;++M0)xu.copy(j0,q0),j0[q0+l0]=M0,AZ(yt,_c).update(j0.slice(B0,q0+l0+1)).digest().copy(j0,q0),B0=q0,q0+=ir;return j0.slice(0,mu)};function tq(yt,ir,{salt:_c="",info:mu="",hash:Mu="SHA-256"}={}){Mu=Mu.toLowerCase().replace("-","");const xu=ure(Mu),l0=fre(Mu,xu,yt,_c);return dre(Mu,xu,l0,ir,mu)}Object.defineProperties(tq,{hash_length:{configurable:!1,enumerable:!1,writable:!1,value:ure},extract:{configurable:!1,enumerable:!1,writable:!1,value:fre},expand:{configurable:!1,enumerable:!1,writable:!1,value:dre}});var bB=tq;const wH="Impossible case. Please create issue.",hre="The tweak was out of range or the resulted private key is invalid",pre="The tweak was out of range or equal to zero",wB="Public Key could not be parsed",rq="Public Key serialization error",$H="Signature could not be parsed";function vR(yt,ir){if(!yt)throw new Error(ir)}function FE(yt,ir,_c){if(vR(ir instanceof Uint8Array,`Expected ${yt} to be an Uint8Array`),_c!==void 0)if(Array.isArray(_c)){const mu=`Expected ${yt} to be an Uint8Array with length [${_c.join(", ")}]`;vR(_c.includes(ir.length),mu)}else{const mu=`Expected ${yt} to be an Uint8Array with length ${_c}`;vR(ir.length===_c,mu)}}function TM(yt){vR(jF(yt)==="Boolean","Expected compressed to be a Boolean")}function RM(yt=_c=>new Uint8Array(_c),ir){return typeof yt=="function"&&(yt=yt(ir)),FE("output",yt,ir),yt}function jF(yt){return Object.prototype.toString.call(yt).slice(8,-1)}var wce={},yR={},$B={exports:{}};(function(yt){(function(ir,_c){function mu(T0,X0){if(!T0)throw new Error(X0||"Assertion failed")}function Mu(T0,X0){T0.super_=X0;var s0=function(){};s0.prototype=X0.prototype,T0.prototype=new s0,T0.prototype.constructor=T0}function xu(T0,X0,s0){if(xu.isBN(T0))return T0;this.negative=0,this.words=null,this.length=0,this.red=null,T0!==null&&(X0!=="le"&&X0!=="be"||(s0=X0,X0=10),this._init(T0||0,X0||10,s0||"be"))}var l0;typeof ir=="object"?ir.exports=xu:_c.BN=xu,xu.BN=xu,xu.wordSize=26;try{l0=typeof window<"u"&&window.Buffer!==void 0?window.Buffer:zw.Buffer}catch{}function E0(T0,X0){var s0=T0.charCodeAt(X0);return s0>=65&&s0<=70?s0-55:s0>=97&&s0<=102?s0-87:s0-48&15}function j0(T0,X0,s0){var g0=E0(T0,s0);return s0-1>=X0&&(g0|=E0(T0,s0-1)<<4),g0}function M0(T0,X0,s0,g0){for(var d0=0,c0=Math.min(T0.length,s0),a0=X0;a0=49?S0-49+10:S0>=17?S0-17+10:S0}return d0}xu.isBN=function(T0){return T0 instanceof xu||T0!==null&&typeof T0=="object"&&T0.constructor.wordSize===xu.wordSize&&Array.isArray(T0.words)},xu.max=function(T0,X0){return T0.cmp(X0)>0?T0:X0},xu.min=function(T0,X0){return T0.cmp(X0)<0?T0:X0},xu.prototype._init=function(T0,X0,s0){if(typeof T0=="number")return this._initNumber(T0,X0,s0);if(typeof T0=="object")return this._initArray(T0,X0,s0);X0==="hex"&&(X0=16),mu(X0===(0|X0)&&X0>=2&&X0<=36);var g0=0;(T0=T0.toString().replace(/\s+/g,""))[0]==="-"&&(g0++,this.negative=1),g0=0;g0-=3)c0=T0[g0]|T0[g0-1]<<8|T0[g0-2]<<16,this.words[d0]|=c0<>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);else if(s0==="le")for(g0=0,d0=0;g0>>26-a0&67108863,(a0+=24)>=26&&(a0-=26,d0++);return this.strip()},xu.prototype._parseHex=function(T0,X0,s0){this.length=Math.ceil((T0.length-X0)/6),this.words=new Array(this.length);for(var g0=0;g0=X0;g0-=2)d0=j0(T0,X0,g0)<=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;else for(g0=(T0.length-X0)%2==0?X0+1:X0;g0=18?(c0-=18,a0+=1,this.words[a0]|=d0>>>26):c0+=8;this.strip()},xu.prototype._parseBase=function(T0,X0,s0){this.words=[0],this.length=1;for(var g0=0,d0=1;d0<=67108863;d0*=X0)g0++;g0--,d0=d0/X0|0;for(var c0=T0.length-s0,a0=c0%g0,S0=Math.min(c0,c0-a0)+s0,z0=0,Q0=s0;Q01&&this.words[this.length-1]===0;)this.length--;return this._normSign()},xu.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},xu.prototype.inspect=function(){return(this.red?""};var B0=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],q0=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],y1=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function v1(T0,X0,s0){s0.negative=X0.negative^T0.negative;var g0=T0.length+X0.length|0;s0.length=g0,g0=g0-1|0;var d0=0|T0.words[0],c0=0|X0.words[0],a0=d0*c0,S0=67108863&a0,z0=a0/67108864|0;s0.words[0]=S0;for(var Q0=1;Q0>>26,T1=67108863&z0,U1=Math.min(Q0,X0.length-1),S1=Math.max(0,Q0-T0.length+1);S1<=U1;S1++){var n1=Q0-S1|0;p1+=(a0=(d0=0|T0.words[n1])*(c0=0|X0.words[S1])+T1)/67108864|0,T1=67108863&a0}s0.words[Q0]=0|T1,z0=0|p1}return z0!==0?s0.words[Q0]=0|z0:s0.length--,s0.strip()}xu.prototype.toString=function(T0,X0){var s0;if(X0=0|X0||1,(T0=T0||10)===16||T0==="hex"){s0="";for(var g0=0,d0=0,c0=0;c0>>24-g0&16777215)!=0||c0!==this.length-1?B0[6-S0.length]+S0+s0:S0+s0,(g0+=2)>=26&&(g0-=26,c0--)}for(d0!==0&&(s0=d0.toString(16)+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}if(T0===(0|T0)&&T0>=2&&T0<=36){var z0=q0[T0],Q0=y1[T0];s0="";var p1=this.clone();for(p1.negative=0;!p1.isZero();){var T1=p1.modn(Q0).toString(T0);s0=(p1=p1.idivn(Q0)).isZero()?T1+s0:B0[z0-T1.length]+T1+s0}for(this.isZero()&&(s0="0"+s0);s0.length%X0!=0;)s0="0"+s0;return this.negative!==0&&(s0="-"+s0),s0}mu(!1,"Base should be between 2 and 36")},xu.prototype.toNumber=function(){var T0=this.words[0];return this.length===2?T0+=67108864*this.words[1]:this.length===3&&this.words[2]===1?T0+=4503599627370496+67108864*this.words[1]:this.length>2&&mu(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-T0:T0},xu.prototype.toJSON=function(){return this.toString(16)},xu.prototype.toBuffer=function(T0,X0){return mu(l0!==void 0),this.toArrayLike(l0,T0,X0)},xu.prototype.toArray=function(T0,X0){return this.toArrayLike(Array,T0,X0)},xu.prototype.toArrayLike=function(T0,X0,s0){var g0=this.byteLength(),d0=s0||Math.max(1,g0);mu(g0<=d0,"byte array longer than desired length"),mu(d0>0,"Requested array length <= 0"),this.strip();var c0,a0,S0=X0==="le",z0=new T0(d0),Q0=this.clone();if(S0){for(a0=0;!Q0.isZero();a0++)c0=Q0.andln(255),Q0.iushrn(8),z0[a0]=c0;for(;a0=4096&&(s0+=13,X0>>>=13),X0>=64&&(s0+=7,X0>>>=7),X0>=8&&(s0+=4,X0>>>=4),X0>=2&&(s0+=2,X0>>>=2),s0+X0},xu.prototype._zeroBits=function(T0){if(T0===0)return 26;var X0=T0,s0=0;return!(8191&X0)&&(s0+=13,X0>>>=13),!(127&X0)&&(s0+=7,X0>>>=7),!(15&X0)&&(s0+=4,X0>>>=4),!(3&X0)&&(s0+=2,X0>>>=2),!(1&X0)&&s0++,s0},xu.prototype.bitLength=function(){var T0=this.words[this.length-1],X0=this._countBits(T0);return 26*(this.length-1)+X0},xu.prototype.zeroBits=function(){if(this.isZero())return 0;for(var T0=0,X0=0;X0T0.length?this.clone().ior(T0):T0.clone().ior(this)},xu.prototype.uor=function(T0){return this.length>T0.length?this.clone().iuor(T0):T0.clone().iuor(this)},xu.prototype.iuand=function(T0){var X0;X0=this.length>T0.length?T0:this;for(var s0=0;s0T0.length?this.clone().iand(T0):T0.clone().iand(this)},xu.prototype.uand=function(T0){return this.length>T0.length?this.clone().iuand(T0):T0.clone().iuand(this)},xu.prototype.iuxor=function(T0){var X0,s0;this.length>T0.length?(X0=this,s0=T0):(X0=T0,s0=this);for(var g0=0;g0T0.length?this.clone().ixor(T0):T0.clone().ixor(this)},xu.prototype.uxor=function(T0){return this.length>T0.length?this.clone().iuxor(T0):T0.clone().iuxor(this)},xu.prototype.inotn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=0|Math.ceil(T0/26),s0=T0%26;this._expand(X0),s0>0&&X0--;for(var g0=0;g00&&(this.words[g0]=~this.words[g0]&67108863>>26-s0),this.strip()},xu.prototype.notn=function(T0){return this.clone().inotn(T0)},xu.prototype.setn=function(T0,X0){mu(typeof T0=="number"&&T0>=0);var s0=T0/26|0,g0=T0%26;return this._expand(s0+1),this.words[s0]=X0?this.words[s0]|1<T0.length?(s0=this,g0=T0):(s0=T0,g0=this);for(var d0=0,c0=0;c0>>26;for(;d0!==0&&c0>>26;if(this.length=s0.length,d0!==0)this.words[this.length]=d0,this.length++;else if(s0!==this)for(;c0T0.length?this.clone().iadd(T0):T0.clone().iadd(this)},xu.prototype.isub=function(T0){if(T0.negative!==0){T0.negative=0;var X0=this.iadd(T0);return T0.negative=1,X0._normSign()}if(this.negative!==0)return this.negative=0,this.iadd(T0),this.negative=1,this._normSign();var s0,g0,d0=this.cmp(T0);if(d0===0)return this.negative=0,this.length=1,this.words[0]=0,this;d0>0?(s0=this,g0=T0):(s0=T0,g0=this);for(var c0=0,a0=0;a0>26,this.words[a0]=67108863&X0;for(;c0!==0&&a0>26,this.words[a0]=67108863&X0;if(c0===0&&a0>>13,S1=0|a0[1],n1=8191&S1,V1=S1>>>13,J1=0|a0[2],wv=8191&J1,Sv=J1>>>13,Hv=0|a0[3],ty=8191&Hv,gy=Hv>>>13,yv=0|a0[4],Av=8191&yv,Dv=yv>>>13,ry=0|a0[5],Jv=8191&ry,Fv=ry>>>13,iy=0|a0[6],cy=8191&iy,Uy=iy>>>13,r2=0|a0[7],f2=8191&r2,j2=r2>>>13,mw=0|a0[8],p2=8191&mw,Vw=mw>>>13,Ew=0|a0[9],q2=8191&Ew,$3=Ew>>>13,Rw=0|S0[0],K2=8191&Rw,Xw=Rw>>>13,a3=0|S0[1],F2=8191&a3,Qw=a3>>>13,vt=0|S0[2],wt=8191&vt,Ys=vt>>>13,pu=0|S0[3],Ru=8191&pu,wu=pu>>>13,t0=0|S0[4],m0=8191&t0,k0=t0>>>13,_0=0|S0[5],R0=8191&_0,N0=_0>>>13,l1=0|S0[6],a1=8191&l1,x1=l1>>>13,K1=0|S0[7],W1=8191&K1,_g=K1>>>13,uv=0|S0[8],Tv=8191&uv,Uv=uv>>>13,Wv=0|S0[9],ny=8191&Wv,Rv=Wv>>>13;s0.negative=T0.negative^X0.negative,s0.length=19;var Gv=(Q0+(g0=Math.imul(T1,K2))|0)+((8191&(d0=(d0=Math.imul(T1,Xw))+Math.imul(U1,K2)|0))<<13)|0;Q0=((c0=Math.imul(U1,Xw))+(d0>>>13)|0)+(Gv>>>26)|0,Gv&=67108863,g0=Math.imul(n1,K2),d0=(d0=Math.imul(n1,Xw))+Math.imul(V1,K2)|0,c0=Math.imul(V1,Xw);var C0=(Q0+(g0=g0+Math.imul(T1,F2)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Qw)|0)+Math.imul(U1,F2)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Qw)|0)+(d0>>>13)|0)+(C0>>>26)|0,C0&=67108863,g0=Math.imul(wv,K2),d0=(d0=Math.imul(wv,Xw))+Math.imul(Sv,K2)|0,c0=Math.imul(Sv,Xw),g0=g0+Math.imul(n1,F2)|0,d0=(d0=d0+Math.imul(n1,Qw)|0)+Math.imul(V1,F2)|0,c0=c0+Math.imul(V1,Qw)|0;var J0=(Q0+(g0=g0+Math.imul(T1,wt)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Ys)|0)+Math.imul(U1,wt)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Ys)|0)+(d0>>>13)|0)+(J0>>>26)|0,J0&=67108863,g0=Math.imul(ty,K2),d0=(d0=Math.imul(ty,Xw))+Math.imul(gy,K2)|0,c0=Math.imul(gy,Xw),g0=g0+Math.imul(wv,F2)|0,d0=(d0=d0+Math.imul(wv,Qw)|0)+Math.imul(Sv,F2)|0,c0=c0+Math.imul(Sv,Qw)|0,g0=g0+Math.imul(n1,wt)|0,d0=(d0=d0+Math.imul(n1,Ys)|0)+Math.imul(V1,wt)|0,c0=c0+Math.imul(V1,Ys)|0;var f0=(Q0+(g0=g0+Math.imul(T1,Ru)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,wu)|0)+Math.imul(U1,Ru)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,wu)|0)+(d0>>>13)|0)+(f0>>>26)|0,f0&=67108863,g0=Math.imul(Av,K2),d0=(d0=Math.imul(Av,Xw))+Math.imul(Dv,K2)|0,c0=Math.imul(Dv,Xw),g0=g0+Math.imul(ty,F2)|0,d0=(d0=d0+Math.imul(ty,Qw)|0)+Math.imul(gy,F2)|0,c0=c0+Math.imul(gy,Qw)|0,g0=g0+Math.imul(wv,wt)|0,d0=(d0=d0+Math.imul(wv,Ys)|0)+Math.imul(Sv,wt)|0,c0=c0+Math.imul(Sv,Ys)|0,g0=g0+Math.imul(n1,Ru)|0,d0=(d0=d0+Math.imul(n1,wu)|0)+Math.imul(V1,Ru)|0,c0=c0+Math.imul(V1,wu)|0;var v0=(Q0+(g0=g0+Math.imul(T1,m0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,k0)|0)+Math.imul(U1,m0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,k0)|0)+(d0>>>13)|0)+(v0>>>26)|0,v0&=67108863,g0=Math.imul(Jv,K2),d0=(d0=Math.imul(Jv,Xw))+Math.imul(Fv,K2)|0,c0=Math.imul(Fv,Xw),g0=g0+Math.imul(Av,F2)|0,d0=(d0=d0+Math.imul(Av,Qw)|0)+Math.imul(Dv,F2)|0,c0=c0+Math.imul(Dv,Qw)|0,g0=g0+Math.imul(ty,wt)|0,d0=(d0=d0+Math.imul(ty,Ys)|0)+Math.imul(gy,wt)|0,c0=c0+Math.imul(gy,Ys)|0,g0=g0+Math.imul(wv,Ru)|0,d0=(d0=d0+Math.imul(wv,wu)|0)+Math.imul(Sv,Ru)|0,c0=c0+Math.imul(Sv,wu)|0,g0=g0+Math.imul(n1,m0)|0,d0=(d0=d0+Math.imul(n1,k0)|0)+Math.imul(V1,m0)|0,c0=c0+Math.imul(V1,k0)|0;var h0=(Q0+(g0=g0+Math.imul(T1,R0)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,N0)|0)+Math.imul(U1,R0)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,N0)|0)+(d0>>>13)|0)+(h0>>>26)|0,h0&=67108863,g0=Math.imul(cy,K2),d0=(d0=Math.imul(cy,Xw))+Math.imul(Uy,K2)|0,c0=Math.imul(Uy,Xw),g0=g0+Math.imul(Jv,F2)|0,d0=(d0=d0+Math.imul(Jv,Qw)|0)+Math.imul(Fv,F2)|0,c0=c0+Math.imul(Fv,Qw)|0,g0=g0+Math.imul(Av,wt)|0,d0=(d0=d0+Math.imul(Av,Ys)|0)+Math.imul(Dv,wt)|0,c0=c0+Math.imul(Dv,Ys)|0,g0=g0+Math.imul(ty,Ru)|0,d0=(d0=d0+Math.imul(ty,wu)|0)+Math.imul(gy,Ru)|0,c0=c0+Math.imul(gy,wu)|0,g0=g0+Math.imul(wv,m0)|0,d0=(d0=d0+Math.imul(wv,k0)|0)+Math.imul(Sv,m0)|0,c0=c0+Math.imul(Sv,k0)|0,g0=g0+Math.imul(n1,R0)|0,d0=(d0=d0+Math.imul(n1,N0)|0)+Math.imul(V1,R0)|0,c0=c0+Math.imul(V1,N0)|0;var u0=(Q0+(g0=g0+Math.imul(T1,a1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,x1)|0)+Math.imul(U1,a1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,x1)|0)+(d0>>>13)|0)+(u0>>>26)|0,u0&=67108863,g0=Math.imul(f2,K2),d0=(d0=Math.imul(f2,Xw))+Math.imul(j2,K2)|0,c0=Math.imul(j2,Xw),g0=g0+Math.imul(cy,F2)|0,d0=(d0=d0+Math.imul(cy,Qw)|0)+Math.imul(Uy,F2)|0,c0=c0+Math.imul(Uy,Qw)|0,g0=g0+Math.imul(Jv,wt)|0,d0=(d0=d0+Math.imul(Jv,Ys)|0)+Math.imul(Fv,wt)|0,c0=c0+Math.imul(Fv,Ys)|0,g0=g0+Math.imul(Av,Ru)|0,d0=(d0=d0+Math.imul(Av,wu)|0)+Math.imul(Dv,Ru)|0,c0=c0+Math.imul(Dv,wu)|0,g0=g0+Math.imul(ty,m0)|0,d0=(d0=d0+Math.imul(ty,k0)|0)+Math.imul(gy,m0)|0,c0=c0+Math.imul(gy,k0)|0,g0=g0+Math.imul(wv,R0)|0,d0=(d0=d0+Math.imul(wv,N0)|0)+Math.imul(Sv,R0)|0,c0=c0+Math.imul(Sv,N0)|0,g0=g0+Math.imul(n1,a1)|0,d0=(d0=d0+Math.imul(n1,x1)|0)+Math.imul(V1,a1)|0,c0=c0+Math.imul(V1,x1)|0;var o0=(Q0+(g0=g0+Math.imul(T1,W1)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,_g)|0)+Math.imul(U1,W1)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,_g)|0)+(d0>>>13)|0)+(o0>>>26)|0,o0&=67108863,g0=Math.imul(p2,K2),d0=(d0=Math.imul(p2,Xw))+Math.imul(Vw,K2)|0,c0=Math.imul(Vw,Xw),g0=g0+Math.imul(f2,F2)|0,d0=(d0=d0+Math.imul(f2,Qw)|0)+Math.imul(j2,F2)|0,c0=c0+Math.imul(j2,Qw)|0,g0=g0+Math.imul(cy,wt)|0,d0=(d0=d0+Math.imul(cy,Ys)|0)+Math.imul(Uy,wt)|0,c0=c0+Math.imul(Uy,Ys)|0,g0=g0+Math.imul(Jv,Ru)|0,d0=(d0=d0+Math.imul(Jv,wu)|0)+Math.imul(Fv,Ru)|0,c0=c0+Math.imul(Fv,wu)|0,g0=g0+Math.imul(Av,m0)|0,d0=(d0=d0+Math.imul(Av,k0)|0)+Math.imul(Dv,m0)|0,c0=c0+Math.imul(Dv,k0)|0,g0=g0+Math.imul(ty,R0)|0,d0=(d0=d0+Math.imul(ty,N0)|0)+Math.imul(gy,R0)|0,c0=c0+Math.imul(gy,N0)|0,g0=g0+Math.imul(wv,a1)|0,d0=(d0=d0+Math.imul(wv,x1)|0)+Math.imul(Sv,a1)|0,c0=c0+Math.imul(Sv,x1)|0,g0=g0+Math.imul(n1,W1)|0,d0=(d0=d0+Math.imul(n1,_g)|0)+Math.imul(V1,W1)|0,c0=c0+Math.imul(V1,_g)|0;var x0=(Q0+(g0=g0+Math.imul(T1,Tv)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Uv)|0)+Math.imul(U1,Tv)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Uv)|0)+(d0>>>13)|0)+(x0>>>26)|0,x0&=67108863,g0=Math.imul(q2,K2),d0=(d0=Math.imul(q2,Xw))+Math.imul($3,K2)|0,c0=Math.imul($3,Xw),g0=g0+Math.imul(p2,F2)|0,d0=(d0=d0+Math.imul(p2,Qw)|0)+Math.imul(Vw,F2)|0,c0=c0+Math.imul(Vw,Qw)|0,g0=g0+Math.imul(f2,wt)|0,d0=(d0=d0+Math.imul(f2,Ys)|0)+Math.imul(j2,wt)|0,c0=c0+Math.imul(j2,Ys)|0,g0=g0+Math.imul(cy,Ru)|0,d0=(d0=d0+Math.imul(cy,wu)|0)+Math.imul(Uy,Ru)|0,c0=c0+Math.imul(Uy,wu)|0,g0=g0+Math.imul(Jv,m0)|0,d0=(d0=d0+Math.imul(Jv,k0)|0)+Math.imul(Fv,m0)|0,c0=c0+Math.imul(Fv,k0)|0,g0=g0+Math.imul(Av,R0)|0,d0=(d0=d0+Math.imul(Av,N0)|0)+Math.imul(Dv,R0)|0,c0=c0+Math.imul(Dv,N0)|0,g0=g0+Math.imul(ty,a1)|0,d0=(d0=d0+Math.imul(ty,x1)|0)+Math.imul(gy,a1)|0,c0=c0+Math.imul(gy,x1)|0,g0=g0+Math.imul(wv,W1)|0,d0=(d0=d0+Math.imul(wv,_g)|0)+Math.imul(Sv,W1)|0,c0=c0+Math.imul(Sv,_g)|0,g0=g0+Math.imul(n1,Tv)|0,d0=(d0=d0+Math.imul(n1,Uv)|0)+Math.imul(V1,Tv)|0,c0=c0+Math.imul(V1,Uv)|0;var U0=(Q0+(g0=g0+Math.imul(T1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(T1,Rv)|0)+Math.imul(U1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(U1,Rv)|0)+(d0>>>13)|0)+(U0>>>26)|0,U0&=67108863,g0=Math.imul(q2,F2),d0=(d0=Math.imul(q2,Qw))+Math.imul($3,F2)|0,c0=Math.imul($3,Qw),g0=g0+Math.imul(p2,wt)|0,d0=(d0=d0+Math.imul(p2,Ys)|0)+Math.imul(Vw,wt)|0,c0=c0+Math.imul(Vw,Ys)|0,g0=g0+Math.imul(f2,Ru)|0,d0=(d0=d0+Math.imul(f2,wu)|0)+Math.imul(j2,Ru)|0,c0=c0+Math.imul(j2,wu)|0,g0=g0+Math.imul(cy,m0)|0,d0=(d0=d0+Math.imul(cy,k0)|0)+Math.imul(Uy,m0)|0,c0=c0+Math.imul(Uy,k0)|0,g0=g0+Math.imul(Jv,R0)|0,d0=(d0=d0+Math.imul(Jv,N0)|0)+Math.imul(Fv,R0)|0,c0=c0+Math.imul(Fv,N0)|0,g0=g0+Math.imul(Av,a1)|0,d0=(d0=d0+Math.imul(Av,x1)|0)+Math.imul(Dv,a1)|0,c0=c0+Math.imul(Dv,x1)|0,g0=g0+Math.imul(ty,W1)|0,d0=(d0=d0+Math.imul(ty,_g)|0)+Math.imul(gy,W1)|0,c0=c0+Math.imul(gy,_g)|0,g0=g0+Math.imul(wv,Tv)|0,d0=(d0=d0+Math.imul(wv,Uv)|0)+Math.imul(Sv,Tv)|0,c0=c0+Math.imul(Sv,Uv)|0;var e1=(Q0+(g0=g0+Math.imul(n1,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(n1,Rv)|0)+Math.imul(V1,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(V1,Rv)|0)+(d0>>>13)|0)+(e1>>>26)|0,e1&=67108863,g0=Math.imul(q2,wt),d0=(d0=Math.imul(q2,Ys))+Math.imul($3,wt)|0,c0=Math.imul($3,Ys),g0=g0+Math.imul(p2,Ru)|0,d0=(d0=d0+Math.imul(p2,wu)|0)+Math.imul(Vw,Ru)|0,c0=c0+Math.imul(Vw,wu)|0,g0=g0+Math.imul(f2,m0)|0,d0=(d0=d0+Math.imul(f2,k0)|0)+Math.imul(j2,m0)|0,c0=c0+Math.imul(j2,k0)|0,g0=g0+Math.imul(cy,R0)|0,d0=(d0=d0+Math.imul(cy,N0)|0)+Math.imul(Uy,R0)|0,c0=c0+Math.imul(Uy,N0)|0,g0=g0+Math.imul(Jv,a1)|0,d0=(d0=d0+Math.imul(Jv,x1)|0)+Math.imul(Fv,a1)|0,c0=c0+Math.imul(Fv,x1)|0,g0=g0+Math.imul(Av,W1)|0,d0=(d0=d0+Math.imul(Av,_g)|0)+Math.imul(Dv,W1)|0,c0=c0+Math.imul(Dv,_g)|0,g0=g0+Math.imul(ty,Tv)|0,d0=(d0=d0+Math.imul(ty,Uv)|0)+Math.imul(gy,Tv)|0,c0=c0+Math.imul(gy,Uv)|0;var h1=(Q0+(g0=g0+Math.imul(wv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(wv,Rv)|0)+Math.imul(Sv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Sv,Rv)|0)+(d0>>>13)|0)+(h1>>>26)|0,h1&=67108863,g0=Math.imul(q2,Ru),d0=(d0=Math.imul(q2,wu))+Math.imul($3,Ru)|0,c0=Math.imul($3,wu),g0=g0+Math.imul(p2,m0)|0,d0=(d0=d0+Math.imul(p2,k0)|0)+Math.imul(Vw,m0)|0,c0=c0+Math.imul(Vw,k0)|0,g0=g0+Math.imul(f2,R0)|0,d0=(d0=d0+Math.imul(f2,N0)|0)+Math.imul(j2,R0)|0,c0=c0+Math.imul(j2,N0)|0,g0=g0+Math.imul(cy,a1)|0,d0=(d0=d0+Math.imul(cy,x1)|0)+Math.imul(Uy,a1)|0,c0=c0+Math.imul(Uy,x1)|0,g0=g0+Math.imul(Jv,W1)|0,d0=(d0=d0+Math.imul(Jv,_g)|0)+Math.imul(Fv,W1)|0,c0=c0+Math.imul(Fv,_g)|0,g0=g0+Math.imul(Av,Tv)|0,d0=(d0=d0+Math.imul(Av,Uv)|0)+Math.imul(Dv,Tv)|0,c0=c0+Math.imul(Dv,Uv)|0;var k1=(Q0+(g0=g0+Math.imul(ty,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(ty,Rv)|0)+Math.imul(gy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(gy,Rv)|0)+(d0>>>13)|0)+(k1>>>26)|0,k1&=67108863,g0=Math.imul(q2,m0),d0=(d0=Math.imul(q2,k0))+Math.imul($3,m0)|0,c0=Math.imul($3,k0),g0=g0+Math.imul(p2,R0)|0,d0=(d0=d0+Math.imul(p2,N0)|0)+Math.imul(Vw,R0)|0,c0=c0+Math.imul(Vw,N0)|0,g0=g0+Math.imul(f2,a1)|0,d0=(d0=d0+Math.imul(f2,x1)|0)+Math.imul(j2,a1)|0,c0=c0+Math.imul(j2,x1)|0,g0=g0+Math.imul(cy,W1)|0,d0=(d0=d0+Math.imul(cy,_g)|0)+Math.imul(Uy,W1)|0,c0=c0+Math.imul(Uy,_g)|0,g0=g0+Math.imul(Jv,Tv)|0,d0=(d0=d0+Math.imul(Jv,Uv)|0)+Math.imul(Fv,Tv)|0,c0=c0+Math.imul(Fv,Uv)|0;var q1=(Q0+(g0=g0+Math.imul(Av,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Av,Rv)|0)+Math.imul(Dv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Dv,Rv)|0)+(d0>>>13)|0)+(q1>>>26)|0,q1&=67108863,g0=Math.imul(q2,R0),d0=(d0=Math.imul(q2,N0))+Math.imul($3,R0)|0,c0=Math.imul($3,N0),g0=g0+Math.imul(p2,a1)|0,d0=(d0=d0+Math.imul(p2,x1)|0)+Math.imul(Vw,a1)|0,c0=c0+Math.imul(Vw,x1)|0,g0=g0+Math.imul(f2,W1)|0,d0=(d0=d0+Math.imul(f2,_g)|0)+Math.imul(j2,W1)|0,c0=c0+Math.imul(j2,_g)|0,g0=g0+Math.imul(cy,Tv)|0,d0=(d0=d0+Math.imul(cy,Uv)|0)+Math.imul(Uy,Tv)|0,c0=c0+Math.imul(Uy,Uv)|0;var L1=(Q0+(g0=g0+Math.imul(Jv,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(Jv,Rv)|0)+Math.imul(Fv,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Fv,Rv)|0)+(d0>>>13)|0)+(L1>>>26)|0,L1&=67108863,g0=Math.imul(q2,a1),d0=(d0=Math.imul(q2,x1))+Math.imul($3,a1)|0,c0=Math.imul($3,x1),g0=g0+Math.imul(p2,W1)|0,d0=(d0=d0+Math.imul(p2,_g)|0)+Math.imul(Vw,W1)|0,c0=c0+Math.imul(Vw,_g)|0,g0=g0+Math.imul(f2,Tv)|0,d0=(d0=d0+Math.imul(f2,Uv)|0)+Math.imul(j2,Tv)|0,c0=c0+Math.imul(j2,Uv)|0;var A1=(Q0+(g0=g0+Math.imul(cy,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(cy,Rv)|0)+Math.imul(Uy,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Uy,Rv)|0)+(d0>>>13)|0)+(A1>>>26)|0,A1&=67108863,g0=Math.imul(q2,W1),d0=(d0=Math.imul(q2,_g))+Math.imul($3,W1)|0,c0=Math.imul($3,_g),g0=g0+Math.imul(p2,Tv)|0,d0=(d0=d0+Math.imul(p2,Uv)|0)+Math.imul(Vw,Tv)|0,c0=c0+Math.imul(Vw,Uv)|0;var M1=(Q0+(g0=g0+Math.imul(f2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(f2,Rv)|0)+Math.imul(j2,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(j2,Rv)|0)+(d0>>>13)|0)+(M1>>>26)|0,M1&=67108863,g0=Math.imul(q2,Tv),d0=(d0=Math.imul(q2,Uv))+Math.imul($3,Tv)|0,c0=Math.imul($3,Uv);var X1=(Q0+(g0=g0+Math.imul(p2,ny)|0)|0)+((8191&(d0=(d0=d0+Math.imul(p2,Rv)|0)+Math.imul(Vw,ny)|0))<<13)|0;Q0=((c0=c0+Math.imul(Vw,Rv)|0)+(d0>>>13)|0)+(X1>>>26)|0,X1&=67108863;var dv=(Q0+(g0=Math.imul(q2,ny))|0)+((8191&(d0=(d0=Math.imul(q2,Rv))+Math.imul($3,ny)|0))<<13)|0;return Q0=((c0=Math.imul($3,Rv))+(d0>>>13)|0)+(dv>>>26)|0,dv&=67108863,z0[0]=Gv,z0[1]=C0,z0[2]=J0,z0[3]=f0,z0[4]=v0,z0[5]=h0,z0[6]=u0,z0[7]=o0,z0[8]=x0,z0[9]=U0,z0[10]=e1,z0[11]=h1,z0[12]=k1,z0[13]=q1,z0[14]=L1,z0[15]=A1,z0[16]=M1,z0[17]=X1,z0[18]=dv,Q0!==0&&(z0[19]=Q0,s0.length++),s0};function ov(T0,X0,s0){return new bv().mulp(T0,X0,s0)}function bv(T0,X0){this.x=T0,this.y=X0}Math.imul||(F1=v1),xu.prototype.mulTo=function(T0,X0){var s0,g0=this.length+T0.length;return s0=this.length===10&&T0.length===10?F1(this,T0,X0):g0<63?v1(this,T0,X0):g0<1024?function(d0,c0,a0){a0.negative=c0.negative^d0.negative,a0.length=d0.length+c0.length;for(var S0=0,z0=0,Q0=0;Q0>>26)|0)>>>26,p1&=67108863}a0.words[Q0]=T1,S0=p1,p1=z0}return S0!==0?a0.words[Q0]=S0:a0.length--,a0.strip()}(this,T0,X0):ov(this,T0,X0),s0},bv.prototype.makeRBT=function(T0){for(var X0=new Array(T0),s0=xu.prototype._countBits(T0)-1,g0=0;g0>=1;return g0},bv.prototype.permute=function(T0,X0,s0,g0,d0,c0){for(var a0=0;a0>>=1)d0++;return 1<>>=13,s0[2*c0+1]=8191&d0,d0>>>=13;for(c0=2*X0;c0>=26,X0+=g0/67108864|0,X0+=d0>>>26,this.words[s0]=67108863&d0}return X0!==0&&(this.words[s0]=X0,this.length++),this},xu.prototype.muln=function(T0){return this.clone().imuln(T0)},xu.prototype.sqr=function(){return this.mul(this)},xu.prototype.isqr=function(){return this.imul(this.clone())},xu.prototype.pow=function(T0){var X0=function(c0){for(var a0=new Array(c0.bitLength()),S0=0;S0>>Q0}return a0}(T0);if(X0.length===0)return new xu(1);for(var s0=this,g0=0;g0=0);var X0,s0=T0%26,g0=(T0-s0)/26,d0=67108863>>>26-s0<<26-s0;if(s0!==0){var c0=0;for(X0=0;X0>>26-s0}c0&&(this.words[X0]=c0,this.length++)}if(g0!==0){for(X0=this.length-1;X0>=0;X0--)this.words[X0+g0]=this.words[X0];for(X0=0;X0=0),g0=X0?(X0-X0%26)/26:0;var d0=T0%26,c0=Math.min((T0-d0)/26,this.length),a0=67108863^67108863>>>d0<c0)for(this.length-=c0,z0=0;z0=0&&(Q0!==0||z0>=g0);z0--){var p1=0|this.words[z0];this.words[z0]=Q0<<26-d0|p1>>>d0,Q0=p1&a0}return S0&&Q0!==0&&(S0.words[S0.length++]=Q0),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},xu.prototype.ishrn=function(T0,X0,s0){return mu(this.negative===0),this.iushrn(T0,X0,s0)},xu.prototype.shln=function(T0){return this.clone().ishln(T0)},xu.prototype.ushln=function(T0){return this.clone().iushln(T0)},xu.prototype.shrn=function(T0){return this.clone().ishrn(T0)},xu.prototype.ushrn=function(T0){return this.clone().iushrn(T0)},xu.prototype.testn=function(T0){mu(typeof T0=="number"&&T0>=0);var X0=T0%26,s0=(T0-X0)/26,g0=1<=0);var X0=T0%26,s0=(T0-X0)/26;if(mu(this.negative===0,"imaskn works only with positive numbers"),this.length<=s0)return this;if(X0!==0&&s0++,this.length=Math.min(s0,this.length),X0!==0){var g0=67108863^67108863>>>X0<=67108864;X0++)this.words[X0]-=67108864,X0===this.length-1?this.words[X0+1]=1:this.words[X0+1]++;return this.length=Math.max(this.length,X0+1),this},xu.prototype.isubn=function(T0){if(mu(typeof T0=="number"),mu(T0<67108864),T0<0)return this.iaddn(-T0);if(this.negative!==0)return this.negative=0,this.iaddn(T0),this.negative=1,this;if(this.words[0]-=T0,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var X0=0;X0>26)-(S0/67108864|0),this.words[g0+s0]=67108863&d0}for(;g0>26,this.words[g0+s0]=67108863&d0;if(a0===0)return this.strip();for(mu(a0===-1),a0=0,g0=0;g0>26,this.words[g0]=67108863&d0;return this.negative=1,this.strip()},xu.prototype._wordDiv=function(T0,X0){var s0=(this.length,T0.length),g0=this.clone(),d0=T0,c0=0|d0.words[d0.length-1];(s0=26-this._countBits(c0))!=0&&(d0=d0.ushln(s0),g0.iushln(s0),c0=0|d0.words[d0.length-1]);var a0,S0=g0.length-d0.length;if(X0!=="mod"){(a0=new xu(null)).length=S0+1,a0.words=new Array(a0.length);for(var z0=0;z0=0;p1--){var T1=67108864*(0|g0.words[d0.length+p1])+(0|g0.words[d0.length+p1-1]);for(T1=Math.min(T1/c0|0,67108863),g0._ishlnsubmul(d0,T1,p1);g0.negative!==0;)T1--,g0.negative=0,g0._ishlnsubmul(d0,1,p1),g0.isZero()||(g0.negative^=1);a0&&(a0.words[p1]=T1)}return a0&&a0.strip(),g0.strip(),X0!=="div"&&s0!==0&&g0.iushrn(s0),{div:a0||null,mod:g0}},xu.prototype.divmod=function(T0,X0,s0){return mu(!T0.isZero()),this.isZero()?{div:new xu(0),mod:new xu(0)}:this.negative!==0&&T0.negative===0?(c0=this.neg().divmod(T0,X0),X0!=="mod"&&(g0=c0.div.neg()),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.iadd(T0)),{div:g0,mod:d0}):this.negative===0&&T0.negative!==0?(c0=this.divmod(T0.neg(),X0),X0!=="mod"&&(g0=c0.div.neg()),{div:g0,mod:c0.mod}):this.negative&T0.negative?(c0=this.neg().divmod(T0.neg(),X0),X0!=="div"&&(d0=c0.mod.neg(),s0&&d0.negative!==0&&d0.isub(T0)),{div:c0.div,mod:d0}):T0.length>this.length||this.cmp(T0)<0?{div:new xu(0),mod:this}:T0.length===1?X0==="div"?{div:this.divn(T0.words[0]),mod:null}:X0==="mod"?{div:null,mod:new xu(this.modn(T0.words[0]))}:{div:this.divn(T0.words[0]),mod:new xu(this.modn(T0.words[0]))}:this._wordDiv(T0,X0);var g0,d0,c0},xu.prototype.div=function(T0){return this.divmod(T0,"div",!1).div},xu.prototype.mod=function(T0){return this.divmod(T0,"mod",!1).mod},xu.prototype.umod=function(T0){return this.divmod(T0,"mod",!0).mod},xu.prototype.divRound=function(T0){var X0=this.divmod(T0);if(X0.mod.isZero())return X0.div;var s0=X0.div.negative!==0?X0.mod.isub(T0):X0.mod,g0=T0.ushrn(1),d0=T0.andln(1),c0=s0.cmp(g0);return c0<0||d0===1&&c0===0?X0.div:X0.div.negative!==0?X0.div.isubn(1):X0.div.iaddn(1)},xu.prototype.modn=function(T0){mu(T0<=67108863);for(var X0=(1<<26)%T0,s0=0,g0=this.length-1;g0>=0;g0--)s0=(X0*s0+(0|this.words[g0]))%T0;return s0},xu.prototype.idivn=function(T0){mu(T0<=67108863);for(var X0=0,s0=this.length-1;s0>=0;s0--){var g0=(0|this.words[s0])+67108864*X0;this.words[s0]=g0/T0|0,X0=g0%T0}return this.strip()},xu.prototype.divn=function(T0){return this.clone().idivn(T0)},xu.prototype.egcd=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0=new xu(1),d0=new xu(0),c0=new xu(0),a0=new xu(1),S0=0;X0.isEven()&&s0.isEven();)X0.iushrn(1),s0.iushrn(1),++S0;for(var z0=s0.clone(),Q0=X0.clone();!X0.isZero();){for(var p1=0,T1=1;!(X0.words[0]&T1)&&p1<26;++p1,T1<<=1);if(p1>0)for(X0.iushrn(p1);p1-- >0;)(g0.isOdd()||d0.isOdd())&&(g0.iadd(z0),d0.isub(Q0)),g0.iushrn(1),d0.iushrn(1);for(var U1=0,S1=1;!(s0.words[0]&S1)&&U1<26;++U1,S1<<=1);if(U1>0)for(s0.iushrn(U1);U1-- >0;)(c0.isOdd()||a0.isOdd())&&(c0.iadd(z0),a0.isub(Q0)),c0.iushrn(1),a0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),g0.isub(c0),d0.isub(a0)):(s0.isub(X0),c0.isub(g0),a0.isub(d0))}return{a:c0,b:a0,gcd:s0.iushln(S0)}},xu.prototype._invmp=function(T0){mu(T0.negative===0),mu(!T0.isZero());var X0=this,s0=T0.clone();X0=X0.negative!==0?X0.umod(T0):X0.clone();for(var g0,d0=new xu(1),c0=new xu(0),a0=s0.clone();X0.cmpn(1)>0&&s0.cmpn(1)>0;){for(var S0=0,z0=1;!(X0.words[0]&z0)&&S0<26;++S0,z0<<=1);if(S0>0)for(X0.iushrn(S0);S0-- >0;)d0.isOdd()&&d0.iadd(a0),d0.iushrn(1);for(var Q0=0,p1=1;!(s0.words[0]&p1)&&Q0<26;++Q0,p1<<=1);if(Q0>0)for(s0.iushrn(Q0);Q0-- >0;)c0.isOdd()&&c0.iadd(a0),c0.iushrn(1);X0.cmp(s0)>=0?(X0.isub(s0),d0.isub(c0)):(s0.isub(X0),c0.isub(d0))}return(g0=X0.cmpn(1)===0?d0:c0).cmpn(0)<0&&g0.iadd(T0),g0},xu.prototype.gcd=function(T0){if(this.isZero())return T0.abs();if(T0.isZero())return this.abs();var X0=this.clone(),s0=T0.clone();X0.negative=0,s0.negative=0;for(var g0=0;X0.isEven()&&s0.isEven();g0++)X0.iushrn(1),s0.iushrn(1);for(;;){for(;X0.isEven();)X0.iushrn(1);for(;s0.isEven();)s0.iushrn(1);var d0=X0.cmp(s0);if(d0<0){var c0=X0;X0=s0,s0=c0}else if(d0===0||s0.cmpn(1)===0)break;X0.isub(s0)}return s0.iushln(g0)},xu.prototype.invm=function(T0){return this.egcd(T0).a.umod(T0)},xu.prototype.isEven=function(){return(1&this.words[0])==0},xu.prototype.isOdd=function(){return(1&this.words[0])==1},xu.prototype.andln=function(T0){return this.words[0]&T0},xu.prototype.bincn=function(T0){mu(typeof T0=="number");var X0=T0%26,s0=(T0-X0)/26,g0=1<>>26,a0&=67108863,this.words[c0]=a0}return d0!==0&&(this.words[c0]=d0,this.length++),this},xu.prototype.isZero=function(){return this.length===1&&this.words[0]===0},xu.prototype.cmpn=function(T0){var X0,s0=T0<0;if(this.negative!==0&&!s0)return-1;if(this.negative===0&&s0)return 1;if(this.strip(),this.length>1)X0=1;else{s0&&(T0=-T0),mu(T0<=67108863,"Number is too big");var g0=0|this.words[0];X0=g0===T0?0:g0T0.length)return 1;if(this.length=0;s0--){var g0=0|this.words[s0],d0=0|T0.words[s0];if(g0!==d0){g0d0&&(X0=1);break}}return X0},xu.prototype.gtn=function(T0){return this.cmpn(T0)===1},xu.prototype.gt=function(T0){return this.cmp(T0)===1},xu.prototype.gten=function(T0){return this.cmpn(T0)>=0},xu.prototype.gte=function(T0){return this.cmp(T0)>=0},xu.prototype.ltn=function(T0){return this.cmpn(T0)===-1},xu.prototype.lt=function(T0){return this.cmp(T0)===-1},xu.prototype.lten=function(T0){return this.cmpn(T0)<=0},xu.prototype.lte=function(T0){return this.cmp(T0)<=0},xu.prototype.eqn=function(T0){return this.cmpn(T0)===0},xu.prototype.eq=function(T0){return this.cmp(T0)===0},xu.red=function(T0){return new qv(T0)},xu.prototype.toRed=function(T0){return mu(!this.red,"Already a number in reduction context"),mu(this.negative===0,"red works only with positives"),T0.convertTo(this)._forceRed(T0)},xu.prototype.fromRed=function(){return mu(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},xu.prototype._forceRed=function(T0){return this.red=T0,this},xu.prototype.forceRed=function(T0){return mu(!this.red,"Already a number in reduction context"),this._forceRed(T0)},xu.prototype.redAdd=function(T0){return mu(this.red,"redAdd works only with red numbers"),this.red.add(this,T0)},xu.prototype.redIAdd=function(T0){return mu(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,T0)},xu.prototype.redSub=function(T0){return mu(this.red,"redSub works only with red numbers"),this.red.sub(this,T0)},xu.prototype.redISub=function(T0){return mu(this.red,"redISub works only with red numbers"),this.red.isub(this,T0)},xu.prototype.redShl=function(T0){return mu(this.red,"redShl works only with red numbers"),this.red.shl(this,T0)},xu.prototype.redMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.mul(this,T0)},xu.prototype.redIMul=function(T0){return mu(this.red,"redMul works only with red numbers"),this.red._verify2(this,T0),this.red.imul(this,T0)},xu.prototype.redSqr=function(){return mu(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},xu.prototype.redISqr=function(){return mu(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},xu.prototype.redSqrt=function(){return mu(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},xu.prototype.redInvm=function(){return mu(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},xu.prototype.redNeg=function(){return mu(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},xu.prototype.redPow=function(T0){return mu(this.red&&!T0.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,T0)};var gv={k256:null,p224:null,p192:null,p25519:null};function xv(T0,X0){this.name=T0,this.p=new xu(X0,16),this.n=this.p.bitLength(),this.k=new xu(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function hy(){xv.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function oy(){xv.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function fy(){xv.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Fy(){xv.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function qv(T0){if(typeof T0=="string"){var X0=xu._prime(T0);this.m=X0.p,this.prime=X0}else mu(T0.gtn(1),"modulus must be greater than 1"),this.m=T0,this.prime=null}function Qv(T0){qv.call(this,T0),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new xu(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}xv.prototype._tmp=function(){var T0=new xu(null);return T0.words=new Array(Math.ceil(this.n/13)),T0},xv.prototype.ireduce=function(T0){var X0,s0=T0;do this.split(s0,this.tmp),X0=(s0=(s0=this.imulK(s0)).iadd(this.tmp)).bitLength();while(X0>this.n);var g0=X00?s0.isub(this.p):s0.strip!==void 0?s0.strip():s0._strip(),s0},xv.prototype.split=function(T0,X0){T0.iushrn(this.n,0,X0)},xv.prototype.imulK=function(T0){return T0.imul(this.k)},Mu(hy,xv),hy.prototype.split=function(T0,X0){for(var s0=4194303,g0=Math.min(T0.length,9),d0=0;d0>>22,c0=a0}c0>>>=22,T0.words[d0-10]=c0,c0===0&&T0.length>10?T0.length-=10:T0.length-=9},hy.prototype.imulK=function(T0){T0.words[T0.length]=0,T0.words[T0.length+1]=0,T0.length+=2;for(var X0=0,s0=0;s0>>=26,T0.words[s0]=d0,X0=g0}return X0!==0&&(T0.words[T0.length++]=X0),T0},xu._prime=function(T0){if(gv[T0])return gv[T0];var X0;if(T0==="k256")X0=new hy;else if(T0==="p224")X0=new oy;else if(T0==="p192")X0=new fy;else{if(T0!=="p25519")throw new Error("Unknown prime "+T0);X0=new Fy}return gv[T0]=X0,X0},qv.prototype._verify1=function(T0){mu(T0.negative===0,"red works only with positives"),mu(T0.red,"red works only with red numbers")},qv.prototype._verify2=function(T0,X0){mu((T0.negative|X0.negative)==0,"red works only with positives"),mu(T0.red&&T0.red===X0.red,"red works only with red numbers")},qv.prototype.imod=function(T0){return this.prime?this.prime.ireduce(T0)._forceRed(this):T0.umod(this.m)._forceRed(this)},qv.prototype.neg=function(T0){return T0.isZero()?T0.clone():this.m.sub(T0)._forceRed(this)},qv.prototype.add=function(T0,X0){this._verify2(T0,X0);var s0=T0.add(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0._forceRed(this)},qv.prototype.iadd=function(T0,X0){this._verify2(T0,X0);var s0=T0.iadd(X0);return s0.cmp(this.m)>=0&&s0.isub(this.m),s0},qv.prototype.sub=function(T0,X0){this._verify2(T0,X0);var s0=T0.sub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0._forceRed(this)},qv.prototype.isub=function(T0,X0){this._verify2(T0,X0);var s0=T0.isub(X0);return s0.cmpn(0)<0&&s0.iadd(this.m),s0},qv.prototype.shl=function(T0,X0){return this._verify1(T0),this.imod(T0.ushln(X0))},qv.prototype.imul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.imul(X0))},qv.prototype.mul=function(T0,X0){return this._verify2(T0,X0),this.imod(T0.mul(X0))},qv.prototype.isqr=function(T0){return this.imul(T0,T0.clone())},qv.prototype.sqr=function(T0){return this.mul(T0,T0)},qv.prototype.sqrt=function(T0){if(T0.isZero())return T0.clone();var X0=this.m.andln(3);if(mu(X0%2==1),X0===3){var s0=this.m.add(new xu(1)).iushrn(2);return this.pow(T0,s0)}for(var g0=this.m.subn(1),d0=0;!g0.isZero()&&g0.andln(1)===0;)d0++,g0.iushrn(1);mu(!g0.isZero());var c0=new xu(1).toRed(this),a0=c0.redNeg(),S0=this.m.subn(1).iushrn(1),z0=this.m.bitLength();for(z0=new xu(2*z0*z0).toRed(this);this.pow(z0,S0).cmp(a0)!==0;)z0.redIAdd(a0);for(var Q0=this.pow(z0,g0),p1=this.pow(T0,g0.addn(1).iushrn(1)),T1=this.pow(T0,g0),U1=d0;T1.cmp(c0)!==0;){for(var S1=T1,n1=0;S1.cmp(c0)!==0;n1++)S1=S1.redSqr();mu(n1=0;g0--){for(var z0=X0.words[g0],Q0=S0-1;Q0>=0;Q0--){var p1=z0>>Q0&1;d0!==s0[0]&&(d0=this.sqr(d0)),p1!==0||c0!==0?(c0<<=1,c0|=p1,(++a0==4||g0===0&&Q0===0)&&(d0=this.mul(d0,s0[c0]),a0=0,c0=0)):a0=0}S0=26}return d0},qv.prototype.convertTo=function(T0){var X0=T0.umod(this.m);return X0===T0?X0.clone():X0},qv.prototype.convertFrom=function(T0){var X0=T0.clone();return X0.red=null,X0},xu.mont=function(T0){return new Qv(T0)},Mu(Qv,qv),Qv.prototype.convertTo=function(T0){return this.imod(T0.ushln(this.shift))},Qv.prototype.convertFrom=function(T0){var X0=this.imod(T0.mul(this.rinv));return X0.red=null,X0},Qv.prototype.imul=function(T0,X0){if(T0.isZero()||X0.isZero())return T0.words[0]=0,T0.length=1,T0;var s0=T0.imul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.mul=function(T0,X0){if(T0.isZero()||X0.isZero())return new xu(0)._forceRed(this);var s0=T0.mul(X0),g0=s0.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),d0=s0.isub(g0).iushrn(this.shift),c0=d0;return d0.cmp(this.m)>=0?c0=d0.isub(this.m):d0.cmpn(0)<0&&(c0=d0.iadd(this.m)),c0._forceRed(this)},Qv.prototype.invm=function(T0){return this.imod(T0._invmp(this.m).mul(this.r2))._forceRed(this)}})(yt,c)})($B);var MM=$B.exports,NF=EH;function EH(yt,ir){if(!yt)throw new Error(ir||"Assertion failed")}EH.equal=function(yt,ir,_c){if(yt!=ir)throw new Error(_c||"Assertion failed: "+yt+" != "+ir)};var mre={};(function(yt){var ir=yt;function _c(Mu){return Mu.length===1?"0"+Mu:Mu}function mu(Mu){for(var xu="",l0=0;l0>8,B0=255&j0;M0?l0.push(M0,B0):l0.push(B0)}return l0},ir.zero2=_c,ir.toHex=mu,ir.encode=function(Mu,xu){return xu==="hex"?mu(Mu):Mu}})(mre),function(yt){var ir=yt,_c=MM,mu=NF,Mu=mre;ir.assert=mu,ir.toArray=Mu.toArray,ir.zero2=Mu.zero2,ir.toHex=Mu.toHex,ir.encode=Mu.encode,ir.getNAF=function(xu,l0,E0){var j0=new Array(Math.max(xu.bitLength(),E0)+1);j0.fill(0);for(var M0=1<(M0>>1)-1?(M0>>1)-v1:v1,B0.isubn(y1)):y1=0,j0[q0]=y1,B0.iushrn(1)}return j0},ir.getJSF=function(xu,l0){var E0=[[],[]];xu=xu.clone(),l0=l0.clone();for(var j0,M0=0,B0=0;xu.cmpn(-M0)>0||l0.cmpn(-B0)>0;){var q0,y1,v1=xu.andln(3)+M0&3,F1=l0.andln(3)+B0&3;v1===3&&(v1=-1),F1===3&&(F1=-1),q0=1&v1?(j0=xu.andln(7)+M0&7)!=3&&j0!==5||F1!==2?v1:-v1:0,E0[0].push(q0),y1=1&F1?(j0=l0.andln(7)+B0&7)!=3&&j0!==5||v1!==2?F1:-F1:0,E0[1].push(y1),2*M0===q0+1&&(M0=1-M0),2*B0===y1+1&&(B0=1-B0),xu.iushrn(1),l0.iushrn(1)}return E0},ir.cachedProperty=function(xu,l0,E0){var j0="_"+l0;xu.prototype[l0]=function(){return this[j0]!==void 0?this[j0]:this[j0]=E0.call(this)}},ir.parseBytes=function(xu){return typeof xu=="string"?ir.toArray(xu,"hex"):xu},ir.intFromLE=function(xu){return new _c(xu,"hex","le")}}(yR);var gre,vre={exports:{}};function U6(yt){this.rand=yt}if(vre.exports=function(yt){return gre||(gre=new U6(null)),gre.generate(yt)},vre.exports.Rand=U6,U6.prototype.generate=function(yt){return this._rand(yt)},U6.prototype._rand=function(yt){if(this.rand.getBytes)return this.rand.getBytes(yt);for(var ir=new Uint8Array(yt),_c=0;_c0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var OO=ix;function $R(yt,ir){this.curve=yt,this.type=ir,this.precomputed=null}ix.prototype.point=function(){throw new Error("Not implemented")},ix.prototype.validate=function(){throw new Error("Not implemented")},ix.prototype._fixedNafMul=function(yt,ir){nq(yt.precomputed);var _c=yt._getDoubles(),mu=_Z(ir,1,this._bitLength),Mu=(1<<_c.step+1)-(_c.step%2==0?2:1);Mu/=3;var xu,l0,E0=[];for(xu=0;xu=xu;j0--)l0=(l0<<1)+mu[j0];E0.push(l0)}for(var M0=this.jpoint(null,null,null),B0=this.jpoint(null,null,null),q0=Mu;q0>0;q0--){for(xu=0;xu=0;E0--){for(var j0=0;E0>=0&&xu[E0]===0;E0--)j0++;if(E0>=0&&j0++,l0=l0.dblp(j0),E0<0)break;var M0=xu[E0];nq(M0!==0),l0=yt.type==="affine"?M0>0?l0.mixedAdd(Mu[M0-1>>1]):l0.mixedAdd(Mu[-M0-1>>1].neg()):M0>0?l0.add(Mu[M0-1>>1]):l0.add(Mu[-M0-1>>1].neg())}return yt.type==="affine"?l0.toP():l0},ix.prototype._wnafMulAdd=function(yt,ir,_c,mu,Mu){var xu,l0,E0,j0=this._wnafT1,M0=this._wnafT2,B0=this._wnafT3,q0=0;for(xu=0;xu=1;xu-=2){var v1=xu-1,F1=xu;if(j0[v1]===1&&j0[F1]===1){var ov=[ir[v1],null,null,ir[F1]];ir[v1].y.cmp(ir[F1].y)===0?(ov[1]=ir[v1].add(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg())):ir[v1].y.cmp(ir[F1].y.redNeg())===0?(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].add(ir[F1].neg())):(ov[1]=ir[v1].toJ().mixedAdd(ir[F1]),ov[2]=ir[v1].toJ().mixedAdd(ir[F1].neg()));var bv=[-3,-1,-5,-7,0,7,5,1,3],gv=wR(_c[v1],_c[F1]);for(q0=Math.max(gv[0].length,q0),B0[v1]=new Array(q0),B0[F1]=new Array(q0),l0=0;l0=0;xu--){for(var Fy=0;xu>=0;){var qv=!0;for(l0=0;l0=0&&Fy++,oy=oy.dblp(Fy),xu<0)break;for(l0=0;l00?E0=M0[l0][Qv-1>>1]:Qv<0&&(E0=M0[l0][-Qv-1>>1].neg()),oy=E0.type==="affine"?oy.mixedAdd(E0):oy.add(E0))}}for(xu=0;xu=Math.ceil((yt.bitLength()+1)/ir.step)},$R.prototype._getDoubles=function(yt,ir){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var _c=[this],mu=this,Mu=0;Mu=0&&(xu=ir,l0=_c),mu.negative&&(mu=mu.neg(),Mu=Mu.neg()),xu.negative&&(xu=xu.neg(),l0=l0.neg()),[{a:mu,b:Mu},{a:xu,b:l0}]},XC.prototype._endoSplit=function(yt){var ir=this.endo.basis,_c=ir[0],mu=ir[1],Mu=mu.b.mul(yt).divRound(this.n),xu=_c.b.neg().mul(yt).divRound(this.n),l0=Mu.mul(_c.a),E0=xu.mul(mu.a),j0=Mu.mul(_c.b),M0=xu.mul(mu.b);return{k1:yt.sub(l0).sub(E0),k2:j0.add(M0).neg()}},XC.prototype.pointFromX=function(yt,ir){(yt=new e8(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr().redMul(yt).redIAdd(yt.redMul(this.a)).redIAdd(this.b),mu=_c.redSqrt();if(mu.redSqr().redSub(_c).cmp(this.zero)!==0)throw new Error("invalid point");var Mu=mu.fromRed().isOdd();return(ir&&!Mu||!ir&&Mu)&&(mu=mu.redNeg()),this.point(yt,mu)},XC.prototype.validate=function(yt){if(yt.inf)return!0;var ir=yt.x,_c=yt.y,mu=this.a.redMul(ir),Mu=ir.redSqr().redMul(ir).redIAdd(mu).redIAdd(this.b);return _c.redSqr().redISub(Mu).cmpn(0)===0},XC.prototype._endoWnafMulAdd=function(yt,ir,_c){for(var mu=this._endoWnafT1,Mu=this._endoWnafT2,xu=0;xu":""},K8.prototype.isInfinity=function(){return this.inf},K8.prototype.add=function(yt){if(this.inf)return yt;if(yt.inf)return this;if(this.eq(yt))return this.dbl();if(this.neg().eq(yt))return this.curve.point(null,null);if(this.x.cmp(yt.x)===0)return this.curve.point(null,null);var ir=this.y.redSub(yt.y);ir.cmpn(0)!==0&&(ir=ir.redMul(this.x.redSub(yt.x).redInvm()));var _c=ir.redSqr().redISub(this.x).redISub(yt.x),mu=ir.redMul(this.x.redSub(_c)).redISub(this.y);return this.curve.point(_c,mu)},K8.prototype.dbl=function(){if(this.inf)return this;var yt=this.y.redAdd(this.y);if(yt.cmpn(0)===0)return this.curve.point(null,null);var ir=this.curve.a,_c=this.x.redSqr(),mu=yt.redInvm(),Mu=_c.redAdd(_c).redIAdd(_c).redIAdd(ir).redMul(mu),xu=Mu.redSqr().redISub(this.x.redAdd(this.x)),l0=Mu.redMul(this.x.redSub(xu)).redISub(this.y);return this.curve.point(xu,l0)},K8.prototype.getX=function(){return this.x.fromRed()},K8.prototype.getY=function(){return this.y.fromRed()},K8.prototype.mul=function(yt){return yt=new e8(yt,16),this.isInfinity()?this:this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve.endo?this.curve._endoWnafMulAdd([this],[yt]):this.curve._wnafMul(this,yt)},K8.prototype.mulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu):this.curve._wnafMulAdd(1,mu,Mu,2)},K8.prototype.jmulAdd=function(yt,ir,_c){var mu=[this,ir],Mu=[yt,_c];return this.curve.endo?this.curve._endoWnafMulAdd(mu,Mu,!0):this.curve._wnafMulAdd(1,mu,Mu,2,!0)},K8.prototype.eq=function(yt){return this===yt||this.inf===yt.inf&&(this.inf||this.x.cmp(yt.x)===0&&this.y.cmp(yt.y)===0)},K8.prototype.neg=function(yt){if(this.inf)return this;var ir=this.curve.point(this.x,this.y.redNeg());if(yt&&this.precomputed){var _c=this.precomputed,mu=function(Mu){return Mu.neg()};ir.precomputed={naf:_c.naf&&{wnd:_c.naf.wnd,points:_c.naf.points.map(mu)},doubles:_c.doubles&&{step:_c.doubles.step,points:_c.doubles.points.map(mu)}}}return ir},K8.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},PO(KS,LF.BasePoint),XC.prototype.jpoint=function(yt,ir,_c){return new KS(this,yt,ir,_c)},KS.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var yt=this.z.redInvm(),ir=yt.redSqr(),_c=this.x.redMul(ir),mu=this.y.redMul(ir).redMul(yt);return this.curve.point(_c,mu)},KS.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},KS.prototype.add=function(yt){if(this.isInfinity())return yt;if(yt.isInfinity())return this;var ir=yt.z.redSqr(),_c=this.z.redSqr(),mu=this.x.redMul(ir),Mu=yt.x.redMul(_c),xu=this.y.redMul(ir.redMul(yt.z)),l0=yt.y.redMul(_c.redMul(this.z)),E0=mu.redSub(Mu),j0=xu.redSub(l0);if(E0.cmpn(0)===0)return j0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var M0=E0.redSqr(),B0=M0.redMul(E0),q0=mu.redMul(M0),y1=j0.redSqr().redIAdd(B0).redISub(q0).redISub(q0),v1=j0.redMul(q0.redISub(y1)).redISub(xu.redMul(B0)),F1=this.z.redMul(yt.z).redMul(E0);return this.curve.jpoint(y1,v1,F1)},KS.prototype.mixedAdd=function(yt){if(this.isInfinity())return yt.toJ();if(yt.isInfinity())return this;var ir=this.z.redSqr(),_c=this.x,mu=yt.x.redMul(ir),Mu=this.y,xu=yt.y.redMul(ir).redMul(this.z),l0=_c.redSub(mu),E0=Mu.redSub(xu);if(l0.cmpn(0)===0)return E0.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var j0=l0.redSqr(),M0=j0.redMul(l0),B0=_c.redMul(j0),q0=E0.redSqr().redIAdd(M0).redISub(B0).redISub(B0),y1=E0.redMul(B0.redISub(q0)).redISub(Mu.redMul(M0)),v1=this.z.redMul(l0);return this.curve.jpoint(q0,y1,v1)},KS.prototype.dblp=function(yt){if(yt===0)return this;if(this.isInfinity())return this;if(!yt)return this.dbl();var ir;if(this.curve.zeroA||this.curve.threeA){var _c=this;for(ir=0;ir=0)return!1;if(_c.redIAdd(Mu),this.x.cmp(_c)===0)return!0}},KS.prototype.inspect=function(){return this.isInfinity()?"":""},KS.prototype.isInfinity=function(){return this.z.cmpn(0)===0};var SH=MM,oq=_H,u5=OO,SZ=yR;function v9(yt){u5.call(this,"mont",yt),this.a=new SH(yt.a,16).toRed(this.red),this.b=new SH(yt.b,16).toRed(this.red),this.i4=new SH(4).toRed(this.red).redInvm(),this.two=new SH(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}oq(v9,u5);var yre=v9;function cS(yt,ir,_c){u5.BasePoint.call(this,yt,"projective"),ir===null&&_c===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new SH(ir,16),this.z=new SH(_c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}v9.prototype.validate=function(yt){var ir=yt.normalize().x,_c=ir.redSqr(),mu=_c.redMul(ir).redAdd(_c.redMul(this.a)).redAdd(ir);return mu.redSqrt().redSqr().cmp(mu)===0},oq(cS,u5.BasePoint),v9.prototype.decodePoint=function(yt,ir){return this.point(SZ.toArray(yt,ir),1)},v9.prototype.point=function(yt,ir){return new cS(this,yt,ir)},v9.prototype.pointFromJSON=function(yt){return cS.fromJSON(this,yt)},cS.prototype.precompute=function(){},cS.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},cS.fromJSON=function(yt,ir){return new cS(yt,ir[0],ir[1]||yt.one)},cS.prototype.inspect=function(){return this.isInfinity()?"":""},cS.prototype.isInfinity=function(){return this.z.cmpn(0)===0},cS.prototype.dbl=function(){var yt=this.x.redAdd(this.z).redSqr(),ir=this.x.redSub(this.z).redSqr(),_c=yt.redSub(ir),mu=yt.redMul(ir),Mu=_c.redMul(ir.redAdd(this.curve.a24.redMul(_c)));return this.curve.point(mu,Mu)},cS.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},cS.prototype.diffAdd=function(yt,ir){var _c=this.x.redAdd(this.z),mu=this.x.redSub(this.z),Mu=yt.x.redAdd(yt.z),xu=yt.x.redSub(yt.z).redMul(_c),l0=Mu.redMul(mu),E0=ir.z.redMul(xu.redAdd(l0).redSqr()),j0=ir.x.redMul(xu.redISub(l0).redSqr());return this.curve.point(E0,j0)},cS.prototype.mul=function(yt){for(var ir=yt.clone(),_c=this,mu=this.curve.point(null,null),Mu=[];ir.cmpn(0)!==0;ir.iushrn(1))Mu.push(ir.andln(1));for(var xu=Mu.length-1;xu>=0;xu--)Mu[xu]===0?(_c=_c.diffAdd(mu,this),mu=mu.dbl()):(mu=_c.diffAdd(mu,this),_c=_c.dbl());return mu},cS.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},cS.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},cS.prototype.eq=function(yt){return this.getX().cmp(yt.getX())===0},cS.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},cS.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var MA=MM,xZ=_H,CN=OO,I1e=yR.assert;function uS(yt){this.twisted=(0|yt.a)!=1,this.mOneA=this.twisted&&(0|yt.a)==-1,this.extended=this.mOneA,CN.call(this,"edwards",yt),this.a=new MA(yt.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new MA(yt.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new MA(yt.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),I1e(!this.twisted||this.c.fromRed().cmpn(1)===0),this.oneC=(0|yt.c)==1}xZ(uS,CN);var O1e=uS;function iE(yt,ir,_c,mu,Mu){CN.BasePoint.call(this,yt,"projective"),ir===null&&_c===null&&mu===null?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new MA(ir,16),this.y=new MA(_c,16),this.z=mu?new MA(mu,16):this.curve.one,this.t=Mu&&new MA(Mu,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}uS.prototype._mulA=function(yt){return this.mOneA?yt.redNeg():this.a.redMul(yt)},uS.prototype._mulC=function(yt){return this.oneC?yt:this.c.redMul(yt)},uS.prototype.jpoint=function(yt,ir,_c,mu){return this.point(yt,ir,_c,mu)},uS.prototype.pointFromX=function(yt,ir){(yt=new MA(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=this.c2.redSub(this.a.redMul(_c)),Mu=this.one.redSub(this.c2.redMul(this.d).redMul(_c)),xu=mu.redMul(Mu.redInvm()),l0=xu.redSqrt();if(l0.redSqr().redSub(xu).cmp(this.zero)!==0)throw new Error("invalid point");var E0=l0.fromRed().isOdd();return(ir&&!E0||!ir&&E0)&&(l0=l0.redNeg()),this.point(yt,l0)},uS.prototype.pointFromY=function(yt,ir){(yt=new MA(yt,16)).red||(yt=yt.toRed(this.red));var _c=yt.redSqr(),mu=_c.redSub(this.c2),Mu=_c.redMul(this.d).redMul(this.c2).redSub(this.a),xu=mu.redMul(Mu.redInvm());if(xu.cmp(this.zero)===0){if(ir)throw new Error("invalid point");return this.point(this.zero,yt)}var l0=xu.redSqrt();if(l0.redSqr().redSub(xu).cmp(this.zero)!==0)throw new Error("invalid point");return l0.fromRed().isOdd()!==ir&&(l0=l0.redNeg()),this.point(l0,yt)},uS.prototype.validate=function(yt){if(yt.isInfinity())return!0;yt.normalize();var ir=yt.x.redSqr(),_c=yt.y.redSqr(),mu=ir.redMul(this.a).redAdd(_c),Mu=this.c2.redMul(this.one.redAdd(this.d.redMul(ir).redMul(_c)));return mu.cmp(Mu)===0},xZ(iE,CN.BasePoint),uS.prototype.pointFromJSON=function(yt){return iE.fromJSON(this,yt)},uS.prototype.point=function(yt,ir,_c,mu){return new iE(this,yt,ir,_c,mu)},iE.fromJSON=function(yt,ir){return new iE(yt,ir[0],ir[1],ir[2])},iE.prototype.inspect=function(){return this.isInfinity()?"":""},iE.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},iE.prototype._extDbl=function(){var yt=this.x.redSqr(),ir=this.y.redSqr(),_c=this.z.redSqr();_c=_c.redIAdd(_c);var mu=this.curve._mulA(yt),Mu=this.x.redAdd(this.y).redSqr().redISub(yt).redISub(ir),xu=mu.redAdd(ir),l0=xu.redSub(_c),E0=mu.redSub(ir),j0=Mu.redMul(l0),M0=xu.redMul(E0),B0=Mu.redMul(E0),q0=l0.redMul(xu);return this.curve.point(j0,M0,q0,B0)},iE.prototype._projDbl=function(){var yt,ir,_c,mu,Mu,xu,l0=this.x.redAdd(this.y).redSqr(),E0=this.x.redSqr(),j0=this.y.redSqr();if(this.curve.twisted){var M0=(mu=this.curve._mulA(E0)).redAdd(j0);this.zOne?(yt=l0.redSub(E0).redSub(j0).redMul(M0.redSub(this.curve.two)),ir=M0.redMul(mu.redSub(j0)),_c=M0.redSqr().redSub(M0).redSub(M0)):(Mu=this.z.redSqr(),xu=M0.redSub(Mu).redISub(Mu),yt=l0.redSub(E0).redISub(j0).redMul(xu),ir=M0.redMul(mu.redSub(j0)),_c=M0.redMul(xu))}else mu=E0.redAdd(j0),Mu=this.curve._mulC(this.z).redSqr(),xu=mu.redSub(Mu).redSub(Mu),yt=this.curve._mulC(l0.redISub(mu)).redMul(xu),ir=this.curve._mulC(mu).redMul(E0.redISub(j0)),_c=mu.redMul(xu);return this.curve.point(yt,ir,_c)},iE.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},iE.prototype._extAdd=function(yt){var ir=this.y.redSub(this.x).redMul(yt.y.redSub(yt.x)),_c=this.y.redAdd(this.x).redMul(yt.y.redAdd(yt.x)),mu=this.t.redMul(this.curve.dd).redMul(yt.t),Mu=this.z.redMul(yt.z.redAdd(yt.z)),xu=_c.redSub(ir),l0=Mu.redSub(mu),E0=Mu.redAdd(mu),j0=_c.redAdd(ir),M0=xu.redMul(l0),B0=E0.redMul(j0),q0=xu.redMul(j0),y1=l0.redMul(E0);return this.curve.point(M0,B0,y1,q0)},iE.prototype._projAdd=function(yt){var ir,_c,mu=this.z.redMul(yt.z),Mu=mu.redSqr(),xu=this.x.redMul(yt.x),l0=this.y.redMul(yt.y),E0=this.curve.d.redMul(xu).redMul(l0),j0=Mu.redSub(E0),M0=Mu.redAdd(E0),B0=this.x.redAdd(this.y).redMul(yt.x.redAdd(yt.y)).redISub(xu).redISub(l0),q0=mu.redMul(j0).redMul(B0);return this.curve.twisted?(ir=mu.redMul(M0).redMul(l0.redSub(this.curve._mulA(xu))),_c=j0.redMul(M0)):(ir=mu.redMul(M0).redMul(l0.redSub(xu)),_c=this.curve._mulC(j0).redMul(M0)),this.curve.point(q0,ir,_c)},iE.prototype.add=function(yt){return this.isInfinity()?yt:yt.isInfinity()?this:this.curve.extended?this._extAdd(yt):this._projAdd(yt)},iE.prototype.mul=function(yt){return this._hasDoubles(yt)?this.curve._fixedNafMul(this,yt):this.curve._wnafMul(this,yt)},iE.prototype.mulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!1)},iE.prototype.jmulAdd=function(yt,ir,_c){return this.curve._wnafMulAdd(1,[this,ir],[yt,_c],2,!0)},iE.prototype.normalize=function(){if(this.zOne)return this;var yt=this.z.redInvm();return this.x=this.x.redMul(yt),this.y=this.y.redMul(yt),this.t&&(this.t=this.t.redMul(yt)),this.z=this.curve.one,this.zOne=!0,this},iE.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},iE.prototype.getX=function(){return this.normalize(),this.x.fromRed()},iE.prototype.getY=function(){return this.normalize(),this.y.fromRed()},iE.prototype.eq=function(yt){return this===yt||this.getX().cmp(yt.getX())===0&&this.getY().cmp(yt.getY())===0},iE.prototype.eqXToP=function(yt){var ir=yt.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(ir)===0)return!0;for(var _c=yt.clone(),mu=this.curve.redN.redMul(this.z);;){if(_c.iadd(this.curve.n),_c.cmp(this.curve.p)>=0)return!1;if(ir.redIAdd(mu),this.x.cmp(ir)===0)return!0}},iE.prototype.toP=iE.prototype.normalize,iE.prototype.mixedAdd=iE.prototype.add,function(yt){var ir=yt;ir.base=OO,ir.short=BF,ir.mont=yre,ir.edwards=O1e}(bR);var VS={},TN={},kE={},kZ=NF,P1e=_H;function xH(yt,ir){return(64512&yt.charCodeAt(ir))==55296&&!(ir<0||ir+1>=yt.length)&&(64512&yt.charCodeAt(ir+1))==56320}function Ece(yt){return(yt>>>24|yt>>>8&65280|yt<<8&16711680|(255&yt)<<24)>>>0}function z6(yt){return yt.length===1?"0"+yt:yt}function jO(yt){return yt.length===7?"0"+yt:yt.length===6?"00"+yt:yt.length===5?"000"+yt:yt.length===4?"0000"+yt:yt.length===3?"00000"+yt:yt.length===2?"000000"+yt:yt.length===1?"0000000"+yt:yt}kE.inherits=P1e,kE.toArray=function(yt,ir){if(Array.isArray(yt))return yt.slice();if(!yt)return[];var _c=[];if(typeof yt=="string")if(ir){if(ir==="hex")for((yt=yt.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(yt="0"+yt),Mu=0;Mu>6|192,_c[mu++]=63&xu|128):xH(yt,Mu)?(xu=65536+((1023&xu)<<10)+(1023&yt.charCodeAt(++Mu)),_c[mu++]=xu>>18|240,_c[mu++]=xu>>12&63|128,_c[mu++]=xu>>6&63|128,_c[mu++]=63&xu|128):(_c[mu++]=xu>>12|224,_c[mu++]=xu>>6&63|128,_c[mu++]=63&xu|128)}else for(Mu=0;Mu>>0}return xu},kE.split32=function(yt,ir){for(var _c=new Array(4*yt.length),mu=0,Mu=0;mu>>24,_c[Mu+1]=xu>>>16&255,_c[Mu+2]=xu>>>8&255,_c[Mu+3]=255&xu):(_c[Mu+3]=xu>>>24,_c[Mu+2]=xu>>>16&255,_c[Mu+1]=xu>>>8&255,_c[Mu]=255&xu)}return _c},kE.rotr32=function(yt,ir){return yt>>>ir|yt<<32-ir},kE.rotl32=function(yt,ir){return yt<>>32-ir},kE.sum32=function(yt,ir){return yt+ir>>>0},kE.sum32_3=function(yt,ir,_c){return yt+ir+_c>>>0},kE.sum32_4=function(yt,ir,_c,mu){return yt+ir+_c+mu>>>0},kE.sum32_5=function(yt,ir,_c,mu,Mu){return yt+ir+_c+mu+Mu>>>0},kE.sum64=function(yt,ir,_c,mu){var Mu=yt[ir],xu=mu+yt[ir+1]>>>0,l0=(xu>>0,yt[ir+1]=xu},kE.sum64_hi=function(yt,ir,_c,mu){return(ir+mu>>>0>>0},kE.sum64_lo=function(yt,ir,_c,mu){return ir+mu>>>0},kE.sum64_4_hi=function(yt,ir,_c,mu,Mu,xu,l0,E0){var j0=0,M0=ir;return j0+=(M0=M0+mu>>>0)>>0)>>0)>>0},kE.sum64_4_lo=function(yt,ir,_c,mu,Mu,xu,l0,E0){return ir+mu+xu+E0>>>0},kE.sum64_5_hi=function(yt,ir,_c,mu,Mu,xu,l0,E0,j0,M0){var B0=0,q0=ir;return B0+=(q0=q0+mu>>>0)>>0)>>0)>>0)>>0},kE.sum64_5_lo=function(yt,ir,_c,mu,Mu,xu,l0,E0,j0,M0){return ir+mu+xu+E0+M0>>>0},kE.rotr64_hi=function(yt,ir,_c){return(ir<<32-_c|yt>>>_c)>>>0},kE.rotr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0},kE.shr64_hi=function(yt,ir,_c){return yt>>>_c},kE.shr64_lo=function(yt,ir,_c){return(yt<<32-_c|ir>>>_c)>>>0};var DF={},aq=kE,j1e=NF;function ER(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}DF.BlockHash=ER,ER.prototype.update=function(yt,ir){if(yt=aq.toArray(yt,ir),this.pending?this.pending=this.pending.concat(yt):this.pending=yt,this.pendingTotal+=yt.length,this.pending.length>=this._delta8){var _c=(yt=this.pending).length%this._delta8;this.pending=yt.slice(yt.length-_c,yt.length),this.pending.length===0&&(this.pending=null),yt=aq.join32(yt,0,yt.length-_c,this.endian);for(var mu=0;mu>>24&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>8&255,mu[Mu++]=255&yt}else for(mu[Mu++]=255&yt,mu[Mu++]=yt>>>8&255,mu[Mu++]=yt>>>16&255,mu[Mu++]=yt>>>24&255,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,mu[Mu++]=0,xu=8;xu>>3},zE.g1_256=function(yt){return AR(yt,17)^AR(yt,19)^yt>>>10};var CH=kE,N1e=DF,_ce=zE,CZ=CH.rotl32,TH=CH.sum32,RH=CH.sum32_5,Sce=_ce.ft_1,xce=N1e.BlockHash,TZ=[1518500249,1859775393,2400959708,3395469782];function aC(){if(!(this instanceof aC))return new aC;xce.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}CH.inherits(aC,xce);var NO=aC;aC.blockSize=512,aC.outSize=160,aC.hmacStrength=80,aC.padLength=64,aC.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=CZ(_c[mu-3]^_c[mu-8]^_c[mu-14]^_c[mu-16],1);var Mu=this.h[0],xu=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4];for(mu=0;mu<_c.length;mu++){var M0=~~(mu/20),B0=RH(CZ(Mu,5),Sce(M0,xu,l0,E0),j0,_c[mu],TZ[M0]);j0=E0,E0=l0,l0=CZ(xu,30),xu=Mu,Mu=B0}this.h[0]=TH(this.h[0],Mu),this.h[1]=TH(this.h[1],xu),this.h[2]=TH(this.h[2],l0),this.h[3]=TH(this.h[3],E0),this.h[4]=TH(this.h[4],j0)},aC.prototype._digest=function(yt){return yt==="hex"?CH.toHex32(this.h,"big"):CH.split32(this.h,"big")};var sC=kE,kce=DF,UF=zE,Cce=NF,ox=sC.sum32,L1e=sC.sum32_4,B1e=sC.sum32_5,bre=UF.ch32,lq=UF.maj32,D1e=UF.s0_256,F1e=UF.s1_256,Tce=UF.g0_256,U1e=UF.g1_256,f5=kce.BlockHash,z1e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function lC(){if(!(this instanceof lC))return new lC;f5.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=z1e,this.W=new Array(64)}sC.inherits(lC,f5);var Rce=lC;lC.blockSize=512,lC.outSize=256,lC.hmacStrength=192,lC.padLength=64,lC.prototype._update=function(yt,ir){for(var _c=this.W,mu=0;mu<16;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu++)_c[mu]=L1e(U1e(_c[mu-2]),_c[mu-7],Tce(_c[mu-15]),_c[mu-16]);var Mu=this.h[0],xu=this.h[1],l0=this.h[2],E0=this.h[3],j0=this.h[4],M0=this.h[5],B0=this.h[6],q0=this.h[7];for(Cce(this.k.length===_c.length),mu=0;mu<_c.length;mu++){var y1=B1e(q0,F1e(j0),bre(j0,M0,B0),this.k[mu],_c[mu]),v1=ox(D1e(Mu),lq(Mu,xu,l0));q0=B0,B0=M0,M0=j0,j0=ox(E0,y1),E0=l0,l0=xu,xu=Mu,Mu=ox(y1,v1)}this.h[0]=ox(this.h[0],Mu),this.h[1]=ox(this.h[1],xu),this.h[2]=ox(this.h[2],l0),this.h[3]=ox(this.h[3],E0),this.h[4]=ox(this.h[4],j0),this.h[5]=ox(this.h[5],M0),this.h[6]=ox(this.h[6],B0),this.h[7]=ox(this.h[7],q0)},lC.prototype._digest=function(yt){return yt==="hex"?sC.toHex32(this.h,"big"):sC.split32(this.h,"big")};var AB=kE,Mce=Rce;function H6(){if(!(this instanceof H6))return new H6;Mce.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}AB.inherits(H6,Mce);var H1e=H6;H6.blockSize=512,H6.outSize=224,H6.hmacStrength=192,H6.padLength=64,H6.prototype._digest=function(yt){return yt==="hex"?AB.toHex32(this.h.slice(0,7),"big"):AB.split32(this.h.slice(0,7),"big")};var QC=kE,K1e=DF,V1e=NF,LO=QC.rotr64_hi,BO=QC.rotr64_lo,Ice=QC.shr64_hi,Oce=QC.shr64_lo,RN=QC.sum64,wre=QC.sum64_hi,OM=QC.sum64_lo,Pce=QC.sum64_4_hi,$re=QC.sum64_4_lo,jce=QC.sum64_5_hi,MN=QC.sum64_5_lo,Nce=K1e.BlockHash,eT=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function d5(){if(!(this instanceof d5))return new d5;Nce.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=eT,this.W=new Array(160)}QC.inherits(d5,Nce);var Lce=d5;function DO(yt,ir,_c,mu,Mu){var xu=yt&_c^~ytΜreturn xu<0&&(xu+=4294967296),xu}function FO(yt,ir,_c,mu,Mu,xu){var l0=ir&mu^~ir&xu;return l0<0&&(l0+=4294967296),l0}function Bce(yt,ir,_c,mu,Mu){var xu=yt&_c^yt&Mu^_cΜreturn xu<0&&(xu+=4294967296),xu}function Dce(yt,ir,_c,mu,Mu,xu){var l0=ir&mu^ir&xu^mu&xu;return l0<0&&(l0+=4294967296),l0}function _B(yt,ir){var _c=LO(yt,ir,28)^LO(ir,yt,2)^LO(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function Ere(yt,ir){var _c=BO(yt,ir,28)^BO(ir,yt,2)^BO(ir,yt,7);return _c<0&&(_c+=4294967296),_c}function Are(yt,ir){var _c=LO(yt,ir,14)^LO(yt,ir,18)^LO(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function q1e(yt,ir){var _c=BO(yt,ir,14)^BO(yt,ir,18)^BO(ir,yt,9);return _c<0&&(_c+=4294967296),_c}function W1e(yt,ir){var _c=LO(yt,ir,1)^LO(yt,ir,8)^Ice(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function G1e(yt,ir){var _c=BO(yt,ir,1)^BO(yt,ir,8)^Oce(yt,ir,7);return _c<0&&(_c+=4294967296),_c}function Y1e(yt,ir){var _c=LO(yt,ir,19)^LO(ir,yt,29)^Ice(yt,ir,6);return _c<0&&(_c+=4294967296),_c}function Fce(yt,ir){var _c=BO(yt,ir,19)^BO(ir,yt,29)^Oce(yt,ir,6);return _c<0&&(_c+=4294967296),_c}d5.blockSize=1024,d5.outSize=512,d5.hmacStrength=192,d5.padLength=128,d5.prototype._prepareBlock=function(yt,ir){for(var _c=this.W,mu=0;mu<32;mu++)_c[mu]=yt[ir+mu];for(;mu<_c.length;mu+=2){var Mu=Y1e(_c[mu-4],_c[mu-3]),xu=Fce(_c[mu-4],_c[mu-3]),l0=_c[mu-14],E0=_c[mu-13],j0=W1e(_c[mu-30],_c[mu-29]),M0=G1e(_c[mu-30],_c[mu-29]),B0=_c[mu-32],q0=_c[mu-31];_c[mu]=Pce(Mu,xu,l0,E0,j0,M0,B0,q0),_c[mu+1]=$re(Mu,xu,l0,E0,j0,M0,B0,q0)}},d5.prototype._update=function(yt,ir){this._prepareBlock(yt,ir);var _c=this.W,mu=this.h[0],Mu=this.h[1],xu=this.h[2],l0=this.h[3],E0=this.h[4],j0=this.h[5],M0=this.h[6],B0=this.h[7],q0=this.h[8],y1=this.h[9],v1=this.h[10],F1=this.h[11],ov=this.h[12],bv=this.h[13],gv=this.h[14],xv=this.h[15];V1e(this.k.length===_c.length);for(var hy=0;hy<_c.length;hy+=2){var oy=gv,fy=xv,Fy=Are(q0,y1),qv=q1e(q0,y1),Qv=DO(q0,0,v1,0,ov),T0=FO(0,y1,0,F1,0,bv),X0=this.k[hy],s0=this.k[hy+1],g0=_c[hy],d0=_c[hy+1],c0=jce(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0),a0=MN(oy,fy,Fy,qv,Qv,T0,X0,s0,g0,d0);oy=_B(mu,Mu),fy=Ere(mu,Mu),Fy=Bce(mu,0,xu,0,E0),qv=Dce(0,Mu,0,l0,0,j0);var S0=wre(oy,fy,Fy,qv),z0=OM(oy,fy,Fy,qv);gv=ov,xv=bv,ov=v1,bv=F1,v1=q0,F1=y1,q0=wre(M0,B0,c0,a0),y1=OM(B0,B0,c0,a0),M0=E0,B0=j0,E0=xu,j0=l0,xu=mu,l0=Mu,mu=wre(c0,a0,S0,z0),Mu=OM(c0,a0,S0,z0)}RN(this.h,0,mu,Mu),RN(this.h,2,xu,l0),RN(this.h,4,E0,j0),RN(this.h,6,M0,B0),RN(this.h,8,q0,y1),RN(this.h,10,v1,F1),RN(this.h,12,ov,bv),RN(this.h,14,gv,xv)},d5.prototype._digest=function(yt){return yt==="hex"?QC.toHex32(this.h,"big"):QC.split32(this.h,"big")};var _re=kE,PM=Lce;function UO(){if(!(this instanceof UO))return new UO;PM.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}_re.inherits(UO,PM);var Z1e=UO;UO.blockSize=1024,UO.outSize=384,UO.hmacStrength=192,UO.padLength=128,UO.prototype._digest=function(yt){return yt==="hex"?_re.toHex32(this.h.slice(0,12),"big"):_re.split32(this.h.slice(0,12),"big")},kH.sha1=NO,kH.sha224=H1e,kH.sha256=Rce,kH.sha384=Z1e,kH.sha512=Lce;var Uce={},zF=kE,J1e=DF,RZ=zF.rotl32,zce=zF.sum32,cq=zF.sum32_3,Hce=zF.sum32_4,Kce=J1e.BlockHash;function zO(){if(!(this instanceof zO))return new zO;Kce.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function Vce(yt,ir,_c,mu){return yt<=15?ir^_c^mu:yt<=31?ir&_c|~ir&mu:yt<=47?(ir|~_c)^mu:yt<=63?ir&mu|_c&~mu:ir^(_c|~mu)}function X1e(yt){return yt<=15?0:yt<=31?1518500249:yt<=47?1859775393:yt<=63?2400959708:2840853838}function Sre(yt){return yt<=15?1352829926:yt<=31?1548603684:yt<=47?1836072691:yt<=63?2053994217:0}zF.inherits(zO,Kce),Uce.ripemd160=zO,zO.blockSize=512,zO.outSize=160,zO.hmacStrength=192,zO.padLength=64,zO.prototype._update=function(yt,ir){for(var _c=this.h[0],mu=this.h[1],Mu=this.h[2],xu=this.h[3],l0=this.h[4],E0=_c,j0=mu,M0=Mu,B0=xu,q0=l0,y1=0;y1<80;y1++){var v1=zce(RZ(Hce(_c,Vce(y1,mu,Mu,xu),yt[qce[y1]+ir],X1e(y1)),Q1e[y1]),l0);_c=l0,l0=xu,xu=RZ(Mu,10),Mu=mu,mu=v1,v1=zce(RZ(Hce(E0,Vce(79-y1,j0,M0,B0),yt[IN[y1]+ir],Sre(y1)),Wce[y1]),q0),E0=q0,q0=B0,B0=RZ(M0,10),M0=j0,j0=v1}v1=cq(this.h[1],Mu,B0),this.h[1]=cq(this.h[2],xu,q0),this.h[2]=cq(this.h[3],l0,E0),this.h[3]=cq(this.h[4],_c,j0),this.h[4]=cq(this.h[0],mu,M0),this.h[0]=v1},zO.prototype._digest=function(yt){return yt==="hex"?zF.toHex32(this.h,"little"):zF.split32(this.h,"little")};var qce=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],IN=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],Q1e=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],Wce=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],HF=kE,eme=NF;function ON(yt,ir,_c){if(!(this instanceof ON))return new ON(yt,ir,_c);this.Hash=yt,this.blockSize=yt.blockSize/8,this.outSize=yt.outSize/8,this.inner=null,this.outer=null,this._init(HF.toArray(ir,_c))}var xre,MH,Gce=ON;ON.prototype._init=function(yt){yt.length>this.blockSize&&(yt=new this.Hash().update(yt).digest()),eme(yt.length<=this.blockSize);for(var ir=yt.length;ir=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(ir,_c,mu)}var tme=SB;SB.prototype._init=function(yt,ir,_c){var mu=yt.concat(ir).concat(_c);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var Mu=0;Mu=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(yt.concat(_c||[])),this._reseed=1},SB.prototype.generate=function(yt,ir,_c,mu){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof ir!="string"&&(mu=_c,_c=ir,ir=null),_c&&(_c=ax.toArray(_c,mu||"hex"),this._update(_c));for(var Mu=[];Mu.length"};var MZ=MM,Tre=yR,IH=Tre.assert;function uq(yt,ir){if(yt instanceof uq)return yt;this._importDER(yt,ir)||(IH(yt.r&&yt.s,"Signature without r or s"),this.r=new MZ(yt.r,16),this.s=new MZ(yt.s,16),yt.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=yt.recoveryParam)}var Zce=uq;function ime(){this.place=0}function Rre(yt,ir){var _c=yt[ir.place++];if(!(128&_c))return _c;var mu=15&_c;if(mu===0||mu>4)return!1;for(var Mu=0,xu=0,l0=ir.place;xu>>=0;return!(Mu<=127)&&(ir.place=l0,Mu)}function xB(yt){for(var ir=0,_c=yt.length-1;!yt[ir]&&!(128&yt[ir+1])&&ir<_c;)ir++;return ir===0?yt:yt.slice(ir)}function IZ(yt,ir){if(ir<128)yt.push(ir);else{var _c=1+(Math.log(ir)/Math.LN2>>>3);for(yt.push(128|_c);--_c;)yt.push(ir>>>(_c<<3)&255);yt.push(ir)}}uq.prototype._importDER=function(yt,ir){yt=Tre.toArray(yt,ir);var _c=new ime;if(yt[_c.place++]!==48)return!1;var mu=Rre(yt,_c);if(mu===!1||mu+_c.place!==yt.length||yt[_c.place++]!==2)return!1;var Mu=Rre(yt,_c);if(Mu===!1)return!1;var xu=yt.slice(_c.place,Mu+_c.place);if(_c.place+=Mu,yt[_c.place++]!==2)return!1;var l0=Rre(yt,_c);if(l0===!1||yt.length!==l0+_c.place)return!1;var E0=yt.slice(_c.place,l0+_c.place);if(xu[0]===0){if(!(128&xu[1]))return!1;xu=xu.slice(1)}if(E0[0]===0){if(!(128&E0[1]))return!1;E0=E0.slice(1)}return this.r=new MZ(xu),this.s=new MZ(E0),this.recoveryParam=null,!0},uq.prototype.toDER=function(yt){var ir=this.r.toArray(),_c=this.s.toArray();for(128&ir[0]&&(ir=[0].concat(ir)),128&_c[0]&&(_c=[0].concat(_c)),ir=xB(ir),_c=xB(_c);!(_c[0]||128&_c[1]);)_c=_c.slice(1);var mu=[2];IZ(mu,ir.length),(mu=mu.concat(ir)).push(2),IZ(mu,_c.length);var Mu=mu.concat(_c),xu=[48];return IZ(xu,Mu.length),xu=xu.concat(Mu),Tre.encode(xu,yt)};var tT=MM,Jce=tme,Mre=VS,Ire=EB,y9=yR.assert,Ore=nme,KF=Zce;function rT(yt){if(!(this instanceof rT))return new rT(yt);typeof yt=="string"&&(y9(Object.prototype.hasOwnProperty.call(Mre,yt),"Unknown curve "+yt),yt=Mre[yt]),yt instanceof Mre.PresetCurve&&(yt={curve:yt}),this.curve=yt.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=yt.curve.g,this.g.precompute(yt.curve.n.bitLength()+1),this.hash=yt.hash||yt.curve.hash}var ome=rT;rT.prototype.keyPair=function(yt){return new Ore(this,yt)},rT.prototype.keyFromPrivate=function(yt,ir){return Ore.fromPrivate(this,yt,ir)},rT.prototype.keyFromPublic=function(yt,ir){return Ore.fromPublic(this,yt,ir)},rT.prototype.genKeyPair=function(yt){yt||(yt={});for(var ir=new Jce({hash:this.hash,pers:yt.pers,persEnc:yt.persEnc||"utf8",entropy:yt.entropy||Ire(this.hash.hmacStrength),entropyEnc:yt.entropy&&yt.entropyEnc||"utf8",nonce:this.n.toArray()}),_c=this.n.byteLength(),mu=this.n.sub(new tT(2));;){var Mu=new tT(ir.generate(_c));if(!(Mu.cmp(mu)>0))return Mu.iaddn(1),this.keyFromPrivate(Mu)}},rT.prototype._truncateToN=function(yt,ir){var _c=8*yt.byteLength()-this.n.bitLength();return _c>0&&(yt=yt.ushrn(_c)),!ir&&yt.cmp(this.n)>=0?yt.sub(this.n):yt},rT.prototype.sign=function(yt,ir,_c,mu){typeof _c=="object"&&(mu=_c,_c=null),mu||(mu={}),ir=this.keyFromPrivate(ir,_c),yt=this._truncateToN(new tT(yt,16));for(var Mu=this.n.byteLength(),xu=ir.getPrivate().toArray("be",Mu),l0=yt.toArray("be",Mu),E0=new Jce({hash:this.hash,entropy:xu,nonce:l0,pers:mu.pers,persEnc:mu.persEnc||"utf8"}),j0=this.n.sub(new tT(1)),M0=0;;M0++){var B0=mu.k?mu.k(M0):new tT(E0.generate(this.n.byteLength()));if(!((B0=this._truncateToN(B0,!0)).cmpn(1)<=0||B0.cmp(j0)>=0)){var q0=this.g.mul(B0);if(!q0.isInfinity()){var y1=q0.getX(),v1=y1.umod(this.n);if(v1.cmpn(0)!==0){var F1=B0.invm(this.n).mul(v1.mul(ir.getPrivate()).iadd(yt));if((F1=F1.umod(this.n)).cmpn(0)!==0){var ov=(q0.getY().isOdd()?1:0)|(y1.cmp(v1)!==0?2:0);return mu.canonical&&F1.cmp(this.nh)>0&&(F1=this.n.sub(F1),ov^=1),new KF({r:v1,s:F1,recoveryParam:ov})}}}}}},rT.prototype.verify=function(yt,ir,_c,mu){yt=this._truncateToN(new tT(yt,16)),_c=this.keyFromPublic(_c,mu);var Mu=(ir=new KF(ir,"hex")).r,xu=ir.s;if(Mu.cmpn(1)<0||Mu.cmp(this.n)>=0||xu.cmpn(1)<0||xu.cmp(this.n)>=0)return!1;var l0,E0=xu.invm(this.n),j0=E0.mul(yt).umod(this.n),M0=E0.mul(Mu).umod(this.n);return this.curve._maxwellTrick?!(l0=this.g.jmulAdd(j0,_c.getPublic(),M0)).isInfinity()&&l0.eqXToP(Mu):!(l0=this.g.mulAdd(j0,_c.getPublic(),M0)).isInfinity()&&l0.getX().umod(this.n).cmp(Mu)===0},rT.prototype.recoverPubKey=function(yt,ir,_c,mu){y9((3&_c)===_c,"The recovery param is more than two bits"),ir=new KF(ir,mu);var Mu=this.n,xu=new tT(yt),l0=ir.r,E0=ir.s,j0=1&_c,M0=_c>>1;if(l0.cmp(this.curve.p.umod(this.curve.n))>=0&&M0)throw new Error("Unable to find sencond key candinate");l0=M0?this.curve.pointFromX(l0.add(this.curve.n),j0):this.curve.pointFromX(l0,j0);var B0=ir.r.invm(Mu),q0=Mu.sub(xu).mul(B0).umod(Mu),y1=E0.mul(B0).umod(Mu);return this.g.mulAdd(q0,l0,y1)},rT.prototype.getKeyRecoveryParam=function(yt,ir,_c,mu){if((ir=new KF(ir,mu)).recoveryParam!==null)return ir.recoveryParam;for(var Mu=0;Mu<4;Mu++){var xu;try{xu=this.recoverPubKey(yt,ir,Mu)}catch{continue}if(xu.eq(_c))return Mu}throw new Error("Unable to find valid recovery factor")};var kB=yR,Xce=kB.assert,Qce=kB.parseBytes,CB=kB.cachedProperty;function K6(yt,ir){this.eddsa=yt,this._secret=Qce(ir.secret),yt.isPoint(ir.pub)?this._pub=ir.pub:this._pubBytes=Qce(ir.pub)}K6.fromPublic=function(yt,ir){return ir instanceof K6?ir:new K6(yt,{pub:ir})},K6.fromSecret=function(yt,ir){return ir instanceof K6?ir:new K6(yt,{secret:ir})},K6.prototype.secret=function(){return this._secret},CB(K6,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),CB(K6,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),CB(K6,"privBytes",function(){var yt=this.eddsa,ir=this.hash(),_c=yt.encodingLength-1,mu=ir.slice(0,yt.encodingLength);return mu[0]&=248,mu[_c]&=127,mu[_c]|=64,mu}),CB(K6,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),CB(K6,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),CB(K6,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),K6.prototype.sign=function(yt){return Xce(this._secret,"KeyPair can only verify"),this.eddsa.sign(yt,this)},K6.prototype.verify=function(yt,ir){return this.eddsa.verify(yt,ir,this)},K6.prototype.getSecret=function(yt){return Xce(this._secret,"KeyPair is public only"),kB.encode(this.secret(),yt)},K6.prototype.getPublic=function(yt){return kB.encode(this.pubBytes(),yt)};var Pre=K6,VF=MM,fq=yR,jre=fq.assert,OZ=fq.cachedProperty,eue=fq.parseBytes;function PN(yt,ir){this.eddsa=yt,typeof ir!="object"&&(ir=eue(ir)),Array.isArray(ir)&&(ir={R:ir.slice(0,yt.encodingLength),S:ir.slice(yt.encodingLength)}),jre(ir.R&&ir.S,"Signature without R or S"),yt.isPoint(ir.R)&&(this._R=ir.R),ir.S instanceof VF&&(this._S=ir.S),this._Rencoded=Array.isArray(ir.R)?ir.R:ir.Rencoded,this._Sencoded=Array.isArray(ir.S)?ir.S:ir.Sencoded}OZ(PN,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),OZ(PN,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),OZ(PN,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),OZ(PN,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),PN.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},PN.prototype.toHex=function(){return fq.encode(this.toBytes(),"hex").toUpperCase()};var PZ=PN,jM=TN,ame=VS,HO=yR,tue=HO.assert,Nre=HO.parseBytes,qF=Pre,V6=PZ;function nT(yt){if(tue(yt==="ed25519","only tested with ed25519 so far"),!(this instanceof nT))return new nT(yt);yt=ame[yt].curve,this.curve=yt,this.g=yt.g,this.g.precompute(yt.n.bitLength()+1),this.pointClass=yt.point().constructor,this.encodingLength=Math.ceil(yt.n.bitLength()/8),this.hash=jM.sha512}var sme=nT;nT.prototype.sign=function(yt,ir){yt=Nre(yt);var _c=this.keyFromSecret(ir),mu=this.hashInt(_c.messagePrefix(),yt),Mu=this.g.mul(mu),xu=this.encodePoint(Mu),l0=this.hashInt(xu,_c.pubBytes(),yt).mul(_c.priv()),E0=mu.add(l0).umod(this.curve.n);return this.makeSignature({R:Mu,S:E0,Rencoded:xu})},nT.prototype.verify=function(yt,ir,_c){yt=Nre(yt),ir=this.makeSignature(ir);var mu=this.keyFromPublic(_c),Mu=this.hashInt(ir.Rencoded(),mu.pubBytes(),yt),xu=this.g.mul(ir.S());return ir.R().add(mu.pub().mul(Mu)).eq(xu)},nT.prototype.hashInt=function(){for(var yt=this.hash(),ir=0;ir=0)return null;Mu=Mu.toRed(HE.red);let xu=Mu.redSqr().redIMul(Mu).redIAdd(HE.b).redSqrt();return _c===3!==xu.isOdd()&&(xu=xu.redNeg()),_R.keyPair({pub:{x:Mu,y:xu}})}(ir,yt.subarray(1,33));case 4:case 6:case 7:return yt.length!==65?null:function(_c,mu,Mu){let xu=new IA(mu),l0=new IA(Mu);if(xu.cmp(HE.p)>=0||l0.cmp(HE.p)>=0||(xu=xu.toRed(HE.red),l0=l0.toRed(HE.red),(_c===6||_c===7)&&l0.isOdd()!==(_c===7)))return null;const E0=xu.redSqr().redIMul(xu);return l0.redSqr().redISub(E0.redIAdd(HE.b)).isZero()?_R.keyPair({pub:{x:xu,y:l0}}):null}(ir,yt.subarray(1,33),yt.subarray(33,65));default:return null}}function SR(yt,ir){const _c=ir.encode(null,yt.length===33);for(let mu=0;mu0,privateKeyVerify(yt){const ir=new IA(yt);return ir.cmp(HE.n)<0&&!ir.isZero()?0:1},privateKeyNegate(yt){const ir=new IA(yt),_c=HE.n.sub(ir).umod(HE.n).toArrayLike(Uint8Array,"be",32);return yt.set(_c),0},privateKeyTweakAdd(yt,ir){const _c=new IA(ir);if(_c.cmp(HE.n)>=0||(_c.iadd(new IA(yt)),_c.cmp(HE.n)>=0&&_c.isub(HE.n),_c.isZero()))return 1;const mu=_c.toArrayLike(Uint8Array,"be",32);return yt.set(mu),0},privateKeyTweakMul(yt,ir){let _c=new IA(ir);if(_c.cmp(HE.n)>=0||_c.isZero())return 1;_c.imul(new IA(yt)),_c.cmp(HE.n)>=0&&(_c=_c.umod(HE.n));const mu=_c.toArrayLike(Uint8Array,"be",32);return yt.set(mu),0},publicKeyVerify:yt=>TB(yt)===null?1:0,publicKeyCreate(yt,ir){const _c=new IA(ir);return _c.cmp(HE.n)>=0||_c.isZero()?1:(SR(yt,_R.keyFromPrivate(ir).getPublic()),0)},publicKeyConvert(yt,ir){const _c=TB(ir);return _c===null?1:(SR(yt,_c.getPublic()),0)},publicKeyNegate(yt,ir){const _c=TB(ir);if(_c===null)return 1;const mu=_c.getPublic();return mu.y=mu.y.redNeg(),SR(yt,mu),0},publicKeyCombine(yt,ir){const _c=new Array(ir.length);for(let Mu=0;Mu=0)return 2;const Mu=mu.getPublic().add(HE.g.mul(_c));return Mu.isInfinity()?2:(SR(yt,Mu),0)},publicKeyTweakMul(yt,ir,_c){const mu=TB(ir);return mu===null?1:(_c=new IA(_c)).cmp(HE.n)>=0||_c.isZero()?2:(SR(yt,mu.getPublic().mul(_c)),0)},signatureNormalize(yt){const ir=new IA(yt.subarray(0,32)),_c=new IA(yt.subarray(32,64));return ir.cmp(HE.n)>=0||_c.cmp(HE.n)>=0?1:(_c.cmp(_R.nh)===1&&yt.set(HE.n.sub(_c).toArrayLike(Uint8Array,"be",32),32),0)},signatureExport(yt,ir){const _c=ir.subarray(0,32),mu=ir.subarray(32,64);if(new IA(_c).cmp(HE.n)>=0||new IA(mu).cmp(HE.n)>=0)return 1;const{output:Mu}=yt;let xu=Mu.subarray(4,37);xu[0]=0,xu.set(_c,1);let l0=33,E0=0;for(;l0>1&&xu[E0]===0&&!(128&xu[E0+1]);--l0,++E0);if(xu=xu.subarray(E0),128&xu[0]||l0>1&&xu[0]===0&&!(128&xu[1]))return 1;let j0=Mu.subarray(39,72);j0[0]=0,j0.set(mu,1);let M0=33,B0=0;for(;M0>1&&j0[B0]===0&&!(128&j0[B0+1]);--M0,++B0);return j0=j0.subarray(B0),128&j0[0]||M0>1&&j0[0]===0&&!(128&j0[1])?1:(yt.outputlen=6+l0+M0,Mu[0]=48,Mu[1]=yt.outputlen-2,Mu[2]=2,Mu[3]=xu.length,Mu.set(xu,4),Mu[4+l0]=2,Mu[5+l0]=j0.length,Mu.set(j0,6+l0),0)},signatureImport(yt,ir){if(ir.length<8||ir.length>72||ir[0]!==48||ir[1]!==ir.length-2||ir[2]!==2)return 1;const _c=ir[3];if(_c===0||5+_c>=ir.length||ir[4+_c]!==2)return 1;const mu=ir[5+_c];if(mu===0||6+_c+mu!==ir.length||128&ir[4]||_c>1&&ir[4]===0&&!(128&ir[5])||128&ir[_c+6]||mu>1&&ir[_c+6]===0&&!(128&ir[_c+7]))return 1;let Mu=ir.subarray(4,4+_c);if(Mu.length===33&&Mu[0]===0&&(Mu=Mu.subarray(1)),Mu.length>32)return 1;let xu=ir.subarray(6+_c);if(xu.length===33&&xu[0]===0&&(xu=xu.slice(1)),xu.length>32)throw new Error("S length is too long");let l0=new IA(Mu);l0.cmp(HE.n)>=0&&(l0=new IA(0));let E0=new IA(ir.subarray(6+_c));return E0.cmp(HE.n)>=0&&(E0=new IA(0)),yt.set(l0.toArrayLike(Uint8Array,"be",32),0),yt.set(E0.toArrayLike(Uint8Array,"be",32),32),0},ecdsaSign(yt,ir,_c,mu,Mu){if(Mu){const E0=Mu;Mu=j0=>{const M0=E0(ir,_c,null,mu,j0);if(!(M0 instanceof Uint8Array&&M0.length===32))throw new Error("This is the way");return new IA(M0)}}const xu=new IA(_c);if(xu.cmp(HE.n)>=0||xu.isZero())return 1;let l0;try{l0=_R.sign(ir,_c,{canonical:!0,k:Mu,pers:mu})}catch{return 1}return yt.signature.set(l0.r.toArrayLike(Uint8Array,"be",32),0),yt.signature.set(l0.s.toArrayLike(Uint8Array,"be",32),32),yt.recid=l0.recoveryParam,0},ecdsaVerify(yt,ir,_c){const mu={r:yt.subarray(0,32),s:yt.subarray(32,64)},Mu=new IA(mu.r),xu=new IA(mu.s);if(Mu.cmp(HE.n)>=0||xu.cmp(HE.n)>=0)return 1;if(xu.cmp(_R.nh)===1||Mu.isZero()||xu.isZero())return 3;const l0=TB(_c);if(l0===null)return 2;const E0=l0.getPublic();return _R.verify(ir,mu,E0)?0:3},ecdsaRecover(yt,ir,_c,mu){const Mu={r:ir.slice(0,32),s:ir.slice(32,64)},xu=new IA(Mu.r),l0=new IA(Mu.s);if(xu.cmp(HE.n)>=0||l0.cmp(HE.n)>=0)return 1;if(xu.isZero()||l0.isZero())return 2;let E0;try{E0=_R.recoverPubKey(mu,Mu,_c)}catch{return 2}return SR(yt,E0),0},ecdh(yt,ir,_c,mu,Mu,xu,l0){const E0=TB(ir);if(E0===null)return 1;const j0=new IA(_c);if(j0.cmp(HE.n)>=0||j0.isZero())return 2;const M0=E0.getPublic().mul(j0);if(Mu===void 0){const B0=M0.encode(null,!0),q0=_R.hash().update(B0).digest();for(let y1=0;y1<32;++y1)yt[y1]=q0[y1]}else{xu||(xu=new Uint8Array(32));const B0=M0.getX().toArray("be",32);for(let v1=0;v1<32;++v1)xu[v1]=B0[v1];l0||(l0=new Uint8Array(32));const q0=M0.getY().toArray("be",32);for(let v1=0;v1<32;++v1)l0[v1]=q0[v1];const y1=Mu(xu,l0,mu);if(!(y1 instanceof Uint8Array&&y1.length===yt.length))return 2;yt.set(y1)}return 0}},Lre=(yt=>({contextRandomize(ir){if(vR(ir===null||ir instanceof Uint8Array,"Expected seed to be an Uint8Array or null"),ir!==null&&FE("seed",ir,32),yt.contextRandomize(ir)===1)throw new Error("Unknow error on context randomization")},privateKeyVerify:ir=>(FE("private key",ir,32),yt.privateKeyVerify(ir)===0),privateKeyNegate(ir){switch(FE("private key",ir,32),yt.privateKeyNegate(ir)){case 0:return ir;case 1:throw new Error(wH)}},privateKeyTweakAdd(ir,_c){switch(FE("private key",ir,32),FE("tweak",_c,32),yt.privateKeyTweakAdd(ir,_c)){case 0:return ir;case 1:throw new Error(hre)}},privateKeyTweakMul(ir,_c){switch(FE("private key",ir,32),FE("tweak",_c,32),yt.privateKeyTweakMul(ir,_c)){case 0:return ir;case 1:throw new Error(pre)}},publicKeyVerify:ir=>(FE("public key",ir,[33,65]),yt.publicKeyVerify(ir)===0),publicKeyCreate(ir,_c=!0,mu){switch(FE("private key",ir,32),TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyCreate(mu,ir)){case 0:return mu;case 1:throw new Error("Private Key is invalid");case 2:throw new Error(rq)}},publicKeyConvert(ir,_c=!0,mu){switch(FE("public key",ir,[33,65]),TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyConvert(mu,ir)){case 0:return mu;case 1:throw new Error(wB);case 2:throw new Error(rq)}},publicKeyNegate(ir,_c=!0,mu){switch(FE("public key",ir,[33,65]),TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyNegate(mu,ir)){case 0:return mu;case 1:throw new Error(wB);case 2:throw new Error(wH);case 3:throw new Error(rq)}},publicKeyCombine(ir,_c=!0,mu){vR(Array.isArray(ir),"Expected public keys to be an Array"),vR(ir.length>0,"Expected public keys array will have more than zero items");for(const Mu of ir)FE("public key",Mu,[33,65]);switch(TM(_c),mu=RM(mu,_c?33:65),yt.publicKeyCombine(mu,ir)){case 0:return mu;case 1:throw new Error(wB);case 2:throw new Error("The sum of the public keys is not valid");case 3:throw new Error(rq)}},publicKeyTweakAdd(ir,_c,mu=!0,Mu){switch(FE("public key",ir,[33,65]),FE("tweak",_c,32),TM(mu),Mu=RM(Mu,mu?33:65),yt.publicKeyTweakAdd(Mu,ir,_c)){case 0:return Mu;case 1:throw new Error(wB);case 2:throw new Error(hre)}},publicKeyTweakMul(ir,_c,mu=!0,Mu){switch(FE("public key",ir,[33,65]),FE("tweak",_c,32),TM(mu),Mu=RM(Mu,mu?33:65),yt.publicKeyTweakMul(Mu,ir,_c)){case 0:return Mu;case 1:throw new Error(wB);case 2:throw new Error(pre)}},signatureNormalize(ir){switch(FE("signature",ir,64),yt.signatureNormalize(ir)){case 0:return ir;case 1:throw new Error($H)}},signatureExport(ir,_c){FE("signature",ir,64);const mu={output:_c=RM(_c,72),outputlen:72};switch(yt.signatureExport(mu,ir)){case 0:return _c.slice(0,mu.outputlen);case 1:throw new Error($H);case 2:throw new Error(wH)}},signatureImport(ir,_c){switch(FE("signature",ir),_c=RM(_c,64),yt.signatureImport(_c,ir)){case 0:return _c;case 1:throw new Error($H);case 2:throw new Error(wH)}},ecdsaSign(ir,_c,mu={},Mu){FE("message",ir,32),FE("private key",_c,32),vR(jF(mu)==="Object","Expected options to be an Object"),mu.data!==void 0&&FE("options.data",mu.data),mu.noncefn!==void 0&&vR(jF(mu.noncefn)==="Function","Expected options.noncefn to be a Function");const xu={signature:Mu=RM(Mu,64),recid:null};switch(yt.ecdsaSign(xu,ir,_c,mu.data,mu.noncefn)){case 0:return xu;case 1:throw new Error("The nonce generation function failed, or the private key was invalid");case 2:throw new Error(wH)}},ecdsaVerify(ir,_c,mu){switch(FE("signature",ir,64),FE("message",_c,32),FE("public key",mu,[33,65]),yt.ecdsaVerify(ir,_c,mu)){case 0:return!0;case 3:return!1;case 1:throw new Error($H);case 2:throw new Error(wB)}},ecdsaRecover(ir,_c,mu,Mu=!0,xu){switch(FE("signature",ir,64),vR(jF(_c)==="Number"&&_c>=0&&_c<=3,"Expected recovery id to be a Number within interval [0, 3]"),FE("message",mu,32),TM(Mu),xu=RM(xu,Mu?33:65),yt.ecdsaRecover(xu,ir,_c,mu)){case 0:return xu;case 1:throw new Error($H);case 2:throw new Error("Public key could not be recover");case 3:throw new Error(wH)}},ecdh(ir,_c,mu={},Mu){switch(FE("public key",ir,[33,65]),FE("private key",_c,32),vR(jF(mu)==="Object","Expected options to be an Object"),mu.data!==void 0&&FE("options.data",mu.data),mu.hashfn!==void 0?(vR(jF(mu.hashfn)==="Function","Expected options.hashfn to be a Function"),mu.xbuf!==void 0&&FE("options.xbuf",mu.xbuf,32),mu.ybuf!==void 0&&FE("options.ybuf",mu.ybuf,32),FE("output",Mu)):Mu=RM(Mu,32),yt.ecdh(Mu,ir,_c,mu.data,mu.hashfn,mu.xbuf,mu.ybuf)){case 0:return Mu;case 1:throw new Error(wB);case 2:throw new Error("Scalar was invalid (zero or overflow)")}}}))(lme),iT={},jN={};(function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.SECRET_KEY_LENGTH=yt.AES_IV_PLUS_TAG_LENGTH=yt.AES_TAG_LENGTH=yt.AES_IV_LENGTH=yt.UNCOMPRESSED_PUBLIC_KEY_SIZE=void 0,yt.UNCOMPRESSED_PUBLIC_KEY_SIZE=65,yt.AES_IV_LENGTH=16,yt.AES_TAG_LENGTH=16,yt.AES_IV_PLUS_TAG_LENGTH=yt.AES_IV_LENGTH+yt.AES_TAG_LENGTH,yt.SECRET_KEY_LENGTH=32})(jN);var cme=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(iT,"__esModule",{value:!0}),iT.aesDecrypt=iT.aesEncrypt=iT.getValidSecret=iT.decodeHex=iT.remove0x=void 0;var dq=Q4(),rue=cme(Lre),WF=jN;function cC(yt){return yt.startsWith("0x")||yt.startsWith("0X")?yt.slice(2):yt}iT.remove0x=cC,iT.decodeHex=function(yt){return F0.from(cC(yt),"hex")},iT.getValidSecret=function(){var yt;do yt=(0,dq.randomBytes)(WF.SECRET_KEY_LENGTH);while(!rue.default.privateKeyVerify(yt));return yt},iT.aesEncrypt=function(yt,ir){var _c=(0,dq.randomBytes)(WF.AES_IV_LENGTH),mu=(0,dq.createCipheriv)("aes-256-gcm",yt,_c),Mu=F0.concat([mu.update(ir),mu.final()]),xu=mu.getAuthTag();return F0.concat([_c,xu,Mu])},iT.aesDecrypt=function(yt,ir){var _c=ir.slice(0,WF.AES_IV_LENGTH),mu=ir.slice(WF.AES_IV_LENGTH,WF.AES_IV_PLUS_TAG_LENGTH),Mu=ir.slice(WF.AES_IV_PLUS_TAG_LENGTH),xu=(0,dq.createDecipheriv)("aes-256-gcm",yt,_c);return xu.setAuthTag(mu),F0.concat([xu.update(Mu),xu.final()])};var jZ={},h5=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(jZ,"__esModule",{value:!0});var KE=h5(bB),ZA=h5(Lre),RB=iT,GF=jN,ume=function(){function yt(ir){this.uncompressed=F0.from(ZA.default.publicKeyConvert(ir,!1)),this.compressed=F0.from(ZA.default.publicKeyConvert(ir,!0))}return yt.fromHex=function(ir){var _c=(0,RB.decodeHex)(ir);if(_c.length===GF.UNCOMPRESSED_PUBLIC_KEY_SIZE-1){var mu=F0.from([4]);return new yt(F0.concat([mu,_c]))}return new yt(_c)},yt.prototype.toHex=function(ir){return ir===void 0&&(ir=!0),ir?this.compressed.toString("hex"):this.uncompressed.toString("hex")},yt.prototype.decapsulate=function(ir){var _c=F0.concat([this.uncompressed,ir.multiply(this)]);return(0,KE.default)(_c,32,{hash:"SHA-256"})},yt.prototype.equals=function(ir){return this.uncompressed.equals(ir.uncompressed)},yt}();jZ.default=ume;var hq=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(Lw,"__esModule",{value:!0});var oT=hq(bB),OH=hq(Lre),nue=iT,NZ=hq(jZ),fme=function(){function yt(ir){if(this.secret=ir||(0,nue.getValidSecret)(),!OH.default.privateKeyVerify(this.secret))throw new Error("Invalid private key");this.publicKey=new NZ.default(F0.from(OH.default.publicKeyCreate(this.secret)))}return yt.fromHex=function(ir){return new yt((0,nue.decodeHex)(ir))},yt.prototype.toHex=function(){return"0x".concat(this.secret.toString("hex"))},yt.prototype.encapsulate=function(ir){var _c=F0.concat([this.publicKey.uncompressed,this.multiply(ir)]);return(0,oT.default)(_c,32,{hash:"SHA-256"})},yt.prototype.multiply=function(ir){return F0.from(OH.default.publicKeyTweakMul(ir.compressed,this.secret,!1))},yt.prototype.equals=function(ir){return this.secret.equals(ir.secret)},yt}();Lw.default=fme,function(yt){var ir=c&&c.__importDefault||function(Mu){return Mu&&Mu.__esModule?Mu:{default:Mu}};Object.defineProperty(yt,"__esModule",{value:!0}),yt.PublicKey=yt.PrivateKey=void 0;var _c=Lw;Object.defineProperty(yt,"PrivateKey",{enumerable:!0,get:function(){return ir(_c).default}});var mu=jZ;Object.defineProperty(yt,"PublicKey",{enumerable:!0,get:function(){return ir(mu).default}})}(lw),function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.utils=yt.PublicKey=yt.PrivateKey=yt.decrypt=yt.encrypt=void 0;var ir=lw,_c=iT,mu=jN;yt.encrypt=function(xu,l0){var E0=new ir.PrivateKey,j0=xu instanceof F0?new ir.PublicKey(xu):ir.PublicKey.fromHex(xu),M0=E0.encapsulate(j0),B0=(0,_c.aesEncrypt)(M0,l0);return F0.concat([E0.publicKey.uncompressed,B0])},yt.decrypt=function(xu,l0){var E0=xu instanceof F0?new ir.PrivateKey(xu):ir.PrivateKey.fromHex(xu),j0=new ir.PublicKey(l0.slice(0,mu.UNCOMPRESSED_PUBLIC_KEY_SIZE)),M0=l0.slice(mu.UNCOMPRESSED_PUBLIC_KEY_SIZE),B0=j0.decapsulate(E0);return(0,_c.aesDecrypt)(B0,M0)};var Mu=lw;Object.defineProperty(yt,"PrivateKey",{enumerable:!0,get:function(){return Mu.PrivateKey}}),Object.defineProperty(yt,"PublicKey",{enumerable:!0,get:function(){return Mu.PublicKey}}),yt.utils={aesDecrypt:_c.aesDecrypt,aesEncrypt:_c.aesEncrypt,decodeHex:_c.decodeHex,getValidSecret:_c.getValidSecret,remove0x:_c.remove0x}}(Nw);var YF={exports:{}};(function(yt,ir){(function(_c){var mu=Object.hasOwnProperty,Mu=Array.isArray?Array.isArray:function(a0){return Object.prototype.toString.call(a0)==="[object Array]"},xu=typeof Kv=="object"&&!0,l0=typeof Symbol=="function",E0=typeof Reflect=="object",j0=typeof setImmediate=="function"?setImmediate:setTimeout,M0=l0?E0&&typeof Reflect.ownKeys=="function"?Reflect.ownKeys:function(a0){var S0=Object.getOwnPropertyNames(a0);return S0.push.apply(S0,Object.getOwnPropertySymbols(a0)),S0}:Object.keys;function B0(){this._events={},this._conf&&q0.call(this,this._conf)}function q0(a0){a0&&(this._conf=a0,a0.delimiter&&(this.delimiter=a0.delimiter),a0.maxListeners!==_c&&(this._maxListeners=a0.maxListeners),a0.wildcard&&(this.wildcard=a0.wildcard),a0.newListener&&(this._newListener=a0.newListener),a0.removeListener&&(this._removeListener=a0.removeListener),a0.verboseMemoryLeak&&(this.verboseMemoryLeak=a0.verboseMemoryLeak),a0.ignoreErrors&&(this.ignoreErrors=a0.ignoreErrors),this.wildcard&&(this.listenerTree={}))}function y1(a0,S0){var z0="(node) warning: possible EventEmitter memory leak detected. "+a0+" listeners added. Use emitter.setMaxListeners() to increase limit.";if(this.verboseMemoryLeak&&(z0+=" Event name: "+S0+"."),Kv!==void 0&&Kv.emitWarning){var Q0=new Error(z0);Q0.name="MaxListenersExceededWarning",Q0.emitter=this,Q0.count=a0,Kv.emitWarning(Q0)}else console.error(z0),console.trace&&console.trace()}var v1=function(a0,S0,z0){var Q0=arguments.length;switch(Q0){case 0:return[];case 1:return[a0];case 2:return[a0,S0];case 3:return[a0,S0,z0];default:for(var p1=new Array(Q0);Q0--;)p1[Q0]=arguments[Q0];return p1}};function F1(a0,S0){for(var z0={},Q0=a0.length,p1=0,T1=0;T10;)if(S1===a0[n1])return T1;U1(S0)}}Object.assign(ov.prototype,{subscribe:function(a0,S0,z0){var Q0=this,p1=this._target,T1=this._emitter,U1=this._listeners,S1=function(){var n1=v1.apply(null,arguments),V1={data:n1,name:S0,original:a0};z0?z0.call(p1,V1)!==!1&&T1.emit.apply(T1,[V1.name].concat(n1)):T1.emit.apply(T1,[S0].concat(n1))};if(U1[a0])throw Error("Event '"+a0+"' is already listening");this._listenersCount++,T1._newListener&&T1._removeListener&&!Q0._onNewListener?(this._onNewListener=function(n1){n1===S0&&U1[a0]===null&&(U1[a0]=S1,Q0._on.call(p1,a0,S1))},T1.on("newListener",this._onNewListener),this._onRemoveListener=function(n1){n1===S0&&!T1.hasListeners(n1)&&U1[a0]&&(U1[a0]=null,Q0._off.call(p1,a0,S1))},U1[a0]=null,T1.on("removeListener",this._onRemoveListener)):(U1[a0]=S1,Q0._on.call(p1,a0,S1))},unsubscribe:function(a0){var S0,z0,Q0,p1=this,T1=this._listeners,U1=this._emitter,S1=this._off,n1=this._target;if(a0&&typeof a0!="string")throw TypeError("event must be a string");function V1(){p1._onNewListener&&(U1.off("newListener",p1._onNewListener),U1.off("removeListener",p1._onRemoveListener),p1._onNewListener=null,p1._onRemoveListener=null);var J1=Fy.call(U1,p1);U1._observers.splice(J1,1)}if(a0){if(!(S0=T1[a0]))return;S1.call(n1,a0,S0),delete T1[a0],--this._listenersCount||V1()}else{for(Q0=(z0=M0(T1)).length;Q0-- >0;)a0=z0[Q0],S1.call(n1,a0,T1[a0]);this._listeners={},this._listenersCount=0,V1()}}});var hy=xv(["function"]),oy=xv(["object","function"]);function fy(a0,S0,z0){var Q0,p1,T1,U1=0,S1=new a0(function(n1,V1,J1){function wv(){p1&&(p1=null),U1&&(clearTimeout(U1),U1=0)}z0=bv(z0,{timeout:0,overload:!1},{timeout:function(ty,gy){return(typeof(ty*=1)!="number"||ty<0||!Number.isFinite(ty))&&gy("timeout must be a positive number"),ty}}),Q0=!z0.overload&&typeof a0.prototype.cancel=="function"&&typeof J1=="function";var Sv=function(ty){wv(),n1(ty)},Hv=function(ty){wv(),V1(ty)};Q0?S0(Sv,Hv,J1):(p1=[function(ty){Hv(ty||Error("canceled"))}],S0(Sv,Hv,function(ty){if(T1)throw Error("Unable to subscribe on cancel event asynchronously");if(typeof ty!="function")throw TypeError("onCancel callback must be a function");p1.push(ty)}),T1=!0),z0.timeout>0&&(U1=setTimeout(function(){var ty=Error("timeout");ty.code="ETIMEDOUT",U1=0,S1.cancel(ty),V1(ty)},z0.timeout))});return Q0||(S1.cancel=function(n1){if(p1){for(var V1=p1.length,J1=1;J10;)(Sv=Av[S1])!=="_listeners"&&(Dv=qv(a0,S0,z0[Sv],Q0+1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv);return ry}if(Jv==="**"){for((yv=Q0+1===p1||Q0+2===p1&&Fv==="*")&&z0._listeners&&(ry=qv(a0,S0,z0,p1,p1)),S1=(Av=M0(z0)).length;S1-- >0;)(Sv=Av[S1])!=="_listeners"&&(Sv==="*"||Sv==="**"?(z0[Sv]._listeners&&!yv&&(Dv=qv(a0,S0,z0[Sv],p1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv),Dv=qv(a0,S0,z0[Sv],Q0,p1)):Dv=qv(a0,S0,z0[Sv],Sv===Fv?Q0+2:Q0,p1),Dv&&(ry?ry.push.apply(ry,Dv):ry=Dv));return ry}z0[Jv]&&(ry=qv(a0,S0,z0[Jv],Q0+1,p1))}if((Hv=z0["*"])&&qv(a0,S0,Hv,Q0+1,p1),ty=z0["**"])if(Q00;)(Sv=Av[S1])!=="_listeners"&&(Sv===Fv?qv(a0,S0,ty[Sv],Q0+2,p1):Sv===Jv?qv(a0,S0,ty[Sv],Q0+1,p1):((gy={})[Sv]=ty[Sv],qv(a0,S0,{"**":gy},Q0+1,p1)));else ty._listeners?qv(a0,S0,ty,p1,p1):ty["*"]&&ty["*"]._listeners&&qv(a0,S0,ty["*"],p1,p1);return ry}function Qv(a0,S0,z0){var Q0,p1,T1=0,U1=0,S1=this.delimiter,n1=S1.length;if(typeof a0=="string")if((Q0=a0.indexOf(S1))!==-1){p1=new Array(5);do p1[T1++]=a0.slice(U1,Q0),U1=Q0+n1;while((Q0=a0.indexOf(S1,U1))!==-1);p1[T1++]=a0.slice(U1)}else p1=[a0],T1=1;else p1=a0,T1=a0.length;if(T1>1){for(Q0=0;Q0+10&&J1._listeners.length>this._maxListeners&&(J1._listeners.warned=!0,y1.call(this,J1._listeners.length,V1))):J1._listeners=S0,!0;return!0}function T0(a0,S0,z0,Q0){for(var p1,T1,U1,S1,n1=M0(a0),V1=n1.length,J1=a0._listeners;V1-- >0;)p1=a0[T1=n1[V1]],U1=T1==="_listeners"?z0:z0?z0.concat(T1):[T1],S1=Q0||typeof T1=="symbol",J1&&S0.push(S1?U1:U1.join(this.delimiter)),typeof p1=="object"&&T0.call(this,p1,S0,U1,S1);return S0}function X0(a0){for(var S0,z0,Q0,p1=M0(a0),T1=p1.length;T1-- >0;)(S0=a0[z0=p1[T1]])&&(Q0=!0,z0==="_listeners"||X0(S0)||delete a0[z0]);return Q0}function s0(a0,S0,z0){this.emitter=a0,this.event=S0,this.listener=z0}function g0(a0,S0,z0){if(z0===!0)p1=!0;else if(z0===!1)Q0=!0;else{if(!z0||typeof z0!="object")throw TypeError("options should be an object or true");var Q0=z0.async,p1=z0.promisify,T1=z0.nextTick,U1=z0.objectify}if(Q0||T1||p1){var S1=S0,n1=S0._origin||S0;if(T1&&!xu)throw Error("process.nextTick is not supported");p1===_c&&(p1=S0.constructor.name==="AsyncFunction"),S0=function(){var V1=arguments,J1=this,wv=this.event;return p1?T1?Promise.resolve():new Promise(function(Sv){j0(Sv)}).then(function(){return J1.event=wv,S1.apply(J1,V1)}):(T1?$2:j0)(function(){J1.event=wv,S1.apply(J1,V1)})},S0._async=!0,S0._origin=n1}return[S0,U1?new s0(this,a0,S0):this]}function d0(a0){this._events={},this._newListener=!1,this._removeListener=!1,this.verboseMemoryLeak=!1,q0.call(this,a0)}s0.prototype.off=function(){return this.emitter.off(this.event,this.listener),this},d0.EventEmitter2=d0,d0.prototype.listenTo=function(a0,S0,z0){if(typeof a0!="object")throw TypeError("target musts be an object");var Q0=this;function p1(T1){if(typeof T1!="object")throw TypeError("events must be an object");var U1,S1=z0.reducers,n1=Fy.call(Q0,a0);U1=n1===-1?new ov(Q0,a0,z0):Q0._observers[n1];for(var V1,J1=M0(T1),wv=J1.length,Sv=typeof S1=="function",Hv=0;Hv0;)Q0=z0[p1],a0&&Q0._target!==a0||(Q0.unsubscribe(S0),T1=!0);return T1},d0.prototype.delimiter=".",d0.prototype.setMaxListeners=function(a0){a0!==_c&&(this._maxListeners=a0,this._conf||(this._conf={}),this._conf.maxListeners=a0)},d0.prototype.getMaxListeners=function(){return this._maxListeners},d0.prototype.event="",d0.prototype.once=function(a0,S0,z0){return this._once(a0,S0,!1,z0)},d0.prototype.prependOnceListener=function(a0,S0,z0){return this._once(a0,S0,!0,z0)},d0.prototype._once=function(a0,S0,z0,Q0){return this._many(a0,1,S0,z0,Q0)},d0.prototype.many=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!1,Q0)},d0.prototype.prependMany=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!0,Q0)},d0.prototype._many=function(a0,S0,z0,Q0,p1){var T1=this;if(typeof z0!="function")throw new Error("many only accepts instances of Function");function U1(){return--S0==0&&T1.off(a0,U1),z0.apply(this,arguments)}return U1._origin=z0,this._on(a0,U1,Q0,p1)},d0.prototype.emit=function(){if(!this._events&&!this._all)return!1;this._events||B0.call(this);var a0,S0,z0,Q0,p1,T1,U1=arguments[0],S1=this.wildcard;if(U1==="newListener"&&!this._newListener&&!this._events.newListener)return!1;if(S1&&(a0=U1,U1!=="newListener"&&U1!=="removeListener"&&typeof U1=="object")){if(z0=U1.length,l0){for(Q0=0;Q03)for(S0=new Array(V1-1),p1=1;p13)for(z0=new Array(J1-1),T1=1;T10&&this._events[a0].length>this._maxListeners&&(this._events[a0].warned=!0,y1.call(this,this._events[a0].length,a0))):this._events[a0]=S0,T1)},d0.prototype.off=function(a0,S0){if(typeof S0!="function")throw new Error("removeListener only takes instances of Function");var z0,Q0=[];if(this.wildcard){var p1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();if(!(Q0=qv.call(this,null,p1,this.listenerTree,0)))return this}else{if(!this._events[a0])return this;z0=this._events[a0],Q0.push({_listeners:z0})}for(var T1=0;T10){for(z0=0,Q0=(S0=this._all).length;z00;)typeof(z0=U1[S0[p1]])=="function"?Q0.push(z0):Q0.push.apply(Q0,z0);return Q0}if(this.wildcard){if(!(T1=this.listenerTree))return[];var S1=[],n1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S1,n1,T1,0),S1}return U1&&(z0=U1[a0])?typeof z0=="function"?[z0]:z0:[]},d0.prototype.eventNames=function(a0){var S0=this._events;return this.wildcard?T0.call(this,this.listenerTree,[],null,a0):S0?M0(S0):[]},d0.prototype.listenerCount=function(a0){return this.listeners(a0).length},d0.prototype.hasListeners=function(a0){if(this.wildcard){var S0=[],z0=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S0,z0,this.listenerTree,0),S0.length>0}var Q0=this._events,p1=this._all;return!!(p1&&p1.length||Q0&&(a0===_c?M0(Q0).length:Q0[a0]))},d0.prototype.listenersAny=function(){return this._all?this._all:[]},d0.prototype.waitFor=function(a0,S0){var z0=this,Q0=typeof S0;return Q0==="number"?S0={timeout:S0}:Q0==="function"&&(S0={filter:S0}),fy((S0=bv(S0,{timeout:0,filter:_c,handleError:!1,Promise,overload:!1},{filter:hy,Promise:gv})).Promise,function(p1,T1,U1){function S1(){var n1=S0.filter;if(!n1||n1.apply(z0,arguments))if(z0.off(a0,S1),S0.handleError){var V1=arguments[0];V1?T1(V1):p1(v1.apply(null,arguments).slice(1))}else p1(v1.apply(null,arguments))}U1(function(){z0.off(a0,S1)}),z0._on(a0,S1,!1)},{timeout:S0.timeout,overload:S0.overload})};var c0=d0.prototype;Object.defineProperties(d0,{defaultMaxListeners:{get:function(){return c0._maxListeners},set:function(a0){if(typeof a0!="number"||a0<0||Number.isNaN(a0))throw TypeError("n must be a non-negative number");c0._maxListeners=a0},enumerable:!0},once:{value:function(a0,S0,z0){return fy((z0=bv(z0,{Promise,timeout:0,overload:!1},{Promise:gv})).Promise,function(Q0,p1,T1){var U1;if(typeof a0.addEventListener=="function")return U1=function(){Q0(v1.apply(null,arguments))},T1(function(){a0.removeEventListener(S0,U1)}),void a0.addEventListener(S0,U1,{once:!0});var S1,n1=function(){S1&&a0.removeListener("error",S1),Q0(v1.apply(null,arguments))};S0!=="error"&&(S1=function(V1){a0.removeListener(S0,n1),p1(V1)},a0.once("error",S1)),T1(function(){S1&&a0.removeListener("error",S1),a0.removeListener(S0,n1)}),a0.once(S0,n1)},{timeout:z0.timeout,overload:z0.overload})},writable:!0,configurable:!0}}),Object.defineProperties(c0,{_maxListeners:{value:10,writable:!0,configurable:!0},_observers:{value:null,writable:!0,configurable:!0}}),yt.exports=d0})()})(YF);var LZ,PH=YF.exports,iue=new Uint8Array(16);function dme(){if(!LZ&&!(LZ=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return LZ(iue)}var oue=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function aue(yt){return typeof yt=="string"&&oue.test(yt)}for(var b9=[],Bre=0;Bre<256;++Bre)b9.push((Bre+256).toString(16).substr(1));function BZ(yt,ir,_c){var mu=(yt=yt||{}).random||(yt.rng||dme)();return mu[6]=15&mu[6]|64,mu[8]=63&mu[8]|128,function(Mu){var xu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,l0=(b9[Mu[xu+0]]+b9[Mu[xu+1]]+b9[Mu[xu+2]]+b9[Mu[xu+3]]+"-"+b9[Mu[xu+4]]+b9[Mu[xu+5]]+"-"+b9[Mu[xu+6]]+b9[Mu[xu+7]]+"-"+b9[Mu[xu+8]]+b9[Mu[xu+9]]+"-"+b9[Mu[xu+10]]+b9[Mu[xu+11]]+b9[Mu[xu+12]]+b9[Mu[xu+13]]+b9[Mu[xu+14]]+b9[Mu[xu+15]]).toLowerCase();if(!aue(l0))throw TypeError("Stringified UUID is invalid");return l0}(mu)}const KO=Object.create(null);KO.open="0",KO.close="1",KO.ping="2",KO.pong="3",KO.message="4",KO.upgrade="5",KO.noop="6";const jH=Object.create(null);Object.keys(KO).forEach(yt=>{jH[KO[yt]]=yt});const sue={type:"error",data:"parser error"},lue=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",cue=typeof ArrayBuffer=="function",Dre=yt=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(yt):yt&&yt.buffer instanceof ArrayBuffer,pq=({type:yt,data:ir},_c,mu)=>lue&&ir instanceof Blob?_c?mu(ir):DZ(ir,mu):cue&&(ir instanceof ArrayBuffer||Dre(ir))?_c?mu(ir):DZ(new Blob([ir]),mu):mu(KO[yt]+(ir||"")),DZ=(yt,ir)=>{const _c=new FileReader;return _c.onload=function(){const mu=_c.result.split(",")[1];ir("b"+(mu||""))},_c.readAsDataURL(yt)};function uue(yt){return yt instanceof Uint8Array?yt:yt instanceof ArrayBuffer?new Uint8Array(yt):new Uint8Array(yt.buffer,yt.byteOffset,yt.byteLength)}let Fre;function hme(yt,ir){return lue&&yt.data instanceof Blob?yt.data.arrayBuffer().then(uue).then(ir):cue&&(yt.data instanceof ArrayBuffer||Dre(yt.data))?ir(uue(yt.data)):void pq(yt,!1,_c=>{Fre||(Fre=new TextEncoder),ir(Fre.encode(_c))})}const NH=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let yt=0;yt<64;yt++)NH["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(yt)]=yt;const w9=typeof ArrayBuffer=="function",mq=(yt,ir)=>{if(typeof yt!="string")return{type:"message",data:p5(yt,ir)};const _c=yt.charAt(0);return _c==="b"?{type:"message",data:fue(yt.substring(1),ir)}:jH[_c]?yt.length>1?{type:jH[_c],data:yt.substring(1)}:{type:jH[_c]}:sue},fue=(yt,ir)=>{if(w9){const _c=(mu=>{let Mu,xu,l0,E0,j0,M0=.75*mu.length,B0=mu.length,q0=0;mu[mu.length-1]==="="&&(M0--,mu[mu.length-2]==="="&&M0--);const y1=new ArrayBuffer(M0),v1=new Uint8Array(y1);for(Mu=0;Mu>4,v1[q0++]=(15&l0)<<4|E0>>2,v1[q0++]=(3&E0)<<6|63&j0;return y1})(yt);return p5(_c,ir)}return{base64:!0,data:yt}},p5=(yt,ir)=>ir==="blob"?yt instanceof Blob?yt:new Blob([yt]):yt instanceof ArrayBuffer?yt:yt.buffer,gq="";let Ure;function fS(yt){if(yt)return function(ir){for(var _c in fS.prototype)ir[_c]=fS.prototype[_c];return ir}(yt)}fS.prototype.on=fS.prototype.addEventListener=function(yt,ir){return this._callbacks=this._callbacks||{},(this._callbacks["$"+yt]=this._callbacks["$"+yt]||[]).push(ir),this},fS.prototype.once=function(yt,ir){function _c(){this.off(yt,_c),ir.apply(this,arguments)}return _c.fn=ir,this.on(yt,_c),this},fS.prototype.off=fS.prototype.removeListener=fS.prototype.removeAllListeners=fS.prototype.removeEventListener=function(yt,ir){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var _c,mu=this._callbacks["$"+yt];if(!mu)return this;if(arguments.length==1)return delete this._callbacks["$"+yt],this;for(var Mu=0;Mu(yt.hasOwnProperty(mu)&&(_c[mu]=yt[mu]),_c),{})}const Hre=xR.setTimeout,due=xR.clearTimeout;function vq(yt,ir){ir.useNativeTimers?(yt.setTimeoutFn=Hre.bind(xR),yt.clearTimeoutFn=due.bind(xR)):(yt.setTimeoutFn=xR.setTimeout.bind(xR),yt.clearTimeoutFn=xR.clearTimeout.bind(xR))}class Kre extends Error{constructor(ir,_c,mu){super(ir),this.description=_c,this.context=mu,this.type="TransportError"}}class Vre extends fS{constructor(ir){super(),this.writable=!1,vq(this,ir),this.opts=ir,this.query=ir.query,this.socket=ir.socket}onError(ir,_c,mu){return super.emitReserved("error",new Kre(ir,_c,mu)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return this.readyState!=="opening"&&this.readyState!=="open"||(this.doClose(),this.onClose()),this}send(ir){this.readyState==="open"&&this.write(ir)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(ir){const _c=mq(ir,this.socket.binaryType);this.onPacket(_c)}onPacket(ir){super.emitReserved("packet",ir)}onClose(ir){this.readyState="closed",super.emitReserved("close",ir)}pause(ir){}createUri(ir,_c={}){return ir+"://"+this._hostname()+this._port()+this.opts.path+this._query(_c)}_hostname(){const ir=this.opts.hostname;return ir.indexOf(":")===-1?ir:"["+ir+"]"}_port(){return this.opts.port&&(this.opts.secure&&+(this.opts.port!==443)||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(ir){const _c=function(mu){let Mu="";for(let xu in mu)mu.hasOwnProperty(xu)&&(Mu.length&&(Mu+="&"),Mu+=encodeURIComponent(xu)+"="+encodeURIComponent(mu[xu]));return Mu}(ir);return _c.length?"?"+_c:""}}const hue="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),ZF=64,pme={};let FZ,pue=0,yq=0;function qre(yt){let ir="";do ir=hue[yt%ZF]+ir,yt=Math.floor(yt/ZF);while(yt>0);return ir}function UZ(){const yt=qre(+new Date);return yt!==FZ?(pue=0,FZ=yt):yt+"."+qre(pue++)}for(;yq{var Mu;mu.readyState===3&&((Mu=this.opts.cookieJar)===null||Mu===void 0||Mu.parseCookies(mu)),mu.readyState===4&&(mu.status===200||mu.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof mu.status=="number"?mu.status:0)},0))},mu.send(this.data)}catch(Mu){return void this.setTimeoutFn(()=>{this.onError(Mu)},0)}typeof document<"u"&&(this.index=kR.requestsCount++,kR.requests[this.index]=this)}onError(ir){this.emitReserved("error",ir,this.xhr),this.cleanup(!0)}cleanup(ir){if(this.xhr!==void 0&&this.xhr!==null){if(this.xhr.onreadystatechange=mme,ir)try{this.xhr.abort()}catch{}typeof document<"u"&&delete kR.requests[this.index],this.xhr=null}}onLoad(){const ir=this.xhr.responseText;ir!==null&&(this.emitReserved("data",ir),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}function mue(){for(let yt in kR.requests)kR.requests.hasOwnProperty(yt)&&kR.requests[yt].abort()}kR.requestsCount=0,kR.requests={},typeof document<"u"&&(typeof attachEvent=="function"?attachEvent("onunload",mue):typeof addEventListener=="function"&&addEventListener("onpagehide"in xR?"pagehide":"unload",mue,!1));const bq=typeof Promise=="function"&&typeof Promise.resolve=="function"?yt=>Promise.resolve().then(yt):(yt,ir)=>ir(yt,0),wq=xR.WebSocket||xR.MozWebSocket,zZ=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";function vme(yt,ir){return yt.type==="message"&&typeof yt.data!="string"&&ir[0]>=48&&ir[0]<=54}const gue={websocket:class extends Vre{constructor(yt){super(yt),this.supportsBinary=!yt.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const yt=this.uri(),ir=this.opts.protocols,_c=zZ?{}:zre(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(_c.headers=this.opts.extraHeaders);try{this.ws=zZ?new wq(yt,ir,_c):ir?new wq(yt,ir):new wq(yt)}catch(mu){return this.emitReserved("error",mu)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=yt=>this.onClose({description:"websocket connection closed",context:yt}),this.ws.onmessage=yt=>this.onData(yt.data),this.ws.onerror=yt=>this.onError("websocket error",yt)}write(yt){this.writable=!1;for(let ir=0;ir{try{this.ws.send(Mu)}catch{}mu&&bq(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){this.ws!==void 0&&(this.ws.close(),this.ws=null)}uri(){const yt=this.opts.secure?"wss":"ws",ir=this.query||{};return this.opts.timestampRequests&&(ir[this.opts.timestampParam]=UZ()),this.supportsBinary||(ir.b64=1),this.createUri(yt,ir)}check(){return!!wq}},webtransport:class extends Vre{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(yt=>{this.onError("webtransport error",yt)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(yt=>{const ir=yt.readable.getReader();let _c;this.writer=yt.writable.getWriter();const mu=()=>{ir.read().then(({done:xu,value:l0})=>{xu||(_c||l0.byteLength!==1||l0[0]!==54?(this.onPacket(function(E0,j0,M0){Ure||(Ure=new TextDecoder);const B0=j0||E0[0]<48||E0[0]>54;return mq(B0?E0:Ure.decode(E0),"arraybuffer")}(l0,_c)),_c=!1):_c=!0,mu())}).catch(xu=>{})};mu();const Mu=this.query.sid?`0{"sid":"${this.query.sid}"}`:"0";this.writer.write(new TextEncoder().encode(Mu)).then(()=>this.onOpen())})}))}write(yt){this.writable=!1;for(let ir=0;ir{vme(_c,Mu)&&this.writer.write(Uint8Array.of(54)),this.writer.write(Mu).then(()=>{mu&&bq(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})})}}doClose(){var yt;(yt=this.transport)===null||yt===void 0||yt.close()}},polling:class extends Vre{constructor(yt){if(super(yt),this.polling=!1,typeof location<"u"){const _c=location.protocol==="https:";let mu=location.port;mu||(mu=_c?"443":"80"),this.xd=typeof location<"u"&&yt.hostname!==location.hostname||mu!==yt.port}const ir=yt&&yt.forceBase64;this.supportsBinary=gme&&!ir,this.opts.withCredentials&&(this.cookieJar=void 0)}get name(){return"polling"}doOpen(){this.poll()}pause(yt){this.readyState="pausing";const ir=()=>{this.readyState="paused",yt()};if(this.polling||!this.writable){let _c=0;this.polling&&(_c++,this.once("pollComplete",function(){--_c||ir()})),this.writable||(_c++,this.once("drain",function(){--_c||ir()}))}else ir()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(yt){((ir,_c)=>{const mu=ir.split(gq),Mu=[];for(let xu=0;xu{if(this.readyState==="opening"&&ir.type==="open"&&this.onOpen(),ir.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(ir)}),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const yt=()=>{this.write([{type:"close"}])};this.readyState==="open"?yt():this.once("open",yt)}write(yt){this.writable=!1,((ir,_c)=>{const mu=ir.length,Mu=new Array(mu);let xu=0;ir.forEach((l0,E0)=>{pq(l0,!1,j0=>{Mu[E0]=j0,++xu===mu&&_c(Mu.join(gq))})})})(yt,ir=>{this.doWrite(ir,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const yt=this.opts.secure?"https":"http",ir=this.query||{};return this.opts.timestampRequests!==!1&&(ir[this.opts.timestampParam]=UZ()),this.supportsBinary||ir.sid||(ir.b64=1),this.createUri(yt,ir)}request(yt={}){return Object.assign(yt,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new kR(this.uri(),yt)}doWrite(yt,ir){const _c=this.request({method:"POST",data:yt});_c.on("success",ir),_c.on("error",(mu,Mu)=>{this.onError("xhr post error",mu,Mu)})}doPoll(){const yt=this.request();yt.on("data",this.onData.bind(this)),yt.on("error",(ir,_c)=>{this.onError("xhr poll error",ir,_c)}),this.pollXhr=yt}}},vue=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,HZ=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function KZ(yt){const ir=yt,_c=yt.indexOf("["),mu=yt.indexOf("]");_c!=-1&&mu!=-1&&(yt=yt.substring(0,_c)+yt.substring(_c,mu).replace(/:/g,";")+yt.substring(mu,yt.length));let Mu=vue.exec(yt||""),xu={},l0=14;for(;l0--;)xu[HZ[l0]]=Mu[l0]||"";return _c!=-1&&mu!=-1&&(xu.source=ir,xu.host=xu.host.substring(1,xu.host.length-1).replace(/;/g,":"),xu.authority=xu.authority.replace("[","").replace("]","").replace(/;/g,":"),xu.ipv6uri=!0),xu.pathNames=function(E0,j0){const M0=j0.replace(/\/{2,9}/g,"/").split("/");return j0.slice(0,1)!="/"&&j0.length!==0||M0.splice(0,1),j0.slice(-1)=="/"&&M0.splice(M0.length-1,1),M0}(0,xu.path),xu.queryKey=function(E0,j0){const M0={};return j0.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(B0,q0,y1){q0&&(M0[q0]=y1)}),M0}(0,xu.query),xu}let Gre=class cee extends fS{constructor(ir,_c={}){super(),this.writeBuffer=[],ir&&typeof ir=="object"&&(_c=ir,ir=null),ir?(ir=KZ(ir),_c.hostname=ir.host,_c.secure=ir.protocol==="https"||ir.protocol==="wss",_c.port=ir.port,ir.query&&(_c.query=ir.query)):_c.host&&(_c.hostname=KZ(_c.host).host),vq(this,_c),this.secure=_c.secure!=null?_c.secure:typeof location<"u"&&location.protocol==="https:",_c.hostname&&!_c.port&&(_c.port=this.secure?"443":"80"),this.hostname=_c.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=_c.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=_c.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},_c),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=function(mu){let Mu={},xu=mu.split("&");for(let l0=0,E0=xu.length;l0{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(ir){const _c=Object.assign({},this.opts.query);_c.EIO=4,_c.transport=ir,this.id&&(_c.sid=this.id);const mu=Object.assign({},this.opts,{query:_c,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[ir]);return new gue[ir](mu)}open(){let ir;if(this.opts.rememberUpgrade&&cee.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)ir="websocket";else{if(this.transports.length===0)return void this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);ir=this.transports[0]}this.readyState="opening";try{ir=this.createTransport(ir)}catch{return this.transports.shift(),void this.open()}ir.open(),this.setTransport(ir)}setTransport(ir){this.transport&&this.transport.removeAllListeners(),this.transport=ir,ir.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",_c=>this.onClose("transport close",_c))}probe(ir){let _c=this.createTransport(ir),mu=!1;cee.priorWebsocketSuccess=!1;const Mu=()=>{mu||(_c.send([{type:"ping",data:"probe"}]),_c.once("packet",q0=>{if(!mu)if(q0.type==="pong"&&q0.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",_c),!_c)return;cee.priorWebsocketSuccess=_c.name==="websocket",this.transport.pause(()=>{mu||this.readyState!=="closed"&&(B0(),this.setTransport(_c),_c.send([{type:"upgrade"}]),this.emitReserved("upgrade",_c),_c=null,this.upgrading=!1,this.flush())})}else{const y1=new Error("probe error");y1.transport=_c.name,this.emitReserved("upgradeError",y1)}}))};function xu(){mu||(mu=!0,B0(),_c.close(),_c=null)}const l0=q0=>{const y1=new Error("probe error: "+q0);y1.transport=_c.name,xu(),this.emitReserved("upgradeError",y1)};function E0(){l0("transport closed")}function j0(){l0("socket closed")}function M0(q0){_c&&q0.name!==_c.name&&xu()}const B0=()=>{_c.removeListener("open",Mu),_c.removeListener("error",l0),_c.removeListener("close",E0),this.off("close",j0),this.off("upgrading",M0)};_c.once("open",Mu),_c.once("error",l0),_c.once("close",E0),this.once("close",j0),this.once("upgrading",M0),this.upgrades.indexOf("webtransport")!==-1&&ir!=="webtransport"?this.setTimeoutFn(()=>{mu||_c.open()},200):_c.open()}onOpen(){if(this.readyState="open",cee.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let ir=0;const _c=this.upgrades.length;for(;ir<_c;ir++)this.probe(this.upgrades[ir])}}onPacket(ir){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",ir),this.emitReserved("heartbeat"),ir.type){case"open":this.onHandshake(JSON.parse(ir.data));break;case"ping":this.resetPingTimeout(),this.sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong");break;case"error":const _c=new Error("server error");_c.code=ir.data,this.onError(_c);break;case"message":this.emitReserved("data",ir.data),this.emitReserved("message",ir.data)}}onHandshake(ir){this.emitReserved("handshake",ir),this.id=ir.sid,this.transport.query.sid=ir.sid,this.upgrades=this.filterUpgrades(ir.upgrades),this.pingInterval=ir.pingInterval,this.pingTimeout=ir.pingTimeout,this.maxPayload=ir.maxPayload,this.onOpen(),this.readyState!=="closed"&&this.resetPingTimeout()}resetPingTimeout(){this.clearTimeoutFn(this.pingTimeoutTimer),this.pingTimeoutTimer=this.setTimeoutFn(()=>{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const ir=this.getWritablePackets();this.transport.send(ir),this.prevBufferLen=ir.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let ir=1;for(let mu=0;mu=57344?E0+=3:(j0++,E0+=4);return E0}(_c):Math.ceil(1.33*(_c.byteLength||_c.size))),mu>0&&ir>this.maxPayload)return this.writeBuffer.slice(0,mu);ir+=2}var _c;return this.writeBuffer}write(ir,_c,mu){return this.sendPacket("message",ir,_c,mu),this}send(ir,_c,mu){return this.sendPacket("message",ir,_c,mu),this}sendPacket(ir,_c,mu,Mu){if(typeof _c=="function"&&(Mu=_c,_c=void 0),typeof mu=="function"&&(Mu=mu,mu=null),this.readyState==="closing"||this.readyState==="closed")return;(mu=mu||{}).compress=mu.compress!==!1;const xu={type:ir,data:_c,options:mu};this.emitReserved("packetCreate",xu),this.writeBuffer.push(xu),Mu&&this.once("flush",Mu),this.flush()}close(){const ir=()=>{this.onClose("forced close"),this.transport.close()},_c=()=>{this.off("upgrade",_c),this.off("upgradeError",_c),ir()},mu=()=>{this.once("upgrade",_c),this.once("upgradeError",_c)};return this.readyState!=="opening"&&this.readyState!=="open"||(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?mu():ir()}):this.upgrading?mu():ir()),this}onError(ir){cee.priorWebsocketSuccess=!1,this.emitReserved("error",ir),this.onClose("transport error",ir)}onClose(ir,_c){this.readyState!=="opening"&&this.readyState!=="open"&&this.readyState!=="closing"||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",ir,_c),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(ir){const _c=[];let mu=0;const Mu=ir.length;for(;mutypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(yt):yt.buffer instanceof ArrayBuffer,Yre=Object.prototype.toString,bme=typeof Blob=="function"||typeof Blob<"u"&&Yre.call(Blob)==="[object BlobConstructor]",wme=typeof File=="function"||typeof File<"u"&&Yre.call(File)==="[object FileConstructor]";function LM(yt){return yue&&(yt instanceof ArrayBuffer||yme(yt))||bme&&yt instanceof Blob||wme&&yt instanceof File}function $q(yt,ir){if(!yt||typeof yt!="object")return!1;if(Array.isArray(yt)){for(let _c=0,mu=yt.length;_c=0&&yt.num{delete this.acks[ir];for(let l0=0;l0{this.io.clearTimeoutFn(xu),_c.apply(this,[null,...l0])}}emitWithAck(ir,..._c){const mu=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((Mu,xu)=>{_c.push((l0,E0)=>mu?l0?xu(l0):Mu(E0):Mu(l0)),this.emit(ir,..._c)})}_addToQueue(ir){let _c;typeof ir[ir.length-1]=="function"&&(_c=ir.pop());const mu={id:this._queueSeq++,tryCount:0,pending:!1,args:ir,flags:Object.assign({fromQueue:!0},this.flags)};ir.push((Mu,...xu)=>{if(mu===this._queue[0])return Mu!==null?mu.tryCount>this._opts.retries&&(this._queue.shift(),_c&&_c(Mu)):(this._queue.shift(),_c&&_c(null,...xu)),mu.pending=!1,this._drainQueue()}),this._queue.push(mu),this._drainQueue()}_drainQueue(ir=!1){if(!this.connected||this._queue.length===0)return;const _c=this._queue[0];_c.pending&&!ir||(_c.pending=!0,_c.tryCount++,this.flags=_c.flags,this.emit.apply(this,_c.args))}packet(ir){ir.nsp=this.nsp,this.io._packet(ir)}onopen(){typeof this.auth=="function"?this.auth(ir=>{this._sendConnectPacket(ir)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(ir){this.packet({type:VE.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},ir):ir})}onerror(ir){this.connected||this.emitReserved("connect_error",ir)}onclose(ir,_c){this.connected=!1,delete this.id,this.emitReserved("disconnect",ir,_c)}onpacket(ir){if(ir.nsp===this.nsp)switch(ir.type){case VE.CONNECT:ir.data&&ir.data.sid?this.onconnect(ir.data.sid,ir.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case VE.EVENT:case VE.BINARY_EVENT:this.onevent(ir);break;case VE.ACK:case VE.BINARY_ACK:this.onack(ir);break;case VE.DISCONNECT:this.ondisconnect();break;case VE.CONNECT_ERROR:this.destroy();const _c=new Error(ir.data.message);_c.data=ir.data.data,this.emitReserved("connect_error",_c)}}onevent(ir){const _c=ir.data||[];ir.id!=null&&_c.push(this.ack(ir.id)),this.connected?this.emitEvent(_c):this.receiveBuffer.push(Object.freeze(_c))}emitEvent(ir){if(this._anyListeners&&this._anyListeners.length){const _c=this._anyListeners.slice();for(const mu of _c)mu.apply(this,ir)}super.emit.apply(this,ir),this._pid&&ir.length&&typeof ir[ir.length-1]=="string"&&(this._lastOffset=ir[ir.length-1])}ack(ir){const _c=this;let mu=!1;return function(...Mu){mu||(mu=!0,_c.packet({type:VE.ACK,id:ir,data:Mu}))}}onack(ir){const _c=this.acks[ir.id];typeof _c=="function"&&(_c.apply(this,ir.data),delete this.acks[ir.id])}onconnect(ir,_c){this.id=ir,this.recovered=_c&&this._pid===_c,this._pid=_c,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(ir=>this.emitEvent(ir)),this.receiveBuffer=[],this.sendBuffer.forEach(ir=>{this.notifyOutgoingListeners(ir),this.packet(ir)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(ir=>ir()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:VE.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(ir){return this.flags.compress=ir,this}get volatile(){return this.flags.volatile=!0,this}timeout(ir){return this.flags.timeout=ir,this}onAny(ir){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(ir),this}prependAny(ir){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(ir),this}offAny(ir){if(!this._anyListeners)return this;if(ir){const _c=this._anyListeners;for(let mu=0;mu<_c.length;mu++)if(ir===_c[mu])return _c.splice(mu,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(ir){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(ir),this}prependAnyOutgoing(ir){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(ir),this}offAnyOutgoing(ir){if(!this._anyOutgoingListeners)return this;if(ir){const _c=this._anyOutgoingListeners;for(let mu=0;mu<_c.length;mu++)if(ir===_c[mu])return _c.splice(mu,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(ir){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const _c=this._anyOutgoingListeners.slice();for(const mu of _c)mu.apply(this,ir.data)}}}function BH(yt){yt=yt||{},this.ms=yt.min||100,this.max=yt.max||1e4,this.factor=yt.factor||2,this.jitter=yt.jitter>0&&yt.jitter<=1?yt.jitter:0,this.attempts=0}BH.prototype.duration=function(){var yt=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var ir=Math.random(),_c=Math.floor(ir*this.jitter*yt);yt=1&Math.floor(10*ir)?yt+_c:yt-_c}return 0|Math.min(yt,this.max)},BH.prototype.reset=function(){this.attempts=0},BH.prototype.setMin=function(yt){this.ms=yt},BH.prototype.setMax=function(yt){this.max=yt},BH.prototype.setJitter=function(yt){this.jitter=yt};class Aq extends fS{constructor(ir,_c){var mu;super(),this.nsps={},this.subs=[],ir&&typeof ir=="object"&&(_c=ir,ir=void 0),(_c=_c||{}).path=_c.path||"/socket.io",this.opts=_c,vq(this,_c),this.reconnection(_c.reconnection!==!1),this.reconnectionAttempts(_c.reconnectionAttempts||1/0),this.reconnectionDelay(_c.reconnectionDelay||1e3),this.reconnectionDelayMax(_c.reconnectionDelayMax||5e3),this.randomizationFactor((mu=_c.randomizationFactor)!==null&&mu!==void 0?mu:.5),this.backoff=new BH({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(_c.timeout==null?2e4:_c.timeout),this._readyState="closed",this.uri=ir;const Mu=_c.parser||Eme;this.encoder=new Mu.Encoder,this.decoder=new Mu.Decoder,this._autoConnect=_c.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(ir){return arguments.length?(this._reconnection=!!ir,this):this._reconnection}reconnectionAttempts(ir){return ir===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=ir,this)}reconnectionDelay(ir){var _c;return ir===void 0?this._reconnectionDelay:(this._reconnectionDelay=ir,(_c=this.backoff)===null||_c===void 0||_c.setMin(ir),this)}randomizationFactor(ir){var _c;return ir===void 0?this._randomizationFactor:(this._randomizationFactor=ir,(_c=this.backoff)===null||_c===void 0||_c.setJitter(ir),this)}reconnectionDelayMax(ir){var _c;return ir===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=ir,(_c=this.backoff)===null||_c===void 0||_c.setMax(ir),this)}timeout(ir){return arguments.length?(this._timeout=ir,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(ir){if(~this._readyState.indexOf("open"))return this;this.engine=new Gre(this.uri,this.opts);const _c=this.engine,mu=this;this._readyState="opening",this.skipReconnect=!1;const Mu=m5(_c,"open",function(){mu.onopen(),ir&&ir()}),xu=E0=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",E0),ir?ir(E0):this.maybeReconnectOnOpen()},l0=m5(_c,"error",xu);if(this._timeout!==!1){const E0=this._timeout,j0=this.setTimeoutFn(()=>{Mu(),xu(new Error("timeout")),_c.close()},E0);this.opts.autoUnref&&j0.unref(),this.subs.push(()=>{this.clearTimeoutFn(j0)})}return this.subs.push(Mu),this.subs.push(l0),this}connect(ir){return this.open(ir)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const ir=this.engine;this.subs.push(m5(ir,"ping",this.onping.bind(this)),m5(ir,"data",this.ondata.bind(this)),m5(ir,"error",this.onerror.bind(this)),m5(ir,"close",this.onclose.bind(this)),m5(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(ir){try{this.decoder.add(ir)}catch(_c){this.onclose("parse error",_c)}}ondecoded(ir){bq(()=>{this.emitReserved("packet",ir)},this.setTimeoutFn)}onerror(ir){this.emitReserved("error",ir)}socket(ir,_c){let mu=this.nsps[ir];return mu?this._autoConnect&&!mu.active&&mu.connect():(mu=new Aue(this,ir,_c),this.nsps[ir]=mu),mu}_destroy(ir){const _c=Object.keys(this.nsps);for(const mu of _c)if(this.nsps[mu].active)return;this._close()}_packet(ir){const _c=this.encoder.encode(ir);for(let mu=0;mu<_c.length;mu++)this.engine.write(_c[mu],ir.options)}cleanup(){this.subs.forEach(ir=>ir()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(ir,_c){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",ir,_c),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const ir=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const _c=this.backoff.duration();this._reconnecting=!0;const mu=this.setTimeoutFn(()=>{ir.skipReconnect||(this.emitReserved("reconnect_attempt",ir.backoff.attempts),ir.skipReconnect||ir.open(Mu=>{Mu?(ir._reconnecting=!1,ir.reconnect(),this.emitReserved("reconnect_error",Mu)):ir.onreconnect()}))},_c);this.opts.autoUnref&&mu.unref(),this.subs.push(()=>{this.clearTimeoutFn(mu)})}}onreconnect(){const ir=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",ir)}}const MB={};function VZ(yt,ir){typeof yt=="object"&&(ir=yt,yt=void 0);const _c=function(j0,M0="",B0){let q0=j0;B0=B0||typeof location<"u"&&location,j0==null&&(j0=B0.protocol+"//"+B0.host),typeof j0=="string"&&(j0.charAt(0)==="/"&&(j0=j0.charAt(1)==="/"?B0.protocol+j0:B0.host+j0),/^(https?|wss?):\/\//.test(j0)||(j0=B0!==void 0?B0.protocol+"//"+j0:"https://"+j0),q0=KZ(j0)),q0.port||(/^(http|ws)$/.test(q0.protocol)?q0.port="80":/^(http|ws)s$/.test(q0.protocol)&&(q0.port="443")),q0.path=q0.path||"/";const y1=q0.host.indexOf(":")!==-1?"["+q0.host+"]":q0.host;return q0.id=q0.protocol+"://"+y1+":"+q0.port+M0,q0.href=q0.protocol+"://"+y1+(B0&&B0.port===q0.port?"":":"+q0.port),q0}(yt,(ir=ir||{}).path||"/socket.io"),mu=_c.source,Mu=_c.id,xu=_c.path,l0=MB[Mu]&&xu in MB[Mu].nsps;let E0;return ir.forceNew||ir["force new connection"]||ir.multiplex===!1||l0?E0=new Aq(mu,ir):(MB[Mu]||(MB[Mu]=new Aq(mu,ir)),E0=MB[Mu]),_c.query&&!ir.query&&(ir.query=_c.queryKey),E0.socket(_c.path,ir)}function hS(yt,ir,_c,mu){return new(_c||(_c=Promise))(function(Mu,xu){function l0(M0){try{j0(mu.next(M0))}catch(B0){xu(B0)}}function E0(M0){try{j0(mu.throw(M0))}catch(B0){xu(B0)}}function j0(M0){var B0;M0.done?Mu(M0.value):(B0=M0.value,B0 instanceof _c?B0:new _c(function(q0){q0(B0)})).then(l0,E0)}j0((mu=mu.apply(yt,[])).next())})}Object.assign(VZ,{Manager:Aq,Socket:Aue,io:VZ,connect:VZ}),typeof SuppressedError=="function"&&SuppressedError;var _q=a!==void 0?a:typeof self<"u"?self:typeof window<"u"?window:{};function qZ(){throw new Error("setTimeout has not been defined")}function _ue(){throw new Error("clearTimeout has not been defined")}var cE=qZ,NN=_ue;function WZ(yt){if(cE===setTimeout)return setTimeout(yt,0);if((cE===qZ||!cE)&&setTimeout)return cE=setTimeout,setTimeout(yt,0);try{return cE(yt,0)}catch{try{return cE.call(null,yt,0)}catch{return cE.call(this,yt,0)}}}typeof _q.setTimeout=="function"&&(cE=setTimeout),typeof _q.clearTimeout=="function"&&(NN=clearTimeout);var JF,LN=[],lx=!1,GZ=-1;function Sue(){lx&&JF&&(lx=!1,JF.length?LN=JF.concat(LN):GZ=-1,LN.length&&XF())}function XF(){if(!lx){var yt=WZ(Sue);lx=!0;for(var ir=LN.length;ir;){for(JF=LN,LN=[];++GZ1)for(var _c=1;_c{E0!=="%%"&&(xu++,E0==="%c"&&(l0=xu))}),mu.splice(l0,0,Mu)},ir.save=function(mu){try{mu?ir.storage.setItem("debug",mu):ir.storage.removeItem("debug")}catch{}},ir.load=function(){let mu;try{mu=ir.storage.getItem("debug")}catch{}return!mu&&Xre!==void 0&&"env"in Xre&&(mu=Xre.env.DEBUG),mu},ir.useColors=function(){return!(typeof window>"u"||!window.process||window.process.type!=="renderer"&&!window.process.__nwjs)||(typeof navigator>"u"||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&(typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},ir.storage=function(){try{return localStorage}catch{}}(),ir.destroy=(()=>{let mu=!1;return()=>{mu||(mu=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),ir.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],ir.log=console.debug||console.log||(()=>{}),yt.exports=function(mu){function Mu(E0){let j0,M0,B0,q0=null;function y1(...v1){if(!y1.enabled)return;const F1=y1,ov=Number(new Date),bv=ov-(j0||ov);F1.diff=bv,F1.prev=j0,F1.curr=ov,j0=ov,v1[0]=Mu.coerce(v1[0]),typeof v1[0]!="string"&&v1.unshift("%O");let gv=0;v1[0]=v1[0].replace(/%([a-zA-Z%])/g,(xv,hy)=>{if(xv==="%%")return"%";gv++;const oy=Mu.formatters[hy];if(typeof oy=="function"){const fy=v1[gv];xv=oy.call(F1,fy),v1.splice(gv,1),gv--}return xv}),Mu.formatArgs.call(F1,v1),(F1.log||Mu.log).apply(F1,v1)}return y1.namespace=E0,y1.useColors=Mu.useColors(),y1.color=Mu.selectColor(E0),y1.extend=xu,y1.destroy=Mu.destroy,Object.defineProperty(y1,"enabled",{enumerable:!0,configurable:!1,get:()=>q0!==null?q0:(M0!==Mu.namespaces&&(M0=Mu.namespaces,B0=Mu.enabled(E0)),B0),set:v1=>{q0=v1}}),typeof Mu.init=="function"&&Mu.init(y1),y1}function xu(E0,j0){const M0=Mu(this.namespace+(j0===void 0?":":j0)+E0);return M0.log=this.log,M0}function l0(E0){return E0.toString().substring(2,E0.toString().length-2).replace(/\.\*\?$/,"*")}return Mu.debug=Mu,Mu.default=Mu,Mu.coerce=function(E0){return E0 instanceof Error?E0.stack||E0.message:E0},Mu.disable=function(){const E0=[...Mu.names.map(l0),...Mu.skips.map(l0).map(j0=>"-"+j0)].join(",");return Mu.enable(""),E0},Mu.enable=function(E0){let j0;Mu.save(E0),Mu.namespaces=E0,Mu.names=[],Mu.skips=[];const M0=(typeof E0=="string"?E0:"").split(/[\s,]+/),B0=M0.length;for(j0=0;j0=1.5*F1;return Math.round(y1/F1)+" "+ov+(bv?"s":"")}return Sq=function(y1,v1){v1=v1||{};var F1=typeof y1;if(F1==="string"&&y1.length>0)return function(ov){if(!((ov=String(ov)).length>100)){var bv=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(ov);if(bv){var gv=parseFloat(bv[1]);switch((bv[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*gv;case"weeks":case"week":case"w":return 6048e5*gv;case"days":case"day":case"d":return gv*B0;case"hours":case"hour":case"hrs":case"hr":case"h":return gv*M0;case"minutes":case"minute":case"mins":case"min":case"m":return gv*j0;case"seconds":case"second":case"secs":case"sec":case"s":return gv*E0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return gv;default:return}}}}(y1);if(F1==="number"&&isFinite(y1))return v1.long?function(ov){var bv=Math.abs(ov);return bv>=B0?q0(ov,bv,B0,"day"):bv>=M0?q0(ov,bv,M0,"hour"):bv>=j0?q0(ov,bv,j0,"minute"):bv>=E0?q0(ov,bv,E0,"second"):ov+" ms"}(y1):function(ov){var bv=Math.abs(ov);return bv>=B0?Math.round(ov/B0)+"d":bv>=M0?Math.round(ov/M0)+"h":bv>=j0?Math.round(ov/j0)+"m":bv>=E0?Math.round(ov/E0)+"s":ov+"ms"}(y1);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(y1))}}(),Mu.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(mu).forEach(E0=>{Mu[E0]=mu[E0]}),Mu.names=[],Mu.skips=[],Mu.formatters={},Mu.selectColor=function(E0){let j0=0;for(let M0=0;M0hS(void 0,void 0,void 0,function*(){var _c;kq=ir,_c=yt,tne.push(_c),function(mu){return hS(this,void 0,void 0,function*(){if(!kq||!mu)return;(function(){const E0=tne;tne=XZ,XZ=E0})();const Mu=kq.endsWith("/")?`${kq}debug`:`${kq}/debug`,xu=Object.assign({},mu);if(delete xu.params,mu.params)for(const[E0,j0]of Object.entries(mu.params))xu[E0]=j0;const l0=JSON.stringify(xu);J2.RemoteCommunication(`[sendBufferedEvents] Sending ${XZ.length} analytics events to ${Mu}`);try{const E0=yield $a(Mu,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:l0}),j0=yield E0.text();J2.RemoteCommunication(`[sendBufferedEvents] Response: ${j0}`),XZ.length=0}catch(E0){console.warn("Error sending analytics",E0)}})}(yt).catch(()=>{})});var VO=[],$9=[],Ame=typeof Uint8Array<"u"?Uint8Array:Array,rne=!1;function QZ(){rne=!0;for(var yt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ir=0;ir<64;++ir)VO[ir]=yt[ir],$9[yt.charCodeAt(ir)]=ir;$9[45]=62,$9[95]=63}function nne(yt,ir,_c){for(var mu,Mu,xu=[],l0=ir;l0<_c;l0+=3)mu=(yt[l0]<<16)+(yt[l0+1]<<8)+yt[l0+2],xu.push(VO[(Mu=mu)>>18&63]+VO[Mu>>12&63]+VO[Mu>>6&63]+VO[63&Mu]);return xu.join("")}function Rue(yt){var ir;rne||QZ();for(var _c=yt.length,mu=_c%3,Mu="",xu=[],l0=16383,E0=0,j0=_c-mu;E0j0?j0:E0+l0));return mu===1?(ir=yt[_c-1],Mu+=VO[ir>>2],Mu+=VO[ir<<4&63],Mu+="=="):mu===2&&(ir=(yt[_c-2]<<8)+yt[_c-1],Mu+=VO[ir>>10],Mu+=VO[ir>>4&63],Mu+=VO[ir<<2&63],Mu+="="),xu.push(Mu),xu.join("")}function CR(yt,ir,_c,mu,Mu){var xu,l0,E0=8*Mu-mu-1,j0=(1<>1,B0=-7,q0=_c?Mu-1:0,y1=_c?-1:1,v1=yt[ir+q0];for(q0+=y1,xu=v1&(1<<-B0)-1,v1>>=-B0,B0+=E0;B0>0;xu=256*xu+yt[ir+q0],q0+=y1,B0-=8);for(l0=xu&(1<<-B0)-1,xu>>=-B0,B0+=mu;B0>0;l0=256*l0+yt[ir+q0],q0+=y1,B0-=8);if(xu===0)xu=1-M0;else{if(xu===j0)return l0?NaN:1/0*(v1?-1:1);l0+=Math.pow(2,mu),xu-=M0}return(v1?-1:1)*l0*Math.pow(2,xu-mu)}function ine(yt,ir,_c,mu,Mu,xu){var l0,E0,j0,M0=8*xu-Mu-1,B0=(1<>1,y1=Mu===23?Math.pow(2,-24)-Math.pow(2,-77):0,v1=mu?0:xu-1,F1=mu?1:-1,ov=ir<0||ir===0&&1/ir<0?1:0;for(ir=Math.abs(ir),isNaN(ir)||ir===1/0?(E0=isNaN(ir)?1:0,l0=B0):(l0=Math.floor(Math.log(ir)/Math.LN2),ir*(j0=Math.pow(2,-l0))<1&&(l0--,j0*=2),(ir+=l0+q0>=1?y1/j0:y1*Math.pow(2,1-q0))*j0>=2&&(l0++,j0/=2),l0+q0>=B0?(E0=0,l0=B0):l0+q0>=1?(E0=(ir*j0-1)*Math.pow(2,Mu),l0+=q0):(E0=ir*Math.pow(2,q0-1)*Math.pow(2,Mu),l0=0));Mu>=8;yt[_c+v1]=255&E0,v1+=F1,E0/=256,Mu-=8);for(l0=l0<0;yt[_c+v1]=255&l0,v1+=F1,l0/=256,M0-=8);yt[_c+v1-F1]|=128*ov}var Mue={}.toString,one=Array.isArray||function(yt){return Mue.call(yt)=="[object Array]"};function Cq(){return yw.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function B2(yt,ir){if(Cq()=Cq())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Cq().toString(16)+" bytes");return 0|yt}function pS(yt){return!(yt==null||!yt._isBuffer)}function Iue(yt,ir){if(pS(yt))return yt.length;if(typeof ArrayBuffer<"u"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(yt)||yt instanceof ArrayBuffer))return yt.byteLength;typeof yt!="string"&&(yt=""+yt);var _c=yt.length;if(_c===0)return 0;for(var mu=!1;;)switch(ir){case"ascii":case"latin1":case"binary":return _c;case"utf8":case"utf-8":case void 0:return nJ(yt).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*_c;case"hex":return _c>>>1;case"base64":return Fue(yt).length;default:if(mu)return nJ(yt).length;ir=(""+ir).toLowerCase(),mu=!0}}function sne(yt,ir,_c){var mu=!1;if((ir===void 0||ir<0)&&(ir=0),ir>this.length||((_c===void 0||_c>this.length)&&(_c=this.length),_c<=0)||(_c>>>=0)<=(ir>>>=0))return"";for(yt||(yt="utf8");;)switch(yt){case"hex":return hne(this,ir,_c);case"utf8":case"utf-8":return cne(this,ir,_c);case"ascii":return fne(this,ir,_c);case"latin1":case"binary":return dne(this,ir,_c);case"base64":return kw(this,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return qO(this,ir,_c);default:if(mu)throw new TypeError("Unknown encoding: "+yt);yt=(yt+"").toLowerCase(),mu=!0}}function NB(yt,ir,_c){var mu=yt[ir];yt[ir]=yt[_c],yt[_c]=mu}function Oue(yt,ir,_c,mu,Mu){if(yt.length===0)return-1;if(typeof _c=="string"?(mu=_c,_c=0):_c>2147483647?_c=2147483647:_c<-2147483648&&(_c=-2147483648),_c=+_c,isNaN(_c)&&(_c=Mu?0:yt.length-1),_c<0&&(_c=yt.length+_c),_c>=yt.length){if(Mu)return-1;_c=yt.length-1}else if(_c<0){if(!Mu)return-1;_c=0}if(typeof ir=="string"&&(ir=yw.from(ir,mu)),pS(ir))return ir.length===0?-1:lne(yt,ir,_c,mu,Mu);if(typeof ir=="number")return ir&=255,yw.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?Mu?Uint8Array.prototype.indexOf.call(yt,ir,_c):Uint8Array.prototype.lastIndexOf.call(yt,ir,_c):lne(yt,[ir],_c,mu,Mu);throw new TypeError("val must be string, number or Buffer")}function lne(yt,ir,_c,mu,Mu){var xu,l0=1,E0=yt.length,j0=ir.length;if(mu!==void 0&&((mu=String(mu).toLowerCase())==="ucs2"||mu==="ucs-2"||mu==="utf16le"||mu==="utf-16le")){if(yt.length<2||ir.length<2)return-1;l0=2,E0/=2,j0/=2,_c/=2}function M0(v1,F1){return l0===1?v1[F1]:v1.readUInt16BE(F1*l0)}if(Mu){var B0=-1;for(xu=_c;xuE0&&(_c=E0-j0),xu=_c;xu>=0;xu--){for(var q0=!0,y1=0;y1Mu&&(mu=Mu):mu=Mu;var xu=ir.length;if(xu%2!=0)throw new TypeError("Invalid hex string");mu>xu/2&&(mu=xu/2);for(var l0=0;l0>8,j0=l0%256,M0.push(j0),M0.push(E0);return M0}(ir,yt.length-_c),yt,_c,mu)}function kw(yt,ir,_c){return ir===0&&_c===yt.length?Rue(yt):Rue(yt.slice(ir,_c))}function cne(yt,ir,_c){_c=Math.min(yt.length,_c);for(var mu=[],Mu=ir;Mu<_c;){var xu,l0,E0,j0,M0=yt[Mu],B0=null,q0=M0>239?4:M0>223?3:M0>191?2:1;if(Mu+q0<=_c)switch(q0){case 1:M0<128&&(B0=M0);break;case 2:(192&(xu=yt[Mu+1]))==128&&(j0=(31&M0)<<6|63&xu)>127&&(B0=j0);break;case 3:xu=yt[Mu+1],l0=yt[Mu+2],(192&xu)==128&&(192&l0)==128&&(j0=(15&M0)<<12|(63&xu)<<6|63&l0)>2047&&(j0<55296||j0>57343)&&(B0=j0);break;case 4:xu=yt[Mu+1],l0=yt[Mu+2],E0=yt[Mu+3],(192&xu)==128&&(192&l0)==128&&(192&E0)==128&&(j0=(15&M0)<<18|(63&xu)<<12|(63&l0)<<6|63&E0)>65535&&j0<1114112&&(B0=j0)}B0===null?(B0=65533,q0=1):B0>65535&&(B0-=65536,mu.push(B0>>>10&1023|55296),B0=56320|1023&B0),mu.push(B0),Mu+=q0}return function(y1){var v1=y1.length;if(v1<=une)return String.fromCharCode.apply(String,y1);for(var F1="",ov=0;ov0&&(yt=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(yt+=" ... ")),""},yw.prototype.compare=function(yt,ir,_c,mu,Mu){if(!pS(yt))throw new TypeError("Argument must be a Buffer");if(ir===void 0&&(ir=0),_c===void 0&&(_c=yt?yt.length:0),mu===void 0&&(mu=0),Mu===void 0&&(Mu=this.length),ir<0||_c>yt.length||mu<0||Mu>this.length)throw new RangeError("out of range index");if(mu>=Mu&&ir>=_c)return 0;if(mu>=Mu)return-1;if(ir>=_c)return 1;if(this===yt)return 0;for(var xu=(Mu>>>=0)-(mu>>>=0),l0=(_c>>>=0)-(ir>>>=0),E0=Math.min(xu,l0),j0=this.slice(mu,Mu),M0=yt.slice(ir,_c),B0=0;B0Mu)&&(_c=Mu),yt.length>0&&(_c<0||ir<0)||ir>this.length)throw new RangeError("Attempt to write outside buffer bounds");mu||(mu="utf8");for(var xu=!1;;)switch(mu){case"hex":return tJ(this,yt,ir,_c);case"utf8":case"utf-8":return Pue(this,yt,ir,_c);case"ascii":return jue(this,yt,ir,_c);case"latin1":case"binary":return Nue(this,yt,ir,_c);case"base64":return rJ(this,yt,ir,_c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return DN(this,yt,ir,_c);default:if(xu)throw new TypeError("Unknown encoding: "+mu);mu=(""+mu).toLowerCase(),xu=!0}},yw.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var une=4096;function fne(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(127&yt[Mu]);return mu}function dne(yt,ir,_c){var mu="";_c=Math.min(yt.length,_c);for(var Mu=ir;Mu<_c;++Mu)mu+=String.fromCharCode(yt[Mu]);return mu}function hne(yt,ir,_c){var mu=yt.length;(!ir||ir<0)&&(ir=0),(!_c||_c<0||_c>mu)&&(_c=mu);for(var Mu="",xu=ir;xu<_c;++xu)Mu+=_me(yt[xu]);return Mu}function qO(yt,ir,_c){for(var mu=yt.slice(ir,_c),Mu="",xu=0;xu_c)throw new RangeError("Trying to access beyond buffer length")}function sT(yt,ir,_c,mu,Mu,xu){if(!pS(yt))throw new TypeError('"buffer" argument must be a Buffer instance');if(ir>Mu||iryt.length)throw new RangeError("Index out of range")}function WO(yt,ir,_c,mu){ir<0&&(ir=65535+ir+1);for(var Mu=0,xu=Math.min(yt.length-_c,2);Mu>>8*(mu?Mu:1-Mu)}function Rq(yt,ir,_c,mu){ir<0&&(ir=4294967295+ir+1);for(var Mu=0,xu=Math.min(yt.length-_c,4);Mu>>8*(mu?Mu:3-Mu)&255}function pne(yt,ir,_c,mu,Mu,xu){if(_c+mu>yt.length)throw new RangeError("Index out of range");if(_c<0)throw new RangeError("Index out of range")}function Lue(yt,ir,_c,mu,Mu){return Mu||pne(yt,0,_c,4),ine(yt,ir,_c,mu,23,4),_c+4}function Bue(yt,ir,_c,mu,Mu){return Mu||pne(yt,0,_c,8),ine(yt,ir,_c,mu,52,8),_c+8}yw.prototype.slice=function(yt,ir){var _c,mu=this.length;if((yt=~~yt)<0?(yt+=mu)<0&&(yt=0):yt>mu&&(yt=mu),(ir=ir===void 0?mu:~~ir)<0?(ir+=mu)<0&&(ir=0):ir>mu&&(ir=mu),ir0&&(Mu*=256);)mu+=this[yt+--ir]*Mu;return mu},yw.prototype.readUInt8=function(yt,ir){return ir||q6(yt,1,this.length),this[yt]},yw.prototype.readUInt16LE=function(yt,ir){return ir||q6(yt,2,this.length),this[yt]|this[yt+1]<<8},yw.prototype.readUInt16BE=function(yt,ir){return ir||q6(yt,2,this.length),this[yt]<<8|this[yt+1]},yw.prototype.readUInt32LE=function(yt,ir){return ir||q6(yt,4,this.length),(this[yt]|this[yt+1]<<8|this[yt+2]<<16)+16777216*this[yt+3]},yw.prototype.readUInt32BE=function(yt,ir){return ir||q6(yt,4,this.length),16777216*this[yt]+(this[yt+1]<<16|this[yt+2]<<8|this[yt+3])},yw.prototype.readIntLE=function(yt,ir,_c){yt|=0,ir|=0,_c||q6(yt,ir,this.length);for(var mu=this[yt],Mu=1,xu=0;++xu=(Mu*=128)&&(mu-=Math.pow(2,8*ir)),mu},yw.prototype.readIntBE=function(yt,ir,_c){yt|=0,ir|=0,_c||q6(yt,ir,this.length);for(var mu=ir,Mu=1,xu=this[yt+--mu];mu>0&&(Mu*=256);)xu+=this[yt+--mu]*Mu;return xu>=(Mu*=128)&&(xu-=Math.pow(2,8*ir)),xu},yw.prototype.readInt8=function(yt,ir){return ir||q6(yt,1,this.length),128&this[yt]?-1*(255-this[yt]+1):this[yt]},yw.prototype.readInt16LE=function(yt,ir){ir||q6(yt,2,this.length);var _c=this[yt]|this[yt+1]<<8;return 32768&_c?4294901760|_c:_c},yw.prototype.readInt16BE=function(yt,ir){ir||q6(yt,2,this.length);var _c=this[yt+1]|this[yt]<<8;return 32768&_c?4294901760|_c:_c},yw.prototype.readInt32LE=function(yt,ir){return ir||q6(yt,4,this.length),this[yt]|this[yt+1]<<8|this[yt+2]<<16|this[yt+3]<<24},yw.prototype.readInt32BE=function(yt,ir){return ir||q6(yt,4,this.length),this[yt]<<24|this[yt+1]<<16|this[yt+2]<<8|this[yt+3]},yw.prototype.readFloatLE=function(yt,ir){return ir||q6(yt,4,this.length),CR(this,yt,!0,23,4)},yw.prototype.readFloatBE=function(yt,ir){return ir||q6(yt,4,this.length),CR(this,yt,!1,23,4)},yw.prototype.readDoubleLE=function(yt,ir){return ir||q6(yt,8,this.length),CR(this,yt,!0,52,8)},yw.prototype.readDoubleBE=function(yt,ir){return ir||q6(yt,8,this.length),CR(this,yt,!1,52,8)},yw.prototype.writeUIntLE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||sT(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=1,xu=0;for(this[ir]=255&yt;++xu<_c&&(Mu*=256);)this[ir+xu]=yt/Mu&255;return ir+_c},yw.prototype.writeUIntBE=function(yt,ir,_c,mu){yt=+yt,ir|=0,_c|=0,mu||sT(this,yt,ir,_c,Math.pow(2,8*_c)-1,0);var Mu=_c-1,xu=1;for(this[ir+Mu]=255&yt;--Mu>=0&&(xu*=256);)this[ir+Mu]=yt/xu&255;return ir+_c},yw.prototype.writeUInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,1,255,0),yw.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),this[ir]=255&yt,ir+1},yw.prototype.writeUInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,65535,0),yw.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):WO(this,yt,ir,!0),ir+2},yw.prototype.writeUInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,65535,0),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):WO(this,yt,ir,!1),ir+2},yw.prototype.writeUInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,4294967295,0),yw.TYPED_ARRAY_SUPPORT?(this[ir+3]=yt>>>24,this[ir+2]=yt>>>16,this[ir+1]=yt>>>8,this[ir]=255&yt):Rq(this,yt,ir,!0),ir+4},yw.prototype.writeUInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,4294967295,0),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):Rq(this,yt,ir,!1),ir+4},yw.prototype.writeIntLE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);sT(this,yt,ir,_c,Mu-1,-Mu)}var xu=0,l0=1,E0=0;for(this[ir]=255&yt;++xu<_c&&(l0*=256);)yt<0&&E0===0&&this[ir+xu-1]!==0&&(E0=1),this[ir+xu]=(yt/l0>>0)-E0&255;return ir+_c},yw.prototype.writeIntBE=function(yt,ir,_c,mu){if(yt=+yt,ir|=0,!mu){var Mu=Math.pow(2,8*_c-1);sT(this,yt,ir,_c,Mu-1,-Mu)}var xu=_c-1,l0=1,E0=0;for(this[ir+xu]=255&yt;--xu>=0&&(l0*=256);)yt<0&&E0===0&&this[ir+xu+1]!==0&&(E0=1),this[ir+xu]=(yt/l0>>0)-E0&255;return ir+_c},yw.prototype.writeInt8=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,1,127,-128),yw.TYPED_ARRAY_SUPPORT||(yt=Math.floor(yt)),yt<0&&(yt=255+yt+1),this[ir]=255&yt,ir+1},yw.prototype.writeInt16LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,32767,-32768),yw.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8):WO(this,yt,ir,!0),ir+2},yw.prototype.writeInt16BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,2,32767,-32768),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>8,this[ir+1]=255&yt):WO(this,yt,ir,!1),ir+2},yw.prototype.writeInt32LE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,2147483647,-2147483648),yw.TYPED_ARRAY_SUPPORT?(this[ir]=255&yt,this[ir+1]=yt>>>8,this[ir+2]=yt>>>16,this[ir+3]=yt>>>24):Rq(this,yt,ir,!0),ir+4},yw.prototype.writeInt32BE=function(yt,ir,_c){return yt=+yt,ir|=0,_c||sT(this,yt,ir,4,2147483647,-2147483648),yt<0&&(yt=4294967295+yt+1),yw.TYPED_ARRAY_SUPPORT?(this[ir]=yt>>>24,this[ir+1]=yt>>>16,this[ir+2]=yt>>>8,this[ir+3]=255&yt):Rq(this,yt,ir,!1),ir+4},yw.prototype.writeFloatLE=function(yt,ir,_c){return Lue(this,yt,ir,!0,_c)},yw.prototype.writeFloatBE=function(yt,ir,_c){return Lue(this,yt,ir,!1,_c)},yw.prototype.writeDoubleLE=function(yt,ir,_c){return Bue(this,yt,ir,!0,_c)},yw.prototype.writeDoubleBE=function(yt,ir,_c){return Bue(this,yt,ir,!1,_c)},yw.prototype.copy=function(yt,ir,_c,mu){if(_c||(_c=0),mu||mu===0||(mu=this.length),ir>=yt.length&&(ir=yt.length),ir||(ir=0),mu>0&&mu<_c&&(mu=_c),mu===_c||yt.length===0||this.length===0)return 0;if(ir<0)throw new RangeError("targetStart out of bounds");if(_c<0||_c>=this.length)throw new RangeError("sourceStart out of bounds");if(mu<0)throw new RangeError("sourceEnd out of bounds");mu>this.length&&(mu=this.length),yt.length-ir=0;--Mu)yt[Mu+ir]=this[Mu+_c];else if(xu<1e3||!yw.TYPED_ARRAY_SUPPORT)for(Mu=0;Mu>>=0,_c=_c===void 0?this.length:_c>>>0,yt||(yt=0),typeof yt=="number")for(xu=ir;xu<_c;++xu)this[xu]=yt;else{var l0=pS(yt)?yt:nJ(new yw(yt,mu).toString()),E0=l0.length;for(xu=0;xu<_c-ir;++xu)this[xu+ir]=l0[xu%E0]}return this};var Due=/[^+\/0-9A-Za-z-_]/g;function _me(yt){return yt<16?"0"+yt.toString(16):yt.toString(16)}function nJ(yt,ir){var _c;ir=ir||1/0;for(var mu=yt.length,Mu=null,xu=[],l0=0;l055295&&_c<57344){if(!Mu){if(_c>56319){(ir-=3)>-1&&xu.push(239,191,189);continue}if(l0+1===mu){(ir-=3)>-1&&xu.push(239,191,189);continue}Mu=_c;continue}if(_c<56320){(ir-=3)>-1&&xu.push(239,191,189),Mu=_c;continue}_c=65536+(Mu-55296<<10|_c-56320)}else Mu&&(ir-=3)>-1&&xu.push(239,191,189);if(Mu=null,_c<128){if((ir-=1)<0)break;xu.push(_c)}else if(_c<2048){if((ir-=2)<0)break;xu.push(_c>>6|192,63&_c|128)}else if(_c<65536){if((ir-=3)<0)break;xu.push(_c>>12|224,_c>>6&63|128,63&_c|128)}else{if(!(_c<1114112))throw new Error("Invalid code point");if((ir-=4)<0)break;xu.push(_c>>18|240,_c>>12&63|128,_c>>6&63|128,63&_c|128)}}return xu}function Fue(yt){return function(ir){var _c,mu,Mu,xu,l0,E0;rne||QZ();var j0=ir.length;if(j0%4>0)throw new Error("Invalid string. Length must be a multiple of 4");l0=ir[j0-2]==="="?2:ir[j0-1]==="="?1:0,E0=new Ame(3*j0/4-l0),Mu=l0>0?j0-4:j0;var M0=0;for(_c=0,mu=0;_c>16&255,E0[M0++]=xu>>8&255,E0[M0++]=255&xu;return l0===2?(xu=$9[ir.charCodeAt(_c)]<<2|$9[ir.charCodeAt(_c+1)]>>4,E0[M0++]=255&xu):l0===1&&(xu=$9[ir.charCodeAt(_c)]<<10|$9[ir.charCodeAt(_c+1)]<<4|$9[ir.charCodeAt(_c+2)]>>2,E0[M0++]=xu>>8&255,E0[M0++]=255&xu),E0}(function(ir){if((ir=function(_c){return _c.trim?_c.trim():_c.replace(/^\s+|\s+$/g,"")}(ir).replace(Due,"")).length<2)return"";for(;ir.length%4!=0;)ir+="=";return ir}(yt))}function iJ(yt,ir,_c,mu){for(var Mu=0;Mu=ir.length||Mu>=yt.length);++Mu)ir[Mu+_c]=yt[Mu];return Mu}function mne(yt){return!!yt.constructor&&typeof yt.constructor.isBuffer=="function"&&yt.constructor.isBuffer(yt)}class oJ{constructor(ir){this.enabled=!0,ir!=null&&ir.debug&&v5.enable("Ecies:Layer"),ir!=null&&ir.privateKey?this.ecies=Nw.PrivateKey.fromHex(ir.privateKey):this.ecies=new Nw.PrivateKey,J2.Ecies("[ECIES constructor()] initialized secret: ",this.ecies.toHex()),J2.Ecies("[ECIES constructor()] initialized public: ",this.ecies.publicKey.toHex()),J2.Ecies("[ECIES constructor()] init with",this)}generateECIES(){this.ecies=new Nw.PrivateKey}getPublicKey(){return this.ecies.publicKey.toHex()}encrypt(ir,_c){let mu=ir;if(this.enabled)try{J2.Ecies("[ECIES: encrypt()] using otherPublicKey",_c);const Mu=yw.from(ir),xu=Nw.encrypt(_c,Mu);mu=yw.from(xu).toString("base64")}catch(Mu){throw J2.Ecies("[ECIES: encrypt()] error encrypt:",Mu),J2.Ecies("[ECIES: encrypt()] private: ",this.ecies.toHex()),J2.Ecies("[ECIES: encrypt()] data: ",ir),J2.Ecies("[ECIES: encrypt()] otherkey: ",_c),Mu}return mu}decrypt(ir){let _c=ir;if(this.enabled)try{J2.Ecies("[ECIES: decrypt()] using privateKey",this.ecies.toHex());const mu=yw.from(ir.toString(),"base64");_c=Nw.decrypt(this.ecies.toHex(),mu).toString()}catch(mu){throw J2.Ecies("[ECIES: decrypt()] error decrypt",mu),J2.Ecies("[ECIES: decrypt()] private: ",this.ecies.toHex()),J2.Ecies("[ECIES: decrypt()] encryptedData: ",ir),mu}return _c}getKeyInfo(){return{private:this.ecies.toHex(),public:this.ecies.publicKey.toHex()}}toString(){J2.Ecies("[ECIES: toString()]",this.getKeyInfo())}}var eU="0.20.4";const LB="https://metamask-sdk.api.cx.metamask.io/",Sme=["websocket"],aJ=6048e5,M7="eth_requestAccounts";function uC(yt){const{context:ir}=yt;J2.RemoteCommunication(`[RemoteCommunication: clean()] context=${ir}`),yt.channelConfig=void 0,yt.ready=!1,yt.originatorConnectStarted=!1}var tU,yA;o.ConnectionStatus=void 0,o.EventType=void 0,o.MessageType=void 0,function(yt){yt.DISCONNECTED="disconnected",yt.WAITING="waiting",yt.TIMEOUT="timeout",yt.LINKED="linked",yt.PAUSED="paused",yt.TERMINATED="terminated"}(o.ConnectionStatus||(o.ConnectionStatus={})),function(yt){yt.KEY_INFO="key_info",yt.SERVICE_STATUS="service_status",yt.PROVIDER_UPDATE="provider_update",yt.RPC_UPDATE="rpc_update",yt.KEYS_EXCHANGED="keys_exchanged",yt.JOIN_CHANNEL="join_channel",yt.CHANNEL_CREATED="channel_created",yt.CLIENTS_CONNECTED="clients_connected",yt.CLIENTS_DISCONNECTED="clients_disconnected",yt.CLIENTS_WAITING="clients_waiting",yt.CLIENTS_READY="clients_ready",yt.CHANNEL_PERSISTENCE="channel_persistence",yt.MESSAGE_ACK="ack",yt.SOCKET_DISCONNECTED="socket_disconnected",yt.SOCKET_RECONNECT="socket_reconnect",yt.OTP="otp",yt.SDK_RPC_CALL="sdk_rpc_call",yt.AUTHORIZED="authorized",yt.CONNECTION_STATUS="connection_status",yt.MESSAGE="message",yt.TERMINATE="terminate"}(o.EventType||(o.EventType={})),function(yt){yt.KEY_EXCHANGE="key_exchange"}(tU||(tU={})),function(yt){yt.KEY_HANDSHAKE_START="key_handshake_start",yt.KEY_HANDSHAKE_CHECK="key_handshake_check",yt.KEY_HANDSHAKE_SYN="key_handshake_SYN",yt.KEY_HANDSHAKE_SYNACK="key_handshake_SYNACK",yt.KEY_HANDSHAKE_ACK="key_handshake_ACK",yt.KEY_HANDSHAKE_NONE="none"}(yA||(yA={}));class Uue extends PH.EventEmitter2{constructor({communicationLayer:ir,otherPublicKey:_c,context:mu,ecies:Mu,logging:xu}){super(),this.keysExchanged=!1,this.step=yA.KEY_HANDSHAKE_NONE,this.debug=!1,this.context=mu,this.communicationLayer=ir,Mu!=null&&Mu.privateKey&&_c&&(J2.KeyExchange(`[KeyExchange: constructor()] otherPubKey=${_c} set keysExchanged to true!`,Mu),this.keysExchanged=!0),this.myECIES=new oJ(Object.assign(Object.assign({},Mu),{debug:xu==null?void 0:xu.eciesLayer})),this.myPublicKey=this.myECIES.getPublicKey(),this.debug=(xu==null?void 0:xu.keyExchangeLayer)===!0,_c&&this.setOtherPublicKey(_c),this.communicationLayer.on(tU.KEY_EXCHANGE,this.onKeyExchangeMessage.bind(this))}onKeyExchangeMessage(ir){const{relayPersistence:_c}=this.communicationLayer.remote.state;if(J2.KeyExchange(`[KeyExchange: onKeyExchangeMessage()] context=${this.context} keysExchanged=${this.keysExchanged} relayPersistence=${_c}`,ir),_c)return void J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] Ignoring key exchange message because relay persistence is activated");const{message:mu}=ir;this.keysExchanged&&J2.KeyExchange(`[KeyExchange: onKeyExchangeMessage()] context=${this.context} received handshake while already exchanged. step=${this.step} otherPubKey=${this.otherPublicKey}`),this.emit(o.EventType.KEY_INFO,mu.type),mu.type===yA.KEY_HANDSHAKE_SYN?(this.checkStep([yA.KEY_HANDSHAKE_NONE,yA.KEY_HANDSHAKE_ACK]),J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] KEY_HANDSHAKE_SYN",mu),mu.pubkey&&this.setOtherPublicKey(mu.pubkey),this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_SYNACK,pubkey:this.myPublicKey}),this.setStep(yA.KEY_HANDSHAKE_ACK)):mu.type===yA.KEY_HANDSHAKE_SYNACK?(this.checkStep([yA.KEY_HANDSHAKE_SYNACK,yA.KEY_HANDSHAKE_ACK,yA.KEY_HANDSHAKE_NONE]),J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] KEY_HANDSHAKE_SYNACK"),mu.pubkey&&this.setOtherPublicKey(mu.pubkey),this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_ACK}),this.keysExchanged=!0,this.setStep(yA.KEY_HANDSHAKE_ACK),this.emit(o.EventType.KEYS_EXCHANGED)):mu.type===yA.KEY_HANDSHAKE_ACK&&(J2.KeyExchange("[KeyExchange: onKeyExchangeMessage()] KEY_HANDSHAKE_ACK set keysExchanged to true!"),this.checkStep([yA.KEY_HANDSHAKE_ACK,yA.KEY_HANDSHAKE_NONE]),this.keysExchanged=!0,this.setStep(yA.KEY_HANDSHAKE_ACK),this.emit(o.EventType.KEYS_EXCHANGED))}resetKeys(ir){this.clean(),this.myECIES=new oJ(ir)}clean(){J2.KeyExchange(`[KeyExchange: clean()] context=${this.context} reset handshake state`),this.setStep(yA.KEY_HANDSHAKE_NONE),this.emit(o.EventType.KEY_INFO,this.step),this.keysExchanged=!1}start({isOriginator:ir,force:_c}){const{relayPersistence:mu,protocolVersion:Mu}=this.communicationLayer.remote.state,xu=Mu>=2;if(mu)return J2.KeyExchange("[KeyExchange: start()] Ignoring key exchange message because relay persistence is activated"),void console.log(`[KeyExchange: start()] relayPersistence=${mu}`);J2.KeyExchange(`[KeyExchange: start()] context=${this.context} protocolVersion=${Mu} isOriginator=${ir} step=${this.step} force=${_c} relayPersistence=${mu} keysExchanged=${this.keysExchanged}`),ir?!(this.keysExchanged||this.step!==yA.KEY_HANDSHAKE_NONE&&this.step!==yA.KEY_HANDSHAKE_SYNACK)||_c?(J2.KeyExchange(`[KeyExchange: start()] context=${this.context} -- start key exchange (force=${_c}) -- step=${this.step}`,this.step),this.clean(),this.setStep(yA.KEY_HANDSHAKE_SYNACK),this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_SYN,pubkey:this.myPublicKey,v:2})):J2.KeyExchange(`[KeyExchange: start()] context=${this.context} -- key exchange already ${this.keysExchanged?"done":"in progress"} -- aborted.`,this.step):this.keysExchanged&&_c!==!0?J2.KeyExchange("[KeyExchange: start()] don't send KEY_HANDSHAKE_START -- exchange already done."):xu?this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_SYNACK,pubkey:this.myPublicKey,v:2}):(this.communicationLayer.sendMessage({type:yA.KEY_HANDSHAKE_START}),this.clean())}setStep(ir){this.step=ir,this.emit(o.EventType.KEY_INFO,ir)}checkStep(ir){ir.length>0&&ir.indexOf(this.step.toString())===-1&&console.warn(`[KeyExchange: checkStep()] Wrong Step "${this.step}" not within ${ir}`)}setRelayPersistence({localKey:ir,otherKey:_c}){this.otherPublicKey=_c,this.myECIES=new oJ({privateKey:ir,debug:this.debug}),this.keysExchanged=!0}setKeysExchanged(ir){this.keysExchanged=ir}areKeysExchanged(){return this.keysExchanged}getMyPublicKey(){return this.myPublicKey}getOtherPublicKey(){return this.otherPublicKey}setOtherPublicKey(ir){J2.KeyExchange("[KeyExchange: setOtherPubKey()]",ir),this.otherPublicKey=ir}encryptMessage(ir){if(!this.otherPublicKey)throw new Error("encryptMessage: Keys not exchanged - missing otherPubKey");return this.myECIES.encrypt(ir,this.otherPublicKey)}decryptMessage(ir){if(!this.otherPublicKey)throw new Error("decryptMessage: Keys not exchanged - missing otherPubKey");return this.myECIES.decrypt(ir)}getKeyInfo(){return{ecies:Object.assign(Object.assign({},this.myECIES.getKeyInfo()),{otherPubKey:this.otherPublicKey}),step:this.step,keysExchanged:this.areKeysExchanged()}}toString(){const ir={keyInfo:this.getKeyInfo(),keysExchanged:this.keysExchanged,step:this.step};return JSON.stringify(ir)}}(function(yt){yt.TERMINATE="terminate",yt.ANSWER="answer",yt.OFFER="offer",yt.CANDIDATE="candidate",yt.JSONRPC="jsonrpc",yt.WALLET_INFO="wallet_info",yt.ORIGINATOR_INFO="originator_info",yt.PAUSE="pause",yt.OTP="otp",yt.AUTHORIZED="authorized",yt.PING="ping",yt.READY="ready"})(o.MessageType||(o.MessageType={}));const UH=yt=>new Promise(ir=>{setTimeout(ir,yt)}),gne=(yt,ir,_c=200)=>hS(void 0,void 0,void 0,function*(){let mu;const Mu=Date.now();let xu=!1;for(;!xu;){if(xu=Date.now()-Mu>3e5,mu=ir[yt],mu.elapsedTime!==void 0)return mu;yield UH(_c)}throw new Error(`RPC ${yt} timed out`)}),zue=yt=>hS(void 0,void 0,void 0,function*(){var ir,_c,mu,Mu,xu;return yt.remote.state.terminated?(J2.SocketService(`[SocketService: reconnectSocket()] instance.remote.state.terminated=${yt.remote.state.terminated} socket already terminated`,yt),!1):(J2.SocketService(`[SocketService: reconnectSocket()] instance.state.socket?.connected=${(ir=yt.state.socket)===null||ir===void 0?void 0:ir.connected} trying to reconnect after socketio disconnection`,yt),yield UH(200),!((_c=yt.state.socket)===null||_c===void 0)&&_c.connected||(yt.state.resumed=!0,(mu=yt.state.socket)===null||mu===void 0||mu.connect(),yt.emit(o.EventType.SOCKET_RECONNECT),(Mu=yt.state.socket)===null||Mu===void 0||Mu.emit(o.EventType.JOIN_CHANNEL,{channelId:yt.state.channelId,context:`${yt.state.context}connect_again`,clientType:yt.state.isOriginator?"dapp":"wallet"})),yield UH(100),(xu=yt.state.socket)===null||xu===void 0?void 0:xu.connected)});var W6,FN;(function(yt){yt.REQUEST="sdk_connect_request_started",yt.REQUEST_MOBILE="sdk_connect_request_started_mobile",yt.RECONNECT="sdk_reconnect_request_started",yt.CONNECTED="sdk_connection_established",yt.CONNECTED_MOBILE="sdk_connection_established_mobile",yt.AUTHORIZED="sdk_connection_authorized",yt.REJECTED="sdk_connection_rejected",yt.TERMINATED="sdk_connection_terminated",yt.DISCONNECTED="sdk_disconnected",yt.SDK_USE_EXTENSION="sdk_use_extension",yt.SDK_RPC_REQUEST="sdk_rpc_request",yt.SDK_RPC_REQUEST_RECEIVED="sdk_rpc_request_received",yt.SDK_RPC_REQUEST_DONE="sdk_rpc_request_done",yt.SDK_EXTENSION_UTILIZED="sdk_extension_utilized",yt.SDK_USE_INAPP_BROWSER="sdk_use_inapp_browser"})(W6||(W6={})),function(yt){yt.RPC_CHECK="rpcCheck",yt.SKIPPED_RPC="skippedRpc"}(FN||(FN={}));const vne=["eth_sendTransaction","eth_signTypedData","eth_signTransaction","personal_sign","wallet_requestPermissions","wallet_switchEthereumChain","eth_signTypedData_v3","eth_signTypedData_v4","metamask_connectSign","metamask_connectWith","metamask_batch"].map(yt=>yt.toLowerCase());function sJ(yt,ir){var _c,mu,Mu,xu;if(!yt.state.channelId)throw new Error("Create a channel first");J2.SocketService(`[SocketService: handleSendMessage()] context=${yt.state.context} areKeysExchanged=${(_c=yt.state.keyExchange)===null||_c===void 0?void 0:_c.areKeysExchanged()}`,ir),!((mu=ir==null?void 0:ir.type)===null||mu===void 0)&&mu.startsWith("key_handshake")?function(l0,E0){var j0;J2.SocketService(`[SocketService: handleKeyHandshake()] context=${l0.state.context}`,E0),(j0=l0.state.socket)===null||j0===void 0||j0.emit(o.EventType.MESSAGE,{id:l0.state.channelId,context:l0.state.context,clientType:l0.state.isOriginator?"dapp":"wallet",message:E0})}(yt,ir):(function(l0,E0){var j0;if(!(!((j0=l0.state.keyExchange)===null||j0===void 0)&&j0.areKeysExchanged())&&!l0.remote.state.relayPersistence)throw J2.SocketService(`[SocketService: validateKeyExchange()] context=${l0.state.context} ERROR keys not exchanged`,E0),console.error("[SocketService: validateKeyExchange()] ERROR keys not exchanged",E0),new Error("Keys not exchanged BBB")}(yt,ir),function(l0,E0){var j0;const M0=(j0=E0==null?void 0:E0.method)!==null&&j0!==void 0?j0:"",B0=E0==null?void 0:E0.id;l0.state.isOriginator&&B0&&(l0.state.rpcMethodTracker[B0]={id:B0,timestamp:Date.now(),method:M0},l0.emit(o.EventType.RPC_UPDATE,l0.state.rpcMethodTracker[B0]))}(yt,ir),function(l0,E0){var j0,M0;const B0=(j0=l0.state.keyExchange)===null||j0===void 0?void 0:j0.encryptMessage(JSON.stringify(E0)),q0={id:l0.state.channelId,context:l0.state.context,clientType:l0.state.isOriginator?"dapp":"wallet",message:B0,plaintext:l0.state.hasPlaintext?JSON.stringify(E0):void 0};J2.SocketService(`[SocketService: encryptAndSendMessage()] context=${l0.state.context}`,q0),E0.type===o.MessageType.TERMINATE&&(l0.state.manualDisconnect=!0),(M0=l0.state.socket)===null||M0===void 0||M0.emit(o.EventType.MESSAGE,q0)}(yt,ir),yt.remote.state.analytics&&yt.remote.state.isOriginator&&ir.method&&vne.includes(ir.method.toLowerCase())&&FH({id:(Mu=yt.remote.state.channelId)!==null&&Mu!==void 0?Mu:"",event:W6.SDK_RPC_REQUEST,sdkVersion:yt.remote.state.sdkVersion,commLayerVersion:eU,walletVersion:(xu=yt.remote.state.walletInfo)===null||xu===void 0?void 0:xu.version,params:{method:ir.method,from:"mobile"}},yt.remote.state.communicationServerUrl).catch(l0=>{console.error("Cannot send analytics",l0)}),function(l0,E0){var j0;return hS(this,void 0,void 0,function*(){const M0=E0==null?void 0:E0.id,B0=(j0=E0==null?void 0:E0.method)!==null&&j0!==void 0?j0:"";if(l0.state.isOriginator&&M0)try{const q0=gne(M0,l0.state.rpcMethodTracker,200).then(F1=>({type:FN.RPC_CHECK,result:F1})),y1=hS(this,void 0,void 0,function*(){const F1=yield(({rpcId:bv,instance:gv})=>hS(void 0,void 0,void 0,function*(){for(;gv.state.lastRpcId===bv||gv.state.lastRpcId===void 0;)yield UH(200);return gv.state.lastRpcId}))({instance:l0,rpcId:M0}),ov=yield gne(F1,l0.state.rpcMethodTracker,200);return{type:FN.SKIPPED_RPC,result:ov}}),v1=yield Promise.race([q0,y1]);if(v1.type===FN.RPC_CHECK){const F1=v1.result;J2.SocketService(`[SocketService:handleRpcReplies()] id=${E0.id} ${B0} ( ${F1.elapsedTime} ms)`,F1.result)}else{if(v1.type!==FN.SKIPPED_RPC)throw new Error(`Error handling RPC replies for ${M0}`);{const{result:F1}=v1;console.warn(`[SocketService handleRpcReplies()] RPC METHOD HAS BEEN SKIPPED rpcid=${M0} method=${B0}`,F1);const ov=Object.assign(Object.assign({},l0.state.rpcMethodTracker[M0]),{error:new Error("SDK_CONNECTION_ISSUE")});l0.emit(o.EventType.RPC_UPDATE,ov);const bv={data:Object.assign(Object.assign({},ov),{jsonrpc:"2.0"}),name:"metamask-provider"};l0.emit(o.EventType.MESSAGE,{message:bv})}}}catch(q0){throw console.warn(`[SocketService handleRpcReplies()] Error rpcId=${E0.id} ${B0}`,q0),q0}})}(yt,ir).catch(l0=>{console.warn("Error handleRpcReplies",l0)}))}const Hue=[{event:"clients_connected",handler:function(yt,ir){return _c=>hS(this,void 0,void 0,function*(){var mu,Mu,xu,l0,E0,j0,M0,B0,q0,y1,v1;const F1=(Mu=(mu=yt.remote.state.channelConfig)===null||mu===void 0?void 0:mu.relayPersistence)!==null&&Mu!==void 0&Μif(J2.SocketService(`[SocketService: handleClientsConnected()] context=${yt.state.context} on 'clients_connected-${ir}' relayPersistence=${F1} resumed=${yt.state.resumed} clientsPaused=${yt.state.clientsPaused} keysExchanged=${(xu=yt.state.keyExchange)===null||xu===void 0?void 0:xu.areKeysExchanged()} isOriginator=${yt.state.isOriginator}`),yt.emit(o.EventType.CLIENTS_CONNECTED,{isOriginator:yt.state.isOriginator,keysExchanged:(l0=yt.state.keyExchange)===null||l0===void 0?void 0:l0.areKeysExchanged(),context:yt.state.context}),yt.state.resumed)yt.state.isOriginator||(J2.SocketService(`[SocketService: handleClientsConnected()] context=${yt.state.context} 'clients_connected' / keysExchanged=${(E0=yt.state.keyExchange)===null||E0===void 0?void 0:E0.areKeysExchanged()} -- backward compatibility`),(j0=yt.state.keyExchange)===null||j0===void 0||j0.start({isOriginator:(M0=yt.state.isOriginator)!==null&&M0!==void 0&&M0})),yt.state.resumed=!1;else if(yt.state.clientsPaused)J2.SocketService("[SocketService: handleClientsConnected()] 'clients_connected' skip sending originatorInfo on pause");else if(!yt.state.isOriginator){const ov=!F1;console.log(`[SocketService: handleClientsConnected()] context=${yt.state.context} on 'clients_connected' / keysExchanged=${(B0=yt.state.keyExchange)===null||B0===void 0?void 0:B0.areKeysExchanged()} -- force=${ov} -- backward compatibility`),J2.SocketService(`[SocketService: handleClientsConnected()] context=${yt.state.context} on 'clients_connected' / keysExchanged=${(q0=yt.state.keyExchange)===null||q0===void 0?void 0:q0.areKeysExchanged()} -- force=${ov} -- backward compatibility`),(y1=yt.state.keyExchange)===null||y1===void 0||y1.start({isOriginator:(v1=yt.state.isOriginator)!==null&&v1!==void 0&&v1,force:ov})}yt.state.clientsConnected=!0,yt.state.clientsPaused=!1})}},{event:"channel_created",handler:function(yt,ir){return _c=>{J2.SocketService(`[SocketService: handleChannelCreated()] context=${yt.state.context} on 'channel_created-${ir}'`,_c),yt.emit(o.EventType.CHANNEL_CREATED,_c)}}},{event:"clients_disconnected",handler:function(yt,ir){return()=>{var _c;yt.state.clientsConnected=!1,J2.SocketService(`[SocketService: handlesClientsDisconnected()] context=${yt.state.context} on 'clients_disconnected-${ir}'`),yt.remote.state.relayPersistence?J2.SocketService(`[SocketService: handlesClientsDisconnected()] context=${yt.state.context} on 'clients_disconnected-${ir}' - relayPersistence enabled, skipping key exchange cleanup.`):(yt.state.isOriginator&&!yt.state.clientsPaused&&((_c=yt.state.keyExchange)===null||_c===void 0||_c.clean()),yt.emit(o.EventType.CLIENTS_DISCONNECTED,ir))}}},{event:"config",handler:function(yt,ir){return _c=>hS(this,void 0,void 0,function*(){var mu,Mu;J2.SocketService(`[SocketService: handleChannelConfig()] update relayPersistence on 'config-${ir}'`,_c),yt.remote.state.relayPersistence=!0,yt.remote.emit(o.EventType.CHANNEL_PERSISTENCE),(mu=yt.state.keyExchange)===null||mu===void 0||mu.setKeysExchanged(!0),yt.state.isOriginator&&yt.remote.state.channelConfig&&!yt.remote.state.channelConfig.relayPersistence&&(yt.remote.state.channelConfig.relayPersistence=!0,(Mu=yt.remote.state.storageManager)===null||Mu===void 0||Mu.persistChannelConfig(yt.remote.state.channelConfig))})}},{event:"message",handler:function(yt,ir){return _c=>{var mu,Mu,xu,l0,E0,j0,M0,B0,q0,y1,v1,F1,ov,bv,gv,xv,hy,oy;const{id:fy,ackId:Fy,message:qv,error:Qv}=_c,T0=(mu=yt.remote.state.relayPersistence)!==null&&mu!==void 0&μif(J2.SocketService(`[SocketService handleMessage()] relayPersistence=${T0} context=${yt.state.context} on 'message' ${ir} keysExchanged=${(Mu=yt.state.keyExchange)===null||Mu===void 0?void 0:Mu.areKeysExchanged()}`,_c),Qv)throw J2.SocketService(` + [SocketService handleMessage()] context=${yt.state.context}::on 'message' error=${Qv}`),new Error(Qv);try{(function(d0,c0){if(c0!==d0.channelId)throw d0.debug&&console.error(`Wrong id ${c0} - should be ${d0.channelId}`),new Error("Wrong id")})(yt.state,fy)}catch{return void console.error("ignore message --- wrong id ",qv)}const X0=typeof qv=="string";if(!X0&&(qv==null?void 0:qv.type)===yA.KEY_HANDSHAKE_START)return T0?void console.warn("[SocketService handleMessage()] Ignoring key exchange message because relay persistence is activated",qv):(J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' received HANDSHAKE_START isOriginator=${yt.state.isOriginator}`,qv),void((xu=yt.state.keyExchange)===null||xu===void 0||xu.start({isOriginator:(l0=yt.state.isOriginator)!==null&&l0!==void 0&&l0,force:!0})));if(!X0&&(!((E0=qv==null?void 0:qv.type)===null||E0===void 0)&&E0.startsWith("key_handshake")))return T0?void console.warn("[SocketService handleMessage()] Ignoring key exchange message because relay persistence is activated",qv):(J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' emit KEY_EXCHANGE`,qv),void yt.emit(tU.KEY_EXCHANGE,{message:qv,context:yt.state.context}));if(X0&&!(!((j0=yt.state.keyExchange)===null||j0===void 0)&&j0.areKeysExchanged())){let d0=!1;try{J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' trying to decrypt message`),(M0=yt.state.keyExchange)===null||M0===void 0||M0.decryptMessage(qv),d0=!0}catch(c0){J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' error`,c0)}if(!d0)return yt.state.isOriginator?(q0=yt.state.keyExchange)===null||q0===void 0||q0.start({isOriginator:(y1=yt.state.isOriginator)!==null&&y1!==void 0&&y1}):yt.sendMessage({type:yA.KEY_HANDSHAKE_START}),void J2.SocketService(`Message ignored because invalid key exchange status. step=${(v1=yt.state.keyExchange)===null||v1===void 0?void 0:v1.getKeyInfo().step}`,(F1=yt.state.keyExchange)===null||F1===void 0?void 0:F1.getKeyInfo(),qv);J2.SocketService("Invalid key exchange status detected --- updating it."),(B0=yt.state.keyExchange)===null||B0===void 0||B0.setKeysExchanged(!0)}else if(!X0&&(qv!=null&&qv.type))return console.warn("[SocketService handleMessage() ::on 'message' received non encrypted unkwown message"),void yt.emit(o.EventType.MESSAGE,qv);if(!X0)return console.warn("[SocketService handleMessage() ::on 'message' received unkwown message",qv),void yt.emit(o.EventType.MESSAGE,qv);const s0=(ov=yt.state.keyExchange)===null||ov===void 0?void 0:ov.decryptMessage(qv),g0=JSON.parse(s0??"{}");if(Fy&&(Fy==null?void 0:Fy.length)>0&&(J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' ackid=${Fy} channelId=${fy}`),(bv=yt.state.socket)===null||bv===void 0||bv.emit(o.EventType.MESSAGE_ACK,{ackId:Fy,channelId:fy,clientType:yt.state.isOriginator?"dapp":"wallet"})),(g0==null?void 0:g0.type)===o.MessageType.PAUSE?yt.state.clientsPaused=!0:yt.state.clientsPaused=!1,yt.state.isOriginator&&g0.data){const d0=g0.data,c0=yt.state.rpcMethodTracker[d0.id];if(c0){const a0=Date.now()-c0.timestamp;J2.SocketService(`[SocketService handleMessage()] context=${yt.state.context}::on 'message' received answer for id=${d0.id} method=${c0.method} responseTime=${a0}`,g0),yt.remote.state.analytics&&vne.includes(c0.method.toLowerCase())&&FH({id:(gv=yt.remote.state.channelId)!==null&&gv!==void 0?gv:"",event:W6.SDK_RPC_REQUEST_DONE,sdkVersion:yt.remote.state.sdkVersion,commLayerVersion:eU,walletVersion:(xv=yt.remote.state.walletInfo)===null||xv===void 0?void 0:xv.version,params:{method:c0.method,from:"mobile"}},yt.remote.state.communicationServerUrl).catch(z0=>{console.error("Cannot send analytics",z0)});const S0=Object.assign(Object.assign({},c0),{result:d0.result,error:d0.error?{code:(hy=d0.error)===null||hy===void 0?void 0:hy.code,message:(oy=d0.error)===null||oy===void 0?void 0:oy.message}:void 0,elapsedTime:a0});yt.state.rpcMethodTracker[d0.id]=S0,yt.emit(o.EventType.RPC_UPDATE,S0)}}yt.emit(o.EventType.MESSAGE,{message:g0})}}},{event:"clients_waiting_to_join",handler:function(yt,ir){return _c=>{J2.SocketService(`[SocketService: handleClientsWaitingToJoin()] context=${yt.state.context} on 'clients_waiting_to_join-${ir}'`,_c),yt.emit(o.EventType.CLIENTS_WAITING,_c)}}}],yne=[{event:o.EventType.KEY_INFO,handler:function(yt){return ir=>{J2.SocketService("[SocketService: handleKeyInfo()] on 'KEY_INFO'",ir),yt.emit(o.EventType.KEY_INFO,ir)}}},{event:o.EventType.KEYS_EXCHANGED,handler:function(yt){return()=>{var ir,_c,mu;J2.SocketService(`[SocketService: handleKeysExchanged()] on 'keys_exchanged' keyschanged=${(ir=yt.state.keyExchange)===null||ir===void 0?void 0:ir.areKeysExchanged()}`);const{channelConfig:Mu}=yt.remote.state;if(Mu){const l0=yt.getKeyExchange().getKeyInfo().ecies;Mu.localKey=l0.private,Mu.otherKey=l0.otherPubKey,yt.remote.state.channelConfig=Mu,(_c=yt.remote.state.storageManager)===null||_c===void 0||_c.persistChannelConfig(Mu).catch(E0=>{console.error("Error persisting channel config",E0)})}yt.emit(o.EventType.KEYS_EXCHANGED,{keysExchanged:(mu=yt.state.keyExchange)===null||mu===void 0?void 0:mu.areKeysExchanged(),isOriginator:yt.state.isOriginator});const xu={keyInfo:yt.getKeyInfo()};yt.emit(o.EventType.SERVICE_STATUS,xu)}}}];function BB(yt,ir){J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} setting socket listeners for channel ${ir}...`);const{socket:_c}=yt.state,{keyExchange:mu}=yt.state;yt.state.setupChannelListeners&&console.warn(`[SocketService: setupChannelListener()] context=${yt.state.context} socket listeners already set up for channel ${ir}`),_c&&yt.state.isOriginator&&(yt.state.debug&&(_c==null||_c.io.on("error",Mu=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=error`,Mu)}),_c==null||_c.io.on("reconnect",Mu=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=reconnect`,Mu)}),_c==null||_c.io.on("reconnect_error",Mu=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=reconnect_error`,Mu)}),_c==null||_c.io.on("reconnect_failed",()=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket event=reconnect_failed`)}),_c==null||_c.io.on("ping",()=>{J2.SocketService(`[SocketService: setupChannelListener()] context=${yt.state.context} socket`)})),_c==null||_c.on("disconnect",Mu=>(J2.SocketService(`[SocketService: setupChannelListener()] on 'disconnect' -- MetaMaskSDK socket disconnected '${Mu}' begin recovery...`),function(xu){return l0=>{J2.SocketService(`[SocketService: handleDisconnect()] on 'disconnect' manualDisconnect=${xu.state.manualDisconnect}`,l0),xu.state.manualDisconnect||(xu.emit(o.EventType.SOCKET_DISCONNECTED),function(E0){typeof window<"u"&&typeof document<"u"&&(J2.SocketService(`[SocketService: checkFocusAndReconnect()] hasFocus=${document.hasFocus()}`,E0),document.hasFocus()?zue(E0).then(j0=>{J2.SocketService(`SocketService::checkFocus reconnectSocket success=${j0}`,E0)}).catch(j0=>{console.error("SocketService::checkFocus Error reconnecting socket",j0)}):window.addEventListener("focus",()=>{zue(E0).catch(j0=>{console.error("SocketService::checkFocus Error reconnecting socket",j0)})},{once:!0}))}(xu))}}(yt)(Mu)))),Hue.forEach(({event:Mu,handler:xu})=>{const l0=`${Mu}-${ir}`;_c==null||_c.on(l0,xu(yt,ir))}),yne.forEach(({event:Mu,handler:xu})=>{mu==null||mu.on(Mu,xu(yt))}),yt.state.setupChannelListeners=!0}class DB extends PH.EventEmitter2{constructor({otherPublicKey:ir,reconnect:_c,communicationLayerPreference:mu,transports:Mu,communicationServerUrl:xu,context:l0,ecies:E0,remote:j0,logging:M0}){super(),this.state={clientsConnected:!1,clientsPaused:!1,manualDisconnect:!1,lastRpcId:void 0,rpcMethodTracker:{},hasPlaintext:!1,communicationServerUrl:""},this.state.resumed=_c,this.state.context=l0,this.state.isOriginator=j0.state.isOriginator,this.state.communicationLayerPreference=mu,this.state.debug=(M0==null?void 0:M0.serviceLayer)===!0,this.remote=j0,(M0==null?void 0:M0.serviceLayer)===!0&&v5.enable("SocketService:Layer"),this.state.communicationServerUrl=xu,this.state.hasPlaintext=this.state.communicationServerUrl!==LB&&(M0==null?void 0:M0.plaintext)===!0;const B0={autoConnect:!1,transports:Sme,withCredentials:!0};Mu&&(B0.transports=Mu),J2.SocketService(`[SocketService: constructor()] Socket IO url: ${this.state.communicationServerUrl}`),this.state.socket=VZ(xu,B0);const q0={communicationLayer:this,otherPublicKey:ir,sendPublicKey:!1,context:this.state.context,ecies:E0,logging:M0};this.state.keyExchange=new Uue(q0)}resetKeys(){return J2.SocketService("[SocketService: resetKeys()] Resetting keys."),void((ir=this.state.keyExchange)===null||ir===void 0||ir.resetKeys());var ir}createChannel(){return function(ir){var _c,mu,Mu,xu;if(J2.SocketService(`[SocketService: createChannel()] context=${ir.state.context}`),(_c=ir.state.socket)===null||_c===void 0?void 0:_c.connected)throw console.error("[SocketService: createChannel()] socket already connected"),new Error("socket already connected");console.log("create channel",ir.state.socket),(mu=ir.state.socket)===null||mu===void 0||mu.connect(),ir.state.manualDisconnect=!1,ir.state.isOriginator=!0;const l0=BZ();return ir.state.channelId=l0,BB(ir,l0),(Mu=ir.state.socket)===null||Mu===void 0||Mu.emit(o.EventType.JOIN_CHANNEL,{channelId:l0,context:`${ir.state.context}createChannel`,clientType:"dapp"}),{channelId:l0,pubKey:((xu=ir.state.keyExchange)===null||xu===void 0?void 0:xu.getMyPublicKey())||""}}(this)}connectToChannel({channelId:ir,withKeyExchange:_c=!1}){return function({options:mu,instance:Mu}){var xu,l0,E0,j0,M0,B0,q0,y1;const{channelId:v1,withKeyExchange:F1}=mu,ov=(xu=Mu.state.isOriginator)!==null&&xu!==void 0&&xu;if(J2.SocketService(`[SocketService: connectToChannel()] context=${Mu.state.context} channelId=${v1} isOriginator=${ov}`,(l0=Mu.state.keyExchange)===null||l0===void 0?void 0:l0.toString()),(E0=Mu.state.socket)===null||E0===void 0?void 0:E0.connected)throw console.error("[SocketService: connectToChannel()] socket already connected"),new Error("socket already connected");const{channelConfig:bv}=Mu.remote.state;ov&&(bv!=null&&bv.relayPersistence)&&(bv.localKey&&((j0=bv==null?void 0:bv.localKey)===null||j0===void 0?void 0:j0.length)>0&&bv.otherKey&&((M0=bv==null?void 0:bv.otherKey)===null||M0===void 0?void 0:M0.length)>0?(B0=Mu.state.keyExchange)===null||B0===void 0||B0.setRelayPersistence({localKey:bv.localKey,otherKey:bv.otherKey}):console.warn("Missing keys in relay persistence",bv)),Mu.state.manualDisconnect=!1,(q0=Mu.state.socket)===null||q0===void 0||q0.connect(),Mu.state.withKeyExchange=F1,Mu.state.isOriginator=ov,Mu.state.channelId=v1,BB(Mu,v1),(y1=Mu.state.socket)===null||y1===void 0||y1.emit(o.EventType.JOIN_CHANNEL,{channelId:v1,context:`${Mu.state.context}_connectToChannel`,clientType:ov?"dapp":"wallet"},(gv,xv)=>{gv==="error_terminated"?Mu.emit(o.EventType.TERMINATE):typeof xv=="object"&&xv.persistence&&Mu.emit(o.EventType.CHANNEL_PERSISTENCE)})}({options:{channelId:ir,withKeyExchange:_c},instance:this})}getKeyInfo(){return this.state.keyExchange.getKeyInfo()}keyCheck(){var ir,_c;(_c=(ir=this).state.socket)===null||_c===void 0||_c.emit(o.EventType.MESSAGE,{id:ir.state.channelId,context:ir.state.context,message:{type:yA.KEY_HANDSHAKE_CHECK,pubkey:ir.getKeyInfo().ecies.otherPubKey}})}getKeyExchange(){return this.state.keyExchange}sendMessage(ir){return sJ(this,ir)}ping(){return ir=this,J2.SocketService(`[SocketService: ping()] context=${ir.state.context} originator=${ir.state.isOriginator} keysExchanged=${(_c=ir.state.keyExchange)===null||_c===void 0?void 0:_c.areKeysExchanged()}`),ir.state.isOriginator&&(!((mu=ir.state.keyExchange)===null||mu===void 0)&&mu.areKeysExchanged()?(console.warn(`[SocketService:ping()] context=${ir.state.context} sending READY message`),ir.sendMessage({type:o.MessageType.READY})):(console.warn(`[SocketService: ping()] context=${ir.state.context} starting key exchange`),(Mu=ir.state.keyExchange)===null||Mu===void 0||Mu.start({isOriginator:(xu=ir.state.isOriginator)!==null&&xu!==void 0&&xu}))),void((l0=ir.state.socket)===null||l0===void 0||l0.emit(o.EventType.MESSAGE,{id:ir.state.channelId,context:ir.state.context,clientType:ir.remote.state.isOriginator?"dapp":"wallet",message:{type:o.MessageType.PING}}));var ir,_c,mu,Mu,xu,l0}pause(){return ir=this,J2.SocketService(`[SocketService: pause()] context=${ir.state.context}`),ir.state.manualDisconnect=!0,!((_c=ir.state.keyExchange)===null||_c===void 0)&&_c.areKeysExchanged()&&ir.sendMessage({type:o.MessageType.PAUSE}),void((mu=ir.state.socket)===null||mu===void 0||mu.disconnect());var ir,_c,mu}isConnected(){var ir;return(ir=this.state.socket)===null||ir===void 0?void 0:ir.connected}resume(){return ir=this,J2.SocketService(`[SocketService: resume()] context=${ir.state.context} connected=${(_c=ir.state.socket)===null||_c===void 0?void 0:_c.connected} manualDisconnect=${ir.state.manualDisconnect} resumed=${ir.state.resumed} keysExchanged=${(mu=ir.state.keyExchange)===null||mu===void 0?void 0:mu.areKeysExchanged()}`),!((Mu=ir.state.socket)===null||Mu===void 0)&&Mu.connected?J2.SocketService("[SocketService: resume()] already connected."):((xu=ir.state.socket)===null||xu===void 0||xu.connect(),J2.SocketService(`[SocketService: resume()] after connecting socket --> connected=${(l0=ir.state.socket)===null||l0===void 0?void 0:l0.connected}`),(E0=ir.state.socket)===null||E0===void 0||E0.emit(o.EventType.JOIN_CHANNEL,{channelId:ir.state.channelId,context:`${ir.state.context}_resume`,clientType:ir.remote.state.isOriginator?"dapp":"wallet"})),!((j0=ir.state.keyExchange)===null||j0===void 0)&&j0.areKeysExchanged()?ir.state.isOriginator||ir.sendMessage({type:o.MessageType.READY}):ir.state.isOriginator||(M0=ir.state.keyExchange)===null||M0===void 0||M0.start({isOriginator:(B0=ir.state.isOriginator)!==null&&B0!==void 0&&B0}),ir.state.manualDisconnect=!1,void(ir.state.resumed=!0);var ir,_c,mu,Mu,xu,l0,E0,j0,M0,B0}getRPCMethodTracker(){return this.state.rpcMethodTracker}disconnect(ir){return function(_c,mu){var Mu,xu;J2.SocketService(`[SocketService: disconnect()] context=${_c.state.context}`,mu),mu!=null&&mu.terminate&&(_c.state.channelId=mu.channelId,(Mu=_c.state.keyExchange)===null||Mu===void 0||Mu.clean(),_c.state.rpcMethodTracker={}),_c.state.manualDisconnect=!0,(xu=_c.state.socket)===null||xu===void 0||xu.disconnect()}(this,ir)}}var Kue;function lJ(yt){return()=>hS(this,void 0,void 0,function*(){var ir,_c,mu;const{state:Mu}=yt;if(Mu.authorized)return;yield hS(this,void 0,void 0,function*(){for(;!Mu.walletInfo;)yield UH(500)});const xu="7.3".localeCompare(((ir=Mu.walletInfo)===null||ir===void 0?void 0:ir.version)||"");if(J2.RemoteCommunication(`[RemoteCommunication: handleAuthorizedEvent()] HACK 'authorized' version=${(_c=Mu.walletInfo)===null||_c===void 0?void 0:_c.version} compareValue=${xu}`),xu!==1)return;const l0=Mu.platformType===o.PlatformType.MobileWeb||Mu.platformType===o.PlatformType.ReactNative||Mu.platformType===o.PlatformType.MetaMaskMobileWebview;J2.RemoteCommunication(`[RemoteCommunication: handleAuthorizedEvent()] HACK 'authorized' platform=${Mu.platformType} secure=${l0} channel=${Mu.channelId} walletVersion=${(mu=Mu.walletInfo)===null||mu===void 0?void 0:mu.version}`),l0&&(Mu.authorized=!0,yt.emit(o.EventType.AUTHORIZED))})}function xme(yt){return ir=>{const{state:_c}=yt;J2.RemoteCommunication(`[RemoteCommunication: handleChannelCreatedEvent()] context=${_c.context} on 'channel_created' channelId=${ir}`),yt.emit(o.EventType.CHANNEL_CREATED,ir)}}function Vue(yt,ir){return()=>{var _c,mu,Mu,xu;const{state:l0}=yt;if(J2.RemoteCommunication(`[RemoteCommunication: handleClientsConnectedEvent()] on 'clients_connected' channel=${l0.channelId} keysExchanged=${(mu=(_c=l0.communicationLayer)===null||_c===void 0?void 0:_c.getKeyInfo())===null||mu===void 0?void 0:mu.keysExchanged}`),l0.analytics){const E0=l0.isOriginator?W6.REQUEST:W6.REQUEST_MOBILE;FH(Object.assign(Object.assign({id:(Mu=l0.channelId)!==null&&Mu!==void 0?Mu:"",event:l0.reconnection?W6.RECONNECT:E0},l0.originatorInfo),{commLayer:ir,sdkVersion:l0.sdkVersion,walletVersion:(xu=l0.walletInfo)===null||xu===void 0?void 0:xu.version,commLayerVersion:eU}),l0.communicationServerUrl).catch(j0=>{console.error("Cannot send analytics",j0)})}l0.clientsConnected=!0,l0.originatorInfoSent=!1,yt.emit(o.EventType.CLIENTS_CONNECTED)}}function cJ(yt,ir){return _c=>{var mu;const{state:Mu}=yt;J2.RemoteCommunication(`[RemoteCommunication: handleClientsDisconnectedEvent()] context=${Mu.context} on 'clients_disconnected' channelId=${_c}`),Mu.relayPersistence||(Mu.clientsConnected=!1,Mu.ready=!1,Mu.authorized=!1),yt.emit(o.EventType.CLIENTS_DISCONNECTED,Mu.channelId),yt.setConnectionStatus(o.ConnectionStatus.DISCONNECTED),Mu.analytics&&Mu.channelId&&FH({id:Mu.channelId,event:W6.DISCONNECTED,sdkVersion:Mu.sdkVersion,commLayer:ir,commLayerVersion:eU,walletVersion:(mu=Mu.walletInfo)===null||mu===void 0?void 0:mu.version},Mu.communicationServerUrl).catch(xu=>{console.error("Cannot send analytics",xu)})}}function JA(yt){return ir=>{var _c;const{state:mu}=yt;if(J2.RemoteCommunication(`[RemoteCommunication: handleClientsWaitingEvent()] context=${mu.context} on 'clients_waiting' numberUsers=${ir} ready=${mu.ready} autoStarted=${mu.originatorConnectStarted}`),yt.setConnectionStatus(o.ConnectionStatus.WAITING),yt.emit(o.EventType.CLIENTS_WAITING,ir),mu.originatorConnectStarted){J2.RemoteCommunication(`[RemoteCommunication: handleClientsWaitingEvent()] on 'clients_waiting' watch autoStarted=${mu.originatorConnectStarted} timeout`,mu.autoConnectOptions);const Mu=((_c=mu.autoConnectOptions)===null||_c===void 0?void 0:_c.timeout)||3e3,xu=setTimeout(()=>{J2.RemoteCommunication(`[RemoteCommunication: handleClientsWaitingEvent()] setTimeout(${Mu}) terminate channelConfig`,mu.autoConnectOptions),mu.originatorConnectStarted=!1,mu.ready||yt.setConnectionStatus(o.ConnectionStatus.TIMEOUT),clearTimeout(xu)},Mu)}}}function kme(yt,ir){return _c=>{var mu,Mu,xu,l0,E0,j0,M0,B0;const{state:q0}=yt;if(J2.RemoteCommunication(`[RemoteCommunication: handleKeysExchangedEvent()] context=${q0.context} on commLayer.'keys_exchanged' channel=${q0.channelId}`,_c),(Mu=(mu=q0.communicationLayer)===null||mu===void 0?void 0:mu.getKeyInfo())===null||Mu===void 0?void 0:Mu.keysExchanged){const y1=Object.assign(Object.assign({},q0.channelConfig),{channelId:(xu=q0.channelId)!==null&&xu!==void 0?xu:"",validUntil:((l0=q0.channelConfig)===null||l0===void 0?void 0:l0.validUntil)||aJ,localKey:q0.communicationLayer.getKeyInfo().ecies.private,otherKey:q0.communicationLayer.getKeyInfo().ecies.otherPubKey});(E0=q0.storageManager)===null||E0===void 0||E0.persistChannelConfig(y1).catch(v1=>{console.error("Error persisting channel config",v1)}),yt.setConnectionStatus(o.ConnectionStatus.LINKED)}(function(y1,v1){var F1,ov,bv,gv,xv,hy,oy,fy;const{state:Fy}=y1;J2.RemoteCommunication(`[RemoteCommunication: setLastActiveDate()] channel=${Fy.channelId}`,v1);const qv=Object.assign(Object.assign({},Fy.channelConfig),{channelId:(F1=Fy.channelId)!==null&&F1!==void 0?F1:"",validUntil:(bv=(ov=Fy.channelConfig)===null||ov===void 0?void 0:ov.validUntil)!==null&&bv!==void 0?bv:0,relayPersistence:Fy.relayPersistence,localKey:(xv=(gv=Fy.communicationLayer)===null||gv===void 0?void 0:gv.state.keyExchange)===null||xv===void 0?void 0:xv.getKeyInfo().ecies.private,otherKey:(oy=(hy=Fy.communicationLayer)===null||hy===void 0?void 0:hy.state.keyExchange)===null||oy===void 0?void 0:oy.getKeyInfo().ecies.otherPubKey,lastActive:v1.getTime()});(fy=Fy.storageManager)===null||fy===void 0||fy.persistChannelConfig(qv)})(yt,new Date),q0.analytics&&q0.channelId&&FH({id:q0.channelId,event:_c.isOriginator?W6.CONNECTED:W6.CONNECTED_MOBILE,sdkVersion:q0.sdkVersion,commLayer:ir,commLayerVersion:eU,walletVersion:(j0=q0.walletInfo)===null||j0===void 0?void 0:j0.version},q0.communicationServerUrl).catch(y1=>{console.error("Cannot send analytics",y1)}),q0.isOriginator=_c.isOriginator,_c.isOriginator||((M0=q0.communicationLayer)===null||M0===void 0||M0.sendMessage({type:o.MessageType.READY}),q0.ready=!0,q0.paused=!1),_c.isOriginator&&!q0.originatorInfoSent&&((B0=q0.communicationLayer)===null||B0===void 0||B0.sendMessage({type:o.MessageType.ORIGINATOR_INFO,originatorInfo:q0.originatorInfo,originator:q0.originatorInfo}),q0.originatorInfoSent=!0)}}function Mq(yt){return ir=>{let _c=ir;ir.message&&(_c=_c.message),function(mu,Mu){const{state:xu}=Mu;if(J2.RemoteCommunication(`[RemoteCommunication: onCommunicationLayerMessage()] context=${xu.context} on 'message' typeof=${typeof mu}`,mu),Mu.state.ready=!0,xu.isOriginator||mu.type!==o.MessageType.ORIGINATOR_INFO)if(xu.isOriginator&&mu.type===o.MessageType.WALLET_INFO)(function(l0,E0){const{state:j0}=l0;j0.walletInfo=E0.walletInfo,j0.paused=!1})(Mu,mu);else{if(mu.type===o.MessageType.TERMINATE)(function(l0){const{state:E0}=l0;E0.isOriginator&&(rU({options:{terminate:!0,sendMessage:!1},instance:l0}),console.debug(),l0.emit(o.EventType.TERMINATE))})(Mu);else if(mu.type===o.MessageType.PAUSE)(function(l0){const{state:E0}=l0;E0.paused=!0,l0.setConnectionStatus(o.ConnectionStatus.PAUSED)})(Mu);else if(mu.type===o.MessageType.READY&&xu.isOriginator)(function(l0){const{state:E0}=l0;l0.setConnectionStatus(o.ConnectionStatus.LINKED);const j0=E0.paused;E0.paused=!1,l0.emit(o.EventType.CLIENTS_READY,{isOriginator:E0.isOriginator,walletInfo:E0.walletInfo}),j0&&(E0.authorized=!0,l0.emit(o.EventType.AUTHORIZED))})(Mu);else{if(mu.type===o.MessageType.OTP&&xu.isOriginator)return void function(l0,E0){var j0;const{state:M0}=l0;l0.emit(o.EventType.OTP,E0.otpAnswer),"6.6".localeCompare(((j0=M0.walletInfo)===null||j0===void 0?void 0:j0.version)||"")===1&&(console.warn("RemoteCommunication::on 'otp' -- backward compatibility <6.6 -- triger eth_requestAccounts"),l0.emit(o.EventType.SDK_RPC_CALL,{method:M7,params:[]}))}(Mu,mu);mu.type===o.MessageType.AUTHORIZED&&xu.isOriginator&&function(l0){const{state:E0}=l0;E0.authorized=!0,l0.emit(o.EventType.AUTHORIZED)}(Mu)}Mu.emit(o.EventType.MESSAGE,mu)}else(function(l0,E0){var j0;const{state:M0}=l0;(j0=M0.communicationLayer)===null||j0===void 0||j0.sendMessage({type:o.MessageType.WALLET_INFO,walletInfo:M0.walletInfo}),M0.originatorInfo=E0.originatorInfo||E0.originator,l0.emit(o.EventType.CLIENTS_READY,{isOriginator:M0.isOriginator,originatorInfo:M0.originatorInfo}),M0.paused=!1})(Mu,mu)}(_c,yt)}}function que(yt){return()=>{const{state:ir}=yt;J2.RemoteCommunication("[RemoteCommunication: handleSocketReconnectEvent()] on 'socket_reconnect' -- reset key exchange status / set ready to false"),ir.ready=!1,ir.authorized=!1,uC(ir),yt.emitServiceStatusEvent({context:"socket_reconnect"})}}function Wue(yt){return()=>{const{state:ir}=yt;J2.RemoteCommunication("[RemoteCommunication: handleSocketDisconnectedEvent()] on 'socket_Disconnected' set ready to false"),ir.ready=!1}}function G6(yt){return()=>hS(this,void 0,void 0,function*(){var ir,_c,mu,Mu,xu,l0,E0;const{state:j0}=yt;J2.RemoteCommunication(`[RemoteCommunication: handleFullPersistenceEvent()] context=${j0.context}`),yt.state.ready=!0,yt.state.clientsConnected=!0,yt.state.authorized=!0,yt.state.relayPersistence=!0,(ir=yt.state.communicationLayer)===null||ir===void 0||ir.getKeyExchange().setKeysExchanged(!0),yt.emit(o.EventType.KEYS_EXCHANGED,{keysExchanged:!0,isOriginator:!0}),yt.emit(o.EventType.AUTHORIZED),yt.emit(o.EventType.CLIENTS_READY),yt.emit(o.EventType.CHANNEL_PERSISTENCE);try{j0.channelConfig=Object.assign(Object.assign({},j0.channelConfig),{localKey:(_c=j0.communicationLayer)===null||_c===void 0?void 0:_c.getKeyExchange().getKeyInfo().ecies.private,otherKey:(mu=j0.communicationLayer)===null||mu===void 0?void 0:mu.getKeyExchange().getOtherPublicKey(),channelId:(Mu=j0.channelId)!==null&&Mu!==void 0?Mu:"",validUntil:(l0=(xu=j0.channelConfig)===null||xu===void 0?void 0:xu.validUntil)!==null&&l0!==void 0?l0:aJ,relayPersistence:!0}),yield(E0=j0.storageManager)===null||E0===void 0?void 0:E0.persistChannelConfig(j0.channelConfig)}catch(M0){console.error("Error persisting channel config",M0)}})}function rU({options:yt,instance:ir}){var _c,mu,Mu,xu,l0,E0;const{state:j0}=ir;J2.RemoteCommunication(`[RemoteCommunication: disconnect()] channel=${j0.channelId}`,yt),j0.ready=!1,j0.paused=!1,yt!=null&&yt.terminate?((_c=j0.storageManager)===null||_c===void 0||_c.terminate((mu=j0.channelId)!==null&&mu!==void 0?mu:""),ir.state.terminated=!0,yt.sendMessage&&(!((Mu=j0.communicationLayer)===null||Mu===void 0)&&Mu.getKeyInfo().keysExchanged)&&((xu=j0.communicationLayer)===null||xu===void 0||xu.sendMessage({type:o.MessageType.TERMINATE})),j0.relayPersistence=!1,j0.channelId=BZ(),yt.channelId=j0.channelId,j0.channelConfig=void 0,j0.originatorConnectStarted=!1,(l0=j0.communicationLayer)===null||l0===void 0||l0.disconnect(yt),ir.setConnectionStatus(o.ConnectionStatus.TERMINATED)):((E0=j0.communicationLayer)===null||E0===void 0||E0.disconnect(yt),ir.setConnectionStatus(o.ConnectionStatus.DISCONNECTED))}o.CommunicationLayerPreference=void 0,o.PlatformType=void 0,function(yt){yt.SOCKET="socket"}(o.CommunicationLayerPreference||(o.CommunicationLayerPreference={})),function(yt){yt.NonBrowser="nodejs",yt.MetaMaskMobileWebview="in-app-browser",yt.DesktopWeb="web-desktop",yt.MobileWeb="web-mobile",yt.ReactNative="react-native"}(o.PlatformType||(o.PlatformType={}));class Gue extends PH.EventEmitter2{constructor({platformType:ir,communicationLayerPreference:_c,otherPublicKey:mu,reconnect:Mu,walletInfo:xu,dappMetadata:l0,protocolVersion:E0,transports:j0,context:M0,relayPersistence:B0,ecies:q0,analytics:y1=!1,storage:v1,sdkVersion:F1,communicationServerUrl:ov=LB,logging:bv,autoConnect:gv={timeout:3e3}}){super(),this.state={ready:!1,authorized:!1,isOriginator:!1,terminated:!1,protocolVersion:1,paused:!1,platformType:"metamask-mobile",analytics:!1,reconnection:!1,originatorInfoSent:!1,communicationServerUrl:LB,context:"",persist:!1,clientsConnected:!1,sessionDuration:aJ,originatorConnectStarted:!1,debug:!1,_connectionStatus:o.ConnectionStatus.DISCONNECTED},this.state.otherPublicKey=mu,this.state.dappMetadata=l0,this.state.walletInfo=xu,this.state.transports=j0,this.state.platformType=ir,this.state.analytics=y1,this.state.protocolVersion=E0??1,this.state.isOriginator=!mu,this.state.relayPersistence=B0,this.state.communicationServerUrl=ov,this.state.context=M0,this.state.terminated=!1,this.state.sdkVersion=F1,this.setMaxListeners(50),this.setConnectionStatus(o.ConnectionStatus.DISCONNECTED),v1!=null&&v1.duration&&(this.state.sessionDuration=aJ),this.state.storageOptions=v1,this.state.autoConnectOptions=gv,this.state.debug=(bv==null?void 0:bv.remoteLayer)===!0,(bv==null?void 0:bv.remoteLayer)===!0&&v5.enable("RemoteCommunication:Layer"),(bv==null?void 0:bv.serviceLayer)===!0&&v5.enable("SocketService:Layer"),(bv==null?void 0:bv.eciesLayer)===!0&&v5.enable("ECIES:Layer"),(bv==null?void 0:bv.keyExchangeLayer)===!0&&v5.enable("KeyExchange:Layer"),this.state.logging=bv,v1!=null&&v1.storageManager&&(this.state.storageManager=v1.storageManager),J2.RemoteCommunication(`[RemoteCommunication: constructor()] protocolVersion=${E0} relayPersistence=${B0} isOriginator=${this.state.isOriginator} communicationLayerPreference=${_c} otherPublicKey=${mu} reconnect=${Mu}`),this.initCommunicationLayer({communicationLayerPreference:_c,otherPublicKey:mu,reconnect:Mu,ecies:q0,communicationServerUrl:ov}),this.emitServiceStatusEvent({context:"constructor"})}initCommunicationLayer({communicationLayerPreference:ir,otherPublicKey:_c,reconnect:mu,ecies:Mu,communicationServerUrl:xu=LB}){return function({communicationLayerPreference:l0,otherPublicKey:E0,reconnect:j0,ecies:M0,communicationServerUrl:B0=LB,instance:q0}){var y1,v1,F1,ov,bv,gv,xv,hy,oy;const{state:fy}=q0;if(J2.RemoteCommunication("[initCommunicationLayer()] ",JSON.stringify(fy,null,2)),l0!==o.CommunicationLayerPreference.SOCKET)throw new Error("Invalid communication protocol");fy.communicationLayer=new DB({communicationLayerPreference:l0,otherPublicKey:E0,reconnect:j0,transports:fy.transports,communicationServerUrl:B0,context:fy.context,ecies:M0,logging:fy.logging,remote:q0});let Fy=typeof document<"u"&&document.URL||"",qv=typeof document<"u"&&document.title||"";!((y1=fy.dappMetadata)===null||y1===void 0)&&y1.url&&(Fy=fy.dappMetadata.url),!((v1=fy.dappMetadata)===null||v1===void 0)&&v1.name&&(qv=fy.dappMetadata.name);const Qv=typeof window<"u"&&window.location!==void 0?window.location.hostname:(gv=(ov=(F1=fy.dappMetadata)===null||F1===void 0?void 0:F1.name)!==null&&ov!==void 0?ov:(bv=fy.dappMetadata)===null||bv===void 0?void 0:bv.url)!==null&&gv!==void 0?gv:"unkown",T0={url:Fy,title:qv,source:(xv=fy.dappMetadata)===null||xv===void 0?void 0:xv.source,dappId:Qv,icon:((hy=fy.dappMetadata)===null||hy===void 0?void 0:hy.iconUrl)||((oy=fy.dappMetadata)===null||oy===void 0?void 0:oy.base64Icon),platform:fy.platformType,apiVersion:eU};fy.originatorInfo=T0;const X0={[o.EventType.AUTHORIZED]:lJ(q0),[o.EventType.MESSAGE]:Mq(q0),[o.EventType.CHANNEL_PERSISTENCE]:G6(q0),[o.EventType.CLIENTS_CONNECTED]:Vue(q0,l0),[o.EventType.KEYS_EXCHANGED]:kme(q0,l0),[o.EventType.SOCKET_DISCONNECTED]:Wue(q0),[o.EventType.SOCKET_RECONNECT]:que(q0),[o.EventType.CLIENTS_DISCONNECTED]:cJ(q0,l0),[o.EventType.KEY_INFO]:()=>{},[o.EventType.CHANNEL_CREATED]:xme(q0),[o.EventType.CLIENTS_WAITING]:JA(q0),[o.EventType.RPC_UPDATE]:s0=>{q0.emit(o.EventType.RPC_UPDATE,s0)}};for(const[s0,g0]of Object.entries(X0))try{fy.communicationLayer.on(s0,g0)}catch(d0){console.error(`Error registering handler for ${s0}:`,d0)}}({communicationLayerPreference:ir,otherPublicKey:_c,reconnect:mu,ecies:Mu,communicationServerUrl:xu,instance:this})}originatorSessionConnect(){return hS(this,void 0,void 0,function*(){return yield function(ir){var _c;return hS(this,void 0,void 0,function*(){const{state:mu}=ir;if(!mu.storageManager)return void J2.RemoteCommunication("[RemoteCommunication: originatorSessionConnect()] no storage manager defined - skip");const Mu=yield mu.storageManager.getPersistedChannelConfig();if(J2.RemoteCommunication(`[RemoteCommunication: originatorSessionConnect()] autoStarted=${mu.originatorConnectStarted} channelConfig`,Mu),(_c=mu.communicationLayer)===null||_c===void 0?void 0:_c.isConnected())return J2.RemoteCommunication("[RemoteCommunication: originatorSessionConnect()] socket already connected - skip"),Mu;if(Mu){if(Mu.validUntil>Date.now())return mu.channelConfig=Mu,mu.originatorConnectStarted=!0,mu.channelId=Mu==null?void 0:Mu.channelId,mu.reconnection=!0,Mu;J2.RemoteCommunication("[RemoteCommunication: autoConnect()] Session has expired")}mu.originatorConnectStarted=!1})}(this)})}generateChannelIdConnect(){return hS(this,void 0,void 0,function*(){return function(ir){var _c,mu,Mu,xu;if(!ir.communicationLayer)throw new Error("communication layer not initialized");if(ir.ready)throw new Error("Channel already connected");if(ir.channelId&&(!((_c=ir.communicationLayer)===null||_c===void 0)&&_c.isConnected()))return console.warn("Channel already exists -- interrupt generateChannelId",ir.channelConfig),ir.channelConfig=Object.assign(Object.assign({},ir.channelConfig),{channelId:ir.channelId,validUntil:Date.now()+ir.sessionDuration}),(mu=ir.storageManager)===null||mu===void 0||mu.persistChannelConfig(ir.channelConfig),{channelId:ir.channelId,pubKey:(xu=(Mu=ir.communicationLayer)===null||Mu===void 0?void 0:Mu.getKeyInfo())===null||xu===void 0?void 0:xu.ecies.public};J2.RemoteCommunication("[RemoteCommunication: generateChannelId()]");const l0=ir.communicationLayer.createChannel();J2.RemoteCommunication("[RemoteCommunication: generateChannelId()] channel created",l0);const E0=Object.assign(Object.assign({},ir.channelConfig),{channelId:l0.channelId,validUntil:Date.now()+ir.sessionDuration});return ir.channelId=l0.channelId,ir.channelConfig=E0,{channelId:ir.channelId,pubKey:l0.pubKey}}(this.state)})}clean(){return uC(this.state)}connectToChannel({channelId:ir,withKeyExchange:_c}){return function({channelId:mu,withKeyExchange:Mu,state:xu}){var l0,E0,j0;if(!aue(mu))throw J2.RemoteCommunication(`[RemoteCommunication: connectToChannel()] context=${xu.context} invalid channel channelId=${mu}`),new Error(`Invalid channel ${mu}`);if(J2.RemoteCommunication(`[RemoteCommunication: connectToChannel()] context=${xu.context} channelId=${mu} withKeyExchange=${Mu}`),(l0=xu.communicationLayer)===null||l0===void 0?void 0:l0.isConnected())return void J2.RemoteCommunication(`[RemoteCommunication: connectToChannel()] context=${xu.context} already connected - interrupt connection.`);xu.channelId=mu,(E0=xu.communicationLayer)===null||E0===void 0||E0.connectToChannel({channelId:mu,withKeyExchange:Mu});const M0=Object.assign(Object.assign({},xu.channelConfig),{channelId:mu,validUntil:Date.now()+xu.sessionDuration});xu.channelConfig=M0,(j0=xu.storageManager)===null||j0===void 0||j0.persistChannelConfig(M0)}({channelId:ir,withKeyExchange:_c,state:this.state})}sendMessage(ir){return function(_c,mu){var Mu,xu;return hS(this,void 0,void 0,function*(){const{state:l0}=_c;J2.RemoteCommunication(`[RemoteCommunication: sendMessage()] context=${l0.context} paused=${l0.paused} ready=${l0.ready} relayPersistence=${l0.relayPersistence} authorized=${l0.authorized} socket=${(Mu=l0.communicationLayer)===null||Mu===void 0?void 0:Mu.isConnected()} clientsConnected=${l0.clientsConnected} status=${l0._connectionStatus}`,mu),l0.relayPersistence||l0.ready&&(!((xu=l0.communicationLayer)===null||xu===void 0)&&xu.isConnected())&&l0.clientsConnected||(J2.RemoteCommunication(`[RemoteCommunication: sendMessage()] context=${l0.context} SKIP message waiting for MM mobile readiness.`),yield new Promise(E0=>{_c.once(o.EventType.CLIENTS_READY,E0)}),J2.RemoteCommunication(`[RemoteCommunication: sendMessage()] context=${l0.context} AFTER SKIP / READY -- sending pending message`));try{yield function(E0,j0){return hS(this,void 0,void 0,function*(){return new Promise(M0=>{var B0,q0,y1,v1;const{state:F1}=E0;if(J2.RemoteCommunication(`[RemoteCommunication: handleAuthorization()] context=${F1.context} ready=${F1.ready} authorized=${F1.authorized} method=${j0.method}`),"7.3".localeCompare(((B0=F1.walletInfo)===null||B0===void 0?void 0:B0.version)||"")===1)return J2.RemoteCommunication(`[RemoteCommunication: handleAuthorization()] compatibility hack wallet version > ${(q0=F1.walletInfo)===null||q0===void 0?void 0:q0.version}`),(y1=F1.communicationLayer)===null||y1===void 0||y1.sendMessage(j0),void M0();!F1.isOriginator||F1.authorized||F1.relayPersistence?((v1=F1.communicationLayer)===null||v1===void 0||v1.sendMessage(j0),M0()):E0.once(o.EventType.AUTHORIZED,()=>{var ov;J2.RemoteCommunication(`[RemoteCommunication: handleAuthorization()] context=${F1.context} AFTER SKIP / AUTHORIZED -- sending pending message`),(ov=F1.communicationLayer)===null||ov===void 0||ov.sendMessage(j0),M0()})})})}(_c,mu)}catch(E0){throw console.error(`[RemoteCommunication: sendMessage()] context=${l0.context} ERROR`,E0),E0}})}(this,ir)}testStorage(){return hS(this,void 0,void 0,function*(){return function(ir){var _c;return hS(this,void 0,void 0,function*(){const mu=yield(_c=ir.storageManager)===null||_c===void 0?void 0:_c.getPersistedChannelConfig();J2.RemoteCommunication("[RemoteCommunication: testStorage()] res",mu)})}(this.state)})}getChannelConfig(){return this.state.channelConfig}isReady(){return this.state.ready}isConnected(){var ir;return(ir=this.state.communicationLayer)===null||ir===void 0?void 0:ir.isConnected()}isAuthorized(){return this.state.authorized}isPaused(){return this.state.paused}getCommunicationLayer(){return this.state.communicationLayer}ping(){var ir;J2.RemoteCommunication(`[RemoteCommunication: ping()] channel=${this.state.channelId}`),(ir=this.state.communicationLayer)===null||ir===void 0||ir.ping()}testLogger(){J2.RemoteCommunication(`testLogger() channel=${this.state.channelId}`),J2.SocketService(`testLogger() channel=${this.state.channelId}`),J2.Ecies(`testLogger() channel=${this.state.channelId}`),J2.KeyExchange(`testLogger() channel=${this.state.channelId}`)}keyCheck(){var ir;J2.RemoteCommunication(`[RemoteCommunication: keyCheck()] channel=${this.state.channelId}`),(ir=this.state.communicationLayer)===null||ir===void 0||ir.keyCheck()}setConnectionStatus(ir){this.state._connectionStatus!==ir&&(this.state._connectionStatus=ir,this.emit(o.EventType.CONNECTION_STATUS,ir),this.emitServiceStatusEvent({context:"setConnectionStatus"}))}emitServiceStatusEvent(ir={}){this.emit(o.EventType.SERVICE_STATUS,this.getServiceStatus())}getConnectionStatus(){return this.state._connectionStatus}getServiceStatus(){return{originatorInfo:this.state.originatorInfo,keyInfo:this.getKeyInfo(),connectionStatus:this.state._connectionStatus,channelConfig:this.state.channelConfig,channelId:this.state.channelId}}getKeyInfo(){var ir;return(ir=this.state.communicationLayer)===null||ir===void 0?void 0:ir.getKeyInfo()}resetKeys(){var ir;(ir=this.state.communicationLayer)===null||ir===void 0||ir.resetKeys()}setOtherPublicKey(ir){var _c;const mu=(_c=this.state.communicationLayer)===null||_c===void 0?void 0:_c.getKeyExchange();if(!mu)throw new Error("KeyExchange is not initialized.");mu.getOtherPublicKey()!==ir&&mu.setOtherPublicKey(ir)}pause(){var ir;J2.RemoteCommunication(`[RemoteCommunication: pause()] channel=${this.state.channelId}`),(ir=this.state.communicationLayer)===null||ir===void 0||ir.pause(),this.setConnectionStatus(o.ConnectionStatus.PAUSED)}getVersion(){return eU}hasRelayPersistence(){var ir;return(ir=this.state.relayPersistence)!==null&&ir!==void 0&&ir}resume(){return function(ir){var _c;const{state:mu}=ir;J2.RemoteCommunication(`[RemoteCommunication: resume()] channel=${mu.channelId}`),(_c=mu.communicationLayer)===null||_c===void 0||_c.resume(),ir.setConnectionStatus(o.ConnectionStatus.LINKED)}(this)}getChannelId(){return this.state.channelId}getRPCMethodTracker(){var ir;return(ir=this.state.communicationLayer)===null||ir===void 0?void 0:ir.getRPCMethodTracker()}disconnect(ir){return rU({options:ir,instance:this})}}function s$(yt,ir,_c,mu){return new(_c||(_c=Promise))(function(Mu,xu){function l0(M0){try{j0(mu.next(M0))}catch(B0){xu(B0)}}function E0(M0){try{j0(mu.throw(M0))}catch(B0){xu(B0)}}function j0(M0){M0.done?Mu(M0.value):function(B0){return B0 instanceof _c?B0:new _c(function(q0){q0(B0)})}(M0.value).then(l0,E0)}j0((mu=mu.apply(yt,[])).next())})}function bne(yt,ir,_c,mu){if(typeof ir=="function"?yt!==ir||!mu:!ir.has(yt))throw new TypeError("Cannot read private member from an object whose class did not declare it");return ir.get(yt)}function wne(yt,ir,_c,mu,Mu){if(typeof ir=="function"?yt!==ir||!Mu:!ir.has(yt))throw new TypeError("Cannot write private member to an object whose class did not declare it");return ir.set(yt,_c),_c}(function(yt){yt.RENEW="renew",yt.LINK="link"})(Kue||(Kue={})),typeof SuppressedError=="function"&&SuppressedError;var Yue="ERC721",Cme="ERC1155",A8={errors:{disconnected:()=>"MetaMask: Disconnected from chain. Attempting to connect.",permanentlyDisconnected:()=>"MetaMask: Disconnected from MetaMask background. Page reload required.",sendSiteMetadata:()=>"MetaMask: Failed to send site metadata. This is an internal error, please report this bug.",unsupportedSync:yt=>`MetaMask: The MetaMask Ethereum provider does not support synchronous methods like ${yt} without a callback parameter.`,invalidDuplexStream:()=>"Must provide a Node.js-style duplex stream.",invalidNetworkParams:()=>"MetaMask: Received invalid network parameters. Please report this bug.",invalidRequestArgs:()=>"Expected a single, non-array, object argument.",invalidRequestMethod:()=>"'args.method' must be a non-empty string.",invalidRequestParams:()=>"'args.params' must be an object or array if provided.",invalidLoggerObject:()=>"'args.logger' must be an object if provided.",invalidLoggerMethod:yt=>`'args.logger' must include required method '${yt}'.`},info:{connected:yt=>`MetaMask: Connected to chain with ID "${yt}".`},warnings:{chainIdDeprecation:`MetaMask: 'ethereum.chainId' is deprecated and may be removed in the future. Please use the 'eth_chainId' RPC method instead. For more information, see: https://github.com/MetaMask/metamask-improvement-proposals/discussions/23`,networkVersionDeprecation:`MetaMask: 'ethereum.networkVersion' is deprecated and may be removed in the future. Please use the 'net_version' RPC method instead. For more information, see: https://github.com/MetaMask/metamask-improvement-proposals/discussions/23`,selectedAddressDeprecation:`MetaMask: 'ethereum.selectedAddress' is deprecated and may be removed in the future. Please use the 'eth_accounts' RPC method instead. For more information, see: https://github.com/MetaMask/metamask-improvement-proposals/discussions/23`,enableDeprecation:`MetaMask: 'ethereum.enable()' is deprecated and may be removed in the future. Please use the 'eth_requestAccounts' RPC method instead. @@ -1722,17 +1722,17 @@ For more information, see: https://eips.ethereum.org/EIPS/eip-1193#chainchanged` For more information, see: https://eips.ethereum.org/EIPS/eip-1193#message`},rpc:{ethDecryptDeprecation:`MetaMask: The RPC method 'eth_decrypt' is deprecated and may be removed in the future. For more information, see: https://medium.com/metamask/metamask-api-method-deprecation-2b0564a84686`,ethGetEncryptionPublicKeyDeprecation:`MetaMask: The RPC method 'eth_getEncryptionPublicKey' is deprecated and may be removed in the future. For more information, see: https://medium.com/metamask/metamask-api-method-deprecation-2b0564a84686`,walletWatchAssetNFTExperimental:`MetaMask: The RPC method 'wallet_watchAsset' is experimental for ERC721/ERC1155 assets and may change in the future. -For more information, see: https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-1.md and https://github.com/MetaMask/metamask-improvement-proposals/blob/main/PROCESS-GUIDE.md#proposal-lifecycle`},experimentalMethods:"MetaMask: 'ethereum._metamask' exposes non-standard, experimental methods. They may be removed or changed without warning."}};function Tme(yt){const ir={ethDecryptDeprecation:!1,ethGetEncryptionPublicKeyDeprecation:!1,walletWatchAssetNFTExperimental:!1};return(_c,mu,Mu)=>{var Su;ir.ethDecryptDeprecation||_c.method!=="eth_decrypt"?ir.ethGetEncryptionPublicKeyDeprecation||_c.method!=="eth_getEncryptionPublicKey"?!ir.walletWatchAssetNFTExperimental&&_c.method==="wallet_watchAsset"&&[Yue,Cme].includes(((Su=_c.params)==null?void 0:Su.type)||"")&&(yt.warn(A8.warnings.rpc.walletWatchAssetNFTExperimental),ir.walletWatchAssetNFTExperimental=!0):(yt.warn(A8.warnings.rpc.ethGetEncryptionPublicKeyDeprecation),ir.ethGetEncryptionPublicKeyDeprecation=!0):(yt.warn(A8.warnings.rpc.ethDecryptDeprecation),ir.ethDecryptDeprecation=!0),Mu()}}var $ne={},uJ={},Zue=c&&c.__awaiter||function(yt,ir,_c,mu){return new(_c||(_c=Promise))(function(Mu,Su){function l0(M0){try{j0(mu.next(M0))}catch(B0){Su(B0)}}function E0(M0){try{j0(mu.throw(M0))}catch(B0){Su(B0)}}function j0(M0){M0.done?Mu(M0.value):function(B0){return B0 instanceof _c?B0:new _c(function(V0){V0(B0)})}(M0.value).then(l0,E0)}j0((mu=mu.apply(yt,ir||[])).next())})};Object.defineProperty(uJ,"__esModule",{value:!0}),uJ.createAsyncMiddleware=void 0,uJ.createAsyncMiddleware=function(yt){return(ir,_c,mu,Mu)=>Zue(this,void 0,void 0,function*(){let Su;const l0=new Promise(B0=>{Su=B0});let E0=null,j0=!1;const M0=()=>Zue(this,void 0,void 0,function*(){return j0=!0,mu(B0=>{E0=B0,Su()}),l0});try{yield yt(ir,_c,M0),j0?(yield l0,E0(null)):Mu(null)}catch(B0){E0?E0(B0):Mu(B0)}})};var fJ={};Object.defineProperty(fJ,"__esModule",{value:!0}),fJ.createScaffoldMiddleware=void 0,fJ.createScaffoldMiddleware=function(yt){return(ir,_c,mu,Mu)=>{const Su=yt[ir.method];return Su===void 0?mu():typeof Su=="function"?Su(ir,_c,mu,Mu):(_c.result=Su,Mu())}};var Iq={};Object.defineProperty(Iq,"__esModule",{value:!0}),Iq.getUniqueId=void 0;const Jue=4294967295;let Ene=Math.floor(Math.random()*Jue);Iq.getUniqueId=function(){return Ene=(Ene+1)%Jue,Ene};var dJ={};Object.defineProperty(dJ,"__esModule",{value:!0}),dJ.createIdRemapMiddleware=void 0;const Rme=Iq;dJ.createIdRemapMiddleware=function(){return(yt,ir,_c,mu)=>{const Mu=yt.id,Su=(0,Rme.getUniqueId)();yt.id=Su,ir.id=Su,_c(l0=>{yt.id=Mu,ir.id=Mu,l0()})}};var zH={},GO={},Z3={},nU={},y5={},HH={};Object.defineProperty(HH,"__esModule",{value:!0}),HH.errorCodes={rpc:{invalidInput:-32e3,resourceNotFound:-32001,resourceUnavailable:-32002,transactionRejected:-32003,methodNotSupported:-32004,limitExceeded:-32005,parse:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internal:-32603},provider:{userRejectedRequest:4001,unauthorized:4100,unsupportedMethod:4200,disconnected:4900,chainDisconnected:4901}},HH.errorValues={"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."},"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32000":{standard:"EIP-1474",message:"Invalid input."},"-32001":{standard:"EIP-1474",message:"Resource not found."},"-32002":{standard:"EIP-1474",message:"Resource unavailable."},"-32003":{standard:"EIP-1474",message:"Transaction rejected."},"-32004":{standard:"EIP-1474",message:"Method not supported."},"-32005":{standard:"EIP-1474",message:"Request limit exceeded."},4001:{standard:"EIP-1193",message:"User rejected the request."},4100:{standard:"EIP-1193",message:"The requested account and/or method has not been authorized by the user."},4200:{standard:"EIP-1193",message:"The requested method is not supported by this Ethereum provider."},4900:{standard:"EIP-1193",message:"The provider is disconnected from all chains."},4901:{standard:"EIP-1193",message:"The provider is disconnected from the specified chain."}};var O2={},KH={},$$={},DM={},YO={},I7={};Object.defineProperty(I7,"__esModule",{value:!0});var Ane=(yt=>(yt[yt.Null=4]="Null",yt[yt.Comma=1]="Comma",yt[yt.Wrapper=1]="Wrapper",yt[yt.True=4]="True",yt[yt.False=5]="False",yt[yt.Quote=1]="Quote",yt[yt.Colon=1]="Colon",yt[yt.Date=24]="Date",yt))(Ane||{}),Oq=/"|\\|\n|\r|\t/gu;function VH(yt){return yt.charCodeAt(0)<=127}I7.isNonEmptyArray=function(yt){return Array.isArray(yt)&&yt.length>0},I7.isNullOrUndefined=function(yt){return yt==null},I7.isObject=function(yt){return!!yt&&typeof yt=="object"&&!Array.isArray(yt)},I7.hasProperty=(yt,ir)=>Object.hasOwnProperty.call(yt,ir),I7.getKnownPropertyNames=function(yt){return Object.getOwnPropertyNames(yt)},I7.JsonSize=Ane,I7.ESCAPE_CHARACTERS_REGEXP=Oq,I7.isPlainObject=function(yt){if(typeof yt!="object"||yt===null)return!1;try{let ir=yt;for(;Object.getPrototypeOf(ir)!==null;)ir=Object.getPrototypeOf(ir);return Object.getPrototypeOf(yt)===ir}catch{return!1}},I7.isASCII=VH,I7.calculateStringSize=function(yt){return yt.split("").reduce((_c,mu)=>VH(mu)?_c+1:_c+2,0)+(ir=yt.match(Oq),ir??[]).length;var ir},I7.calculateNumberSize=function(yt){return yt.toString().length};var _ne=tt(Object.freeze({__proto__:null,ErrorWithCause:class Pve extends Error{constructor(ir,{cause:_c}={}){super(ir),this.name=Pve.name,_c&&(this.cause=_c),this.message=ir}}}));const iU=yt=>{if(yt&&typeof yt=="object"&&"cause"in yt){if(typeof yt.cause=="function"){const ir=yt.cause();return ir instanceof Error?ir:void 0}return yt.cause instanceof Error?yt.cause:void 0}},Xue=(yt,ir)=>{if(!(yt instanceof Error))return"";const _c=yt.stack||"";if(ir.has(yt))return _c+` +For more information, see: https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-1.md and https://github.com/MetaMask/metamask-improvement-proposals/blob/main/PROCESS-GUIDE.md#proposal-lifecycle`},experimentalMethods:"MetaMask: 'ethereum._metamask' exposes non-standard, experimental methods. They may be removed or changed without warning."}};function Tme(yt){const ir={ethDecryptDeprecation:!1,ethGetEncryptionPublicKeyDeprecation:!1,walletWatchAssetNFTExperimental:!1};return(_c,mu,Mu)=>{var xu;ir.ethDecryptDeprecation||_c.method!=="eth_decrypt"?ir.ethGetEncryptionPublicKeyDeprecation||_c.method!=="eth_getEncryptionPublicKey"?!ir.walletWatchAssetNFTExperimental&&_c.method==="wallet_watchAsset"&&[Yue,Cme].includes(((xu=_c.params)==null?void 0:xu.type)||"")&&(yt.warn(A8.warnings.rpc.walletWatchAssetNFTExperimental),ir.walletWatchAssetNFTExperimental=!0):(yt.warn(A8.warnings.rpc.ethGetEncryptionPublicKeyDeprecation),ir.ethGetEncryptionPublicKeyDeprecation=!0):(yt.warn(A8.warnings.rpc.ethDecryptDeprecation),ir.ethDecryptDeprecation=!0),Mu()}}var $ne={},uJ={},Zue=c&&c.__awaiter||function(yt,ir,_c,mu){return new(_c||(_c=Promise))(function(Mu,xu){function l0(M0){try{j0(mu.next(M0))}catch(B0){xu(B0)}}function E0(M0){try{j0(mu.throw(M0))}catch(B0){xu(B0)}}function j0(M0){M0.done?Mu(M0.value):function(B0){return B0 instanceof _c?B0:new _c(function(q0){q0(B0)})}(M0.value).then(l0,E0)}j0((mu=mu.apply(yt,ir||[])).next())})};Object.defineProperty(uJ,"__esModule",{value:!0}),uJ.createAsyncMiddleware=void 0,uJ.createAsyncMiddleware=function(yt){return(ir,_c,mu,Mu)=>Zue(this,void 0,void 0,function*(){let xu;const l0=new Promise(B0=>{xu=B0});let E0=null,j0=!1;const M0=()=>Zue(this,void 0,void 0,function*(){return j0=!0,mu(B0=>{E0=B0,xu()}),l0});try{yield yt(ir,_c,M0),j0?(yield l0,E0(null)):Mu(null)}catch(B0){E0?E0(B0):Mu(B0)}})};var fJ={};Object.defineProperty(fJ,"__esModule",{value:!0}),fJ.createScaffoldMiddleware=void 0,fJ.createScaffoldMiddleware=function(yt){return(ir,_c,mu,Mu)=>{const xu=yt[ir.method];return xu===void 0?mu():typeof xu=="function"?xu(ir,_c,mu,Mu):(_c.result=xu,Mu())}};var Iq={};Object.defineProperty(Iq,"__esModule",{value:!0}),Iq.getUniqueId=void 0;const Jue=4294967295;let Ene=Math.floor(Math.random()*Jue);Iq.getUniqueId=function(){return Ene=(Ene+1)%Jue,Ene};var dJ={};Object.defineProperty(dJ,"__esModule",{value:!0}),dJ.createIdRemapMiddleware=void 0;const Rme=Iq;dJ.createIdRemapMiddleware=function(){return(yt,ir,_c,mu)=>{const Mu=yt.id,xu=(0,Rme.getUniqueId)();yt.id=xu,ir.id=xu,_c(l0=>{yt.id=Mu,ir.id=Mu,l0()})}};var zH={},GO={},Z3={},nU={},y5={},HH={};Object.defineProperty(HH,"__esModule",{value:!0}),HH.errorCodes={rpc:{invalidInput:-32e3,resourceNotFound:-32001,resourceUnavailable:-32002,transactionRejected:-32003,methodNotSupported:-32004,limitExceeded:-32005,parse:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internal:-32603},provider:{userRejectedRequest:4001,unauthorized:4100,unsupportedMethod:4200,disconnected:4900,chainDisconnected:4901}},HH.errorValues={"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."},"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32000":{standard:"EIP-1474",message:"Invalid input."},"-32001":{standard:"EIP-1474",message:"Resource not found."},"-32002":{standard:"EIP-1474",message:"Resource unavailable."},"-32003":{standard:"EIP-1474",message:"Transaction rejected."},"-32004":{standard:"EIP-1474",message:"Method not supported."},"-32005":{standard:"EIP-1474",message:"Request limit exceeded."},4001:{standard:"EIP-1193",message:"User rejected the request."},4100:{standard:"EIP-1193",message:"The requested account and/or method has not been authorized by the user."},4200:{standard:"EIP-1193",message:"The requested method is not supported by this Ethereum provider."},4900:{standard:"EIP-1193",message:"The provider is disconnected from all chains."},4901:{standard:"EIP-1193",message:"The provider is disconnected from the specified chain."}};var O2={},KH={},$$={},DM={},YO={},I7={};Object.defineProperty(I7,"__esModule",{value:!0});var Ane=(yt=>(yt[yt.Null=4]="Null",yt[yt.Comma=1]="Comma",yt[yt.Wrapper=1]="Wrapper",yt[yt.True=4]="True",yt[yt.False=5]="False",yt[yt.Quote=1]="Quote",yt[yt.Colon=1]="Colon",yt[yt.Date=24]="Date",yt))(Ane||{}),Oq=/"|\\|\n|\r|\t/gu;function VH(yt){return yt.charCodeAt(0)<=127}I7.isNonEmptyArray=function(yt){return Array.isArray(yt)&&yt.length>0},I7.isNullOrUndefined=function(yt){return yt==null},I7.isObject=function(yt){return!!yt&&typeof yt=="object"&&!Array.isArray(yt)},I7.hasProperty=(yt,ir)=>Object.hasOwnProperty.call(yt,ir),I7.getKnownPropertyNames=function(yt){return Object.getOwnPropertyNames(yt)},I7.JsonSize=Ane,I7.ESCAPE_CHARACTERS_REGEXP=Oq,I7.isPlainObject=function(yt){if(typeof yt!="object"||yt===null)return!1;try{let ir=yt;for(;Object.getPrototypeOf(ir)!==null;)ir=Object.getPrototypeOf(ir);return Object.getPrototypeOf(yt)===ir}catch{return!1}},I7.isASCII=VH,I7.calculateStringSize=function(yt){return yt.split("").reduce((_c,mu)=>VH(mu)?_c+1:_c+2,0)+(ir=yt.match(Oq),ir??[]).length;var ir},I7.calculateNumberSize=function(yt){return yt.toString().length};var _ne=tt(Object.freeze({__proto__:null,ErrorWithCause:class Pve extends Error{constructor(ir,{cause:_c}={}){super(ir),this.name=Pve.name,_c&&(this.cause=_c),this.message=ir}}}));const iU=yt=>{if(yt&&typeof yt=="object"&&"cause"in yt){if(typeof yt.cause=="function"){const ir=yt.cause();return ir instanceof Error?ir:void 0}return yt.cause instanceof Error?yt.cause:void 0}},Xue=(yt,ir)=>{if(!(yt instanceof Error))return"";const _c=yt.stack||"";if(ir.has(yt))return _c+` causes have become circular...`;const mu=iU(yt);return mu?(ir.add(yt),_c+` -caused by: `+Xue(mu,ir)):_c},qH=(yt,ir,_c)=>{if(!(yt instanceof Error))return"";const mu=_c?"":yt.message||"";if(ir.has(yt))return mu+": ...";const Mu=iU(yt);if(Mu){ir.add(yt);const Su="cause"in yt&&typeof yt.cause=="function";return mu+(Su?"":": ")+qH(Mu,ir,Su)}return mu};var ZO=tt(Object.freeze({__proto__:null,findCauseByReference:(yt,ir)=>{if(!yt||!ir||!(yt instanceof Error)||!(ir.prototype instanceof Error)&&ir!==Error)return;const _c=new Set;let mu=yt;for(;mu&&!_c.has(mu);){if(_c.add(mu),mu instanceof ir)return mu;mu=iU(mu)}},getErrorCause:iU,messageWithCauses:yt=>qH(yt,new Set),stackWithCauses:yt=>Xue(yt,new Set)}));const{ErrorWithCause:hJ}=_ne,{findCauseByReference:Pq,getErrorCause:UN,messageWithCauses:WH,stackWithCauses:P2}=ZO;var GH={ErrorWithCause:hJ,findCauseByReference:Pq,getErrorCause:UN,stackWithCauses:P2,messageWithCauses:WH};Object.defineProperty(YO,"__esModule",{value:!0});var qE=I7,FM=GH;function zN(yt){return typeof yt=="object"&&yt!==null&&"code"in yt}function cx(yt){return typeof yt=="object"&&yt!==null&&"message"in yt}YO.isErrorWithCode=zN,YO.isErrorWithMessage=cx,YO.isErrorWithStack=function(yt){return typeof yt=="object"&&yt!==null&&"stack"in yt},YO.getErrorMessage=function(yt){return cx(yt)&&typeof yt.message=="string"?yt.message:qE.isNullOrUndefined.call(void 0,yt)?"":String(yt)},YO.wrapError=function(yt,ir){if((_c=yt)instanceof Error||qE.isObject.call(void 0,_c)&&_c.constructor.name==="Error"){let mu;return mu=Error.length===2?new Error(ir,{cause:yt}):new FM.ErrorWithCause(ir,{cause:yt}),zN(yt)&&(mu.code=yt.code),mu}var _c;return ir.length>0?new Error(`${String(yt)}: ${ir}`):new Error(String(yt))};class Sne extends TypeError{constructor(ir,_c){let mu;const{message:Mu,explanation:Su,...l0}=ir,{path:E0}=ir,j0=E0.length===0?Mu:`At path: ${E0.join(".")} -- ${Mu}`;super(Su??j0),Su!=null&&(this.cause=j0),Object.assign(this,l0),this.name=this.constructor.name,this.failures=()=>mu??(mu=[ir,..._c()])}}function TR(yt){return typeof yt=="object"&&yt!=null}function xne(yt){if(Object.prototype.toString.call(yt)!=="[object Object]")return!1;const ir=Object.getPrototypeOf(yt);return ir===null||ir===Object.prototype}function O7(yt){return typeof yt=="symbol"?yt.toString():typeof yt=="string"?JSON.stringify(yt):`${yt}`}function Ime(yt,ir,_c,mu){if(yt===!0)return;yt===!1?yt={}:typeof yt=="string"&&(yt={message:yt});const{path:Mu,branch:Su}=ir,{type:l0}=_c,{refinement:E0,message:j0=`Expected a value of type \`${l0}\`${E0?` with refinement \`${E0}\``:""}, but received: \`${O7(mu)}\``}=yt;return{value:mu,type:l0,refinement:E0,key:Mu[Mu.length-1],path:Mu,branch:Su,...yt,message:j0}}function*YH(yt,ir,_c,mu){(function(Mu){return TR(Mu)&&typeof Mu[Symbol.iterator]=="function"})(yt)||(yt=[yt]);for(const Mu of yt){const Su=Ime(Mu,ir,_c,mu);Su&&(yield Su)}}function*pJ(yt,ir,_c={}){const{path:mu=[],branch:Mu=[yt],coerce:Su=!1,mask:l0=!1}=_c,E0={path:mu,branch:Mu};if(Su&&(yt=ir.coercer(yt,E0),l0&&ir.type!=="type"&&TR(ir.schema)&&TR(yt)&&!Array.isArray(yt)))for(const M0 in yt)ir.schema[M0]===void 0&&delete yt[M0];let j0="valid";for(const M0 of ir.validator(yt,E0))M0.explanation=_c.message,j0="not_valid",yield[M0,void 0];for(let[M0,B0,V0]of ir.entries(yt,E0)){const y1=pJ(B0,V0,{path:M0===void 0?mu:[...mu,M0],branch:M0===void 0?Mu:[...Mu,B0],coerce:Su,mask:l0,message:_c.message});for(const v1 of y1)v1[0]?(j0=v1[0].refinement!=null?"not_refined":"not_valid",yield[v1[0],void 0]):Su&&(B0=v1[1],M0===void 0?yt=B0:yt instanceof Map?yt.set(M0,B0):yt instanceof Set?yt.add(B0):TR(yt)&&(B0!==void 0||M0 in yt)&&(yt[M0]=B0))}if(j0!=="not_valid")for(const M0 of ir.refiner(yt,E0))M0.explanation=_c.message,j0="not_refined",yield[M0,void 0];j0==="valid"&&(yield[void 0,yt])}class _8{constructor(ir){const{type:_c,schema:mu,validator:Mu,refiner:Su,coercer:l0=j0=>j0,entries:E0=function*(){}}=ir;this.type=_c,this.schema=mu,this.entries=E0,this.coercer=l0,this.validator=Mu?(j0,M0)=>YH(Mu(j0,M0),M0,this,j0):()=>[],this.refiner=Su?(j0,M0)=>YH(Su(j0,M0),M0,this,j0):()=>[]}assert(ir,_c){return kne(ir,this,_c)}create(ir,_c){return Cne(ir,this,_c)}is(ir){return mJ(ir,this)}mask(ir,_c){return Que(ir,this,_c)}validate(ir,_c={}){return ZH(ir,this,_c)}}function kne(yt,ir,_c){const mu=ZH(yt,ir,{message:_c});if(mu[0])throw mu[0]}function Cne(yt,ir,_c){const mu=ZH(yt,ir,{coerce:!0,message:_c});if(mu[0])throw mu[0];return mu[1]}function Que(yt,ir,_c){const mu=ZH(yt,ir,{coerce:!0,mask:!0,message:_c});if(mu[0])throw mu[0];return mu[1]}function mJ(yt,ir){return!ZH(yt,ir)[0]}function ZH(yt,ir,_c={}){const mu=pJ(yt,ir,_c),Mu=function(Su){const{done:l0,value:E0}=Su.next();return l0?void 0:E0}(mu);return Mu[0]?[new Sne(Mu[0],function*(){for(const Su of mu)Su[0]&&(yield Su[0])}),void 0]:[void 0,Mu[1]]}function fC(yt,ir){return new _8({type:yt,schema:null,validator:ir})}function Tne(yt){let ir;return new _8({type:"lazy",schema:null,*entries(_c,mu){ir??(ir=yt()),yield*ir.entries(_c,mu)},validator:(_c,mu)=>(ir??(ir=yt()),ir.validator(_c,mu)),coercer:(_c,mu)=>(ir??(ir=yt()),ir.coercer(_c,mu)),refiner:(_c,mu)=>(ir??(ir=yt()),ir.refiner(_c,mu))})}function Rne(){return fC("any",()=>!0)}function Mne(yt){return new _8({type:"array",schema:yt,*entries(ir){if(yt&&Array.isArray(ir))for(const[_c,mu]of ir.entries())yield[_c,mu,yt]},coercer:ir=>Array.isArray(ir)?ir.slice():ir,validator:ir=>Array.isArray(ir)||`Expected an array value, but received: ${O7(ir)}`})}function Ine(){return fC("boolean",yt=>typeof yt=="boolean")}function One(){return fC("integer",yt=>typeof yt=="number"&&!isNaN(yt)&&Number.isInteger(yt)||`Expected an integer, but received: ${O7(yt)}`)}function gJ(yt){const ir=O7(yt),_c=typeof yt;return new _8({type:"literal",schema:_c==="string"||_c==="number"||_c==="boolean"?yt:null,validator:mu=>mu===yt||`Expected the literal \`${ir}\`, but received: ${O7(mu)}`})}function lT(){return fC("never",()=>!1)}function Pne(yt){return new _8({...yt,validator:(ir,_c)=>ir===null||yt.validator(ir,_c),refiner:(ir,_c)=>ir===null||yt.refiner(ir,_c)})}function mS(){return fC("number",yt=>typeof yt=="number"&&!isNaN(yt)||`Expected a number, but received: ${O7(yt)}`)}function oU(yt){const ir=yt?Object.keys(yt):[],_c=lT();return new _8({type:"object",schema:yt||null,*entries(mu){if(yt&&TR(mu)){const Mu=new Set(Object.keys(mu));for(const Su of ir)Mu.delete(Su),yield[Su,mu[Su],yt[Su]];for(const Su of Mu)yield[Su,mu[Su],_c]}},validator:mu=>TR(mu)||`Expected an object, but received: ${O7(mu)}`,coercer:mu=>TR(mu)?{...mu}:mu})}function JH(yt){return new _8({...yt,validator:(ir,_c)=>ir===void 0||yt.validator(ir,_c),refiner:(ir,_c)=>ir===void 0||yt.refiner(ir,_c)})}function jq(yt,ir){return new _8({type:"record",schema:null,*entries(_c){if(TR(_c))for(const mu in _c){const Mu=_c[mu];yield[mu,mu,yt],yield[mu,Mu,ir]}},validator:_c=>TR(_c)||`Expected an object, but received: ${O7(_c)}`})}function bA(){return fC("string",yt=>typeof yt=="string"||`Expected a string, but received: ${O7(yt)}`)}function Nq(yt){const ir=Object.keys(yt);return new _8({type:"type",schema:yt,*entries(_c){if(TR(_c))for(const mu of ir)yield[mu,_c[mu],yt[mu]]},validator:_c=>TR(_c)||`Expected an object, but received: ${O7(_c)}`,coercer:_c=>TR(_c)?{..._c}:_c})}function aU(yt){const ir=yt.map(_c=>_c.type).join(" | ");return new _8({type:"union",schema:null,coercer(_c){for(const mu of yt){const[Mu,Su]=mu.validate(_c,{coerce:!0});if(!Mu)return Su}return _c},validator(_c,mu){const Mu=[];for(const Su of yt){const[...l0]=pJ(_c,Su,mu),[E0]=l0;if(!E0[0])return[];for(const[j0]of l0)j0&&Mu.push(j0)}return[`Expected the value to satisfy a union of \`${ir}\`, but received: ${O7(_c)}`,...Mu]}})}function vJ(){return fC("unknown",()=>!0)}function sU(yt,ir,_c){return new _8({...yt,coercer:(mu,Mu)=>mJ(mu,ir)?yt.coercer(_c(mu,Mu),Mu):yt.coercer(mu,Mu)})}function lU(yt){return yt instanceof Map||yt instanceof Set?yt.size:yt.length}function gS(yt,ir,_c){return new _8({...yt,*refiner(mu,Mu){yield*yt.refiner(mu,Mu);const Su=YH(_c(mu,Mu),Mu,yt,mu);for(const l0 of Su)yield{...l0,refinement:ir}}})}var jne=Object.freeze({__proto__:null,Struct:_8,StructError:Sne,any:Rne,array:Mne,assert:kne,assign:function(...yt){const ir=yt[0].type==="type",_c=yt.map(Mu=>Mu.schema),mu=Object.assign({},..._c);return ir?Nq(mu):oU(mu)},bigint:function(){return fC("bigint",yt=>typeof yt=="bigint")},boolean:Ine,coerce:sU,create:Cne,date:function(){return fC("date",yt=>yt instanceof Date&&!isNaN(yt.getTime())||`Expected a valid \`Date\` object, but received: ${O7(yt)}`)},defaulted:function(yt,ir,_c={}){return sU(yt,vJ(),mu=>{const Mu=typeof ir=="function"?ir():ir;if(mu===void 0)return Mu;if(!_c.strict&&xne(mu)&&xne(Mu)){const Su={...mu};let l0=!1;for(const E0 in Mu)Su[E0]===void 0&&(Su[E0]=Mu[E0],l0=!0);if(l0)return Su}return mu})},define:fC,deprecated:function(yt,ir){return new _8({...yt,refiner:(_c,mu)=>_c===void 0||yt.refiner(_c,mu),validator:(_c,mu)=>_c===void 0||(ir(_c,mu),yt.validator(_c,mu))})},dynamic:function(yt){return new _8({type:"dynamic",schema:null,*entries(ir,_c){yield*yt(ir,_c).entries(ir,_c)},validator:(ir,_c)=>yt(ir,_c).validator(ir,_c),coercer:(ir,_c)=>yt(ir,_c).coercer(ir,_c),refiner:(ir,_c)=>yt(ir,_c).refiner(ir,_c)})},empty:function(yt){return gS(yt,"empty",ir=>{const _c=lU(ir);return _c===0||`Expected an empty ${yt.type} but received one with a size of \`${_c}\``})},enums:function(yt){const ir={},_c=yt.map(mu=>O7(mu)).join();for(const mu of yt)ir[mu]=mu;return new _8({type:"enums",schema:ir,validator:mu=>yt.includes(mu)||`Expected one of \`${_c}\`, but received: ${O7(mu)}`})},func:function(){return fC("func",yt=>typeof yt=="function"||`Expected a function, but received: ${O7(yt)}`)},instance:function(yt){return fC("instance",ir=>ir instanceof yt||`Expected a \`${yt.name}\` instance, but received: ${O7(ir)}`)},integer:One,intersection:function(yt){return new _8({type:"intersection",schema:null,*entries(ir,_c){for(const mu of yt)yield*mu.entries(ir,_c)},*validator(ir,_c){for(const mu of yt)yield*mu.validator(ir,_c)},*refiner(ir,_c){for(const mu of yt)yield*mu.refiner(ir,_c)}})},is:mJ,lazy:Tne,literal:gJ,map:function(yt,ir){return new _8({type:"map",schema:null,*entries(_c){if(yt&&ir&&_c instanceof Map)for(const[mu,Mu]of _c.entries())yield[mu,mu,yt],yield[mu,Mu,ir]},coercer:_c=>_c instanceof Map?new Map(_c):_c,validator:_c=>_c instanceof Map||`Expected a \`Map\` object, but received: ${O7(_c)}`})},mask:Que,max:function(yt,ir,_c={}){const{exclusive:mu}=_c;return gS(yt,"max",Mu=>mu?Mumu?Mu>ir:Mu>=ir||`Expected a ${yt.type} greater than ${mu?"":"or equal to "}${ir} but received \`${Mu}\``)},never:lT,nonempty:function(yt){return gS(yt,"nonempty",ir=>lU(ir)>0||`Expected a nonempty ${yt.type} but received an empty one`)},nullable:Pne,number:mS,object:oU,omit:function(yt,ir){const{schema:_c}=yt,mu={..._c};for(const Mu of ir)delete mu[Mu];return yt.type==="type"?Nq(mu):oU(mu)},optional:JH,partial:function(yt){const ir=yt instanceof _8?{...yt.schema}:{...yt};for(const _c in ir)ir[_c]=JH(ir[_c]);return oU(ir)},pattern:function(yt,ir){return gS(yt,"pattern",_c=>ir.test(_c)||`Expected a ${yt.type} matching \`/${ir.source}/\` but received "${_c}"`)},pick:function(yt,ir){const{schema:_c}=yt,mu={};for(const Mu of ir)mu[Mu]=_c[Mu];return oU(mu)},record:jq,refine:gS,regexp:function(){return fC("regexp",yt=>yt instanceof RegExp)},set:function(yt){return new _8({type:"set",schema:null,*entries(ir){if(yt&&ir instanceof Set)for(const _c of ir)yield[_c,_c,yt]},coercer:ir=>ir instanceof Set?new Set(ir):ir,validator:ir=>ir instanceof Set||`Expected a \`Set\` object, but received: ${O7(ir)}`})},size:function(yt,ir,_c=ir){const mu=`Expected a ${yt.type}`,Mu=ir===_c?`of \`${ir}\``:`between \`${ir}\` and \`${_c}\``;return gS(yt,"size",Su=>{if(typeof Su=="number"||Su instanceof Date)return ir<=Su&&Su<=_c||`${mu} ${Mu} but received \`${Su}\``;if(Su instanceof Map||Su instanceof Set){const{size:l0}=Su;return ir<=l0&&l0<=_c||`${mu} with a size ${Mu} but received one with a size of \`${l0}\``}{const{length:l0}=Su;return ir<=l0&&l0<=_c||`${mu} with a length ${Mu} but received one with a length of \`${l0}\``}})},string:bA,struct:function(yt,ir){return console.warn("superstruct@0.11 - The `struct` helper has been renamed to `define`."),fC(yt,ir)},trimmed:function(yt){return sU(yt,bA(),ir=>ir.trim())},tuple:function(yt){const ir=lT();return new _8({type:"tuple",schema:null,*entries(_c){if(Array.isArray(_c)){const mu=Math.max(yt.length,_c.length);for(let Mu=0;MuArray.isArray(_c)||`Expected an array, but received: ${O7(_c)}`})},type:Nq,union:aU,unknown:vJ,validate:ZH}),HN=tt(jne);Object.defineProperty(DM,"__esModule",{value:!0});var Nne=YO,efe=HN;function Lne(yt,ir){return typeof function(_c){let mu,Mu=_c[0],Su=1;for(;Su<_c.length;){const l0=_c[Su],E0=_c[Su+1];if(Su+=2,(l0==="optionalAccess"||l0==="optionalCall")&&Mu==null)return;l0==="access"||l0==="optionalAccess"?(mu=Mu,Mu=E0(Mu)):l0!=="call"&&l0!=="optionalCall"||(Mu=E0((...j0)=>Mu.call(mu,...j0)),mu=void 0)}return Mu}([yt,"optionalAccess",_c=>_c.prototype,"optionalAccess",_c=>_c.constructor,"optionalAccess",_c=>_c.name])=="string"?new yt({message:ir}):yt({message:ir})}var Lq=class extends Error{constructor(yt){super(yt.message),this.code="ERR_ASSERTION"}};DM.AssertionError=Lq,DM.assert=function(yt,ir="Assertion failed.",_c=Lq){if(!yt)throw ir instanceof Error?ir:Lne(_c,ir)},DM.assertStruct=function(yt,ir,_c="Assertion failed",mu=Lq){try{efe.assert.call(void 0,yt,ir)}catch(Mu){throw Lne(mu,`${_c}: ${function(Su){return Nne.getErrorMessage.call(void 0,Su).replace(/\.$/u,"")}(Mu)}.`)}},DM.assertExhaustive=function(yt){throw new Error("Invalid branch reached. Should be detected during compilation.")};var XA={},ux={};function XH(yt){if(!Number.isSafeInteger(yt)||yt<0)throw new Error(`Wrong positive integer: ${yt}`)}function FB(yt){if(typeof yt!="boolean")throw new Error(`Expected boolean, not ${yt}`)}function QH(yt,...ir){if(!(yt instanceof Uint8Array))throw new Error("Expected Uint8Array");if(ir.length>0&&!ir.includes(yt.length))throw new Error(`Expected Uint8Array of length ${ir}, not of length=${yt.length}`)}function yJ(yt){if(typeof yt!="function"||typeof yt.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");XH(yt.outputLen),XH(yt.blockLen)}function b5(yt,ir=!0){if(yt.destroyed)throw new Error("Hash instance has been destroyed");if(ir&&yt.finished)throw new Error("Hash#digest() has already been called")}function bJ(yt,ir){QH(yt);const _c=ir.outputLen;if(yt.length<_c)throw new Error(`digestInto() expects output buffer of length at least ${_c}`)}Object.defineProperty(ux,"__esModule",{value:!0}),ux.output=ux.exists=ux.hash=ux.bytes=ux.bool=ux.number=void 0,ux.number=XH,ux.bool=FB,ux.bytes=QH,ux.hash=yJ,ux.exists=b5,ux.output=bJ;const Bq={number:XH,bool:FB,bytes:QH,hash:yJ,exists:b5,output:bJ};ux.default=Bq;var M$={};Object.defineProperty(M$,"__esModule",{value:!0}),M$.add5L=M$.add5H=M$.add4H=M$.add4L=M$.add3H=M$.add3L=M$.add=M$.rotlBL=M$.rotlBH=M$.rotlSL=M$.rotlSH=M$.rotr32L=M$.rotr32H=M$.rotrBL=M$.rotrBH=M$.rotrSL=M$.rotrSH=M$.shrSL=M$.shrSH=M$.toBig=M$.split=M$.fromBig=void 0;const cU=BigInt(2**32-1),wJ=BigInt(32);function KN(yt,ir=!1){return ir?{h:Number(yt&cU),l:Number(yt>>wJ&cU)}:{h:0|Number(yt>>wJ&cU),l:0|Number(yt&cU)}}function tfe(yt,ir=!1){let _c=new Uint32Array(yt.length),mu=new Uint32Array(yt.length);for(let Mu=0;MuBigInt(yt>>>0)<>>0);M$.toBig=VN;const rfe=(yt,ir,_c)=>yt>>>_c;M$.shrSH=rfe;const nfe=(yt,ir,_c)=>yt<<32-_c|ir>>>_c;M$.shrSL=nfe;const Bne=(yt,ir,_c)=>yt>>>_c|ir<<32-_c;M$.rotrSH=Bne;const $J=(yt,ir,_c)=>yt<<32-_c|ir>>>_c;M$.rotrSL=$J;const f_=(yt,ir,_c)=>yt<<64-_c|ir>>>_c-32;M$.rotrBH=f_;const fx=(yt,ir,_c)=>yt>>>_c-32|ir<<64-_c;M$.rotrBL=fx;const Dq=(yt,ir)=>ir;M$.rotr32H=Dq;const Dne=(yt,ir)=>yt;M$.rotr32L=Dne;const EJ=(yt,ir,_c)=>yt<<_c|ir>>>32-_c;M$.rotlSH=EJ;const Fne=(yt,ir,_c)=>ir<<_c|yt>>>32-_c;M$.rotlSL=Fne;const Une=(yt,ir,_c)=>ir<<_c-32|yt>>>64-_c;M$.rotlBH=Une;const zne=(yt,ir,_c)=>yt<<_c-32|ir>>>64-_c;function ife(yt,ir,_c,mu){const Mu=(ir>>>0)+(mu>>>0);return{h:yt+_c+(Mu/2**32|0)|0,l:0|Mu}}M$.rotlBL=zne,M$.add=ife;const D$=(yt,ir,_c)=>(yt>>>0)+(ir>>>0)+(_c>>>0);M$.add3L=D$;const Fq=(yt,ir,_c,mu)=>ir+_c+mu+(yt/2**32|0)|0;M$.add3H=Fq;const AJ=(yt,ir,_c,mu)=>(yt>>>0)+(ir>>>0)+(_c>>>0)+(mu>>>0);M$.add4L=AJ;const _J=(yt,ir,_c,mu,Mu)=>ir+_c+mu+Mu+(yt/2**32|0)|0;M$.add4H=_J;const Hne=(yt,ir,_c,mu,Mu)=>(yt>>>0)+(ir>>>0)+(_c>>>0)+(mu>>>0)+(Mu>>>0);M$.add5L=Hne;const Kne=(yt,ir,_c,mu,Mu,Su)=>ir+_c+mu+Mu+Su+(yt/2**32|0)|0;M$.add5H=Kne;const ofe={fromBig:KN,split:tfe,toBig:VN,shrSH:rfe,shrSL:nfe,rotrSH:Bne,rotrSL:$J,rotrBH:f_,rotrBL:fx,rotr32H:Dq,rotr32L:Dne,rotlSH:EJ,rotlSL:Fne,rotlBH:Une,rotlBL:zne,add:ife,add3L:D$,add3H:Fq,add4L:AJ,add4H:_J,add5H:Kne,add5L:Hne};M$.default=ofe;var Vne={},Uq={};Object.defineProperty(Uq,"__esModule",{value:!0}),Uq.crypto=void 0,Uq.crypto=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0,function(yt){/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */Object.defineProperty(yt,"__esModule",{value:!0}),yt.randomBytes=yt.wrapXOFConstructorWithOpts=yt.wrapConstructorWithOpts=yt.wrapConstructor=yt.checkOpts=yt.Hash=yt.concatBytes=yt.toBytes=yt.utf8ToBytes=yt.asyncLoop=yt.nextTick=yt.hexToBytes=yt.bytesToHex=yt.isLE=yt.rotr=yt.createView=yt.u32=yt.u8=void 0;const ir=Uq,_c=E0=>E0 instanceof Uint8Array;if(yt.u8=E0=>new Uint8Array(E0.buffer,E0.byteOffset,E0.byteLength),yt.u32=E0=>new Uint32Array(E0.buffer,E0.byteOffset,Math.floor(E0.byteLength/4)),yt.createView=E0=>new DataView(E0.buffer,E0.byteOffset,E0.byteLength),yt.rotr=(E0,j0)=>E0<<32-j0|E0>>>j0,yt.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,!yt.isLE)throw new Error("Non little-endian hardware is not supported");const mu=Array.from({length:256},(E0,j0)=>j0.toString(16).padStart(2,"0"));function Mu(E0){if(typeof E0!="string")throw new Error("utf8ToBytes expected string, got "+typeof E0);return new Uint8Array(new TextEncoder().encode(E0))}function Su(E0){if(typeof E0=="string"&&(E0=Mu(E0)),!_c(E0))throw new Error("expected Uint8Array, got "+typeof E0);return E0}yt.bytesToHex=function(E0){if(!_c(E0))throw new Error("Uint8Array expected");let j0="";for(let M0=0;M0{},yt.asyncLoop=async function(E0,j0,M0){let B0=Date.now();for(let V0=0;V0=0&&y1B0+V0.length,0));let M0=0;return E0.forEach(B0=>{if(!_c(B0))throw new Error("Uint8Array expected");j0.set(B0,M0),M0+=B0.length}),j0},yt.Hash=class{clone(){return this._cloneInto()}};const l0={}.toString;yt.checkOpts=function(E0,j0){if(j0!==void 0&&l0.call(j0)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(E0,j0)},yt.wrapConstructor=function(E0){const j0=B0=>E0().update(Su(B0)).digest(),M0=E0();return j0.outputLen=M0.outputLen,j0.blockLen=M0.blockLen,j0.create=()=>E0(),j0},yt.wrapConstructorWithOpts=function(E0){const j0=(B0,V0)=>E0(V0).update(Su(B0)).digest(),M0=E0({});return j0.outputLen=M0.outputLen,j0.blockLen=M0.blockLen,j0.create=B0=>E0(B0),j0},yt.wrapXOFConstructorWithOpts=function(E0){const j0=(B0,V0)=>E0(V0).update(Su(B0)).digest(),M0=E0({});return j0.outputLen=M0.outputLen,j0.blockLen=M0.blockLen,j0.create=B0=>E0(B0),j0},yt.randomBytes=function(E0=32){if(ir.crypto&&typeof ir.crypto.getRandomValues=="function")return ir.crypto.getRandomValues(new Uint8Array(E0));throw new Error("crypto.getRandomValues must be defined")}}(Vne),Object.defineProperty(XA,"__esModule",{value:!0}),XA.shake256=XA.shake128=XA.keccak_512=XA.keccak_384=XA.keccak_256=XA.keccak_224=XA.sha3_512=XA.sha3_384=XA.sha3_256=XA.sha3_224=XA.Keccak=XA.keccakP=void 0;const uU=ux,eK=M$,tK=Vne,[qne,Wne,Gne]=[[],[],[]],afe=BigInt(0),rK=BigInt(1),sfe=BigInt(2),lfe=BigInt(7),cfe=BigInt(256),ufe=BigInt(113);for(let yt=0,ir=rK,_c=1,mu=0;yt<24;yt++){[_c,mu]=[mu,(2*_c+3*mu)%5],qne.push(2*(5*mu+_c)),Wne.push((yt+1)*(yt+2)/2%64);let Mu=afe;for(let Su=0;Su<7;Su++)ir=(ir<>lfe)*ufe)%cfe,ir&sfe&&(Mu^=rK<<(rK<_c>32?(0,eK.rotlBH)(yt,ir,_c):(0,eK.rotlSH)(yt,ir,_c),Zne=(yt,ir,_c)=>_c>32?(0,eK.rotlBL)(yt,ir,_c):(0,eK.rotlSL)(yt,ir,_c);function hfe(yt,ir=24){const _c=new Uint32Array(10);for(let mu=24-ir;mu<24;mu++){for(let l0=0;l0<10;l0++)_c[l0]=yt[l0]^yt[l0+10]^yt[l0+20]^yt[l0+30]^yt[l0+40];for(let l0=0;l0<10;l0+=2){const E0=(l0+8)%10,j0=(l0+2)%10,M0=_c[j0],B0=_c[j0+1],V0=Yne(M0,B0,1)^_c[E0],y1=Zne(M0,B0,1)^_c[E0+1];for(let v1=0;v1<50;v1+=10)yt[l0+v1]^=V0,yt[l0+v1+1]^=y1}let Mu=yt[2],Su=yt[3];for(let l0=0;l0<24;l0++){const E0=Wne[l0],j0=Yne(Mu,Su,E0),M0=Zne(Mu,Su,E0),B0=qne[l0];Mu=yt[B0],Su=yt[B0+1],yt[B0]=j0,yt[B0+1]=M0}for(let l0=0;l0<50;l0+=10){for(let E0=0;E0<10;E0++)_c[E0]=yt[l0+E0];for(let E0=0;E0<10;E0++)yt[l0+E0]^=~_c[(E0+2)%10]&_c[(E0+4)%10]}yt[0]^=ffe[mu],yt[1]^=dfe[mu]}_c.fill(0)}XA.keccakP=hfe;class nK extends tK.Hash{constructor(ir,_c,mu,Mu=!1,Su=24){if(super(),this.blockLen=ir,this.suffix=_c,this.outputLen=mu,this.enableXOF=Mu,this.rounds=Su,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,(0,uU.number)(mu),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,tK.u32)(this.state)}keccak(){hfe(this.state32,this.rounds),this.posOut=0,this.pos=0}update(ir){(0,uU.exists)(this);const{blockLen:_c,state:mu}=this,Mu=(ir=(0,tK.toBytes)(ir)).length;for(let Su=0;Su=mu&&this.keccak();const l0=Math.min(mu-this.posOut,Su-Mu);ir.set(_c.subarray(this.posOut,this.posOut+l0),Mu),this.posOut+=l0,Mu+=l0}return ir}xofInto(ir){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(ir)}xof(ir){return(0,uU.number)(ir),this.xofInto(new Uint8Array(ir))}digestInto(ir){if((0,uU.output)(ir,this),this.finished)throw new Error("digest() was already called");return this.writeInto(ir),this.destroy(),ir}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(ir){const{blockLen:_c,suffix:mu,outputLen:Mu,rounds:Su,enableXOF:l0}=this;return ir||(ir=new nK(_c,mu,Mu,l0,Su)),ir.state32.set(this.state32),ir.pos=this.pos,ir.posOut=this.posOut,ir.finished=this.finished,ir.rounds=Su,ir.suffix=mu,ir.outputLen=Mu,ir.enableXOF=l0,ir.destroyed=this.destroyed,ir}}XA.Keccak=nK;const w5=(yt,ir,_c)=>(0,tK.wrapConstructor)(()=>new nK(ir,yt,_c));XA.sha3_224=w5(6,144,28),XA.sha3_256=w5(6,136,32),XA.sha3_384=w5(6,104,48),XA.sha3_512=w5(6,72,64),XA.keccak_224=w5(1,144,28),XA.keccak_256=w5(1,136,32),XA.keccak_384=w5(1,104,48),XA.keccak_512=w5(1,72,64);const fU=(yt,ir,_c)=>(0,tK.wrapXOFConstructorWithOpts)((mu={})=>new nK(ir,yt,mu.dkLen===void 0?_c:mu.dkLen,!0));XA.shake128=fU(31,168,16),XA.shake256=fU(31,136,32);var iK={};(function(yt){function ir(...qv){const Qv=(s0,g0)=>d0=>s0(g0(d0)),T0=Array.from(qv).reverse().reduce((s0,g0)=>s0?Qv(s0,g0.encode):g0.encode,void 0),X0=qv.reduce((s0,g0)=>s0?Qv(s0,g0.decode):g0.decode,void 0);return{encode:T0,decode:X0}}function _c(qv){return{encode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return Qv.map(T0=>{if(T0<0||T0>=qv.length)throw new Error(`Digit index outside alphabet: ${T0} (alphabet: ${qv.length})`);return qv[T0]})},decode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="string")throw new Error("alphabet.decode input should be array of strings");return Qv.map(T0=>{if(typeof T0!="string")throw new Error(`alphabet.decode: not string element=${T0}`);const X0=qv.indexOf(T0);if(X0===-1)throw new Error(`Unknown letter: "${T0}". Allowed: ${qv}`);return X0})}}}function mu(qv=""){if(typeof qv!="string")throw new Error("join separator should be string");return{encode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="string")throw new Error("join.encode input should be array of strings");for(let T0 of Qv)if(typeof T0!="string")throw new Error(`join.encode: non-string input=${T0}`);return Qv.join(qv)},decode:Qv=>{if(typeof Qv!="string")throw new Error("join.decode input should be string");return Qv.split(qv)}}}function Mu(qv,Qv="="){if(typeof Qv!="string")throw new Error("padding chr should be string");return{encode(T0){if(!Array.isArray(T0)||T0.length&&typeof T0[0]!="string")throw new Error("padding.encode input should be array of strings");for(let X0 of T0)if(typeof X0!="string")throw new Error(`padding.encode: non-string input=${X0}`);for(;T0.length*qv%8;)T0.push(Qv);return T0},decode(T0){if(!Array.isArray(T0)||T0.length&&typeof T0[0]!="string")throw new Error("padding.encode input should be array of strings");for(let s0 of T0)if(typeof s0!="string")throw new Error(`padding.decode: non-string input=${s0}`);let X0=T0.length;if(X0*qv%8)throw new Error("Invalid padding: string should have whole number of bytes");for(;X0>0&&T0[X0-1]===Qv;X0--)if(!((X0-1)*qv%8))throw new Error("Invalid padding: string has too much padding");return T0.slice(0,X0)}}}function Su(qv){if(typeof qv!="function")throw new Error("normalize fn should be function");return{encode:Qv=>Qv,decode:Qv=>qv(Qv)}}function l0(qv,Qv,T0){if(Qv<2)throw new Error(`convertRadix: wrong from=${Qv}, base cannot be less than 2`);if(T0<2)throw new Error(`convertRadix: wrong to=${T0}, base cannot be less than 2`);if(!Array.isArray(qv))throw new Error("convertRadix: data should be array");if(!qv.length)return[];let X0=0;const s0=[],g0=Array.from(qv);for(g0.forEach(d0=>{if(d0<0||d0>=Qv)throw new Error(`Wrong integer: ${d0}`)});;){let d0=0,c0=!0;for(let a0=X0;a0Qv?E0(Qv,qv%Qv):qv,j0=(qv,Qv)=>qv+(Qv-E0(qv,Qv));function M0(qv,Qv,T0,X0){if(!Array.isArray(qv))throw new Error("convertRadix2: data should be array");if(Qv<=0||Qv>32)throw new Error(`convertRadix2: wrong from=${Qv}`);if(T0<=0||T0>32)throw new Error(`convertRadix2: wrong to=${T0}`);if(j0(Qv,T0)>32)throw new Error(`convertRadix2: carry overflow from=${Qv} to=${T0} carryBits=${j0(Qv,T0)}`);let s0=0,g0=0;const d0=2**T0-1,c0=[];for(const a0 of qv){if(a0>=2**Qv)throw new Error(`convertRadix2: invalid data word=${a0} from=${Qv}`);if(s0=s0<32)throw new Error(`convertRadix2: carry overflow pos=${g0} from=${Qv}`);for(g0+=Qv;g0>=T0;g0-=T0)c0.push((s0>>g0-T0&d0)>>>0);s0&=2**g0-1}if(s0=s0<=Qv)throw new Error("Excess padding");if(!X0&&s0)throw new Error(`Non-zero padding: ${s0}`);return X0&&g0>0&&c0.push(s0>>>0),c0}function B0(qv){return{encode:Qv=>{if(!(Qv instanceof Uint8Array))throw new Error("radix.encode input should be Uint8Array");return l0(Array.from(Qv),256,qv)},decode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="number")throw new Error("radix.decode input should be array of strings");return Uint8Array.from(l0(Qv,qv,256))}}}function V0(qv,Qv=!1){if(qv<=0||qv>32)throw new Error("radix2: bits should be in (0..32]");if(j0(8,qv)>32||j0(qv,8)>32)throw new Error("radix2: carry overflow");return{encode:T0=>{if(!(T0 instanceof Uint8Array))throw new Error("radix2.encode input should be Uint8Array");return M0(Array.from(T0),8,qv,!Qv)},decode:T0=>{if(!Array.isArray(T0)||T0.length&&typeof T0[0]!="number")throw new Error("radix2.decode input should be array of strings");return Uint8Array.from(M0(T0,qv,8,Qv))}}}function y1(qv){if(typeof qv!="function")throw new Error("unsafeWrapper fn should be function");return function(...Qv){try{return qv.apply(null,Qv)}catch{}}}function v1(qv,Qv){if(typeof Qv!="function")throw new Error("checksum fn should be function");return{encode(T0){if(!(T0 instanceof Uint8Array))throw new Error("checksum.encode: input should be Uint8Array");const X0=Qv(T0).slice(0,qv),s0=new Uint8Array(T0.length+qv);return s0.set(T0),s0.set(X0,T0.length),s0},decode(T0){if(!(T0 instanceof Uint8Array))throw new Error("checksum.decode: input should be Uint8Array");const X0=T0.slice(0,-qv),s0=Qv(X0).slice(0,qv),g0=T0.slice(-qv);for(let d0=0;d0qv.toUpperCase().replace(/O/g,"0").replace(/[IL]/g,"1"))),yt.base64=ir(V0(6),_c("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Mu(6),mu("")),yt.base64url=ir(V0(6),_c("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),Mu(6),mu("")),yt.base64urlnopad=ir(V0(6),_c("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),mu(""));const F1=qv=>ir(B0(58),_c(qv),mu(""));yt.base58=F1("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"),yt.base58flickr=F1("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"),yt.base58xrp=F1("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");const ov=[0,2,3,5,6,7,9,10,11];yt.base58xmr={encode(qv){let Qv="";for(let T0=0;T0ir(v1(4,Qv=>qv(qv(Qv))),yt.base58);const bv=ir(_c("qpzry9x8gf2tvdw0s3jn54khce6mua7l"),mu("")),gv=[996825010,642813549,513874426,1027748829,705979059];function xv(qv){const Qv=qv>>25;let T0=(33554431&qv)<<5;for(let X0=0;X0>X0&1)==1&&(T0^=gv[X0]);return T0}function hy(qv,Qv,T0=1){const X0=qv.length;let s0=1;for(let g0=0;g0126)throw new Error(`Invalid prefix (${qv})`);s0=xv(s0)^d0>>5}s0=xv(s0);for(let g0=0;g0a0)throw new TypeError(`Wrong string length: ${c0.length} (${c0}). Expected (8..${a0})`);const S0=c0.toLowerCase();if(c0!==S0&&c0!==c0.toUpperCase())throw new Error("String must be lowercase or uppercase");const z0=(c0=S0).lastIndexOf("1");if(z0===0||z0===-1)throw new Error('Letter "1" must be present between prefix and data only');const Q0=c0.slice(0,z0),p1=c0.slice(z0+1);if(p1.length<6)throw new Error("Data must be at least 6 characters long");const T1=bv.decode(p1).slice(0,-6),U1=hy(Q0,T1,Qv);if(!p1.endsWith(U1))throw new Error(`Invalid checksum in ${c0}: expected "${U1}"`);return{prefix:Q0,words:T1}}return{encode:function(c0,a0,S0=90){if(typeof c0!="string")throw new Error("bech32.encode prefix should be string, not "+typeof c0);if(!Array.isArray(a0)||a0.length&&typeof a0[0]!="number")throw new Error("bech32.encode words should be array of numbers, not "+typeof a0);const z0=c0.length+7+a0.length;if(S0!==!1&&z0>S0)throw new TypeError(`Length ${z0} exceeds limit ${S0}`);const Q0=c0.toLowerCase(),p1=hy(Q0,a0,Qv);return`${Q0}1${bv.encode(a0)}${p1}`},decode:d0,decodeToBytes:function(c0){const{prefix:a0,words:S0}=d0(c0,!1);return{prefix:a0,words:S0,bytes:X0(S0)}},decodeUnsafe:y1(d0),fromWords:X0,fromWordsUnsafe:g0,toWords:s0}}yt.bech32=oy("bech32"),yt.bech32m=oy("bech32m"),yt.utf8={encode:qv=>new TextDecoder().decode(qv),decode:qv=>new TextEncoder().encode(qv)},yt.hex=ir(V0(4),_c("0123456789abcdef"),mu(""),Su(qv=>{if(typeof qv!="string"||qv.length%2)throw new TypeError(`hex.decode: expected string, got ${typeof qv} with length ${qv.length}`);return qv.toLowerCase()}));const fy={utf8:yt.utf8,hex:yt.hex,base16:yt.base16,base32:yt.base32,base64:yt.base64,base64url:yt.base64url,base58:yt.base58,base58xmr:yt.base58xmr},Fy="Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr";yt.bytesToString=(qv,Qv)=>{if(typeof qv!="string"||!fy.hasOwnProperty(qv))throw new TypeError(Fy);if(!(Qv instanceof Uint8Array))throw new TypeError("bytesToString() expects Uint8Array");return fy[qv].encode(Qv)},yt.str=yt.bytesToString,yt.stringToBytes=(qv,Qv)=>{if(!fy.hasOwnProperty(qv))throw new TypeError(Fy);if(typeof Qv!="string")throw new TypeError("stringToBytes() expects string");return fy[qv].decode(Qv)},yt.bytes=yt.stringToBytes})(iK),Object.defineProperty($$,"__esModule",{value:!0});var q8=DM,pfe=XA,dx=HN,Jne=iK,mfe=48,oK=58,gfe=87,Ome=function(){const yt=[];return()=>{if(yt.length===0)for(let ir=0;ir<256;ir++)yt.push(ir.toString(16).padStart(2,"0"));return yt}}();function Xne(yt){return yt instanceof Uint8Array}function dU(yt){q8.assert.call(void 0,Xne(yt),"Value must be a Uint8Array.")}function Qne(yt){if(dU(yt),yt.length===0)return"0x";const ir=Ome(),_c=new Array(yt.length);for(let mu=0;mul0.call(Su,...B0)),Su=void 0)}return l0}([yt,"optionalAccess",Mu=>Mu.toLowerCase,"optionalCall",Mu=>Mu()])==="0x")return new Uint8Array;aie(yt);const ir=sK(yt).toLowerCase(),_c=ir.length%2==0?ir:`0${ir}`,mu=new Uint8Array(_c.length/2);for(let Mu=0;Mu=BigInt(0),"Value must be a non-negative bigint."),zq(yt.toString(16))}function tie(yt){return q8.assert.call(void 0,typeof yt=="number","Value must be a number."),q8.assert.call(void 0,yt>=0,"Value must be a non-negative number."),q8.assert.call(void 0,Number.isSafeInteger(yt),"Value is not a safe integer. Use `bigIntToBytes` instead."),zq(yt.toString(16))}function aK(yt){return q8.assert.call(void 0,typeof yt=="string","Value must be a string."),new TextEncoder().encode(yt)}function qN(yt){if(typeof yt=="bigint")return eie(yt);if(typeof yt=="number")return tie(yt);if(typeof yt=="string")return yt.startsWith("0x")?zq(yt):aK(yt);if(Xne(yt))return yt;throw new TypeError(`Unsupported value type: "${typeof yt}".`)}var rie=dx.pattern.call(void 0,dx.string.call(void 0),/^(?:0x)?[0-9a-f]+$/iu),nie=dx.pattern.call(void 0,dx.string.call(void 0),/^0x[0-9a-f]+$/iu),Y6=dx.pattern.call(void 0,dx.string.call(void 0),/^0x[0-9a-f]{40}$/u),iie=dx.pattern.call(void 0,dx.string.call(void 0),/^0x[0-9a-fA-F]{40}$/u);function hx(yt){return dx.is.call(void 0,yt,rie)}function oie(yt){return dx.is.call(void 0,yt,nie)}function aie(yt){q8.assert.call(void 0,hx(yt),"Value must be a hexadecimal string.")}function sie(yt){q8.assert.call(void 0,dx.is.call(void 0,yt,iie),"Invalid hex address.");const ir=sK(yt.toLowerCase()),_c=sK(Qne(pfe.keccak_256.call(void 0,ir)));return`0x${ir.split("").map((mu,Mu)=>{const Su=_c[Mu];return q8.assert.call(void 0,dx.is.call(void 0,Su,dx.string.call(void 0)),"Hash shorter than address."),parseInt(Su,16)>7?mu.toUpperCase():mu}).join("")}`}function lie(yt){return!!dx.is.call(void 0,yt,iie)&&sie(yt)===yt}function yfe(yt){return yt.startsWith("0x")?yt:yt.startsWith("0X")?`0x${yt.substring(2)}`:`0x${yt}`}function sK(yt){return yt.startsWith("0x")||yt.startsWith("0X")?yt.substring(2):yt}$$.HexStruct=rie,$$.StrictHexStruct=nie,$$.HexAddressStruct=Y6,$$.HexChecksumAddressStruct=iie,$$.isHexString=hx,$$.isStrictHexString=oie,$$.assertIsHexString=aie,$$.assertIsStrictHexString=function(yt){q8.assert.call(void 0,oie(yt),'Value must be a hexadecimal string, starting with "0x".')},$$.isValidHexAddress=function(yt){return dx.is.call(void 0,yt,Y6)||lie(yt)},$$.getChecksumAddress=sie,$$.isValidChecksumAddress=lie,$$.add0x=yfe,$$.remove0x=sK,$$.isBytes=Xne,$$.assertIsBytes=dU,$$.bytesToHex=Qne,$$.bytesToBigInt=vfe,$$.bytesToSignedBigInt=function(yt){dU(yt);let ir=BigInt(0);for(const _c of yt)ir=(ir<0,"Byte length must be greater than 0."),q8.assert.call(void 0,function(Mu,Su){q8.assert.call(void 0,Su>0);const l0=Mu>>BigInt(31);return!((~Mu&l0)+(Mu&~l0)>>BigInt(8*Su-1))}(yt,ir),"Byte length is too small to represent the given value.");let _c=yt;const mu=new Uint8Array(ir);for(let Mu=0;Mu>=BigInt(8);return mu.reverse()},$$.numberToBytes=tie,$$.stringToBytes=aK,$$.base64ToBytes=function(yt){return q8.assert.call(void 0,typeof yt=="string","Value must be a string."),Jne.base64.decode(yt)},$$.valueToBytes=qN,$$.concatBytes=function(yt){const ir=new Array(yt.length);let _c=0;for(let Mu=0;Mu(UB.assert.call(void 0,typeof yt=="number","Value must be a number."),UB.assert.call(void 0,yt>=0,"Value must be a non-negative number."),UB.assert.call(void 0,Number.isSafeInteger(yt),"Value is not a safe integer. Use `bigIntToHex` instead."),$5.add0x.call(void 0,yt.toString(16))),KH.bigIntToHex=yt=>(UB.assert.call(void 0,typeof yt=="bigint","Value must be a bigint."),UB.assert.call(void 0,yt>=0,"Value must be a non-negative bigint."),$5.add0x.call(void 0,yt.toString(16))),KH.hexToNumber=yt=>{$5.assertIsHexString.call(void 0,yt);const ir=parseInt(yt,16);return UB.assert.call(void 0,Number.isSafeInteger(ir),"Value is not a safe integer. Use `hexToBigInt` instead."),ir},KH.hexToBigInt=yt=>($5.assertIsHexString.call(void 0,yt),BigInt($5.add0x.call(void 0,yt)));var SJ={};Object.defineProperty(SJ,"__esModule",{value:!0}),SJ.createDeferredPromise=function({suppressUnhandledRejection:yt=!1}={}){let ir,_c;const mu=new Promise((Mu,Su)=>{ir=Mu,_c=Su});return yt&&mu.catch(Mu=>{}),{promise:mu,resolve:ir,reject:_c}};var zB={};Object.defineProperty(zB,"__esModule",{value:!0});var cie=(yt=>(yt[yt.Millisecond=1]="Millisecond",yt[yt.Second=1e3]="Second",yt[yt.Minute=6e4]="Minute",yt[yt.Hour=36e5]="Hour",yt[yt.Day=864e5]="Day",yt[yt.Week=6048e5]="Week",yt[yt.Year=31536e6]="Year",yt))(cie||{}),uie=(yt,ir)=>{if(!(_c=>Number.isInteger(_c)&&_c>=0)(yt))throw new Error(`"${ir}" must be a non-negative integer. Received: "${yt}".`)};zB.Duration=cie,zB.inMilliseconds=function(yt,ir){return uie(yt,"count"),yt*ir},zB.timeSince=function(yt){return uie(yt,"timestamp"),Date.now()-yt};var UM={},xJ={exports:{}},Hq={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Kq=typeof Kv=="object"&&Kv.env&&Kv.env.NODE_DEBUG&&/\bsemver\b/i.test(Kv.env.NODE_DEBUG)?(...yt)=>console.error("SEMVER",...yt):()=>{};(function(yt,ir){const{MAX_SAFE_COMPONENT_LENGTH:_c,MAX_SAFE_BUILD_LENGTH:mu,MAX_LENGTH:Mu}=Hq,Su=Kq,l0=(ir=yt.exports={}).re=[],E0=ir.safeRe=[],j0=ir.src=[],M0=ir.t={};let B0=0;const V0="[a-zA-Z0-9-]",y1=[["\\s",1],["\\d",Mu],[V0,mu]],v1=(F1,ov,bv)=>{const gv=(hy=>{for(const[oy,fy]of y1)hy=hy.split(`${oy}*`).join(`${oy}{0,${fy}}`).split(`${oy}+`).join(`${oy}{1,${fy}}`);return hy})(ov),xv=B0++;Su(F1,xv,ov),M0[F1]=xv,j0[xv]=ov,l0[xv]=new RegExp(ov,bv?"g":void 0),E0[xv]=new RegExp(gv,bv?"g":void 0)};v1("NUMERICIDENTIFIER","0|[1-9]\\d*"),v1("NUMERICIDENTIFIERLOOSE","\\d+"),v1("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${V0}*`),v1("MAINVERSION",`(${j0[M0.NUMERICIDENTIFIER]})\\.(${j0[M0.NUMERICIDENTIFIER]})\\.(${j0[M0.NUMERICIDENTIFIER]})`),v1("MAINVERSIONLOOSE",`(${j0[M0.NUMERICIDENTIFIERLOOSE]})\\.(${j0[M0.NUMERICIDENTIFIERLOOSE]})\\.(${j0[M0.NUMERICIDENTIFIERLOOSE]})`),v1("PRERELEASEIDENTIFIER",`(?:${j0[M0.NUMERICIDENTIFIER]}|${j0[M0.NONNUMERICIDENTIFIER]})`),v1("PRERELEASEIDENTIFIERLOOSE",`(?:${j0[M0.NUMERICIDENTIFIERLOOSE]}|${j0[M0.NONNUMERICIDENTIFIER]})`),v1("PRERELEASE",`(?:-(${j0[M0.PRERELEASEIDENTIFIER]}(?:\\.${j0[M0.PRERELEASEIDENTIFIER]})*))`),v1("PRERELEASELOOSE",`(?:-?(${j0[M0.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${j0[M0.PRERELEASEIDENTIFIERLOOSE]})*))`),v1("BUILDIDENTIFIER",`${V0}+`),v1("BUILD",`(?:\\+(${j0[M0.BUILDIDENTIFIER]}(?:\\.${j0[M0.BUILDIDENTIFIER]})*))`),v1("FULLPLAIN",`v?${j0[M0.MAINVERSION]}${j0[M0.PRERELEASE]}?${j0[M0.BUILD]}?`),v1("FULL",`^${j0[M0.FULLPLAIN]}$`),v1("LOOSEPLAIN",`[v=\\s]*${j0[M0.MAINVERSIONLOOSE]}${j0[M0.PRERELEASELOOSE]}?${j0[M0.BUILD]}?`),v1("LOOSE",`^${j0[M0.LOOSEPLAIN]}$`),v1("GTLT","((?:<|>)?=?)"),v1("XRANGEIDENTIFIERLOOSE",`${j0[M0.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),v1("XRANGEIDENTIFIER",`${j0[M0.NUMERICIDENTIFIER]}|x|X|\\*`),v1("XRANGEPLAIN",`[v=\\s]*(${j0[M0.XRANGEIDENTIFIER]})(?:\\.(${j0[M0.XRANGEIDENTIFIER]})(?:\\.(${j0[M0.XRANGEIDENTIFIER]})(?:${j0[M0.PRERELEASE]})?${j0[M0.BUILD]}?)?)?`),v1("XRANGEPLAINLOOSE",`[v=\\s]*(${j0[M0.XRANGEIDENTIFIERLOOSE]})(?:\\.(${j0[M0.XRANGEIDENTIFIERLOOSE]})(?:\\.(${j0[M0.XRANGEIDENTIFIERLOOSE]})(?:${j0[M0.PRERELEASELOOSE]})?${j0[M0.BUILD]}?)?)?`),v1("XRANGE",`^${j0[M0.GTLT]}\\s*${j0[M0.XRANGEPLAIN]}$`),v1("XRANGELOOSE",`^${j0[M0.GTLT]}\\s*${j0[M0.XRANGEPLAINLOOSE]}$`),v1("COERCE",`(^|[^\\d])(\\d{1,${_c}})(?:\\.(\\d{1,${_c}}))?(?:\\.(\\d{1,${_c}}))?(?:$|[^\\d])`),v1("COERCERTL",j0[M0.COERCE],!0),v1("LONETILDE","(?:~>?)"),v1("TILDETRIM",`(\\s*)${j0[M0.LONETILDE]}\\s+`,!0),ir.tildeTrimReplace="$1~",v1("TILDE",`^${j0[M0.LONETILDE]}${j0[M0.XRANGEPLAIN]}$`),v1("TILDELOOSE",`^${j0[M0.LONETILDE]}${j0[M0.XRANGEPLAINLOOSE]}$`),v1("LONECARET","(?:\\^)"),v1("CARETTRIM",`(\\s*)${j0[M0.LONECARET]}\\s+`,!0),ir.caretTrimReplace="$1^",v1("CARET",`^${j0[M0.LONECARET]}${j0[M0.XRANGEPLAIN]}$`),v1("CARETLOOSE",`^${j0[M0.LONECARET]}${j0[M0.XRANGEPLAINLOOSE]}$`),v1("COMPARATORLOOSE",`^${j0[M0.GTLT]}\\s*(${j0[M0.LOOSEPLAIN]})$|^$`),v1("COMPARATOR",`^${j0[M0.GTLT]}\\s*(${j0[M0.FULLPLAIN]})$|^$`),v1("COMPARATORTRIM",`(\\s*)${j0[M0.GTLT]}\\s*(${j0[M0.LOOSEPLAIN]}|${j0[M0.XRANGEPLAIN]})`,!0),ir.comparatorTrimReplace="$1$2$3",v1("HYPHENRANGE",`^\\s*(${j0[M0.XRANGEPLAIN]})\\s+-\\s+(${j0[M0.XRANGEPLAIN]})\\s*$`),v1("HYPHENRANGELOOSE",`^\\s*(${j0[M0.XRANGEPLAINLOOSE]})\\s+-\\s+(${j0[M0.XRANGEPLAINLOOSE]})\\s*$`),v1("STAR","(<|>)?=?\\s*\\*"),v1("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),v1("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(xJ,xJ.exports);var lK=xJ.exports;const fie=Object.freeze({loose:!0}),bfe=Object.freeze({});var kJ=yt=>yt?typeof yt!="object"?fie:yt:bfe;const die=/^[0-9]+$/,hie=(yt,ir)=>{const _c=die.test(yt),mu=die.test(ir);return _c&&mu&&(yt=+yt,ir=+ir),yt===ir?0:_c&&!mu?-1:mu&&!_c?1:ythie(ir,yt)};const Vq=Kq,{MAX_LENGTH:qq,MAX_SAFE_INTEGER:HB}=Hq,{safeRe:hU,t:CJ}=lK,Wq=kJ,{compareIdentifiers:pU}=pie;var px=class eF{constructor(ir,_c){if(_c=Wq(_c),ir instanceof eF){if(ir.loose===!!_c.loose&&ir.includePrerelease===!!_c.includePrerelease)return ir;ir=ir.version}else if(typeof ir!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof ir}".`);if(ir.length>qq)throw new TypeError(`version is longer than ${qq} characters`);Vq("SemVer",ir,_c),this.options=_c,this.loose=!!_c.loose,this.includePrerelease=!!_c.includePrerelease;const mu=ir.trim().match(_c.loose?hU[CJ.LOOSE]:hU[CJ.FULL]);if(!mu)throw new TypeError(`Invalid Version: ${ir}`);if(this.raw=ir,this.major=+mu[1],this.minor=+mu[2],this.patch=+mu[3],this.major>HB||this.major<0)throw new TypeError("Invalid major version");if(this.minor>HB||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>HB||this.patch<0)throw new TypeError("Invalid patch version");mu[4]?this.prerelease=mu[4].split(".").map(Mu=>{if(/^[0-9]+$/.test(Mu)){const Su=+Mu;if(Su>=0&&Su=0;)typeof this.prerelease[Su]=="number"&&(this.prerelease[Su]++,Su=-2);if(Su===-1){if(_c===this.prerelease.join(".")&&mu===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(Mu)}}if(_c){let Su=[_c,Mu];mu===!1&&(Su=[_c]),pU(this.prerelease[0],_c)===0?isNaN(this.prerelease[1])&&(this.prerelease=Su):this.prerelease=Su}break}default:throw new Error(`invalid increment argument: ${ir}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};const zM=px;var KB=(yt,ir,_c=!1)=>{if(yt instanceof zM)return yt;try{return new zM(yt,ir)}catch(mu){if(!_c)return null;throw mu}};const TJ=KB,RJ=KB,cK=px,wfe=KB,Pme=px,mie=px,$fe=px,Efe=KB,gie=px;var cT=(yt,ir,_c)=>new gie(yt,_c).compare(new gie(ir,_c));const Afe=cT,MJ=cT,vie=px;var IJ=(yt,ir,_c)=>{const mu=new vie(yt,_c),Mu=new vie(ir,_c);return mu.compare(Mu)||mu.compareBuild(Mu)};const jme=IJ,uK=IJ,dC=cT;var Gq=(yt,ir,_c)=>dC(yt,ir,_c)>0;const fK=cT;var yie=(yt,ir,_c)=>fK(yt,ir,_c)<0;const Nme=cT;var _fe=(yt,ir,_c)=>Nme(yt,ir,_c)===0;const Lme=cT;var bie=(yt,ir,_c)=>Lme(yt,ir,_c)!==0;const Bme=cT;var OJ=(yt,ir,_c)=>Bme(yt,ir,_c)>=0;const Dme=cT;var wie=(yt,ir,_c)=>Dme(yt,ir,_c)<=0;const Fme=_fe,Ume=bie,zme=Gq,Hme=OJ,Kme=yie,Vme=wie;var Sfe=(yt,ir,_c,mu)=>{switch(ir){case"===":return typeof yt=="object"&&(yt=yt.version),typeof _c=="object"&&(_c=_c.version),yt===_c;case"!==":return typeof yt=="object"&&(yt=yt.version),typeof _c=="object"&&(_c=_c.version),yt!==_c;case"":case"=":case"==":return Fme(yt,_c,mu);case"!=":return Ume(yt,_c,mu);case">":return zme(yt,_c,mu);case">=":return Hme(yt,_c,mu);case"<":return Kme(yt,_c,mu);case"<=":return Vme(yt,_c,mu);default:throw new TypeError(`Invalid operator: ${ir}`)}};const xfe=px,E5=KB,{safeRe:PJ,t:jJ}=lK;var kfe,Cfe,NJ,LJ,$ie,Tfe,Eie,Rfe,Aie,Yq;function A5(){if(Rfe)return Eie;Rfe=1;class yt{constructor(c0,a0){if(a0=mu(a0),c0 instanceof yt)return c0.loose===!!a0.loose&&c0.includePrerelease===!!a0.includePrerelease?c0:new yt(c0.raw,a0);if(c0 instanceof Mu)return this.raw=c0.value,this.set=[[c0]],this.format(),this;if(this.options=a0,this.loose=!!a0.loose,this.includePrerelease=!!a0.includePrerelease,this.raw=c0.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(S0=>this.parseRange(S0.trim())).filter(S0=>S0.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const S0=this.set[0];if(this.set=this.set.filter(z0=>!F1(z0[0])),this.set.length===0)this.set=[S0];else if(this.set.length>1){for(const z0 of this.set)if(z0.length===1&&ov(z0[0])){this.set=[z0];break}}}this.format()}format(){return this.range=this.set.map(c0=>c0.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(c0){const a0=((this.options.includePrerelease&&y1)|(this.options.loose&&v1))+":"+c0,S0=_c.get(a0);if(S0)return S0;const z0=this.options.loose,Q0=z0?E0[j0.HYPHENRANGELOOSE]:E0[j0.HYPHENRANGE];c0=c0.replace(Q0,s0(this.options.includePrerelease)),Su("hyphen replace",c0),c0=c0.replace(E0[j0.COMPARATORTRIM],M0),Su("comparator trim",c0),c0=c0.replace(E0[j0.TILDETRIM],B0),Su("tilde trim",c0),c0=c0.replace(E0[j0.CARETTRIM],V0),Su("caret trim",c0);let p1=c0.split(" ").map(n1=>gv(n1,this.options)).join(" ").split(/\s+/).map(n1=>X0(n1,this.options));z0&&(p1=p1.filter(n1=>(Su("loose invalid filter",n1,this.options),!!n1.match(E0[j0.COMPARATORLOOSE])))),Su("range list",p1);const T1=new Map,U1=p1.map(n1=>new Mu(n1,this.options));for(const n1 of U1){if(F1(n1))return[n1];T1.set(n1.value,n1)}T1.size>1&&T1.has("")&&T1.delete("");const S1=[...T1.values()];return _c.set(a0,S1),S1}intersects(c0,a0){if(!(c0 instanceof yt))throw new TypeError("a Range is required");return this.set.some(S0=>bv(S0,a0)&&c0.set.some(z0=>bv(z0,a0)&&S0.every(Q0=>z0.every(p1=>Q0.intersects(p1,a0)))))}test(c0){if(!c0)return!1;if(typeof c0=="string")try{c0=new l0(c0,this.options)}catch{return!1}for(let a0=0;a00)for(var cy=0,Uy=arguments.length;cy1)cy=iy;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");Uy=this.head.next,cy=this.head.value}for(var r2=0;Uy!==null;r2++)cy=Fv(cy,Uy.value,r2),Uy=Uy.next;return cy},yv.prototype.reduceReverse=function(Fv,iy){var cy,Uy=this.tail;if(arguments.length>1)cy=iy;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");Uy=this.tail.prev,cy=this.tail.value}for(var r2=this.length-1;Uy!==null;r2--)cy=Fv(cy,Uy.value,r2),Uy=Uy.prev;return cy},yv.prototype.toArray=function(){for(var Fv=new Array(this.length),iy=0,cy=this.head;cy!==null;iy++)Fv[iy]=cy.value,cy=cy.next;return Fv},yv.prototype.toArrayReverse=function(){for(var Fv=new Array(this.length),iy=0,cy=this.tail;cy!==null;iy++)Fv[iy]=cy.value,cy=cy.prev;return Fv},yv.prototype.slice=function(Fv,iy){(iy=iy||this.length)<0&&(iy+=this.length),(Fv=Fv||0)<0&&(Fv+=this.length);var cy=new yv;if(iythis.length&&(iy=this.length);for(var Uy=0,r2=this.head;r2!==null&&Uythis.length&&(iy=this.length);for(var Uy=this.length,r2=this.tail;r2!==null&&Uy>iy;Uy--)r2=r2.prev;for(;r2!==null&&Uy>Fv;Uy--,r2=r2.prev)cy.push(r2.value);return cy},yv.prototype.splice=function(Fv,iy,...cy){Fv>this.length&&(Fv=this.length-1),Fv<0&&(Fv=this.length+Fv);for(var Uy=0,r2=this.head;r2!==null&&Uy1,J1=(yv,Av,Dv)=>{const ry=yv[S1].get(Av);if(ry){const Jv=ry.value;if(wv(yv,Jv)){if(Hv(yv,ry),!yv[z0])return}else Dv&&(yv[n1]&&(ry.value.now=Date.now()),yv[U1].unshiftNode(ry));return Jv.value}},wv=(yv,Av)=>{if(!Av||!Av.maxAge&&!yv[Q0])return!1;const Dv=Date.now()-Av.now;return Av.maxAge?Dv>Av.maxAge:yv[Q0]&&Dv>yv[Q0]},Sv=yv=>{if(yv[a0]>yv[c0])for(let Av=yv[U1].tail;yv[a0]>yv[c0]&&Av!==null;){const Dv=Av.prev;Hv(yv,Av),Av=Dv}},Hv=(yv,Av)=>{if(Av){const Dv=Av.value;yv[p1]&&yv[p1](Dv.key,Dv.value),yv[a0]-=Dv.length,yv[S1].delete(Dv.key),yv[U1].removeNode(Av)}};class ty{constructor(Av,Dv,ry,Jv,Fv){this.key=Av,this.value=Dv,this.length=ry,this.now=Jv,this.maxAge=Fv||0}}const gy=(yv,Av,Dv,ry)=>{let Jv=Dv.value;wv(yv,Jv)&&(Hv(yv,Dv),yv[z0]||(Jv=void 0)),Jv&&Av.call(ry,Jv.value,Jv.key,yv)};return $ie=class{constructor(yv){if(typeof yv=="number"&&(yv={max:yv}),yv||(yv={}),yv.max&&(typeof yv.max!="number"||yv.max<0))throw new TypeError("max must be a non-negative number");this[c0]=yv.max||1/0;const Av=yv.length||V1;if(this[S0]=typeof Av!="function"?V1:Av,this[z0]=yv.stale||!1,yv.maxAge&&typeof yv.maxAge!="number")throw new TypeError("maxAge must be a number");this[Q0]=yv.maxAge||0,this[p1]=yv.dispose,this[T1]=yv.noDisposeOnSet||!1,this[n1]=yv.updateAgeOnGet||!1,this.reset()}set max(yv){if(typeof yv!="number"||yv<0)throw new TypeError("max must be a non-negative number");this[c0]=yv||1/0,Sv(this)}get max(){return this[c0]}set allowStale(yv){this[z0]=!!yv}get allowStale(){return this[z0]}set maxAge(yv){if(typeof yv!="number")throw new TypeError("maxAge must be a non-negative number");this[Q0]=yv,Sv(this)}get maxAge(){return this[Q0]}set lengthCalculator(yv){typeof yv!="function"&&(yv=V1),yv!==this[S0]&&(this[S0]=yv,this[a0]=0,this[U1].forEach(Av=>{Av.length=this[S0](Av.value,Av.key),this[a0]+=Av.length})),Sv(this)}get lengthCalculator(){return this[S0]}get length(){return this[a0]}get itemCount(){return this[U1].length}rforEach(yv,Av){Av=Av||this;for(let Dv=this[U1].tail;Dv!==null;){const ry=Dv.prev;gy(this,yv,Dv,Av),Dv=ry}}forEach(yv,Av){Av=Av||this;for(let Dv=this[U1].head;Dv!==null;){const ry=Dv.next;gy(this,yv,Dv,Av),Dv=ry}}keys(){return this[U1].toArray().map(yv=>yv.key)}values(){return this[U1].toArray().map(yv=>yv.value)}reset(){this[p1]&&this[U1]&&this[U1].length&&this[U1].forEach(yv=>this[p1](yv.key,yv.value)),this[S1]=new Map,this[U1]=new d0,this[a0]=0}dump(){return this[U1].map(yv=>!wv(this,yv)&&{k:yv.key,v:yv.value,e:yv.now+(yv.maxAge||0)}).toArray().filter(yv=>yv)}dumpLru(){return this[U1]}set(yv,Av,Dv){if((Dv=Dv||this[Q0])&&typeof Dv!="number")throw new TypeError("maxAge must be a number");const ry=Dv?Date.now():0,Jv=this[S0](Av,yv);if(this[S1].has(yv)){if(Jv>this[c0])return Hv(this,this[S1].get(yv)),!1;const iy=this[S1].get(yv).value;return this[p1]&&(this[T1]||this[p1](yv,iy.value)),iy.now=ry,iy.maxAge=Dv,iy.value=Av,this[a0]+=Jv-iy.length,iy.length=Jv,this.get(yv),Sv(this),!0}const Fv=new ty(yv,Av,Jv,ry,Dv);return Fv.length>this[c0]?(this[p1]&&this[p1](yv,Av),!1):(this[a0]+=Fv.length,this[U1].unshift(Fv),this[S1].set(yv,this[U1].head),Sv(this),!0)}has(yv){if(!this[S1].has(yv))return!1;const Av=this[S1].get(yv).value;return!wv(this,Av)}get(yv){return J1(this,yv,!0)}peek(yv){return J1(this,yv,!1)}pop(){const yv=this[U1].tail;return yv?(Hv(this,yv),yv.value):null}del(yv){Hv(this,this[S1].get(yv))}load(yv){this.reset();const Av=Date.now();for(let Dv=yv.length-1;Dv>=0;Dv--){const ry=yv[Dv],Jv=ry.e||0;if(Jv===0)this.set(ry.k,ry.v);else{const Fv=Jv-Av;Fv>0&&this.set(ry.k,ry.v,Fv)}}}prune(){this[S1].forEach((yv,Av)=>J1(this,Av,!1))}},$ie}(),_c=new ir({max:1e3}),mu=kJ,Mu=dK(),Su=Kq,l0=px,{safeRe:E0,t:j0,comparatorTrimReplace:M0,tildeTrimReplace:B0,caretTrimReplace:V0}=lK,{FLAG_INCLUDE_PRERELEASE:y1,FLAG_LOOSE:v1}=Hq,F1=d0=>d0.value==="<0.0.0-0",ov=d0=>d0.value==="",bv=(d0,c0)=>{let a0=!0;const S0=d0.slice();let z0=S0.pop();for(;a0&&S0.length;)a0=S0.every(Q0=>z0.intersects(Q0,c0)),z0=S0.pop();return a0},gv=(d0,c0)=>(Su("comp",d0,c0),d0=fy(d0,c0),Su("caret",d0),d0=hy(d0,c0),Su("tildes",d0),d0=qv(d0,c0),Su("xrange",d0),d0=T0(d0,c0),Su("stars",d0),d0),xv=d0=>!d0||d0.toLowerCase()==="x"||d0==="*",hy=(d0,c0)=>d0.trim().split(/\s+/).map(a0=>oy(a0,c0)).join(" "),oy=(d0,c0)=>{const a0=c0.loose?E0[j0.TILDELOOSE]:E0[j0.TILDE];return d0.replace(a0,(S0,z0,Q0,p1,T1)=>{let U1;return Su("tilde",d0,S0,z0,Q0,p1,T1),xv(z0)?U1="":xv(Q0)?U1=`>=${z0}.0.0 <${+z0+1}.0.0-0`:xv(p1)?U1=`>=${z0}.${Q0}.0 <${z0}.${+Q0+1}.0-0`:T1?(Su("replaceTilde pr",T1),U1=`>=${z0}.${Q0}.${p1}-${T1} <${z0}.${+Q0+1}.0-0`):U1=`>=${z0}.${Q0}.${p1} <${z0}.${+Q0+1}.0-0`,Su("tilde return",U1),U1})},fy=(d0,c0)=>d0.trim().split(/\s+/).map(a0=>Fy(a0,c0)).join(" "),Fy=(d0,c0)=>{Su("caret",d0,c0);const a0=c0.loose?E0[j0.CARETLOOSE]:E0[j0.CARET],S0=c0.includePrerelease?"-0":"";return d0.replace(a0,(z0,Q0,p1,T1,U1)=>{let S1;return Su("caret",d0,z0,Q0,p1,T1,U1),xv(Q0)?S1="":xv(p1)?S1=`>=${Q0}.0.0${S0} <${+Q0+1}.0.0-0`:xv(T1)?S1=Q0==="0"?`>=${Q0}.${p1}.0${S0} <${Q0}.${+p1+1}.0-0`:`>=${Q0}.${p1}.0${S0} <${+Q0+1}.0.0-0`:U1?(Su("replaceCaret pr",U1),S1=Q0==="0"?p1==="0"?`>=${Q0}.${p1}.${T1}-${U1} <${Q0}.${p1}.${+T1+1}-0`:`>=${Q0}.${p1}.${T1}-${U1} <${Q0}.${+p1+1}.0-0`:`>=${Q0}.${p1}.${T1}-${U1} <${+Q0+1}.0.0-0`):(Su("no pr"),S1=Q0==="0"?p1==="0"?`>=${Q0}.${p1}.${T1}${S0} <${Q0}.${p1}.${+T1+1}-0`:`>=${Q0}.${p1}.${T1}${S0} <${Q0}.${+p1+1}.0-0`:`>=${Q0}.${p1}.${T1} <${+Q0+1}.0.0-0`),Su("caret return",S1),S1})},qv=(d0,c0)=>(Su("replaceXRanges",d0,c0),d0.split(/\s+/).map(a0=>Qv(a0,c0)).join(" ")),Qv=(d0,c0)=>{d0=d0.trim();const a0=c0.loose?E0[j0.XRANGELOOSE]:E0[j0.XRANGE];return d0.replace(a0,(S0,z0,Q0,p1,T1,U1)=>{Su("xRange",d0,S0,z0,Q0,p1,T1,U1);const S1=xv(Q0),n1=S1||xv(p1),V1=n1||xv(T1),J1=V1;return z0==="="&&J1&&(z0=""),U1=c0.includePrerelease?"-0":"",S1?S0=z0===">"||z0==="<"?"<0.0.0-0":"*":z0&&J1?(n1&&(p1=0),T1=0,z0===">"?(z0=">=",n1?(Q0=+Q0+1,p1=0,T1=0):(p1=+p1+1,T1=0)):z0==="<="&&(z0="<",n1?Q0=+Q0+1:p1=+p1+1),z0==="<"&&(U1="-0"),S0=`${z0+Q0}.${p1}.${T1}${U1}`):n1?S0=`>=${Q0}.0.0${U1} <${+Q0+1}.0.0-0`:V1&&(S0=`>=${Q0}.${p1}.0${U1} <${Q0}.${+p1+1}.0-0`),Su("xRange return",S0),S0})},T0=(d0,c0)=>(Su("replaceStars",d0,c0),d0.trim().replace(E0[j0.STAR],"")),X0=(d0,c0)=>(Su("replaceGTE0",d0,c0),d0.trim().replace(E0[c0.includePrerelease?j0.GTE0PRE:j0.GTE0],"")),s0=d0=>(c0,a0,S0,z0,Q0,p1,T1,U1,S1,n1,V1,J1,wv)=>`${a0=xv(S0)?"":xv(z0)?`>=${S0}.0.0${d0?"-0":""}`:xv(Q0)?`>=${S0}.${z0}.0${d0?"-0":""}`:p1?`>=${a0}`:`>=${a0}${d0?"-0":""}`} ${U1=xv(S1)?"":xv(n1)?`<${+S1+1}.0.0-0`:xv(V1)?`<${S1}.${+n1+1}.0-0`:J1?`<=${S1}.${n1}.${V1}-${J1}`:d0?`<${S1}.${n1}.${+V1+1}-0`:`<=${U1}`}`.trim(),g0=(d0,c0,a0)=>{for(let S0=0;S00){const z0=d0[S0].semver;if(z0.major===c0.major&&z0.minor===c0.minor&&z0.patch===c0.patch)return!0}return!1}return!0};return Eie}function dK(){if(Yq)return Aie;Yq=1;const yt=Symbol("SemVer ANY");class ir{static get ANY(){return yt}constructor(B0,V0){if(V0=_c(V0),B0 instanceof ir){if(B0.loose===!!V0.loose)return B0;B0=B0.value}B0=B0.trim().split(/\s+/).join(" "),l0("comparator",B0,V0),this.options=V0,this.loose=!!V0.loose,this.parse(B0),this.semver===yt?this.value="":this.value=this.operator+this.semver.version,l0("comp",this)}parse(B0){const V0=this.options.loose?mu[Mu.COMPARATORLOOSE]:mu[Mu.COMPARATOR],y1=B0.match(V0);if(!y1)throw new TypeError(`Invalid comparator: ${B0}`);this.operator=y1[1]!==void 0?y1[1]:"",this.operator==="="&&(this.operator=""),y1[2]?this.semver=new E0(y1[2],this.options.loose):this.semver=yt}toString(){return this.value}test(B0){if(l0("Comparator.test",B0,this.options.loose),this.semver===yt||B0===yt)return!0;if(typeof B0=="string")try{B0=new E0(B0,this.options)}catch{return!1}return Su(B0,this.operator,this.semver,this.options)}intersects(B0,V0){if(!(B0 instanceof ir))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""||new j0(B0.value,V0).test(this.value):B0.operator===""?B0.value===""||new j0(this.value,V0).test(B0.semver):!((V0=_c(V0)).includePrerelease&&(this.value==="<0.0.0-0"||B0.value==="<0.0.0-0")||!V0.includePrerelease&&(this.value.startsWith("<0.0.0")||B0.value.startsWith("<0.0.0"))||(!this.operator.startsWith(">")||!B0.operator.startsWith(">"))&&(!this.operator.startsWith("<")||!B0.operator.startsWith("<"))&&(this.semver.version!==B0.semver.version||!this.operator.includes("=")||!B0.operator.includes("="))&&!(Su(this.semver,"<",B0.semver,V0)&&this.operator.startsWith(">")&&B0.operator.startsWith("<"))&&!(Su(this.semver,">",B0.semver,V0)&&this.operator.startsWith("<")&&B0.operator.startsWith(">")))}}Aie=ir;const _c=kJ,{safeRe:mu,t:Mu}=lK,Su=Sfe,l0=Kq,E0=px,j0=A5();return Aie}const qme=A5();var Zq=(yt,ir,_c)=>{try{ir=new qme(ir,_c)}catch{return!1}return ir.test(yt)};const Wme=A5(),Mfe=px,Gme=A5(),_ie=px,Yme=A5(),Jq=px,Zme=A5(),Ife=Gq,Jme=A5(),Xme=px,Ofe=dK(),{ANY:Qme}=Ofe,Pfe=A5(),ege=Zq,jfe=Gq,Xq=yie,BJ=wie,Nfe=OJ;var DJ=(yt,ir,_c,mu)=>{let Mu,Su,l0,E0,j0;switch(yt=new Xme(yt,mu),ir=new Pfe(ir,mu),_c){case">":Mu=jfe,Su=BJ,l0=Xq,E0=">",j0=">=";break;case"<":Mu=Xq,Su=Nfe,l0=jfe,E0="<",j0="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ege(yt,ir,mu))return!1;for(let M0=0;M0{v1.semver===Qme&&(v1=new Ofe(">=0.0.0")),V0=V0||v1,y1=y1||v1,Mu(v1.semver,V0.semver,mu)?V0=v1:l0(v1.semver,y1.semver,mu)&&(y1=v1)}),V0.operator===E0||V0.operator===j0||(!y1.operator||y1.operator===E0)&&Su(yt,y1.semver)||y1.operator===j0&&l0(yt,y1.semver))return!1}return!0};const Sie=DJ,Lfe=DJ,FJ=A5(),Bfe=Zq,xie=cT,kie=A5(),Qq=dK(),{ANY:UJ}=Qq,eW=Zq,Cie=cT,_5=[new Qq(">=0.0.0-0")],tW=[new Qq(">=0.0.0")],tge=(yt,ir,_c)=>{if(yt===ir)return!0;if(yt.length===1&&yt[0].semver===UJ){if(ir.length===1&&ir[0].semver===UJ)return!0;yt=_c.includePrerelease?_5:tW}if(ir.length===1&&ir[0].semver===UJ){if(_c.includePrerelease)return!0;ir=tW}const mu=new Set;let Mu,Su,l0,E0,j0,M0,B0;for(const v1 of yt)v1.operator===">"||v1.operator===">="?Mu=rW(Mu,v1,_c):v1.operator==="<"||v1.operator==="<="?Su=Dfe(Su,v1,_c):mu.add(v1.semver);if(mu.size>1||Mu&&Su&&(l0=Cie(Mu.semver,Su.semver,_c),l0>0||l0===0&&(Mu.operator!==">="||Su.operator!=="<=")))return null;for(const v1 of mu){if(Mu&&!eW(v1,String(Mu),_c)||Su&&!eW(v1,String(Su),_c))return null;for(const F1 of ir)if(!eW(v1,String(F1),_c))return!1;return!0}let V0=!(!Su||_c.includePrerelease||!Su.semver.prerelease.length)&&Su.semver,y1=!(!Mu||_c.includePrerelease||!Mu.semver.prerelease.length)&&Mu.semver;V0&&V0.prerelease.length===1&&Su.operator==="<"&&V0.prerelease[0]===0&&(V0=!1);for(const v1 of ir){if(B0=B0||v1.operator===">"||v1.operator===">=",M0=M0||v1.operator==="<"||v1.operator==="<=",Mu){if(y1&&v1.semver.prerelease&&v1.semver.prerelease.length&&v1.semver.major===y1.major&&v1.semver.minor===y1.minor&&v1.semver.patch===y1.patch&&(y1=!1),v1.operator===">"||v1.operator===">="){if(E0=rW(Mu,v1,_c),E0===v1&&E0!==Mu)return!1}else if(Mu.operator===">="&&!eW(Mu.semver,String(v1),_c))return!1}if(Su){if(V0&&v1.semver.prerelease&&v1.semver.prerelease.length&&v1.semver.major===V0.major&&v1.semver.minor===V0.minor&&v1.semver.patch===V0.patch&&(V0=!1),v1.operator==="<"||v1.operator==="<="){if(j0=Dfe(Su,v1,_c),j0===v1&&j0!==Su)return!1}else if(Su.operator==="<="&&!eW(Su.semver,String(v1),_c))return!1}if(!v1.operator&&(Su||Mu)&&l0!==0)return!1}return!(Mu&&M0&&!Su&&l0!==0||Su&&B0&&!Mu&&l0!==0||y1||V0)},rW=(yt,ir,_c)=>{if(!yt)return ir;const mu=Cie(yt.semver,ir.semver,_c);return mu>0?yt:mu<0||ir.operator===">"&&yt.operator===">="?ir:yt},Dfe=(yt,ir,_c)=>{if(!yt)return ir;const mu=Cie(yt.semver,ir.semver,_c);return mu<0?yt:mu>0||ir.operator==="<"&&yt.operator==="<="?ir:yt},Tie=lK,Ffe=Hq,rge=px,Ufe=pie;var nge={parse:KB,valid:(yt,ir)=>{const _c=TJ(yt,ir);return _c?_c.version:null},clean:(yt,ir)=>{const _c=RJ(yt.trim().replace(/^[=v]+/,""),ir);return _c?_c.version:null},inc:(yt,ir,_c,mu,Mu)=>{typeof _c=="string"&&(Mu=mu,mu=_c,_c=void 0);try{return new cK(yt instanceof cK?yt.version:yt,_c).inc(ir,mu,Mu).version}catch{return null}},diff:(yt,ir)=>{const _c=wfe(yt,null,!0),mu=wfe(ir,null,!0),Mu=_c.compare(mu);if(Mu===0)return null;const Su=Mu>0,l0=Su?_c:mu,E0=Su?mu:_c,j0=!!l0.prerelease.length;if(E0.prerelease.length&&!j0)return E0.patch||E0.minor?l0.patch?"patch":l0.minor?"minor":"major":"major";const M0=j0?"pre":"";return _c.major!==mu.major?M0+"major":_c.minor!==mu.minor?M0+"minor":_c.patch!==mu.patch?M0+"patch":"prerelease"},major:(yt,ir)=>new Pme(yt,ir).major,minor:(yt,ir)=>new mie(yt,ir).minor,patch:(yt,ir)=>new $fe(yt,ir).patch,prerelease:(yt,ir)=>{const _c=Efe(yt,ir);return _c&&_c.prerelease.length?_c.prerelease:null},compare:cT,rcompare:(yt,ir,_c)=>Afe(ir,yt,_c),compareLoose:(yt,ir)=>MJ(yt,ir,!0),compareBuild:IJ,sort:(yt,ir)=>yt.sort((_c,mu)=>jme(_c,mu,ir)),rsort:(yt,ir)=>yt.sort((_c,mu)=>uK(mu,_c,ir)),gt:Gq,lt:yie,eq:_fe,neq:bie,gte:OJ,lte:wie,cmp:Sfe,coerce:(yt,ir)=>{if(yt instanceof xfe)return yt;if(typeof yt=="number"&&(yt=String(yt)),typeof yt!="string")return null;let _c=null;if((ir=ir||{}).rtl){let mu;for(;(mu=PJ[jJ.COERCERTL].exec(yt))&&(!_c||_c.index+_c[0].length!==yt.length);)_c&&mu.index+mu[0].length===_c.index+_c[0].length||(_c=mu),PJ[jJ.COERCERTL].lastIndex=mu.index+mu[1].length+mu[2].length;PJ[jJ.COERCERTL].lastIndex=-1}else _c=yt.match(PJ[jJ.COERCE]);return _c===null?null:E5(`${_c[2]}.${_c[3]||"0"}.${_c[4]||"0"}`,ir)},Comparator:dK(),Range:A5(),satisfies:Zq,toComparators:(yt,ir)=>new Wme(yt,ir).set.map(_c=>_c.map(mu=>mu.value).join(" ").trim().split(" ")),maxSatisfying:(yt,ir,_c)=>{let mu=null,Mu=null,Su=null;try{Su=new Gme(ir,_c)}catch{return null}return yt.forEach(l0=>{Su.test(l0)&&(mu&&Mu.compare(l0)!==-1||(mu=l0,Mu=new Mfe(mu,_c)))}),mu},minSatisfying:(yt,ir,_c)=>{let mu=null,Mu=null,Su=null;try{Su=new Yme(ir,_c)}catch{return null}return yt.forEach(l0=>{Su.test(l0)&&(mu&&Mu.compare(l0)!==1||(mu=l0,Mu=new _ie(mu,_c)))}),mu},minVersion:(yt,ir)=>{yt=new Zme(yt,ir);let _c=new Jq("0.0.0");if(yt.test(_c)||(_c=new Jq("0.0.0-0"),yt.test(_c)))return _c;_c=null;for(let mu=0;mu{const E0=new Jq(l0.semver.version);switch(l0.operator){case">":E0.prerelease.length===0?E0.patch++:E0.prerelease.push(0),E0.raw=E0.format();case"":case">=":Su&&!Ife(E0,Su)||(Su=E0);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${l0.operator}`)}}),!Su||_c&&!Ife(_c,Su)||(_c=Su)}return _c&&yt.test(_c)?_c:null},validRange:(yt,ir)=>{try{return new Jme(yt,ir).range||"*"}catch{return null}},outside:DJ,gtr:(yt,ir,_c)=>Sie(yt,ir,">",_c),ltr:(yt,ir,_c)=>Lfe(yt,ir,"<",_c),intersects:(yt,ir,_c)=>(yt=new FJ(yt,_c),ir=new FJ(ir,_c),yt.intersects(ir,_c)),simplifyRange:(yt,ir,_c)=>{const mu=[];let Mu=null,Su=null;const l0=yt.sort((B0,V0)=>xie(B0,V0,_c));for(const B0 of l0)Bfe(B0,ir,_c)?(Su=B0,Mu||(Mu=B0)):(Su&&mu.push([Mu,Su]),Su=null,Mu=null);Mu&&mu.push([Mu,null]);const E0=[];for(const[B0,V0]of mu)B0===V0?E0.push(B0):V0||B0!==l0[0]?V0?B0===l0[0]?E0.push(`<=${V0}`):E0.push(`${B0} - ${V0}`):E0.push(`>=${B0}`):E0.push("*");const j0=E0.join(" || "),M0=typeof ir.raw=="string"?ir.raw:String(ir);return j0.length{if(yt===ir)return!0;yt=new kie(yt,_c),ir=new kie(ir,_c);let mu=!1;e:for(const Mu of yt.set){for(const Su of ir.set){const l0=tge(Mu,Su,_c);if(mu=mu||l0!==null,l0)continue e}if(mu)return!1}return!0},SemVer:rge,re:Tie.re,src:Tie.src,tokens:Tie.t,SEMVER_SPEC_VERSION:Ffe.SEMVER_SPEC_VERSION,RELEASE_TYPES:Ffe.RELEASE_TYPES,compareIdentifiers:Ufe.compareIdentifiers,rcompareIdentifiers:Ufe.rcompareIdentifiers};Object.defineProperty(UM,"__esModule",{value:!0});var zfe=DM,nW=nge,VB=HN,Rie=VB.refine.call(void 0,VB.string.call(void 0),"Version",yt=>nW.valid.call(void 0,yt)!==null||`Expected SemVer version, got "${yt}"`),zJ=VB.refine.call(void 0,VB.string.call(void 0),"Version range",yt=>nW.validRange.call(void 0,yt)!==null||`Expected SemVer range, got "${yt}"`);UM.VersionStruct=Rie,UM.VersionRangeStruct=zJ,UM.isValidSemVerVersion=function(yt){return VB.is.call(void 0,yt,Rie)},UM.isValidSemVerRange=function(yt){return VB.is.call(void 0,yt,zJ)},UM.assertIsSemVerVersion=function(yt){zfe.assertStruct.call(void 0,yt,Rie)},UM.assertIsSemVerRange=function(yt){zfe.assertStruct.call(void 0,yt,zJ)},UM.gtVersion=function(yt,ir){return nW.gt.call(void 0,yt,ir)},UM.gtRange=function(yt,ir){return nW.gtr.call(void 0,yt,ir)},UM.satisfiesVersionRange=function(yt,ir){return nW.satisfies.call(void 0,yt,ir,{includePrerelease:!0})};var WE={};Object.defineProperty(WE,"__esModule",{value:!0});var WN=DM,ige=I7,oE=HN,mU=yt=>oE.object.call(void 0,yt);function Hfe({path:yt,branch:ir}){const _c=yt[yt.length-1];return ige.hasProperty.call(void 0,ir[ir.length-2],_c)}function iW(yt){return new oE.Struct({...yt,type:`optional ${yt.type}`,validator:(ir,_c)=>!Hfe(_c)||yt.validator(ir,_c),refiner:(ir,_c)=>!Hfe(_c)||yt.refiner(ir,_c)})}var oW=oE.union.call(void 0,[oE.literal.call(void 0,null),oE.boolean.call(void 0),oE.define.call(void 0,"finite number",yt=>oE.is.call(void 0,yt,oE.number.call(void 0))&&Number.isFinite(yt)),oE.string.call(void 0),oE.array.call(void 0,oE.lazy.call(void 0,()=>oW)),oE.record.call(void 0,oE.string.call(void 0),oE.lazy.call(void 0,()=>oW))]),qB=oE.coerce.call(void 0,oW,oE.any.call(void 0),yt=>(WN.assertStruct.call(void 0,yt,oW),JSON.parse(JSON.stringify(yt,(ir,_c)=>{if(ir!=="__proto__"&&ir!=="constructor")return _c}))));function Mie(yt){return oE.create.call(void 0,yt,qB)}var hK=oE.literal.call(void 0,"2.0"),aW=oE.nullable.call(void 0,oE.union.call(void 0,[oE.number.call(void 0),oE.string.call(void 0)])),gU=mU({code:oE.integer.call(void 0),message:oE.string.call(void 0),data:iW(qB),stack:iW(oE.string.call(void 0))}),Iie=oE.union.call(void 0,[oE.record.call(void 0,oE.string.call(void 0),qB),oE.array.call(void 0,qB)]),Oie=mU({id:aW,jsonrpc:hK,method:oE.string.call(void 0),params:iW(Iie)}),Pie=mU({jsonrpc:hK,method:oE.string.call(void 0),params:iW(Iie)}),jie=oE.object.call(void 0,{id:aW,jsonrpc:hK,result:oE.optional.call(void 0,oE.unknown.call(void 0)),error:oE.optional.call(void 0,gU)}),sW=mU({id:aW,jsonrpc:hK,result:qB}),HJ=mU({id:aW,jsonrpc:hK,error:gU}),Nie=oE.union.call(void 0,[sW,HJ]);WE.object=mU,WE.exactOptional=iW,WE.UnsafeJsonStruct=oW,WE.JsonStruct=qB,WE.isValidJson=function(yt){try{return Mie(yt),!0}catch{return!1}},WE.getSafeJson=Mie,WE.getJsonSize=function(yt){WN.assertStruct.call(void 0,yt,qB,"Invalid JSON value");const ir=JSON.stringify(yt);return new TextEncoder().encode(ir).byteLength},WE.jsonrpc2="2.0",WE.JsonRpcVersionStruct=hK,WE.JsonRpcIdStruct=aW,WE.JsonRpcErrorStruct=gU,WE.JsonRpcParamsStruct=Iie,WE.JsonRpcRequestStruct=Oie,WE.JsonRpcNotificationStruct=Pie,WE.isJsonRpcNotification=function(yt){return oE.is.call(void 0,yt,Pie)},WE.assertIsJsonRpcNotification=function(yt,ir){WN.assertStruct.call(void 0,yt,Pie,"Invalid JSON-RPC notification",ir)},WE.isJsonRpcRequest=function(yt){return oE.is.call(void 0,yt,Oie)},WE.assertIsJsonRpcRequest=function(yt,ir){WN.assertStruct.call(void 0,yt,Oie,"Invalid JSON-RPC request",ir)},WE.PendingJsonRpcResponseStruct=jie,WE.JsonRpcSuccessStruct=sW,WE.JsonRpcFailureStruct=HJ,WE.JsonRpcResponseStruct=Nie,WE.isPendingJsonRpcResponse=function(yt){return oE.is.call(void 0,yt,jie)},WE.assertIsPendingJsonRpcResponse=function(yt,ir){WN.assertStruct.call(void 0,yt,jie,"Invalid pending JSON-RPC response",ir)},WE.isJsonRpcResponse=function(yt){return oE.is.call(void 0,yt,Nie)},WE.assertIsJsonRpcResponse=function(yt,ir){WN.assertStruct.call(void 0,yt,Nie,"Invalid JSON-RPC response",ir)},WE.isJsonRpcSuccess=function(yt){return oE.is.call(void 0,yt,sW)},WE.assertIsJsonRpcSuccess=function(yt,ir){WN.assertStruct.call(void 0,yt,sW,"Invalid JSON-RPC success response",ir)},WE.isJsonRpcFailure=function(yt){return oE.is.call(void 0,yt,HJ)},WE.assertIsJsonRpcFailure=function(yt,ir){WN.assertStruct.call(void 0,yt,HJ,"Invalid JSON-RPC failure response",ir)},WE.isJsonRpcError=function(yt){return oE.is.call(void 0,yt,gU)},WE.assertIsJsonRpcError=function(yt,ir){WN.assertStruct.call(void 0,yt,gU,"Invalid JSON-RPC error",ir)},WE.getJsonRpcIdValidator=function(yt){const{permitEmptyString:ir,permitFractions:_c,permitNull:mu}={permitEmptyString:!0,permitFractions:!1,permitNull:!0,...yt};return Mu=>!!(typeof Mu=="number"&&(_c||Number.isInteger(Mu))||typeof Mu=="string"&&(ir||Mu.length>0)||mu&&Mu===null)};var Lie,Bie,pK={},lW={exports:{}},cW=function(yt){function ir(Mu){let Su,l0,E0,j0=null;function M0(...B0){if(!M0.enabled)return;const V0=M0,y1=Number(new Date),v1=y1-(Su||y1);V0.diff=v1,V0.prev=Su,V0.curr=y1,Su=y1,B0[0]=ir.coerce(B0[0]),typeof B0[0]!="string"&&B0.unshift("%O");let F1=0;B0[0]=B0[0].replace(/%([a-zA-Z%])/g,(ov,bv)=>{if(ov==="%%")return"%";F1++;const gv=ir.formatters[bv];if(typeof gv=="function"){const xv=B0[F1];ov=gv.call(V0,xv),B0.splice(F1,1),F1--}return ov}),ir.formatArgs.call(V0,B0),(V0.log||ir.log).apply(V0,B0)}return M0.namespace=Mu,M0.useColors=ir.useColors(),M0.color=ir.selectColor(Mu),M0.extend=_c,M0.destroy=ir.destroy,Object.defineProperty(M0,"enabled",{enumerable:!0,configurable:!1,get:()=>j0!==null?j0:(l0!==ir.namespaces&&(l0=ir.namespaces,E0=ir.enabled(Mu)),E0),set:B0=>{j0=B0}}),typeof ir.init=="function"&&ir.init(M0),M0}function _c(Mu,Su){const l0=ir(this.namespace+(Su===void 0?":":Su)+Mu);return l0.log=this.log,l0}function mu(Mu){return Mu.toString().substring(2,Mu.toString().length-2).replace(/\.\*\?$/,"*")}return ir.debug=ir,ir.default=ir,ir.coerce=function(Mu){return Mu instanceof Error?Mu.stack||Mu.message:Mu},ir.disable=function(){const Mu=[...ir.names.map(mu),...ir.skips.map(mu).map(Su=>"-"+Su)].join(",");return ir.enable(""),Mu},ir.enable=function(Mu){let Su;ir.save(Mu),ir.namespaces=Mu,ir.names=[],ir.skips=[];const l0=(typeof Mu=="string"?Mu:"").split(/[\s,]+/),E0=l0.length;for(Su=0;Su=1.5*V0;return Math.round(M0/V0)+" "+y1+(v1?"s":"")}return Lie=function(M0,B0){B0=B0||{};var V0=typeof M0;if(V0==="string"&&M0.length>0)return function(y1){if(!((y1=String(y1)).length>100)){var v1=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(y1);if(v1){var F1=parseFloat(v1[1]);switch((v1[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*F1;case"weeks":case"week":case"w":return 6048e5*F1;case"days":case"day":case"d":return F1*E0;case"hours":case"hour":case"hrs":case"hr":case"h":return F1*l0;case"minutes":case"minute":case"mins":case"min":case"m":return F1*Su;case"seconds":case"second":case"secs":case"sec":case"s":return F1*Mu;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return F1;default:return}}}}(M0);if(V0==="number"&&isFinite(M0))return B0.long?function(y1){var v1=Math.abs(y1);return v1>=E0?j0(y1,v1,E0,"day"):v1>=l0?j0(y1,v1,l0,"hour"):v1>=Su?j0(y1,v1,Su,"minute"):v1>=Mu?j0(y1,v1,Mu,"second"):y1+" ms"}(M0):function(y1){var v1=Math.abs(y1);return v1>=E0?Math.round(y1/E0)+"d":v1>=l0?Math.round(y1/l0)+"h":v1>=Su?Math.round(y1/Su)+"m":v1>=Mu?Math.round(y1/Mu)+"s":y1+"ms"}(M0);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(M0))},Lie}(),ir.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(yt).forEach(Mu=>{ir[Mu]=yt[Mu]}),ir.names=[],ir.skips=[],ir.formatters={},ir.selectColor=function(Mu){let Su=0;for(let l0=0;l0{E0!=="%%"&&(Su++,E0==="%c"&&(l0=Su))}),mu.splice(l0,0,Mu)},ir.save=function(mu){try{mu?ir.storage.setItem("debug",mu):ir.storage.removeItem("debug")}catch{}},ir.load=function(){let mu;try{mu=ir.storage.getItem("debug")}catch{}return!mu&&Kv!==void 0&&"env"in Kv&&(mu=Kv.env.DEBUG),mu},ir.useColors=function(){return!(typeof window>"u"||!window.process||window.process.type!=="renderer"&&!window.process.__nwjs)||(typeof navigator>"u"||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&(typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},ir.storage=function(){try{return localStorage}catch{}}(),ir.destroy=(()=>{let mu=!1;return()=>{mu||(mu=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),ir.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],ir.log=console.debug||console.log||(()=>{}),yt.exports=cW(ir);const{formatters:_c}=yt.exports;_c.j=function(mu){try{return JSON.stringify(mu)}catch(Mu){return"[UnexpectedJSONParseError]: "+Mu.message}}})(lW,lW.exports);var KJ=lW.exports,VJ=d(KJ);Object.defineProperty(pK,"__esModule",{value:!0});var uW,oge=((uW=KJ)&&uW.__esModule?uW:{default:uW}).default.call(void 0,"metamask");pK.createProjectLogger=function(yt){return oge.extend(yt)},pK.createModuleLogger=function(yt,ir){return yt.extend(ir)};var WS={};function Die(yt){let ir,_c=yt[0],mu=1;for(;mu_c.call(ir,...l0)),ir=void 0)}return _c}Object.defineProperty(WS,"__esModule",{value:!0});var hC=HN,fW=/^(?[-a-z0-9]{3,8}):(?[-_a-zA-Z0-9]{1,32})$/u,Fie=/^[-a-z0-9]{3,8}$/u,Kfe=/^[-_a-zA-Z0-9]{1,32}$/u,qJ=/^(?(?[-a-z0-9]{3,8}):(?[-_a-zA-Z0-9]{1,32})):(?[-.%a-zA-Z0-9]{1,128})$/u,Vfe=/^[-.%a-zA-Z0-9]{1,128}$/u,qfe=hC.pattern.call(void 0,hC.string.call(void 0),fW),Uie=hC.pattern.call(void 0,hC.string.call(void 0),Fie),mK=hC.pattern.call(void 0,hC.string.call(void 0),Kfe),vU=hC.pattern.call(void 0,hC.string.call(void 0),qJ),WJ=hC.pattern.call(void 0,hC.string.call(void 0),Vfe);WS.CAIP_CHAIN_ID_REGEX=fW,WS.CAIP_NAMESPACE_REGEX=Fie,WS.CAIP_REFERENCE_REGEX=Kfe,WS.CAIP_ACCOUNT_ID_REGEX=qJ,WS.CAIP_ACCOUNT_ADDRESS_REGEX=Vfe,WS.CaipChainIdStruct=qfe,WS.CaipNamespaceStruct=Uie,WS.CaipReferenceStruct=mK,WS.CaipAccountIdStruct=vU,WS.CaipAccountAddressStruct=WJ,WS.isCaipChainId=function(yt){return hC.is.call(void 0,yt,qfe)},WS.isCaipNamespace=function(yt){return hC.is.call(void 0,yt,Uie)},WS.isCaipReference=function(yt){return hC.is.call(void 0,yt,mK)},WS.isCaipAccountId=function(yt){return hC.is.call(void 0,yt,vU)},WS.isCaipAccountAddress=function(yt){return hC.is.call(void 0,yt,WJ)},WS.parseCaipChainId=function(yt){const ir=fW.exec(yt);if(!Die([ir,"optionalAccess",_c=>_c.groups]))throw new Error("Invalid CAIP chain ID.");return{namespace:ir.groups.namespace,reference:ir.groups.reference}},WS.parseCaipAccountId=function(yt){const ir=qJ.exec(yt);if(!Die([ir,"optionalAccess",_c=>_c.groups]))throw new Error("Invalid CAIP account ID.");return{address:ir.groups.accountAddress,chainId:ir.groups.chainId,chain:{namespace:ir.groups.namespace,reference:ir.groups.reference}}};var dW={},wE={};function JO(yt,ir){return yt??ir()}Object.defineProperty(wE,"__esModule",{value:!0});var age=DM,aE=HN;wE.base64=(yt,ir={})=>{const _c=JO(ir.paddingRequired,()=>!1),mu=JO(ir.characterSet,()=>"base64");let Mu,Su;return mu==="base64"?Mu=String.raw`[A-Za-z0-9+\/]`:(age.assert.call(void 0,mu==="base64url"),Mu=String.raw`[-_A-Za-z0-9]`),Su=_c?new RegExp(`^(?:${Mu}{4})*(?:${Mu}{3}=|${Mu}{2}==)?$`,"u"):new RegExp(`^(?:${Mu}{4})*(?:${Mu}{2,3}|${Mu}{3}=|${Mu}{2}==)?$`,"u"),aE.pattern.call(void 0,yt,Su)},Object.defineProperty(dW,"__esModule",{value:!0});var gK=wE,zie=HN,hW=zie.size.call(void 0,gK.base64.call(void 0,zie.string.call(void 0),{paddingRequired:!0}),44,44);dW.ChecksumStruct=hW;var XO={};Object.defineProperty(XO,"__esModule",{value:!0});var HM=$$,Wfe=DM,QA=HN,vK=QA.union.call(void 0,[QA.number.call(void 0),QA.bigint.call(void 0),QA.string.call(void 0),HM.StrictHexStruct]),pW=QA.coerce.call(void 0,QA.number.call(void 0),vK,Number),Hie=QA.coerce.call(void 0,QA.bigint.call(void 0),vK,BigInt);QA.union.call(void 0,[HM.StrictHexStruct,QA.instance.call(void 0,Uint8Array)]);var Kie=QA.coerce.call(void 0,QA.instance.call(void 0,Uint8Array),QA.union.call(void 0,[HM.StrictHexStruct]),HM.hexToBytes),Vie=QA.coerce.call(void 0,HM.StrictHexStruct,QA.instance.call(void 0,Uint8Array),HM.bytesToHex);XO.createNumber=function(yt){try{const ir=QA.create.call(void 0,yt,pW);return Wfe.assert.call(void 0,Number.isFinite(ir),`Expected a number-like value, got "${yt}".`),ir}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a number-like value, got "${yt}".`):ir}},XO.createBigInt=function(yt){try{return QA.create.call(void 0,yt,Hie)}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a number-like value, got "${String(ir.value)}".`):ir}},XO.createBytes=function(yt){if(typeof yt=="string"&&yt.toLowerCase()==="0x")return new Uint8Array;try{return QA.create.call(void 0,yt,Kie)}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a bytes-like value, got "${String(ir.value)}".`):ir}},XO.createHex=function(yt){if(yt instanceof Uint8Array&&yt.length===0||typeof yt=="string"&&yt.toLowerCase()==="0x")return"0x";try{return QA.create.call(void 0,yt,Vie)}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a bytes-like value, got "${String(ir.value)}".`):ir}};var yK={},WB={};Object.defineProperty(WB,"__esModule",{value:!0});var mW=(yt,ir,_c)=>{if(!ir.has(yt))throw TypeError("Cannot "+_c)};WB.__privateGet=(yt,ir,_c)=>(mW(yt,ir,"read from private field"),_c?_c.call(yt):ir.get(yt)),WB.__privateAdd=(yt,ir,_c)=>{if(ir.has(yt))throw TypeError("Cannot add the same private member more than once");ir instanceof WeakSet?ir.add(yt):ir.set(yt,_c)},WB.__privateSet=(yt,ir,_c,mu)=>(mW(yt,ir,"write to private field"),mu?mu.call(yt,_c):ir.set(yt,_c),_c),Object.defineProperty(yK,"__esModule",{value:!0});var RR,KM,GS=WB,bK=class{constructor(yt){GS.__privateAdd.call(void 0,this,RR,void 0),GS.__privateSet.call(void 0,this,RR,new Map(yt)),Object.freeze(this)}get size(){return GS.__privateGet.call(void 0,this,RR).size}[Symbol.iterator](){return GS.__privateGet.call(void 0,this,RR)[Symbol.iterator]()}entries(){return GS.__privateGet.call(void 0,this,RR).entries()}forEach(yt,ir){return GS.__privateGet.call(void 0,this,RR).forEach((_c,mu,Mu)=>yt.call(ir,_c,mu,this))}get(yt){return GS.__privateGet.call(void 0,this,RR).get(yt)}has(yt){return GS.__privateGet.call(void 0,this,RR).has(yt)}keys(){return GS.__privateGet.call(void 0,this,RR).keys()}values(){return GS.__privateGet.call(void 0,this,RR).values()}toString(){return`FrozenMap(${this.size}) {${this.size>0?` ${[...this.entries()].map(([yt,ir])=>`${String(yt)} => ${String(ir)}`).join(", ")} `:""}}`}};RR=new WeakMap;var gW=class{constructor(yt){GS.__privateAdd.call(void 0,this,KM,void 0),GS.__privateSet.call(void 0,this,KM,new Set(yt)),Object.freeze(this)}get size(){return GS.__privateGet.call(void 0,this,KM).size}[Symbol.iterator](){return GS.__privateGet.call(void 0,this,KM)[Symbol.iterator]()}entries(){return GS.__privateGet.call(void 0,this,KM).entries()}forEach(yt,ir){return GS.__privateGet.call(void 0,this,KM).forEach((_c,mu,Mu)=>yt.call(ir,_c,mu,this))}has(yt){return GS.__privateGet.call(void 0,this,KM).has(yt)}keys(){return GS.__privateGet.call(void 0,this,KM).keys()}values(){return GS.__privateGet.call(void 0,this,KM).values()}toString(){return`FrozenSet(${this.size}) {${this.size>0?` ${[...this.values()].map(yt=>String(yt)).join(", ")} `:""}}`}};KM=new WeakMap,Object.freeze(bK),Object.freeze(bK.prototype),Object.freeze(gW),Object.freeze(gW.prototype),yK.FrozenMap=bK,yK.FrozenSet=gW,Object.defineProperty(O2,"__esModule",{value:!0});var GJ=KH,sge=SJ,YJ=zB,VM=UM,jE=WE,Gfe=pK,GE=WS,Yfe=dW,pC=wE,wK=XO,wA=$$,vW=DM,yU=YO,qM=I7,qie=yK;O2.AssertionError=vW.AssertionError,O2.CAIP_ACCOUNT_ADDRESS_REGEX=GE.CAIP_ACCOUNT_ADDRESS_REGEX,O2.CAIP_ACCOUNT_ID_REGEX=GE.CAIP_ACCOUNT_ID_REGEX,O2.CAIP_CHAIN_ID_REGEX=GE.CAIP_CHAIN_ID_REGEX,O2.CAIP_NAMESPACE_REGEX=GE.CAIP_NAMESPACE_REGEX,O2.CAIP_REFERENCE_REGEX=GE.CAIP_REFERENCE_REGEX,O2.CaipAccountAddressStruct=GE.CaipAccountAddressStruct,O2.CaipAccountIdStruct=GE.CaipAccountIdStruct,O2.CaipChainIdStruct=GE.CaipChainIdStruct,O2.CaipNamespaceStruct=GE.CaipNamespaceStruct,O2.CaipReferenceStruct=GE.CaipReferenceStruct,O2.ChecksumStruct=Yfe.ChecksumStruct,O2.Duration=YJ.Duration,O2.ESCAPE_CHARACTERS_REGEXP=qM.ESCAPE_CHARACTERS_REGEXP,O2.FrozenMap=qie.FrozenMap,O2.FrozenSet=qie.FrozenSet,O2.HexAddressStruct=wA.HexAddressStruct,O2.HexChecksumAddressStruct=wA.HexChecksumAddressStruct,O2.HexStruct=wA.HexStruct,O2.JsonRpcErrorStruct=jE.JsonRpcErrorStruct,O2.JsonRpcFailureStruct=jE.JsonRpcFailureStruct,O2.JsonRpcIdStruct=jE.JsonRpcIdStruct,O2.JsonRpcNotificationStruct=jE.JsonRpcNotificationStruct,O2.JsonRpcParamsStruct=jE.JsonRpcParamsStruct,O2.JsonRpcRequestStruct=jE.JsonRpcRequestStruct,O2.JsonRpcResponseStruct=jE.JsonRpcResponseStruct,O2.JsonRpcSuccessStruct=jE.JsonRpcSuccessStruct,O2.JsonRpcVersionStruct=jE.JsonRpcVersionStruct,O2.JsonSize=qM.JsonSize,O2.JsonStruct=jE.JsonStruct,O2.PendingJsonRpcResponseStruct=jE.PendingJsonRpcResponseStruct,O2.StrictHexStruct=wA.StrictHexStruct,O2.UnsafeJsonStruct=jE.UnsafeJsonStruct,O2.VersionRangeStruct=VM.VersionRangeStruct,O2.VersionStruct=VM.VersionStruct,O2.add0x=wA.add0x,O2.assert=vW.assert,O2.assertExhaustive=vW.assertExhaustive,O2.assertIsBytes=wA.assertIsBytes,O2.assertIsHexString=wA.assertIsHexString,O2.assertIsJsonRpcError=jE.assertIsJsonRpcError,O2.assertIsJsonRpcFailure=jE.assertIsJsonRpcFailure,O2.assertIsJsonRpcNotification=jE.assertIsJsonRpcNotification,O2.assertIsJsonRpcRequest=jE.assertIsJsonRpcRequest,O2.assertIsJsonRpcResponse=jE.assertIsJsonRpcResponse,O2.assertIsJsonRpcSuccess=jE.assertIsJsonRpcSuccess,O2.assertIsPendingJsonRpcResponse=jE.assertIsPendingJsonRpcResponse,O2.assertIsSemVerRange=VM.assertIsSemVerRange,O2.assertIsSemVerVersion=VM.assertIsSemVerVersion,O2.assertIsStrictHexString=wA.assertIsStrictHexString,O2.assertStruct=vW.assertStruct,O2.base64=pC.base64,O2.base64ToBytes=wA.base64ToBytes,O2.bigIntToBytes=wA.bigIntToBytes,O2.bigIntToHex=GJ.bigIntToHex,O2.bytesToBase64=wA.bytesToBase64,O2.bytesToBigInt=wA.bytesToBigInt,O2.bytesToHex=wA.bytesToHex,O2.bytesToNumber=wA.bytesToNumber,O2.bytesToSignedBigInt=wA.bytesToSignedBigInt,O2.bytesToString=wA.bytesToString,O2.calculateNumberSize=qM.calculateNumberSize,O2.calculateStringSize=qM.calculateStringSize,O2.concatBytes=wA.concatBytes,O2.createBigInt=wK.createBigInt,O2.createBytes=wK.createBytes,O2.createDataView=wA.createDataView,O2.createDeferredPromise=sge.createDeferredPromise,O2.createHex=wK.createHex,O2.createModuleLogger=Gfe.createModuleLogger,O2.createNumber=wK.createNumber,O2.createProjectLogger=Gfe.createProjectLogger,O2.exactOptional=jE.exactOptional,O2.getChecksumAddress=wA.getChecksumAddress,O2.getErrorMessage=yU.getErrorMessage,O2.getJsonRpcIdValidator=jE.getJsonRpcIdValidator,O2.getJsonSize=jE.getJsonSize,O2.getKnownPropertyNames=qM.getKnownPropertyNames,O2.getSafeJson=jE.getSafeJson,O2.gtRange=VM.gtRange,O2.gtVersion=VM.gtVersion,O2.hasProperty=qM.hasProperty,O2.hexToBigInt=GJ.hexToBigInt,O2.hexToBytes=wA.hexToBytes,O2.hexToNumber=GJ.hexToNumber,O2.inMilliseconds=YJ.inMilliseconds,O2.isASCII=qM.isASCII,O2.isBytes=wA.isBytes,O2.isCaipAccountAddress=GE.isCaipAccountAddress,O2.isCaipAccountId=GE.isCaipAccountId,O2.isCaipChainId=GE.isCaipChainId,O2.isCaipNamespace=GE.isCaipNamespace,O2.isCaipReference=GE.isCaipReference,O2.isErrorWithCode=yU.isErrorWithCode,O2.isErrorWithMessage=yU.isErrorWithMessage,O2.isErrorWithStack=yU.isErrorWithStack,O2.isHexString=wA.isHexString,O2.isJsonRpcError=jE.isJsonRpcError,O2.isJsonRpcFailure=jE.isJsonRpcFailure,O2.isJsonRpcNotification=jE.isJsonRpcNotification,O2.isJsonRpcRequest=jE.isJsonRpcRequest,O2.isJsonRpcResponse=jE.isJsonRpcResponse,O2.isJsonRpcSuccess=jE.isJsonRpcSuccess,O2.isNonEmptyArray=qM.isNonEmptyArray,O2.isNullOrUndefined=qM.isNullOrUndefined,O2.isObject=qM.isObject,O2.isPendingJsonRpcResponse=jE.isPendingJsonRpcResponse,O2.isPlainObject=qM.isPlainObject,O2.isStrictHexString=wA.isStrictHexString,O2.isValidChecksumAddress=wA.isValidChecksumAddress,O2.isValidHexAddress=wA.isValidHexAddress,O2.isValidJson=jE.isValidJson,O2.isValidSemVerRange=VM.isValidSemVerRange,O2.isValidSemVerVersion=VM.isValidSemVerVersion,O2.jsonrpc2=jE.jsonrpc2,O2.numberToBytes=wA.numberToBytes,O2.numberToHex=GJ.numberToHex,O2.object=jE.object,O2.parseCaipAccountId=GE.parseCaipAccountId,O2.parseCaipChainId=GE.parseCaipChainId,O2.remove0x=wA.remove0x,O2.satisfiesVersionRange=VM.satisfiesVersionRange,O2.signedBigIntToBytes=wA.signedBigIntToBytes,O2.stringToBytes=wA.stringToBytes,O2.timeSince=YJ.timeSince,O2.valueToBytes=wA.valueToBytes,O2.wrapError=yU.wrapError,Object.defineProperty(y5,"__esModule",{value:!0});var ZJ=HH,GN=O2,Wie=ZJ.errorCodes.rpc.internal,Zfe={code:Wie,message:yW(Wie)},JJ="Unspecified server error.";function yW(yt,ir="Unspecified error message. This is a bug, please report it."){if(Gie(yt)){const _c=yt.toString();if(GN.hasProperty.call(void 0,ZJ.errorValues,_c))return ZJ.errorValues[_c].message;if(function(mu){return mu>=-32099&&mu<=-32e3}(yt))return JJ}return ir}function Gie(yt){return Number.isInteger(yt)}function Jfe(yt){return Array.isArray(yt)?yt.map(ir=>GN.isValidJson.call(void 0,ir)?ir:GN.isObject.call(void 0,ir)?Xfe(ir):null):GN.isObject.call(void 0,yt)?Xfe(yt):GN.isValidJson.call(void 0,yt)?yt:null}function Xfe(yt){return Object.getOwnPropertyNames(yt).reduce((ir,_c)=>{const mu=yt[_c];return GN.isValidJson.call(void 0,mu)&&(ir[_c]=mu),ir},{})}y5.JSON_RPC_SERVER_ERROR_MESSAGE=JJ,y5.getMessageFromCode=yW,y5.isValidCode=Gie,y5.serializeError=function(yt,{fallbackError:ir=Zfe,shouldIncludeStack:_c=!0}={}){if(!GN.isJsonRpcError.call(void 0,ir))throw new Error("Must provide fallback error with integer number code and string message.");const mu=function(Mu,Su){return Mu&&typeof Mu=="object"&&"serialize"in Mu&&typeof Mu.serialize=="function"?Mu.serialize():GN.isJsonRpcError.call(void 0,Mu)?Mu:{...Su,data:{cause:Jfe(Mu)}}}(yt,ir);return _c||delete mu.stack,mu},y5.serializeCause=Jfe;var Yie=d_;d_.default=d_,d_.stable=rde,d_.stableStringify=rde;var bW="[...]",Qfe="[Circular]",WM=[],GM=[];function tde(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function d_(yt,ir,_c,mu){var Mu;mu===void 0&&(mu=tde()),Zie(yt,"",0,[],void 0,0,mu);try{Mu=GM.length===0?JSON.stringify(yt,ir,_c):JSON.stringify(yt,wW(ir),_c)}catch{return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;WM.length!==0;){var Su=WM.pop();Su.length===4?Object.defineProperty(Su[0],Su[1],Su[3]):Su[0][Su[1]]=Su[2]}}return Mu}function bU(yt,ir,_c,mu){var Mu=Object.getOwnPropertyDescriptor(mu,_c);Mu.get!==void 0?Mu.configurable?(Object.defineProperty(mu,_c,{value:yt}),WM.push([mu,_c,ir,Mu])):GM.push([ir,_c,yt]):(mu[_c]=yt,WM.push([mu,_c,ir]))}function Zie(yt,ir,_c,mu,Mu,Su,l0){var E0;if(Su+=1,typeof yt=="object"&&yt!==null){for(E0=0;E0l0.depthLimit||l0.edgesLimit!==void 0&&_c+1>l0.edgesLimit)return void bU(bW,yt,ir,Mu);if(mu.push(yt),Array.isArray(yt))for(E0=0;E0ir?1:0}function rde(yt,ir,_c,mu){mu===void 0&&(mu=tde());var Mu,Su=Jie(yt,"",0,[],void 0,0,mu)||yt;try{Mu=GM.length===0?JSON.stringify(Su,ir,_c):JSON.stringify(Su,wW(ir),_c)}catch{return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;WM.length!==0;){var l0=WM.pop();l0.length===4?Object.defineProperty(l0[0],l0[1],l0[3]):l0[0][l0[1]]=l0[2]}}return Mu}function Jie(yt,ir,_c,mu,Mu,Su,l0){var E0;if(Su+=1,typeof yt=="object"&&yt!==null){for(E0=0;E0l0.depthLimit||l0.edgesLimit!==void 0&&_c+1>l0.edgesLimit)return void bU(bW,yt,ir,Mu);if(mu.push(yt),Array.isArray(yt))for(E0=0;E00)for(var mu=0;mu=1e3&&mu<=4999}(yt))throw new Error('"code" must be an integer such that: 1000 <= code <= 4999');super(yt,ir,_c)}},Object.defineProperty(Z3,"__esModule",{value:!0});var $K=nU,ide=y5,P7=HH,YN={parse:yt=>MR(P7.errorCodes.rpc.parse,yt),invalidRequest:yt=>MR(P7.errorCodes.rpc.invalidRequest,yt),invalidParams:yt=>MR(P7.errorCodes.rpc.invalidParams,yt),methodNotFound:yt=>MR(P7.errorCodes.rpc.methodNotFound,yt),internal:yt=>MR(P7.errorCodes.rpc.internal,yt),server:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum RPC Server errors must provide single object argument.");const{code:ir}=yt;if(!Number.isInteger(ir)||ir>-32005||ir<-32099)throw new Error('"code" must be an integer such that: -32099 <= code <= -32005');return MR(ir,yt)},invalidInput:yt=>MR(P7.errorCodes.rpc.invalidInput,yt),resourceNotFound:yt=>MR(P7.errorCodes.rpc.resourceNotFound,yt),resourceUnavailable:yt=>MR(P7.errorCodes.rpc.resourceUnavailable,yt),transactionRejected:yt=>MR(P7.errorCodes.rpc.transactionRejected,yt),methodNotSupported:yt=>MR(P7.errorCodes.rpc.methodNotSupported,yt),limitExceeded:yt=>MR(P7.errorCodes.rpc.limitExceeded,yt)},sA={userRejectedRequest:yt=>vS(P7.errorCodes.provider.userRejectedRequest,yt),unauthorized:yt=>vS(P7.errorCodes.provider.unauthorized,yt),unsupportedMethod:yt=>vS(P7.errorCodes.provider.unsupportedMethod,yt),disconnected:yt=>vS(P7.errorCodes.provider.disconnected,yt),chainDisconnected:yt=>vS(P7.errorCodes.provider.chainDisconnected,yt),custom:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum Provider custom errors must provide single object argument.");const{code:ir,message:_c,data:mu}=yt;if(!_c||typeof _c!="string")throw new Error('"message" must be a nonempty string');return new $K.EthereumProviderError(ir,_c,mu)}};function MR(yt,ir){const[_c,mu]=ode(ir);return new $K.JsonRpcError(yt,EW(_c,()=>ide.getMessageFromCode.call(void 0,yt)),mu)}function vS(yt,ir){const[_c,mu]=ode(ir);return new $K.EthereumProviderError(yt,EW(_c,()=>ide.getMessageFromCode.call(void 0,yt)),mu)}function ode(yt){if(yt){if(typeof yt=="string")return[yt];if(typeof yt=="object"&&!Array.isArray(yt)){const{message:ir,data:_c}=yt;if(ir&&typeof ir!="string")throw new Error("Must specify string message.");return[EW(ir,()=>{}),_c]}}return[]}Z3.rpcErrors=YN,Z3.providerErrors=sA,Object.defineProperty(GO,"__esModule",{value:!0});var ade=Z3,AW=nU,fA=y5,XJ=HH;GO.EthereumProviderError=AW.EthereumProviderError,GO.JsonRpcError=AW.JsonRpcError,GO.errorCodes=XJ.errorCodes,GO.getMessageFromCode=fA.getMessageFromCode,GO.providerErrors=ade.providerErrors,GO.rpcErrors=ade.rpcErrors,GO.serializeCause=fA.serializeCause,GO.serializeError=fA.serializeError;var GB={};Object.defineProperty(GB,"__esModule",{value:!0});const x5=$_;function Qie(yt,ir,_c){try{Reflect.apply(yt,ir,_c)}catch(mu){setTimeout(()=>{throw mu})}}class eoe extends x5.EventEmitter{emit(ir,..._c){let mu=ir==="error";const Mu=this._events;if(Mu!==void 0)mu=mu&&Mu.error===void 0;else if(!mu)return!1;if(mu){let l0;if(_c.length>0&&([l0]=_c),l0 instanceof Error)throw l0;const E0=new Error("Unhandled error."+(l0?` (${l0.message})`:""));throw E0.context=l0,E0}const Su=Mu[ir];if(Su===void 0)return!1;if(typeof Su=="function")Qie(Su,this,_c);else{const l0=Su.length,E0=function(j0){const M0=j0.length,B0=new Array(M0);for(let V0=0;V0{"destroy"in ir&&typeof ir.destroy=="function"&&ir.destroy()}),JN(this,ZN,[],"f"),JN(this,QJ,!0,"f")}push(ir){U_(this,mx,"m",_W).call(this),U_(this,ZN,"f").push(ir)}handle(ir,_c){if(U_(this,mx,"m",_W).call(this),_c&&typeof _c!="function")throw new Error('"callback" must be a function if provided.');return Array.isArray(ir)?_c?U_(this,mx,"m",eX).call(this,ir,_c):U_(this,mx,"m",eX).call(this,ir):_c?U_(this,mx,"m",tX).call(this,ir,_c):this._promiseHandle(ir)}asMiddleware(){return U_(this,mx,"m",_W).call(this),(ir,_c,mu,Mu)=>IR(this,void 0,void 0,function*(){try{const[Su,l0,E0]=yield U_(Z6,eP,"m",EK).call(Z6,ir,_c,U_(this,ZN,"f"));return l0?(yield U_(Z6,eP,"m",tP).call(Z6,E0),Mu(Su)):mu(j0=>IR(this,void 0,void 0,function*(){try{yield U_(Z6,eP,"m",tP).call(Z6,E0)}catch(M0){return j0(M0)}return j0()}))}catch(Su){return Mu(Su)}})}_promiseHandle(ir){return IR(this,void 0,void 0,function*(){return new Promise((_c,mu)=>{U_(this,mx,"m",tX).call(this,ir,(Mu,Su)=>{Mu&&Su===void 0?mu(Mu):_c(Su)}).catch(mu)})})}}function noe(yt){return JSON.stringify(yt,null,2)}zH.JsonRpcEngine=Z6,eP=Z6,QJ=new WeakMap,ZN=new WeakMap,wU=new WeakMap,mx=new WeakSet,_W=function(){if(U_(this,QJ,"f"))throw new Error("This engine is destroyed and can no longer be used.")},eX=function(yt,ir){return IR(this,void 0,void 0,function*(){try{if(yt.length===0){const mu=[{id:null,jsonrpc:"2.0",error:new mC.JsonRpcError(mC.errorCodes.rpc.invalidRequest,"Request batch must contain plain objects. Received an empty array")}];return ir?ir(null,mu):mu}const _c=(yield Promise.all(yt.map(this._promiseHandle.bind(this)))).filter(mu=>mu!==void 0);return ir?ir(null,_c):_c}catch(_c){if(ir)return ir(_c);throw _c}})},tX=function(yt,ir){var _c;return IR(this,void 0,void 0,function*(){if(!yt||Array.isArray(yt)||typeof yt!="object"){const l0=new mC.JsonRpcError(mC.errorCodes.rpc.invalidRequest,"Requests must be plain objects. Received: "+typeof yt,{request:yt});return ir(l0,{id:null,jsonrpc:"2.0",error:l0})}if(typeof yt.method!="string"){const l0=new mC.JsonRpcError(mC.errorCodes.rpc.invalidRequest,"Must specify a string method. Received: "+typeof yt.method,{request:yt});return U_(this,wU,"f")&&!(0,SW.isJsonRpcRequest)(yt)?ir(null):ir(l0,{id:(_c=yt.id)!==null&&_c!==void 0?_c:null,jsonrpc:"2.0",error:l0})}if(U_(this,wU,"f")&&!(0,SW.isJsonRpcRequest)(yt)){try{yield U_(this,wU,"f").call(this,yt)}catch(l0){return ir(l0)}return ir(null)}let mu=null;const Mu=Object.assign({},yt),Su={id:Mu.id,jsonrpc:Mu.jsonrpc};try{yield U_(Z6,eP,"m",rX).call(Z6,Mu,Su,U_(this,ZN,"f"))}catch(l0){mu=l0}return mu&&(delete Su.result,Su.error||(Su.error=(0,mC.serializeError)(mu))),ir(mu,Su)})},rX=function(yt,ir,_c){return IR(this,void 0,void 0,function*(){const[mu,Mu,Su]=yield U_(Z6,eP,"m",EK).call(Z6,yt,ir,_c);if(U_(Z6,eP,"m",YB).call(Z6,yt,ir,Mu),yield U_(Z6,eP,"m",tP).call(Z6,Su),mu)throw mu})},EK=function(yt,ir,_c){return IR(this,void 0,void 0,function*(){const mu=[];let Mu=null,Su=!1;for(const l0 of _c)if([Mu,Su]=yield U_(Z6,eP,"m",toe).call(Z6,yt,ir,l0,mu),Su)break;return[Mu,Su,mu.reverse()]})},toe=function(yt,ir,_c,mu){return IR(this,void 0,void 0,function*(){return new Promise(Mu=>{const Su=E0=>{const j0=E0||ir.error;j0&&(ir.error=(0,mC.serializeError)(j0)),Mu([j0,!0])},l0=E0=>{ir.error?Su(ir.error):(E0&&(typeof E0!="function"&&Su(new mC.JsonRpcError(mC.errorCodes.rpc.internal,`JsonRpcEngine: "next" return handlers must be functions. Received "${typeof E0}" for request: -${noe(yt)}`,{request:yt})),mu.push(E0)),Mu([null,!1]))};try{_c(yt,ir,l0,Su)}catch(E0){Su(E0)}})})},tP=function(yt){return IR(this,void 0,void 0,function*(){for(const ir of yt)yield new Promise((_c,mu)=>{ir(Mu=>Mu?mu(Mu):_c())})})},YB=function(yt,ir,_c){if(!(0,SW.hasProperty)(ir,"result")&&!(0,SW.hasProperty)(ir,"error"))throw new mC.JsonRpcError(mC.errorCodes.rpc.internal,`JsonRpcEngine: Response has no error or result for request: +caused by: `+Xue(mu,ir)):_c},qH=(yt,ir,_c)=>{if(!(yt instanceof Error))return"";const mu=_c?"":yt.message||"";if(ir.has(yt))return mu+": ...";const Mu=iU(yt);if(Mu){ir.add(yt);const xu="cause"in yt&&typeof yt.cause=="function";return mu+(xu?"":": ")+qH(Mu,ir,xu)}return mu};var ZO=tt(Object.freeze({__proto__:null,findCauseByReference:(yt,ir)=>{if(!yt||!ir||!(yt instanceof Error)||!(ir.prototype instanceof Error)&&ir!==Error)return;const _c=new Set;let mu=yt;for(;mu&&!_c.has(mu);){if(_c.add(mu),mu instanceof ir)return mu;mu=iU(mu)}},getErrorCause:iU,messageWithCauses:yt=>qH(yt,new Set),stackWithCauses:yt=>Xue(yt,new Set)}));const{ErrorWithCause:hJ}=_ne,{findCauseByReference:Pq,getErrorCause:UN,messageWithCauses:WH,stackWithCauses:P2}=ZO;var GH={ErrorWithCause:hJ,findCauseByReference:Pq,getErrorCause:UN,stackWithCauses:P2,messageWithCauses:WH};Object.defineProperty(YO,"__esModule",{value:!0});var qE=I7,FM=GH;function zN(yt){return typeof yt=="object"&&yt!==null&&"code"in yt}function cx(yt){return typeof yt=="object"&&yt!==null&&"message"in yt}YO.isErrorWithCode=zN,YO.isErrorWithMessage=cx,YO.isErrorWithStack=function(yt){return typeof yt=="object"&&yt!==null&&"stack"in yt},YO.getErrorMessage=function(yt){return cx(yt)&&typeof yt.message=="string"?yt.message:qE.isNullOrUndefined.call(void 0,yt)?"":String(yt)},YO.wrapError=function(yt,ir){if((_c=yt)instanceof Error||qE.isObject.call(void 0,_c)&&_c.constructor.name==="Error"){let mu;return mu=Error.length===2?new Error(ir,{cause:yt}):new FM.ErrorWithCause(ir,{cause:yt}),zN(yt)&&(mu.code=yt.code),mu}var _c;return ir.length>0?new Error(`${String(yt)}: ${ir}`):new Error(String(yt))};class Sne extends TypeError{constructor(ir,_c){let mu;const{message:Mu,explanation:xu,...l0}=ir,{path:E0}=ir,j0=E0.length===0?Mu:`At path: ${E0.join(".")} -- ${Mu}`;super(xu??j0),xu!=null&&(this.cause=j0),Object.assign(this,l0),this.name=this.constructor.name,this.failures=()=>mu??(mu=[ir,..._c()])}}function TR(yt){return typeof yt=="object"&&yt!=null}function xne(yt){if(Object.prototype.toString.call(yt)!=="[object Object]")return!1;const ir=Object.getPrototypeOf(yt);return ir===null||ir===Object.prototype}function O7(yt){return typeof yt=="symbol"?yt.toString():typeof yt=="string"?JSON.stringify(yt):`${yt}`}function Ime(yt,ir,_c,mu){if(yt===!0)return;yt===!1?yt={}:typeof yt=="string"&&(yt={message:yt});const{path:Mu,branch:xu}=ir,{type:l0}=_c,{refinement:E0,message:j0=`Expected a value of type \`${l0}\`${E0?` with refinement \`${E0}\``:""}, but received: \`${O7(mu)}\``}=yt;return{value:mu,type:l0,refinement:E0,key:Mu[Mu.length-1],path:Mu,branch:xu,...yt,message:j0}}function*YH(yt,ir,_c,mu){(function(Mu){return TR(Mu)&&typeof Mu[Symbol.iterator]=="function"})(yt)||(yt=[yt]);for(const Mu of yt){const xu=Ime(Mu,ir,_c,mu);xu&&(yield xu)}}function*pJ(yt,ir,_c={}){const{path:mu=[],branch:Mu=[yt],coerce:xu=!1,mask:l0=!1}=_c,E0={path:mu,branch:Mu};if(xu&&(yt=ir.coercer(yt,E0),l0&&ir.type!=="type"&&TR(ir.schema)&&TR(yt)&&!Array.isArray(yt)))for(const M0 in yt)ir.schema[M0]===void 0&&delete yt[M0];let j0="valid";for(const M0 of ir.validator(yt,E0))M0.explanation=_c.message,j0="not_valid",yield[M0,void 0];for(let[M0,B0,q0]of ir.entries(yt,E0)){const y1=pJ(B0,q0,{path:M0===void 0?mu:[...mu,M0],branch:M0===void 0?Mu:[...Mu,B0],coerce:xu,mask:l0,message:_c.message});for(const v1 of y1)v1[0]?(j0=v1[0].refinement!=null?"not_refined":"not_valid",yield[v1[0],void 0]):xu&&(B0=v1[1],M0===void 0?yt=B0:yt instanceof Map?yt.set(M0,B0):yt instanceof Set?yt.add(B0):TR(yt)&&(B0!==void 0||M0 in yt)&&(yt[M0]=B0))}if(j0!=="not_valid")for(const M0 of ir.refiner(yt,E0))M0.explanation=_c.message,j0="not_refined",yield[M0,void 0];j0==="valid"&&(yield[void 0,yt])}class _8{constructor(ir){const{type:_c,schema:mu,validator:Mu,refiner:xu,coercer:l0=j0=>j0,entries:E0=function*(){}}=ir;this.type=_c,this.schema=mu,this.entries=E0,this.coercer=l0,this.validator=Mu?(j0,M0)=>YH(Mu(j0,M0),M0,this,j0):()=>[],this.refiner=xu?(j0,M0)=>YH(xu(j0,M0),M0,this,j0):()=>[]}assert(ir,_c){return kne(ir,this,_c)}create(ir,_c){return Cne(ir,this,_c)}is(ir){return mJ(ir,this)}mask(ir,_c){return Que(ir,this,_c)}validate(ir,_c={}){return ZH(ir,this,_c)}}function kne(yt,ir,_c){const mu=ZH(yt,ir,{message:_c});if(mu[0])throw mu[0]}function Cne(yt,ir,_c){const mu=ZH(yt,ir,{coerce:!0,message:_c});if(mu[0])throw mu[0];return mu[1]}function Que(yt,ir,_c){const mu=ZH(yt,ir,{coerce:!0,mask:!0,message:_c});if(mu[0])throw mu[0];return mu[1]}function mJ(yt,ir){return!ZH(yt,ir)[0]}function ZH(yt,ir,_c={}){const mu=pJ(yt,ir,_c),Mu=function(xu){const{done:l0,value:E0}=xu.next();return l0?void 0:E0}(mu);return Mu[0]?[new Sne(Mu[0],function*(){for(const xu of mu)xu[0]&&(yield xu[0])}),void 0]:[void 0,Mu[1]]}function fC(yt,ir){return new _8({type:yt,schema:null,validator:ir})}function Tne(yt){let ir;return new _8({type:"lazy",schema:null,*entries(_c,mu){ir??(ir=yt()),yield*ir.entries(_c,mu)},validator:(_c,mu)=>(ir??(ir=yt()),ir.validator(_c,mu)),coercer:(_c,mu)=>(ir??(ir=yt()),ir.coercer(_c,mu)),refiner:(_c,mu)=>(ir??(ir=yt()),ir.refiner(_c,mu))})}function Rne(){return fC("any",()=>!0)}function Mne(yt){return new _8({type:"array",schema:yt,*entries(ir){if(yt&&Array.isArray(ir))for(const[_c,mu]of ir.entries())yield[_c,mu,yt]},coercer:ir=>Array.isArray(ir)?ir.slice():ir,validator:ir=>Array.isArray(ir)||`Expected an array value, but received: ${O7(ir)}`})}function Ine(){return fC("boolean",yt=>typeof yt=="boolean")}function One(){return fC("integer",yt=>typeof yt=="number"&&!isNaN(yt)&&Number.isInteger(yt)||`Expected an integer, but received: ${O7(yt)}`)}function gJ(yt){const ir=O7(yt),_c=typeof yt;return new _8({type:"literal",schema:_c==="string"||_c==="number"||_c==="boolean"?yt:null,validator:mu=>mu===yt||`Expected the literal \`${ir}\`, but received: ${O7(mu)}`})}function lT(){return fC("never",()=>!1)}function Pne(yt){return new _8({...yt,validator:(ir,_c)=>ir===null||yt.validator(ir,_c),refiner:(ir,_c)=>ir===null||yt.refiner(ir,_c)})}function mS(){return fC("number",yt=>typeof yt=="number"&&!isNaN(yt)||`Expected a number, but received: ${O7(yt)}`)}function oU(yt){const ir=yt?Object.keys(yt):[],_c=lT();return new _8({type:"object",schema:yt||null,*entries(mu){if(yt&&TR(mu)){const Mu=new Set(Object.keys(mu));for(const xu of ir)Mu.delete(xu),yield[xu,mu[xu],yt[xu]];for(const xu of Mu)yield[xu,mu[xu],_c]}},validator:mu=>TR(mu)||`Expected an object, but received: ${O7(mu)}`,coercer:mu=>TR(mu)?{...mu}:mu})}function JH(yt){return new _8({...yt,validator:(ir,_c)=>ir===void 0||yt.validator(ir,_c),refiner:(ir,_c)=>ir===void 0||yt.refiner(ir,_c)})}function jq(yt,ir){return new _8({type:"record",schema:null,*entries(_c){if(TR(_c))for(const mu in _c){const Mu=_c[mu];yield[mu,mu,yt],yield[mu,Mu,ir]}},validator:_c=>TR(_c)||`Expected an object, but received: ${O7(_c)}`})}function bA(){return fC("string",yt=>typeof yt=="string"||`Expected a string, but received: ${O7(yt)}`)}function Nq(yt){const ir=Object.keys(yt);return new _8({type:"type",schema:yt,*entries(_c){if(TR(_c))for(const mu of ir)yield[mu,_c[mu],yt[mu]]},validator:_c=>TR(_c)||`Expected an object, but received: ${O7(_c)}`,coercer:_c=>TR(_c)?{..._c}:_c})}function aU(yt){const ir=yt.map(_c=>_c.type).join(" | ");return new _8({type:"union",schema:null,coercer(_c){for(const mu of yt){const[Mu,xu]=mu.validate(_c,{coerce:!0});if(!Mu)return xu}return _c},validator(_c,mu){const Mu=[];for(const xu of yt){const[...l0]=pJ(_c,xu,mu),[E0]=l0;if(!E0[0])return[];for(const[j0]of l0)j0&&Mu.push(j0)}return[`Expected the value to satisfy a union of \`${ir}\`, but received: ${O7(_c)}`,...Mu]}})}function vJ(){return fC("unknown",()=>!0)}function sU(yt,ir,_c){return new _8({...yt,coercer:(mu,Mu)=>mJ(mu,ir)?yt.coercer(_c(mu,Mu),Mu):yt.coercer(mu,Mu)})}function lU(yt){return yt instanceof Map||yt instanceof Set?yt.size:yt.length}function gS(yt,ir,_c){return new _8({...yt,*refiner(mu,Mu){yield*yt.refiner(mu,Mu);const xu=YH(_c(mu,Mu),Mu,yt,mu);for(const l0 of xu)yield{...l0,refinement:ir}}})}var jne=Object.freeze({__proto__:null,Struct:_8,StructError:Sne,any:Rne,array:Mne,assert:kne,assign:function(...yt){const ir=yt[0].type==="type",_c=yt.map(Mu=>Mu.schema),mu=Object.assign({},..._c);return ir?Nq(mu):oU(mu)},bigint:function(){return fC("bigint",yt=>typeof yt=="bigint")},boolean:Ine,coerce:sU,create:Cne,date:function(){return fC("date",yt=>yt instanceof Date&&!isNaN(yt.getTime())||`Expected a valid \`Date\` object, but received: ${O7(yt)}`)},defaulted:function(yt,ir,_c={}){return sU(yt,vJ(),mu=>{const Mu=typeof ir=="function"?ir():ir;if(mu===void 0)return Mu;if(!_c.strict&&xne(mu)&&xne(Mu)){const xu={...mu};let l0=!1;for(const E0 in Mu)xu[E0]===void 0&&(xu[E0]=Mu[E0],l0=!0);if(l0)return xu}return mu})},define:fC,deprecated:function(yt,ir){return new _8({...yt,refiner:(_c,mu)=>_c===void 0||yt.refiner(_c,mu),validator:(_c,mu)=>_c===void 0||(ir(_c,mu),yt.validator(_c,mu))})},dynamic:function(yt){return new _8({type:"dynamic",schema:null,*entries(ir,_c){yield*yt(ir,_c).entries(ir,_c)},validator:(ir,_c)=>yt(ir,_c).validator(ir,_c),coercer:(ir,_c)=>yt(ir,_c).coercer(ir,_c),refiner:(ir,_c)=>yt(ir,_c).refiner(ir,_c)})},empty:function(yt){return gS(yt,"empty",ir=>{const _c=lU(ir);return _c===0||`Expected an empty ${yt.type} but received one with a size of \`${_c}\``})},enums:function(yt){const ir={},_c=yt.map(mu=>O7(mu)).join();for(const mu of yt)ir[mu]=mu;return new _8({type:"enums",schema:ir,validator:mu=>yt.includes(mu)||`Expected one of \`${_c}\`, but received: ${O7(mu)}`})},func:function(){return fC("func",yt=>typeof yt=="function"||`Expected a function, but received: ${O7(yt)}`)},instance:function(yt){return fC("instance",ir=>ir instanceof yt||`Expected a \`${yt.name}\` instance, but received: ${O7(ir)}`)},integer:One,intersection:function(yt){return new _8({type:"intersection",schema:null,*entries(ir,_c){for(const mu of yt)yield*mu.entries(ir,_c)},*validator(ir,_c){for(const mu of yt)yield*mu.validator(ir,_c)},*refiner(ir,_c){for(const mu of yt)yield*mu.refiner(ir,_c)}})},is:mJ,lazy:Tne,literal:gJ,map:function(yt,ir){return new _8({type:"map",schema:null,*entries(_c){if(yt&&ir&&_c instanceof Map)for(const[mu,Mu]of _c.entries())yield[mu,mu,yt],yield[mu,Mu,ir]},coercer:_c=>_c instanceof Map?new Map(_c):_c,validator:_c=>_c instanceof Map||`Expected a \`Map\` object, but received: ${O7(_c)}`})},mask:Que,max:function(yt,ir,_c={}){const{exclusive:mu}=_c;return gS(yt,"max",Mu=>mu?Mumu?Mu>ir:Mu>=ir||`Expected a ${yt.type} greater than ${mu?"":"or equal to "}${ir} but received \`${Mu}\``)},never:lT,nonempty:function(yt){return gS(yt,"nonempty",ir=>lU(ir)>0||`Expected a nonempty ${yt.type} but received an empty one`)},nullable:Pne,number:mS,object:oU,omit:function(yt,ir){const{schema:_c}=yt,mu={..._c};for(const Mu of ir)delete mu[Mu];return yt.type==="type"?Nq(mu):oU(mu)},optional:JH,partial:function(yt){const ir=yt instanceof _8?{...yt.schema}:{...yt};for(const _c in ir)ir[_c]=JH(ir[_c]);return oU(ir)},pattern:function(yt,ir){return gS(yt,"pattern",_c=>ir.test(_c)||`Expected a ${yt.type} matching \`/${ir.source}/\` but received "${_c}"`)},pick:function(yt,ir){const{schema:_c}=yt,mu={};for(const Mu of ir)mu[Mu]=_c[Mu];return oU(mu)},record:jq,refine:gS,regexp:function(){return fC("regexp",yt=>yt instanceof RegExp)},set:function(yt){return new _8({type:"set",schema:null,*entries(ir){if(yt&&ir instanceof Set)for(const _c of ir)yield[_c,_c,yt]},coercer:ir=>ir instanceof Set?new Set(ir):ir,validator:ir=>ir instanceof Set||`Expected a \`Set\` object, but received: ${O7(ir)}`})},size:function(yt,ir,_c=ir){const mu=`Expected a ${yt.type}`,Mu=ir===_c?`of \`${ir}\``:`between \`${ir}\` and \`${_c}\``;return gS(yt,"size",xu=>{if(typeof xu=="number"||xu instanceof Date)return ir<=xu&&xu<=_c||`${mu} ${Mu} but received \`${xu}\``;if(xu instanceof Map||xu instanceof Set){const{size:l0}=xu;return ir<=l0&&l0<=_c||`${mu} with a size ${Mu} but received one with a size of \`${l0}\``}{const{length:l0}=xu;return ir<=l0&&l0<=_c||`${mu} with a length ${Mu} but received one with a length of \`${l0}\``}})},string:bA,struct:function(yt,ir){return console.warn("superstruct@0.11 - The `struct` helper has been renamed to `define`."),fC(yt,ir)},trimmed:function(yt){return sU(yt,bA(),ir=>ir.trim())},tuple:function(yt){const ir=lT();return new _8({type:"tuple",schema:null,*entries(_c){if(Array.isArray(_c)){const mu=Math.max(yt.length,_c.length);for(let Mu=0;MuArray.isArray(_c)||`Expected an array, but received: ${O7(_c)}`})},type:Nq,union:aU,unknown:vJ,validate:ZH}),HN=tt(jne);Object.defineProperty(DM,"__esModule",{value:!0});var Nne=YO,efe=HN;function Lne(yt,ir){return typeof function(_c){let mu,Mu=_c[0],xu=1;for(;xu<_c.length;){const l0=_c[xu],E0=_c[xu+1];if(xu+=2,(l0==="optionalAccess"||l0==="optionalCall")&&Mu==null)return;l0==="access"||l0==="optionalAccess"?(mu=Mu,Mu=E0(Mu)):l0!=="call"&&l0!=="optionalCall"||(Mu=E0((...j0)=>Mu.call(mu,...j0)),mu=void 0)}return Mu}([yt,"optionalAccess",_c=>_c.prototype,"optionalAccess",_c=>_c.constructor,"optionalAccess",_c=>_c.name])=="string"?new yt({message:ir}):yt({message:ir})}var Lq=class extends Error{constructor(yt){super(yt.message),this.code="ERR_ASSERTION"}};DM.AssertionError=Lq,DM.assert=function(yt,ir="Assertion failed.",_c=Lq){if(!yt)throw ir instanceof Error?ir:Lne(_c,ir)},DM.assertStruct=function(yt,ir,_c="Assertion failed",mu=Lq){try{efe.assert.call(void 0,yt,ir)}catch(Mu){throw Lne(mu,`${_c}: ${function(xu){return Nne.getErrorMessage.call(void 0,xu).replace(/\.$/u,"")}(Mu)}.`)}},DM.assertExhaustive=function(yt){throw new Error("Invalid branch reached. Should be detected during compilation.")};var XA={},ux={};function XH(yt){if(!Number.isSafeInteger(yt)||yt<0)throw new Error(`Wrong positive integer: ${yt}`)}function FB(yt){if(typeof yt!="boolean")throw new Error(`Expected boolean, not ${yt}`)}function QH(yt,...ir){if(!(yt instanceof Uint8Array))throw new Error("Expected Uint8Array");if(ir.length>0&&!ir.includes(yt.length))throw new Error(`Expected Uint8Array of length ${ir}, not of length=${yt.length}`)}function yJ(yt){if(typeof yt!="function"||typeof yt.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");XH(yt.outputLen),XH(yt.blockLen)}function b5(yt,ir=!0){if(yt.destroyed)throw new Error("Hash instance has been destroyed");if(ir&&yt.finished)throw new Error("Hash#digest() has already been called")}function bJ(yt,ir){QH(yt);const _c=ir.outputLen;if(yt.length<_c)throw new Error(`digestInto() expects output buffer of length at least ${_c}`)}Object.defineProperty(ux,"__esModule",{value:!0}),ux.output=ux.exists=ux.hash=ux.bytes=ux.bool=ux.number=void 0,ux.number=XH,ux.bool=FB,ux.bytes=QH,ux.hash=yJ,ux.exists=b5,ux.output=bJ;const Bq={number:XH,bool:FB,bytes:QH,hash:yJ,exists:b5,output:bJ};ux.default=Bq;var M$={};Object.defineProperty(M$,"__esModule",{value:!0}),M$.add5L=M$.add5H=M$.add4H=M$.add4L=M$.add3H=M$.add3L=M$.add=M$.rotlBL=M$.rotlBH=M$.rotlSL=M$.rotlSH=M$.rotr32L=M$.rotr32H=M$.rotrBL=M$.rotrBH=M$.rotrSL=M$.rotrSH=M$.shrSL=M$.shrSH=M$.toBig=M$.split=M$.fromBig=void 0;const cU=BigInt(2**32-1),wJ=BigInt(32);function KN(yt,ir=!1){return ir?{h:Number(yt&cU),l:Number(yt>>wJ&cU)}:{h:0|Number(yt>>wJ&cU),l:0|Number(yt&cU)}}function tfe(yt,ir=!1){let _c=new Uint32Array(yt.length),mu=new Uint32Array(yt.length);for(let Mu=0;MuBigInt(yt>>>0)<>>0);M$.toBig=VN;const rfe=(yt,ir,_c)=>yt>>>_c;M$.shrSH=rfe;const nfe=(yt,ir,_c)=>yt<<32-_c|ir>>>_c;M$.shrSL=nfe;const Bne=(yt,ir,_c)=>yt>>>_c|ir<<32-_c;M$.rotrSH=Bne;const $J=(yt,ir,_c)=>yt<<32-_c|ir>>>_c;M$.rotrSL=$J;const f_=(yt,ir,_c)=>yt<<64-_c|ir>>>_c-32;M$.rotrBH=f_;const fx=(yt,ir,_c)=>yt>>>_c-32|ir<<64-_c;M$.rotrBL=fx;const Dq=(yt,ir)=>ir;M$.rotr32H=Dq;const Dne=(yt,ir)=>yt;M$.rotr32L=Dne;const EJ=(yt,ir,_c)=>yt<<_c|ir>>>32-_c;M$.rotlSH=EJ;const Fne=(yt,ir,_c)=>ir<<_c|yt>>>32-_c;M$.rotlSL=Fne;const Une=(yt,ir,_c)=>ir<<_c-32|yt>>>64-_c;M$.rotlBH=Une;const zne=(yt,ir,_c)=>yt<<_c-32|ir>>>64-_c;function ife(yt,ir,_c,mu){const Mu=(ir>>>0)+(mu>>>0);return{h:yt+_c+(Mu/2**32|0)|0,l:0|Mu}}M$.rotlBL=zne,M$.add=ife;const D$=(yt,ir,_c)=>(yt>>>0)+(ir>>>0)+(_c>>>0);M$.add3L=D$;const Fq=(yt,ir,_c,mu)=>ir+_c+mu+(yt/2**32|0)|0;M$.add3H=Fq;const AJ=(yt,ir,_c,mu)=>(yt>>>0)+(ir>>>0)+(_c>>>0)+(mu>>>0);M$.add4L=AJ;const _J=(yt,ir,_c,mu,Mu)=>ir+_c+mu+Mu+(yt/2**32|0)|0;M$.add4H=_J;const Hne=(yt,ir,_c,mu,Mu)=>(yt>>>0)+(ir>>>0)+(_c>>>0)+(mu>>>0)+(Mu>>>0);M$.add5L=Hne;const Kne=(yt,ir,_c,mu,Mu,xu)=>ir+_c+mu+Mu+xu+(yt/2**32|0)|0;M$.add5H=Kne;const ofe={fromBig:KN,split:tfe,toBig:VN,shrSH:rfe,shrSL:nfe,rotrSH:Bne,rotrSL:$J,rotrBH:f_,rotrBL:fx,rotr32H:Dq,rotr32L:Dne,rotlSH:EJ,rotlSL:Fne,rotlBH:Une,rotlBL:zne,add:ife,add3L:D$,add3H:Fq,add4L:AJ,add4H:_J,add5H:Kne,add5L:Hne};M$.default=ofe;var Vne={},Uq={};Object.defineProperty(Uq,"__esModule",{value:!0}),Uq.crypto=void 0,Uq.crypto=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0,function(yt){/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */Object.defineProperty(yt,"__esModule",{value:!0}),yt.randomBytes=yt.wrapXOFConstructorWithOpts=yt.wrapConstructorWithOpts=yt.wrapConstructor=yt.checkOpts=yt.Hash=yt.concatBytes=yt.toBytes=yt.utf8ToBytes=yt.asyncLoop=yt.nextTick=yt.hexToBytes=yt.bytesToHex=yt.isLE=yt.rotr=yt.createView=yt.u32=yt.u8=void 0;const ir=Uq,_c=E0=>E0 instanceof Uint8Array;if(yt.u8=E0=>new Uint8Array(E0.buffer,E0.byteOffset,E0.byteLength),yt.u32=E0=>new Uint32Array(E0.buffer,E0.byteOffset,Math.floor(E0.byteLength/4)),yt.createView=E0=>new DataView(E0.buffer,E0.byteOffset,E0.byteLength),yt.rotr=(E0,j0)=>E0<<32-j0|E0>>>j0,yt.isLE=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,!yt.isLE)throw new Error("Non little-endian hardware is not supported");const mu=Array.from({length:256},(E0,j0)=>j0.toString(16).padStart(2,"0"));function Mu(E0){if(typeof E0!="string")throw new Error("utf8ToBytes expected string, got "+typeof E0);return new Uint8Array(new TextEncoder().encode(E0))}function xu(E0){if(typeof E0=="string"&&(E0=Mu(E0)),!_c(E0))throw new Error("expected Uint8Array, got "+typeof E0);return E0}yt.bytesToHex=function(E0){if(!_c(E0))throw new Error("Uint8Array expected");let j0="";for(let M0=0;M0{},yt.asyncLoop=async function(E0,j0,M0){let B0=Date.now();for(let q0=0;q0=0&&y1B0+q0.length,0));let M0=0;return E0.forEach(B0=>{if(!_c(B0))throw new Error("Uint8Array expected");j0.set(B0,M0),M0+=B0.length}),j0},yt.Hash=class{clone(){return this._cloneInto()}};const l0={}.toString;yt.checkOpts=function(E0,j0){if(j0!==void 0&&l0.call(j0)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(E0,j0)},yt.wrapConstructor=function(E0){const j0=B0=>E0().update(xu(B0)).digest(),M0=E0();return j0.outputLen=M0.outputLen,j0.blockLen=M0.blockLen,j0.create=()=>E0(),j0},yt.wrapConstructorWithOpts=function(E0){const j0=(B0,q0)=>E0(q0).update(xu(B0)).digest(),M0=E0({});return j0.outputLen=M0.outputLen,j0.blockLen=M0.blockLen,j0.create=B0=>E0(B0),j0},yt.wrapXOFConstructorWithOpts=function(E0){const j0=(B0,q0)=>E0(q0).update(xu(B0)).digest(),M0=E0({});return j0.outputLen=M0.outputLen,j0.blockLen=M0.blockLen,j0.create=B0=>E0(B0),j0},yt.randomBytes=function(E0=32){if(ir.crypto&&typeof ir.crypto.getRandomValues=="function")return ir.crypto.getRandomValues(new Uint8Array(E0));throw new Error("crypto.getRandomValues must be defined")}}(Vne),Object.defineProperty(XA,"__esModule",{value:!0}),XA.shake256=XA.shake128=XA.keccak_512=XA.keccak_384=XA.keccak_256=XA.keccak_224=XA.sha3_512=XA.sha3_384=XA.sha3_256=XA.sha3_224=XA.Keccak=XA.keccakP=void 0;const uU=ux,eK=M$,tK=Vne,[qne,Wne,Gne]=[[],[],[]],afe=BigInt(0),rK=BigInt(1),sfe=BigInt(2),lfe=BigInt(7),cfe=BigInt(256),ufe=BigInt(113);for(let yt=0,ir=rK,_c=1,mu=0;yt<24;yt++){[_c,mu]=[mu,(2*_c+3*mu)%5],qne.push(2*(5*mu+_c)),Wne.push((yt+1)*(yt+2)/2%64);let Mu=afe;for(let xu=0;xu<7;xu++)ir=(ir<>lfe)*ufe)%cfe,ir&sfe&&(Mu^=rK<<(rK<_c>32?(0,eK.rotlBH)(yt,ir,_c):(0,eK.rotlSH)(yt,ir,_c),Zne=(yt,ir,_c)=>_c>32?(0,eK.rotlBL)(yt,ir,_c):(0,eK.rotlSL)(yt,ir,_c);function hfe(yt,ir=24){const _c=new Uint32Array(10);for(let mu=24-ir;mu<24;mu++){for(let l0=0;l0<10;l0++)_c[l0]=yt[l0]^yt[l0+10]^yt[l0+20]^yt[l0+30]^yt[l0+40];for(let l0=0;l0<10;l0+=2){const E0=(l0+8)%10,j0=(l0+2)%10,M0=_c[j0],B0=_c[j0+1],q0=Yne(M0,B0,1)^_c[E0],y1=Zne(M0,B0,1)^_c[E0+1];for(let v1=0;v1<50;v1+=10)yt[l0+v1]^=q0,yt[l0+v1+1]^=y1}let Mu=yt[2],xu=yt[3];for(let l0=0;l0<24;l0++){const E0=Wne[l0],j0=Yne(Mu,xu,E0),M0=Zne(Mu,xu,E0),B0=qne[l0];Mu=yt[B0],xu=yt[B0+1],yt[B0]=j0,yt[B0+1]=M0}for(let l0=0;l0<50;l0+=10){for(let E0=0;E0<10;E0++)_c[E0]=yt[l0+E0];for(let E0=0;E0<10;E0++)yt[l0+E0]^=~_c[(E0+2)%10]&_c[(E0+4)%10]}yt[0]^=ffe[mu],yt[1]^=dfe[mu]}_c.fill(0)}XA.keccakP=hfe;class nK extends tK.Hash{constructor(ir,_c,mu,Mu=!1,xu=24){if(super(),this.blockLen=ir,this.suffix=_c,this.outputLen=mu,this.enableXOF=Mu,this.rounds=xu,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,(0,uU.number)(mu),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,tK.u32)(this.state)}keccak(){hfe(this.state32,this.rounds),this.posOut=0,this.pos=0}update(ir){(0,uU.exists)(this);const{blockLen:_c,state:mu}=this,Mu=(ir=(0,tK.toBytes)(ir)).length;for(let xu=0;xu=mu&&this.keccak();const l0=Math.min(mu-this.posOut,xu-Mu);ir.set(_c.subarray(this.posOut,this.posOut+l0),Mu),this.posOut+=l0,Mu+=l0}return ir}xofInto(ir){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(ir)}xof(ir){return(0,uU.number)(ir),this.xofInto(new Uint8Array(ir))}digestInto(ir){if((0,uU.output)(ir,this),this.finished)throw new Error("digest() was already called");return this.writeInto(ir),this.destroy(),ir}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(ir){const{blockLen:_c,suffix:mu,outputLen:Mu,rounds:xu,enableXOF:l0}=this;return ir||(ir=new nK(_c,mu,Mu,l0,xu)),ir.state32.set(this.state32),ir.pos=this.pos,ir.posOut=this.posOut,ir.finished=this.finished,ir.rounds=xu,ir.suffix=mu,ir.outputLen=Mu,ir.enableXOF=l0,ir.destroyed=this.destroyed,ir}}XA.Keccak=nK;const w5=(yt,ir,_c)=>(0,tK.wrapConstructor)(()=>new nK(ir,yt,_c));XA.sha3_224=w5(6,144,28),XA.sha3_256=w5(6,136,32),XA.sha3_384=w5(6,104,48),XA.sha3_512=w5(6,72,64),XA.keccak_224=w5(1,144,28),XA.keccak_256=w5(1,136,32),XA.keccak_384=w5(1,104,48),XA.keccak_512=w5(1,72,64);const fU=(yt,ir,_c)=>(0,tK.wrapXOFConstructorWithOpts)((mu={})=>new nK(ir,yt,mu.dkLen===void 0?_c:mu.dkLen,!0));XA.shake128=fU(31,168,16),XA.shake256=fU(31,136,32);var iK={};(function(yt){function ir(...qv){const Qv=(s0,g0)=>d0=>s0(g0(d0)),T0=Array.from(qv).reverse().reduce((s0,g0)=>s0?Qv(s0,g0.encode):g0.encode,void 0),X0=qv.reduce((s0,g0)=>s0?Qv(s0,g0.decode):g0.decode,void 0);return{encode:T0,decode:X0}}function _c(qv){return{encode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return Qv.map(T0=>{if(T0<0||T0>=qv.length)throw new Error(`Digit index outside alphabet: ${T0} (alphabet: ${qv.length})`);return qv[T0]})},decode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="string")throw new Error("alphabet.decode input should be array of strings");return Qv.map(T0=>{if(typeof T0!="string")throw new Error(`alphabet.decode: not string element=${T0}`);const X0=qv.indexOf(T0);if(X0===-1)throw new Error(`Unknown letter: "${T0}". Allowed: ${qv}`);return X0})}}}function mu(qv=""){if(typeof qv!="string")throw new Error("join separator should be string");return{encode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="string")throw new Error("join.encode input should be array of strings");for(let T0 of Qv)if(typeof T0!="string")throw new Error(`join.encode: non-string input=${T0}`);return Qv.join(qv)},decode:Qv=>{if(typeof Qv!="string")throw new Error("join.decode input should be string");return Qv.split(qv)}}}function Mu(qv,Qv="="){if(typeof Qv!="string")throw new Error("padding chr should be string");return{encode(T0){if(!Array.isArray(T0)||T0.length&&typeof T0[0]!="string")throw new Error("padding.encode input should be array of strings");for(let X0 of T0)if(typeof X0!="string")throw new Error(`padding.encode: non-string input=${X0}`);for(;T0.length*qv%8;)T0.push(Qv);return T0},decode(T0){if(!Array.isArray(T0)||T0.length&&typeof T0[0]!="string")throw new Error("padding.encode input should be array of strings");for(let s0 of T0)if(typeof s0!="string")throw new Error(`padding.decode: non-string input=${s0}`);let X0=T0.length;if(X0*qv%8)throw new Error("Invalid padding: string should have whole number of bytes");for(;X0>0&&T0[X0-1]===Qv;X0--)if(!((X0-1)*qv%8))throw new Error("Invalid padding: string has too much padding");return T0.slice(0,X0)}}}function xu(qv){if(typeof qv!="function")throw new Error("normalize fn should be function");return{encode:Qv=>Qv,decode:Qv=>qv(Qv)}}function l0(qv,Qv,T0){if(Qv<2)throw new Error(`convertRadix: wrong from=${Qv}, base cannot be less than 2`);if(T0<2)throw new Error(`convertRadix: wrong to=${T0}, base cannot be less than 2`);if(!Array.isArray(qv))throw new Error("convertRadix: data should be array");if(!qv.length)return[];let X0=0;const s0=[],g0=Array.from(qv);for(g0.forEach(d0=>{if(d0<0||d0>=Qv)throw new Error(`Wrong integer: ${d0}`)});;){let d0=0,c0=!0;for(let a0=X0;a0Qv?E0(Qv,qv%Qv):qv,j0=(qv,Qv)=>qv+(Qv-E0(qv,Qv));function M0(qv,Qv,T0,X0){if(!Array.isArray(qv))throw new Error("convertRadix2: data should be array");if(Qv<=0||Qv>32)throw new Error(`convertRadix2: wrong from=${Qv}`);if(T0<=0||T0>32)throw new Error(`convertRadix2: wrong to=${T0}`);if(j0(Qv,T0)>32)throw new Error(`convertRadix2: carry overflow from=${Qv} to=${T0} carryBits=${j0(Qv,T0)}`);let s0=0,g0=0;const d0=2**T0-1,c0=[];for(const a0 of qv){if(a0>=2**Qv)throw new Error(`convertRadix2: invalid data word=${a0} from=${Qv}`);if(s0=s0<32)throw new Error(`convertRadix2: carry overflow pos=${g0} from=${Qv}`);for(g0+=Qv;g0>=T0;g0-=T0)c0.push((s0>>g0-T0&d0)>>>0);s0&=2**g0-1}if(s0=s0<=Qv)throw new Error("Excess padding");if(!X0&&s0)throw new Error(`Non-zero padding: ${s0}`);return X0&&g0>0&&c0.push(s0>>>0),c0}function B0(qv){return{encode:Qv=>{if(!(Qv instanceof Uint8Array))throw new Error("radix.encode input should be Uint8Array");return l0(Array.from(Qv),256,qv)},decode:Qv=>{if(!Array.isArray(Qv)||Qv.length&&typeof Qv[0]!="number")throw new Error("radix.decode input should be array of strings");return Uint8Array.from(l0(Qv,qv,256))}}}function q0(qv,Qv=!1){if(qv<=0||qv>32)throw new Error("radix2: bits should be in (0..32]");if(j0(8,qv)>32||j0(qv,8)>32)throw new Error("radix2: carry overflow");return{encode:T0=>{if(!(T0 instanceof Uint8Array))throw new Error("radix2.encode input should be Uint8Array");return M0(Array.from(T0),8,qv,!Qv)},decode:T0=>{if(!Array.isArray(T0)||T0.length&&typeof T0[0]!="number")throw new Error("radix2.decode input should be array of strings");return Uint8Array.from(M0(T0,qv,8,Qv))}}}function y1(qv){if(typeof qv!="function")throw new Error("unsafeWrapper fn should be function");return function(...Qv){try{return qv.apply(null,Qv)}catch{}}}function v1(qv,Qv){if(typeof Qv!="function")throw new Error("checksum fn should be function");return{encode(T0){if(!(T0 instanceof Uint8Array))throw new Error("checksum.encode: input should be Uint8Array");const X0=Qv(T0).slice(0,qv),s0=new Uint8Array(T0.length+qv);return s0.set(T0),s0.set(X0,T0.length),s0},decode(T0){if(!(T0 instanceof Uint8Array))throw new Error("checksum.decode: input should be Uint8Array");const X0=T0.slice(0,-qv),s0=Qv(X0).slice(0,qv),g0=T0.slice(-qv);for(let d0=0;d0qv.toUpperCase().replace(/O/g,"0").replace(/[IL]/g,"1"))),yt.base64=ir(q0(6),_c("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Mu(6),mu("")),yt.base64url=ir(q0(6),_c("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),Mu(6),mu("")),yt.base64urlnopad=ir(q0(6),_c("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),mu(""));const F1=qv=>ir(B0(58),_c(qv),mu(""));yt.base58=F1("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"),yt.base58flickr=F1("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"),yt.base58xrp=F1("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");const ov=[0,2,3,5,6,7,9,10,11];yt.base58xmr={encode(qv){let Qv="";for(let T0=0;T0ir(v1(4,Qv=>qv(qv(Qv))),yt.base58);const bv=ir(_c("qpzry9x8gf2tvdw0s3jn54khce6mua7l"),mu("")),gv=[996825010,642813549,513874426,1027748829,705979059];function xv(qv){const Qv=qv>>25;let T0=(33554431&qv)<<5;for(let X0=0;X0>X0&1)==1&&(T0^=gv[X0]);return T0}function hy(qv,Qv,T0=1){const X0=qv.length;let s0=1;for(let g0=0;g0126)throw new Error(`Invalid prefix (${qv})`);s0=xv(s0)^d0>>5}s0=xv(s0);for(let g0=0;g0a0)throw new TypeError(`Wrong string length: ${c0.length} (${c0}). Expected (8..${a0})`);const S0=c0.toLowerCase();if(c0!==S0&&c0!==c0.toUpperCase())throw new Error("String must be lowercase or uppercase");const z0=(c0=S0).lastIndexOf("1");if(z0===0||z0===-1)throw new Error('Letter "1" must be present between prefix and data only');const Q0=c0.slice(0,z0),p1=c0.slice(z0+1);if(p1.length<6)throw new Error("Data must be at least 6 characters long");const T1=bv.decode(p1).slice(0,-6),U1=hy(Q0,T1,Qv);if(!p1.endsWith(U1))throw new Error(`Invalid checksum in ${c0}: expected "${U1}"`);return{prefix:Q0,words:T1}}return{encode:function(c0,a0,S0=90){if(typeof c0!="string")throw new Error("bech32.encode prefix should be string, not "+typeof c0);if(!Array.isArray(a0)||a0.length&&typeof a0[0]!="number")throw new Error("bech32.encode words should be array of numbers, not "+typeof a0);const z0=c0.length+7+a0.length;if(S0!==!1&&z0>S0)throw new TypeError(`Length ${z0} exceeds limit ${S0}`);const Q0=c0.toLowerCase(),p1=hy(Q0,a0,Qv);return`${Q0}1${bv.encode(a0)}${p1}`},decode:d0,decodeToBytes:function(c0){const{prefix:a0,words:S0}=d0(c0,!1);return{prefix:a0,words:S0,bytes:X0(S0)}},decodeUnsafe:y1(d0),fromWords:X0,fromWordsUnsafe:g0,toWords:s0}}yt.bech32=oy("bech32"),yt.bech32m=oy("bech32m"),yt.utf8={encode:qv=>new TextDecoder().decode(qv),decode:qv=>new TextEncoder().encode(qv)},yt.hex=ir(q0(4),_c("0123456789abcdef"),mu(""),xu(qv=>{if(typeof qv!="string"||qv.length%2)throw new TypeError(`hex.decode: expected string, got ${typeof qv} with length ${qv.length}`);return qv.toLowerCase()}));const fy={utf8:yt.utf8,hex:yt.hex,base16:yt.base16,base32:yt.base32,base64:yt.base64,base64url:yt.base64url,base58:yt.base58,base58xmr:yt.base58xmr},Fy="Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr";yt.bytesToString=(qv,Qv)=>{if(typeof qv!="string"||!fy.hasOwnProperty(qv))throw new TypeError(Fy);if(!(Qv instanceof Uint8Array))throw new TypeError("bytesToString() expects Uint8Array");return fy[qv].encode(Qv)},yt.str=yt.bytesToString,yt.stringToBytes=(qv,Qv)=>{if(!fy.hasOwnProperty(qv))throw new TypeError(Fy);if(typeof Qv!="string")throw new TypeError("stringToBytes() expects string");return fy[qv].decode(Qv)},yt.bytes=yt.stringToBytes})(iK),Object.defineProperty($$,"__esModule",{value:!0});var q8=DM,pfe=XA,dx=HN,Jne=iK,mfe=48,oK=58,gfe=87,Ome=function(){const yt=[];return()=>{if(yt.length===0)for(let ir=0;ir<256;ir++)yt.push(ir.toString(16).padStart(2,"0"));return yt}}();function Xne(yt){return yt instanceof Uint8Array}function dU(yt){q8.assert.call(void 0,Xne(yt),"Value must be a Uint8Array.")}function Qne(yt){if(dU(yt),yt.length===0)return"0x";const ir=Ome(),_c=new Array(yt.length);for(let mu=0;mul0.call(xu,...B0)),xu=void 0)}return l0}([yt,"optionalAccess",Mu=>Mu.toLowerCase,"optionalCall",Mu=>Mu()])==="0x")return new Uint8Array;aie(yt);const ir=sK(yt).toLowerCase(),_c=ir.length%2==0?ir:`0${ir}`,mu=new Uint8Array(_c.length/2);for(let Mu=0;Mu=BigInt(0),"Value must be a non-negative bigint."),zq(yt.toString(16))}function tie(yt){return q8.assert.call(void 0,typeof yt=="number","Value must be a number."),q8.assert.call(void 0,yt>=0,"Value must be a non-negative number."),q8.assert.call(void 0,Number.isSafeInteger(yt),"Value is not a safe integer. Use `bigIntToBytes` instead."),zq(yt.toString(16))}function aK(yt){return q8.assert.call(void 0,typeof yt=="string","Value must be a string."),new TextEncoder().encode(yt)}function qN(yt){if(typeof yt=="bigint")return eie(yt);if(typeof yt=="number")return tie(yt);if(typeof yt=="string")return yt.startsWith("0x")?zq(yt):aK(yt);if(Xne(yt))return yt;throw new TypeError(`Unsupported value type: "${typeof yt}".`)}var rie=dx.pattern.call(void 0,dx.string.call(void 0),/^(?:0x)?[0-9a-f]+$/iu),nie=dx.pattern.call(void 0,dx.string.call(void 0),/^0x[0-9a-f]+$/iu),Y6=dx.pattern.call(void 0,dx.string.call(void 0),/^0x[0-9a-f]{40}$/u),iie=dx.pattern.call(void 0,dx.string.call(void 0),/^0x[0-9a-fA-F]{40}$/u);function hx(yt){return dx.is.call(void 0,yt,rie)}function oie(yt){return dx.is.call(void 0,yt,nie)}function aie(yt){q8.assert.call(void 0,hx(yt),"Value must be a hexadecimal string.")}function sie(yt){q8.assert.call(void 0,dx.is.call(void 0,yt,iie),"Invalid hex address.");const ir=sK(yt.toLowerCase()),_c=sK(Qne(pfe.keccak_256.call(void 0,ir)));return`0x${ir.split("").map((mu,Mu)=>{const xu=_c[Mu];return q8.assert.call(void 0,dx.is.call(void 0,xu,dx.string.call(void 0)),"Hash shorter than address."),parseInt(xu,16)>7?mu.toUpperCase():mu}).join("")}`}function lie(yt){return!!dx.is.call(void 0,yt,iie)&&sie(yt)===yt}function yfe(yt){return yt.startsWith("0x")?yt:yt.startsWith("0X")?`0x${yt.substring(2)}`:`0x${yt}`}function sK(yt){return yt.startsWith("0x")||yt.startsWith("0X")?yt.substring(2):yt}$$.HexStruct=rie,$$.StrictHexStruct=nie,$$.HexAddressStruct=Y6,$$.HexChecksumAddressStruct=iie,$$.isHexString=hx,$$.isStrictHexString=oie,$$.assertIsHexString=aie,$$.assertIsStrictHexString=function(yt){q8.assert.call(void 0,oie(yt),'Value must be a hexadecimal string, starting with "0x".')},$$.isValidHexAddress=function(yt){return dx.is.call(void 0,yt,Y6)||lie(yt)},$$.getChecksumAddress=sie,$$.isValidChecksumAddress=lie,$$.add0x=yfe,$$.remove0x=sK,$$.isBytes=Xne,$$.assertIsBytes=dU,$$.bytesToHex=Qne,$$.bytesToBigInt=vfe,$$.bytesToSignedBigInt=function(yt){dU(yt);let ir=BigInt(0);for(const _c of yt)ir=(ir<0,"Byte length must be greater than 0."),q8.assert.call(void 0,function(Mu,xu){q8.assert.call(void 0,xu>0);const l0=Mu>>BigInt(31);return!((~Mu&l0)+(Mu&~l0)>>BigInt(8*xu-1))}(yt,ir),"Byte length is too small to represent the given value.");let _c=yt;const mu=new Uint8Array(ir);for(let Mu=0;Mu>=BigInt(8);return mu.reverse()},$$.numberToBytes=tie,$$.stringToBytes=aK,$$.base64ToBytes=function(yt){return q8.assert.call(void 0,typeof yt=="string","Value must be a string."),Jne.base64.decode(yt)},$$.valueToBytes=qN,$$.concatBytes=function(yt){const ir=new Array(yt.length);let _c=0;for(let Mu=0;Mu(UB.assert.call(void 0,typeof yt=="number","Value must be a number."),UB.assert.call(void 0,yt>=0,"Value must be a non-negative number."),UB.assert.call(void 0,Number.isSafeInteger(yt),"Value is not a safe integer. Use `bigIntToHex` instead."),$5.add0x.call(void 0,yt.toString(16))),KH.bigIntToHex=yt=>(UB.assert.call(void 0,typeof yt=="bigint","Value must be a bigint."),UB.assert.call(void 0,yt>=0,"Value must be a non-negative bigint."),$5.add0x.call(void 0,yt.toString(16))),KH.hexToNumber=yt=>{$5.assertIsHexString.call(void 0,yt);const ir=parseInt(yt,16);return UB.assert.call(void 0,Number.isSafeInteger(ir),"Value is not a safe integer. Use `hexToBigInt` instead."),ir},KH.hexToBigInt=yt=>($5.assertIsHexString.call(void 0,yt),BigInt($5.add0x.call(void 0,yt)));var SJ={};Object.defineProperty(SJ,"__esModule",{value:!0}),SJ.createDeferredPromise=function({suppressUnhandledRejection:yt=!1}={}){let ir,_c;const mu=new Promise((Mu,xu)=>{ir=Mu,_c=xu});return yt&&mu.catch(Mu=>{}),{promise:mu,resolve:ir,reject:_c}};var zB={};Object.defineProperty(zB,"__esModule",{value:!0});var cie=(yt=>(yt[yt.Millisecond=1]="Millisecond",yt[yt.Second=1e3]="Second",yt[yt.Minute=6e4]="Minute",yt[yt.Hour=36e5]="Hour",yt[yt.Day=864e5]="Day",yt[yt.Week=6048e5]="Week",yt[yt.Year=31536e6]="Year",yt))(cie||{}),uie=(yt,ir)=>{if(!(_c=>Number.isInteger(_c)&&_c>=0)(yt))throw new Error(`"${ir}" must be a non-negative integer. Received: "${yt}".`)};zB.Duration=cie,zB.inMilliseconds=function(yt,ir){return uie(yt,"count"),yt*ir},zB.timeSince=function(yt){return uie(yt,"timestamp"),Date.now()-yt};var UM={},xJ={exports:{}},Hq={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Kq=typeof Kv=="object"&&Kv.env&&Kv.env.NODE_DEBUG&&/\bsemver\b/i.test(Kv.env.NODE_DEBUG)?(...yt)=>console.error("SEMVER",...yt):()=>{};(function(yt,ir){const{MAX_SAFE_COMPONENT_LENGTH:_c,MAX_SAFE_BUILD_LENGTH:mu,MAX_LENGTH:Mu}=Hq,xu=Kq,l0=(ir=yt.exports={}).re=[],E0=ir.safeRe=[],j0=ir.src=[],M0=ir.t={};let B0=0;const q0="[a-zA-Z0-9-]",y1=[["\\s",1],["\\d",Mu],[q0,mu]],v1=(F1,ov,bv)=>{const gv=(hy=>{for(const[oy,fy]of y1)hy=hy.split(`${oy}*`).join(`${oy}{0,${fy}}`).split(`${oy}+`).join(`${oy}{1,${fy}}`);return hy})(ov),xv=B0++;xu(F1,xv,ov),M0[F1]=xv,j0[xv]=ov,l0[xv]=new RegExp(ov,bv?"g":void 0),E0[xv]=new RegExp(gv,bv?"g":void 0)};v1("NUMERICIDENTIFIER","0|[1-9]\\d*"),v1("NUMERICIDENTIFIERLOOSE","\\d+"),v1("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${q0}*`),v1("MAINVERSION",`(${j0[M0.NUMERICIDENTIFIER]})\\.(${j0[M0.NUMERICIDENTIFIER]})\\.(${j0[M0.NUMERICIDENTIFIER]})`),v1("MAINVERSIONLOOSE",`(${j0[M0.NUMERICIDENTIFIERLOOSE]})\\.(${j0[M0.NUMERICIDENTIFIERLOOSE]})\\.(${j0[M0.NUMERICIDENTIFIERLOOSE]})`),v1("PRERELEASEIDENTIFIER",`(?:${j0[M0.NUMERICIDENTIFIER]}|${j0[M0.NONNUMERICIDENTIFIER]})`),v1("PRERELEASEIDENTIFIERLOOSE",`(?:${j0[M0.NUMERICIDENTIFIERLOOSE]}|${j0[M0.NONNUMERICIDENTIFIER]})`),v1("PRERELEASE",`(?:-(${j0[M0.PRERELEASEIDENTIFIER]}(?:\\.${j0[M0.PRERELEASEIDENTIFIER]})*))`),v1("PRERELEASELOOSE",`(?:-?(${j0[M0.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${j0[M0.PRERELEASEIDENTIFIERLOOSE]})*))`),v1("BUILDIDENTIFIER",`${q0}+`),v1("BUILD",`(?:\\+(${j0[M0.BUILDIDENTIFIER]}(?:\\.${j0[M0.BUILDIDENTIFIER]})*))`),v1("FULLPLAIN",`v?${j0[M0.MAINVERSION]}${j0[M0.PRERELEASE]}?${j0[M0.BUILD]}?`),v1("FULL",`^${j0[M0.FULLPLAIN]}$`),v1("LOOSEPLAIN",`[v=\\s]*${j0[M0.MAINVERSIONLOOSE]}${j0[M0.PRERELEASELOOSE]}?${j0[M0.BUILD]}?`),v1("LOOSE",`^${j0[M0.LOOSEPLAIN]}$`),v1("GTLT","((?:<|>)?=?)"),v1("XRANGEIDENTIFIERLOOSE",`${j0[M0.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),v1("XRANGEIDENTIFIER",`${j0[M0.NUMERICIDENTIFIER]}|x|X|\\*`),v1("XRANGEPLAIN",`[v=\\s]*(${j0[M0.XRANGEIDENTIFIER]})(?:\\.(${j0[M0.XRANGEIDENTIFIER]})(?:\\.(${j0[M0.XRANGEIDENTIFIER]})(?:${j0[M0.PRERELEASE]})?${j0[M0.BUILD]}?)?)?`),v1("XRANGEPLAINLOOSE",`[v=\\s]*(${j0[M0.XRANGEIDENTIFIERLOOSE]})(?:\\.(${j0[M0.XRANGEIDENTIFIERLOOSE]})(?:\\.(${j0[M0.XRANGEIDENTIFIERLOOSE]})(?:${j0[M0.PRERELEASELOOSE]})?${j0[M0.BUILD]}?)?)?`),v1("XRANGE",`^${j0[M0.GTLT]}\\s*${j0[M0.XRANGEPLAIN]}$`),v1("XRANGELOOSE",`^${j0[M0.GTLT]}\\s*${j0[M0.XRANGEPLAINLOOSE]}$`),v1("COERCE",`(^|[^\\d])(\\d{1,${_c}})(?:\\.(\\d{1,${_c}}))?(?:\\.(\\d{1,${_c}}))?(?:$|[^\\d])`),v1("COERCERTL",j0[M0.COERCE],!0),v1("LONETILDE","(?:~>?)"),v1("TILDETRIM",`(\\s*)${j0[M0.LONETILDE]}\\s+`,!0),ir.tildeTrimReplace="$1~",v1("TILDE",`^${j0[M0.LONETILDE]}${j0[M0.XRANGEPLAIN]}$`),v1("TILDELOOSE",`^${j0[M0.LONETILDE]}${j0[M0.XRANGEPLAINLOOSE]}$`),v1("LONECARET","(?:\\^)"),v1("CARETTRIM",`(\\s*)${j0[M0.LONECARET]}\\s+`,!0),ir.caretTrimReplace="$1^",v1("CARET",`^${j0[M0.LONECARET]}${j0[M0.XRANGEPLAIN]}$`),v1("CARETLOOSE",`^${j0[M0.LONECARET]}${j0[M0.XRANGEPLAINLOOSE]}$`),v1("COMPARATORLOOSE",`^${j0[M0.GTLT]}\\s*(${j0[M0.LOOSEPLAIN]})$|^$`),v1("COMPARATOR",`^${j0[M0.GTLT]}\\s*(${j0[M0.FULLPLAIN]})$|^$`),v1("COMPARATORTRIM",`(\\s*)${j0[M0.GTLT]}\\s*(${j0[M0.LOOSEPLAIN]}|${j0[M0.XRANGEPLAIN]})`,!0),ir.comparatorTrimReplace="$1$2$3",v1("HYPHENRANGE",`^\\s*(${j0[M0.XRANGEPLAIN]})\\s+-\\s+(${j0[M0.XRANGEPLAIN]})\\s*$`),v1("HYPHENRANGELOOSE",`^\\s*(${j0[M0.XRANGEPLAINLOOSE]})\\s+-\\s+(${j0[M0.XRANGEPLAINLOOSE]})\\s*$`),v1("STAR","(<|>)?=?\\s*\\*"),v1("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),v1("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(xJ,xJ.exports);var lK=xJ.exports;const fie=Object.freeze({loose:!0}),bfe=Object.freeze({});var kJ=yt=>yt?typeof yt!="object"?fie:yt:bfe;const die=/^[0-9]+$/,hie=(yt,ir)=>{const _c=die.test(yt),mu=die.test(ir);return _c&&mu&&(yt=+yt,ir=+ir),yt===ir?0:_c&&!mu?-1:mu&&!_c?1:ythie(ir,yt)};const Vq=Kq,{MAX_LENGTH:qq,MAX_SAFE_INTEGER:HB}=Hq,{safeRe:hU,t:CJ}=lK,Wq=kJ,{compareIdentifiers:pU}=pie;var px=class eF{constructor(ir,_c){if(_c=Wq(_c),ir instanceof eF){if(ir.loose===!!_c.loose&&ir.includePrerelease===!!_c.includePrerelease)return ir;ir=ir.version}else if(typeof ir!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof ir}".`);if(ir.length>qq)throw new TypeError(`version is longer than ${qq} characters`);Vq("SemVer",ir,_c),this.options=_c,this.loose=!!_c.loose,this.includePrerelease=!!_c.includePrerelease;const mu=ir.trim().match(_c.loose?hU[CJ.LOOSE]:hU[CJ.FULL]);if(!mu)throw new TypeError(`Invalid Version: ${ir}`);if(this.raw=ir,this.major=+mu[1],this.minor=+mu[2],this.patch=+mu[3],this.major>HB||this.major<0)throw new TypeError("Invalid major version");if(this.minor>HB||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>HB||this.patch<0)throw new TypeError("Invalid patch version");mu[4]?this.prerelease=mu[4].split(".").map(Mu=>{if(/^[0-9]+$/.test(Mu)){const xu=+Mu;if(xu>=0&&xu=0;)typeof this.prerelease[xu]=="number"&&(this.prerelease[xu]++,xu=-2);if(xu===-1){if(_c===this.prerelease.join(".")&&mu===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(Mu)}}if(_c){let xu=[_c,Mu];mu===!1&&(xu=[_c]),pU(this.prerelease[0],_c)===0?isNaN(this.prerelease[1])&&(this.prerelease=xu):this.prerelease=xu}break}default:throw new Error(`invalid increment argument: ${ir}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};const zM=px;var KB=(yt,ir,_c=!1)=>{if(yt instanceof zM)return yt;try{return new zM(yt,ir)}catch(mu){if(!_c)return null;throw mu}};const TJ=KB,RJ=KB,cK=px,wfe=KB,Pme=px,mie=px,$fe=px,Efe=KB,gie=px;var cT=(yt,ir,_c)=>new gie(yt,_c).compare(new gie(ir,_c));const Afe=cT,MJ=cT,vie=px;var IJ=(yt,ir,_c)=>{const mu=new vie(yt,_c),Mu=new vie(ir,_c);return mu.compare(Mu)||mu.compareBuild(Mu)};const jme=IJ,uK=IJ,dC=cT;var Gq=(yt,ir,_c)=>dC(yt,ir,_c)>0;const fK=cT;var yie=(yt,ir,_c)=>fK(yt,ir,_c)<0;const Nme=cT;var _fe=(yt,ir,_c)=>Nme(yt,ir,_c)===0;const Lme=cT;var bie=(yt,ir,_c)=>Lme(yt,ir,_c)!==0;const Bme=cT;var OJ=(yt,ir,_c)=>Bme(yt,ir,_c)>=0;const Dme=cT;var wie=(yt,ir,_c)=>Dme(yt,ir,_c)<=0;const Fme=_fe,Ume=bie,zme=Gq,Hme=OJ,Kme=yie,Vme=wie;var Sfe=(yt,ir,_c,mu)=>{switch(ir){case"===":return typeof yt=="object"&&(yt=yt.version),typeof _c=="object"&&(_c=_c.version),yt===_c;case"!==":return typeof yt=="object"&&(yt=yt.version),typeof _c=="object"&&(_c=_c.version),yt!==_c;case"":case"=":case"==":return Fme(yt,_c,mu);case"!=":return Ume(yt,_c,mu);case">":return zme(yt,_c,mu);case">=":return Hme(yt,_c,mu);case"<":return Kme(yt,_c,mu);case"<=":return Vme(yt,_c,mu);default:throw new TypeError(`Invalid operator: ${ir}`)}};const xfe=px,E5=KB,{safeRe:PJ,t:jJ}=lK;var kfe,Cfe,NJ,LJ,$ie,Tfe,Eie,Rfe,Aie,Yq;function A5(){if(Rfe)return Eie;Rfe=1;class yt{constructor(c0,a0){if(a0=mu(a0),c0 instanceof yt)return c0.loose===!!a0.loose&&c0.includePrerelease===!!a0.includePrerelease?c0:new yt(c0.raw,a0);if(c0 instanceof Mu)return this.raw=c0.value,this.set=[[c0]],this.format(),this;if(this.options=a0,this.loose=!!a0.loose,this.includePrerelease=!!a0.includePrerelease,this.raw=c0.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(S0=>this.parseRange(S0.trim())).filter(S0=>S0.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const S0=this.set[0];if(this.set=this.set.filter(z0=>!F1(z0[0])),this.set.length===0)this.set=[S0];else if(this.set.length>1){for(const z0 of this.set)if(z0.length===1&&ov(z0[0])){this.set=[z0];break}}}this.format()}format(){return this.range=this.set.map(c0=>c0.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(c0){const a0=((this.options.includePrerelease&&y1)|(this.options.loose&&v1))+":"+c0,S0=_c.get(a0);if(S0)return S0;const z0=this.options.loose,Q0=z0?E0[j0.HYPHENRANGELOOSE]:E0[j0.HYPHENRANGE];c0=c0.replace(Q0,s0(this.options.includePrerelease)),xu("hyphen replace",c0),c0=c0.replace(E0[j0.COMPARATORTRIM],M0),xu("comparator trim",c0),c0=c0.replace(E0[j0.TILDETRIM],B0),xu("tilde trim",c0),c0=c0.replace(E0[j0.CARETTRIM],q0),xu("caret trim",c0);let p1=c0.split(" ").map(n1=>gv(n1,this.options)).join(" ").split(/\s+/).map(n1=>X0(n1,this.options));z0&&(p1=p1.filter(n1=>(xu("loose invalid filter",n1,this.options),!!n1.match(E0[j0.COMPARATORLOOSE])))),xu("range list",p1);const T1=new Map,U1=p1.map(n1=>new Mu(n1,this.options));for(const n1 of U1){if(F1(n1))return[n1];T1.set(n1.value,n1)}T1.size>1&&T1.has("")&&T1.delete("");const S1=[...T1.values()];return _c.set(a0,S1),S1}intersects(c0,a0){if(!(c0 instanceof yt))throw new TypeError("a Range is required");return this.set.some(S0=>bv(S0,a0)&&c0.set.some(z0=>bv(z0,a0)&&S0.every(Q0=>z0.every(p1=>Q0.intersects(p1,a0)))))}test(c0){if(!c0)return!1;if(typeof c0=="string")try{c0=new l0(c0,this.options)}catch{return!1}for(let a0=0;a00)for(var cy=0,Uy=arguments.length;cy1)cy=iy;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");Uy=this.head.next,cy=this.head.value}for(var r2=0;Uy!==null;r2++)cy=Fv(cy,Uy.value,r2),Uy=Uy.next;return cy},yv.prototype.reduceReverse=function(Fv,iy){var cy,Uy=this.tail;if(arguments.length>1)cy=iy;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");Uy=this.tail.prev,cy=this.tail.value}for(var r2=this.length-1;Uy!==null;r2--)cy=Fv(cy,Uy.value,r2),Uy=Uy.prev;return cy},yv.prototype.toArray=function(){for(var Fv=new Array(this.length),iy=0,cy=this.head;cy!==null;iy++)Fv[iy]=cy.value,cy=cy.next;return Fv},yv.prototype.toArrayReverse=function(){for(var Fv=new Array(this.length),iy=0,cy=this.tail;cy!==null;iy++)Fv[iy]=cy.value,cy=cy.prev;return Fv},yv.prototype.slice=function(Fv,iy){(iy=iy||this.length)<0&&(iy+=this.length),(Fv=Fv||0)<0&&(Fv+=this.length);var cy=new yv;if(iythis.length&&(iy=this.length);for(var Uy=0,r2=this.head;r2!==null&&Uythis.length&&(iy=this.length);for(var Uy=this.length,r2=this.tail;r2!==null&&Uy>iy;Uy--)r2=r2.prev;for(;r2!==null&&Uy>Fv;Uy--,r2=r2.prev)cy.push(r2.value);return cy},yv.prototype.splice=function(Fv,iy,...cy){Fv>this.length&&(Fv=this.length-1),Fv<0&&(Fv=this.length+Fv);for(var Uy=0,r2=this.head;r2!==null&&Uy1,J1=(yv,Av,Dv)=>{const ry=yv[S1].get(Av);if(ry){const Jv=ry.value;if(wv(yv,Jv)){if(Hv(yv,ry),!yv[z0])return}else Dv&&(yv[n1]&&(ry.value.now=Date.now()),yv[U1].unshiftNode(ry));return Jv.value}},wv=(yv,Av)=>{if(!Av||!Av.maxAge&&!yv[Q0])return!1;const Dv=Date.now()-Av.now;return Av.maxAge?Dv>Av.maxAge:yv[Q0]&&Dv>yv[Q0]},Sv=yv=>{if(yv[a0]>yv[c0])for(let Av=yv[U1].tail;yv[a0]>yv[c0]&&Av!==null;){const Dv=Av.prev;Hv(yv,Av),Av=Dv}},Hv=(yv,Av)=>{if(Av){const Dv=Av.value;yv[p1]&&yv[p1](Dv.key,Dv.value),yv[a0]-=Dv.length,yv[S1].delete(Dv.key),yv[U1].removeNode(Av)}};class ty{constructor(Av,Dv,ry,Jv,Fv){this.key=Av,this.value=Dv,this.length=ry,this.now=Jv,this.maxAge=Fv||0}}const gy=(yv,Av,Dv,ry)=>{let Jv=Dv.value;wv(yv,Jv)&&(Hv(yv,Dv),yv[z0]||(Jv=void 0)),Jv&&Av.call(ry,Jv.value,Jv.key,yv)};return $ie=class{constructor(yv){if(typeof yv=="number"&&(yv={max:yv}),yv||(yv={}),yv.max&&(typeof yv.max!="number"||yv.max<0))throw new TypeError("max must be a non-negative number");this[c0]=yv.max||1/0;const Av=yv.length||V1;if(this[S0]=typeof Av!="function"?V1:Av,this[z0]=yv.stale||!1,yv.maxAge&&typeof yv.maxAge!="number")throw new TypeError("maxAge must be a number");this[Q0]=yv.maxAge||0,this[p1]=yv.dispose,this[T1]=yv.noDisposeOnSet||!1,this[n1]=yv.updateAgeOnGet||!1,this.reset()}set max(yv){if(typeof yv!="number"||yv<0)throw new TypeError("max must be a non-negative number");this[c0]=yv||1/0,Sv(this)}get max(){return this[c0]}set allowStale(yv){this[z0]=!!yv}get allowStale(){return this[z0]}set maxAge(yv){if(typeof yv!="number")throw new TypeError("maxAge must be a non-negative number");this[Q0]=yv,Sv(this)}get maxAge(){return this[Q0]}set lengthCalculator(yv){typeof yv!="function"&&(yv=V1),yv!==this[S0]&&(this[S0]=yv,this[a0]=0,this[U1].forEach(Av=>{Av.length=this[S0](Av.value,Av.key),this[a0]+=Av.length})),Sv(this)}get lengthCalculator(){return this[S0]}get length(){return this[a0]}get itemCount(){return this[U1].length}rforEach(yv,Av){Av=Av||this;for(let Dv=this[U1].tail;Dv!==null;){const ry=Dv.prev;gy(this,yv,Dv,Av),Dv=ry}}forEach(yv,Av){Av=Av||this;for(let Dv=this[U1].head;Dv!==null;){const ry=Dv.next;gy(this,yv,Dv,Av),Dv=ry}}keys(){return this[U1].toArray().map(yv=>yv.key)}values(){return this[U1].toArray().map(yv=>yv.value)}reset(){this[p1]&&this[U1]&&this[U1].length&&this[U1].forEach(yv=>this[p1](yv.key,yv.value)),this[S1]=new Map,this[U1]=new d0,this[a0]=0}dump(){return this[U1].map(yv=>!wv(this,yv)&&{k:yv.key,v:yv.value,e:yv.now+(yv.maxAge||0)}).toArray().filter(yv=>yv)}dumpLru(){return this[U1]}set(yv,Av,Dv){if((Dv=Dv||this[Q0])&&typeof Dv!="number")throw new TypeError("maxAge must be a number");const ry=Dv?Date.now():0,Jv=this[S0](Av,yv);if(this[S1].has(yv)){if(Jv>this[c0])return Hv(this,this[S1].get(yv)),!1;const iy=this[S1].get(yv).value;return this[p1]&&(this[T1]||this[p1](yv,iy.value)),iy.now=ry,iy.maxAge=Dv,iy.value=Av,this[a0]+=Jv-iy.length,iy.length=Jv,this.get(yv),Sv(this),!0}const Fv=new ty(yv,Av,Jv,ry,Dv);return Fv.length>this[c0]?(this[p1]&&this[p1](yv,Av),!1):(this[a0]+=Fv.length,this[U1].unshift(Fv),this[S1].set(yv,this[U1].head),Sv(this),!0)}has(yv){if(!this[S1].has(yv))return!1;const Av=this[S1].get(yv).value;return!wv(this,Av)}get(yv){return J1(this,yv,!0)}peek(yv){return J1(this,yv,!1)}pop(){const yv=this[U1].tail;return yv?(Hv(this,yv),yv.value):null}del(yv){Hv(this,this[S1].get(yv))}load(yv){this.reset();const Av=Date.now();for(let Dv=yv.length-1;Dv>=0;Dv--){const ry=yv[Dv],Jv=ry.e||0;if(Jv===0)this.set(ry.k,ry.v);else{const Fv=Jv-Av;Fv>0&&this.set(ry.k,ry.v,Fv)}}}prune(){this[S1].forEach((yv,Av)=>J1(this,Av,!1))}},$ie}(),_c=new ir({max:1e3}),mu=kJ,Mu=dK(),xu=Kq,l0=px,{safeRe:E0,t:j0,comparatorTrimReplace:M0,tildeTrimReplace:B0,caretTrimReplace:q0}=lK,{FLAG_INCLUDE_PRERELEASE:y1,FLAG_LOOSE:v1}=Hq,F1=d0=>d0.value==="<0.0.0-0",ov=d0=>d0.value==="",bv=(d0,c0)=>{let a0=!0;const S0=d0.slice();let z0=S0.pop();for(;a0&&S0.length;)a0=S0.every(Q0=>z0.intersects(Q0,c0)),z0=S0.pop();return a0},gv=(d0,c0)=>(xu("comp",d0,c0),d0=fy(d0,c0),xu("caret",d0),d0=hy(d0,c0),xu("tildes",d0),d0=qv(d0,c0),xu("xrange",d0),d0=T0(d0,c0),xu("stars",d0),d0),xv=d0=>!d0||d0.toLowerCase()==="x"||d0==="*",hy=(d0,c0)=>d0.trim().split(/\s+/).map(a0=>oy(a0,c0)).join(" "),oy=(d0,c0)=>{const a0=c0.loose?E0[j0.TILDELOOSE]:E0[j0.TILDE];return d0.replace(a0,(S0,z0,Q0,p1,T1)=>{let U1;return xu("tilde",d0,S0,z0,Q0,p1,T1),xv(z0)?U1="":xv(Q0)?U1=`>=${z0}.0.0 <${+z0+1}.0.0-0`:xv(p1)?U1=`>=${z0}.${Q0}.0 <${z0}.${+Q0+1}.0-0`:T1?(xu("replaceTilde pr",T1),U1=`>=${z0}.${Q0}.${p1}-${T1} <${z0}.${+Q0+1}.0-0`):U1=`>=${z0}.${Q0}.${p1} <${z0}.${+Q0+1}.0-0`,xu("tilde return",U1),U1})},fy=(d0,c0)=>d0.trim().split(/\s+/).map(a0=>Fy(a0,c0)).join(" "),Fy=(d0,c0)=>{xu("caret",d0,c0);const a0=c0.loose?E0[j0.CARETLOOSE]:E0[j0.CARET],S0=c0.includePrerelease?"-0":"";return d0.replace(a0,(z0,Q0,p1,T1,U1)=>{let S1;return xu("caret",d0,z0,Q0,p1,T1,U1),xv(Q0)?S1="":xv(p1)?S1=`>=${Q0}.0.0${S0} <${+Q0+1}.0.0-0`:xv(T1)?S1=Q0==="0"?`>=${Q0}.${p1}.0${S0} <${Q0}.${+p1+1}.0-0`:`>=${Q0}.${p1}.0${S0} <${+Q0+1}.0.0-0`:U1?(xu("replaceCaret pr",U1),S1=Q0==="0"?p1==="0"?`>=${Q0}.${p1}.${T1}-${U1} <${Q0}.${p1}.${+T1+1}-0`:`>=${Q0}.${p1}.${T1}-${U1} <${Q0}.${+p1+1}.0-0`:`>=${Q0}.${p1}.${T1}-${U1} <${+Q0+1}.0.0-0`):(xu("no pr"),S1=Q0==="0"?p1==="0"?`>=${Q0}.${p1}.${T1}${S0} <${Q0}.${p1}.${+T1+1}-0`:`>=${Q0}.${p1}.${T1}${S0} <${Q0}.${+p1+1}.0-0`:`>=${Q0}.${p1}.${T1} <${+Q0+1}.0.0-0`),xu("caret return",S1),S1})},qv=(d0,c0)=>(xu("replaceXRanges",d0,c0),d0.split(/\s+/).map(a0=>Qv(a0,c0)).join(" ")),Qv=(d0,c0)=>{d0=d0.trim();const a0=c0.loose?E0[j0.XRANGELOOSE]:E0[j0.XRANGE];return d0.replace(a0,(S0,z0,Q0,p1,T1,U1)=>{xu("xRange",d0,S0,z0,Q0,p1,T1,U1);const S1=xv(Q0),n1=S1||xv(p1),V1=n1||xv(T1),J1=V1;return z0==="="&&J1&&(z0=""),U1=c0.includePrerelease?"-0":"",S1?S0=z0===">"||z0==="<"?"<0.0.0-0":"*":z0&&J1?(n1&&(p1=0),T1=0,z0===">"?(z0=">=",n1?(Q0=+Q0+1,p1=0,T1=0):(p1=+p1+1,T1=0)):z0==="<="&&(z0="<",n1?Q0=+Q0+1:p1=+p1+1),z0==="<"&&(U1="-0"),S0=`${z0+Q0}.${p1}.${T1}${U1}`):n1?S0=`>=${Q0}.0.0${U1} <${+Q0+1}.0.0-0`:V1&&(S0=`>=${Q0}.${p1}.0${U1} <${Q0}.${+p1+1}.0-0`),xu("xRange return",S0),S0})},T0=(d0,c0)=>(xu("replaceStars",d0,c0),d0.trim().replace(E0[j0.STAR],"")),X0=(d0,c0)=>(xu("replaceGTE0",d0,c0),d0.trim().replace(E0[c0.includePrerelease?j0.GTE0PRE:j0.GTE0],"")),s0=d0=>(c0,a0,S0,z0,Q0,p1,T1,U1,S1,n1,V1,J1,wv)=>`${a0=xv(S0)?"":xv(z0)?`>=${S0}.0.0${d0?"-0":""}`:xv(Q0)?`>=${S0}.${z0}.0${d0?"-0":""}`:p1?`>=${a0}`:`>=${a0}${d0?"-0":""}`} ${U1=xv(S1)?"":xv(n1)?`<${+S1+1}.0.0-0`:xv(V1)?`<${S1}.${+n1+1}.0-0`:J1?`<=${S1}.${n1}.${V1}-${J1}`:d0?`<${S1}.${n1}.${+V1+1}-0`:`<=${U1}`}`.trim(),g0=(d0,c0,a0)=>{for(let S0=0;S00){const z0=d0[S0].semver;if(z0.major===c0.major&&z0.minor===c0.minor&&z0.patch===c0.patch)return!0}return!1}return!0};return Eie}function dK(){if(Yq)return Aie;Yq=1;const yt=Symbol("SemVer ANY");class ir{static get ANY(){return yt}constructor(B0,q0){if(q0=_c(q0),B0 instanceof ir){if(B0.loose===!!q0.loose)return B0;B0=B0.value}B0=B0.trim().split(/\s+/).join(" "),l0("comparator",B0,q0),this.options=q0,this.loose=!!q0.loose,this.parse(B0),this.semver===yt?this.value="":this.value=this.operator+this.semver.version,l0("comp",this)}parse(B0){const q0=this.options.loose?mu[Mu.COMPARATORLOOSE]:mu[Mu.COMPARATOR],y1=B0.match(q0);if(!y1)throw new TypeError(`Invalid comparator: ${B0}`);this.operator=y1[1]!==void 0?y1[1]:"",this.operator==="="&&(this.operator=""),y1[2]?this.semver=new E0(y1[2],this.options.loose):this.semver=yt}toString(){return this.value}test(B0){if(l0("Comparator.test",B0,this.options.loose),this.semver===yt||B0===yt)return!0;if(typeof B0=="string")try{B0=new E0(B0,this.options)}catch{return!1}return xu(B0,this.operator,this.semver,this.options)}intersects(B0,q0){if(!(B0 instanceof ir))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""||new j0(B0.value,q0).test(this.value):B0.operator===""?B0.value===""||new j0(this.value,q0).test(B0.semver):!((q0=_c(q0)).includePrerelease&&(this.value==="<0.0.0-0"||B0.value==="<0.0.0-0")||!q0.includePrerelease&&(this.value.startsWith("<0.0.0")||B0.value.startsWith("<0.0.0"))||(!this.operator.startsWith(">")||!B0.operator.startsWith(">"))&&(!this.operator.startsWith("<")||!B0.operator.startsWith("<"))&&(this.semver.version!==B0.semver.version||!this.operator.includes("=")||!B0.operator.includes("="))&&!(xu(this.semver,"<",B0.semver,q0)&&this.operator.startsWith(">")&&B0.operator.startsWith("<"))&&!(xu(this.semver,">",B0.semver,q0)&&this.operator.startsWith("<")&&B0.operator.startsWith(">")))}}Aie=ir;const _c=kJ,{safeRe:mu,t:Mu}=lK,xu=Sfe,l0=Kq,E0=px,j0=A5();return Aie}const qme=A5();var Zq=(yt,ir,_c)=>{try{ir=new qme(ir,_c)}catch{return!1}return ir.test(yt)};const Wme=A5(),Mfe=px,Gme=A5(),_ie=px,Yme=A5(),Jq=px,Zme=A5(),Ife=Gq,Jme=A5(),Xme=px,Ofe=dK(),{ANY:Qme}=Ofe,Pfe=A5(),ege=Zq,jfe=Gq,Xq=yie,BJ=wie,Nfe=OJ;var DJ=(yt,ir,_c,mu)=>{let Mu,xu,l0,E0,j0;switch(yt=new Xme(yt,mu),ir=new Pfe(ir,mu),_c){case">":Mu=jfe,xu=BJ,l0=Xq,E0=">",j0=">=";break;case"<":Mu=Xq,xu=Nfe,l0=jfe,E0="<",j0="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ege(yt,ir,mu))return!1;for(let M0=0;M0{v1.semver===Qme&&(v1=new Ofe(">=0.0.0")),q0=q0||v1,y1=y1||v1,Mu(v1.semver,q0.semver,mu)?q0=v1:l0(v1.semver,y1.semver,mu)&&(y1=v1)}),q0.operator===E0||q0.operator===j0||(!y1.operator||y1.operator===E0)&&xu(yt,y1.semver)||y1.operator===j0&&l0(yt,y1.semver))return!1}return!0};const Sie=DJ,Lfe=DJ,FJ=A5(),Bfe=Zq,xie=cT,kie=A5(),Qq=dK(),{ANY:UJ}=Qq,eW=Zq,Cie=cT,_5=[new Qq(">=0.0.0-0")],tW=[new Qq(">=0.0.0")],tge=(yt,ir,_c)=>{if(yt===ir)return!0;if(yt.length===1&&yt[0].semver===UJ){if(ir.length===1&&ir[0].semver===UJ)return!0;yt=_c.includePrerelease?_5:tW}if(ir.length===1&&ir[0].semver===UJ){if(_c.includePrerelease)return!0;ir=tW}const mu=new Set;let Mu,xu,l0,E0,j0,M0,B0;for(const v1 of yt)v1.operator===">"||v1.operator===">="?Mu=rW(Mu,v1,_c):v1.operator==="<"||v1.operator==="<="?xu=Dfe(xu,v1,_c):mu.add(v1.semver);if(mu.size>1||Mu&&xu&&(l0=Cie(Mu.semver,xu.semver,_c),l0>0||l0===0&&(Mu.operator!==">="||xu.operator!=="<=")))return null;for(const v1 of mu){if(Mu&&!eW(v1,String(Mu),_c)||xu&&!eW(v1,String(xu),_c))return null;for(const F1 of ir)if(!eW(v1,String(F1),_c))return!1;return!0}let q0=!(!xu||_c.includePrerelease||!xu.semver.prerelease.length)&&xu.semver,y1=!(!Mu||_c.includePrerelease||!Mu.semver.prerelease.length)&&Mu.semver;q0&&q0.prerelease.length===1&&xu.operator==="<"&&q0.prerelease[0]===0&&(q0=!1);for(const v1 of ir){if(B0=B0||v1.operator===">"||v1.operator===">=",M0=M0||v1.operator==="<"||v1.operator==="<=",Mu){if(y1&&v1.semver.prerelease&&v1.semver.prerelease.length&&v1.semver.major===y1.major&&v1.semver.minor===y1.minor&&v1.semver.patch===y1.patch&&(y1=!1),v1.operator===">"||v1.operator===">="){if(E0=rW(Mu,v1,_c),E0===v1&&E0!==Mu)return!1}else if(Mu.operator===">="&&!eW(Mu.semver,String(v1),_c))return!1}if(xu){if(q0&&v1.semver.prerelease&&v1.semver.prerelease.length&&v1.semver.major===q0.major&&v1.semver.minor===q0.minor&&v1.semver.patch===q0.patch&&(q0=!1),v1.operator==="<"||v1.operator==="<="){if(j0=Dfe(xu,v1,_c),j0===v1&&j0!==xu)return!1}else if(xu.operator==="<="&&!eW(xu.semver,String(v1),_c))return!1}if(!v1.operator&&(xu||Mu)&&l0!==0)return!1}return!(Mu&&M0&&!xu&&l0!==0||xu&&B0&&!Mu&&l0!==0||y1||q0)},rW=(yt,ir,_c)=>{if(!yt)return ir;const mu=Cie(yt.semver,ir.semver,_c);return mu>0?yt:mu<0||ir.operator===">"&&yt.operator===">="?ir:yt},Dfe=(yt,ir,_c)=>{if(!yt)return ir;const mu=Cie(yt.semver,ir.semver,_c);return mu<0?yt:mu>0||ir.operator==="<"&&yt.operator==="<="?ir:yt},Tie=lK,Ffe=Hq,rge=px,Ufe=pie;var nge={parse:KB,valid:(yt,ir)=>{const _c=TJ(yt,ir);return _c?_c.version:null},clean:(yt,ir)=>{const _c=RJ(yt.trim().replace(/^[=v]+/,""),ir);return _c?_c.version:null},inc:(yt,ir,_c,mu,Mu)=>{typeof _c=="string"&&(Mu=mu,mu=_c,_c=void 0);try{return new cK(yt instanceof cK?yt.version:yt,_c).inc(ir,mu,Mu).version}catch{return null}},diff:(yt,ir)=>{const _c=wfe(yt,null,!0),mu=wfe(ir,null,!0),Mu=_c.compare(mu);if(Mu===0)return null;const xu=Mu>0,l0=xu?_c:mu,E0=xu?mu:_c,j0=!!l0.prerelease.length;if(E0.prerelease.length&&!j0)return E0.patch||E0.minor?l0.patch?"patch":l0.minor?"minor":"major":"major";const M0=j0?"pre":"";return _c.major!==mu.major?M0+"major":_c.minor!==mu.minor?M0+"minor":_c.patch!==mu.patch?M0+"patch":"prerelease"},major:(yt,ir)=>new Pme(yt,ir).major,minor:(yt,ir)=>new mie(yt,ir).minor,patch:(yt,ir)=>new $fe(yt,ir).patch,prerelease:(yt,ir)=>{const _c=Efe(yt,ir);return _c&&_c.prerelease.length?_c.prerelease:null},compare:cT,rcompare:(yt,ir,_c)=>Afe(ir,yt,_c),compareLoose:(yt,ir)=>MJ(yt,ir,!0),compareBuild:IJ,sort:(yt,ir)=>yt.sort((_c,mu)=>jme(_c,mu,ir)),rsort:(yt,ir)=>yt.sort((_c,mu)=>uK(mu,_c,ir)),gt:Gq,lt:yie,eq:_fe,neq:bie,gte:OJ,lte:wie,cmp:Sfe,coerce:(yt,ir)=>{if(yt instanceof xfe)return yt;if(typeof yt=="number"&&(yt=String(yt)),typeof yt!="string")return null;let _c=null;if((ir=ir||{}).rtl){let mu;for(;(mu=PJ[jJ.COERCERTL].exec(yt))&&(!_c||_c.index+_c[0].length!==yt.length);)_c&&mu.index+mu[0].length===_c.index+_c[0].length||(_c=mu),PJ[jJ.COERCERTL].lastIndex=mu.index+mu[1].length+mu[2].length;PJ[jJ.COERCERTL].lastIndex=-1}else _c=yt.match(PJ[jJ.COERCE]);return _c===null?null:E5(`${_c[2]}.${_c[3]||"0"}.${_c[4]||"0"}`,ir)},Comparator:dK(),Range:A5(),satisfies:Zq,toComparators:(yt,ir)=>new Wme(yt,ir).set.map(_c=>_c.map(mu=>mu.value).join(" ").trim().split(" ")),maxSatisfying:(yt,ir,_c)=>{let mu=null,Mu=null,xu=null;try{xu=new Gme(ir,_c)}catch{return null}return yt.forEach(l0=>{xu.test(l0)&&(mu&&Mu.compare(l0)!==-1||(mu=l0,Mu=new Mfe(mu,_c)))}),mu},minSatisfying:(yt,ir,_c)=>{let mu=null,Mu=null,xu=null;try{xu=new Yme(ir,_c)}catch{return null}return yt.forEach(l0=>{xu.test(l0)&&(mu&&Mu.compare(l0)!==1||(mu=l0,Mu=new _ie(mu,_c)))}),mu},minVersion:(yt,ir)=>{yt=new Zme(yt,ir);let _c=new Jq("0.0.0");if(yt.test(_c)||(_c=new Jq("0.0.0-0"),yt.test(_c)))return _c;_c=null;for(let mu=0;mu{const E0=new Jq(l0.semver.version);switch(l0.operator){case">":E0.prerelease.length===0?E0.patch++:E0.prerelease.push(0),E0.raw=E0.format();case"":case">=":xu&&!Ife(E0,xu)||(xu=E0);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${l0.operator}`)}}),!xu||_c&&!Ife(_c,xu)||(_c=xu)}return _c&&yt.test(_c)?_c:null},validRange:(yt,ir)=>{try{return new Jme(yt,ir).range||"*"}catch{return null}},outside:DJ,gtr:(yt,ir,_c)=>Sie(yt,ir,">",_c),ltr:(yt,ir,_c)=>Lfe(yt,ir,"<",_c),intersects:(yt,ir,_c)=>(yt=new FJ(yt,_c),ir=new FJ(ir,_c),yt.intersects(ir,_c)),simplifyRange:(yt,ir,_c)=>{const mu=[];let Mu=null,xu=null;const l0=yt.sort((B0,q0)=>xie(B0,q0,_c));for(const B0 of l0)Bfe(B0,ir,_c)?(xu=B0,Mu||(Mu=B0)):(xu&&mu.push([Mu,xu]),xu=null,Mu=null);Mu&&mu.push([Mu,null]);const E0=[];for(const[B0,q0]of mu)B0===q0?E0.push(B0):q0||B0!==l0[0]?q0?B0===l0[0]?E0.push(`<=${q0}`):E0.push(`${B0} - ${q0}`):E0.push(`>=${B0}`):E0.push("*");const j0=E0.join(" || "),M0=typeof ir.raw=="string"?ir.raw:String(ir);return j0.length{if(yt===ir)return!0;yt=new kie(yt,_c),ir=new kie(ir,_c);let mu=!1;e:for(const Mu of yt.set){for(const xu of ir.set){const l0=tge(Mu,xu,_c);if(mu=mu||l0!==null,l0)continue e}if(mu)return!1}return!0},SemVer:rge,re:Tie.re,src:Tie.src,tokens:Tie.t,SEMVER_SPEC_VERSION:Ffe.SEMVER_SPEC_VERSION,RELEASE_TYPES:Ffe.RELEASE_TYPES,compareIdentifiers:Ufe.compareIdentifiers,rcompareIdentifiers:Ufe.rcompareIdentifiers};Object.defineProperty(UM,"__esModule",{value:!0});var zfe=DM,nW=nge,VB=HN,Rie=VB.refine.call(void 0,VB.string.call(void 0),"Version",yt=>nW.valid.call(void 0,yt)!==null||`Expected SemVer version, got "${yt}"`),zJ=VB.refine.call(void 0,VB.string.call(void 0),"Version range",yt=>nW.validRange.call(void 0,yt)!==null||`Expected SemVer range, got "${yt}"`);UM.VersionStruct=Rie,UM.VersionRangeStruct=zJ,UM.isValidSemVerVersion=function(yt){return VB.is.call(void 0,yt,Rie)},UM.isValidSemVerRange=function(yt){return VB.is.call(void 0,yt,zJ)},UM.assertIsSemVerVersion=function(yt){zfe.assertStruct.call(void 0,yt,Rie)},UM.assertIsSemVerRange=function(yt){zfe.assertStruct.call(void 0,yt,zJ)},UM.gtVersion=function(yt,ir){return nW.gt.call(void 0,yt,ir)},UM.gtRange=function(yt,ir){return nW.gtr.call(void 0,yt,ir)},UM.satisfiesVersionRange=function(yt,ir){return nW.satisfies.call(void 0,yt,ir,{includePrerelease:!0})};var WE={};Object.defineProperty(WE,"__esModule",{value:!0});var WN=DM,ige=I7,oE=HN,mU=yt=>oE.object.call(void 0,yt);function Hfe({path:yt,branch:ir}){const _c=yt[yt.length-1];return ige.hasProperty.call(void 0,ir[ir.length-2],_c)}function iW(yt){return new oE.Struct({...yt,type:`optional ${yt.type}`,validator:(ir,_c)=>!Hfe(_c)||yt.validator(ir,_c),refiner:(ir,_c)=>!Hfe(_c)||yt.refiner(ir,_c)})}var oW=oE.union.call(void 0,[oE.literal.call(void 0,null),oE.boolean.call(void 0),oE.define.call(void 0,"finite number",yt=>oE.is.call(void 0,yt,oE.number.call(void 0))&&Number.isFinite(yt)),oE.string.call(void 0),oE.array.call(void 0,oE.lazy.call(void 0,()=>oW)),oE.record.call(void 0,oE.string.call(void 0),oE.lazy.call(void 0,()=>oW))]),qB=oE.coerce.call(void 0,oW,oE.any.call(void 0),yt=>(WN.assertStruct.call(void 0,yt,oW),JSON.parse(JSON.stringify(yt,(ir,_c)=>{if(ir!=="__proto__"&&ir!=="constructor")return _c}))));function Mie(yt){return oE.create.call(void 0,yt,qB)}var hK=oE.literal.call(void 0,"2.0"),aW=oE.nullable.call(void 0,oE.union.call(void 0,[oE.number.call(void 0),oE.string.call(void 0)])),gU=mU({code:oE.integer.call(void 0),message:oE.string.call(void 0),data:iW(qB),stack:iW(oE.string.call(void 0))}),Iie=oE.union.call(void 0,[oE.record.call(void 0,oE.string.call(void 0),qB),oE.array.call(void 0,qB)]),Oie=mU({id:aW,jsonrpc:hK,method:oE.string.call(void 0),params:iW(Iie)}),Pie=mU({jsonrpc:hK,method:oE.string.call(void 0),params:iW(Iie)}),jie=oE.object.call(void 0,{id:aW,jsonrpc:hK,result:oE.optional.call(void 0,oE.unknown.call(void 0)),error:oE.optional.call(void 0,gU)}),sW=mU({id:aW,jsonrpc:hK,result:qB}),HJ=mU({id:aW,jsonrpc:hK,error:gU}),Nie=oE.union.call(void 0,[sW,HJ]);WE.object=mU,WE.exactOptional=iW,WE.UnsafeJsonStruct=oW,WE.JsonStruct=qB,WE.isValidJson=function(yt){try{return Mie(yt),!0}catch{return!1}},WE.getSafeJson=Mie,WE.getJsonSize=function(yt){WN.assertStruct.call(void 0,yt,qB,"Invalid JSON value");const ir=JSON.stringify(yt);return new TextEncoder().encode(ir).byteLength},WE.jsonrpc2="2.0",WE.JsonRpcVersionStruct=hK,WE.JsonRpcIdStruct=aW,WE.JsonRpcErrorStruct=gU,WE.JsonRpcParamsStruct=Iie,WE.JsonRpcRequestStruct=Oie,WE.JsonRpcNotificationStruct=Pie,WE.isJsonRpcNotification=function(yt){return oE.is.call(void 0,yt,Pie)},WE.assertIsJsonRpcNotification=function(yt,ir){WN.assertStruct.call(void 0,yt,Pie,"Invalid JSON-RPC notification",ir)},WE.isJsonRpcRequest=function(yt){return oE.is.call(void 0,yt,Oie)},WE.assertIsJsonRpcRequest=function(yt,ir){WN.assertStruct.call(void 0,yt,Oie,"Invalid JSON-RPC request",ir)},WE.PendingJsonRpcResponseStruct=jie,WE.JsonRpcSuccessStruct=sW,WE.JsonRpcFailureStruct=HJ,WE.JsonRpcResponseStruct=Nie,WE.isPendingJsonRpcResponse=function(yt){return oE.is.call(void 0,yt,jie)},WE.assertIsPendingJsonRpcResponse=function(yt,ir){WN.assertStruct.call(void 0,yt,jie,"Invalid pending JSON-RPC response",ir)},WE.isJsonRpcResponse=function(yt){return oE.is.call(void 0,yt,Nie)},WE.assertIsJsonRpcResponse=function(yt,ir){WN.assertStruct.call(void 0,yt,Nie,"Invalid JSON-RPC response",ir)},WE.isJsonRpcSuccess=function(yt){return oE.is.call(void 0,yt,sW)},WE.assertIsJsonRpcSuccess=function(yt,ir){WN.assertStruct.call(void 0,yt,sW,"Invalid JSON-RPC success response",ir)},WE.isJsonRpcFailure=function(yt){return oE.is.call(void 0,yt,HJ)},WE.assertIsJsonRpcFailure=function(yt,ir){WN.assertStruct.call(void 0,yt,HJ,"Invalid JSON-RPC failure response",ir)},WE.isJsonRpcError=function(yt){return oE.is.call(void 0,yt,gU)},WE.assertIsJsonRpcError=function(yt,ir){WN.assertStruct.call(void 0,yt,gU,"Invalid JSON-RPC error",ir)},WE.getJsonRpcIdValidator=function(yt){const{permitEmptyString:ir,permitFractions:_c,permitNull:mu}={permitEmptyString:!0,permitFractions:!1,permitNull:!0,...yt};return Mu=>!!(typeof Mu=="number"&&(_c||Number.isInteger(Mu))||typeof Mu=="string"&&(ir||Mu.length>0)||mu&&Mu===null)};var Lie,Bie,pK={},lW={exports:{}},cW=function(yt){function ir(Mu){let xu,l0,E0,j0=null;function M0(...B0){if(!M0.enabled)return;const q0=M0,y1=Number(new Date),v1=y1-(xu||y1);q0.diff=v1,q0.prev=xu,q0.curr=y1,xu=y1,B0[0]=ir.coerce(B0[0]),typeof B0[0]!="string"&&B0.unshift("%O");let F1=0;B0[0]=B0[0].replace(/%([a-zA-Z%])/g,(ov,bv)=>{if(ov==="%%")return"%";F1++;const gv=ir.formatters[bv];if(typeof gv=="function"){const xv=B0[F1];ov=gv.call(q0,xv),B0.splice(F1,1),F1--}return ov}),ir.formatArgs.call(q0,B0),(q0.log||ir.log).apply(q0,B0)}return M0.namespace=Mu,M0.useColors=ir.useColors(),M0.color=ir.selectColor(Mu),M0.extend=_c,M0.destroy=ir.destroy,Object.defineProperty(M0,"enabled",{enumerable:!0,configurable:!1,get:()=>j0!==null?j0:(l0!==ir.namespaces&&(l0=ir.namespaces,E0=ir.enabled(Mu)),E0),set:B0=>{j0=B0}}),typeof ir.init=="function"&&ir.init(M0),M0}function _c(Mu,xu){const l0=ir(this.namespace+(xu===void 0?":":xu)+Mu);return l0.log=this.log,l0}function mu(Mu){return Mu.toString().substring(2,Mu.toString().length-2).replace(/\.\*\?$/,"*")}return ir.debug=ir,ir.default=ir,ir.coerce=function(Mu){return Mu instanceof Error?Mu.stack||Mu.message:Mu},ir.disable=function(){const Mu=[...ir.names.map(mu),...ir.skips.map(mu).map(xu=>"-"+xu)].join(",");return ir.enable(""),Mu},ir.enable=function(Mu){let xu;ir.save(Mu),ir.namespaces=Mu,ir.names=[],ir.skips=[];const l0=(typeof Mu=="string"?Mu:"").split(/[\s,]+/),E0=l0.length;for(xu=0;xu=1.5*q0;return Math.round(M0/q0)+" "+y1+(v1?"s":"")}return Lie=function(M0,B0){B0=B0||{};var q0=typeof M0;if(q0==="string"&&M0.length>0)return function(y1){if(!((y1=String(y1)).length>100)){var v1=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(y1);if(v1){var F1=parseFloat(v1[1]);switch((v1[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*F1;case"weeks":case"week":case"w":return 6048e5*F1;case"days":case"day":case"d":return F1*E0;case"hours":case"hour":case"hrs":case"hr":case"h":return F1*l0;case"minutes":case"minute":case"mins":case"min":case"m":return F1*xu;case"seconds":case"second":case"secs":case"sec":case"s":return F1*Mu;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return F1;default:return}}}}(M0);if(q0==="number"&&isFinite(M0))return B0.long?function(y1){var v1=Math.abs(y1);return v1>=E0?j0(y1,v1,E0,"day"):v1>=l0?j0(y1,v1,l0,"hour"):v1>=xu?j0(y1,v1,xu,"minute"):v1>=Mu?j0(y1,v1,Mu,"second"):y1+" ms"}(M0):function(y1){var v1=Math.abs(y1);return v1>=E0?Math.round(y1/E0)+"d":v1>=l0?Math.round(y1/l0)+"h":v1>=xu?Math.round(y1/xu)+"m":v1>=Mu?Math.round(y1/Mu)+"s":y1+"ms"}(M0);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(M0))},Lie}(),ir.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(yt).forEach(Mu=>{ir[Mu]=yt[Mu]}),ir.names=[],ir.skips=[],ir.formatters={},ir.selectColor=function(Mu){let xu=0;for(let l0=0;l0{E0!=="%%"&&(xu++,E0==="%c"&&(l0=xu))}),mu.splice(l0,0,Mu)},ir.save=function(mu){try{mu?ir.storage.setItem("debug",mu):ir.storage.removeItem("debug")}catch{}},ir.load=function(){let mu;try{mu=ir.storage.getItem("debug")}catch{}return!mu&&Kv!==void 0&&"env"in Kv&&(mu=Kv.env.DEBUG),mu},ir.useColors=function(){return!(typeof window>"u"||!window.process||window.process.type!=="renderer"&&!window.process.__nwjs)||(typeof navigator>"u"||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&(typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},ir.storage=function(){try{return localStorage}catch{}}(),ir.destroy=(()=>{let mu=!1;return()=>{mu||(mu=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),ir.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],ir.log=console.debug||console.log||(()=>{}),yt.exports=cW(ir);const{formatters:_c}=yt.exports;_c.j=function(mu){try{return JSON.stringify(mu)}catch(Mu){return"[UnexpectedJSONParseError]: "+Mu.message}}})(lW,lW.exports);var KJ=lW.exports,VJ=d(KJ);Object.defineProperty(pK,"__esModule",{value:!0});var uW,oge=((uW=KJ)&&uW.__esModule?uW:{default:uW}).default.call(void 0,"metamask");pK.createProjectLogger=function(yt){return oge.extend(yt)},pK.createModuleLogger=function(yt,ir){return yt.extend(ir)};var WS={};function Die(yt){let ir,_c=yt[0],mu=1;for(;mu_c.call(ir,...l0)),ir=void 0)}return _c}Object.defineProperty(WS,"__esModule",{value:!0});var hC=HN,fW=/^(?[-a-z0-9]{3,8}):(?[-_a-zA-Z0-9]{1,32})$/u,Fie=/^[-a-z0-9]{3,8}$/u,Kfe=/^[-_a-zA-Z0-9]{1,32}$/u,qJ=/^(?(?[-a-z0-9]{3,8}):(?[-_a-zA-Z0-9]{1,32})):(?[-.%a-zA-Z0-9]{1,128})$/u,Vfe=/^[-.%a-zA-Z0-9]{1,128}$/u,qfe=hC.pattern.call(void 0,hC.string.call(void 0),fW),Uie=hC.pattern.call(void 0,hC.string.call(void 0),Fie),mK=hC.pattern.call(void 0,hC.string.call(void 0),Kfe),vU=hC.pattern.call(void 0,hC.string.call(void 0),qJ),WJ=hC.pattern.call(void 0,hC.string.call(void 0),Vfe);WS.CAIP_CHAIN_ID_REGEX=fW,WS.CAIP_NAMESPACE_REGEX=Fie,WS.CAIP_REFERENCE_REGEX=Kfe,WS.CAIP_ACCOUNT_ID_REGEX=qJ,WS.CAIP_ACCOUNT_ADDRESS_REGEX=Vfe,WS.CaipChainIdStruct=qfe,WS.CaipNamespaceStruct=Uie,WS.CaipReferenceStruct=mK,WS.CaipAccountIdStruct=vU,WS.CaipAccountAddressStruct=WJ,WS.isCaipChainId=function(yt){return hC.is.call(void 0,yt,qfe)},WS.isCaipNamespace=function(yt){return hC.is.call(void 0,yt,Uie)},WS.isCaipReference=function(yt){return hC.is.call(void 0,yt,mK)},WS.isCaipAccountId=function(yt){return hC.is.call(void 0,yt,vU)},WS.isCaipAccountAddress=function(yt){return hC.is.call(void 0,yt,WJ)},WS.parseCaipChainId=function(yt){const ir=fW.exec(yt);if(!Die([ir,"optionalAccess",_c=>_c.groups]))throw new Error("Invalid CAIP chain ID.");return{namespace:ir.groups.namespace,reference:ir.groups.reference}},WS.parseCaipAccountId=function(yt){const ir=qJ.exec(yt);if(!Die([ir,"optionalAccess",_c=>_c.groups]))throw new Error("Invalid CAIP account ID.");return{address:ir.groups.accountAddress,chainId:ir.groups.chainId,chain:{namespace:ir.groups.namespace,reference:ir.groups.reference}}};var dW={},wE={};function JO(yt,ir){return yt??ir()}Object.defineProperty(wE,"__esModule",{value:!0});var age=DM,aE=HN;wE.base64=(yt,ir={})=>{const _c=JO(ir.paddingRequired,()=>!1),mu=JO(ir.characterSet,()=>"base64");let Mu,xu;return mu==="base64"?Mu=String.raw`[A-Za-z0-9+\/]`:(age.assert.call(void 0,mu==="base64url"),Mu=String.raw`[-_A-Za-z0-9]`),xu=_c?new RegExp(`^(?:${Mu}{4})*(?:${Mu}{3}=|${Mu}{2}==)?$`,"u"):new RegExp(`^(?:${Mu}{4})*(?:${Mu}{2,3}|${Mu}{3}=|${Mu}{2}==)?$`,"u"),aE.pattern.call(void 0,yt,xu)},Object.defineProperty(dW,"__esModule",{value:!0});var gK=wE,zie=HN,hW=zie.size.call(void 0,gK.base64.call(void 0,zie.string.call(void 0),{paddingRequired:!0}),44,44);dW.ChecksumStruct=hW;var XO={};Object.defineProperty(XO,"__esModule",{value:!0});var HM=$$,Wfe=DM,QA=HN,vK=QA.union.call(void 0,[QA.number.call(void 0),QA.bigint.call(void 0),QA.string.call(void 0),HM.StrictHexStruct]),pW=QA.coerce.call(void 0,QA.number.call(void 0),vK,Number),Hie=QA.coerce.call(void 0,QA.bigint.call(void 0),vK,BigInt);QA.union.call(void 0,[HM.StrictHexStruct,QA.instance.call(void 0,Uint8Array)]);var Kie=QA.coerce.call(void 0,QA.instance.call(void 0,Uint8Array),QA.union.call(void 0,[HM.StrictHexStruct]),HM.hexToBytes),Vie=QA.coerce.call(void 0,HM.StrictHexStruct,QA.instance.call(void 0,Uint8Array),HM.bytesToHex);XO.createNumber=function(yt){try{const ir=QA.create.call(void 0,yt,pW);return Wfe.assert.call(void 0,Number.isFinite(ir),`Expected a number-like value, got "${yt}".`),ir}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a number-like value, got "${yt}".`):ir}},XO.createBigInt=function(yt){try{return QA.create.call(void 0,yt,Hie)}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a number-like value, got "${String(ir.value)}".`):ir}},XO.createBytes=function(yt){if(typeof yt=="string"&&yt.toLowerCase()==="0x")return new Uint8Array;try{return QA.create.call(void 0,yt,Kie)}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a bytes-like value, got "${String(ir.value)}".`):ir}},XO.createHex=function(yt){if(yt instanceof Uint8Array&&yt.length===0||typeof yt=="string"&&yt.toLowerCase()==="0x")return"0x";try{return QA.create.call(void 0,yt,Vie)}catch(ir){throw ir instanceof QA.StructError?new Error(`Expected a bytes-like value, got "${String(ir.value)}".`):ir}};var yK={},WB={};Object.defineProperty(WB,"__esModule",{value:!0});var mW=(yt,ir,_c)=>{if(!ir.has(yt))throw TypeError("Cannot "+_c)};WB.__privateGet=(yt,ir,_c)=>(mW(yt,ir,"read from private field"),_c?_c.call(yt):ir.get(yt)),WB.__privateAdd=(yt,ir,_c)=>{if(ir.has(yt))throw TypeError("Cannot add the same private member more than once");ir instanceof WeakSet?ir.add(yt):ir.set(yt,_c)},WB.__privateSet=(yt,ir,_c,mu)=>(mW(yt,ir,"write to private field"),mu?mu.call(yt,_c):ir.set(yt,_c),_c),Object.defineProperty(yK,"__esModule",{value:!0});var RR,KM,GS=WB,bK=class{constructor(yt){GS.__privateAdd.call(void 0,this,RR,void 0),GS.__privateSet.call(void 0,this,RR,new Map(yt)),Object.freeze(this)}get size(){return GS.__privateGet.call(void 0,this,RR).size}[Symbol.iterator](){return GS.__privateGet.call(void 0,this,RR)[Symbol.iterator]()}entries(){return GS.__privateGet.call(void 0,this,RR).entries()}forEach(yt,ir){return GS.__privateGet.call(void 0,this,RR).forEach((_c,mu,Mu)=>yt.call(ir,_c,mu,this))}get(yt){return GS.__privateGet.call(void 0,this,RR).get(yt)}has(yt){return GS.__privateGet.call(void 0,this,RR).has(yt)}keys(){return GS.__privateGet.call(void 0,this,RR).keys()}values(){return GS.__privateGet.call(void 0,this,RR).values()}toString(){return`FrozenMap(${this.size}) {${this.size>0?` ${[...this.entries()].map(([yt,ir])=>`${String(yt)} => ${String(ir)}`).join(", ")} `:""}}`}};RR=new WeakMap;var gW=class{constructor(yt){GS.__privateAdd.call(void 0,this,KM,void 0),GS.__privateSet.call(void 0,this,KM,new Set(yt)),Object.freeze(this)}get size(){return GS.__privateGet.call(void 0,this,KM).size}[Symbol.iterator](){return GS.__privateGet.call(void 0,this,KM)[Symbol.iterator]()}entries(){return GS.__privateGet.call(void 0,this,KM).entries()}forEach(yt,ir){return GS.__privateGet.call(void 0,this,KM).forEach((_c,mu,Mu)=>yt.call(ir,_c,mu,this))}has(yt){return GS.__privateGet.call(void 0,this,KM).has(yt)}keys(){return GS.__privateGet.call(void 0,this,KM).keys()}values(){return GS.__privateGet.call(void 0,this,KM).values()}toString(){return`FrozenSet(${this.size}) {${this.size>0?` ${[...this.values()].map(yt=>String(yt)).join(", ")} `:""}}`}};KM=new WeakMap,Object.freeze(bK),Object.freeze(bK.prototype),Object.freeze(gW),Object.freeze(gW.prototype),yK.FrozenMap=bK,yK.FrozenSet=gW,Object.defineProperty(O2,"__esModule",{value:!0});var GJ=KH,sge=SJ,YJ=zB,VM=UM,jE=WE,Gfe=pK,GE=WS,Yfe=dW,pC=wE,wK=XO,wA=$$,vW=DM,yU=YO,qM=I7,qie=yK;O2.AssertionError=vW.AssertionError,O2.CAIP_ACCOUNT_ADDRESS_REGEX=GE.CAIP_ACCOUNT_ADDRESS_REGEX,O2.CAIP_ACCOUNT_ID_REGEX=GE.CAIP_ACCOUNT_ID_REGEX,O2.CAIP_CHAIN_ID_REGEX=GE.CAIP_CHAIN_ID_REGEX,O2.CAIP_NAMESPACE_REGEX=GE.CAIP_NAMESPACE_REGEX,O2.CAIP_REFERENCE_REGEX=GE.CAIP_REFERENCE_REGEX,O2.CaipAccountAddressStruct=GE.CaipAccountAddressStruct,O2.CaipAccountIdStruct=GE.CaipAccountIdStruct,O2.CaipChainIdStruct=GE.CaipChainIdStruct,O2.CaipNamespaceStruct=GE.CaipNamespaceStruct,O2.CaipReferenceStruct=GE.CaipReferenceStruct,O2.ChecksumStruct=Yfe.ChecksumStruct,O2.Duration=YJ.Duration,O2.ESCAPE_CHARACTERS_REGEXP=qM.ESCAPE_CHARACTERS_REGEXP,O2.FrozenMap=qie.FrozenMap,O2.FrozenSet=qie.FrozenSet,O2.HexAddressStruct=wA.HexAddressStruct,O2.HexChecksumAddressStruct=wA.HexChecksumAddressStruct,O2.HexStruct=wA.HexStruct,O2.JsonRpcErrorStruct=jE.JsonRpcErrorStruct,O2.JsonRpcFailureStruct=jE.JsonRpcFailureStruct,O2.JsonRpcIdStruct=jE.JsonRpcIdStruct,O2.JsonRpcNotificationStruct=jE.JsonRpcNotificationStruct,O2.JsonRpcParamsStruct=jE.JsonRpcParamsStruct,O2.JsonRpcRequestStruct=jE.JsonRpcRequestStruct,O2.JsonRpcResponseStruct=jE.JsonRpcResponseStruct,O2.JsonRpcSuccessStruct=jE.JsonRpcSuccessStruct,O2.JsonRpcVersionStruct=jE.JsonRpcVersionStruct,O2.JsonSize=qM.JsonSize,O2.JsonStruct=jE.JsonStruct,O2.PendingJsonRpcResponseStruct=jE.PendingJsonRpcResponseStruct,O2.StrictHexStruct=wA.StrictHexStruct,O2.UnsafeJsonStruct=jE.UnsafeJsonStruct,O2.VersionRangeStruct=VM.VersionRangeStruct,O2.VersionStruct=VM.VersionStruct,O2.add0x=wA.add0x,O2.assert=vW.assert,O2.assertExhaustive=vW.assertExhaustive,O2.assertIsBytes=wA.assertIsBytes,O2.assertIsHexString=wA.assertIsHexString,O2.assertIsJsonRpcError=jE.assertIsJsonRpcError,O2.assertIsJsonRpcFailure=jE.assertIsJsonRpcFailure,O2.assertIsJsonRpcNotification=jE.assertIsJsonRpcNotification,O2.assertIsJsonRpcRequest=jE.assertIsJsonRpcRequest,O2.assertIsJsonRpcResponse=jE.assertIsJsonRpcResponse,O2.assertIsJsonRpcSuccess=jE.assertIsJsonRpcSuccess,O2.assertIsPendingJsonRpcResponse=jE.assertIsPendingJsonRpcResponse,O2.assertIsSemVerRange=VM.assertIsSemVerRange,O2.assertIsSemVerVersion=VM.assertIsSemVerVersion,O2.assertIsStrictHexString=wA.assertIsStrictHexString,O2.assertStruct=vW.assertStruct,O2.base64=pC.base64,O2.base64ToBytes=wA.base64ToBytes,O2.bigIntToBytes=wA.bigIntToBytes,O2.bigIntToHex=GJ.bigIntToHex,O2.bytesToBase64=wA.bytesToBase64,O2.bytesToBigInt=wA.bytesToBigInt,O2.bytesToHex=wA.bytesToHex,O2.bytesToNumber=wA.bytesToNumber,O2.bytesToSignedBigInt=wA.bytesToSignedBigInt,O2.bytesToString=wA.bytesToString,O2.calculateNumberSize=qM.calculateNumberSize,O2.calculateStringSize=qM.calculateStringSize,O2.concatBytes=wA.concatBytes,O2.createBigInt=wK.createBigInt,O2.createBytes=wK.createBytes,O2.createDataView=wA.createDataView,O2.createDeferredPromise=sge.createDeferredPromise,O2.createHex=wK.createHex,O2.createModuleLogger=Gfe.createModuleLogger,O2.createNumber=wK.createNumber,O2.createProjectLogger=Gfe.createProjectLogger,O2.exactOptional=jE.exactOptional,O2.getChecksumAddress=wA.getChecksumAddress,O2.getErrorMessage=yU.getErrorMessage,O2.getJsonRpcIdValidator=jE.getJsonRpcIdValidator,O2.getJsonSize=jE.getJsonSize,O2.getKnownPropertyNames=qM.getKnownPropertyNames,O2.getSafeJson=jE.getSafeJson,O2.gtRange=VM.gtRange,O2.gtVersion=VM.gtVersion,O2.hasProperty=qM.hasProperty,O2.hexToBigInt=GJ.hexToBigInt,O2.hexToBytes=wA.hexToBytes,O2.hexToNumber=GJ.hexToNumber,O2.inMilliseconds=YJ.inMilliseconds,O2.isASCII=qM.isASCII,O2.isBytes=wA.isBytes,O2.isCaipAccountAddress=GE.isCaipAccountAddress,O2.isCaipAccountId=GE.isCaipAccountId,O2.isCaipChainId=GE.isCaipChainId,O2.isCaipNamespace=GE.isCaipNamespace,O2.isCaipReference=GE.isCaipReference,O2.isErrorWithCode=yU.isErrorWithCode,O2.isErrorWithMessage=yU.isErrorWithMessage,O2.isErrorWithStack=yU.isErrorWithStack,O2.isHexString=wA.isHexString,O2.isJsonRpcError=jE.isJsonRpcError,O2.isJsonRpcFailure=jE.isJsonRpcFailure,O2.isJsonRpcNotification=jE.isJsonRpcNotification,O2.isJsonRpcRequest=jE.isJsonRpcRequest,O2.isJsonRpcResponse=jE.isJsonRpcResponse,O2.isJsonRpcSuccess=jE.isJsonRpcSuccess,O2.isNonEmptyArray=qM.isNonEmptyArray,O2.isNullOrUndefined=qM.isNullOrUndefined,O2.isObject=qM.isObject,O2.isPendingJsonRpcResponse=jE.isPendingJsonRpcResponse,O2.isPlainObject=qM.isPlainObject,O2.isStrictHexString=wA.isStrictHexString,O2.isValidChecksumAddress=wA.isValidChecksumAddress,O2.isValidHexAddress=wA.isValidHexAddress,O2.isValidJson=jE.isValidJson,O2.isValidSemVerRange=VM.isValidSemVerRange,O2.isValidSemVerVersion=VM.isValidSemVerVersion,O2.jsonrpc2=jE.jsonrpc2,O2.numberToBytes=wA.numberToBytes,O2.numberToHex=GJ.numberToHex,O2.object=jE.object,O2.parseCaipAccountId=GE.parseCaipAccountId,O2.parseCaipChainId=GE.parseCaipChainId,O2.remove0x=wA.remove0x,O2.satisfiesVersionRange=VM.satisfiesVersionRange,O2.signedBigIntToBytes=wA.signedBigIntToBytes,O2.stringToBytes=wA.stringToBytes,O2.timeSince=YJ.timeSince,O2.valueToBytes=wA.valueToBytes,O2.wrapError=yU.wrapError,Object.defineProperty(y5,"__esModule",{value:!0});var ZJ=HH,GN=O2,Wie=ZJ.errorCodes.rpc.internal,Zfe={code:Wie,message:yW(Wie)},JJ="Unspecified server error.";function yW(yt,ir="Unspecified error message. This is a bug, please report it."){if(Gie(yt)){const _c=yt.toString();if(GN.hasProperty.call(void 0,ZJ.errorValues,_c))return ZJ.errorValues[_c].message;if(function(mu){return mu>=-32099&&mu<=-32e3}(yt))return JJ}return ir}function Gie(yt){return Number.isInteger(yt)}function Jfe(yt){return Array.isArray(yt)?yt.map(ir=>GN.isValidJson.call(void 0,ir)?ir:GN.isObject.call(void 0,ir)?Xfe(ir):null):GN.isObject.call(void 0,yt)?Xfe(yt):GN.isValidJson.call(void 0,yt)?yt:null}function Xfe(yt){return Object.getOwnPropertyNames(yt).reduce((ir,_c)=>{const mu=yt[_c];return GN.isValidJson.call(void 0,mu)&&(ir[_c]=mu),ir},{})}y5.JSON_RPC_SERVER_ERROR_MESSAGE=JJ,y5.getMessageFromCode=yW,y5.isValidCode=Gie,y5.serializeError=function(yt,{fallbackError:ir=Zfe,shouldIncludeStack:_c=!0}={}){if(!GN.isJsonRpcError.call(void 0,ir))throw new Error("Must provide fallback error with integer number code and string message.");const mu=function(Mu,xu){return Mu&&typeof Mu=="object"&&"serialize"in Mu&&typeof Mu.serialize=="function"?Mu.serialize():GN.isJsonRpcError.call(void 0,Mu)?Mu:{...xu,data:{cause:Jfe(Mu)}}}(yt,ir);return _c||delete mu.stack,mu},y5.serializeCause=Jfe;var Yie=d_;d_.default=d_,d_.stable=rde,d_.stableStringify=rde;var bW="[...]",Qfe="[Circular]",WM=[],GM=[];function tde(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function d_(yt,ir,_c,mu){var Mu;mu===void 0&&(mu=tde()),Zie(yt,"",0,[],void 0,0,mu);try{Mu=GM.length===0?JSON.stringify(yt,ir,_c):JSON.stringify(yt,wW(ir),_c)}catch{return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;WM.length!==0;){var xu=WM.pop();xu.length===4?Object.defineProperty(xu[0],xu[1],xu[3]):xu[0][xu[1]]=xu[2]}}return Mu}function bU(yt,ir,_c,mu){var Mu=Object.getOwnPropertyDescriptor(mu,_c);Mu.get!==void 0?Mu.configurable?(Object.defineProperty(mu,_c,{value:yt}),WM.push([mu,_c,ir,Mu])):GM.push([ir,_c,yt]):(mu[_c]=yt,WM.push([mu,_c,ir]))}function Zie(yt,ir,_c,mu,Mu,xu,l0){var E0;if(xu+=1,typeof yt=="object"&&yt!==null){for(E0=0;E0l0.depthLimit||l0.edgesLimit!==void 0&&_c+1>l0.edgesLimit)return void bU(bW,yt,ir,Mu);if(mu.push(yt),Array.isArray(yt))for(E0=0;E0ir?1:0}function rde(yt,ir,_c,mu){mu===void 0&&(mu=tde());var Mu,xu=Jie(yt,"",0,[],void 0,0,mu)||yt;try{Mu=GM.length===0?JSON.stringify(xu,ir,_c):JSON.stringify(xu,wW(ir),_c)}catch{return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;WM.length!==0;){var l0=WM.pop();l0.length===4?Object.defineProperty(l0[0],l0[1],l0[3]):l0[0][l0[1]]=l0[2]}}return Mu}function Jie(yt,ir,_c,mu,Mu,xu,l0){var E0;if(xu+=1,typeof yt=="object"&&yt!==null){for(E0=0;E0l0.depthLimit||l0.edgesLimit!==void 0&&_c+1>l0.edgesLimit)return void bU(bW,yt,ir,Mu);if(mu.push(yt),Array.isArray(yt))for(E0=0;E00)for(var mu=0;mu=1e3&&mu<=4999}(yt))throw new Error('"code" must be an integer such that: 1000 <= code <= 4999');super(yt,ir,_c)}},Object.defineProperty(Z3,"__esModule",{value:!0});var $K=nU,ide=y5,P7=HH,YN={parse:yt=>MR(P7.errorCodes.rpc.parse,yt),invalidRequest:yt=>MR(P7.errorCodes.rpc.invalidRequest,yt),invalidParams:yt=>MR(P7.errorCodes.rpc.invalidParams,yt),methodNotFound:yt=>MR(P7.errorCodes.rpc.methodNotFound,yt),internal:yt=>MR(P7.errorCodes.rpc.internal,yt),server:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum RPC Server errors must provide single object argument.");const{code:ir}=yt;if(!Number.isInteger(ir)||ir>-32005||ir<-32099)throw new Error('"code" must be an integer such that: -32099 <= code <= -32005');return MR(ir,yt)},invalidInput:yt=>MR(P7.errorCodes.rpc.invalidInput,yt),resourceNotFound:yt=>MR(P7.errorCodes.rpc.resourceNotFound,yt),resourceUnavailable:yt=>MR(P7.errorCodes.rpc.resourceUnavailable,yt),transactionRejected:yt=>MR(P7.errorCodes.rpc.transactionRejected,yt),methodNotSupported:yt=>MR(P7.errorCodes.rpc.methodNotSupported,yt),limitExceeded:yt=>MR(P7.errorCodes.rpc.limitExceeded,yt)},sA={userRejectedRequest:yt=>vS(P7.errorCodes.provider.userRejectedRequest,yt),unauthorized:yt=>vS(P7.errorCodes.provider.unauthorized,yt),unsupportedMethod:yt=>vS(P7.errorCodes.provider.unsupportedMethod,yt),disconnected:yt=>vS(P7.errorCodes.provider.disconnected,yt),chainDisconnected:yt=>vS(P7.errorCodes.provider.chainDisconnected,yt),custom:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum Provider custom errors must provide single object argument.");const{code:ir,message:_c,data:mu}=yt;if(!_c||typeof _c!="string")throw new Error('"message" must be a nonempty string');return new $K.EthereumProviderError(ir,_c,mu)}};function MR(yt,ir){const[_c,mu]=ode(ir);return new $K.JsonRpcError(yt,EW(_c,()=>ide.getMessageFromCode.call(void 0,yt)),mu)}function vS(yt,ir){const[_c,mu]=ode(ir);return new $K.EthereumProviderError(yt,EW(_c,()=>ide.getMessageFromCode.call(void 0,yt)),mu)}function ode(yt){if(yt){if(typeof yt=="string")return[yt];if(typeof yt=="object"&&!Array.isArray(yt)){const{message:ir,data:_c}=yt;if(ir&&typeof ir!="string")throw new Error("Must specify string message.");return[EW(ir,()=>{}),_c]}}return[]}Z3.rpcErrors=YN,Z3.providerErrors=sA,Object.defineProperty(GO,"__esModule",{value:!0});var ade=Z3,AW=nU,fA=y5,XJ=HH;GO.EthereumProviderError=AW.EthereumProviderError,GO.JsonRpcError=AW.JsonRpcError,GO.errorCodes=XJ.errorCodes,GO.getMessageFromCode=fA.getMessageFromCode,GO.providerErrors=ade.providerErrors,GO.rpcErrors=ade.rpcErrors,GO.serializeCause=fA.serializeCause,GO.serializeError=fA.serializeError;var GB={};Object.defineProperty(GB,"__esModule",{value:!0});const x5=$_;function Qie(yt,ir,_c){try{Reflect.apply(yt,ir,_c)}catch(mu){setTimeout(()=>{throw mu})}}class eoe extends x5.EventEmitter{emit(ir,..._c){let mu=ir==="error";const Mu=this._events;if(Mu!==void 0)mu=mu&&Mu.error===void 0;else if(!mu)return!1;if(mu){let l0;if(_c.length>0&&([l0]=_c),l0 instanceof Error)throw l0;const E0=new Error("Unhandled error."+(l0?` (${l0.message})`:""));throw E0.context=l0,E0}const xu=Mu[ir];if(xu===void 0)return!1;if(typeof xu=="function")Qie(xu,this,_c);else{const l0=xu.length,E0=function(j0){const M0=j0.length,B0=new Array(M0);for(let q0=0;q0{"destroy"in ir&&typeof ir.destroy=="function"&&ir.destroy()}),JN(this,ZN,[],"f"),JN(this,QJ,!0,"f")}push(ir){U_(this,mx,"m",_W).call(this),U_(this,ZN,"f").push(ir)}handle(ir,_c){if(U_(this,mx,"m",_W).call(this),_c&&typeof _c!="function")throw new Error('"callback" must be a function if provided.');return Array.isArray(ir)?_c?U_(this,mx,"m",eX).call(this,ir,_c):U_(this,mx,"m",eX).call(this,ir):_c?U_(this,mx,"m",tX).call(this,ir,_c):this._promiseHandle(ir)}asMiddleware(){return U_(this,mx,"m",_W).call(this),(ir,_c,mu,Mu)=>IR(this,void 0,void 0,function*(){try{const[xu,l0,E0]=yield U_(Z6,eP,"m",EK).call(Z6,ir,_c,U_(this,ZN,"f"));return l0?(yield U_(Z6,eP,"m",tP).call(Z6,E0),Mu(xu)):mu(j0=>IR(this,void 0,void 0,function*(){try{yield U_(Z6,eP,"m",tP).call(Z6,E0)}catch(M0){return j0(M0)}return j0()}))}catch(xu){return Mu(xu)}})}_promiseHandle(ir){return IR(this,void 0,void 0,function*(){return new Promise((_c,mu)=>{U_(this,mx,"m",tX).call(this,ir,(Mu,xu)=>{Mu&&xu===void 0?mu(Mu):_c(xu)}).catch(mu)})})}}function noe(yt){return JSON.stringify(yt,null,2)}zH.JsonRpcEngine=Z6,eP=Z6,QJ=new WeakMap,ZN=new WeakMap,wU=new WeakMap,mx=new WeakSet,_W=function(){if(U_(this,QJ,"f"))throw new Error("This engine is destroyed and can no longer be used.")},eX=function(yt,ir){return IR(this,void 0,void 0,function*(){try{if(yt.length===0){const mu=[{id:null,jsonrpc:"2.0",error:new mC.JsonRpcError(mC.errorCodes.rpc.invalidRequest,"Request batch must contain plain objects. Received an empty array")}];return ir?ir(null,mu):mu}const _c=(yield Promise.all(yt.map(this._promiseHandle.bind(this)))).filter(mu=>mu!==void 0);return ir?ir(null,_c):_c}catch(_c){if(ir)return ir(_c);throw _c}})},tX=function(yt,ir){var _c;return IR(this,void 0,void 0,function*(){if(!yt||Array.isArray(yt)||typeof yt!="object"){const l0=new mC.JsonRpcError(mC.errorCodes.rpc.invalidRequest,"Requests must be plain objects. Received: "+typeof yt,{request:yt});return ir(l0,{id:null,jsonrpc:"2.0",error:l0})}if(typeof yt.method!="string"){const l0=new mC.JsonRpcError(mC.errorCodes.rpc.invalidRequest,"Must specify a string method. Received: "+typeof yt.method,{request:yt});return U_(this,wU,"f")&&!(0,SW.isJsonRpcRequest)(yt)?ir(null):ir(l0,{id:(_c=yt.id)!==null&&_c!==void 0?_c:null,jsonrpc:"2.0",error:l0})}if(U_(this,wU,"f")&&!(0,SW.isJsonRpcRequest)(yt)){try{yield U_(this,wU,"f").call(this,yt)}catch(l0){return ir(l0)}return ir(null)}let mu=null;const Mu=Object.assign({},yt),xu={id:Mu.id,jsonrpc:Mu.jsonrpc};try{yield U_(Z6,eP,"m",rX).call(Z6,Mu,xu,U_(this,ZN,"f"))}catch(l0){mu=l0}return mu&&(delete xu.result,xu.error||(xu.error=(0,mC.serializeError)(mu))),ir(mu,xu)})},rX=function(yt,ir,_c){return IR(this,void 0,void 0,function*(){const[mu,Mu,xu]=yield U_(Z6,eP,"m",EK).call(Z6,yt,ir,_c);if(U_(Z6,eP,"m",YB).call(Z6,yt,ir,Mu),yield U_(Z6,eP,"m",tP).call(Z6,xu),mu)throw mu})},EK=function(yt,ir,_c){return IR(this,void 0,void 0,function*(){const mu=[];let Mu=null,xu=!1;for(const l0 of _c)if([Mu,xu]=yield U_(Z6,eP,"m",toe).call(Z6,yt,ir,l0,mu),xu)break;return[Mu,xu,mu.reverse()]})},toe=function(yt,ir,_c,mu){return IR(this,void 0,void 0,function*(){return new Promise(Mu=>{const xu=E0=>{const j0=E0||ir.error;j0&&(ir.error=(0,mC.serializeError)(j0)),Mu([j0,!0])},l0=E0=>{ir.error?xu(ir.error):(E0&&(typeof E0!="function"&&xu(new mC.JsonRpcError(mC.errorCodes.rpc.internal,`JsonRpcEngine: "next" return handlers must be functions. Received "${typeof E0}" for request: +${noe(yt)}`,{request:yt})),mu.push(E0)),Mu([null,!1]))};try{_c(yt,ir,l0,xu)}catch(E0){xu(E0)}})})},tP=function(yt){return IR(this,void 0,void 0,function*(){for(const ir of yt)yield new Promise((_c,mu)=>{ir(Mu=>Mu?mu(Mu):_c())})})},YB=function(yt,ir,_c){if(!(0,SW.hasProperty)(ir,"result")&&!(0,SW.hasProperty)(ir,"error"))throw new mC.JsonRpcError(mC.errorCodes.rpc.internal,`JsonRpcEngine: Response has no error or result for request: ${noe(yt)}`,{request:yt});if(!_c)throw new mC.JsonRpcError(mC.errorCodes.rpc.internal,`JsonRpcEngine: Nothing ended request: -${noe(yt)}`,{request:yt})};var nX={};Object.defineProperty(nX,"__esModule",{value:!0}),nX.mergeMiddleware=void 0;const uge=zH;nX.mergeMiddleware=function(yt){const ir=new uge.JsonRpcEngine;return yt.forEach(_c=>ir.push(_c)),ir.asMiddleware()},function(yt){var ir=c&&c.__createBinding||(Object.create?function(mu,Mu,Su,l0){l0===void 0&&(l0=Su);var E0=Object.getOwnPropertyDescriptor(Mu,Su);E0&&!("get"in E0?!Mu.__esModule:E0.writable||E0.configurable)||(E0={enumerable:!0,get:function(){return Mu[Su]}}),Object.defineProperty(mu,l0,E0)}:function(mu,Mu,Su,l0){l0===void 0&&(l0=Su),mu[l0]=Mu[Su]}),_c=c&&c.__exportStar||function(mu,Mu){for(var Su in mu)Su==="default"||Object.prototype.hasOwnProperty.call(Mu,Su)||ir(Mu,mu,Su)};Object.defineProperty(yt,"__esModule",{value:!0}),_c(uJ,yt),_c(fJ,yt),_c(Iq,yt),_c(dJ,yt),_c(zH,yt),_c(nX,yt)}($ne);var lde=-32600,fge=-32603,iX={"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."},"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32000":{standard:"EIP-1474",message:"Invalid input."},"-32001":{standard:"EIP-1474",message:"Resource not found."},"-32002":{standard:"EIP-1474",message:"Resource unavailable."},"-32003":{standard:"EIP-1474",message:"Transaction rejected."},"-32004":{standard:"EIP-1474",message:"Method not supported."},"-32005":{standard:"EIP-1474",message:"Request limit exceeded."},4001:{standard:"EIP-1193",message:"User rejected the request."},4100:{standard:"EIP-1193",message:"The requested account and/or method has not been authorized by the user."},4200:{standard:"EIP-1193",message:"The requested method is not supported by this Ethereum provider."},4900:{standard:"EIP-1193",message:"The provider is disconnected from all chains."},4901:{standard:"EIP-1193",message:"The provider is disconnected from the specified chain."}};function oX(yt){return!!yt&&typeof yt=="object"&&!Array.isArray(yt)}var ioe=(yt,ir)=>Object.hasOwnProperty.call(yt,ir),gx=class extends Error{constructor(yt){super(yt.message),this.code="ERR_ASSERTION"}},xW=yt=>oU(yt);function cde({path:yt,branch:ir}){const _c=yt[yt.length-1];return ioe(ir[ir.length-2],_c)}function gC(yt){return new _8({...yt,type:`optional ${yt.type}`,validator:(ir,_c)=>!cde(_c)||yt.validator(ir,_c),refiner:(ir,_c)=>!cde(_c)||yt.refiner(ir,_c)})}var ZB=aU([gJ(null),Ine(),fC("finite number",yt=>mJ(yt,mS())&&Number.isFinite(yt)),bA(),Mne(Tne(()=>ZB)),jq(bA(),Tne(()=>ZB))]),AK=sU(ZB,Rne(),yt=>(function(ir,_c,mu="Assertion failed",Mu=gx){try{kne(ir,_c)}catch(Su){throw function(l0,E0){var M0,B0;return j0=l0,typeof((B0=(M0=j0==null?void 0:j0.prototype)==null?void 0:M0.constructor)==null?void 0:B0.name)=="string"?new l0({message:E0}):l0({message:E0});var j0}(Mu,`${mu}: ${function(l0){return function(E0){return function(j0){return typeof j0=="object"&&j0!==null&&"message"in j0}(E0)&&typeof E0.message=="string"?E0.message:function(j0){return j0==null}(E0)?"":String(E0)}(l0).replace(/\.$/u,"")}(Su)}.`)}}(yt,ZB),JSON.parse(JSON.stringify(yt,(ir,_c)=>{if(ir!=="__proto__"&&ir!=="constructor")return _c}))));function aX(yt){try{return function(ir){Cne(ir,AK)}(yt),!0}catch{return!1}}var _K=gJ("2.0"),SK=Pne(aU([mS(),bA()])),ude=xW({code:One(),message:bA(),data:gC(AK),stack:gC(bA())}),kW=aU([jq(bA(),AK),Mne(AK)]);xW({id:SK,jsonrpc:_K,method:bA(),params:gC(kW)}),xW({jsonrpc:_K,method:bA(),params:gC(kW)}),oU({id:SK,jsonrpc:_K,result:JH(vJ()),error:JH(ude)}),aU([xW({id:SK,jsonrpc:_K,result:AK}),xW({id:SK,jsonrpc:_K,error:ude})]);var dge="Unspecified error message. This is a bug, please report it.";dde(fge);var fde="Unspecified server error.";function dde(yt,ir=dge){if(function(_c){return Number.isInteger(_c)}(yt)){const _c=yt.toString();if(ioe(iX,_c))return iX[_c].message;if(function(mu){return mu>=-32099&&mu<=-32e3}(yt))return fde}return ir}function rP(yt){return Object.getOwnPropertyNames(yt).reduce((ir,_c)=>{const mu=yt[_c];return aX(mu)&&(ir[_c]=mu),ir},{})}var k5=class extends Error{constructor(yt,ir,_c){if(!Number.isInteger(yt))throw new Error('"code" must be an integer.');if(!ir||typeof ir!="string")throw new Error('"message" must be a non-empty string.');super(ir),this.code=yt,_c!==void 0&&(this.data=_c)}serialize(){const yt={code:this.code,message:this.message};var ir;return this.data!==void 0&&(yt.data=this.data,function(_c){if(typeof _c!="object"||_c===null)return!1;try{let mu=_c;for(;Object.getPrototypeOf(mu)!==null;)mu=Object.getPrototypeOf(mu);return Object.getPrototypeOf(_c)===mu}catch{return!1}}(this.data)&&(yt.data.cause=(ir=this.data.cause,Array.isArray(ir)?ir.map(_c=>aX(_c)?_c:oX(_c)?rP(_c):null):oX(ir)?rP(ir):aX(ir)?ir:null))),this.stack&&(yt.stack=this.stack),yt}toString(){return $W(this.serialize(),sX,2)}};function sX(yt,ir){if(ir!=="[Circular]")return ir}var YM=yt=>function(ir,_c){const[mu,Mu]=function(Su){if(Su){if(typeof Su=="string")return[Su];if(typeof Su=="object"&&!Array.isArray(Su)){const{message:l0,data:E0}=Su;if(l0&&typeof l0!="string")throw new Error("Must specify string message.");return[l0??void 0,E0]}}return[]}(_c);return new k5(ir,mu??dde(ir),Mu)}(lde,yt),$U=Object.freeze(["eth_subscription"]),lX=(yt=console)=>[$ne.createIdRemapMiddleware(),ooe(yt),Tme(yt)];function ooe(yt){return(ir,_c,mu)=>{typeof ir.method=="string"&&ir.method||(_c.error=YM({message:"The request 'method' must be a non-empty string.",data:ir})),mu(Mu=>{const{error:Su}=_c;return Su&&yt.error(`MetaMask - RPC Error: ${Su.message}`,Su),Mu()})}}var xK=(yt,ir,_c=!0)=>(mu,Mu)=>{mu||Mu.error?ir(mu||Mu.error):!_c||Array.isArray(Mu)?yt(Mu):yt(Mu.result)},aoe=yt=>!!yt&&typeof yt=="string"&&yt.startsWith("0x"),cX=()=>{};async function soe(yt,ir){try{const _c=await async function(){return{name:uX(window),icon:await hde(window)}}();yt.handle({jsonrpc:"2.0",id:1,method:"metamask_sendDomainMetadata",params:_c},cX)}catch(_c){ir.error({message:A8.errors.sendSiteMetadata(),originalError:_c})}}function uX(yt){const{document:ir}=yt,_c=ir.querySelector('head > meta[property="og:site_name"]');if(_c)return _c.content;const mu=ir.querySelector('head > meta[name="title"]');return mu?mu.content:ir.title&&ir.title.length>0?ir.title:window.location.hostname}async function hde(yt){const{document:ir}=yt,_c=ir.querySelectorAll('head > link[rel~="icon"]');for(const mu of Array.from(_c))if(mu&&await hge(mu.href))return mu.href;return null}async function hge(yt){return new Promise((ir,_c)=>{try{const mu=document.createElement("img");mu.onload=()=>ir(!0),mu.onerror=()=>ir(!1),mu.src=yt}catch(mu){_c(mu)}})}var vx,nP,t8=(yt,ir,_c)=>{if(!ir.has(yt))throw TypeError("Cannot "+_c)},iP=(yt,ir,_c)=>(t8(yt,ir,"read from private field"),_c?_c.call(yt):ir.get(yt)),yx=(yt,ir,_c)=>{if(ir.has(yt))throw TypeError("Cannot add the same private member more than once");ir instanceof WeakSet?ir.add(yt):ir.set(yt,_c)},XN=(yt,ir,_c,mu)=>(t8(yt,ir,"write to private field"),ir.set(yt,_c),_c),fX=d(function yt(ir,_c){if(ir===_c)return!0;if(ir&&_c&&typeof ir=="object"&&typeof _c=="object"){if(ir.constructor!==_c.constructor)return!1;var mu,Mu,Su;if(Array.isArray(ir)){if((mu=ir.length)!=_c.length)return!1;for(Mu=mu;Mu--!=0;)if(!yt(ir[Mu],_c[Mu]))return!1;return!0}if(ir.constructor===RegExp)return ir.source===_c.source&&ir.flags===_c.flags;if(ir.valueOf!==Object.prototype.valueOf)return ir.valueOf()===_c.valueOf();if(ir.toString!==Object.prototype.toString)return ir.toString()===_c.toString();if((mu=(Su=Object.keys(ir)).length)!==Object.keys(_c).length)return!1;for(Mu=mu;Mu--!=0;)if(!Object.prototype.hasOwnProperty.call(_c,Su[Mu]))return!1;for(Mu=mu;Mu--!=0;){var l0=Su[Mu];if(!yt(ir[l0],_c[l0]))return!1}return!0}return ir!=ir&&_c!=_c}),ZS=class jve extends sde{constructor({logger:ir=console,maxEventListeners:_c=100,rpcMiddleware:mu=[]}={}){super(),yx(this,vx,void 0),yx(this,nP,void 0),this._log=ir,this.setMaxListeners(_c),this._state={...jve._defaultState},XN(this,nP,null),XN(this,vx,null),this._handleAccountsChanged=this._handleAccountsChanged.bind(this),this._handleConnect=this._handleConnect.bind(this),this._handleChainChanged=this._handleChainChanged.bind(this),this._handleDisconnect=this._handleDisconnect.bind(this),this._handleUnlockStateChanged=this._handleUnlockStateChanged.bind(this),this._rpcRequest=this._rpcRequest.bind(this),this.request=this.request.bind(this);const Mu=new $ne.JsonRpcEngine;mu.forEach(Su=>Mu.push(Su)),this._rpcEngine=Mu}get chainId(){return iP(this,vx)}get selectedAddress(){return iP(this,nP)}isConnected(){return this._state.isConnected}async request(ir){if(!ir||typeof ir!="object"||Array.isArray(ir))throw YM({message:A8.errors.invalidRequestArgs(),data:ir});const{method:_c,params:mu}=ir;if(typeof _c!="string"||_c.length===0)throw YM({message:A8.errors.invalidRequestMethod(),data:ir});if(mu!==void 0&&!Array.isArray(mu)&&(typeof mu!="object"||mu===null))throw YM({message:A8.errors.invalidRequestParams(),data:ir});const Mu=mu==null?{method:_c}:{method:_c,params:mu};return new Promise((Su,l0)=>{this._rpcRequest(Mu,xK(Su,l0))})}_initializeState(ir){if(this._state.initialized)throw new Error("Provider already initialized.");if(ir){const{accounts:_c,chainId:mu,isUnlocked:Mu,networkVersion:Su}=ir;this._handleConnect(mu),this._handleChainChanged({chainId:mu,networkVersion:Su}),this._handleUnlockStateChanged({accounts:_c,isUnlocked:Mu}),this._handleAccountsChanged(_c)}this._state.initialized=!0,this.emit("_initialized")}_rpcRequest(ir,_c){let mu=_c;return Array.isArray(ir)||(ir.jsonrpc||(ir.jsonrpc="2.0"),ir.method!=="eth_accounts"&&ir.method!=="eth_requestAccounts"||(mu=(Mu,Su)=>{this._handleAccountsChanged(Su.result??[],ir.method==="eth_accounts"),_c(Mu,Su)})),this._rpcEngine.handle(ir,mu)}_handleConnect(ir){this._state.isConnected||(this._state.isConnected=!0,this.emit("connect",{chainId:ir}),this._log.debug(A8.info.connected(ir)))}_handleDisconnect(ir,_c){if(this._state.isConnected||!this._state.isPermanentlyDisconnected&&!ir){let mu;this._state.isConnected=!1,ir?(mu=new k5(1013,_c??A8.errors.disconnected()),this._log.debug(mu)):(mu=new k5(1011,_c??A8.errors.permanentlyDisconnected()),this._log.error(mu),XN(this,vx,null),this._state.accounts=null,XN(this,nP,null),this._state.isUnlocked=!1,this._state.isPermanentlyDisconnected=!0),this.emit("disconnect",mu)}}_handleChainChanged({chainId:ir}={}){aoe(ir)?(this._handleConnect(ir),ir!==iP(this,vx)&&(XN(this,vx,ir),this._state.initialized&&this.emit("chainChanged",iP(this,vx)))):this._log.error(A8.errors.invalidNetworkParams(),{chainId:ir})}_handleAccountsChanged(ir,_c=!1){let mu=ir;Array.isArray(ir)||(this._log.error("MetaMask: Received invalid accounts parameter. Please report this bug.",ir),mu=[]);for(const Mu of ir)if(typeof Mu!="string"){this._log.error("MetaMask: Received non-string account. Please report this bug.",ir),mu=[];break}if(!fX(this._state.accounts,mu)&&(_c&&this._state.accounts!==null&&this._log.error("MetaMask: 'eth_accounts' unexpectedly updated accounts. Please report this bug.",mu),this._state.accounts=mu,iP(this,nP)!==mu[0]&&XN(this,nP,mu[0]||null),this._state.initialized)){const Mu=[...mu];this.emit("accountsChanged",Mu)}}_handleUnlockStateChanged({accounts:ir,isUnlocked:_c}={}){typeof _c=="boolean"?_c!==this._state.isUnlocked&&(this._state.isUnlocked=_c,this._handleAccountsChanged(ir??[])):this._log.error("MetaMask: Received invalid isUnlocked parameter. Please report this bug.")}};vx=new WeakMap,nP=new WeakMap,ZS._defaultState={accounts:null,isConnected:!1,isUnlocked:!1,initialized:!1,isPermanentlyDisconnected:!1};var loe=ZS,JB={},coe={};Object.defineProperty(coe,"__esModule",{value:!0});const pde=AO;coe.default=function(yt){if(!(yt!=null&&yt.engine))throw new Error("Missing engine parameter!");const{engine:ir}=yt,_c=new pde.Duplex({objectMode:!0,read:()=>{},write:function(mu,Mu,Su){ir.handle(mu,(l0,E0)=>{_c.push(E0)}),Su()}});return ir.on&&ir.on("notification",mu=>{_c.push(mu)}),_c};var dX={},mde=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(dX,"__esModule",{value:!0});const gde=mde(GB),pge=AO;dX.default=function(yt={}){const ir={},_c=new pge.Duplex({objectMode:!0,read:()=>{},write:function(Su,l0,E0){let j0=null;try{Su.id?function(M0){const{id:B0}=M0;if(B0===null)return;const V0=ir[B0];V0?(delete ir[B0],Object.assign(V0.res,M0),setTimeout(V0.end)):console.warn(`StreamMiddleware - Unknown response id "${B0}"`)}(Su):function(M0){yt!=null&&yt.retryOnMessage&&M0.method===yt.retryOnMessage&&Object.values(ir).forEach(({req:B0,retryCount:V0=0})=>{if(!B0.id)return;if(V0>=3)throw new Error(`StreamMiddleware - Retry limit exceeded for request id "${B0.id}"`);const y1=ir[B0.id];y1&&(y1.retryCount=V0+1),Mu(B0)}),mu.emit("notification",M0)}(Su)}catch(M0){j0=M0}E0(j0)}}),mu=new gde.default;return{events:mu,middleware:(Su,l0,E0,j0)=>{ir[Su.id]={req:Su,res:l0,next:E0,end:j0},Mu(Su)},stream:_c};function Mu(Su){_c.push(Su)}};var vde=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(JB,"__esModule",{value:!0});var yde=JB.createStreamMiddleware=JB.createEngineStream=void 0;const CW=vde(coe);JB.createEngineStream=CW.default;const bde=vde(dX);yde=JB.createStreamMiddleware=bde.default;var EU={},kK={exports:{}},CK=function yt(ir,_c){if(ir&&_c)return yt(ir)(_c);if(typeof ir!="function")throw new TypeError("need wrapper function");return Object.keys(ir).forEach(function(Mu){mu[Mu]=ir[Mu]}),mu;function mu(){for(var Mu=new Array(arguments.length),Su=0;Suir.destroy(_c||void 0)),ir}ignoreStream(yt){if(!yt)throw new Error("ObjectMultiplex - name must not be empty");if(this._substreams[yt])throw new Error(`ObjectMultiplex - Substream for name "${yt}" already exists`);this._substreams[yt]=pX}_read(){}_write(yt,ir,_c){const{name:mu,data:Mu}=yt;if(!mu)return console.warn(`ObjectMultiplex - malformed chunk without name "${yt}"`),_c();const Su=this._substreams[mu];return Su?(Su!==pX&&Su.push(Mu),_c()):(console.warn(`ObjectMultiplex - orphaned data for stream "${mu}"`),_c())}};EU.ObjectMultiplex=vge;var RW=d(EU.ObjectMultiplex);const oP=yt=>yt!==null&&typeof yt=="object"&&typeof yt.pipe=="function";oP.writable=yt=>oP(yt)&&yt.writable!==!1&&typeof yt._write=="function"&&typeof yt._writableState=="object",oP.readable=yt=>oP(yt)&&yt.readable!==!1&&typeof yt._read=="function"&&typeof yt._readableState=="object",oP.duplex=yt=>oP.writable(yt)&&oP.readable(yt),oP.transform=yt=>oP.duplex(yt)&&typeof yt._transform=="function";var C5,yge=oP,bge=class extends loe{constructor(yt,{jsonRpcStreamName:ir,logger:_c=console,maxEventListeners:mu=100,rpcMiddleware:Mu=[]}){if(super({logger:_c,maxEventListeners:mu,rpcMiddleware:Mu}),!yge.duplex(yt))throw new Error(A8.errors.invalidDuplexStream());this._handleStreamDisconnect=this._handleStreamDisconnect.bind(this);const Su=new RW;AO.pipeline(yt,Su,yt,this._handleStreamDisconnect.bind(this,"MetaMask")),this._jsonRpcConnection=yde({retryOnMessage:"METAMASK_EXTENSION_CONNECT_CAN_RETRY"}),AO.pipeline(this._jsonRpcConnection.stream,Su.createStream(ir),this._jsonRpcConnection.stream,this._handleStreamDisconnect.bind(this,"MetaMask RpcProvider")),this._rpcEngine.push(this._jsonRpcConnection.middleware),this._jsonRpcConnection.events.on("notification",l0=>{const{method:E0,params:j0}=l0;E0==="metamask_accountsChanged"?this._handleAccountsChanged(j0):E0==="metamask_unlockStateChanged"?this._handleUnlockStateChanged(j0):E0==="metamask_chainChanged"?this._handleChainChanged(j0):$U.includes(E0)?this.emit("message",{type:E0,data:j0}):E0==="METAMASK_STREAM_FAILURE"&&yt.destroy(new Error(A8.errors.permanentlyDisconnected()))})}async _initializeStateAsync(){let yt;try{yt=await this.request({method:"metamask_getProviderState"})}catch(ir){this._log.error("MetaMask: Failed to get initial state. Please report this bug.",ir)}this._initializeState(yt)}_handleStreamDisconnect(yt,ir){let _c=`MetaMask: Lost connection to "${yt}".`;ir!=null&&ir.stack&&(_c+=` -${ir.stack}`),this._log.warn(_c),this.listenerCount("error")>0&&this.emit("error",_c),this._handleDisconnect(!1,ir?ir.message:void 0)}_handleChainChanged({chainId:yt,networkVersion:ir}={}){aoe(yt)&&(_c=>!!_c&&typeof _c=="string")(ir)?ir==="loading"?this._handleDisconnect(!0):super._handleChainChanged({chainId:yt}):this._log.error(A8.errors.invalidNetworkParams(),{chainId:yt,networkVersion:ir})}},mX=class extends bge{constructor(yt,{jsonRpcStreamName:ir="metamask-provider",logger:_c=console,maxEventListeners:mu=100,shouldSendMetadata:Mu}={}){if(super(yt,{jsonRpcStreamName:ir,logger:_c,maxEventListeners:mu,rpcMiddleware:lX(_c)}),this._sentWarnings={chainId:!1,networkVersion:!1,selectedAddress:!1,enable:!1,experimentalMethods:!1,send:!1,events:{close:!1,data:!1,networkChanged:!1,notification:!1}},yx(this,C5,void 0),this._initializeStateAsync(),XN(this,C5,null),this.isMetaMask=!0,this._sendSync=this._sendSync.bind(this),this.enable=this.enable.bind(this),this.send=this.send.bind(this),this.sendAsync=this.sendAsync.bind(this),this._warnOfDeprecation=this._warnOfDeprecation.bind(this),this._metamask=this._getExperimentalApi(),this._jsonRpcConnection.events.on("notification",Su=>{const{method:l0}=Su;$U.includes(l0)&&(this.emit("data",Su),this.emit("notification",Su.params.result))}),Mu)if(document.readyState==="complete")soe(this._rpcEngine,this._log);else{const Su=()=>{soe(this._rpcEngine,this._log),window.removeEventListener("DOMContentLoaded",Su)};window.addEventListener("DOMContentLoaded",Su)}}get chainId(){return this._sentWarnings.chainId||(this._log.warn(A8.warnings.chainIdDeprecation),this._sentWarnings.chainId=!0),super.chainId}get networkVersion(){return this._sentWarnings.networkVersion||(this._log.warn(A8.warnings.networkVersionDeprecation),this._sentWarnings.networkVersion=!0),iP(this,C5)}get selectedAddress(){return this._sentWarnings.selectedAddress||(this._log.warn(A8.warnings.selectedAddressDeprecation),this._sentWarnings.selectedAddress=!0),super.selectedAddress}sendAsync(yt,ir){this._rpcRequest(yt,ir)}addListener(yt,ir){return this._warnOfDeprecation(yt),super.addListener(yt,ir)}on(yt,ir){return this._warnOfDeprecation(yt),super.on(yt,ir)}once(yt,ir){return this._warnOfDeprecation(yt),super.once(yt,ir)}prependListener(yt,ir){return this._warnOfDeprecation(yt),super.prependListener(yt,ir)}prependOnceListener(yt,ir){return this._warnOfDeprecation(yt),super.prependOnceListener(yt,ir)}_handleDisconnect(yt,ir){super._handleDisconnect(yt,ir),iP(this,C5)&&!yt&&XN(this,C5,null)}_warnOfDeprecation(yt){var ir;((ir=this._sentWarnings)==null?void 0:ir.events[yt])===!1&&(this._log.warn(A8.warnings.events[yt]),this._sentWarnings.events[yt]=!0)}async enable(){return this._sentWarnings.enable||(this._log.warn(A8.warnings.enableDeprecation),this._sentWarnings.enable=!0),new Promise((yt,ir)=>{try{this._rpcRequest({method:"eth_requestAccounts",params:[]},xK(yt,ir))}catch(_c){ir(_c)}})}send(yt,ir){return this._sentWarnings.send||(this._log.warn(A8.warnings.sendDeprecation),this._sentWarnings.send=!0),typeof yt!="string"||ir&&!Array.isArray(ir)?yt&&typeof yt=="object"&&typeof ir=="function"?this._rpcRequest(yt,ir):this._sendSync(yt):new Promise((_c,mu)=>{try{this._rpcRequest({method:yt,params:ir},xK(_c,mu,!1))}catch(Mu){mu(Mu)}})}_sendSync(yt){let ir;switch(yt.method){case"eth_accounts":ir=this.selectedAddress?[this.selectedAddress]:[];break;case"eth_coinbase":ir=this.selectedAddress??null;break;case"eth_uninstallFilter":this._rpcRequest(yt,cX),ir=!0;break;case"net_version":ir=iP(this,C5)??null;break;default:throw new Error(A8.errors.unsupportedSync(yt.method))}return{id:yt.id,jsonrpc:yt.jsonrpc,result:ir}}_getExperimentalApi(){return new Proxy({isUnlocked:async()=>(this._state.initialized||await new Promise(yt=>{this.on("_initialized",()=>yt())}),this._state.isUnlocked),requestBatch:async yt=>{if(!Array.isArray(yt))throw YM({message:"Batch requests must be made with an array of request objects.",data:yt});return new Promise((ir,_c)=>{this._rpcRequest(yt,xK(ir,_c))})}},{get:(yt,ir,..._c)=>(this._sentWarnings.experimentalMethods||(this._log.warn(A8.warnings.experimentalMethods),this._sentWarnings.experimentalMethods=!0),Reflect.get(yt,ir,..._c))})}_handleChainChanged({chainId:yt,networkVersion:ir}={}){super._handleChainChanged({chainId:yt,networkVersion:ir}),this._state.isConnected&&ir!==iP(this,C5)&&(XN(this,C5,ir),this._state.initialized&&this.emit("networkChanged",iP(this,C5)))}};C5=new WeakMap;const R2=VJ("MM_SDK");R2.color="#FFAC1C";var foe={},QN={};Object.defineProperty(QN,"__esModule",{value:!0}),QN.EthereumProviderError=QN.EthereumRpcError=void 0;const wge=Yie;class Ade extends Error{constructor(ir,_c,mu){if(!Number.isInteger(ir))throw new Error('"code" must be an integer.');if(!_c||typeof _c!="string")throw new Error('"message" must be a nonempty string.');super(_c),this.code=ir,mu!==void 0&&(this.data=mu)}serialize(){const ir={code:this.code,message:this.message};return this.data!==void 0&&(ir.data=this.data),this.stack&&(ir.stack=this.stack),ir}toString(){return wge.default(this.serialize(),$ge,2)}}function $ge(yt,ir){if(ir!=="[Circular]")return ir}QN.EthereumRpcError=Ade,QN.EthereumProviderError=class extends Ade{constructor(yt,ir,_c){if(!function(mu){return Number.isInteger(mu)&&mu>=1e3&&mu<=4999}(yt))throw new Error('"code" must be an integer such that: 1000 <= code <= 4999');super(yt,ir,_c)}};var aP={},uT={};Object.defineProperty(uT,"__esModule",{value:!0}),uT.errorValues=uT.errorCodes=void 0,uT.errorCodes={rpc:{invalidInput:-32e3,resourceNotFound:-32001,resourceUnavailable:-32002,transactionRejected:-32003,methodNotSupported:-32004,limitExceeded:-32005,parse:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internal:-32603},provider:{userRejectedRequest:4001,unauthorized:4100,unsupportedMethod:4200,disconnected:4900,chainDisconnected:4901}},uT.errorValues={"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."},"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32000":{standard:"EIP-1474",message:"Invalid input."},"-32001":{standard:"EIP-1474",message:"Resource not found."},"-32002":{standard:"EIP-1474",message:"Resource unavailable."},"-32003":{standard:"EIP-1474",message:"Transaction rejected."},"-32004":{standard:"EIP-1474",message:"Method not supported."},"-32005":{standard:"EIP-1474",message:"Request limit exceeded."},4001:{standard:"EIP-1193",message:"User rejected the request."},4100:{standard:"EIP-1193",message:"The requested account and/or method has not been authorized by the user."},4200:{standard:"EIP-1193",message:"The requested method is not supported by this Ethereum provider."},4900:{standard:"EIP-1193",message:"The provider is disconnected from all chains."},4901:{standard:"EIP-1193",message:"The provider is disconnected from the specified chain."}},function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.serializeError=yt.isValidCode=yt.getMessageFromCode=yt.JSON_RPC_SERVER_ERROR_MESSAGE=void 0;const ir=uT,_c=QN,mu=ir.errorCodes.rpc.internal,Mu={code:mu,message:Su(mu)};function Su(B0,V0="Unspecified error message. This is a bug, please report it."){if(Number.isInteger(B0)){const y1=B0.toString();if(M0(ir.errorValues,y1))return ir.errorValues[y1].message;if(E0(B0))return yt.JSON_RPC_SERVER_ERROR_MESSAGE}return V0}function l0(B0){if(!Number.isInteger(B0))return!1;const V0=B0.toString();return!!ir.errorValues[V0]||!!E0(B0)}function E0(B0){return B0>=-32099&&B0<=-32e3}function j0(B0){return B0&&typeof B0=="object"&&!Array.isArray(B0)?Object.assign({},B0):B0}function M0(B0,V0){return Object.prototype.hasOwnProperty.call(B0,V0)}yt.JSON_RPC_SERVER_ERROR_MESSAGE="Unspecified server error.",yt.getMessageFromCode=Su,yt.isValidCode=l0,yt.serializeError=function(B0,{fallbackError:V0=Mu,shouldIncludeStack:y1=!1}={}){var v1,F1;if(!V0||!Number.isInteger(V0.code)||typeof V0.message!="string")throw new Error("Must provide fallback error with integer number code and string message.");if(B0 instanceof _c.EthereumRpcError)return B0.serialize();const ov={};if(B0&&typeof B0=="object"&&!Array.isArray(B0)&&M0(B0,"code")&&l0(B0.code)){const gv=B0;ov.code=gv.code,gv.message&&typeof gv.message=="string"?(ov.message=gv.message,M0(gv,"data")&&(ov.data=gv.data)):(ov.message=Su(ov.code),ov.data={originalError:j0(B0)})}else{ov.code=V0.code;const gv=(v1=B0)===null||v1===void 0?void 0:v1.message;ov.message=gv&&typeof gv=="string"?gv:V0.message,ov.data={originalError:j0(B0)}}const bv=(F1=B0)===null||F1===void 0?void 0:F1.stack;return y1&&B0&&bv&&typeof bv=="string"&&(ov.stack=bv),ov}}(aP);var MW={};Object.defineProperty(MW,"__esModule",{value:!0}),MW.ethErrors=void 0;const ZM=QN,gX=aP,r8=uT;function JM(yt,ir){const[_c,mu]=doe(ir);return new ZM.EthereumRpcError(yt,_c||gX.getMessageFromCode(yt),mu)}function IW(yt,ir){const[_c,mu]=doe(ir);return new ZM.EthereumProviderError(yt,_c||gX.getMessageFromCode(yt),mu)}function doe(yt){if(yt){if(typeof yt=="string")return[yt];if(typeof yt=="object"&&!Array.isArray(yt)){const{message:ir,data:_c}=yt;if(ir&&typeof ir!="string")throw new Error("Must specify string message.");return[ir||void 0,_c]}}return[]}MW.ethErrors={rpc:{parse:yt=>JM(r8.errorCodes.rpc.parse,yt),invalidRequest:yt=>JM(r8.errorCodes.rpc.invalidRequest,yt),invalidParams:yt=>JM(r8.errorCodes.rpc.invalidParams,yt),methodNotFound:yt=>JM(r8.errorCodes.rpc.methodNotFound,yt),internal:yt=>JM(r8.errorCodes.rpc.internal,yt),server:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum RPC Server errors must provide single object argument.");const{code:ir}=yt;if(!Number.isInteger(ir)||ir>-32005||ir<-32099)throw new Error('"code" must be an integer such that: -32099 <= code <= -32005');return JM(ir,yt)},invalidInput:yt=>JM(r8.errorCodes.rpc.invalidInput,yt),resourceNotFound:yt=>JM(r8.errorCodes.rpc.resourceNotFound,yt),resourceUnavailable:yt=>JM(r8.errorCodes.rpc.resourceUnavailable,yt),transactionRejected:yt=>JM(r8.errorCodes.rpc.transactionRejected,yt),methodNotSupported:yt=>JM(r8.errorCodes.rpc.methodNotSupported,yt),limitExceeded:yt=>JM(r8.errorCodes.rpc.limitExceeded,yt)},provider:{userRejectedRequest:yt=>IW(r8.errorCodes.provider.userRejectedRequest,yt),unauthorized:yt=>IW(r8.errorCodes.provider.unauthorized,yt),unsupportedMethod:yt=>IW(r8.errorCodes.provider.unsupportedMethod,yt),disconnected:yt=>IW(r8.errorCodes.provider.disconnected,yt),chainDisconnected:yt=>IW(r8.errorCodes.provider.chainDisconnected,yt),custom:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum Provider custom errors must provide single object argument.");const{code:ir,message:_c,data:mu}=yt;if(!_c||typeof _c!="string")throw new Error('"message" must be a nonempty string');return new ZM.EthereumProviderError(ir,_c,mu)}}},function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.getMessageFromCode=yt.serializeError=yt.EthereumProviderError=yt.EthereumRpcError=yt.ethErrors=yt.errorCodes=void 0;const ir=QN;Object.defineProperty(yt,"EthereumRpcError",{enumerable:!0,get:function(){return ir.EthereumRpcError}}),Object.defineProperty(yt,"EthereumProviderError",{enumerable:!0,get:function(){return ir.EthereumProviderError}});const _c=aP;Object.defineProperty(yt,"serializeError",{enumerable:!0,get:function(){return _c.serializeError}}),Object.defineProperty(yt,"getMessageFromCode",{enumerable:!0,get:function(){return _c.getMessageFromCode}});const mu=MW;Object.defineProperty(yt,"ethErrors",{enumerable:!0,get:function(){return mu.ethErrors}});const Mu=uT;Object.defineProperty(yt,"errorCodes",{enumerable:!0,get:function(){return Mu.errorCodes}})}(foe);const $E={METAMASK_GETPROVIDERSTATE:"metamask_getProviderState",METAMASK_CONNECTSIGN:"metamask_connectSign",METAMASK_CONNECTWITH:"metamask_connectWith",METAMASK_OPEN:"metamask_open",METAMASK_BATCH:"metamask_batch",PERSONAL_SIGN:"personal_sign",WALLET_REQUESTPERMISSIONS:"wallet_requestPermissions",WALLET_GETPERMISSIONS:"wallet_getPermissions",WALLET_WATCHASSET:"wallet_watchAsset",WALLET_ADDETHEREUMCHAIN:"wallet_addEthereumChain",WALLET_SWITCHETHETHEREUMCHAIN:"wallet_switchEthereumChain",ETH_REQUESTACCOUNTS:"eth_requestAccounts",ETH_ACCOUNTS:"eth_accounts",ETH_CHAINID:"eth_chainId",ETH_SENDTRANSACTION:"eth_sendTransaction",ETH_SIGNTYPEDDATA:"eth_signTypedData",ETH_SIGNTYPEDDATA_V3:"eth_signTypedData_v3",ETH_SIGNTYPEDDATA_V4:"eth_signTypedData_v4",ETH_SIGNTRANSACTION:"eth_signTransaction",ETH_SIGN:"eth_sign",PERSONAL_EC_RECOVER:"personal_ecRecover"},XB={[$E.ETH_REQUESTACCOUNTS]:!0,[$E.ETH_SENDTRANSACTION]:!0,[$E.ETH_SIGNTRANSACTION]:!0,[$E.ETH_SIGN]:!0,[$E.ETH_ACCOUNTS]:!0,[$E.PERSONAL_SIGN]:!0,[$E.ETH_SIGNTYPEDDATA]:!0,[$E.ETH_SIGNTYPEDDATA_V3]:!0,[$E.ETH_SIGNTYPEDDATA_V4]:!0,[$E.WALLET_REQUESTPERMISSIONS]:!0,[$E.WALLET_GETPERMISSIONS]:!0,[$E.WALLET_WATCHASSET]:!0,[$E.WALLET_ADDETHEREUMCHAIN]:!0,[$E.WALLET_SWITCHETHETHEREUMCHAIN]:!0,[$E.METAMASK_CONNECTSIGN]:!0,[$E.METAMASK_CONNECTWITH]:!0,[$E.PERSONAL_EC_RECOVER]:!0,[$E.METAMASK_BATCH]:!0,[$E.METAMASK_OPEN]:!0},hoe=Object.keys(XB).map(yt=>yt.toLowerCase()),Ege=["eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sign"].map(yt=>yt.toLowerCase()),OW=".sdk-comm",vX="providerType",poe=".MMSDK_cached_address",moe=".MMSDK_cached_chainId",goe="chainChanged",voe="accountsChanged",_de="disconnect",Sde="connect",PW="connected";class yoe{constructor({enabled:ir}={enabled:!1}){this.enabled=!1,this.enabled=ir}persistChannelConfig(ir){return s$(this,void 0,void 0,function*(){const _c=JSON.stringify(ir);R2(`[StorageManagerWeb: persistChannelConfig()] enabled=${this.enabled}`,ir),localStorage.setItem(OW,_c)})}getPersistedChannelConfig(){return s$(this,void 0,void 0,function*(){let ir;try{if(R2(`[StorageManagerWeb: getPersistedChannelConfig()] enabled=${this.enabled}`),ir=localStorage.getItem(OW),R2("[StorageManagerWeb: getPersistedChannelConfig()]",ir),!ir)return;const _c=JSON.parse(ir);return R2("[StorageManagerWeb: getPersistedChannelConfig()] channelConfig",_c),_c}catch(_c){return void console.error("[StorageManagerWeb: getPersistedChannelConfig()] Can't find existing channel config",_c)}})}persistAccounts(ir){return s$(this,void 0,void 0,function*(){R2(`[StorageManagerWeb: persistAccounts()] enabled=${this.enabled}`,ir);const _c=JSON.stringify(ir);localStorage.setItem(poe,_c)})}getCachedAccounts(){return s$(this,void 0,void 0,function*(){try{const ir=localStorage.getItem(poe);return ir?JSON.parse(ir):[]}catch(ir){throw console.error("[StorageManagerWeb: getCachedAccounts()] Error reading cached accounts",ir),ir}})}persistChainId(ir){return s$(this,void 0,void 0,function*(){R2(`[StorageManagerWeb: persistChainId()] enabled=${this.enabled}`,ir),localStorage.setItem(moe,ir)})}getCachedChainId(){return s$(this,void 0,void 0,function*(){try{const ir=localStorage.getItem(moe);return ir??void 0}catch(ir){throw console.error("[StorageManagerWeb: getCachedChainId()] Error reading cached chainId",ir),ir}})}terminate(){return s$(this,void 0,void 0,function*(){R2(`[StorageManagerWeb: terminate()] enabled=${this.enabled}`),localStorage.removeItem(OW)})}}const xde=yt=>new yoe(yt);class boe extends mX{constructor({connectionStream:ir,shouldSendMetadata:_c,autoRequestAccounts:mu=!1}){super(ir,{logger:console,maxEventListeners:100,shouldSendMetadata:_c}),this.state={autoRequestAccounts:!1,providerStateRequested:!1,chainId:"",networkVersion:""},R2(`[SDKProvider: constructor()] autoRequestAccounts=${mu}`),this.state.autoRequestAccounts=mu}forceInitializeState(){return s$(this,void 0,void 0,function*(){return R2(`[SDKProvider: forceInitializeState()] autoRequestAccounts=${this.state.autoRequestAccounts}`),this._initializeStateAsync()})}_setConnected(){R2("[SDKProvider: _setConnected()] Setting connected state"),this._state.isConnected=!0}getState(){return this._state}getSDKProviderState(){return this.state}getSelectedAddress(){var ir;const{accounts:_c}=this._state;return _c&&_c.length!==0?((ir=_c[0])===null||ir===void 0?void 0:ir.toLowerCase())||"":(R2("[SDKProvider: getSelectedAddress] No accounts found"),null)}getChainId(){return this.state.chainId}getNetworkVersion(){return this.state.networkVersion}setSDKProviderState(ir){this.state=Object.assign(Object.assign({},this.state),ir)}handleDisconnect({terminate:ir=!1}){(function({terminate:_c=!1,instance:mu}){const{state:Mu}=mu;mu.isConnected()?(R2(`[SDKProvider: handleDisconnect()] cleaning up provider state terminate=${_c}`,mu),_c&&(mu._state.accounts=null,mu._state.isUnlocked=!1,mu._state.isPermanentlyDisconnected=!0,mu._state.initialized=!1),mu._handleAccountsChanged([]),mu._state.isConnected=!1,mu.emit("disconnect",foe.ethErrors.provider.disconnected()),Mu.providerStateRequested=!1):R2("[SDKProvider: handleDisconnect()] not connected --- interrupt disconnection")})({terminate:ir,instance:this})}_initializeStateAsync(){return s$(this,void 0,void 0,function*(){return function(ir){var _c,mu;return s$(this,void 0,void 0,function*(){ir.state===void 0&&(ir.state={autoRequestAccounts:!1,providerStateRequested:!1,chainId:""});const{state:Mu}=ir;let Su;if(Mu.providerStateRequested)R2("[SDKProvider: initializeStateAsync()] initialization already in progress");else{let l0;Mu.providerStateRequested=!0;let E0=null,j0=!1,M0=!1;const B0=xde({enabled:!0});if(B0){const V0=yield B0.getPersistedChannelConfig();j0=(_c=V0==null?void 0:V0.relayPersistence)!==null&&_c!==void 0&&_c,l0=yield B0.getCachedChainId();const y1=yield B0.getCachedAccounts();y1.length>0&&(E0=y1[0])}if(R2(`[SDKProvider: initializeStateAsync()] relayPersistence=${j0}`,{relayPersistence:j0,cachedChainId:l0,cachedSelectedAddress:E0}),j0)if(l0&&E0)Su={accounts:[E0],chainId:l0,isUnlocked:!1},M0=!0;else try{Su=yield ir.request({method:"metamask_getProviderState"})}catch(V0){return ir._log.error("MetaMask: Failed to get initial state. Please report this bug.",V0),void(Mu.providerStateRequested=!1)}if(((mu=Su==null?void 0:Su.accounts)===null||mu===void 0?void 0:mu.length)===0)if(ir.getSelectedAddress())Su.accounts=[ir.getSelectedAddress()];else{R2("[SDKProvider: initializeStateAsync()] Fetch accounts remotely.");const V0=yield ir.request({method:"eth_requestAccounts",params:[]});Su.accounts=V0}ir._initializeState(Su),Mu.providerStateRequested=!1,M0&&(ir._state.isConnected=!0,ir.emit("connect",{chainId:Su==null?void 0:Su.chainId}))}})}(this)})}_initializeState(ir){return R2("[SDKProvider: _initializeState()]",ir),function(_c,mu,Mu){return R2("[SDKProvider: initializeState()] set state._initialized to false"),_c._state.initialized=!1,mu(Mu)}(this,super._initializeState.bind(this),ir)}_handleChainChanged({chainId:ir,networkVersion:_c}={}){this.state.chainId=ir,this.state.networkVersion=_c,function({instance:mu,chainId:Mu,networkVersion:Su,superHandleChainChanged:l0}){R2(`[SDKProvider: handleChainChanged()] chainId=${Mu} networkVersion=${Su}`);let E0=Su;Su||(R2("[SDKProvider: handleChainChanged()] forced network version to prevent provider error"),E0="1"),mu._state.isConnected=!0,mu.emit("connect",{chainId:Mu}),l0({chainId:Mu,networkVersion:E0})}({instance:this,chainId:ir,networkVersion:_c,superHandleChainChanged:super._handleChainChanged.bind(this)})}}var jW={exports:{}};(function(yt,ir){(function(_c){var mu=Object.hasOwnProperty,Mu=Array.isArray?Array.isArray:function(a0){return Object.prototype.toString.call(a0)==="[object Array]"},Su=typeof Kv=="object"&&!0,l0=typeof Symbol=="function",E0=typeof Reflect=="object",j0=typeof setImmediate=="function"?setImmediate:setTimeout,M0=l0?E0&&typeof Reflect.ownKeys=="function"?Reflect.ownKeys:function(a0){var S0=Object.getOwnPropertyNames(a0);return S0.push.apply(S0,Object.getOwnPropertySymbols(a0)),S0}:Object.keys;function B0(){this._events={},this._conf&&V0.call(this,this._conf)}function V0(a0){a0&&(this._conf=a0,a0.delimiter&&(this.delimiter=a0.delimiter),a0.maxListeners!==_c&&(this._maxListeners=a0.maxListeners),a0.wildcard&&(this.wildcard=a0.wildcard),a0.newListener&&(this._newListener=a0.newListener),a0.removeListener&&(this._removeListener=a0.removeListener),a0.verboseMemoryLeak&&(this.verboseMemoryLeak=a0.verboseMemoryLeak),a0.ignoreErrors&&(this.ignoreErrors=a0.ignoreErrors),this.wildcard&&(this.listenerTree={}))}function y1(a0,S0){var z0="(node) warning: possible EventEmitter memory leak detected. "+a0+" listeners added. Use emitter.setMaxListeners() to increase limit.";if(this.verboseMemoryLeak&&(z0+=" Event name: "+S0+"."),Kv!==void 0&&Kv.emitWarning){var Q0=new Error(z0);Q0.name="MaxListenersExceededWarning",Q0.emitter=this,Q0.count=a0,Kv.emitWarning(Q0)}else console.error(z0),console.trace&&console.trace()}var v1=function(a0,S0,z0){var Q0=arguments.length;switch(Q0){case 0:return[];case 1:return[a0];case 2:return[a0,S0];case 3:return[a0,S0,z0];default:for(var p1=new Array(Q0);Q0--;)p1[Q0]=arguments[Q0];return p1}};function F1(a0,S0){for(var z0={},Q0=a0.length,p1=0,T1=0;T10;)if(S1===a0[n1])return T1;U1(S0)}}Object.assign(ov.prototype,{subscribe:function(a0,S0,z0){var Q0=this,p1=this._target,T1=this._emitter,U1=this._listeners,S1=function(){var n1=v1.apply(null,arguments),V1={data:n1,name:S0,original:a0};z0?z0.call(p1,V1)!==!1&&T1.emit.apply(T1,[V1.name].concat(n1)):T1.emit.apply(T1,[S0].concat(n1))};if(U1[a0])throw Error("Event '"+a0+"' is already listening");this._listenersCount++,T1._newListener&&T1._removeListener&&!Q0._onNewListener?(this._onNewListener=function(n1){n1===S0&&U1[a0]===null&&(U1[a0]=S1,Q0._on.call(p1,a0,S1))},T1.on("newListener",this._onNewListener),this._onRemoveListener=function(n1){n1===S0&&!T1.hasListeners(n1)&&U1[a0]&&(U1[a0]=null,Q0._off.call(p1,a0,S1))},U1[a0]=null,T1.on("removeListener",this._onRemoveListener)):(U1[a0]=S1,Q0._on.call(p1,a0,S1))},unsubscribe:function(a0){var S0,z0,Q0,p1=this,T1=this._listeners,U1=this._emitter,S1=this._off,n1=this._target;if(a0&&typeof a0!="string")throw TypeError("event must be a string");function V1(){p1._onNewListener&&(U1.off("newListener",p1._onNewListener),U1.off("removeListener",p1._onRemoveListener),p1._onNewListener=null,p1._onRemoveListener=null);var J1=Fy.call(U1,p1);U1._observers.splice(J1,1)}if(a0){if(!(S0=T1[a0]))return;S1.call(n1,a0,S0),delete T1[a0],--this._listenersCount||V1()}else{for(Q0=(z0=M0(T1)).length;Q0-- >0;)a0=z0[Q0],S1.call(n1,a0,T1[a0]);this._listeners={},this._listenersCount=0,V1()}}});var hy=xv(["function"]),oy=xv(["object","function"]);function fy(a0,S0,z0){var Q0,p1,T1,U1=0,S1=new a0(function(n1,V1,J1){function wv(){p1&&(p1=null),U1&&(clearTimeout(U1),U1=0)}z0=bv(z0,{timeout:0,overload:!1},{timeout:function(ty,gy){return(typeof(ty*=1)!="number"||ty<0||!Number.isFinite(ty))&&gy("timeout must be a positive number"),ty}}),Q0=!z0.overload&&typeof a0.prototype.cancel=="function"&&typeof J1=="function";var Sv=function(ty){wv(),n1(ty)},Hv=function(ty){wv(),V1(ty)};Q0?S0(Sv,Hv,J1):(p1=[function(ty){Hv(ty||Error("canceled"))}],S0(Sv,Hv,function(ty){if(T1)throw Error("Unable to subscribe on cancel event asynchronously");if(typeof ty!="function")throw TypeError("onCancel callback must be a function");p1.push(ty)}),T1=!0),z0.timeout>0&&(U1=setTimeout(function(){var ty=Error("timeout");ty.code="ETIMEDOUT",U1=0,S1.cancel(ty),V1(ty)},z0.timeout))});return Q0||(S1.cancel=function(n1){if(p1){for(var V1=p1.length,J1=1;J10;)(Sv=Av[S1])!=="_listeners"&&(Dv=qv(a0,S0,z0[Sv],Q0+1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv);return ry}if(Jv==="**"){for((yv=Q0+1===p1||Q0+2===p1&&Fv==="*")&&z0._listeners&&(ry=qv(a0,S0,z0,p1,p1)),S1=(Av=M0(z0)).length;S1-- >0;)(Sv=Av[S1])!=="_listeners"&&(Sv==="*"||Sv==="**"?(z0[Sv]._listeners&&!yv&&(Dv=qv(a0,S0,z0[Sv],p1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv),Dv=qv(a0,S0,z0[Sv],Q0,p1)):Dv=qv(a0,S0,z0[Sv],Sv===Fv?Q0+2:Q0,p1),Dv&&(ry?ry.push.apply(ry,Dv):ry=Dv));return ry}z0[Jv]&&(ry=qv(a0,S0,z0[Jv],Q0+1,p1))}if((Hv=z0["*"])&&qv(a0,S0,Hv,Q0+1,p1),ty=z0["**"])if(Q00;)(Sv=Av[S1])!=="_listeners"&&(Sv===Fv?qv(a0,S0,ty[Sv],Q0+2,p1):Sv===Jv?qv(a0,S0,ty[Sv],Q0+1,p1):((gy={})[Sv]=ty[Sv],qv(a0,S0,{"**":gy},Q0+1,p1)));else ty._listeners?qv(a0,S0,ty,p1,p1):ty["*"]&&ty["*"]._listeners&&qv(a0,S0,ty["*"],p1,p1);return ry}function Qv(a0,S0,z0){var Q0,p1,T1=0,U1=0,S1=this.delimiter,n1=S1.length;if(typeof a0=="string")if((Q0=a0.indexOf(S1))!==-1){p1=new Array(5);do p1[T1++]=a0.slice(U1,Q0),U1=Q0+n1;while((Q0=a0.indexOf(S1,U1))!==-1);p1[T1++]=a0.slice(U1)}else p1=[a0],T1=1;else p1=a0,T1=a0.length;if(T1>1){for(Q0=0;Q0+10&&J1._listeners.length>this._maxListeners&&(J1._listeners.warned=!0,y1.call(this,J1._listeners.length,V1))):J1._listeners=S0,!0;return!0}function T0(a0,S0,z0,Q0){for(var p1,T1,U1,S1,n1=M0(a0),V1=n1.length,J1=a0._listeners;V1-- >0;)p1=a0[T1=n1[V1]],U1=T1==="_listeners"?z0:z0?z0.concat(T1):[T1],S1=Q0||typeof T1=="symbol",J1&&S0.push(S1?U1:U1.join(this.delimiter)),typeof p1=="object"&&T0.call(this,p1,S0,U1,S1);return S0}function X0(a0){for(var S0,z0,Q0,p1=M0(a0),T1=p1.length;T1-- >0;)(S0=a0[z0=p1[T1]])&&(Q0=!0,z0==="_listeners"||X0(S0)||delete a0[z0]);return Q0}function s0(a0,S0,z0){this.emitter=a0,this.event=S0,this.listener=z0}function g0(a0,S0,z0){if(z0===!0)p1=!0;else if(z0===!1)Q0=!0;else{if(!z0||typeof z0!="object")throw TypeError("options should be an object or true");var Q0=z0.async,p1=z0.promisify,T1=z0.nextTick,U1=z0.objectify}if(Q0||T1||p1){var S1=S0,n1=S0._origin||S0;if(T1&&!Su)throw Error("process.nextTick is not supported");p1===_c&&(p1=S0.constructor.name==="AsyncFunction"),S0=function(){var V1=arguments,J1=this,wv=this.event;return p1?T1?Promise.resolve():new Promise(function(Sv){j0(Sv)}).then(function(){return J1.event=wv,S1.apply(J1,V1)}):(T1?$2:j0)(function(){J1.event=wv,S1.apply(J1,V1)})},S0._async=!0,S0._origin=n1}return[S0,U1?new s0(this,a0,S0):this]}function d0(a0){this._events={},this._newListener=!1,this._removeListener=!1,this.verboseMemoryLeak=!1,V0.call(this,a0)}s0.prototype.off=function(){return this.emitter.off(this.event,this.listener),this},d0.EventEmitter2=d0,d0.prototype.listenTo=function(a0,S0,z0){if(typeof a0!="object")throw TypeError("target musts be an object");var Q0=this;function p1(T1){if(typeof T1!="object")throw TypeError("events must be an object");var U1,S1=z0.reducers,n1=Fy.call(Q0,a0);U1=n1===-1?new ov(Q0,a0,z0):Q0._observers[n1];for(var V1,J1=M0(T1),wv=J1.length,Sv=typeof S1=="function",Hv=0;Hv0;)Q0=z0[p1],a0&&Q0._target!==a0||(Q0.unsubscribe(S0),T1=!0);return T1},d0.prototype.delimiter=".",d0.prototype.setMaxListeners=function(a0){a0!==_c&&(this._maxListeners=a0,this._conf||(this._conf={}),this._conf.maxListeners=a0)},d0.prototype.getMaxListeners=function(){return this._maxListeners},d0.prototype.event="",d0.prototype.once=function(a0,S0,z0){return this._once(a0,S0,!1,z0)},d0.prototype.prependOnceListener=function(a0,S0,z0){return this._once(a0,S0,!0,z0)},d0.prototype._once=function(a0,S0,z0,Q0){return this._many(a0,1,S0,z0,Q0)},d0.prototype.many=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!1,Q0)},d0.prototype.prependMany=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!0,Q0)},d0.prototype._many=function(a0,S0,z0,Q0,p1){var T1=this;if(typeof z0!="function")throw new Error("many only accepts instances of Function");function U1(){return--S0==0&&T1.off(a0,U1),z0.apply(this,arguments)}return U1._origin=z0,this._on(a0,U1,Q0,p1)},d0.prototype.emit=function(){if(!this._events&&!this._all)return!1;this._events||B0.call(this);var a0,S0,z0,Q0,p1,T1,U1=arguments[0],S1=this.wildcard;if(U1==="newListener"&&!this._newListener&&!this._events.newListener)return!1;if(S1&&(a0=U1,U1!=="newListener"&&U1!=="removeListener"&&typeof U1=="object")){if(z0=U1.length,l0){for(Q0=0;Q03)for(S0=new Array(V1-1),p1=1;p13)for(z0=new Array(J1-1),T1=1;T10&&this._events[a0].length>this._maxListeners&&(this._events[a0].warned=!0,y1.call(this,this._events[a0].length,a0))):this._events[a0]=S0,T1)},d0.prototype.off=function(a0,S0){if(typeof S0!="function")throw new Error("removeListener only takes instances of Function");var z0,Q0=[];if(this.wildcard){var p1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();if(!(Q0=qv.call(this,null,p1,this.listenerTree,0)))return this}else{if(!this._events[a0])return this;z0=this._events[a0],Q0.push({_listeners:z0})}for(var T1=0;T10){for(z0=0,Q0=(S0=this._all).length;z00;)typeof(z0=U1[S0[p1]])=="function"?Q0.push(z0):Q0.push.apply(Q0,z0);return Q0}if(this.wildcard){if(!(T1=this.listenerTree))return[];var S1=[],n1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S1,n1,T1,0),S1}return U1&&(z0=U1[a0])?typeof z0=="function"?[z0]:z0:[]},d0.prototype.eventNames=function(a0){var S0=this._events;return this.wildcard?T0.call(this,this.listenerTree,[],null,a0):S0?M0(S0):[]},d0.prototype.listenerCount=function(a0){return this.listeners(a0).length},d0.prototype.hasListeners=function(a0){if(this.wildcard){var S0=[],z0=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S0,z0,this.listenerTree,0),S0.length>0}var Q0=this._events,p1=this._all;return!!(p1&&p1.length||Q0&&(a0===_c?M0(Q0).length:Q0[a0]))},d0.prototype.listenersAny=function(){return this._all?this._all:[]},d0.prototype.waitFor=function(a0,S0){var z0=this,Q0=typeof S0;return Q0==="number"?S0={timeout:S0}:Q0==="function"&&(S0={filter:S0}),fy((S0=bv(S0,{timeout:0,filter:_c,handleError:!1,Promise,overload:!1},{filter:hy,Promise:gv})).Promise,function(p1,T1,U1){function S1(){var n1=S0.filter;if(!n1||n1.apply(z0,arguments))if(z0.off(a0,S1),S0.handleError){var V1=arguments[0];V1?T1(V1):p1(v1.apply(null,arguments).slice(1))}else p1(v1.apply(null,arguments))}U1(function(){z0.off(a0,S1)}),z0._on(a0,S1,!1)},{timeout:S0.timeout,overload:S0.overload})};var c0=d0.prototype;Object.defineProperties(d0,{defaultMaxListeners:{get:function(){return c0._maxListeners},set:function(a0){if(typeof a0!="number"||a0<0||Number.isNaN(a0))throw TypeError("n must be a non-negative number");c0._maxListeners=a0},enumerable:!0},once:{value:function(a0,S0,z0){return fy((z0=bv(z0,{Promise,timeout:0,overload:!1},{Promise:gv})).Promise,function(Q0,p1,T1){var U1;if(typeof a0.addEventListener=="function")return U1=function(){Q0(v1.apply(null,arguments))},T1(function(){a0.removeEventListener(S0,U1)}),void a0.addEventListener(S0,U1,{once:!0});var S1,n1=function(){S1&&a0.removeListener("error",S1),Q0(v1.apply(null,arguments))};S0!=="error"&&(S1=function(V1){a0.removeListener(S0,n1),p1(V1)},a0.once("error",S1)),T1(function(){S1&&a0.removeListener("error",S1),a0.removeListener(S0,n1)}),a0.once(S0,n1)},{timeout:z0.timeout,overload:z0.overload})},writable:!0,configurable:!0}}),Object.defineProperties(c0,{_maxListeners:{value:10,writable:!0,configurable:!0},_observers:{value:null,writable:!0,configurable:!0}}),yt.exports=d0})()})(jW);var kde=d(jW.exports);function XM(yt){return XM=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ir){return typeof ir}:function(ir){return ir&&typeof Symbol=="function"&&ir.constructor===Symbol&&ir!==Symbol.prototype?"symbol":typeof ir},XM(yt)}function OR(yt,ir){if(!(yt instanceof ir))throw new TypeError("Cannot call a class as a function")}function Cde(yt){var ir=function(_c,mu){if(XM(_c)!=="object"||_c===null)return _c;var Mu=_c[Symbol.toPrimitive];if(Mu!==void 0){var Su=Mu.call(_c,"string");if(XM(Su)!=="object")return Su;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(_c)}(yt);return XM(ir)==="symbol"?ir:String(ir)}function Tde(yt,ir){for(var _c=0;_cyt.length)&&(ir=yt.length);for(var _c=0,mu=new Array(ir);_c1&&arguments[1]!==void 0?arguments[1]:{};OR(this,yt),this.init(ir,_c)}return sP(yt,[{key:"init",value:function(ir){var _c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=_c.prefix||"i18next:",this.logger=ir||Age,this.options=_c,this.debug=_c.debug}},{key:"setDebug",value:function(ir){this.debug=ir}},{key:"log",value:function(){for(var ir=arguments.length,_c=new Array(ir),mu=0;mu1?_c-1:0),Mu=1;Mu<_c;Mu++)mu[Mu-1]=arguments[Mu];this.observers[ir]&&[].concat(this.observers[ir]).forEach(function(Su){Su.apply(void 0,mu)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(function(Su){Su.apply(Su,[ir].concat(mu))})}}]),yt}();function QM(){var yt,ir,_c=new Promise(function(mu,Mu){yt=mu,ir=Mu});return _c.resolve=yt,_c.reject=ir,_c}function Mde(yt){return yt==null?"":""+yt}function bX(yt,ir,_c){function mu(E0){return E0&&E0.indexOf("###")>-1?E0.replace(/###/g,"."):E0}function Mu(){return!yt||typeof yt=="string"}for(var Su=typeof ir!="string"?[].concat(ir):ir.split(".");Su.length>1;){if(Mu())return{};var l0=mu(Su.shift());!yt[l0]&&_c&&(yt[l0]=new _c),yt=Object.prototype.hasOwnProperty.call(yt,l0)?yt[l0]:{}}return Mu()?{}:{obj:yt,k:mu(Su.shift())}}function Ide(yt,ir,_c){var mu=bX(yt,ir,Object);mu.obj[mu.k]=_c}function IK(yt,ir){var _c=bX(yt,ir),mu=_c.obj,Mu=_c.k;if(mu)return mu[Mu]}function tL(yt,ir,_c){for(var mu in ir)mu!=="__proto__"&&mu!=="constructor"&&(mu in yt?typeof yt[mu]=="string"||yt[mu]instanceof String||typeof ir[mu]=="string"||ir[mu]instanceof String?_c&&(yt[mu]=ir[mu]):tL(yt[mu],ir[mu],_c):yt[mu]=ir[mu]);return yt}function rL(yt){return yt.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var $oe={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function Ode(yt){return typeof yt=="string"?yt.replace(/[&<>"'\/]/g,function(ir){return $oe[ir]}):yt}var J6=typeof window<"u"&&window.navigator&&window.navigator.userAgentData===void 0&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,eI=[" ",",","?","!",";"];function eD(yt,ir){var _c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(yt){if(yt[ir])return yt[ir];for(var mu=ir.split(_c),Mu=yt,Su=0;SuSu+l0;)l0++,j0=Mu[E0=mu.slice(Su,Su+l0).join(_c)];if(j0===void 0)return;if(j0===null)return null;if(ir.endsWith(E0)){if(typeof j0=="string")return j0;if(E0&&typeof j0[E0]=="string")return j0[E0]}var M0=mu.slice(Su+l0).join(_c);return M0?eD(j0,M0,_c):void 0}Mu=Mu[mu[Su]]}return Mu}}function Eoe(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function dE(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var Su,l0=cP(mu);if(Mu){var E0=cP(this).constructor;Su=Reflect.construct(l0,arguments,E0)}else Su=l0.apply(this,arguments);return MK(this,Su)}}(_c);function _c(mu){var Mu,Su=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};return OR(this,_c),Mu=ir.call(this),J6&&eL.call(lP(Mu)),Mu.data=mu||{},Mu.options=Su,Mu.options.keySeparator===void 0&&(Mu.options.keySeparator="."),Mu.options.ignoreJSONStructure===void 0&&(Mu.options.ignoreJSONStructure=!0),Mu}return sP(_c,[{key:"addNamespaces",value:function(mu){this.options.ns.indexOf(mu)<0&&this.options.ns.push(mu)}},{key:"removeNamespaces",value:function(mu){var Mu=this.options.ns.indexOf(mu);Mu>-1&&this.options.ns.splice(Mu,1)}},{key:"getResource",value:function(mu,Mu,Su){var l0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},E0=l0.keySeparator!==void 0?l0.keySeparator:this.options.keySeparator,j0=l0.ignoreJSONStructure!==void 0?l0.ignoreJSONStructure:this.options.ignoreJSONStructure,M0=[mu,Mu];Su&&typeof Su!="string"&&(M0=M0.concat(Su)),Su&&typeof Su=="string"&&(M0=M0.concat(E0?Su.split(E0):Su)),mu.indexOf(".")>-1&&(M0=mu.split("."));var B0=IK(this.data,M0);return B0||!j0||typeof Su!="string"?B0:eD(this.data&&this.data[mu]&&this.data[mu][Mu],Su,E0)}},{key:"addResource",value:function(mu,Mu,Su,l0){var E0=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},j0=E0.keySeparator!==void 0?E0.keySeparator:this.options.keySeparator,M0=[mu,Mu];Su&&(M0=M0.concat(j0?Su.split(j0):Su)),mu.indexOf(".")>-1&&(l0=Mu,Mu=(M0=mu.split("."))[1]),this.addNamespaces(Mu),Ide(this.data,M0,l0),E0.silent||this.emit("added",mu,Mu,Su,l0)}},{key:"addResources",value:function(mu,Mu,Su){var l0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(var E0 in Su)typeof Su[E0]!="string"&&Object.prototype.toString.apply(Su[E0])!=="[object Array]"||this.addResource(mu,Mu,E0,Su[E0],{silent:!0});l0.silent||this.emit("added",mu,Mu,Su)}},{key:"addResourceBundle",value:function(mu,Mu,Su,l0,E0){var j0=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},M0=[mu,Mu];mu.indexOf(".")>-1&&(l0=Su,Su=Mu,Mu=(M0=mu.split("."))[1]),this.addNamespaces(Mu);var B0=IK(this.data,M0)||{};l0?tL(B0,Su,E0):B0=dE(dE({},B0),Su),Ide(this.data,M0,B0),j0.silent||this.emit("added",mu,Mu,Su)}},{key:"removeResourceBundle",value:function(mu,Mu){this.hasResourceBundle(mu,Mu)&&delete this.data[mu][Mu],this.removeNamespaces(Mu),this.emit("removed",mu,Mu)}},{key:"hasResourceBundle",value:function(mu,Mu){return this.getResource(mu,Mu)!==void 0}},{key:"getResourceBundle",value:function(mu,Mu){return Mu||(Mu=this.options.defaultNS),this.options.compatibilityAPI==="v1"?dE(dE({},{}),this.getResource(mu,Mu)):this.getResource(mu,Mu)}},{key:"getDataByLanguage",value:function(mu){return this.data[mu]}},{key:"hasLanguageSomeTranslations",value:function(mu){var Mu=this.getDataByLanguage(mu);return!!(Mu&&Object.keys(Mu)||[]).find(function(Su){return Mu[Su]&&Object.keys(Mu[Su]).length>0})}},{key:"toJSON",value:function(){return this.data}}]),_c}(eL),Pde={processors:{},addPostProcessor:function(yt){this.processors[yt.name]=yt},handle:function(yt,ir,_c,mu,Mu){var Su=this;return yt.forEach(function(l0){Su.processors[l0]&&(ir=Su.processors[l0].process(ir,_c,mu,Mu))}),ir}};function jde(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function j7(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var Su,l0=cP(mu);if(Mu){var E0=cP(this).constructor;Su=Reflect.construct(l0,arguments,E0)}else Su=l0.apply(this,arguments);return MK(this,Su)}}(_c);function _c(mu){var Mu,Su=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return OR(this,_c),Mu=ir.call(this),J6&&eL.call(lP(Mu)),function(l0,E0,j0){["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"].forEach(function(M0){E0[M0]&&(j0[M0]=E0[M0])})}(0,mu,lP(Mu)),Mu.options=Su,Mu.options.keySeparator===void 0&&(Mu.options.keySeparator="."),Mu.logger=S2.create("translator"),Mu}return sP(_c,[{key:"changeLanguage",value:function(mu){mu&&(this.language=mu)}},{key:"exists",value:function(mu){var Mu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(mu==null)return!1;var Su=this.resolve(mu,Mu);return Su&&Su.res!==void 0}},{key:"extractFromKey",value:function(mu,Mu){var Su=Mu.nsSeparator!==void 0?Mu.nsSeparator:this.options.nsSeparator;Su===void 0&&(Su=":");var l0=Mu.keySeparator!==void 0?Mu.keySeparator:this.options.keySeparator,E0=Mu.ns||this.options.defaultNS||[],j0=Su&&mu.indexOf(Su)>-1,M0=!(this.options.userDefinedKeySeparator||Mu.keySeparator||this.options.userDefinedNsSeparator||Mu.nsSeparator||function(y1,v1,F1){v1=v1||"",F1=F1||"";var ov=eI.filter(function(hy){return v1.indexOf(hy)<0&&F1.indexOf(hy)<0});if(ov.length===0)return!0;var bv=new RegExp("(".concat(ov.map(function(hy){return hy==="?"?"\\?":hy}).join("|"),")")),gv=!bv.test(y1);if(!gv){var xv=y1.indexOf(F1);xv>0&&!bv.test(y1.substring(0,xv))&&(gv=!0)}return gv}(mu,Su,l0));if(j0&&!M0){var B0=mu.match(this.interpolator.nestingRegexp);if(B0&&B0.length>0)return{key:mu,namespaces:E0};var V0=mu.split(Su);(Su!==l0||Su===l0&&this.options.ns.indexOf(V0[0])>-1)&&(E0=V0.shift()),mu=V0.join(l0)}return typeof E0=="string"&&(E0=[E0]),{key:mu,namespaces:E0}}},{key:"translate",value:function(mu,Mu,Su){var l0=this;if(XM(Mu)!=="object"&&this.options.overloadTranslationOptionHandler&&(Mu=this.options.overloadTranslationOptionHandler(arguments)),XM(Mu)==="object"&&(Mu=j7({},Mu)),Mu||(Mu={}),mu==null)return"";Array.isArray(mu)||(mu=[String(mu)]);var E0=Mu.returnDetails!==void 0?Mu.returnDetails:this.options.returnDetails,j0=Mu.keySeparator!==void 0?Mu.keySeparator:this.options.keySeparator,M0=this.extractFromKey(mu[mu.length-1],Mu),B0=M0.key,V0=M0.namespaces,y1=V0[V0.length-1],v1=Mu.lng||this.language,F1=Mu.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(v1&&v1.toLowerCase()==="cimode"){if(F1){var ov=Mu.nsSeparator||this.options.nsSeparator;return E0?{res:"".concat(y1).concat(ov).concat(B0),usedKey:B0,exactUsedKey:B0,usedLng:v1,usedNS:y1}:"".concat(y1).concat(ov).concat(B0)}return E0?{res:B0,usedKey:B0,exactUsedKey:B0,usedLng:v1,usedNS:y1}:B0}var bv=this.resolve(mu,Mu),gv=bv&&bv.res,xv=bv&&bv.usedKey||B0,hy=bv&&bv.exactUsedKey||B0,oy=Object.prototype.toString.apply(gv),fy=Mu.joinArrays!==void 0?Mu.joinArrays:this.options.joinArrays,Fy=!this.i18nFormat||this.i18nFormat.handleAsObject;if(Fy&&gv&&typeof gv!="string"&&typeof gv!="boolean"&&typeof gv!="number"&&["[object Number]","[object Function]","[object RegExp]"].indexOf(oy)<0&&(typeof fy!="string"||oy!=="[object Array]")){if(!Mu.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var qv=this.options.returnedObjectHandler?this.options.returnedObjectHandler(xv,gv,j7(j7({},Mu),{},{ns:V0})):"key '".concat(B0," (").concat(this.language,")' returned an object instead of string.");return E0?(bv.res=qv,bv):qv}if(j0){var Qv=oy==="[object Array]",T0=Qv?[]:{},X0=Qv?hy:xv;for(var s0 in gv)if(Object.prototype.hasOwnProperty.call(gv,s0)){var g0="".concat(X0).concat(j0).concat(s0);T0[s0]=this.translate(g0,j7(j7({},Mu),{joinArrays:!1,ns:V0})),T0[s0]===g0&&(T0[s0]=gv[s0])}gv=T0}}else if(Fy&&typeof fy=="string"&&oy==="[object Array]")(gv=gv.join(fy))&&(gv=this.extendTranslation(gv,mu,Mu,Su));else{var d0=!1,c0=!1,a0=Mu.count!==void 0&&typeof Mu.count!="string",S0=_c.hasDefaultValue(Mu),z0=a0?this.pluralResolver.getSuffix(v1,Mu.count,Mu):"",Q0=Mu["defaultValue".concat(z0)]||Mu.defaultValue;!this.isValidLookup(gv)&&S0&&(d0=!0,gv=Q0),this.isValidLookup(gv)||(c0=!0,gv=B0);var p1=(Mu.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&c0?void 0:gv,T1=S0&&Q0!==gv&&this.options.updateMissing;if(c0||d0||T1){if(this.logger.log(T1?"updateKey":"missingKey",v1,y1,B0,T1?Q0:gv),j0){var U1=this.resolve(B0,j7(j7({},Mu),{},{keySeparator:!1}));U1&&U1.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var S1=[],n1=this.languageUtils.getFallbackCodes(this.options.fallbackLng,Mu.lng||this.language);if(this.options.saveMissingTo==="fallback"&&n1&&n1[0])for(var V1=0;V11&&arguments[1]!==void 0?arguments[1]:{};return typeof mu=="string"&&(mu=[mu]),mu.forEach(function(V0){if(!M0.isValidLookup(Mu)){var y1=M0.extractFromKey(V0,B0),v1=y1.key;Su=v1;var F1=y1.namespaces;M0.options.fallbackNS&&(F1=F1.concat(M0.options.fallbackNS));var ov=B0.count!==void 0&&typeof B0.count!="string",bv=ov&&!B0.ordinal&&B0.count===0&&M0.pluralResolver.shouldUseIntlApi(),gv=B0.context!==void 0&&(typeof B0.context=="string"||typeof B0.context=="number")&&B0.context!=="",xv=B0.lngs?B0.lngs:M0.languageUtils.toResolveHierarchy(B0.lng||M0.language,B0.fallbackLng);F1.forEach(function(hy){M0.isValidLookup(Mu)||(j0=hy,!NW["".concat(xv[0],"-").concat(hy)]&&M0.utils&&M0.utils.hasLoadedNamespace&&!M0.utils.hasLoadedNamespace(j0)&&(NW["".concat(xv[0],"-").concat(hy)]=!0,M0.logger.warn('key "'.concat(Su,'" for languages "').concat(xv.join(", "),`" won't get resolved as namespace "`).concat(j0,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),xv.forEach(function(oy){if(!M0.isValidLookup(Mu)){E0=oy;var fy,Fy=[v1];if(M0.i18nFormat&&M0.i18nFormat.addLookupKeys)M0.i18nFormat.addLookupKeys(Fy,v1,oy,hy,B0);else{var qv;ov&&(qv=M0.pluralResolver.getSuffix(oy,B0.count,B0));var Qv="".concat(M0.options.pluralSeparator,"zero");if(ov&&(Fy.push(v1+qv),bv&&Fy.push(v1+Qv)),gv){var T0="".concat(v1).concat(M0.options.contextSeparator).concat(B0.context);Fy.push(T0),ov&&(Fy.push(T0+qv),bv&&Fy.push(T0+Qv))}}for(;fy=Fy.pop();)M0.isValidLookup(Mu)||(l0=fy,Mu=M0.getResource(oy,hy,fy,B0))}}))})}}),{res:Mu,usedKey:Su,exactUsedKey:l0,usedLng:E0,usedNS:j0}}},{key:"isValidLookup",value:function(mu){return!(mu===void 0||!this.options.returnNull&&mu===null||!this.options.returnEmptyString&&mu==="")}},{key:"getResource",value:function(mu,Mu,Su){var l0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(mu,Mu,Su,l0):this.resourceStore.getResource(mu,Mu,Su,l0)}}],[{key:"hasDefaultValue",value:function(mu){for(var Mu in mu)if(Object.prototype.hasOwnProperty.call(mu,Mu)&&Mu.substring(0,12)==="defaultValue"&&mu[Mu]!==void 0)return!0;return!1}}]),_c}(eL);function LW(yt){return yt.charAt(0).toUpperCase()+yt.slice(1)}var M5=function(){function yt(ir){OR(this,yt),this.options=ir,this.supportedLngs=this.options.supportedLngs||!1,this.logger=S2.create("languageUtils")}return sP(yt,[{key:"getScriptPartFromCode",value:function(ir){if(!ir||ir.indexOf("-")<0)return null;var _c=ir.split("-");return _c.length===2?null:(_c.pop(),_c[_c.length-1].toLowerCase()==="x"?null:this.formatLanguageCode(_c.join("-")))}},{key:"getLanguagePartFromCode",value:function(ir){if(!ir||ir.indexOf("-")<0)return ir;var _c=ir.split("-");return this.formatLanguageCode(_c[0])}},{key:"formatLanguageCode",value:function(ir){if(typeof ir=="string"&&ir.indexOf("-")>-1){var _c=["hans","hant","latn","cyrl","cans","mong","arab"],mu=ir.split("-");return this.options.lowerCaseLng?mu=mu.map(function(Mu){return Mu.toLowerCase()}):mu.length===2?(mu[0]=mu[0].toLowerCase(),mu[1]=mu[1].toUpperCase(),_c.indexOf(mu[1].toLowerCase())>-1&&(mu[1]=LW(mu[1].toLowerCase()))):mu.length===3&&(mu[0]=mu[0].toLowerCase(),mu[1].length===2&&(mu[1]=mu[1].toUpperCase()),mu[0]!=="sgn"&&mu[2].length===2&&(mu[2]=mu[2].toUpperCase()),_c.indexOf(mu[1].toLowerCase())>-1&&(mu[1]=LW(mu[1].toLowerCase())),_c.indexOf(mu[2].toLowerCase())>-1&&(mu[2]=LW(mu[2].toLowerCase()))),mu.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?ir.toLowerCase():ir}},{key:"isSupportedCode",value:function(ir){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(ir=this.getLanguagePartFromCode(ir)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(ir)>-1}},{key:"getBestMatchFromCodes",value:function(ir){var _c,mu=this;return ir?(ir.forEach(function(Mu){if(!_c){var Su=mu.formatLanguageCode(Mu);mu.options.supportedLngs&&!mu.isSupportedCode(Su)||(_c=Su)}}),!_c&&this.options.supportedLngs&&ir.forEach(function(Mu){if(!_c){var Su=mu.getLanguagePartFromCode(Mu);if(mu.isSupportedCode(Su))return _c=Su;_c=mu.options.supportedLngs.find(function(l0){return l0===Su?l0:l0.indexOf("-")<0&&Su.indexOf("-")<0?void 0:l0.indexOf(Su)===0?l0:void 0})}}),_c||(_c=this.getFallbackCodes(this.options.fallbackLng)[0]),_c):null}},{key:"getFallbackCodes",value:function(ir,_c){if(!ir)return[];if(typeof ir=="function"&&(ir=ir(_c)),typeof ir=="string"&&(ir=[ir]),Object.prototype.toString.apply(ir)==="[object Array]")return ir;if(!_c)return ir.default||[];var mu=ir[_c];return mu||(mu=ir[this.getScriptPartFromCode(_c)]),mu||(mu=ir[this.formatLanguageCode(_c)]),mu||(mu=ir[this.getLanguagePartFromCode(_c)]),mu||(mu=ir.default),mu||[]}},{key:"toResolveHierarchy",value:function(ir,_c){var mu=this,Mu=this.getFallbackCodes(_c||this.options.fallbackLng||[],ir),Su=[],l0=function(E0){E0&&(mu.isSupportedCode(E0)?Su.push(E0):mu.logger.warn("rejecting language code not found in supportedLngs: ".concat(E0)))};return typeof ir=="string"&&ir.indexOf("-")>-1?(this.options.load!=="languageOnly"&&l0(this.formatLanguageCode(ir)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&l0(this.getScriptPartFromCode(ir)),this.options.load!=="currentOnly"&&l0(this.getLanguagePartFromCode(ir))):typeof ir=="string"&&l0(this.formatLanguageCode(ir)),Mu.forEach(function(E0){Su.indexOf(E0)<0&&l0(mu.formatLanguageCode(E0))}),Su}}]),yt}(),Sge=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Nde={1:function(yt){return+(yt>1)},2:function(yt){return+(yt!=1)},3:function(yt){return 0},4:function(yt){return yt%10==1&&yt%100!=11?0:yt%10>=2&&yt%10<=4&&(yt%100<10||yt%100>=20)?1:2},5:function(yt){return yt==0?0:yt==1?1:yt==2?2:yt%100>=3&&yt%100<=10?3:yt%100>=11?4:5},6:function(yt){return yt==1?0:yt>=2&&yt<=4?1:2},7:function(yt){return yt==1?0:yt%10>=2&&yt%10<=4&&(yt%100<10||yt%100>=20)?1:2},8:function(yt){return yt==1?0:yt==2?1:yt!=8&&yt!=11?2:3},9:function(yt){return+(yt>=2)},10:function(yt){return yt==1?0:yt==2?1:yt<7?2:yt<11?3:4},11:function(yt){return yt==1||yt==11?0:yt==2||yt==12?1:yt>2&&yt<20?2:3},12:function(yt){return+(yt%10!=1||yt%100==11)},13:function(yt){return+(yt!==0)},14:function(yt){return yt==1?0:yt==2?1:yt==3?2:3},15:function(yt){return yt%10==1&&yt%100!=11?0:yt%10>=2&&(yt%100<10||yt%100>=20)?1:2},16:function(yt){return yt%10==1&&yt%100!=11?0:yt!==0?1:2},17:function(yt){return yt==1||yt%10==1&&yt%100!=11?0:1},18:function(yt){return yt==0?0:yt==1?1:2},19:function(yt){return yt==1?0:yt==0||yt%100>1&&yt%100<11?1:yt%100>10&&yt%100<20?2:3},20:function(yt){return yt==1?0:yt==0||yt%100>0&&yt%100<20?1:2},21:function(yt){return yt%100==1?1:yt%100==2?2:yt%100==3||yt%100==4?3:0},22:function(yt){return yt==1?0:yt==2?1:(yt<0||yt>10)&&yt%10==0?2:3}},Lde=["v1","v2","v3"],Aoe={zero:0,one:1,two:2,few:3,many:4,other:5},xge=function(){function yt(ir){var _c,mu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};OR(this,yt),this.languageUtils=ir,this.options=mu,this.logger=S2.create("pluralResolver"),this.options.compatibilityJSON&&this.options.compatibilityJSON!=="v4"||typeof Intl<"u"&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=(_c={},Sge.forEach(function(Mu){Mu.lngs.forEach(function(Su){_c[Su]={numbers:Mu.nr,plurals:Nde[Mu.fc]}})}),_c)}return sP(yt,[{key:"addRule",value:function(ir,_c){this.rules[ir]=_c}},{key:"getRule",value:function(ir){var _c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(ir,{type:_c.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[ir]||this.rules[this.languageUtils.getLanguagePartFromCode(ir)]}},{key:"needsPlural",value:function(ir){var _c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},mu=this.getRule(ir,_c);return this.shouldUseIntlApi()?mu&&mu.resolvedOptions().pluralCategories.length>1:mu&&mu.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(ir,_c){var mu=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(ir,mu).map(function(Mu){return"".concat(_c).concat(Mu)})}},{key:"getSuffixes",value:function(ir){var _c=this,mu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Mu=this.getRule(ir,mu);return Mu?this.shouldUseIntlApi()?Mu.resolvedOptions().pluralCategories.sort(function(Su,l0){return Aoe[Su]-Aoe[l0]}).map(function(Su){return"".concat(_c.options.prepend).concat(Su)}):Mu.numbers.map(function(Su){return _c.getSuffix(ir,Su,mu)}):[]}},{key:"getSuffix",value:function(ir,_c){var mu=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Mu=this.getRule(ir,mu);return Mu?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(Mu.select(_c)):this.getSuffixRetroCompatible(Mu,_c):(this.logger.warn("no plural rule found for: ".concat(ir)),"")}},{key:"getSuffixRetroCompatible",value:function(ir,_c){var mu=this,Mu=ir.noAbs?ir.plurals(_c):ir.plurals(Math.abs(_c)),Su=ir.numbers[Mu];this.options.simplifyPluralSuffix&&ir.numbers.length===2&&ir.numbers[0]===1&&(Su===2?Su="plural":Su===1&&(Su=""));var l0=function(){return mu.options.prepend&&Su.toString()?mu.options.prepend+Su.toString():Su.toString()};return this.options.compatibilityJSON==="v1"?Su===1?"":typeof Su=="number"?"_plural_".concat(Su.toString()):l0():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&ir.numbers.length===2&&ir.numbers[0]===1?l0():this.options.prepend&&Mu.toString()?this.options.prepend+Mu.toString():Mu.toString()}},{key:"shouldUseIntlApi",value:function(){return!Lde.includes(this.options.compatibilityJSON)}}]),yt}();function PR(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function JS(yt){for(var ir=1;ir3&&arguments[3]!==void 0?arguments[3]:".",Mu=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],Su=function(l0,E0,j0){var M0=IK(l0,j0);return M0!==void 0?M0:IK(E0,j0)}(yt,ir,_c);return!Su&&Mu&&typeof _c=="string"&&(Su=eD(yt,_c,mu))===void 0&&(Su=eD(ir,_c,mu)),Su}var Bde=function(){function yt(){var ir=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};OR(this,yt),this.logger=S2.create("interpolator"),this.options=ir,this.format=ir.interpolation&&ir.interpolation.format||function(_c){return _c},this.init(ir)}return sP(yt,[{key:"init",value:function(){var ir=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ir.interpolation||(ir.interpolation={escapeValue:!0});var _c=ir.interpolation;this.escape=_c.escape!==void 0?_c.escape:Ode,this.escapeValue=_c.escapeValue===void 0||_c.escapeValue,this.useRawValueToEscape=_c.useRawValueToEscape!==void 0&&_c.useRawValueToEscape,this.prefix=_c.prefix?rL(_c.prefix):_c.prefixEscaped||"{{",this.suffix=_c.suffix?rL(_c.suffix):_c.suffixEscaped||"}}",this.formatSeparator=_c.formatSeparator?_c.formatSeparator:_c.formatSeparator||",",this.unescapePrefix=_c.unescapeSuffix?"":_c.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":_c.unescapeSuffix||"",this.nestingPrefix=_c.nestingPrefix?rL(_c.nestingPrefix):_c.nestingPrefixEscaped||rL("$t("),this.nestingSuffix=_c.nestingSuffix?rL(_c.nestingSuffix):_c.nestingSuffixEscaped||rL(")"),this.nestingOptionsSeparator=_c.nestingOptionsSeparator?_c.nestingOptionsSeparator:_c.nestingOptionsSeparator||",",this.maxReplaces=_c.maxReplaces?_c.maxReplaces:1e3,this.alwaysFormat=_c.alwaysFormat!==void 0&&_c.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var ir="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(ir,"g");var _c="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(_c,"g");var mu="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(mu,"g")}},{key:"interpolate",value:function(ir,_c,mu,Mu){var Su,l0,E0,j0=this,M0=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function B0(F1){return F1.replace(/\$/g,"$$$$")}var V0=function(F1){if(F1.indexOf(j0.formatSeparator)<0){var ov=_oe(_c,M0,F1,j0.options.keySeparator,j0.options.ignoreJSONStructure);return j0.alwaysFormat?j0.format(ov,void 0,mu,JS(JS(JS({},Mu),_c),{},{interpolationkey:F1})):ov}var bv=F1.split(j0.formatSeparator),gv=bv.shift().trim(),xv=bv.join(j0.formatSeparator).trim();return j0.format(_oe(_c,M0,gv,j0.options.keySeparator,j0.options.ignoreJSONStructure),xv,mu,JS(JS(JS({},Mu),_c),{},{interpolationkey:gv}))};this.resetRegExp();var y1=Mu&&Mu.missingInterpolationHandler||this.options.missingInterpolationHandler,v1=Mu&&Mu.interpolation&&Mu.interpolation.skipOnVariables!==void 0?Mu.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(F1){return B0(F1)}},{regex:this.regexp,safeValue:function(F1){return j0.escapeValue?B0(j0.escape(F1)):B0(F1)}}].forEach(function(F1){for(E0=0;Su=F1.regex.exec(ir);){var ov=Su[1].trim();if((l0=V0(ov))===void 0)if(typeof y1=="function"){var bv=y1(ir,Su,Mu);l0=typeof bv=="string"?bv:""}else if(Mu&&Object.prototype.hasOwnProperty.call(Mu,ov))l0="";else{if(v1){l0=Su[0];continue}j0.logger.warn("missed to pass in variable ".concat(ov," for interpolating ").concat(ir)),l0=""}else typeof l0=="string"||j0.useRawValueToEscape||(l0=Mde(l0));var gv=F1.safeValue(l0);if(ir=ir.replace(Su[0],gv),v1?(F1.regex.lastIndex+=l0.length,F1.regex.lastIndex-=Su[0].length):F1.regex.lastIndex=0,++E0>=j0.maxReplaces)break}}),ir}},{key:"nest",value:function(ir,_c){var mu,Mu,Su,l0=this,E0=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};function j0(y1,v1){var F1=this.nestingOptionsSeparator;if(y1.indexOf(F1)<0)return y1;var ov=y1.split(new RegExp("".concat(F1,"[ ]*{"))),bv="{".concat(ov[1]);y1=ov[0];var gv=(bv=this.interpolate(bv,Su)).match(/'/g),xv=bv.match(/"/g);(gv&&gv.length%2==0&&!xv||xv.length%2!=0)&&(bv=bv.replace(/'/g,'"'));try{Su=JSON.parse(bv),v1&&(Su=JS(JS({},v1),Su))}catch(hy){return this.logger.warn("failed parsing options string in nesting for key ".concat(y1),hy),"".concat(y1).concat(F1).concat(bv)}return delete Su.defaultValue,y1}for(;mu=this.nestingRegexp.exec(ir);){var M0=[];(Su=(Su=JS({},E0)).replace&&typeof Su.replace!="string"?Su.replace:Su).applyPostProcessor=!1,delete Su.defaultValue;var B0=!1;if(mu[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(mu[1])){var V0=mu[1].split(this.formatSeparator).map(function(y1){return y1.trim()});mu[1]=V0.shift(),M0=V0,B0=!0}if((Mu=_c(j0.call(this,mu[1].trim(),Su),Su))&&mu[0]===ir&&typeof Mu!="string")return Mu;typeof Mu!="string"&&(Mu=Mde(Mu)),Mu||(this.logger.warn("missed to resolve ".concat(mu[1]," for nesting ").concat(ir)),Mu=""),B0&&(Mu=M0.reduce(function(y1,v1){return l0.format(y1,v1,E0.lng,JS(JS({},E0),{},{interpolationkey:mu[1].trim()}))},Mu.trim())),ir=ir.replace(mu[0],Mu),this.regexp.lastIndex=0}return ir}}]),yt}();function I5(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function bx(yt){for(var ir=1;ir0&&arguments[0]!==void 0?arguments[0]:{};OR(this,yt),this.logger=S2.create("formatter"),this.options=ir,this.formats={number:tD(function(_c,mu){var Mu=new Intl.NumberFormat(_c,bx({},mu));return function(Su){return Mu.format(Su)}}),currency:tD(function(_c,mu){var Mu=new Intl.NumberFormat(_c,bx(bx({},mu),{},{style:"currency"}));return function(Su){return Mu.format(Su)}}),datetime:tD(function(_c,mu){var Mu=new Intl.DateTimeFormat(_c,bx({},mu));return function(Su){return Mu.format(Su)}}),relativetime:tD(function(_c,mu){var Mu=new Intl.RelativeTimeFormat(_c,bx({},mu));return function(Su){return Mu.format(Su,mu.range||"day")}}),list:tD(function(_c,mu){var Mu=new Intl.ListFormat(_c,bx({},mu));return function(Su){return Mu.format(Su)}})},this.init(ir)}return sP(yt,[{key:"init",value:function(ir){var _c=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=_c.formatSeparator?_c.formatSeparator:_c.formatSeparator||","}},{key:"add",value:function(ir,_c){this.formats[ir.toLowerCase().trim()]=_c}},{key:"addCached",value:function(ir,_c){this.formats[ir.toLowerCase().trim()]=tD(_c)}},{key:"format",value:function(ir,_c,mu){var Mu=this,Su=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},l0=_c.split(this.formatSeparator).reduce(function(E0,j0){var M0=function(ov){var bv=ov.toLowerCase().trim(),gv={};if(ov.indexOf("(")>-1){var xv=ov.split("(");bv=xv[0].toLowerCase().trim();var hy=xv[1].substring(0,xv[1].length-1);bv==="currency"&&hy.indexOf(":")<0?gv.currency||(gv.currency=hy.trim()):bv==="relativetime"&&hy.indexOf(":")<0?gv.range||(gv.range=hy.trim()):hy.split(";").forEach(function(oy){if(oy){var fy=function(Qv){return function(T0){if(Array.isArray(T0))return T0}(Qv)||function(T0){if(typeof Symbol<"u"&&T0[Symbol.iterator]!=null||T0["@@iterator"]!=null)return Array.from(T0)}(Qv)||function(T0,X0){if(T0){if(typeof T0=="string")return T5(T0,X0);var s0=Object.prototype.toString.call(T0).slice(8,-1);return s0==="Object"&&T0.constructor&&(s0=T0.constructor.name),s0==="Map"||s0==="Set"?Array.from(T0):s0==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s0)?T5(T0,X0):void 0}}(Qv)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}(oy.split(":")),Fy=fy[0],qv=fy.slice(1).join(":").trim().replace(/^'+|'+$/g,"");gv[Fy.trim()]||(gv[Fy.trim()]=qv),qv==="false"&&(gv[Fy.trim()]=!1),qv==="true"&&(gv[Fy.trim()]=!0),isNaN(qv)||(gv[Fy.trim()]=parseInt(qv,10))}})}return{formatName:bv,formatOptions:gv}}(j0),B0=M0.formatName,V0=M0.formatOptions;if(Mu.formats[B0]){var y1=E0;try{var v1=Su&&Su.formatParams&&Su.formatParams[Su.interpolationkey]||{},F1=v1.locale||v1.lng||Su.locale||Su.lng||mu;y1=Mu.formats[B0](E0,F1,bx(bx(bx({},V0),Su),v1))}catch(ov){Mu.logger.warn(ov)}return y1}return Mu.logger.warn("there was no format function for ".concat(B0)),E0},ir);return l0}}]),yt}();function OK(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function O5(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var Su,l0=cP(mu);if(Mu){var E0=cP(this).constructor;Su=Reflect.construct(l0,arguments,E0)}else Su=l0.apply(this,arguments);return MK(this,Su)}}(_c);function _c(mu,Mu,Su){var l0,E0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return OR(this,_c),l0=ir.call(this),J6&&eL.call(lP(l0)),l0.backend=mu,l0.store=Mu,l0.services=Su,l0.languageUtils=Su.languageUtils,l0.options=E0,l0.logger=S2.create("backendConnector"),l0.waitingReads=[],l0.maxParallelReads=E0.maxParallelReads||10,l0.readingCalls=0,l0.maxRetries=E0.maxRetries>=0?E0.maxRetries:5,l0.retryTimeout=E0.retryTimeout>=1?E0.retryTimeout:350,l0.state={},l0.queue=[],l0.backend&&l0.backend.init&&l0.backend.init(Su,E0.backend,E0),l0}return sP(_c,[{key:"queueLoad",value:function(mu,Mu,Su,l0){var E0=this,j0={},M0={},B0={},V0={};return mu.forEach(function(y1){var v1=!0;Mu.forEach(function(F1){var ov="".concat(y1,"|").concat(F1);!Su.reload&&E0.store.hasResourceBundle(y1,F1)?E0.state[ov]=2:E0.state[ov]<0||(E0.state[ov]===1?M0[ov]===void 0&&(M0[ov]=!0):(E0.state[ov]=1,v1=!1,M0[ov]===void 0&&(M0[ov]=!0),j0[ov]===void 0&&(j0[ov]=!0),V0[F1]===void 0&&(V0[F1]=!0)))}),v1||(B0[y1]=!0)}),(Object.keys(j0).length||Object.keys(M0).length)&&this.queue.push({pending:M0,pendingCount:Object.keys(M0).length,loaded:{},errors:[],callback:l0}),{toLoad:Object.keys(j0),pending:Object.keys(M0),toLoadLanguages:Object.keys(B0),toLoadNamespaces:Object.keys(V0)}}},{key:"loaded",value:function(mu,Mu,Su){var l0=mu.split("|"),E0=l0[0],j0=l0[1];Mu&&this.emit("failedLoading",E0,j0,Mu),Su&&this.store.addResourceBundle(E0,j0,Su),this.state[mu]=Mu?-1:2;var M0={};this.queue.forEach(function(B0){(function(V0,y1,v1,F1){var ov=bX(V0,y1,Object),bv=ov.obj,gv=ov.k;bv[gv]=bv[gv]||[],bv[gv].push(v1)})(B0.loaded,[E0],j0),function(V0,y1){V0.pending[y1]!==void 0&&(delete V0.pending[y1],V0.pendingCount--)}(B0,mu),Mu&&B0.errors.push(Mu),B0.pendingCount!==0||B0.done||(Object.keys(B0.loaded).forEach(function(V0){M0[V0]||(M0[V0]={});var y1=B0.loaded[V0];y1.length&&y1.forEach(function(v1){M0[V0][v1]===void 0&&(M0[V0][v1]=!0)})}),B0.done=!0,B0.errors.length?B0.callback(B0.errors):B0.callback())}),this.emit("loaded",M0),this.queue=this.queue.filter(function(B0){return!B0.done})}},{key:"read",value:function(mu,Mu,Su){var l0=this,E0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,j0=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,M0=arguments.length>5?arguments[5]:void 0;if(!mu.length)return M0(null,{});if(this.readingCalls>=this.maxParallelReads)this.waitingReads.push({lng:mu,ns:Mu,fcName:Su,tried:E0,wait:j0,callback:M0});else{this.readingCalls++;var B0=function(v1,F1){if(l0.readingCalls--,l0.waitingReads.length>0){var ov=l0.waitingReads.shift();l0.read(ov.lng,ov.ns,ov.fcName,ov.tried,ov.wait,ov.callback)}v1&&F1&&E02&&arguments[2]!==void 0?arguments[2]:{},E0=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),E0&&E0();typeof mu=="string"&&(mu=this.languageUtils.toResolveHierarchy(mu)),typeof Mu=="string"&&(Mu=[Mu]);var j0=this.queueLoad(mu,Mu,l0,E0);if(!j0.toLoad.length)return j0.pending.length||E0(),null;j0.toLoad.forEach(function(M0){Su.loadOne(M0)})}},{key:"load",value:function(mu,Mu,Su){this.prepareLoading(mu,Mu,{},Su)}},{key:"reload",value:function(mu,Mu,Su){this.prepareLoading(mu,Mu,{reload:!0},Su)}},{key:"loadOne",value:function(mu){var Mu=this,Su=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",l0=mu.split("|"),E0=l0[0],j0=l0[1];this.read(E0,j0,"read",void 0,void 0,function(M0,B0){M0&&Mu.logger.warn("".concat(Su,"loading namespace ").concat(j0," for language ").concat(E0," failed"),M0),!M0&&B0&&Mu.logger.log("".concat(Su,"loaded namespace ").concat(j0," for language ").concat(E0),B0),Mu.loaded(mu,M0,B0)})}},{key:"saveMissing",value:function(mu,Mu,Su,l0,E0){var j0=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},M0=arguments.length>6&&arguments[6]!==void 0?arguments[6]:function(){};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(Mu))this.logger.warn('did not save key "'.concat(Su,'" as the namespace "').concat(Mu,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");else if(Su!=null&&Su!==""){if(this.backend&&this.backend.create){var B0=O5(O5({},j0),{},{isUpdate:E0}),V0=this.backend.create.bind(this.backend);if(V0.length<6)try{var y1;(y1=V0.length===5?V0(mu,Mu,Su,l0,B0):V0(mu,Mu,Su,l0))&&typeof y1.then=="function"?y1.then(function(v1){return M0(null,v1)}).catch(M0):M0(null,y1)}catch(v1){M0(v1)}else V0(mu,Mu,Su,l0,M0,B0)}mu&&mu[0]&&this.store.addResource(mu[0],Mu,Su,l0)}}}]),_c}(eL);function Soe(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(yt){var ir={};if(XM(yt[1])==="object"&&(ir=yt[1]),typeof yt[1]=="string"&&(ir.defaultValue=yt[1]),typeof yt[2]=="string"&&(ir.tDescription=yt[2]),XM(yt[2])==="object"||XM(yt[3])==="object"){var _c=yt[3]||yt[2];Object.keys(_c).forEach(function(mu){ir[mu]=_c[mu]})}return ir},interpolation:{escapeValue:!0,format:function(yt,ir,_c,mu){return yt},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function Dde(yt){return typeof yt.ns=="string"&&(yt.ns=[yt.ns]),typeof yt.fallbackLng=="string"&&(yt.fallbackLng=[yt.fallbackLng]),typeof yt.fallbackNS=="string"&&(yt.fallbackNS=[yt.fallbackNS]),yt.supportedLngs&&yt.supportedLngs.indexOf("cimode")<0&&(yt.supportedLngs=yt.supportedLngs.concat(["cimode"])),yt}function xoe(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function P5(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var Su,l0=cP(mu);if(Mu){var E0=cP(this).constructor;Su=Reflect.construct(l0,arguments,E0)}else Su=l0.apply(this,arguments);return MK(this,Su)}}(_c);function _c(){var mu,Mu,Su=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l0=arguments.length>1?arguments[1]:void 0;if(OR(this,_c),mu=ir.call(this),J6&&eL.call(lP(mu)),mu.options=Dde(Su),mu.services={},mu.logger=S2,mu.modules={external:[]},Mu=lP(mu),Object.getOwnPropertyNames(Object.getPrototypeOf(Mu)).forEach(function(E0){typeof Mu[E0]=="function"&&(Mu[E0]=Mu[E0].bind(Mu))}),l0&&!mu.isInitialized&&!Su.isClone){if(!mu.options.initImmediate)return mu.init(Su,l0),MK(mu,lP(mu));setTimeout(function(){mu.init(Su,l0)},0)}return mu}return sP(_c,[{key:"init",value:function(){var mu=this,Mu=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Su=arguments.length>1?arguments[1]:void 0;typeof Mu=="function"&&(Su=Mu,Mu={}),!Mu.defaultNS&&Mu.defaultNS!==!1&&Mu.ns&&(typeof Mu.ns=="string"?Mu.defaultNS=Mu.ns:Mu.ns.indexOf("translation")<0&&(Mu.defaultNS=Mu.ns[0]));var l0=Soe();function E0(F1){return F1?typeof F1=="function"?new F1:F1:null}if(this.options=P5(P5(P5({},l0),this.options),Dde(Mu)),this.options.compatibilityAPI!=="v1"&&(this.options.interpolation=P5(P5({},l0.interpolation),this.options.interpolation)),Mu.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=Mu.keySeparator),Mu.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=Mu.nsSeparator),!this.options.isClone){var j0;this.modules.logger?S2.init(E0(this.modules.logger),this.options):S2.init(null,this.options),this.modules.formatter?j0=this.modules.formatter:typeof Intl<"u"&&(j0=EX);var M0=new M5(this.options);this.store=new wX(this.options.resources,this.options);var B0=this.services;B0.logger=S2,B0.resourceStore=this.store,B0.languageUtils=M0,B0.pluralResolver=new xge(M0,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!j0||this.options.interpolation.format&&this.options.interpolation.format!==l0.interpolation.format||(B0.formatter=E0(j0),B0.formatter.init(B0,this.options),this.options.interpolation.format=B0.formatter.format.bind(B0.formatter)),B0.interpolator=new Bde(this.options),B0.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},B0.backendConnector=new rD(E0(this.modules.backend),B0.resourceStore,B0,this.options),B0.backendConnector.on("*",function(F1){for(var ov=arguments.length,bv=new Array(ov>1?ov-1:0),gv=1;gv1?ov-1:0),gv=1;gv0&&V0[0]!=="dev"&&(this.options.lng=V0[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(function(F1){mu[F1]=function(){var ov;return(ov=mu.store)[F1].apply(ov,arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(function(F1){mu[F1]=function(){var ov;return(ov=mu.store)[F1].apply(ov,arguments),mu}});var y1=QM(),v1=function(){var F1=function(ov,bv){mu.isInitialized&&!mu.initializedStoreOnce&&mu.logger.warn("init: i18next is already initialized. You should call init just once!"),mu.isInitialized=!0,mu.options.isClone||mu.logger.log("initialized",mu.options),mu.emit("initialized",mu.options),y1.resolve(bv),Su(ov,bv)};if(mu.languages&&mu.options.compatibilityAPI!=="v1"&&!mu.isInitialized)return F1(null,mu.t.bind(mu));mu.changeLanguage(mu.options.lng,F1)};return this.options.resources||!this.options.initImmediate?v1():setTimeout(v1,0),y1}},{key:"loadResources",value:function(mu){var Mu=this,Su=arguments.length>1&&arguments[1]!==void 0?arguments[1]:AX,l0=typeof mu=="string"?mu:this.language;if(typeof mu=="function"&&(Su=mu),!this.options.resources||this.options.partialBundledLanguages){if(l0&&l0.toLowerCase()==="cimode")return Su();var E0=[],j0=function(M0){M0&&Mu.services.languageUtils.toResolveHierarchy(M0).forEach(function(B0){E0.indexOf(B0)<0&&E0.push(B0)})};l0?j0(l0):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function(M0){return j0(M0)}),this.options.preload&&this.options.preload.forEach(function(M0){return j0(M0)}),this.services.backendConnector.load(E0,this.options.ns,function(M0){M0||Mu.resolvedLanguage||!Mu.language||Mu.setResolvedLanguage(Mu.language),Su(M0)})}else Su(null)}},{key:"reloadResources",value:function(mu,Mu,Su){var l0=QM();return mu||(mu=this.languages),Mu||(Mu=this.options.ns),Su||(Su=AX),this.services.backendConnector.reload(mu,Mu,function(E0){l0.resolve(),Su(E0)}),l0}},{key:"use",value:function(mu){if(!mu)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!mu.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return mu.type==="backend"&&(this.modules.backend=mu),(mu.type==="logger"||mu.log&&mu.warn&&mu.error)&&(this.modules.logger=mu),mu.type==="languageDetector"&&(this.modules.languageDetector=mu),mu.type==="i18nFormat"&&(this.modules.i18nFormat=mu),mu.type==="postProcessor"&&Pde.addPostProcessor(mu),mu.type==="formatter"&&(this.modules.formatter=mu),mu.type==="3rdParty"&&this.modules.external.push(mu),this}},{key:"setResolvedLanguage",value:function(mu){if(mu&&this.languages&&!(["cimode","dev"].indexOf(mu)>-1))for(var Mu=0;Mu-1)&&this.store.hasLanguageSomeTranslations(Su)){this.resolvedLanguage=Su;break}}}},{key:"changeLanguage",value:function(mu,Mu){var Su=this;this.isLanguageChangingTo=mu;var l0=QM();this.emit("languageChanging",mu);var E0=function(M0){Su.language=M0,Su.languages=Su.services.languageUtils.toResolveHierarchy(M0),Su.resolvedLanguage=void 0,Su.setResolvedLanguage(M0)},j0=function(M0){mu||M0||!Su.services.languageDetector||(M0=[]);var B0=typeof M0=="string"?M0:Su.services.languageUtils.getBestMatchFromCodes(M0);B0&&(Su.language||E0(B0),Su.translator.language||Su.translator.changeLanguage(B0),Su.services.languageDetector&&Su.services.languageDetector.cacheUserLanguage&&Su.services.languageDetector.cacheUserLanguage(B0)),Su.loadResources(B0,function(V0){(function(y1,v1){v1?(E0(v1),Su.translator.changeLanguage(v1),Su.isLanguageChangingTo=void 0,Su.emit("languageChanged",v1),Su.logger.log("languageChanged",v1)):Su.isLanguageChangingTo=void 0,l0.resolve(function(){return Su.t.apply(Su,arguments)}),Mu&&Mu(y1,function(){return Su.t.apply(Su,arguments)})})(V0,B0)})};return mu||!this.services.languageDetector||this.services.languageDetector.async?!mu&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(j0):this.services.languageDetector.detect(j0):j0(mu):j0(this.services.languageDetector.detect()),l0}},{key:"getFixedT",value:function(mu,Mu,Su){var l0=this,E0=function j0(M0,B0){var V0;if(XM(B0)!=="object"){for(var y1=arguments.length,v1=new Array(y1>2?y1-2:0),F1=2;F11&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var l0=Su.lng||this.resolvedLanguage||this.languages[0],E0=!!this.options&&this.options.fallbackLng,j0=this.languages[this.languages.length-1];if(l0.toLowerCase()==="cimode")return!0;var M0=function(V0,y1){var v1=Mu.services.backendConnector.state["".concat(V0,"|").concat(y1)];return v1===-1||v1===2};if(Su.precheck){var B0=Su.precheck(this,M0);if(B0!==void 0)return B0}return!(!this.hasResourceBundle(l0,mu)&&this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages)&&(!M0(l0,mu)||E0&&!M0(j0,mu)))}},{key:"loadNamespaces",value:function(mu,Mu){var Su=this,l0=QM();return this.options.ns?(typeof mu=="string"&&(mu=[mu]),mu.forEach(function(E0){Su.options.ns.indexOf(E0)<0&&Su.options.ns.push(E0)}),this.loadResources(function(E0){l0.resolve(),Mu&&Mu(E0)}),l0):(Mu&&Mu(),Promise.resolve())}},{key:"loadLanguages",value:function(mu,Mu){var Su=QM();typeof mu=="string"&&(mu=[mu]);var l0=this.options.preload||[],E0=mu.filter(function(j0){return l0.indexOf(j0)<0});return E0.length?(this.options.preload=l0.concat(E0),this.loadResources(function(j0){Su.resolve(),Mu&&Mu(j0)}),Su):(Mu&&Mu(),Promise.resolve())}},{key:"dir",value:function(mu){if(mu||(mu=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!mu)return"rtl";var Mu=this.services&&this.services.languageUtils||new M5(Soe());return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(Mu.getLanguagePartFromCode(mu))>-1||mu.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var mu=this,Mu=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Su=arguments.length>1&&arguments[1]!==void 0?arguments[1]:AX,l0=P5(P5(P5({},this.options),Mu),{isClone:!0}),E0=new _c(l0);return Mu.debug===void 0&&Mu.prefix===void 0||(E0.logger=E0.logger.clone(Mu)),["store","services","language"].forEach(function(j0){E0[j0]=mu[j0]}),E0.services=P5({},this.services),E0.services.utils={hasLoadedNamespace:E0.hasLoadedNamespace.bind(E0)},E0.translator=new $X(E0.services,E0.options),E0.translator.on("*",function(j0){for(var M0=arguments.length,B0=new Array(M0>1?M0-1:0),V0=1;V00&&arguments[0]!==void 0?arguments[0]:{},arguments.length>1?arguments[1]:void 0)});var n8=_X.createInstance();n8.createInstance=_X.createInstance;var nD=n8.createInstance;n8.dir,n8.init,n8.loadResources,n8.reloadResources,n8.use,n8.changeLanguage,n8.getFixedT,n8.t,n8.exists,n8.setDefaultNamespace,n8.hasLoadedNamespace,n8.loadNamespaces,n8.loadLanguages;var AU,_U="0.20.4";o.PROVIDER_UPDATE_TYPE=void 0,(AU=o.PROVIDER_UPDATE_TYPE||(o.PROVIDER_UPDATE_TYPE={})).TERMINATE="terminate",AU.EXTENSION="extension",AU.INITIALIZED="initialized";const koe=typeof window<"u"&&window.localStorage;function Coe(yt){var ir,_c;return s$(this,void 0,void 0,function*(){R2("[MetaMaskSDK: connectWithExtensionProvider()] ",yt),yt.sdkProvider=yt.activeProvider,yt.activeProvider=window.extension,window.ethereum=window.extension;try{const mu=yield(ir=window.extension)===null||ir===void 0?void 0:ir.request({method:"eth_requestAccounts"});R2(`[MetaMaskSDK: connectWithExtensionProvider()] accounts=${mu}`)}catch(mu){return void console.warn("[MetaMaskSDK: connectWithExtensionProvider()] can't request accounts error",mu)}localStorage.setItem(vX,"extension"),yt.extensionActive=!0,yt.emit(o.EventType.PROVIDER_UPDATE,o.PROVIDER_UPDATE_TYPE.EXTENSION),yt.options.enableAnalytics&&((_c=yt.analytics)===null||_c===void 0||_c.send({event:W6.SDK_USE_EXTENSION}))})}var iD;(function(yt){yt.INPAGE="metamask-inpage",yt.CONTENT_SCRIPT="metamask-contentscript",yt.PROVIDER="metamask-provider"})(iD||(iD={}));const PK="https://metamask.app.link/connect",uP="metamask://connect",Fde={NAME:"MetaMask",RDNS:"io.metamask"},kge=/(?:^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}$)|(?:^0{8}-0{4}-0{4}-0{4}-0{12}$)/u,SX=36e5;class wx{constructor({shouldSetOnWindow:ir,connectionStream:_c,shouldSendMetadata:mu=!1,shouldShimWeb3:Mu}){const Su=new boe({connectionStream:_c,shouldSendMetadata:mu,shouldSetOnWindow:ir,shouldShimWeb3:Mu,autoRequestAccounts:!1}),l0=new Proxy(Su,{deleteProperty:()=>!0});var E0;this.provider=l0,ir&&typeof window<"u"&&(E0=this.provider,window.ethereum=E0,window.dispatchEvent(new Event("ethereum#initialized"))),Mu&&typeof window<"u"&&function(j0,M0=console){let B0=!1,V0=!1;if(!window.web3){const y1="__isMetaMaskShim__";let v1={currentProvider:j0};Object.defineProperty(v1,y1,{value:!0,enumerable:!0,configurable:!1,writable:!1}),v1=new Proxy(v1,{get:(F1,ov,...bv)=>(ov!=="currentProvider"||B0?ov==="currentProvider"||ov===y1||V0||(V0=!0,M0.error("MetaMask no longer injects web3. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3"),j0.request({method:"metamask_logWeb3ShimUsage"}).catch(gv=>{M0.debug("MetaMask: Failed to log web3 shim usage.",gv)})):(B0=!0,M0.warn("You are accessing the MetaMask window.web3.currentProvider shim. This property is deprecated; use window.ethereum instead. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3")),Reflect.get(F1,ov,...bv)),set:(...F1)=>(M0.warn("You are accessing the MetaMask window.web3 shim. This object is deprecated; use window.ethereum instead. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3"),Reflect.set(...F1))}),Object.defineProperty(window,"web3",{value:v1,enumerable:!1,configurable:!0,writable:!0})}}(this.provider),this.provider.on("_initialized",()=>{const j0={chainId:this.provider.getChainId(),isConnected:this.provider.isConnected(),isMetaNask:this.provider.isMetaMask,selectedAddress:this.provider.getSelectedAddress(),networkVersion:this.provider.getNetworkVersion()};R2("[Ethereum: constructor()] provider initialized",j0)})}static init(ir){var _c;return R2("[Ethereum: init()] Initializing Ethereum service"),this.instance=new wx(ir),(_c=this.instance)===null||_c===void 0?void 0:_c.provider}static destroy(){wx.instance=void 0}static getInstance(){var ir;if(!(!((ir=this.instance)===null||ir===void 0)&&ir.provider))throw new Error("Ethereum instance not intiialized - call Ethereum.factory first.");return this.instance}static getProvider(){var ir;if(!(!((ir=this.instance)===null||ir===void 0)&&ir.provider))throw new Error("Ethereum instance not intiialized - call Ethereum.factory first.");return this.instance.provider}}class xX extends AO.Duplex{constructor({name:ir,remote:_c,platformManager:mu}){super({objectMode:!0}),this.state={_name:null,remote:null,platformManager:null},this.state._name=ir,this.state.remote=_c,this.state.platformManager=mu,this._onMessage=this._onMessage.bind(this),this.state.remote.on(o.EventType.MESSAGE,this._onMessage)}_write(ir,_c,mu){return s$(this,void 0,void 0,function*(){return function(Mu,Su,l0,E0){var j0,M0,B0,V0,y1,v1,F1,ov,bv,gv,xv,hy,oy,fy;return s$(this,void 0,void 0,function*(){const Fy=(j0=Mu.state.remote)===null||j0===void 0?void 0:j0.isReady(),qv=(M0=Mu.state.remote)===null||M0===void 0?void 0:M0.isConnected(),Qv=(B0=Mu.state.remote)===null||B0===void 0?void 0:B0.isPaused(),T0=wx.getProvider(),X0=(V0=Mu.state.remote)===null||V0===void 0?void 0:V0.getChannelId(),s0=(y1=Mu.state.remote)===null||y1===void 0?void 0:y1.isAuthorized(),{method:g0,data:d0}=(c0=>{var a0;let S0;return F0.isBuffer(c0)?(S0=c0.toJSON(),S0._isBuffer=!0):S0=c0,{method:(a0=S0==null?void 0:S0.data)===null||a0===void 0?void 0:a0.method,data:S0}})(Su);if(R2(`[RCPMS: write()] method='${g0}' isRemoteReady=${Fy} channelId=${X0} isSocketConnected=${qv} isRemotePaused=${Qv} providerConnected=${T0.isConnected()}`,Su),!X0)return g0!==$E.METAMASK_GETPROVIDERSTATE&&R2("[RCPMS: write()] Invalid channel id -- undefined"),E0();R2(`[RCPMS: write()] remote.isPaused()=${(v1=Mu.state.remote)===null||v1===void 0?void 0:v1.isPaused()} authorized=${s0} ready=${Fy} socketConnected=${qv}`,Su);try{if((F1=Mu.state.remote)===null||F1===void 0||F1.sendMessage(d0==null?void 0:d0.data).then(()=>{R2(`[RCPMS: _write()] ${g0} sent successfully`)}).catch(S0=>{R2("[RCPMS: _write()] error sending message",S0)}),!(!((ov=Mu.state.platformManager)===null||ov===void 0)&&ov.isSecure()))return R2(`[RCPMS: _write()] unsecure platform for method ${g0} -- return callback`),E0();if(!qv&&!Fy)return R2(`[RCPMS: _write()] invalid connection status targetMethod=${g0} socketConnected=${qv} ready=${Fy} providerConnected=${T0.isConnected()}`),E0();if(!qv&&Fy)return console.warn("[RCPMS: _write()] invalid socket status -- shouldn't happen"),E0();const c0=(xv=(gv=(bv=Mu.state.remote)===null||bv===void 0?void 0:bv.getKeyInfo())===null||gv===void 0?void 0:gv.ecies.public)!==null&&xv!==void 0?xv:"",a0=encodeURI(`channelId=${X0}&pubkey=${c0}&comm=socket&t=d&v=2`);XB[g0]?(R2(`[RCPMS: _write()] redirect link for '${g0}' socketConnected=${qv} connect?${a0}`),(hy=Mu.state.platformManager)===null||hy===void 0||hy.openDeeplink(`${PK}?${a0}`,`${uP}?${a0}`,"_self")):!((oy=Mu.state.remote)===null||oy===void 0)&&oy.isPaused()?(R2(`[RCPMS: _write()] MM is PAUSED! deeplink with connect! targetMethod=${g0}`),(fy=Mu.state.platformManager)===null||fy===void 0||fy.openDeeplink(`${PK}?redirect=true&${a0}`,`${uP}?redirect=true&${a0}`,"_self")):R2(`[RCPMS: _write()] method ${g0} doesn't need redirect.`)}catch(c0){return R2("[RCPMS: _write()] error sending message",c0),E0(new Error("RemoteCommunicationPostMessageStream - disconnected"))}return E0()})}(this,ir,0,mu)})}_read(){}_onMessage(ir){return function(_c,mu){try{if(R2("[RCPMS: onMessage()] message",mu),!mu||typeof mu!="object"||typeof(mu==null?void 0:mu.data)!="object")return;if(!(mu!=null&&mu.name))return void R2(`[RCPMS: onMessage()] ignore message without name message=${mu}`);if((mu==null?void 0:mu.name)!==iD.PROVIDER)return void R2(`[RCPMS: onMessage()] ignore message with wrong name message=${mu}`);if(F0.isBuffer(mu)){const Mu=F0.from(mu);_c.push(Mu)}else _c.push(mu)}catch(Mu){R2(`[RCPMS: onMessage()] ignore message error err=${Mu}`)}}(this,ir)}start(){}}var kX={exports:{}};(function(yt,ir){var _c=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||c!==void 0&&c,mu=function(){function Su(){this.fetch=!1,this.DOMException=_c.DOMException}return Su.prototype=_c,new Su}();(function(Su){(function(l0){var E0=Su!==void 0&&Su||typeof self<"u"&&self||E0!==void 0&&E0,j0="URLSearchParams"in E0,M0="Symbol"in E0&&"iterator"in Symbol,B0="FileReader"in E0&&"Blob"in E0&&function(){try{return new Blob,!0}catch{return!1}}(),V0="FormData"in E0,y1="ArrayBuffer"in E0;if(y1)var v1=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],F1=ArrayBuffer.isView||function(c0){return c0&&v1.indexOf(Object.prototype.toString.call(c0))>-1};function ov(c0){if(typeof c0!="string"&&(c0=String(c0)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(c0)||c0==="")throw new TypeError('Invalid character in header field name: "'+c0+'"');return c0.toLowerCase()}function bv(c0){return typeof c0!="string"&&(c0=String(c0)),c0}function gv(c0){var a0={next:function(){var S0=c0.shift();return{done:S0===void 0,value:S0}}};return M0&&(a0[Symbol.iterator]=function(){return a0}),a0}function xv(c0){this.map={},c0 instanceof xv?c0.forEach(function(a0,S0){this.append(S0,a0)},this):Array.isArray(c0)?c0.forEach(function(a0){this.append(a0[0],a0[1])},this):c0&&Object.getOwnPropertyNames(c0).forEach(function(a0){this.append(a0,c0[a0])},this)}function hy(c0){if(c0.bodyUsed)return Promise.reject(new TypeError("Already read"));c0.bodyUsed=!0}function oy(c0){return new Promise(function(a0,S0){c0.onload=function(){a0(c0.result)},c0.onerror=function(){S0(c0.error)}})}function fy(c0){var a0=new FileReader,S0=oy(a0);return a0.readAsArrayBuffer(c0),S0}function Fy(c0){if(c0.slice)return c0.slice(0);var a0=new Uint8Array(c0.byteLength);return a0.set(new Uint8Array(c0)),a0.buffer}function qv(){return this.bodyUsed=!1,this._initBody=function(c0){this.bodyUsed=this.bodyUsed,this._bodyInit=c0,c0?typeof c0=="string"?this._bodyText=c0:B0&&Blob.prototype.isPrototypeOf(c0)?this._bodyBlob=c0:V0&&FormData.prototype.isPrototypeOf(c0)?this._bodyFormData=c0:j0&&URLSearchParams.prototype.isPrototypeOf(c0)?this._bodyText=c0.toString():y1&&B0&&function(a0){return a0&&DataView.prototype.isPrototypeOf(a0)}(c0)?(this._bodyArrayBuffer=Fy(c0.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):y1&&(ArrayBuffer.prototype.isPrototypeOf(c0)||F1(c0))?this._bodyArrayBuffer=Fy(c0):this._bodyText=c0=Object.prototype.toString.call(c0):this._bodyText="",this.headers.get("content-type")||(typeof c0=="string"?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):j0&&URLSearchParams.prototype.isPrototypeOf(c0)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},B0&&(this.blob=function(){var c0=hy(this);if(c0)return c0;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?hy(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(fy)}),this.text=function(){var c0,a0,S0,z0=hy(this);if(z0)return z0;if(this._bodyBlob)return c0=this._bodyBlob,S0=oy(a0=new FileReader),a0.readAsText(c0),S0;if(this._bodyArrayBuffer)return Promise.resolve(function(Q0){for(var p1=new Uint8Array(Q0),T1=new Array(p1.length),U1=0;U1-1?p1:Q0}(a0.method||this.method||"GET"),this.mode=a0.mode||this.mode||null,this.signal=a0.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&S0)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(S0),!(this.method!=="GET"&&this.method!=="HEAD"||a0.cache!=="no-store"&&a0.cache!=="no-cache")){var z0=/([?&])_=[^&]*/;z0.test(this.url)?this.url=this.url.replace(z0,"$1_="+new Date().getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+new Date().getTime()}}function X0(c0){var a0=new FormData;return c0.trim().split("&").forEach(function(S0){if(S0){var z0=S0.split("="),Q0=z0.shift().replace(/\+/g," "),p1=z0.join("=").replace(/\+/g," ");a0.append(decodeURIComponent(Q0),decodeURIComponent(p1))}}),a0}function s0(c0,a0){if(!(this instanceof s0))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');a0||(a0={}),this.type="default",this.status=a0.status===void 0?200:a0.status,this.ok=this.status>=200&&this.status<300,this.statusText=a0.statusText===void 0?"":""+a0.statusText,this.headers=new xv(a0.headers),this.url=a0.url||"",this._initBody(c0)}T0.prototype.clone=function(){return new T0(this,{body:this._bodyInit})},qv.call(T0.prototype),qv.call(s0.prototype),s0.prototype.clone=function(){return new s0(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new xv(this.headers),url:this.url})},s0.error=function(){var c0=new s0(null,{status:0,statusText:""});return c0.type="error",c0};var g0=[301,302,303,307,308];s0.redirect=function(c0,a0){if(g0.indexOf(a0)===-1)throw new RangeError("Invalid status code");return new s0(null,{status:a0,headers:{location:c0}})},l0.DOMException=E0.DOMException;try{new l0.DOMException}catch{l0.DOMException=function(a0,S0){this.message=a0,this.name=S0;var z0=Error(a0);this.stack=z0.stack},l0.DOMException.prototype=Object.create(Error.prototype),l0.DOMException.prototype.constructor=l0.DOMException}function d0(c0,a0){return new Promise(function(S0,z0){var Q0=new T0(c0,a0);if(Q0.signal&&Q0.signal.aborted)return z0(new l0.DOMException("Aborted","AbortError"));var p1=new XMLHttpRequest;function T1(){p1.abort()}p1.onload=function(){var U1,S1,n1={status:p1.status,statusText:p1.statusText,headers:(U1=p1.getAllResponseHeaders()||"",S1=new xv,U1.replace(/\r?\n[\t ]+/g," ").split("\r").map(function(J1){return J1.indexOf(` -`)===0?J1.substr(1,J1.length):J1}).forEach(function(J1){var wv=J1.split(":"),Sv=wv.shift().trim();if(Sv){var Hv=wv.join(":").trim();S1.append(Sv,Hv)}}),S1)};n1.url="responseURL"in p1?p1.responseURL:n1.headers.get("X-Request-URL");var V1="response"in p1?p1.response:p1.responseText;setTimeout(function(){S0(new s0(V1,n1))},0)},p1.onerror=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.ontimeout=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.onabort=function(){setTimeout(function(){z0(new l0.DOMException("Aborted","AbortError"))},0)},p1.open(Q0.method,function(U1){try{return U1===""&&E0.location.href?E0.location.href:U1}catch{return U1}}(Q0.url),!0),Q0.credentials==="include"?p1.withCredentials=!0:Q0.credentials==="omit"&&(p1.withCredentials=!1),"responseType"in p1&&(B0?p1.responseType="blob":y1&&Q0.headers.get("Content-Type")&&Q0.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(p1.responseType="arraybuffer")),!a0||typeof a0.headers!="object"||a0.headers instanceof xv?Q0.headers.forEach(function(U1,S1){p1.setRequestHeader(S1,U1)}):Object.getOwnPropertyNames(a0.headers).forEach(function(U1){p1.setRequestHeader(U1,bv(a0.headers[U1]))}),Q0.signal&&(Q0.signal.addEventListener("abort",T1),p1.onreadystatechange=function(){p1.readyState===4&&Q0.signal.removeEventListener("abort",T1)}),p1.send(Q0._bodyInit===void 0?null:Q0._bodyInit)})}d0.polyfill=!0,E0.fetch||(E0.fetch=d0,E0.Headers=xv,E0.Request=T0,E0.Response=s0),l0.Headers=xv,l0.Request=T0,l0.Response=s0,l0.fetch=d0})({})})(mu),mu.fetch.ponyfill=!0,delete mu.fetch.polyfill;var Mu=_c.fetch?_c:mu;(ir=Mu.fetch).default=Mu.fetch,ir.fetch=Mu.fetch,ir.Headers=Mu.Headers,ir.Request=Mu.Request,ir.Response=Mu.Response,yt.exports=ir})(kX,kX.exports);var CX=d(kX.exports);let Ude=1;const zde=yt=>new Promise(ir=>{setTimeout(()=>{ir(!0)},yt)}),Hde=({checkInstallationOnAllCalls:yt=!1,communicationLayerPreference:ir,injectProvider:_c,shouldShimWeb3:mu,platformManager:Mu,installer:Su,sdk:l0,remoteConnection:E0,debug:j0})=>s$(void 0,void 0,void 0,function*(){var M0,B0;const V0=(({name:X0,remoteConnection:s0})=>{if(!s0||!(s0!=null&&s0.getConnector()))throw new Error("Missing remote connection parameter");return new xX({name:X0,remote:s0==null?void 0:s0.getConnector(),platformManager:s0==null?void 0:s0.getPlatformManager()})})({name:iD.INPAGE,target:iD.CONTENT_SCRIPT,platformManager:Mu,communicationLayerPreference:ir,remoteConnection:E0}),y1=Mu.getPlatformType(),v1=l0.options.dappMetadata,F1=`Sdk/Javascript SdkVersion/${_U} Platform/${y1} dApp/${(M0=v1.url)!==null&&M0!==void 0?M0:v1.name} dAppTitle/${v1.name}`;let ov=null,bv=null;const gv=(B0=l0.options.storage)===null||B0===void 0?void 0:B0.storageManager;if(gv){try{const X0=yield gv.getCachedAccounts();X0.length>0&&(ov=X0[0])}catch(X0){console.error(`[initializeMobileProvider] failed to get cached addresses: ${X0}`)}try{const X0=yield gv.getCachedChainId();X0&&(bv=X0)}catch(X0){console.error(`[initializeMobileProvider] failed to parse cached chainId: ${X0}`)}}R2(`[initializeMobileProvider] cachedAccountAddress: ${ov}, cachedChainId: ${bv}`);const xv=!(!_c||y1===o.PlatformType.NonBrowser||y1===o.PlatformType.ReactNative),hy=wx.init({shouldSetOnWindow:xv,connectionStream:V0,shouldShimWeb3:mu});let oy=!1;const fy=X0=>{oy=X0},Fy=()=>oy,qv=(X0,s0,g0,d0)=>s$(void 0,void 0,void 0,function*(){var c0,a0,S0,z0,Q0,p1,T1,U1,S1;if(oy){E0==null||E0.showActiveModal();let Av=Fy();for(;Av;)yield zde(1e3),Av=Fy();return R2("[initializeMobileProvider: sendRequest()] initial method completed -- prevent installation and call provider"),g0(...s0)}const n1=Mu.isMetaMaskInstalled(),V1=E0==null?void 0:E0.isConnected(),J1=wx.getProvider();let wv=null,Sv=null;if(wv=(c0=J1.getSelectedAddress())!==null&&c0!==void 0?c0:ov,Sv=J1.getChainId()||bv,wv&&gv&&wv!==ov&&gv.persistAccounts([wv]).catch(Av=>{console.error(`[initializeMobileProvider] failed to persist account: ${Av}`)}),Sv&&(bv=Sv,gv&&gv.persistChainId(Sv).catch(Av=>{console.error(`[initializeMobileProvider] failed to persist chainId: ${Av}`)})),R2("[initializeMobileProvider: sendRequest()]",{selectedAddress:wv,chainId:Sv}),d0&&R2(`[initializeMobileProvider: sendRequest()] method=${X0} ongoing=${oy} selectedAddress=${wv} isInstalled=${n1} checkInstallationOnAllCalls=${yt} socketConnected=${V1}`),wv&&X0.toLowerCase()===$E.ETH_ACCOUNTS.toLowerCase())return[wv];if(Sv&&X0.toLowerCase()===$E.ETH_CHAINID.toLowerCase())return Sv;const Hv=[$E.ETH_REQUESTACCOUNTS,$E.WALLET_REQUESTPERMISSIONS,$E.METAMASK_CONNECTSIGN,$E.METAMASK_CONNECTWITH],ty=!XB[X0],gy=(a0=l0.options.readonlyRPCMap)===null||a0===void 0?void 0:a0[Sv];if(gy&&ty)try{const Av=(S0=s0==null?void 0:s0[0])===null||S0===void 0?void 0:S0.params,Dv=yield(({rpcEndpoint:ry,method:Jv,sdkInfo:Fv,params:iy})=>s$(void 0,void 0,void 0,function*(){const cy=JSON.stringify({jsonrpc:"2.0",method:Jv,params:iy,id:(Ude+=1,Ude)}),Uy={Accept:"application/json","Content-Type":"application/json"};let r2;ry.includes("infura")&&(Uy["Metamask-Sdk-Info"]=Fv);try{r2=yield CX(ry,{method:"POST",headers:Uy,body:cy})}catch(f2){throw f2 instanceof Error?new Error(`Failed to fetch from RPC: ${f2.message}`):new Error(`Failed to fetch from RPC: ${f2}`)}if(!r2.ok)throw new Error(`Server responded with a status of ${r2.status}`);return(yield r2.json()).result}))({rpcEndpoint:gy,sdkInfo:F1,method:X0,params:Av||[]});return d0&&R2(`initializeProvider::ReadOnlyRPCResponse ${Dv}`),Dv}catch(Av){console.warn(`[initializeMobileProvider: sendRequest()] method=${X0} readOnlyRPCRequest failed:`,Av)}if((!n1||n1&&!V1)&&X0!==$E.METAMASK_GETPROVIDERSTATE){const Av=((z0=s0==null?void 0:s0[0])===null||z0===void 0?void 0:z0.params)||[];if(Hv.indexOf(X0)!==-1||yt){fy(!0);try{yield Su.start({wait:!1})}catch(ry){if(fy(!1),o.PROVIDER_UPDATE_TYPE.EXTENSION===ry){if(R2(`[initializeMobileProvider: sendRequest()] extension provider detect: re-create ${X0} on the active provider`),X0.toLowerCase()===$E.METAMASK_CONNECTSIGN.toLowerCase()){const Jv=yield(Q0=l0.getProvider())===null||Q0===void 0?void 0:Q0.request({method:$E.ETH_REQUESTACCOUNTS,params:[]});if(!Jv.length)throw new Error("SDK state invalid -- undefined accounts");return yield(p1=l0.getProvider())===null||p1===void 0?void 0:p1.request({method:$E.PERSONAL_SIGN,params:[Av[0],Jv[0]]})}if(X0.toLowerCase()===$E.METAMASK_CONNECTWITH.toLowerCase()){const[Jv]=Av;return yield(({method:Fv,sdk:iy,params:cy})=>s$(void 0,void 0,void 0,function*(){var Uy,r2,f2,j2;if(!iy.isExtensionActive())throw new Error("SDK state invalid -- extension is not active");R2("[MetaMaskProvider: extensionConnectWithOverwrite()] Overwriting request method",Fv,cy);const mw=yield(Uy=iy.getProvider())===null||Uy===void 0?void 0:Uy.request({method:$E.ETH_REQUESTACCOUNTS,params:[]});if(!mw.length)throw new Error("SDK state invalid -- undefined accounts");if((Fv==null?void 0:Fv.toLowerCase())===$E.PERSONAL_SIGN.toLowerCase()){const p2={method:Fv,params:[cy[0],mw[0]]};return yield(r2=iy.getProvider())===null||r2===void 0?void 0:r2.request(p2)}if((Fv==null?void 0:Fv.toLowerCase())===$E.ETH_SENDTRANSACTION.toLowerCase()){const p2={method:Fv,params:[Object.assign(Object.assign({},cy[0]),{from:mw[0]})]};return yield(f2=iy.getProvider())===null||f2===void 0?void 0:f2.request(p2)}return Ege.includes(Fv.toLowerCase())?(console.warn(`MetaMaskSDK connectWith method=${Fv} -- not handled by the extension -- call separately`),mw):yield(j2=iy.getProvider())===null||j2===void 0?void 0:j2.request({method:Fv,params:cy})}))({method:Jv.method,sdk:l0,params:Jv.params})}return R2(`[initializeMobileProvider: sendRequest()] sending '${X0}' on active provider`,Av),yield(T1=l0.getProvider())===null||T1===void 0?void 0:T1.request({method:X0,params:Av})}throw R2(`[initializeMobileProvider: sendRequest()] failed to start installer: ${ry}`),ry}const Dv=g0(...s0);try{yield new Promise((ry,Jv)=>{E0==null||E0.getConnector().once(o.EventType.AUTHORIZED,()=>{ry(!0)}),l0.once(o.EventType.PROVIDER_UPDATE,Fv=>{R2(`[initializeMobileProvider: sendRequest()] PROVIDER_UPDATE --- remote provider request interupted type=${Fv}`),Fv===o.PROVIDER_UPDATE_TYPE.EXTENSION?Jv(o.EventType.PROVIDER_UPDATE):Jv(new Error("Connection Terminated"))})})}catch(ry){if(fy(!1),ry===o.EventType.PROVIDER_UPDATE)return yield(U1=l0.getProvider())===null||U1===void 0?void 0:U1.request({method:X0,params:Av});throw ry}return fy(!1),Dv}if(Mu.isSecure()&&XB[X0])return g0(...s0);if(l0.isExtensionActive())return R2(`[initializeMobileProvider: sendRequest()] EXTENSION active - redirect request '${X0}' to it`,s0,Av),yield(S1=l0.getProvider())===null||S1===void 0?void 0:S1.request({method:X0,params:Av});throw R2(`[initializeMobileProvider: sendRequest()] method=${X0} --- skip --- not connected/installed`),new Error("MetaMask is not connected/installed, please call eth_requestAccounts to connect first.")}const yv=yield g0(...s0);return R2(`[initializeMobileProvider: sendRequest()] method=${X0} rpcResponse: ${yv}`),yv}),{request:Qv}=hy;hy.request=(...X0)=>s$(void 0,void 0,void 0,function*(){return qv(X0==null?void 0:X0[0].method,X0,Qv,j0)});const{send:T0}=hy;return hy.send=(...X0)=>s$(void 0,void 0,void 0,function*(){return qv(X0==null?void 0:X0[0],X0,T0,j0)}),R2("[initializeMobileProvider: sendRequest()] metamaskStream.start()"),V0.start(),hy});var BW,X6,TX;class Kde{constructor({serverUrl:ir,enabled:_c,originatorInfo:mu}){BW.set(this,LB),X6.set(this,void 0),TX.set(this,void 0),wne(this,BW,ir),wne(this,TX,mu),wne(this,X6,_c==null||_c)}send({event:ir,params:_c}){if(!bne(this,X6))return;const mu={id:"sdk",event:ir,sdkVersion:_U,originationInfo:bne(this,TX),params:_c};R2(`[Analytics: send()] event: ${ir}`,mu),FH(mu,bne(this,BW)).catch(Mu=>{R2(`[Analytics: send()] error: ${Mu}`)})}}BW=new WeakMap,X6=new WeakMap,TX=new WeakMap;const DW=({provider:yt,sdkInstance:ir})=>{if("state"in yt)throw new Error("INVALID EXTENSION PROVIDER");return new Proxy(yt,{get:(_c,mu)=>mu==="request"?function(Mu){var Su,l0,E0;return s$(this,void 0,void 0,function*(){R2("[wrapExtensionProvider()] Overwriting request method",Mu);const{method:j0,params:M0}=Mu,B0=hoe.includes(j0.toLowerCase());if(B0&&((Su=ir.analytics)===null||Su===void 0||Su.send({event:W6.SDK_RPC_REQUEST,params:{method:j0,from:"extension"}})),j0===$E.METAMASK_BATCH&&Array.isArray(M0)){for(const v1 of M0)yield yt==null?void 0:yt.request({method:v1.method,params:v1.params});const y1=yield _c.request(Mu);return B0&&((l0=ir.analytics)===null||l0===void 0||l0.send({event:W6.SDK_RPC_REQUEST_DONE,params:{method:j0,from:"extension"}})),y1}const V0=yield _c.request(Mu);return B0&&((E0=ir.analytics)===null||E0===void 0||E0.send({event:W6.SDK_RPC_REQUEST_DONE,params:{method:j0,from:"extension"}})),V0})}:mu==="getChainId"?function(){return yt.chainId}:mu==="getNetworkVersion"?function(){return yt.networkVersion}:mu==="getSelectedAddress"?function(){return yt.selectedAddress}:mu==="isConnected"?function(){return yt._state.isConnected}:_c[mu]})};var jK;(function(yt){yt.Announce="eip6963:announceProvider",yt.Request="eip6963:requestProvider"})(jK||(jK={}));var Toe={exports:{}};(function(yt,ir){yt.exports=function(_c){var mu={};function Mu(Su){if(mu[Su])return mu[Su].exports;var l0=mu[Su]={i:Su,l:!1,exports:{}};return _c[Su].call(l0.exports,l0,l0.exports,Mu),l0.l=!0,l0.exports}return Mu.m=_c,Mu.c=mu,Mu.d=function(Su,l0,E0){Mu.o(Su,l0)||Object.defineProperty(Su,l0,{enumerable:!0,get:E0})},Mu.r=function(Su){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(Su,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(Su,"__esModule",{value:!0})},Mu.t=function(Su,l0){if(1&l0&&(Su=Mu(Su)),8&l0||4&l0&&typeof Su=="object"&&Su&&Su.__esModule)return Su;var E0=Object.create(null);if(Mu.r(E0),Object.defineProperty(E0,"default",{enumerable:!0,value:Su}),2&l0&&typeof Su!="string")for(var j0 in Su)Mu.d(E0,j0,(function(M0){return Su[M0]}).bind(null,j0));return E0},Mu.n=function(Su){var l0=Su&&Su.__esModule?function(){return Su.default}:function(){return Su};return Mu.d(l0,"a",l0),l0},Mu.o=function(Su,l0){return Object.prototype.hasOwnProperty.call(Su,l0)},Mu.p="",Mu(Mu.s=90)}({17:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var Su=Mu(18),l0=function(){function E0(){}return E0.getFirstMatch=function(j0,M0){var B0=M0.match(j0);return B0&&B0.length>0&&B0[1]||""},E0.getSecondMatch=function(j0,M0){var B0=M0.match(j0);return B0&&B0.length>1&&B0[2]||""},E0.matchAndReturnConst=function(j0,M0,B0){if(j0.test(M0))return B0},E0.getWindowsVersionName=function(j0){switch(j0){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},E0.getMacOSVersionName=function(j0){var M0=j0.split(".").splice(0,2).map(function(B0){return parseInt(B0,10)||0});if(M0.push(0),M0[0]===10)switch(M0[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},E0.getAndroidVersionName=function(j0){var M0=j0.split(".").splice(0,2).map(function(B0){return parseInt(B0,10)||0});if(M0.push(0),!(M0[0]===1&&M0[1]<5))return M0[0]===1&&M0[1]<6?"Cupcake":M0[0]===1&&M0[1]>=6?"Donut":M0[0]===2&&M0[1]<2?"Eclair":M0[0]===2&&M0[1]===2?"Froyo":M0[0]===2&&M0[1]>2?"Gingerbread":M0[0]===3?"Honeycomb":M0[0]===4&&M0[1]<1?"Ice Cream Sandwich":M0[0]===4&&M0[1]<4?"Jelly Bean":M0[0]===4&&M0[1]>=4?"KitKat":M0[0]===5?"Lollipop":M0[0]===6?"Marshmallow":M0[0]===7?"Nougat":M0[0]===8?"Oreo":M0[0]===9?"Pie":void 0},E0.getVersionPrecision=function(j0){return j0.split(".").length},E0.compareVersions=function(j0,M0,B0){B0===void 0&&(B0=!1);var V0=E0.getVersionPrecision(j0),y1=E0.getVersionPrecision(M0),v1=Math.max(V0,y1),F1=0,ov=E0.map([j0,M0],function(bv){var gv=v1-E0.getVersionPrecision(bv),xv=bv+new Array(gv+1).join(".0");return E0.map(xv.split("."),function(hy){return new Array(20-hy.length).join("0")+hy}).reverse()});for(B0&&(F1=v1-Math.min(V0,y1)),v1-=1;v1>=F1;){if(ov[0][v1]>ov[1][v1])return 1;if(ov[0][v1]===ov[1][v1]){if(v1===F1)return 0;v1-=1}else if(ov[0][v1]1?y1-1:0),F1=1;F10){var oy=Object.keys(bv),fy=M0.default.find(oy,function(s0){return ov.isOS(s0)});if(fy){var Fy=this.satisfies(bv[fy]);if(Fy!==void 0)return Fy}var qv=M0.default.find(oy,function(s0){return ov.isPlatform(s0)});if(qv){var Qv=this.satisfies(bv[qv]);if(Qv!==void 0)return Qv}}if(hy>0){var T0=Object.keys(xv),X0=M0.default.find(T0,function(s0){return ov.isBrowser(s0,!0)});if(X0!==void 0)return this.compareVersion(xv[X0])}},v1.isBrowser=function(F1,ov){ov===void 0&&(ov=!1);var bv=this.getBrowserName().toLowerCase(),gv=F1.toLowerCase(),xv=M0.default.getBrowserTypeByAlias(gv);return ov&&xv&&(gv=xv.toLowerCase()),gv===bv},v1.compareVersion=function(F1){var ov=[0],bv=F1,gv=!1,xv=this.getBrowserVersion();if(typeof xv=="string")return F1[0]===">"||F1[0]==="<"?(bv=F1.substr(1),F1[1]==="="?(gv=!0,bv=F1.substr(2)):ov=[],F1[0]===">"?ov.push(1):ov.push(-1)):F1[0]==="="?bv=F1.substr(1):F1[0]==="~"&&(gv=!0,bv=F1.substr(1)),ov.indexOf(M0.default.compareVersions(xv,bv,gv))>-1},v1.isOS=function(F1){return this.getOSName(!0)===String(F1).toLowerCase()},v1.isPlatform=function(F1){return this.getPlatformType(!0)===String(F1).toLowerCase()},v1.isEngine=function(F1){return this.getEngineName(!0)===String(F1).toLowerCase()},v1.is=function(F1,ov){return ov===void 0&&(ov=!1),this.isBrowser(F1,ov)||this.isOS(F1)||this.isPlatform(F1)},v1.some=function(F1){var ov=this;return F1===void 0&&(F1=[]),F1.some(function(bv){return ov.is(bv)})},y1}();mu.default=V0,_c.exports=mu.default},92:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var Su,l0=(Su=Mu(17))&&Su.__esModule?Su:{default:Su},E0=/version\/(\d+(\.?_?\d+)+)/i,j0=[{test:[/googlebot/i],describe:function(M0){var B0={name:"Googlebot"},V0=l0.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/opera/i],describe:function(M0){var B0={name:"Opera"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/opr\/|opios/i],describe:function(M0){var B0={name:"Opera"},V0=l0.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/SamsungBrowser/i],describe:function(M0){var B0={name:"Samsung Internet for Android"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/Whale/i],describe:function(M0){var B0={name:"NAVER Whale Browser"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/MZBrowser/i],describe:function(M0){var B0={name:"MZ Browser"},V0=l0.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/focus/i],describe:function(M0){var B0={name:"Focus"},V0=l0.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/swing/i],describe:function(M0){var B0={name:"Swing"},V0=l0.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/coast/i],describe:function(M0){var B0={name:"Opera Coast"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(M0){var B0={name:"Opera Touch"},V0=l0.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/yabrowser/i],describe:function(M0){var B0={name:"Yandex Browser"},V0=l0.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/ucbrowser/i],describe:function(M0){var B0={name:"UC Browser"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/Maxthon|mxios/i],describe:function(M0){var B0={name:"Maxthon"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/epiphany/i],describe:function(M0){var B0={name:"Epiphany"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/puffin/i],describe:function(M0){var B0={name:"Puffin"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/sleipnir/i],describe:function(M0){var B0={name:"Sleipnir"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/k-meleon/i],describe:function(M0){var B0={name:"K-Meleon"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/micromessenger/i],describe:function(M0){var B0={name:"WeChat"},V0=l0.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/qqbrowser/i],describe:function(M0){var B0={name:/qqbrowserlite/i.test(M0)?"QQ Browser Lite":"QQ Browser"},V0=l0.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/msie|trident/i],describe:function(M0){var B0={name:"Internet Explorer"},V0=l0.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/\sedg\//i],describe:function(M0){var B0={name:"Microsoft Edge"},V0=l0.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/edg([ea]|ios)/i],describe:function(M0){var B0={name:"Microsoft Edge"},V0=l0.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/vivaldi/i],describe:function(M0){var B0={name:"Vivaldi"},V0=l0.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/seamonkey/i],describe:function(M0){var B0={name:"SeaMonkey"},V0=l0.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/sailfish/i],describe:function(M0){var B0={name:"Sailfish"},V0=l0.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/silk/i],describe:function(M0){var B0={name:"Amazon Silk"},V0=l0.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/phantom/i],describe:function(M0){var B0={name:"PhantomJS"},V0=l0.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/slimerjs/i],describe:function(M0){var B0={name:"SlimerJS"},V0=l0.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(M0){var B0={name:"BlackBerry"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/(web|hpw)[o0]s/i],describe:function(M0){var B0={name:"WebOS Browser"},V0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/bada/i],describe:function(M0){var B0={name:"Bada"},V0=l0.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/tizen/i],describe:function(M0){var B0={name:"Tizen"},V0=l0.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/qupzilla/i],describe:function(M0){var B0={name:"QupZilla"},V0=l0.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/firefox|iceweasel|fxios/i],describe:function(M0){var B0={name:"Firefox"},V0=l0.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/electron/i],describe:function(M0){var B0={name:"Electron"},V0=l0.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/MiuiBrowser/i],describe:function(M0){var B0={name:"Miui"},V0=l0.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/chromium/i],describe:function(M0){var B0={name:"Chromium"},V0=l0.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/chrome|crios|crmo/i],describe:function(M0){var B0={name:"Chrome"},V0=l0.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/GSA/i],describe:function(M0){var B0={name:"Google Search"},V0=l0.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:function(M0){var B0=!M0.test(/like android/i),V0=M0.test(/android/i);return B0&&V0},describe:function(M0){var B0={name:"Android Browser"},V0=l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/playstation 4/i],describe:function(M0){var B0={name:"PlayStation 4"},V0=l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/safari|applewebkit/i],describe:function(M0){var B0={name:"Safari"},V0=l0.default.getFirstMatch(E0,M0);return V0&&(B0.version=V0),B0}},{test:[/.*/i],describe:function(M0){var B0=M0.search("\\(")!==-1?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:l0.default.getFirstMatch(B0,M0),version:l0.default.getSecondMatch(B0,M0)}}}];mu.default=j0,_c.exports=mu.default},93:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var Su,l0=(Su=Mu(17))&&Su.__esModule?Su:{default:Su},E0=Mu(18),j0=[{test:[/Roku\/DVP/],describe:function(M0){var B0=l0.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,M0);return{name:E0.OS_MAP.Roku,version:B0}}},{test:[/windows phone/i],describe:function(M0){var B0=l0.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.WindowsPhone,version:B0}}},{test:[/windows /i],describe:function(M0){var B0=l0.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,M0),V0=l0.default.getWindowsVersionName(B0);return{name:E0.OS_MAP.Windows,version:B0,versionName:V0}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(M0){var B0={name:E0.OS_MAP.iOS},V0=l0.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,M0);return V0&&(B0.version=V0),B0}},{test:[/macintosh/i],describe:function(M0){var B0=l0.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,M0).replace(/[_\s]/g,"."),V0=l0.default.getMacOSVersionName(B0),y1={name:E0.OS_MAP.MacOS,version:B0};return V0&&(y1.versionName=V0),y1}},{test:[/(ipod|iphone|ipad)/i],describe:function(M0){var B0=l0.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,M0).replace(/[_\s]/g,".");return{name:E0.OS_MAP.iOS,version:B0}}},{test:function(M0){var B0=!M0.test(/like android/i),V0=M0.test(/android/i);return B0&&V0},describe:function(M0){var B0=l0.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,M0),V0=l0.default.getAndroidVersionName(B0),y1={name:E0.OS_MAP.Android,version:B0};return V0&&(y1.versionName=V0),y1}},{test:[/(web|hpw)[o0]s/i],describe:function(M0){var B0=l0.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,M0),V0={name:E0.OS_MAP.WebOS};return B0&&B0.length&&(V0.version=B0),V0}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(M0){var B0=l0.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,M0)||l0.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,M0)||l0.default.getFirstMatch(/\bbb(\d+)/i,M0);return{name:E0.OS_MAP.BlackBerry,version:B0}}},{test:[/bada/i],describe:function(M0){var B0=l0.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.Bada,version:B0}}},{test:[/tizen/i],describe:function(M0){var B0=l0.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.Tizen,version:B0}}},{test:[/linux/i],describe:function(){return{name:E0.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:E0.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(M0){var B0=l0.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.PlayStation4,version:B0}}}];mu.default=j0,_c.exports=mu.default},94:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var Su,l0=(Su=Mu(17))&&Su.__esModule?Su:{default:Su},E0=Mu(18),j0=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(M0){var B0=l0.default.getFirstMatch(/(can-l01)/i,M0)&&"Nova",V0={type:E0.PLATFORMS_MAP.mobile,vendor:"Huawei"};return B0&&(V0.model=B0),V0}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet}}},{test:function(M0){var B0=M0.test(/ipod|iphone/i),V0=M0.test(/like (ipod|iphone)/i);return B0&&!V0},describe:function(M0){var B0=l0.default.getFirstMatch(/(ipod|iphone)/i,M0);return{type:E0.PLATFORMS_MAP.mobile,vendor:"Apple",model:B0}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:E0.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:E0.PLATFORMS_MAP.mobile}}},{test:function(M0){return M0.getBrowserName(!0)==="blackberry"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(M0){return M0.getBrowserName(!0)==="bada"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile}}},{test:function(M0){return M0.getBrowserName()==="windows phone"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(M0){var B0=Number(String(M0.getOSVersion()).split(".")[0]);return M0.getOSName(!0)==="android"&&B0>=3},describe:function(){return{type:E0.PLATFORMS_MAP.tablet}}},{test:function(M0){return M0.getOSName(!0)==="android"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile}}},{test:function(M0){return M0.getOSName(!0)==="macos"},describe:function(){return{type:E0.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(M0){return M0.getOSName(!0)==="windows"},describe:function(){return{type:E0.PLATFORMS_MAP.desktop}}},{test:function(M0){return M0.getOSName(!0)==="linux"},describe:function(){return{type:E0.PLATFORMS_MAP.desktop}}},{test:function(M0){return M0.getOSName(!0)==="playstation 4"},describe:function(){return{type:E0.PLATFORMS_MAP.tv}}},{test:function(M0){return M0.getOSName(!0)==="roku"},describe:function(){return{type:E0.PLATFORMS_MAP.tv}}}];mu.default=j0,_c.exports=mu.default},95:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var Su,l0=(Su=Mu(17))&&Su.__esModule?Su:{default:Su},E0=Mu(18),j0=[{test:function(M0){return M0.getBrowserName(!0)==="microsoft edge"},describe:function(M0){if(/\sedg\//i.test(M0))return{name:E0.ENGINE_MAP.Blink};var B0=l0.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,M0);return{name:E0.ENGINE_MAP.EdgeHTML,version:B0}}},{test:[/trident/i],describe:function(M0){var B0={name:E0.ENGINE_MAP.Trident},V0=l0.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:function(M0){return M0.test(/presto/i)},describe:function(M0){var B0={name:E0.ENGINE_MAP.Presto},V0=l0.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:function(M0){var B0=M0.test(/gecko/i),V0=M0.test(/like gecko/i);return B0&&!V0},describe:function(M0){var B0={name:E0.ENGINE_MAP.Gecko},V0=l0.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:E0.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(M0){var B0={name:E0.ENGINE_MAP.WebKit},V0=l0.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,M0);return V0&&(B0.version=V0),B0}}];mu.default=j0,_c.exports=mu.default}})})(Toe);var oD,Vde=d(Toe.exports);(function(yt){yt.Disabled="Disabled",yt.Temporary="Temporary",yt.UntilResponse="UntilResponse"})(oD||(oD={}));const RX=()=>"wakeLock"in navigator,FW=()=>{if(typeof navigator>"u")return!1;const{userAgent:yt}=navigator,ir=/CPU (?:iPhone )?OS (\d+)(?:_\d+)?_?\d+ like Mac OS X/iu.exec(yt);return!!ir&&parseInt(ir[1],10)<10&&!window.MSStream};class Cge{constructor(ir){this.enabled=!1,this._eventsAdded=!1,this.debug=ir!=null&&ir}start(){if(this.enabled=!1,RX()&&!this._eventsAdded){this._eventsAdded=!0,this._wakeLock=void 0;const ir=()=>s$(this,void 0,void 0,function*(){this._wakeLock!==null&&document.visibilityState==="visible"&&(yield this.enable())});document.addEventListener("visibilitychange",ir),document.addEventListener("fullscreenchange",ir)}else FW()?this.noSleepTimer=void 0:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","MetaMask SDK - Listening for responses"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm","data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK"),this._addSourceToVideo(this.noSleepVideo,"mp4","data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"),this.noSleepVideo.addEventListener("loadedmetadata",()=>{R2("[WakeLockManager: start()] video loadedmetadata",this.noSleepVideo),this.noSleepVideo&&(this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo&&this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())}))}))}_addSourceToVideo(ir,_c,mu){const Mu=document.createElement("source");Mu.src=mu,Mu.type=`video/${_c}`,ir.appendChild(Mu)}isEnabled(){return this.enabled}setDebug(ir){R2("[WakeLockManager: setDebug()] activate debug mode"),this.debug=ir}enable(){return s$(this,void 0,void 0,function*(){this.enabled&&this.disable("from_enable");const ir=RX(),_c=FW();if(R2(`[WakeLockManager: enable()] hasWakelock=${ir} isOldIos=${_c}`,this.noSleepVideo),this.start(),RX())try{const mu=yield navigator.wakeLock.request("screen");this._wakeLock=mu,this.enabled=!0}catch(mu){return R2("[WakeLockManager: enable()] failed to enable wake lock",mu),this.enabled=!1,!1}else if(FW())return this.disable("from_enable_old_ios"),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,!0;return!!this.noSleepVideo&&(this.noSleepVideo.play().then(()=>{R2("[WakeLockManager: enable()] video started playing successfully")}).catch(mu=>{console.warn("[WakeLockManager: enable()] video failed to play",mu)}),this.enabled=!0,!0)})}disable(ir){if(this.enabled){if(R2(`[WakeLockManager: disable()] context=${ir}`),RX())this._wakeLock&&(R2("[WakeLockManager: disable()] release wake lock"),this._wakeLock.release()),this._wakeLock=void 0;else if(FW())this.noSleepTimer&&(console.warn(` +${noe(yt)}`,{request:yt})};var nX={};Object.defineProperty(nX,"__esModule",{value:!0}),nX.mergeMiddleware=void 0;const uge=zH;nX.mergeMiddleware=function(yt){const ir=new uge.JsonRpcEngine;return yt.forEach(_c=>ir.push(_c)),ir.asMiddleware()},function(yt){var ir=c&&c.__createBinding||(Object.create?function(mu,Mu,xu,l0){l0===void 0&&(l0=xu);var E0=Object.getOwnPropertyDescriptor(Mu,xu);E0&&!("get"in E0?!Mu.__esModule:E0.writable||E0.configurable)||(E0={enumerable:!0,get:function(){return Mu[xu]}}),Object.defineProperty(mu,l0,E0)}:function(mu,Mu,xu,l0){l0===void 0&&(l0=xu),mu[l0]=Mu[xu]}),_c=c&&c.__exportStar||function(mu,Mu){for(var xu in mu)xu==="default"||Object.prototype.hasOwnProperty.call(Mu,xu)||ir(Mu,mu,xu)};Object.defineProperty(yt,"__esModule",{value:!0}),_c(uJ,yt),_c(fJ,yt),_c(Iq,yt),_c(dJ,yt),_c(zH,yt),_c(nX,yt)}($ne);var lde=-32600,fge=-32603,iX={"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."},"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32000":{standard:"EIP-1474",message:"Invalid input."},"-32001":{standard:"EIP-1474",message:"Resource not found."},"-32002":{standard:"EIP-1474",message:"Resource unavailable."},"-32003":{standard:"EIP-1474",message:"Transaction rejected."},"-32004":{standard:"EIP-1474",message:"Method not supported."},"-32005":{standard:"EIP-1474",message:"Request limit exceeded."},4001:{standard:"EIP-1193",message:"User rejected the request."},4100:{standard:"EIP-1193",message:"The requested account and/or method has not been authorized by the user."},4200:{standard:"EIP-1193",message:"The requested method is not supported by this Ethereum provider."},4900:{standard:"EIP-1193",message:"The provider is disconnected from all chains."},4901:{standard:"EIP-1193",message:"The provider is disconnected from the specified chain."}};function oX(yt){return!!yt&&typeof yt=="object"&&!Array.isArray(yt)}var ioe=(yt,ir)=>Object.hasOwnProperty.call(yt,ir),gx=class extends Error{constructor(yt){super(yt.message),this.code="ERR_ASSERTION"}},xW=yt=>oU(yt);function cde({path:yt,branch:ir}){const _c=yt[yt.length-1];return ioe(ir[ir.length-2],_c)}function gC(yt){return new _8({...yt,type:`optional ${yt.type}`,validator:(ir,_c)=>!cde(_c)||yt.validator(ir,_c),refiner:(ir,_c)=>!cde(_c)||yt.refiner(ir,_c)})}var ZB=aU([gJ(null),Ine(),fC("finite number",yt=>mJ(yt,mS())&&Number.isFinite(yt)),bA(),Mne(Tne(()=>ZB)),jq(bA(),Tne(()=>ZB))]),AK=sU(ZB,Rne(),yt=>(function(ir,_c,mu="Assertion failed",Mu=gx){try{kne(ir,_c)}catch(xu){throw function(l0,E0){var M0,B0;return j0=l0,typeof((B0=(M0=j0==null?void 0:j0.prototype)==null?void 0:M0.constructor)==null?void 0:B0.name)=="string"?new l0({message:E0}):l0({message:E0});var j0}(Mu,`${mu}: ${function(l0){return function(E0){return function(j0){return typeof j0=="object"&&j0!==null&&"message"in j0}(E0)&&typeof E0.message=="string"?E0.message:function(j0){return j0==null}(E0)?"":String(E0)}(l0).replace(/\.$/u,"")}(xu)}.`)}}(yt,ZB),JSON.parse(JSON.stringify(yt,(ir,_c)=>{if(ir!=="__proto__"&&ir!=="constructor")return _c}))));function aX(yt){try{return function(ir){Cne(ir,AK)}(yt),!0}catch{return!1}}var _K=gJ("2.0"),SK=Pne(aU([mS(),bA()])),ude=xW({code:One(),message:bA(),data:gC(AK),stack:gC(bA())}),kW=aU([jq(bA(),AK),Mne(AK)]);xW({id:SK,jsonrpc:_K,method:bA(),params:gC(kW)}),xW({jsonrpc:_K,method:bA(),params:gC(kW)}),oU({id:SK,jsonrpc:_K,result:JH(vJ()),error:JH(ude)}),aU([xW({id:SK,jsonrpc:_K,result:AK}),xW({id:SK,jsonrpc:_K,error:ude})]);var dge="Unspecified error message. This is a bug, please report it.";dde(fge);var fde="Unspecified server error.";function dde(yt,ir=dge){if(function(_c){return Number.isInteger(_c)}(yt)){const _c=yt.toString();if(ioe(iX,_c))return iX[_c].message;if(function(mu){return mu>=-32099&&mu<=-32e3}(yt))return fde}return ir}function rP(yt){return Object.getOwnPropertyNames(yt).reduce((ir,_c)=>{const mu=yt[_c];return aX(mu)&&(ir[_c]=mu),ir},{})}var k5=class extends Error{constructor(yt,ir,_c){if(!Number.isInteger(yt))throw new Error('"code" must be an integer.');if(!ir||typeof ir!="string")throw new Error('"message" must be a non-empty string.');super(ir),this.code=yt,_c!==void 0&&(this.data=_c)}serialize(){const yt={code:this.code,message:this.message};var ir;return this.data!==void 0&&(yt.data=this.data,function(_c){if(typeof _c!="object"||_c===null)return!1;try{let mu=_c;for(;Object.getPrototypeOf(mu)!==null;)mu=Object.getPrototypeOf(mu);return Object.getPrototypeOf(_c)===mu}catch{return!1}}(this.data)&&(yt.data.cause=(ir=this.data.cause,Array.isArray(ir)?ir.map(_c=>aX(_c)?_c:oX(_c)?rP(_c):null):oX(ir)?rP(ir):aX(ir)?ir:null))),this.stack&&(yt.stack=this.stack),yt}toString(){return $W(this.serialize(),sX,2)}};function sX(yt,ir){if(ir!=="[Circular]")return ir}var YM=yt=>function(ir,_c){const[mu,Mu]=function(xu){if(xu){if(typeof xu=="string")return[xu];if(typeof xu=="object"&&!Array.isArray(xu)){const{message:l0,data:E0}=xu;if(l0&&typeof l0!="string")throw new Error("Must specify string message.");return[l0??void 0,E0]}}return[]}(_c);return new k5(ir,mu??dde(ir),Mu)}(lde,yt),$U=Object.freeze(["eth_subscription"]),lX=(yt=console)=>[$ne.createIdRemapMiddleware(),ooe(yt),Tme(yt)];function ooe(yt){return(ir,_c,mu)=>{typeof ir.method=="string"&&ir.method||(_c.error=YM({message:"The request 'method' must be a non-empty string.",data:ir})),mu(Mu=>{const{error:xu}=_c;return xu&&yt.error(`MetaMask - RPC Error: ${xu.message}`,xu),Mu()})}}var xK=(yt,ir,_c=!0)=>(mu,Mu)=>{mu||Mu.error?ir(mu||Mu.error):!_c||Array.isArray(Mu)?yt(Mu):yt(Mu.result)},aoe=yt=>!!yt&&typeof yt=="string"&&yt.startsWith("0x"),cX=()=>{};async function soe(yt,ir){try{const _c=await async function(){return{name:uX(window),icon:await hde(window)}}();yt.handle({jsonrpc:"2.0",id:1,method:"metamask_sendDomainMetadata",params:_c},cX)}catch(_c){ir.error({message:A8.errors.sendSiteMetadata(),originalError:_c})}}function uX(yt){const{document:ir}=yt,_c=ir.querySelector('head > meta[property="og:site_name"]');if(_c)return _c.content;const mu=ir.querySelector('head > meta[name="title"]');return mu?mu.content:ir.title&&ir.title.length>0?ir.title:window.location.hostname}async function hde(yt){const{document:ir}=yt,_c=ir.querySelectorAll('head > link[rel~="icon"]');for(const mu of Array.from(_c))if(mu&&await hge(mu.href))return mu.href;return null}async function hge(yt){return new Promise((ir,_c)=>{try{const mu=document.createElement("img");mu.onload=()=>ir(!0),mu.onerror=()=>ir(!1),mu.src=yt}catch(mu){_c(mu)}})}var vx,nP,t8=(yt,ir,_c)=>{if(!ir.has(yt))throw TypeError("Cannot "+_c)},iP=(yt,ir,_c)=>(t8(yt,ir,"read from private field"),_c?_c.call(yt):ir.get(yt)),yx=(yt,ir,_c)=>{if(ir.has(yt))throw TypeError("Cannot add the same private member more than once");ir instanceof WeakSet?ir.add(yt):ir.set(yt,_c)},XN=(yt,ir,_c,mu)=>(t8(yt,ir,"write to private field"),ir.set(yt,_c),_c),fX=d(function yt(ir,_c){if(ir===_c)return!0;if(ir&&_c&&typeof ir=="object"&&typeof _c=="object"){if(ir.constructor!==_c.constructor)return!1;var mu,Mu,xu;if(Array.isArray(ir)){if((mu=ir.length)!=_c.length)return!1;for(Mu=mu;Mu--!=0;)if(!yt(ir[Mu],_c[Mu]))return!1;return!0}if(ir.constructor===RegExp)return ir.source===_c.source&&ir.flags===_c.flags;if(ir.valueOf!==Object.prototype.valueOf)return ir.valueOf()===_c.valueOf();if(ir.toString!==Object.prototype.toString)return ir.toString()===_c.toString();if((mu=(xu=Object.keys(ir)).length)!==Object.keys(_c).length)return!1;for(Mu=mu;Mu--!=0;)if(!Object.prototype.hasOwnProperty.call(_c,xu[Mu]))return!1;for(Mu=mu;Mu--!=0;){var l0=xu[Mu];if(!yt(ir[l0],_c[l0]))return!1}return!0}return ir!=ir&&_c!=_c}),ZS=class jve extends sde{constructor({logger:ir=console,maxEventListeners:_c=100,rpcMiddleware:mu=[]}={}){super(),yx(this,vx,void 0),yx(this,nP,void 0),this._log=ir,this.setMaxListeners(_c),this._state={...jve._defaultState},XN(this,nP,null),XN(this,vx,null),this._handleAccountsChanged=this._handleAccountsChanged.bind(this),this._handleConnect=this._handleConnect.bind(this),this._handleChainChanged=this._handleChainChanged.bind(this),this._handleDisconnect=this._handleDisconnect.bind(this),this._handleUnlockStateChanged=this._handleUnlockStateChanged.bind(this),this._rpcRequest=this._rpcRequest.bind(this),this.request=this.request.bind(this);const Mu=new $ne.JsonRpcEngine;mu.forEach(xu=>Mu.push(xu)),this._rpcEngine=Mu}get chainId(){return iP(this,vx)}get selectedAddress(){return iP(this,nP)}isConnected(){return this._state.isConnected}async request(ir){if(!ir||typeof ir!="object"||Array.isArray(ir))throw YM({message:A8.errors.invalidRequestArgs(),data:ir});const{method:_c,params:mu}=ir;if(typeof _c!="string"||_c.length===0)throw YM({message:A8.errors.invalidRequestMethod(),data:ir});if(mu!==void 0&&!Array.isArray(mu)&&(typeof mu!="object"||mu===null))throw YM({message:A8.errors.invalidRequestParams(),data:ir});const Mu=mu==null?{method:_c}:{method:_c,params:mu};return new Promise((xu,l0)=>{this._rpcRequest(Mu,xK(xu,l0))})}_initializeState(ir){if(this._state.initialized)throw new Error("Provider already initialized.");if(ir){const{accounts:_c,chainId:mu,isUnlocked:Mu,networkVersion:xu}=ir;this._handleConnect(mu),this._handleChainChanged({chainId:mu,networkVersion:xu}),this._handleUnlockStateChanged({accounts:_c,isUnlocked:Mu}),this._handleAccountsChanged(_c)}this._state.initialized=!0,this.emit("_initialized")}_rpcRequest(ir,_c){let mu=_c;return Array.isArray(ir)||(ir.jsonrpc||(ir.jsonrpc="2.0"),ir.method!=="eth_accounts"&&ir.method!=="eth_requestAccounts"||(mu=(Mu,xu)=>{this._handleAccountsChanged(xu.result??[],ir.method==="eth_accounts"),_c(Mu,xu)})),this._rpcEngine.handle(ir,mu)}_handleConnect(ir){this._state.isConnected||(this._state.isConnected=!0,this.emit("connect",{chainId:ir}),this._log.debug(A8.info.connected(ir)))}_handleDisconnect(ir,_c){if(this._state.isConnected||!this._state.isPermanentlyDisconnected&&!ir){let mu;this._state.isConnected=!1,ir?(mu=new k5(1013,_c??A8.errors.disconnected()),this._log.debug(mu)):(mu=new k5(1011,_c??A8.errors.permanentlyDisconnected()),this._log.error(mu),XN(this,vx,null),this._state.accounts=null,XN(this,nP,null),this._state.isUnlocked=!1,this._state.isPermanentlyDisconnected=!0),this.emit("disconnect",mu)}}_handleChainChanged({chainId:ir}={}){aoe(ir)?(this._handleConnect(ir),ir!==iP(this,vx)&&(XN(this,vx,ir),this._state.initialized&&this.emit("chainChanged",iP(this,vx)))):this._log.error(A8.errors.invalidNetworkParams(),{chainId:ir})}_handleAccountsChanged(ir,_c=!1){let mu=ir;Array.isArray(ir)||(this._log.error("MetaMask: Received invalid accounts parameter. Please report this bug.",ir),mu=[]);for(const Mu of ir)if(typeof Mu!="string"){this._log.error("MetaMask: Received non-string account. Please report this bug.",ir),mu=[];break}if(!fX(this._state.accounts,mu)&&(_c&&this._state.accounts!==null&&this._log.error("MetaMask: 'eth_accounts' unexpectedly updated accounts. Please report this bug.",mu),this._state.accounts=mu,iP(this,nP)!==mu[0]&&XN(this,nP,mu[0]||null),this._state.initialized)){const Mu=[...mu];this.emit("accountsChanged",Mu)}}_handleUnlockStateChanged({accounts:ir,isUnlocked:_c}={}){typeof _c=="boolean"?_c!==this._state.isUnlocked&&(this._state.isUnlocked=_c,this._handleAccountsChanged(ir??[])):this._log.error("MetaMask: Received invalid isUnlocked parameter. Please report this bug.")}};vx=new WeakMap,nP=new WeakMap,ZS._defaultState={accounts:null,isConnected:!1,isUnlocked:!1,initialized:!1,isPermanentlyDisconnected:!1};var loe=ZS,JB={},coe={};Object.defineProperty(coe,"__esModule",{value:!0});const pde=AO;coe.default=function(yt){if(!(yt!=null&&yt.engine))throw new Error("Missing engine parameter!");const{engine:ir}=yt,_c=new pde.Duplex({objectMode:!0,read:()=>{},write:function(mu,Mu,xu){ir.handle(mu,(l0,E0)=>{_c.push(E0)}),xu()}});return ir.on&&ir.on("notification",mu=>{_c.push(mu)}),_c};var dX={},mde=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(dX,"__esModule",{value:!0});const gde=mde(GB),pge=AO;dX.default=function(yt={}){const ir={},_c=new pge.Duplex({objectMode:!0,read:()=>{},write:function(xu,l0,E0){let j0=null;try{xu.id?function(M0){const{id:B0}=M0;if(B0===null)return;const q0=ir[B0];q0?(delete ir[B0],Object.assign(q0.res,M0),setTimeout(q0.end)):console.warn(`StreamMiddleware - Unknown response id "${B0}"`)}(xu):function(M0){yt!=null&&yt.retryOnMessage&&M0.method===yt.retryOnMessage&&Object.values(ir).forEach(({req:B0,retryCount:q0=0})=>{if(!B0.id)return;if(q0>=3)throw new Error(`StreamMiddleware - Retry limit exceeded for request id "${B0.id}"`);const y1=ir[B0.id];y1&&(y1.retryCount=q0+1),Mu(B0)}),mu.emit("notification",M0)}(xu)}catch(M0){j0=M0}E0(j0)}}),mu=new gde.default;return{events:mu,middleware:(xu,l0,E0,j0)=>{ir[xu.id]={req:xu,res:l0,next:E0,end:j0},Mu(xu)},stream:_c};function Mu(xu){_c.push(xu)}};var vde=c&&c.__importDefault||function(yt){return yt&&yt.__esModule?yt:{default:yt}};Object.defineProperty(JB,"__esModule",{value:!0});var yde=JB.createStreamMiddleware=JB.createEngineStream=void 0;const CW=vde(coe);JB.createEngineStream=CW.default;const bde=vde(dX);yde=JB.createStreamMiddleware=bde.default;var EU={},kK={exports:{}},CK=function yt(ir,_c){if(ir&&_c)return yt(ir)(_c);if(typeof ir!="function")throw new TypeError("need wrapper function");return Object.keys(ir).forEach(function(Mu){mu[Mu]=ir[Mu]}),mu;function mu(){for(var Mu=new Array(arguments.length),xu=0;xuir.destroy(_c||void 0)),ir}ignoreStream(yt){if(!yt)throw new Error("ObjectMultiplex - name must not be empty");if(this._substreams[yt])throw new Error(`ObjectMultiplex - Substream for name "${yt}" already exists`);this._substreams[yt]=pX}_read(){}_write(yt,ir,_c){const{name:mu,data:Mu}=yt;if(!mu)return console.warn(`ObjectMultiplex - malformed chunk without name "${yt}"`),_c();const xu=this._substreams[mu];return xu?(xu!==pX&&xu.push(Mu),_c()):(console.warn(`ObjectMultiplex - orphaned data for stream "${mu}"`),_c())}};EU.ObjectMultiplex=vge;var RW=d(EU.ObjectMultiplex);const oP=yt=>yt!==null&&typeof yt=="object"&&typeof yt.pipe=="function";oP.writable=yt=>oP(yt)&&yt.writable!==!1&&typeof yt._write=="function"&&typeof yt._writableState=="object",oP.readable=yt=>oP(yt)&&yt.readable!==!1&&typeof yt._read=="function"&&typeof yt._readableState=="object",oP.duplex=yt=>oP.writable(yt)&&oP.readable(yt),oP.transform=yt=>oP.duplex(yt)&&typeof yt._transform=="function";var C5,yge=oP,bge=class extends loe{constructor(yt,{jsonRpcStreamName:ir,logger:_c=console,maxEventListeners:mu=100,rpcMiddleware:Mu=[]}){if(super({logger:_c,maxEventListeners:mu,rpcMiddleware:Mu}),!yge.duplex(yt))throw new Error(A8.errors.invalidDuplexStream());this._handleStreamDisconnect=this._handleStreamDisconnect.bind(this);const xu=new RW;AO.pipeline(yt,xu,yt,this._handleStreamDisconnect.bind(this,"MetaMask")),this._jsonRpcConnection=yde({retryOnMessage:"METAMASK_EXTENSION_CONNECT_CAN_RETRY"}),AO.pipeline(this._jsonRpcConnection.stream,xu.createStream(ir),this._jsonRpcConnection.stream,this._handleStreamDisconnect.bind(this,"MetaMask RpcProvider")),this._rpcEngine.push(this._jsonRpcConnection.middleware),this._jsonRpcConnection.events.on("notification",l0=>{const{method:E0,params:j0}=l0;E0==="metamask_accountsChanged"?this._handleAccountsChanged(j0):E0==="metamask_unlockStateChanged"?this._handleUnlockStateChanged(j0):E0==="metamask_chainChanged"?this._handleChainChanged(j0):$U.includes(E0)?this.emit("message",{type:E0,data:j0}):E0==="METAMASK_STREAM_FAILURE"&&yt.destroy(new Error(A8.errors.permanentlyDisconnected()))})}async _initializeStateAsync(){let yt;try{yt=await this.request({method:"metamask_getProviderState"})}catch(ir){this._log.error("MetaMask: Failed to get initial state. Please report this bug.",ir)}this._initializeState(yt)}_handleStreamDisconnect(yt,ir){let _c=`MetaMask: Lost connection to "${yt}".`;ir!=null&&ir.stack&&(_c+=` +${ir.stack}`),this._log.warn(_c),this.listenerCount("error")>0&&this.emit("error",_c),this._handleDisconnect(!1,ir?ir.message:void 0)}_handleChainChanged({chainId:yt,networkVersion:ir}={}){aoe(yt)&&(_c=>!!_c&&typeof _c=="string")(ir)?ir==="loading"?this._handleDisconnect(!0):super._handleChainChanged({chainId:yt}):this._log.error(A8.errors.invalidNetworkParams(),{chainId:yt,networkVersion:ir})}},mX=class extends bge{constructor(yt,{jsonRpcStreamName:ir="metamask-provider",logger:_c=console,maxEventListeners:mu=100,shouldSendMetadata:Mu}={}){if(super(yt,{jsonRpcStreamName:ir,logger:_c,maxEventListeners:mu,rpcMiddleware:lX(_c)}),this._sentWarnings={chainId:!1,networkVersion:!1,selectedAddress:!1,enable:!1,experimentalMethods:!1,send:!1,events:{close:!1,data:!1,networkChanged:!1,notification:!1}},yx(this,C5,void 0),this._initializeStateAsync(),XN(this,C5,null),this.isMetaMask=!0,this._sendSync=this._sendSync.bind(this),this.enable=this.enable.bind(this),this.send=this.send.bind(this),this.sendAsync=this.sendAsync.bind(this),this._warnOfDeprecation=this._warnOfDeprecation.bind(this),this._metamask=this._getExperimentalApi(),this._jsonRpcConnection.events.on("notification",xu=>{const{method:l0}=xu;$U.includes(l0)&&(this.emit("data",xu),this.emit("notification",xu.params.result))}),Mu)if(document.readyState==="complete")soe(this._rpcEngine,this._log);else{const xu=()=>{soe(this._rpcEngine,this._log),window.removeEventListener("DOMContentLoaded",xu)};window.addEventListener("DOMContentLoaded",xu)}}get chainId(){return this._sentWarnings.chainId||(this._log.warn(A8.warnings.chainIdDeprecation),this._sentWarnings.chainId=!0),super.chainId}get networkVersion(){return this._sentWarnings.networkVersion||(this._log.warn(A8.warnings.networkVersionDeprecation),this._sentWarnings.networkVersion=!0),iP(this,C5)}get selectedAddress(){return this._sentWarnings.selectedAddress||(this._log.warn(A8.warnings.selectedAddressDeprecation),this._sentWarnings.selectedAddress=!0),super.selectedAddress}sendAsync(yt,ir){this._rpcRequest(yt,ir)}addListener(yt,ir){return this._warnOfDeprecation(yt),super.addListener(yt,ir)}on(yt,ir){return this._warnOfDeprecation(yt),super.on(yt,ir)}once(yt,ir){return this._warnOfDeprecation(yt),super.once(yt,ir)}prependListener(yt,ir){return this._warnOfDeprecation(yt),super.prependListener(yt,ir)}prependOnceListener(yt,ir){return this._warnOfDeprecation(yt),super.prependOnceListener(yt,ir)}_handleDisconnect(yt,ir){super._handleDisconnect(yt,ir),iP(this,C5)&&!yt&&XN(this,C5,null)}_warnOfDeprecation(yt){var ir;((ir=this._sentWarnings)==null?void 0:ir.events[yt])===!1&&(this._log.warn(A8.warnings.events[yt]),this._sentWarnings.events[yt]=!0)}async enable(){return this._sentWarnings.enable||(this._log.warn(A8.warnings.enableDeprecation),this._sentWarnings.enable=!0),new Promise((yt,ir)=>{try{this._rpcRequest({method:"eth_requestAccounts",params:[]},xK(yt,ir))}catch(_c){ir(_c)}})}send(yt,ir){return this._sentWarnings.send||(this._log.warn(A8.warnings.sendDeprecation),this._sentWarnings.send=!0),typeof yt!="string"||ir&&!Array.isArray(ir)?yt&&typeof yt=="object"&&typeof ir=="function"?this._rpcRequest(yt,ir):this._sendSync(yt):new Promise((_c,mu)=>{try{this._rpcRequest({method:yt,params:ir},xK(_c,mu,!1))}catch(Mu){mu(Mu)}})}_sendSync(yt){let ir;switch(yt.method){case"eth_accounts":ir=this.selectedAddress?[this.selectedAddress]:[];break;case"eth_coinbase":ir=this.selectedAddress??null;break;case"eth_uninstallFilter":this._rpcRequest(yt,cX),ir=!0;break;case"net_version":ir=iP(this,C5)??null;break;default:throw new Error(A8.errors.unsupportedSync(yt.method))}return{id:yt.id,jsonrpc:yt.jsonrpc,result:ir}}_getExperimentalApi(){return new Proxy({isUnlocked:async()=>(this._state.initialized||await new Promise(yt=>{this.on("_initialized",()=>yt())}),this._state.isUnlocked),requestBatch:async yt=>{if(!Array.isArray(yt))throw YM({message:"Batch requests must be made with an array of request objects.",data:yt});return new Promise((ir,_c)=>{this._rpcRequest(yt,xK(ir,_c))})}},{get:(yt,ir,..._c)=>(this._sentWarnings.experimentalMethods||(this._log.warn(A8.warnings.experimentalMethods),this._sentWarnings.experimentalMethods=!0),Reflect.get(yt,ir,..._c))})}_handleChainChanged({chainId:yt,networkVersion:ir}={}){super._handleChainChanged({chainId:yt,networkVersion:ir}),this._state.isConnected&&ir!==iP(this,C5)&&(XN(this,C5,ir),this._state.initialized&&this.emit("networkChanged",iP(this,C5)))}};C5=new WeakMap;const R2=VJ("MM_SDK");R2.color="#FFAC1C";var foe={},QN={};Object.defineProperty(QN,"__esModule",{value:!0}),QN.EthereumProviderError=QN.EthereumRpcError=void 0;const wge=Yie;class Ade extends Error{constructor(ir,_c,mu){if(!Number.isInteger(ir))throw new Error('"code" must be an integer.');if(!_c||typeof _c!="string")throw new Error('"message" must be a nonempty string.');super(_c),this.code=ir,mu!==void 0&&(this.data=mu)}serialize(){const ir={code:this.code,message:this.message};return this.data!==void 0&&(ir.data=this.data),this.stack&&(ir.stack=this.stack),ir}toString(){return wge.default(this.serialize(),$ge,2)}}function $ge(yt,ir){if(ir!=="[Circular]")return ir}QN.EthereumRpcError=Ade,QN.EthereumProviderError=class extends Ade{constructor(yt,ir,_c){if(!function(mu){return Number.isInteger(mu)&&mu>=1e3&&mu<=4999}(yt))throw new Error('"code" must be an integer such that: 1000 <= code <= 4999');super(yt,ir,_c)}};var aP={},uT={};Object.defineProperty(uT,"__esModule",{value:!0}),uT.errorValues=uT.errorCodes=void 0,uT.errorCodes={rpc:{invalidInput:-32e3,resourceNotFound:-32001,resourceUnavailable:-32002,transactionRejected:-32003,methodNotSupported:-32004,limitExceeded:-32005,parse:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internal:-32603},provider:{userRejectedRequest:4001,unauthorized:4100,unsupportedMethod:4200,disconnected:4900,chainDisconnected:4901}},uT.errorValues={"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."},"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32000":{standard:"EIP-1474",message:"Invalid input."},"-32001":{standard:"EIP-1474",message:"Resource not found."},"-32002":{standard:"EIP-1474",message:"Resource unavailable."},"-32003":{standard:"EIP-1474",message:"Transaction rejected."},"-32004":{standard:"EIP-1474",message:"Method not supported."},"-32005":{standard:"EIP-1474",message:"Request limit exceeded."},4001:{standard:"EIP-1193",message:"User rejected the request."},4100:{standard:"EIP-1193",message:"The requested account and/or method has not been authorized by the user."},4200:{standard:"EIP-1193",message:"The requested method is not supported by this Ethereum provider."},4900:{standard:"EIP-1193",message:"The provider is disconnected from all chains."},4901:{standard:"EIP-1193",message:"The provider is disconnected from the specified chain."}},function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.serializeError=yt.isValidCode=yt.getMessageFromCode=yt.JSON_RPC_SERVER_ERROR_MESSAGE=void 0;const ir=uT,_c=QN,mu=ir.errorCodes.rpc.internal,Mu={code:mu,message:xu(mu)};function xu(B0,q0="Unspecified error message. This is a bug, please report it."){if(Number.isInteger(B0)){const y1=B0.toString();if(M0(ir.errorValues,y1))return ir.errorValues[y1].message;if(E0(B0))return yt.JSON_RPC_SERVER_ERROR_MESSAGE}return q0}function l0(B0){if(!Number.isInteger(B0))return!1;const q0=B0.toString();return!!ir.errorValues[q0]||!!E0(B0)}function E0(B0){return B0>=-32099&&B0<=-32e3}function j0(B0){return B0&&typeof B0=="object"&&!Array.isArray(B0)?Object.assign({},B0):B0}function M0(B0,q0){return Object.prototype.hasOwnProperty.call(B0,q0)}yt.JSON_RPC_SERVER_ERROR_MESSAGE="Unspecified server error.",yt.getMessageFromCode=xu,yt.isValidCode=l0,yt.serializeError=function(B0,{fallbackError:q0=Mu,shouldIncludeStack:y1=!1}={}){var v1,F1;if(!q0||!Number.isInteger(q0.code)||typeof q0.message!="string")throw new Error("Must provide fallback error with integer number code and string message.");if(B0 instanceof _c.EthereumRpcError)return B0.serialize();const ov={};if(B0&&typeof B0=="object"&&!Array.isArray(B0)&&M0(B0,"code")&&l0(B0.code)){const gv=B0;ov.code=gv.code,gv.message&&typeof gv.message=="string"?(ov.message=gv.message,M0(gv,"data")&&(ov.data=gv.data)):(ov.message=xu(ov.code),ov.data={originalError:j0(B0)})}else{ov.code=q0.code;const gv=(v1=B0)===null||v1===void 0?void 0:v1.message;ov.message=gv&&typeof gv=="string"?gv:q0.message,ov.data={originalError:j0(B0)}}const bv=(F1=B0)===null||F1===void 0?void 0:F1.stack;return y1&&B0&&bv&&typeof bv=="string"&&(ov.stack=bv),ov}}(aP);var MW={};Object.defineProperty(MW,"__esModule",{value:!0}),MW.ethErrors=void 0;const ZM=QN,gX=aP,r8=uT;function JM(yt,ir){const[_c,mu]=doe(ir);return new ZM.EthereumRpcError(yt,_c||gX.getMessageFromCode(yt),mu)}function IW(yt,ir){const[_c,mu]=doe(ir);return new ZM.EthereumProviderError(yt,_c||gX.getMessageFromCode(yt),mu)}function doe(yt){if(yt){if(typeof yt=="string")return[yt];if(typeof yt=="object"&&!Array.isArray(yt)){const{message:ir,data:_c}=yt;if(ir&&typeof ir!="string")throw new Error("Must specify string message.");return[ir||void 0,_c]}}return[]}MW.ethErrors={rpc:{parse:yt=>JM(r8.errorCodes.rpc.parse,yt),invalidRequest:yt=>JM(r8.errorCodes.rpc.invalidRequest,yt),invalidParams:yt=>JM(r8.errorCodes.rpc.invalidParams,yt),methodNotFound:yt=>JM(r8.errorCodes.rpc.methodNotFound,yt),internal:yt=>JM(r8.errorCodes.rpc.internal,yt),server:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum RPC Server errors must provide single object argument.");const{code:ir}=yt;if(!Number.isInteger(ir)||ir>-32005||ir<-32099)throw new Error('"code" must be an integer such that: -32099 <= code <= -32005');return JM(ir,yt)},invalidInput:yt=>JM(r8.errorCodes.rpc.invalidInput,yt),resourceNotFound:yt=>JM(r8.errorCodes.rpc.resourceNotFound,yt),resourceUnavailable:yt=>JM(r8.errorCodes.rpc.resourceUnavailable,yt),transactionRejected:yt=>JM(r8.errorCodes.rpc.transactionRejected,yt),methodNotSupported:yt=>JM(r8.errorCodes.rpc.methodNotSupported,yt),limitExceeded:yt=>JM(r8.errorCodes.rpc.limitExceeded,yt)},provider:{userRejectedRequest:yt=>IW(r8.errorCodes.provider.userRejectedRequest,yt),unauthorized:yt=>IW(r8.errorCodes.provider.unauthorized,yt),unsupportedMethod:yt=>IW(r8.errorCodes.provider.unsupportedMethod,yt),disconnected:yt=>IW(r8.errorCodes.provider.disconnected,yt),chainDisconnected:yt=>IW(r8.errorCodes.provider.chainDisconnected,yt),custom:yt=>{if(!yt||typeof yt!="object"||Array.isArray(yt))throw new Error("Ethereum Provider custom errors must provide single object argument.");const{code:ir,message:_c,data:mu}=yt;if(!_c||typeof _c!="string")throw new Error('"message" must be a nonempty string');return new ZM.EthereumProviderError(ir,_c,mu)}}},function(yt){Object.defineProperty(yt,"__esModule",{value:!0}),yt.getMessageFromCode=yt.serializeError=yt.EthereumProviderError=yt.EthereumRpcError=yt.ethErrors=yt.errorCodes=void 0;const ir=QN;Object.defineProperty(yt,"EthereumRpcError",{enumerable:!0,get:function(){return ir.EthereumRpcError}}),Object.defineProperty(yt,"EthereumProviderError",{enumerable:!0,get:function(){return ir.EthereumProviderError}});const _c=aP;Object.defineProperty(yt,"serializeError",{enumerable:!0,get:function(){return _c.serializeError}}),Object.defineProperty(yt,"getMessageFromCode",{enumerable:!0,get:function(){return _c.getMessageFromCode}});const mu=MW;Object.defineProperty(yt,"ethErrors",{enumerable:!0,get:function(){return mu.ethErrors}});const Mu=uT;Object.defineProperty(yt,"errorCodes",{enumerable:!0,get:function(){return Mu.errorCodes}})}(foe);const $E={METAMASK_GETPROVIDERSTATE:"metamask_getProviderState",METAMASK_CONNECTSIGN:"metamask_connectSign",METAMASK_CONNECTWITH:"metamask_connectWith",METAMASK_OPEN:"metamask_open",METAMASK_BATCH:"metamask_batch",PERSONAL_SIGN:"personal_sign",WALLET_REQUESTPERMISSIONS:"wallet_requestPermissions",WALLET_GETPERMISSIONS:"wallet_getPermissions",WALLET_WATCHASSET:"wallet_watchAsset",WALLET_ADDETHEREUMCHAIN:"wallet_addEthereumChain",WALLET_SWITCHETHETHEREUMCHAIN:"wallet_switchEthereumChain",ETH_REQUESTACCOUNTS:"eth_requestAccounts",ETH_ACCOUNTS:"eth_accounts",ETH_CHAINID:"eth_chainId",ETH_SENDTRANSACTION:"eth_sendTransaction",ETH_SIGNTYPEDDATA:"eth_signTypedData",ETH_SIGNTYPEDDATA_V3:"eth_signTypedData_v3",ETH_SIGNTYPEDDATA_V4:"eth_signTypedData_v4",ETH_SIGNTRANSACTION:"eth_signTransaction",ETH_SIGN:"eth_sign",PERSONAL_EC_RECOVER:"personal_ecRecover"},XB={[$E.ETH_REQUESTACCOUNTS]:!0,[$E.ETH_SENDTRANSACTION]:!0,[$E.ETH_SIGNTRANSACTION]:!0,[$E.ETH_SIGN]:!0,[$E.ETH_ACCOUNTS]:!0,[$E.PERSONAL_SIGN]:!0,[$E.ETH_SIGNTYPEDDATA]:!0,[$E.ETH_SIGNTYPEDDATA_V3]:!0,[$E.ETH_SIGNTYPEDDATA_V4]:!0,[$E.WALLET_REQUESTPERMISSIONS]:!0,[$E.WALLET_GETPERMISSIONS]:!0,[$E.WALLET_WATCHASSET]:!0,[$E.WALLET_ADDETHEREUMCHAIN]:!0,[$E.WALLET_SWITCHETHETHEREUMCHAIN]:!0,[$E.METAMASK_CONNECTSIGN]:!0,[$E.METAMASK_CONNECTWITH]:!0,[$E.PERSONAL_EC_RECOVER]:!0,[$E.METAMASK_BATCH]:!0,[$E.METAMASK_OPEN]:!0},hoe=Object.keys(XB).map(yt=>yt.toLowerCase()),Ege=["eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sign"].map(yt=>yt.toLowerCase()),OW=".sdk-comm",vX="providerType",poe=".MMSDK_cached_address",moe=".MMSDK_cached_chainId",goe="chainChanged",voe="accountsChanged",_de="disconnect",Sde="connect",PW="connected";class yoe{constructor({enabled:ir}={enabled:!1}){this.enabled=!1,this.enabled=ir}persistChannelConfig(ir){return s$(this,void 0,void 0,function*(){const _c=JSON.stringify(ir);R2(`[StorageManagerWeb: persistChannelConfig()] enabled=${this.enabled}`,ir),localStorage.setItem(OW,_c)})}getPersistedChannelConfig(){return s$(this,void 0,void 0,function*(){let ir;try{if(R2(`[StorageManagerWeb: getPersistedChannelConfig()] enabled=${this.enabled}`),ir=localStorage.getItem(OW),R2("[StorageManagerWeb: getPersistedChannelConfig()]",ir),!ir)return;const _c=JSON.parse(ir);return R2("[StorageManagerWeb: getPersistedChannelConfig()] channelConfig",_c),_c}catch(_c){return void console.error("[StorageManagerWeb: getPersistedChannelConfig()] Can't find existing channel config",_c)}})}persistAccounts(ir){return s$(this,void 0,void 0,function*(){R2(`[StorageManagerWeb: persistAccounts()] enabled=${this.enabled}`,ir);const _c=JSON.stringify(ir);localStorage.setItem(poe,_c)})}getCachedAccounts(){return s$(this,void 0,void 0,function*(){try{const ir=localStorage.getItem(poe);return ir?JSON.parse(ir):[]}catch(ir){throw console.error("[StorageManagerWeb: getCachedAccounts()] Error reading cached accounts",ir),ir}})}persistChainId(ir){return s$(this,void 0,void 0,function*(){R2(`[StorageManagerWeb: persistChainId()] enabled=${this.enabled}`,ir),localStorage.setItem(moe,ir)})}getCachedChainId(){return s$(this,void 0,void 0,function*(){try{const ir=localStorage.getItem(moe);return ir??void 0}catch(ir){throw console.error("[StorageManagerWeb: getCachedChainId()] Error reading cached chainId",ir),ir}})}terminate(){return s$(this,void 0,void 0,function*(){R2(`[StorageManagerWeb: terminate()] enabled=${this.enabled}`),localStorage.removeItem(OW)})}}const xde=yt=>new yoe(yt);class boe extends mX{constructor({connectionStream:ir,shouldSendMetadata:_c,autoRequestAccounts:mu=!1}){super(ir,{logger:console,maxEventListeners:100,shouldSendMetadata:_c}),this.state={autoRequestAccounts:!1,providerStateRequested:!1,chainId:"",networkVersion:""},R2(`[SDKProvider: constructor()] autoRequestAccounts=${mu}`),this.state.autoRequestAccounts=mu}forceInitializeState(){return s$(this,void 0,void 0,function*(){return R2(`[SDKProvider: forceInitializeState()] autoRequestAccounts=${this.state.autoRequestAccounts}`),this._initializeStateAsync()})}_setConnected(){R2("[SDKProvider: _setConnected()] Setting connected state"),this._state.isConnected=!0}getState(){return this._state}getSDKProviderState(){return this.state}getSelectedAddress(){var ir;const{accounts:_c}=this._state;return _c&&_c.length!==0?((ir=_c[0])===null||ir===void 0?void 0:ir.toLowerCase())||"":(R2("[SDKProvider: getSelectedAddress] No accounts found"),null)}getChainId(){return this.state.chainId}getNetworkVersion(){return this.state.networkVersion}setSDKProviderState(ir){this.state=Object.assign(Object.assign({},this.state),ir)}handleDisconnect({terminate:ir=!1}){(function({terminate:_c=!1,instance:mu}){const{state:Mu}=mu;mu.isConnected()?(R2(`[SDKProvider: handleDisconnect()] cleaning up provider state terminate=${_c}`,mu),_c&&(mu._state.accounts=null,mu._state.isUnlocked=!1,mu._state.isPermanentlyDisconnected=!0,mu._state.initialized=!1),mu._handleAccountsChanged([]),mu._state.isConnected=!1,mu.emit("disconnect",foe.ethErrors.provider.disconnected()),Mu.providerStateRequested=!1):R2("[SDKProvider: handleDisconnect()] not connected --- interrupt disconnection")})({terminate:ir,instance:this})}_initializeStateAsync(){return s$(this,void 0,void 0,function*(){return function(ir){var _c,mu;return s$(this,void 0,void 0,function*(){ir.state===void 0&&(ir.state={autoRequestAccounts:!1,providerStateRequested:!1,chainId:""});const{state:Mu}=ir;let xu;if(Mu.providerStateRequested)R2("[SDKProvider: initializeStateAsync()] initialization already in progress");else{let l0;Mu.providerStateRequested=!0;let E0=null,j0=!1,M0=!1;const B0=xde({enabled:!0});if(B0){const q0=yield B0.getPersistedChannelConfig();j0=(_c=q0==null?void 0:q0.relayPersistence)!==null&&_c!==void 0&&_c,l0=yield B0.getCachedChainId();const y1=yield B0.getCachedAccounts();y1.length>0&&(E0=y1[0])}if(R2(`[SDKProvider: initializeStateAsync()] relayPersistence=${j0}`,{relayPersistence:j0,cachedChainId:l0,cachedSelectedAddress:E0}),j0)if(l0&&E0)xu={accounts:[E0],chainId:l0,isUnlocked:!1},M0=!0;else try{xu=yield ir.request({method:"metamask_getProviderState"})}catch(q0){return ir._log.error("MetaMask: Failed to get initial state. Please report this bug.",q0),void(Mu.providerStateRequested=!1)}if(((mu=xu==null?void 0:xu.accounts)===null||mu===void 0?void 0:mu.length)===0)if(ir.getSelectedAddress())xu.accounts=[ir.getSelectedAddress()];else{R2("[SDKProvider: initializeStateAsync()] Fetch accounts remotely.");const q0=yield ir.request({method:"eth_requestAccounts",params:[]});xu.accounts=q0}ir._initializeState(xu),Mu.providerStateRequested=!1,M0&&(ir._state.isConnected=!0,ir.emit("connect",{chainId:xu==null?void 0:xu.chainId}))}})}(this)})}_initializeState(ir){return R2("[SDKProvider: _initializeState()]",ir),function(_c,mu,Mu){return R2("[SDKProvider: initializeState()] set state._initialized to false"),_c._state.initialized=!1,mu(Mu)}(this,super._initializeState.bind(this),ir)}_handleChainChanged({chainId:ir,networkVersion:_c}={}){this.state.chainId=ir,this.state.networkVersion=_c,function({instance:mu,chainId:Mu,networkVersion:xu,superHandleChainChanged:l0}){R2(`[SDKProvider: handleChainChanged()] chainId=${Mu} networkVersion=${xu}`);let E0=xu;xu||(R2("[SDKProvider: handleChainChanged()] forced network version to prevent provider error"),E0="1"),mu._state.isConnected=!0,mu.emit("connect",{chainId:Mu}),l0({chainId:Mu,networkVersion:E0})}({instance:this,chainId:ir,networkVersion:_c,superHandleChainChanged:super._handleChainChanged.bind(this)})}}var jW={exports:{}};(function(yt,ir){(function(_c){var mu=Object.hasOwnProperty,Mu=Array.isArray?Array.isArray:function(a0){return Object.prototype.toString.call(a0)==="[object Array]"},xu=typeof Kv=="object"&&!0,l0=typeof Symbol=="function",E0=typeof Reflect=="object",j0=typeof setImmediate=="function"?setImmediate:setTimeout,M0=l0?E0&&typeof Reflect.ownKeys=="function"?Reflect.ownKeys:function(a0){var S0=Object.getOwnPropertyNames(a0);return S0.push.apply(S0,Object.getOwnPropertySymbols(a0)),S0}:Object.keys;function B0(){this._events={},this._conf&&q0.call(this,this._conf)}function q0(a0){a0&&(this._conf=a0,a0.delimiter&&(this.delimiter=a0.delimiter),a0.maxListeners!==_c&&(this._maxListeners=a0.maxListeners),a0.wildcard&&(this.wildcard=a0.wildcard),a0.newListener&&(this._newListener=a0.newListener),a0.removeListener&&(this._removeListener=a0.removeListener),a0.verboseMemoryLeak&&(this.verboseMemoryLeak=a0.verboseMemoryLeak),a0.ignoreErrors&&(this.ignoreErrors=a0.ignoreErrors),this.wildcard&&(this.listenerTree={}))}function y1(a0,S0){var z0="(node) warning: possible EventEmitter memory leak detected. "+a0+" listeners added. Use emitter.setMaxListeners() to increase limit.";if(this.verboseMemoryLeak&&(z0+=" Event name: "+S0+"."),Kv!==void 0&&Kv.emitWarning){var Q0=new Error(z0);Q0.name="MaxListenersExceededWarning",Q0.emitter=this,Q0.count=a0,Kv.emitWarning(Q0)}else console.error(z0),console.trace&&console.trace()}var v1=function(a0,S0,z0){var Q0=arguments.length;switch(Q0){case 0:return[];case 1:return[a0];case 2:return[a0,S0];case 3:return[a0,S0,z0];default:for(var p1=new Array(Q0);Q0--;)p1[Q0]=arguments[Q0];return p1}};function F1(a0,S0){for(var z0={},Q0=a0.length,p1=0,T1=0;T10;)if(S1===a0[n1])return T1;U1(S0)}}Object.assign(ov.prototype,{subscribe:function(a0,S0,z0){var Q0=this,p1=this._target,T1=this._emitter,U1=this._listeners,S1=function(){var n1=v1.apply(null,arguments),V1={data:n1,name:S0,original:a0};z0?z0.call(p1,V1)!==!1&&T1.emit.apply(T1,[V1.name].concat(n1)):T1.emit.apply(T1,[S0].concat(n1))};if(U1[a0])throw Error("Event '"+a0+"' is already listening");this._listenersCount++,T1._newListener&&T1._removeListener&&!Q0._onNewListener?(this._onNewListener=function(n1){n1===S0&&U1[a0]===null&&(U1[a0]=S1,Q0._on.call(p1,a0,S1))},T1.on("newListener",this._onNewListener),this._onRemoveListener=function(n1){n1===S0&&!T1.hasListeners(n1)&&U1[a0]&&(U1[a0]=null,Q0._off.call(p1,a0,S1))},U1[a0]=null,T1.on("removeListener",this._onRemoveListener)):(U1[a0]=S1,Q0._on.call(p1,a0,S1))},unsubscribe:function(a0){var S0,z0,Q0,p1=this,T1=this._listeners,U1=this._emitter,S1=this._off,n1=this._target;if(a0&&typeof a0!="string")throw TypeError("event must be a string");function V1(){p1._onNewListener&&(U1.off("newListener",p1._onNewListener),U1.off("removeListener",p1._onRemoveListener),p1._onNewListener=null,p1._onRemoveListener=null);var J1=Fy.call(U1,p1);U1._observers.splice(J1,1)}if(a0){if(!(S0=T1[a0]))return;S1.call(n1,a0,S0),delete T1[a0],--this._listenersCount||V1()}else{for(Q0=(z0=M0(T1)).length;Q0-- >0;)a0=z0[Q0],S1.call(n1,a0,T1[a0]);this._listeners={},this._listenersCount=0,V1()}}});var hy=xv(["function"]),oy=xv(["object","function"]);function fy(a0,S0,z0){var Q0,p1,T1,U1=0,S1=new a0(function(n1,V1,J1){function wv(){p1&&(p1=null),U1&&(clearTimeout(U1),U1=0)}z0=bv(z0,{timeout:0,overload:!1},{timeout:function(ty,gy){return(typeof(ty*=1)!="number"||ty<0||!Number.isFinite(ty))&&gy("timeout must be a positive number"),ty}}),Q0=!z0.overload&&typeof a0.prototype.cancel=="function"&&typeof J1=="function";var Sv=function(ty){wv(),n1(ty)},Hv=function(ty){wv(),V1(ty)};Q0?S0(Sv,Hv,J1):(p1=[function(ty){Hv(ty||Error("canceled"))}],S0(Sv,Hv,function(ty){if(T1)throw Error("Unable to subscribe on cancel event asynchronously");if(typeof ty!="function")throw TypeError("onCancel callback must be a function");p1.push(ty)}),T1=!0),z0.timeout>0&&(U1=setTimeout(function(){var ty=Error("timeout");ty.code="ETIMEDOUT",U1=0,S1.cancel(ty),V1(ty)},z0.timeout))});return Q0||(S1.cancel=function(n1){if(p1){for(var V1=p1.length,J1=1;J10;)(Sv=Av[S1])!=="_listeners"&&(Dv=qv(a0,S0,z0[Sv],Q0+1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv);return ry}if(Jv==="**"){for((yv=Q0+1===p1||Q0+2===p1&&Fv==="*")&&z0._listeners&&(ry=qv(a0,S0,z0,p1,p1)),S1=(Av=M0(z0)).length;S1-- >0;)(Sv=Av[S1])!=="_listeners"&&(Sv==="*"||Sv==="**"?(z0[Sv]._listeners&&!yv&&(Dv=qv(a0,S0,z0[Sv],p1,p1))&&(ry?ry.push.apply(ry,Dv):ry=Dv),Dv=qv(a0,S0,z0[Sv],Q0,p1)):Dv=qv(a0,S0,z0[Sv],Sv===Fv?Q0+2:Q0,p1),Dv&&(ry?ry.push.apply(ry,Dv):ry=Dv));return ry}z0[Jv]&&(ry=qv(a0,S0,z0[Jv],Q0+1,p1))}if((Hv=z0["*"])&&qv(a0,S0,Hv,Q0+1,p1),ty=z0["**"])if(Q00;)(Sv=Av[S1])!=="_listeners"&&(Sv===Fv?qv(a0,S0,ty[Sv],Q0+2,p1):Sv===Jv?qv(a0,S0,ty[Sv],Q0+1,p1):((gy={})[Sv]=ty[Sv],qv(a0,S0,{"**":gy},Q0+1,p1)));else ty._listeners?qv(a0,S0,ty,p1,p1):ty["*"]&&ty["*"]._listeners&&qv(a0,S0,ty["*"],p1,p1);return ry}function Qv(a0,S0,z0){var Q0,p1,T1=0,U1=0,S1=this.delimiter,n1=S1.length;if(typeof a0=="string")if((Q0=a0.indexOf(S1))!==-1){p1=new Array(5);do p1[T1++]=a0.slice(U1,Q0),U1=Q0+n1;while((Q0=a0.indexOf(S1,U1))!==-1);p1[T1++]=a0.slice(U1)}else p1=[a0],T1=1;else p1=a0,T1=a0.length;if(T1>1){for(Q0=0;Q0+10&&J1._listeners.length>this._maxListeners&&(J1._listeners.warned=!0,y1.call(this,J1._listeners.length,V1))):J1._listeners=S0,!0;return!0}function T0(a0,S0,z0,Q0){for(var p1,T1,U1,S1,n1=M0(a0),V1=n1.length,J1=a0._listeners;V1-- >0;)p1=a0[T1=n1[V1]],U1=T1==="_listeners"?z0:z0?z0.concat(T1):[T1],S1=Q0||typeof T1=="symbol",J1&&S0.push(S1?U1:U1.join(this.delimiter)),typeof p1=="object"&&T0.call(this,p1,S0,U1,S1);return S0}function X0(a0){for(var S0,z0,Q0,p1=M0(a0),T1=p1.length;T1-- >0;)(S0=a0[z0=p1[T1]])&&(Q0=!0,z0==="_listeners"||X0(S0)||delete a0[z0]);return Q0}function s0(a0,S0,z0){this.emitter=a0,this.event=S0,this.listener=z0}function g0(a0,S0,z0){if(z0===!0)p1=!0;else if(z0===!1)Q0=!0;else{if(!z0||typeof z0!="object")throw TypeError("options should be an object or true");var Q0=z0.async,p1=z0.promisify,T1=z0.nextTick,U1=z0.objectify}if(Q0||T1||p1){var S1=S0,n1=S0._origin||S0;if(T1&&!xu)throw Error("process.nextTick is not supported");p1===_c&&(p1=S0.constructor.name==="AsyncFunction"),S0=function(){var V1=arguments,J1=this,wv=this.event;return p1?T1?Promise.resolve():new Promise(function(Sv){j0(Sv)}).then(function(){return J1.event=wv,S1.apply(J1,V1)}):(T1?$2:j0)(function(){J1.event=wv,S1.apply(J1,V1)})},S0._async=!0,S0._origin=n1}return[S0,U1?new s0(this,a0,S0):this]}function d0(a0){this._events={},this._newListener=!1,this._removeListener=!1,this.verboseMemoryLeak=!1,q0.call(this,a0)}s0.prototype.off=function(){return this.emitter.off(this.event,this.listener),this},d0.EventEmitter2=d0,d0.prototype.listenTo=function(a0,S0,z0){if(typeof a0!="object")throw TypeError("target musts be an object");var Q0=this;function p1(T1){if(typeof T1!="object")throw TypeError("events must be an object");var U1,S1=z0.reducers,n1=Fy.call(Q0,a0);U1=n1===-1?new ov(Q0,a0,z0):Q0._observers[n1];for(var V1,J1=M0(T1),wv=J1.length,Sv=typeof S1=="function",Hv=0;Hv0;)Q0=z0[p1],a0&&Q0._target!==a0||(Q0.unsubscribe(S0),T1=!0);return T1},d0.prototype.delimiter=".",d0.prototype.setMaxListeners=function(a0){a0!==_c&&(this._maxListeners=a0,this._conf||(this._conf={}),this._conf.maxListeners=a0)},d0.prototype.getMaxListeners=function(){return this._maxListeners},d0.prototype.event="",d0.prototype.once=function(a0,S0,z0){return this._once(a0,S0,!1,z0)},d0.prototype.prependOnceListener=function(a0,S0,z0){return this._once(a0,S0,!0,z0)},d0.prototype._once=function(a0,S0,z0,Q0){return this._many(a0,1,S0,z0,Q0)},d0.prototype.many=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!1,Q0)},d0.prototype.prependMany=function(a0,S0,z0,Q0){return this._many(a0,S0,z0,!0,Q0)},d0.prototype._many=function(a0,S0,z0,Q0,p1){var T1=this;if(typeof z0!="function")throw new Error("many only accepts instances of Function");function U1(){return--S0==0&&T1.off(a0,U1),z0.apply(this,arguments)}return U1._origin=z0,this._on(a0,U1,Q0,p1)},d0.prototype.emit=function(){if(!this._events&&!this._all)return!1;this._events||B0.call(this);var a0,S0,z0,Q0,p1,T1,U1=arguments[0],S1=this.wildcard;if(U1==="newListener"&&!this._newListener&&!this._events.newListener)return!1;if(S1&&(a0=U1,U1!=="newListener"&&U1!=="removeListener"&&typeof U1=="object")){if(z0=U1.length,l0){for(Q0=0;Q03)for(S0=new Array(V1-1),p1=1;p13)for(z0=new Array(J1-1),T1=1;T10&&this._events[a0].length>this._maxListeners&&(this._events[a0].warned=!0,y1.call(this,this._events[a0].length,a0))):this._events[a0]=S0,T1)},d0.prototype.off=function(a0,S0){if(typeof S0!="function")throw new Error("removeListener only takes instances of Function");var z0,Q0=[];if(this.wildcard){var p1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();if(!(Q0=qv.call(this,null,p1,this.listenerTree,0)))return this}else{if(!this._events[a0])return this;z0=this._events[a0],Q0.push({_listeners:z0})}for(var T1=0;T10){for(z0=0,Q0=(S0=this._all).length;z00;)typeof(z0=U1[S0[p1]])=="function"?Q0.push(z0):Q0.push.apply(Q0,z0);return Q0}if(this.wildcard){if(!(T1=this.listenerTree))return[];var S1=[],n1=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S1,n1,T1,0),S1}return U1&&(z0=U1[a0])?typeof z0=="function"?[z0]:z0:[]},d0.prototype.eventNames=function(a0){var S0=this._events;return this.wildcard?T0.call(this,this.listenerTree,[],null,a0):S0?M0(S0):[]},d0.prototype.listenerCount=function(a0){return this.listeners(a0).length},d0.prototype.hasListeners=function(a0){if(this.wildcard){var S0=[],z0=typeof a0=="string"?a0.split(this.delimiter):a0.slice();return qv.call(this,S0,z0,this.listenerTree,0),S0.length>0}var Q0=this._events,p1=this._all;return!!(p1&&p1.length||Q0&&(a0===_c?M0(Q0).length:Q0[a0]))},d0.prototype.listenersAny=function(){return this._all?this._all:[]},d0.prototype.waitFor=function(a0,S0){var z0=this,Q0=typeof S0;return Q0==="number"?S0={timeout:S0}:Q0==="function"&&(S0={filter:S0}),fy((S0=bv(S0,{timeout:0,filter:_c,handleError:!1,Promise,overload:!1},{filter:hy,Promise:gv})).Promise,function(p1,T1,U1){function S1(){var n1=S0.filter;if(!n1||n1.apply(z0,arguments))if(z0.off(a0,S1),S0.handleError){var V1=arguments[0];V1?T1(V1):p1(v1.apply(null,arguments).slice(1))}else p1(v1.apply(null,arguments))}U1(function(){z0.off(a0,S1)}),z0._on(a0,S1,!1)},{timeout:S0.timeout,overload:S0.overload})};var c0=d0.prototype;Object.defineProperties(d0,{defaultMaxListeners:{get:function(){return c0._maxListeners},set:function(a0){if(typeof a0!="number"||a0<0||Number.isNaN(a0))throw TypeError("n must be a non-negative number");c0._maxListeners=a0},enumerable:!0},once:{value:function(a0,S0,z0){return fy((z0=bv(z0,{Promise,timeout:0,overload:!1},{Promise:gv})).Promise,function(Q0,p1,T1){var U1;if(typeof a0.addEventListener=="function")return U1=function(){Q0(v1.apply(null,arguments))},T1(function(){a0.removeEventListener(S0,U1)}),void a0.addEventListener(S0,U1,{once:!0});var S1,n1=function(){S1&&a0.removeListener("error",S1),Q0(v1.apply(null,arguments))};S0!=="error"&&(S1=function(V1){a0.removeListener(S0,n1),p1(V1)},a0.once("error",S1)),T1(function(){S1&&a0.removeListener("error",S1),a0.removeListener(S0,n1)}),a0.once(S0,n1)},{timeout:z0.timeout,overload:z0.overload})},writable:!0,configurable:!0}}),Object.defineProperties(c0,{_maxListeners:{value:10,writable:!0,configurable:!0},_observers:{value:null,writable:!0,configurable:!0}}),yt.exports=d0})()})(jW);var kde=d(jW.exports);function XM(yt){return XM=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ir){return typeof ir}:function(ir){return ir&&typeof Symbol=="function"&&ir.constructor===Symbol&&ir!==Symbol.prototype?"symbol":typeof ir},XM(yt)}function OR(yt,ir){if(!(yt instanceof ir))throw new TypeError("Cannot call a class as a function")}function Cde(yt){var ir=function(_c,mu){if(XM(_c)!=="object"||_c===null)return _c;var Mu=_c[Symbol.toPrimitive];if(Mu!==void 0){var xu=Mu.call(_c,"string");if(XM(xu)!=="object")return xu;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(_c)}(yt);return XM(ir)==="symbol"?ir:String(ir)}function Tde(yt,ir){for(var _c=0;_cyt.length)&&(ir=yt.length);for(var _c=0,mu=new Array(ir);_c1&&arguments[1]!==void 0?arguments[1]:{};OR(this,yt),this.init(ir,_c)}return sP(yt,[{key:"init",value:function(ir){var _c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=_c.prefix||"i18next:",this.logger=ir||Age,this.options=_c,this.debug=_c.debug}},{key:"setDebug",value:function(ir){this.debug=ir}},{key:"log",value:function(){for(var ir=arguments.length,_c=new Array(ir),mu=0;mu1?_c-1:0),Mu=1;Mu<_c;Mu++)mu[Mu-1]=arguments[Mu];this.observers[ir]&&[].concat(this.observers[ir]).forEach(function(xu){xu.apply(void 0,mu)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(function(xu){xu.apply(xu,[ir].concat(mu))})}}]),yt}();function QM(){var yt,ir,_c=new Promise(function(mu,Mu){yt=mu,ir=Mu});return _c.resolve=yt,_c.reject=ir,_c}function Mde(yt){return yt==null?"":""+yt}function bX(yt,ir,_c){function mu(E0){return E0&&E0.indexOf("###")>-1?E0.replace(/###/g,"."):E0}function Mu(){return!yt||typeof yt=="string"}for(var xu=typeof ir!="string"?[].concat(ir):ir.split(".");xu.length>1;){if(Mu())return{};var l0=mu(xu.shift());!yt[l0]&&_c&&(yt[l0]=new _c),yt=Object.prototype.hasOwnProperty.call(yt,l0)?yt[l0]:{}}return Mu()?{}:{obj:yt,k:mu(xu.shift())}}function Ide(yt,ir,_c){var mu=bX(yt,ir,Object);mu.obj[mu.k]=_c}function IK(yt,ir){var _c=bX(yt,ir),mu=_c.obj,Mu=_c.k;if(mu)return mu[Mu]}function tL(yt,ir,_c){for(var mu in ir)mu!=="__proto__"&&mu!=="constructor"&&(mu in yt?typeof yt[mu]=="string"||yt[mu]instanceof String||typeof ir[mu]=="string"||ir[mu]instanceof String?_c&&(yt[mu]=ir[mu]):tL(yt[mu],ir[mu],_c):yt[mu]=ir[mu]);return yt}function rL(yt){return yt.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var $oe={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function Ode(yt){return typeof yt=="string"?yt.replace(/[&<>"'\/]/g,function(ir){return $oe[ir]}):yt}var J6=typeof window<"u"&&window.navigator&&window.navigator.userAgentData===void 0&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,eI=[" ",",","?","!",";"];function eD(yt,ir){var _c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(yt){if(yt[ir])return yt[ir];for(var mu=ir.split(_c),Mu=yt,xu=0;xuxu+l0;)l0++,j0=Mu[E0=mu.slice(xu,xu+l0).join(_c)];if(j0===void 0)return;if(j0===null)return null;if(ir.endsWith(E0)){if(typeof j0=="string")return j0;if(E0&&typeof j0[E0]=="string")return j0[E0]}var M0=mu.slice(xu+l0).join(_c);return M0?eD(j0,M0,_c):void 0}Mu=Mu[mu[xu]]}return Mu}}function Eoe(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function dE(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var xu,l0=cP(mu);if(Mu){var E0=cP(this).constructor;xu=Reflect.construct(l0,arguments,E0)}else xu=l0.apply(this,arguments);return MK(this,xu)}}(_c);function _c(mu){var Mu,xu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};return OR(this,_c),Mu=ir.call(this),J6&&eL.call(lP(Mu)),Mu.data=mu||{},Mu.options=xu,Mu.options.keySeparator===void 0&&(Mu.options.keySeparator="."),Mu.options.ignoreJSONStructure===void 0&&(Mu.options.ignoreJSONStructure=!0),Mu}return sP(_c,[{key:"addNamespaces",value:function(mu){this.options.ns.indexOf(mu)<0&&this.options.ns.push(mu)}},{key:"removeNamespaces",value:function(mu){var Mu=this.options.ns.indexOf(mu);Mu>-1&&this.options.ns.splice(Mu,1)}},{key:"getResource",value:function(mu,Mu,xu){var l0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},E0=l0.keySeparator!==void 0?l0.keySeparator:this.options.keySeparator,j0=l0.ignoreJSONStructure!==void 0?l0.ignoreJSONStructure:this.options.ignoreJSONStructure,M0=[mu,Mu];xu&&typeof xu!="string"&&(M0=M0.concat(xu)),xu&&typeof xu=="string"&&(M0=M0.concat(E0?xu.split(E0):xu)),mu.indexOf(".")>-1&&(M0=mu.split("."));var B0=IK(this.data,M0);return B0||!j0||typeof xu!="string"?B0:eD(this.data&&this.data[mu]&&this.data[mu][Mu],xu,E0)}},{key:"addResource",value:function(mu,Mu,xu,l0){var E0=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},j0=E0.keySeparator!==void 0?E0.keySeparator:this.options.keySeparator,M0=[mu,Mu];xu&&(M0=M0.concat(j0?xu.split(j0):xu)),mu.indexOf(".")>-1&&(l0=Mu,Mu=(M0=mu.split("."))[1]),this.addNamespaces(Mu),Ide(this.data,M0,l0),E0.silent||this.emit("added",mu,Mu,xu,l0)}},{key:"addResources",value:function(mu,Mu,xu){var l0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(var E0 in xu)typeof xu[E0]!="string"&&Object.prototype.toString.apply(xu[E0])!=="[object Array]"||this.addResource(mu,Mu,E0,xu[E0],{silent:!0});l0.silent||this.emit("added",mu,Mu,xu)}},{key:"addResourceBundle",value:function(mu,Mu,xu,l0,E0){var j0=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},M0=[mu,Mu];mu.indexOf(".")>-1&&(l0=xu,xu=Mu,Mu=(M0=mu.split("."))[1]),this.addNamespaces(Mu);var B0=IK(this.data,M0)||{};l0?tL(B0,xu,E0):B0=dE(dE({},B0),xu),Ide(this.data,M0,B0),j0.silent||this.emit("added",mu,Mu,xu)}},{key:"removeResourceBundle",value:function(mu,Mu){this.hasResourceBundle(mu,Mu)&&delete this.data[mu][Mu],this.removeNamespaces(Mu),this.emit("removed",mu,Mu)}},{key:"hasResourceBundle",value:function(mu,Mu){return this.getResource(mu,Mu)!==void 0}},{key:"getResourceBundle",value:function(mu,Mu){return Mu||(Mu=this.options.defaultNS),this.options.compatibilityAPI==="v1"?dE(dE({},{}),this.getResource(mu,Mu)):this.getResource(mu,Mu)}},{key:"getDataByLanguage",value:function(mu){return this.data[mu]}},{key:"hasLanguageSomeTranslations",value:function(mu){var Mu=this.getDataByLanguage(mu);return!!(Mu&&Object.keys(Mu)||[]).find(function(xu){return Mu[xu]&&Object.keys(Mu[xu]).length>0})}},{key:"toJSON",value:function(){return this.data}}]),_c}(eL),Pde={processors:{},addPostProcessor:function(yt){this.processors[yt.name]=yt},handle:function(yt,ir,_c,mu,Mu){var xu=this;return yt.forEach(function(l0){xu.processors[l0]&&(ir=xu.processors[l0].process(ir,_c,mu,Mu))}),ir}};function jde(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function j7(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var xu,l0=cP(mu);if(Mu){var E0=cP(this).constructor;xu=Reflect.construct(l0,arguments,E0)}else xu=l0.apply(this,arguments);return MK(this,xu)}}(_c);function _c(mu){var Mu,xu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return OR(this,_c),Mu=ir.call(this),J6&&eL.call(lP(Mu)),function(l0,E0,j0){["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"].forEach(function(M0){E0[M0]&&(j0[M0]=E0[M0])})}(0,mu,lP(Mu)),Mu.options=xu,Mu.options.keySeparator===void 0&&(Mu.options.keySeparator="."),Mu.logger=S2.create("translator"),Mu}return sP(_c,[{key:"changeLanguage",value:function(mu){mu&&(this.language=mu)}},{key:"exists",value:function(mu){var Mu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(mu==null)return!1;var xu=this.resolve(mu,Mu);return xu&&xu.res!==void 0}},{key:"extractFromKey",value:function(mu,Mu){var xu=Mu.nsSeparator!==void 0?Mu.nsSeparator:this.options.nsSeparator;xu===void 0&&(xu=":");var l0=Mu.keySeparator!==void 0?Mu.keySeparator:this.options.keySeparator,E0=Mu.ns||this.options.defaultNS||[],j0=xu&&mu.indexOf(xu)>-1,M0=!(this.options.userDefinedKeySeparator||Mu.keySeparator||this.options.userDefinedNsSeparator||Mu.nsSeparator||function(y1,v1,F1){v1=v1||"",F1=F1||"";var ov=eI.filter(function(hy){return v1.indexOf(hy)<0&&F1.indexOf(hy)<0});if(ov.length===0)return!0;var bv=new RegExp("(".concat(ov.map(function(hy){return hy==="?"?"\\?":hy}).join("|"),")")),gv=!bv.test(y1);if(!gv){var xv=y1.indexOf(F1);xv>0&&!bv.test(y1.substring(0,xv))&&(gv=!0)}return gv}(mu,xu,l0));if(j0&&!M0){var B0=mu.match(this.interpolator.nestingRegexp);if(B0&&B0.length>0)return{key:mu,namespaces:E0};var q0=mu.split(xu);(xu!==l0||xu===l0&&this.options.ns.indexOf(q0[0])>-1)&&(E0=q0.shift()),mu=q0.join(l0)}return typeof E0=="string"&&(E0=[E0]),{key:mu,namespaces:E0}}},{key:"translate",value:function(mu,Mu,xu){var l0=this;if(XM(Mu)!=="object"&&this.options.overloadTranslationOptionHandler&&(Mu=this.options.overloadTranslationOptionHandler(arguments)),XM(Mu)==="object"&&(Mu=j7({},Mu)),Mu||(Mu={}),mu==null)return"";Array.isArray(mu)||(mu=[String(mu)]);var E0=Mu.returnDetails!==void 0?Mu.returnDetails:this.options.returnDetails,j0=Mu.keySeparator!==void 0?Mu.keySeparator:this.options.keySeparator,M0=this.extractFromKey(mu[mu.length-1],Mu),B0=M0.key,q0=M0.namespaces,y1=q0[q0.length-1],v1=Mu.lng||this.language,F1=Mu.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(v1&&v1.toLowerCase()==="cimode"){if(F1){var ov=Mu.nsSeparator||this.options.nsSeparator;return E0?{res:"".concat(y1).concat(ov).concat(B0),usedKey:B0,exactUsedKey:B0,usedLng:v1,usedNS:y1}:"".concat(y1).concat(ov).concat(B0)}return E0?{res:B0,usedKey:B0,exactUsedKey:B0,usedLng:v1,usedNS:y1}:B0}var bv=this.resolve(mu,Mu),gv=bv&&bv.res,xv=bv&&bv.usedKey||B0,hy=bv&&bv.exactUsedKey||B0,oy=Object.prototype.toString.apply(gv),fy=Mu.joinArrays!==void 0?Mu.joinArrays:this.options.joinArrays,Fy=!this.i18nFormat||this.i18nFormat.handleAsObject;if(Fy&&gv&&typeof gv!="string"&&typeof gv!="boolean"&&typeof gv!="number"&&["[object Number]","[object Function]","[object RegExp]"].indexOf(oy)<0&&(typeof fy!="string"||oy!=="[object Array]")){if(!Mu.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var qv=this.options.returnedObjectHandler?this.options.returnedObjectHandler(xv,gv,j7(j7({},Mu),{},{ns:q0})):"key '".concat(B0," (").concat(this.language,")' returned an object instead of string.");return E0?(bv.res=qv,bv):qv}if(j0){var Qv=oy==="[object Array]",T0=Qv?[]:{},X0=Qv?hy:xv;for(var s0 in gv)if(Object.prototype.hasOwnProperty.call(gv,s0)){var g0="".concat(X0).concat(j0).concat(s0);T0[s0]=this.translate(g0,j7(j7({},Mu),{joinArrays:!1,ns:q0})),T0[s0]===g0&&(T0[s0]=gv[s0])}gv=T0}}else if(Fy&&typeof fy=="string"&&oy==="[object Array]")(gv=gv.join(fy))&&(gv=this.extendTranslation(gv,mu,Mu,xu));else{var d0=!1,c0=!1,a0=Mu.count!==void 0&&typeof Mu.count!="string",S0=_c.hasDefaultValue(Mu),z0=a0?this.pluralResolver.getSuffix(v1,Mu.count,Mu):"",Q0=Mu["defaultValue".concat(z0)]||Mu.defaultValue;!this.isValidLookup(gv)&&S0&&(d0=!0,gv=Q0),this.isValidLookup(gv)||(c0=!0,gv=B0);var p1=(Mu.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&c0?void 0:gv,T1=S0&&Q0!==gv&&this.options.updateMissing;if(c0||d0||T1){if(this.logger.log(T1?"updateKey":"missingKey",v1,y1,B0,T1?Q0:gv),j0){var U1=this.resolve(B0,j7(j7({},Mu),{},{keySeparator:!1}));U1&&U1.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var S1=[],n1=this.languageUtils.getFallbackCodes(this.options.fallbackLng,Mu.lng||this.language);if(this.options.saveMissingTo==="fallback"&&n1&&n1[0])for(var V1=0;V11&&arguments[1]!==void 0?arguments[1]:{};return typeof mu=="string"&&(mu=[mu]),mu.forEach(function(q0){if(!M0.isValidLookup(Mu)){var y1=M0.extractFromKey(q0,B0),v1=y1.key;xu=v1;var F1=y1.namespaces;M0.options.fallbackNS&&(F1=F1.concat(M0.options.fallbackNS));var ov=B0.count!==void 0&&typeof B0.count!="string",bv=ov&&!B0.ordinal&&B0.count===0&&M0.pluralResolver.shouldUseIntlApi(),gv=B0.context!==void 0&&(typeof B0.context=="string"||typeof B0.context=="number")&&B0.context!=="",xv=B0.lngs?B0.lngs:M0.languageUtils.toResolveHierarchy(B0.lng||M0.language,B0.fallbackLng);F1.forEach(function(hy){M0.isValidLookup(Mu)||(j0=hy,!NW["".concat(xv[0],"-").concat(hy)]&&M0.utils&&M0.utils.hasLoadedNamespace&&!M0.utils.hasLoadedNamespace(j0)&&(NW["".concat(xv[0],"-").concat(hy)]=!0,M0.logger.warn('key "'.concat(xu,'" for languages "').concat(xv.join(", "),`" won't get resolved as namespace "`).concat(j0,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),xv.forEach(function(oy){if(!M0.isValidLookup(Mu)){E0=oy;var fy,Fy=[v1];if(M0.i18nFormat&&M0.i18nFormat.addLookupKeys)M0.i18nFormat.addLookupKeys(Fy,v1,oy,hy,B0);else{var qv;ov&&(qv=M0.pluralResolver.getSuffix(oy,B0.count,B0));var Qv="".concat(M0.options.pluralSeparator,"zero");if(ov&&(Fy.push(v1+qv),bv&&Fy.push(v1+Qv)),gv){var T0="".concat(v1).concat(M0.options.contextSeparator).concat(B0.context);Fy.push(T0),ov&&(Fy.push(T0+qv),bv&&Fy.push(T0+Qv))}}for(;fy=Fy.pop();)M0.isValidLookup(Mu)||(l0=fy,Mu=M0.getResource(oy,hy,fy,B0))}}))})}}),{res:Mu,usedKey:xu,exactUsedKey:l0,usedLng:E0,usedNS:j0}}},{key:"isValidLookup",value:function(mu){return!(mu===void 0||!this.options.returnNull&&mu===null||!this.options.returnEmptyString&&mu==="")}},{key:"getResource",value:function(mu,Mu,xu){var l0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(mu,Mu,xu,l0):this.resourceStore.getResource(mu,Mu,xu,l0)}}],[{key:"hasDefaultValue",value:function(mu){for(var Mu in mu)if(Object.prototype.hasOwnProperty.call(mu,Mu)&&Mu.substring(0,12)==="defaultValue"&&mu[Mu]!==void 0)return!0;return!1}}]),_c}(eL);function LW(yt){return yt.charAt(0).toUpperCase()+yt.slice(1)}var M5=function(){function yt(ir){OR(this,yt),this.options=ir,this.supportedLngs=this.options.supportedLngs||!1,this.logger=S2.create("languageUtils")}return sP(yt,[{key:"getScriptPartFromCode",value:function(ir){if(!ir||ir.indexOf("-")<0)return null;var _c=ir.split("-");return _c.length===2?null:(_c.pop(),_c[_c.length-1].toLowerCase()==="x"?null:this.formatLanguageCode(_c.join("-")))}},{key:"getLanguagePartFromCode",value:function(ir){if(!ir||ir.indexOf("-")<0)return ir;var _c=ir.split("-");return this.formatLanguageCode(_c[0])}},{key:"formatLanguageCode",value:function(ir){if(typeof ir=="string"&&ir.indexOf("-")>-1){var _c=["hans","hant","latn","cyrl","cans","mong","arab"],mu=ir.split("-");return this.options.lowerCaseLng?mu=mu.map(function(Mu){return Mu.toLowerCase()}):mu.length===2?(mu[0]=mu[0].toLowerCase(),mu[1]=mu[1].toUpperCase(),_c.indexOf(mu[1].toLowerCase())>-1&&(mu[1]=LW(mu[1].toLowerCase()))):mu.length===3&&(mu[0]=mu[0].toLowerCase(),mu[1].length===2&&(mu[1]=mu[1].toUpperCase()),mu[0]!=="sgn"&&mu[2].length===2&&(mu[2]=mu[2].toUpperCase()),_c.indexOf(mu[1].toLowerCase())>-1&&(mu[1]=LW(mu[1].toLowerCase())),_c.indexOf(mu[2].toLowerCase())>-1&&(mu[2]=LW(mu[2].toLowerCase()))),mu.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?ir.toLowerCase():ir}},{key:"isSupportedCode",value:function(ir){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(ir=this.getLanguagePartFromCode(ir)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(ir)>-1}},{key:"getBestMatchFromCodes",value:function(ir){var _c,mu=this;return ir?(ir.forEach(function(Mu){if(!_c){var xu=mu.formatLanguageCode(Mu);mu.options.supportedLngs&&!mu.isSupportedCode(xu)||(_c=xu)}}),!_c&&this.options.supportedLngs&&ir.forEach(function(Mu){if(!_c){var xu=mu.getLanguagePartFromCode(Mu);if(mu.isSupportedCode(xu))return _c=xu;_c=mu.options.supportedLngs.find(function(l0){return l0===xu?l0:l0.indexOf("-")<0&&xu.indexOf("-")<0?void 0:l0.indexOf(xu)===0?l0:void 0})}}),_c||(_c=this.getFallbackCodes(this.options.fallbackLng)[0]),_c):null}},{key:"getFallbackCodes",value:function(ir,_c){if(!ir)return[];if(typeof ir=="function"&&(ir=ir(_c)),typeof ir=="string"&&(ir=[ir]),Object.prototype.toString.apply(ir)==="[object Array]")return ir;if(!_c)return ir.default||[];var mu=ir[_c];return mu||(mu=ir[this.getScriptPartFromCode(_c)]),mu||(mu=ir[this.formatLanguageCode(_c)]),mu||(mu=ir[this.getLanguagePartFromCode(_c)]),mu||(mu=ir.default),mu||[]}},{key:"toResolveHierarchy",value:function(ir,_c){var mu=this,Mu=this.getFallbackCodes(_c||this.options.fallbackLng||[],ir),xu=[],l0=function(E0){E0&&(mu.isSupportedCode(E0)?xu.push(E0):mu.logger.warn("rejecting language code not found in supportedLngs: ".concat(E0)))};return typeof ir=="string"&&ir.indexOf("-")>-1?(this.options.load!=="languageOnly"&&l0(this.formatLanguageCode(ir)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&l0(this.getScriptPartFromCode(ir)),this.options.load!=="currentOnly"&&l0(this.getLanguagePartFromCode(ir))):typeof ir=="string"&&l0(this.formatLanguageCode(ir)),Mu.forEach(function(E0){xu.indexOf(E0)<0&&l0(mu.formatLanguageCode(E0))}),xu}}]),yt}(),Sge=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Nde={1:function(yt){return+(yt>1)},2:function(yt){return+(yt!=1)},3:function(yt){return 0},4:function(yt){return yt%10==1&&yt%100!=11?0:yt%10>=2&&yt%10<=4&&(yt%100<10||yt%100>=20)?1:2},5:function(yt){return yt==0?0:yt==1?1:yt==2?2:yt%100>=3&&yt%100<=10?3:yt%100>=11?4:5},6:function(yt){return yt==1?0:yt>=2&&yt<=4?1:2},7:function(yt){return yt==1?0:yt%10>=2&&yt%10<=4&&(yt%100<10||yt%100>=20)?1:2},8:function(yt){return yt==1?0:yt==2?1:yt!=8&&yt!=11?2:3},9:function(yt){return+(yt>=2)},10:function(yt){return yt==1?0:yt==2?1:yt<7?2:yt<11?3:4},11:function(yt){return yt==1||yt==11?0:yt==2||yt==12?1:yt>2&&yt<20?2:3},12:function(yt){return+(yt%10!=1||yt%100==11)},13:function(yt){return+(yt!==0)},14:function(yt){return yt==1?0:yt==2?1:yt==3?2:3},15:function(yt){return yt%10==1&&yt%100!=11?0:yt%10>=2&&(yt%100<10||yt%100>=20)?1:2},16:function(yt){return yt%10==1&&yt%100!=11?0:yt!==0?1:2},17:function(yt){return yt==1||yt%10==1&&yt%100!=11?0:1},18:function(yt){return yt==0?0:yt==1?1:2},19:function(yt){return yt==1?0:yt==0||yt%100>1&&yt%100<11?1:yt%100>10&&yt%100<20?2:3},20:function(yt){return yt==1?0:yt==0||yt%100>0&&yt%100<20?1:2},21:function(yt){return yt%100==1?1:yt%100==2?2:yt%100==3||yt%100==4?3:0},22:function(yt){return yt==1?0:yt==2?1:(yt<0||yt>10)&&yt%10==0?2:3}},Lde=["v1","v2","v3"],Aoe={zero:0,one:1,two:2,few:3,many:4,other:5},xge=function(){function yt(ir){var _c,mu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};OR(this,yt),this.languageUtils=ir,this.options=mu,this.logger=S2.create("pluralResolver"),this.options.compatibilityJSON&&this.options.compatibilityJSON!=="v4"||typeof Intl<"u"&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=(_c={},Sge.forEach(function(Mu){Mu.lngs.forEach(function(xu){_c[xu]={numbers:Mu.nr,plurals:Nde[Mu.fc]}})}),_c)}return sP(yt,[{key:"addRule",value:function(ir,_c){this.rules[ir]=_c}},{key:"getRule",value:function(ir){var _c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(ir,{type:_c.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[ir]||this.rules[this.languageUtils.getLanguagePartFromCode(ir)]}},{key:"needsPlural",value:function(ir){var _c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},mu=this.getRule(ir,_c);return this.shouldUseIntlApi()?mu&&mu.resolvedOptions().pluralCategories.length>1:mu&&mu.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(ir,_c){var mu=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(ir,mu).map(function(Mu){return"".concat(_c).concat(Mu)})}},{key:"getSuffixes",value:function(ir){var _c=this,mu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Mu=this.getRule(ir,mu);return Mu?this.shouldUseIntlApi()?Mu.resolvedOptions().pluralCategories.sort(function(xu,l0){return Aoe[xu]-Aoe[l0]}).map(function(xu){return"".concat(_c.options.prepend).concat(xu)}):Mu.numbers.map(function(xu){return _c.getSuffix(ir,xu,mu)}):[]}},{key:"getSuffix",value:function(ir,_c){var mu=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Mu=this.getRule(ir,mu);return Mu?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(Mu.select(_c)):this.getSuffixRetroCompatible(Mu,_c):(this.logger.warn("no plural rule found for: ".concat(ir)),"")}},{key:"getSuffixRetroCompatible",value:function(ir,_c){var mu=this,Mu=ir.noAbs?ir.plurals(_c):ir.plurals(Math.abs(_c)),xu=ir.numbers[Mu];this.options.simplifyPluralSuffix&&ir.numbers.length===2&&ir.numbers[0]===1&&(xu===2?xu="plural":xu===1&&(xu=""));var l0=function(){return mu.options.prepend&&xu.toString()?mu.options.prepend+xu.toString():xu.toString()};return this.options.compatibilityJSON==="v1"?xu===1?"":typeof xu=="number"?"_plural_".concat(xu.toString()):l0():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&ir.numbers.length===2&&ir.numbers[0]===1?l0():this.options.prepend&&Mu.toString()?this.options.prepend+Mu.toString():Mu.toString()}},{key:"shouldUseIntlApi",value:function(){return!Lde.includes(this.options.compatibilityJSON)}}]),yt}();function PR(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function JS(yt){for(var ir=1;ir3&&arguments[3]!==void 0?arguments[3]:".",Mu=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],xu=function(l0,E0,j0){var M0=IK(l0,j0);return M0!==void 0?M0:IK(E0,j0)}(yt,ir,_c);return!xu&&Mu&&typeof _c=="string"&&(xu=eD(yt,_c,mu))===void 0&&(xu=eD(ir,_c,mu)),xu}var Bde=function(){function yt(){var ir=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};OR(this,yt),this.logger=S2.create("interpolator"),this.options=ir,this.format=ir.interpolation&&ir.interpolation.format||function(_c){return _c},this.init(ir)}return sP(yt,[{key:"init",value:function(){var ir=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ir.interpolation||(ir.interpolation={escapeValue:!0});var _c=ir.interpolation;this.escape=_c.escape!==void 0?_c.escape:Ode,this.escapeValue=_c.escapeValue===void 0||_c.escapeValue,this.useRawValueToEscape=_c.useRawValueToEscape!==void 0&&_c.useRawValueToEscape,this.prefix=_c.prefix?rL(_c.prefix):_c.prefixEscaped||"{{",this.suffix=_c.suffix?rL(_c.suffix):_c.suffixEscaped||"}}",this.formatSeparator=_c.formatSeparator?_c.formatSeparator:_c.formatSeparator||",",this.unescapePrefix=_c.unescapeSuffix?"":_c.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":_c.unescapeSuffix||"",this.nestingPrefix=_c.nestingPrefix?rL(_c.nestingPrefix):_c.nestingPrefixEscaped||rL("$t("),this.nestingSuffix=_c.nestingSuffix?rL(_c.nestingSuffix):_c.nestingSuffixEscaped||rL(")"),this.nestingOptionsSeparator=_c.nestingOptionsSeparator?_c.nestingOptionsSeparator:_c.nestingOptionsSeparator||",",this.maxReplaces=_c.maxReplaces?_c.maxReplaces:1e3,this.alwaysFormat=_c.alwaysFormat!==void 0&&_c.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var ir="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(ir,"g");var _c="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(_c,"g");var mu="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(mu,"g")}},{key:"interpolate",value:function(ir,_c,mu,Mu){var xu,l0,E0,j0=this,M0=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function B0(F1){return F1.replace(/\$/g,"$$$$")}var q0=function(F1){if(F1.indexOf(j0.formatSeparator)<0){var ov=_oe(_c,M0,F1,j0.options.keySeparator,j0.options.ignoreJSONStructure);return j0.alwaysFormat?j0.format(ov,void 0,mu,JS(JS(JS({},Mu),_c),{},{interpolationkey:F1})):ov}var bv=F1.split(j0.formatSeparator),gv=bv.shift().trim(),xv=bv.join(j0.formatSeparator).trim();return j0.format(_oe(_c,M0,gv,j0.options.keySeparator,j0.options.ignoreJSONStructure),xv,mu,JS(JS(JS({},Mu),_c),{},{interpolationkey:gv}))};this.resetRegExp();var y1=Mu&&Mu.missingInterpolationHandler||this.options.missingInterpolationHandler,v1=Mu&&Mu.interpolation&&Mu.interpolation.skipOnVariables!==void 0?Mu.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(F1){return B0(F1)}},{regex:this.regexp,safeValue:function(F1){return j0.escapeValue?B0(j0.escape(F1)):B0(F1)}}].forEach(function(F1){for(E0=0;xu=F1.regex.exec(ir);){var ov=xu[1].trim();if((l0=q0(ov))===void 0)if(typeof y1=="function"){var bv=y1(ir,xu,Mu);l0=typeof bv=="string"?bv:""}else if(Mu&&Object.prototype.hasOwnProperty.call(Mu,ov))l0="";else{if(v1){l0=xu[0];continue}j0.logger.warn("missed to pass in variable ".concat(ov," for interpolating ").concat(ir)),l0=""}else typeof l0=="string"||j0.useRawValueToEscape||(l0=Mde(l0));var gv=F1.safeValue(l0);if(ir=ir.replace(xu[0],gv),v1?(F1.regex.lastIndex+=l0.length,F1.regex.lastIndex-=xu[0].length):F1.regex.lastIndex=0,++E0>=j0.maxReplaces)break}}),ir}},{key:"nest",value:function(ir,_c){var mu,Mu,xu,l0=this,E0=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};function j0(y1,v1){var F1=this.nestingOptionsSeparator;if(y1.indexOf(F1)<0)return y1;var ov=y1.split(new RegExp("".concat(F1,"[ ]*{"))),bv="{".concat(ov[1]);y1=ov[0];var gv=(bv=this.interpolate(bv,xu)).match(/'/g),xv=bv.match(/"/g);(gv&&gv.length%2==0&&!xv||xv.length%2!=0)&&(bv=bv.replace(/'/g,'"'));try{xu=JSON.parse(bv),v1&&(xu=JS(JS({},v1),xu))}catch(hy){return this.logger.warn("failed parsing options string in nesting for key ".concat(y1),hy),"".concat(y1).concat(F1).concat(bv)}return delete xu.defaultValue,y1}for(;mu=this.nestingRegexp.exec(ir);){var M0=[];(xu=(xu=JS({},E0)).replace&&typeof xu.replace!="string"?xu.replace:xu).applyPostProcessor=!1,delete xu.defaultValue;var B0=!1;if(mu[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(mu[1])){var q0=mu[1].split(this.formatSeparator).map(function(y1){return y1.trim()});mu[1]=q0.shift(),M0=q0,B0=!0}if((Mu=_c(j0.call(this,mu[1].trim(),xu),xu))&&mu[0]===ir&&typeof Mu!="string")return Mu;typeof Mu!="string"&&(Mu=Mde(Mu)),Mu||(this.logger.warn("missed to resolve ".concat(mu[1]," for nesting ").concat(ir)),Mu=""),B0&&(Mu=M0.reduce(function(y1,v1){return l0.format(y1,v1,E0.lng,JS(JS({},E0),{},{interpolationkey:mu[1].trim()}))},Mu.trim())),ir=ir.replace(mu[0],Mu),this.regexp.lastIndex=0}return ir}}]),yt}();function I5(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function bx(yt){for(var ir=1;ir0&&arguments[0]!==void 0?arguments[0]:{};OR(this,yt),this.logger=S2.create("formatter"),this.options=ir,this.formats={number:tD(function(_c,mu){var Mu=new Intl.NumberFormat(_c,bx({},mu));return function(xu){return Mu.format(xu)}}),currency:tD(function(_c,mu){var Mu=new Intl.NumberFormat(_c,bx(bx({},mu),{},{style:"currency"}));return function(xu){return Mu.format(xu)}}),datetime:tD(function(_c,mu){var Mu=new Intl.DateTimeFormat(_c,bx({},mu));return function(xu){return Mu.format(xu)}}),relativetime:tD(function(_c,mu){var Mu=new Intl.RelativeTimeFormat(_c,bx({},mu));return function(xu){return Mu.format(xu,mu.range||"day")}}),list:tD(function(_c,mu){var Mu=new Intl.ListFormat(_c,bx({},mu));return function(xu){return Mu.format(xu)}})},this.init(ir)}return sP(yt,[{key:"init",value:function(ir){var _c=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=_c.formatSeparator?_c.formatSeparator:_c.formatSeparator||","}},{key:"add",value:function(ir,_c){this.formats[ir.toLowerCase().trim()]=_c}},{key:"addCached",value:function(ir,_c){this.formats[ir.toLowerCase().trim()]=tD(_c)}},{key:"format",value:function(ir,_c,mu){var Mu=this,xu=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},l0=_c.split(this.formatSeparator).reduce(function(E0,j0){var M0=function(ov){var bv=ov.toLowerCase().trim(),gv={};if(ov.indexOf("(")>-1){var xv=ov.split("(");bv=xv[0].toLowerCase().trim();var hy=xv[1].substring(0,xv[1].length-1);bv==="currency"&&hy.indexOf(":")<0?gv.currency||(gv.currency=hy.trim()):bv==="relativetime"&&hy.indexOf(":")<0?gv.range||(gv.range=hy.trim()):hy.split(";").forEach(function(oy){if(oy){var fy=function(Qv){return function(T0){if(Array.isArray(T0))return T0}(Qv)||function(T0){if(typeof Symbol<"u"&&T0[Symbol.iterator]!=null||T0["@@iterator"]!=null)return Array.from(T0)}(Qv)||function(T0,X0){if(T0){if(typeof T0=="string")return T5(T0,X0);var s0=Object.prototype.toString.call(T0).slice(8,-1);return s0==="Object"&&T0.constructor&&(s0=T0.constructor.name),s0==="Map"||s0==="Set"?Array.from(T0):s0==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s0)?T5(T0,X0):void 0}}(Qv)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}(oy.split(":")),Fy=fy[0],qv=fy.slice(1).join(":").trim().replace(/^'+|'+$/g,"");gv[Fy.trim()]||(gv[Fy.trim()]=qv),qv==="false"&&(gv[Fy.trim()]=!1),qv==="true"&&(gv[Fy.trim()]=!0),isNaN(qv)||(gv[Fy.trim()]=parseInt(qv,10))}})}return{formatName:bv,formatOptions:gv}}(j0),B0=M0.formatName,q0=M0.formatOptions;if(Mu.formats[B0]){var y1=E0;try{var v1=xu&&xu.formatParams&&xu.formatParams[xu.interpolationkey]||{},F1=v1.locale||v1.lng||xu.locale||xu.lng||mu;y1=Mu.formats[B0](E0,F1,bx(bx(bx({},q0),xu),v1))}catch(ov){Mu.logger.warn(ov)}return y1}return Mu.logger.warn("there was no format function for ".concat(B0)),E0},ir);return l0}}]),yt}();function OK(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function O5(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var xu,l0=cP(mu);if(Mu){var E0=cP(this).constructor;xu=Reflect.construct(l0,arguments,E0)}else xu=l0.apply(this,arguments);return MK(this,xu)}}(_c);function _c(mu,Mu,xu){var l0,E0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return OR(this,_c),l0=ir.call(this),J6&&eL.call(lP(l0)),l0.backend=mu,l0.store=Mu,l0.services=xu,l0.languageUtils=xu.languageUtils,l0.options=E0,l0.logger=S2.create("backendConnector"),l0.waitingReads=[],l0.maxParallelReads=E0.maxParallelReads||10,l0.readingCalls=0,l0.maxRetries=E0.maxRetries>=0?E0.maxRetries:5,l0.retryTimeout=E0.retryTimeout>=1?E0.retryTimeout:350,l0.state={},l0.queue=[],l0.backend&&l0.backend.init&&l0.backend.init(xu,E0.backend,E0),l0}return sP(_c,[{key:"queueLoad",value:function(mu,Mu,xu,l0){var E0=this,j0={},M0={},B0={},q0={};return mu.forEach(function(y1){var v1=!0;Mu.forEach(function(F1){var ov="".concat(y1,"|").concat(F1);!xu.reload&&E0.store.hasResourceBundle(y1,F1)?E0.state[ov]=2:E0.state[ov]<0||(E0.state[ov]===1?M0[ov]===void 0&&(M0[ov]=!0):(E0.state[ov]=1,v1=!1,M0[ov]===void 0&&(M0[ov]=!0),j0[ov]===void 0&&(j0[ov]=!0),q0[F1]===void 0&&(q0[F1]=!0)))}),v1||(B0[y1]=!0)}),(Object.keys(j0).length||Object.keys(M0).length)&&this.queue.push({pending:M0,pendingCount:Object.keys(M0).length,loaded:{},errors:[],callback:l0}),{toLoad:Object.keys(j0),pending:Object.keys(M0),toLoadLanguages:Object.keys(B0),toLoadNamespaces:Object.keys(q0)}}},{key:"loaded",value:function(mu,Mu,xu){var l0=mu.split("|"),E0=l0[0],j0=l0[1];Mu&&this.emit("failedLoading",E0,j0,Mu),xu&&this.store.addResourceBundle(E0,j0,xu),this.state[mu]=Mu?-1:2;var M0={};this.queue.forEach(function(B0){(function(q0,y1,v1,F1){var ov=bX(q0,y1,Object),bv=ov.obj,gv=ov.k;bv[gv]=bv[gv]||[],bv[gv].push(v1)})(B0.loaded,[E0],j0),function(q0,y1){q0.pending[y1]!==void 0&&(delete q0.pending[y1],q0.pendingCount--)}(B0,mu),Mu&&B0.errors.push(Mu),B0.pendingCount!==0||B0.done||(Object.keys(B0.loaded).forEach(function(q0){M0[q0]||(M0[q0]={});var y1=B0.loaded[q0];y1.length&&y1.forEach(function(v1){M0[q0][v1]===void 0&&(M0[q0][v1]=!0)})}),B0.done=!0,B0.errors.length?B0.callback(B0.errors):B0.callback())}),this.emit("loaded",M0),this.queue=this.queue.filter(function(B0){return!B0.done})}},{key:"read",value:function(mu,Mu,xu){var l0=this,E0=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,j0=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,M0=arguments.length>5?arguments[5]:void 0;if(!mu.length)return M0(null,{});if(this.readingCalls>=this.maxParallelReads)this.waitingReads.push({lng:mu,ns:Mu,fcName:xu,tried:E0,wait:j0,callback:M0});else{this.readingCalls++;var B0=function(v1,F1){if(l0.readingCalls--,l0.waitingReads.length>0){var ov=l0.waitingReads.shift();l0.read(ov.lng,ov.ns,ov.fcName,ov.tried,ov.wait,ov.callback)}v1&&F1&&E02&&arguments[2]!==void 0?arguments[2]:{},E0=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),E0&&E0();typeof mu=="string"&&(mu=this.languageUtils.toResolveHierarchy(mu)),typeof Mu=="string"&&(Mu=[Mu]);var j0=this.queueLoad(mu,Mu,l0,E0);if(!j0.toLoad.length)return j0.pending.length||E0(),null;j0.toLoad.forEach(function(M0){xu.loadOne(M0)})}},{key:"load",value:function(mu,Mu,xu){this.prepareLoading(mu,Mu,{},xu)}},{key:"reload",value:function(mu,Mu,xu){this.prepareLoading(mu,Mu,{reload:!0},xu)}},{key:"loadOne",value:function(mu){var Mu=this,xu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",l0=mu.split("|"),E0=l0[0],j0=l0[1];this.read(E0,j0,"read",void 0,void 0,function(M0,B0){M0&&Mu.logger.warn("".concat(xu,"loading namespace ").concat(j0," for language ").concat(E0," failed"),M0),!M0&&B0&&Mu.logger.log("".concat(xu,"loaded namespace ").concat(j0," for language ").concat(E0),B0),Mu.loaded(mu,M0,B0)})}},{key:"saveMissing",value:function(mu,Mu,xu,l0,E0){var j0=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},M0=arguments.length>6&&arguments[6]!==void 0?arguments[6]:function(){};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(Mu))this.logger.warn('did not save key "'.concat(xu,'" as the namespace "').concat(Mu,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");else if(xu!=null&&xu!==""){if(this.backend&&this.backend.create){var B0=O5(O5({},j0),{},{isUpdate:E0}),q0=this.backend.create.bind(this.backend);if(q0.length<6)try{var y1;(y1=q0.length===5?q0(mu,Mu,xu,l0,B0):q0(mu,Mu,xu,l0))&&typeof y1.then=="function"?y1.then(function(v1){return M0(null,v1)}).catch(M0):M0(null,y1)}catch(v1){M0(v1)}else q0(mu,Mu,xu,l0,M0,B0)}mu&&mu[0]&&this.store.addResource(mu[0],Mu,xu,l0)}}}]),_c}(eL);function Soe(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(yt){var ir={};if(XM(yt[1])==="object"&&(ir=yt[1]),typeof yt[1]=="string"&&(ir.defaultValue=yt[1]),typeof yt[2]=="string"&&(ir.tDescription=yt[2]),XM(yt[2])==="object"||XM(yt[3])==="object"){var _c=yt[3]||yt[2];Object.keys(_c).forEach(function(mu){ir[mu]=_c[mu]})}return ir},interpolation:{escapeValue:!0,format:function(yt,ir,_c,mu){return yt},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function Dde(yt){return typeof yt.ns=="string"&&(yt.ns=[yt.ns]),typeof yt.fallbackLng=="string"&&(yt.fallbackLng=[yt.fallbackLng]),typeof yt.fallbackNS=="string"&&(yt.fallbackNS=[yt.fallbackNS]),yt.supportedLngs&&yt.supportedLngs.indexOf("cimode")<0&&(yt.supportedLngs=yt.supportedLngs.concat(["cimode"])),yt}function xoe(yt,ir){var _c=Object.keys(yt);if(Object.getOwnPropertySymbols){var mu=Object.getOwnPropertySymbols(yt);ir&&(mu=mu.filter(function(Mu){return Object.getOwnPropertyDescriptor(yt,Mu).enumerable})),_c.push.apply(_c,mu)}return _c}function P5(yt){for(var ir=1;ir"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var xu,l0=cP(mu);if(Mu){var E0=cP(this).constructor;xu=Reflect.construct(l0,arguments,E0)}else xu=l0.apply(this,arguments);return MK(this,xu)}}(_c);function _c(){var mu,Mu,xu=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l0=arguments.length>1?arguments[1]:void 0;if(OR(this,_c),mu=ir.call(this),J6&&eL.call(lP(mu)),mu.options=Dde(xu),mu.services={},mu.logger=S2,mu.modules={external:[]},Mu=lP(mu),Object.getOwnPropertyNames(Object.getPrototypeOf(Mu)).forEach(function(E0){typeof Mu[E0]=="function"&&(Mu[E0]=Mu[E0].bind(Mu))}),l0&&!mu.isInitialized&&!xu.isClone){if(!mu.options.initImmediate)return mu.init(xu,l0),MK(mu,lP(mu));setTimeout(function(){mu.init(xu,l0)},0)}return mu}return sP(_c,[{key:"init",value:function(){var mu=this,Mu=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},xu=arguments.length>1?arguments[1]:void 0;typeof Mu=="function"&&(xu=Mu,Mu={}),!Mu.defaultNS&&Mu.defaultNS!==!1&&Mu.ns&&(typeof Mu.ns=="string"?Mu.defaultNS=Mu.ns:Mu.ns.indexOf("translation")<0&&(Mu.defaultNS=Mu.ns[0]));var l0=Soe();function E0(F1){return F1?typeof F1=="function"?new F1:F1:null}if(this.options=P5(P5(P5({},l0),this.options),Dde(Mu)),this.options.compatibilityAPI!=="v1"&&(this.options.interpolation=P5(P5({},l0.interpolation),this.options.interpolation)),Mu.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=Mu.keySeparator),Mu.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=Mu.nsSeparator),!this.options.isClone){var j0;this.modules.logger?S2.init(E0(this.modules.logger),this.options):S2.init(null,this.options),this.modules.formatter?j0=this.modules.formatter:typeof Intl<"u"&&(j0=EX);var M0=new M5(this.options);this.store=new wX(this.options.resources,this.options);var B0=this.services;B0.logger=S2,B0.resourceStore=this.store,B0.languageUtils=M0,B0.pluralResolver=new xge(M0,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!j0||this.options.interpolation.format&&this.options.interpolation.format!==l0.interpolation.format||(B0.formatter=E0(j0),B0.formatter.init(B0,this.options),this.options.interpolation.format=B0.formatter.format.bind(B0.formatter)),B0.interpolator=new Bde(this.options),B0.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},B0.backendConnector=new rD(E0(this.modules.backend),B0.resourceStore,B0,this.options),B0.backendConnector.on("*",function(F1){for(var ov=arguments.length,bv=new Array(ov>1?ov-1:0),gv=1;gv1?ov-1:0),gv=1;gv0&&q0[0]!=="dev"&&(this.options.lng=q0[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(function(F1){mu[F1]=function(){var ov;return(ov=mu.store)[F1].apply(ov,arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(function(F1){mu[F1]=function(){var ov;return(ov=mu.store)[F1].apply(ov,arguments),mu}});var y1=QM(),v1=function(){var F1=function(ov,bv){mu.isInitialized&&!mu.initializedStoreOnce&&mu.logger.warn("init: i18next is already initialized. You should call init just once!"),mu.isInitialized=!0,mu.options.isClone||mu.logger.log("initialized",mu.options),mu.emit("initialized",mu.options),y1.resolve(bv),xu(ov,bv)};if(mu.languages&&mu.options.compatibilityAPI!=="v1"&&!mu.isInitialized)return F1(null,mu.t.bind(mu));mu.changeLanguage(mu.options.lng,F1)};return this.options.resources||!this.options.initImmediate?v1():setTimeout(v1,0),y1}},{key:"loadResources",value:function(mu){var Mu=this,xu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:AX,l0=typeof mu=="string"?mu:this.language;if(typeof mu=="function"&&(xu=mu),!this.options.resources||this.options.partialBundledLanguages){if(l0&&l0.toLowerCase()==="cimode")return xu();var E0=[],j0=function(M0){M0&&Mu.services.languageUtils.toResolveHierarchy(M0).forEach(function(B0){E0.indexOf(B0)<0&&E0.push(B0)})};l0?j0(l0):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function(M0){return j0(M0)}),this.options.preload&&this.options.preload.forEach(function(M0){return j0(M0)}),this.services.backendConnector.load(E0,this.options.ns,function(M0){M0||Mu.resolvedLanguage||!Mu.language||Mu.setResolvedLanguage(Mu.language),xu(M0)})}else xu(null)}},{key:"reloadResources",value:function(mu,Mu,xu){var l0=QM();return mu||(mu=this.languages),Mu||(Mu=this.options.ns),xu||(xu=AX),this.services.backendConnector.reload(mu,Mu,function(E0){l0.resolve(),xu(E0)}),l0}},{key:"use",value:function(mu){if(!mu)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!mu.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return mu.type==="backend"&&(this.modules.backend=mu),(mu.type==="logger"||mu.log&&mu.warn&&mu.error)&&(this.modules.logger=mu),mu.type==="languageDetector"&&(this.modules.languageDetector=mu),mu.type==="i18nFormat"&&(this.modules.i18nFormat=mu),mu.type==="postProcessor"&&Pde.addPostProcessor(mu),mu.type==="formatter"&&(this.modules.formatter=mu),mu.type==="3rdParty"&&this.modules.external.push(mu),this}},{key:"setResolvedLanguage",value:function(mu){if(mu&&this.languages&&!(["cimode","dev"].indexOf(mu)>-1))for(var Mu=0;Mu-1)&&this.store.hasLanguageSomeTranslations(xu)){this.resolvedLanguage=xu;break}}}},{key:"changeLanguage",value:function(mu,Mu){var xu=this;this.isLanguageChangingTo=mu;var l0=QM();this.emit("languageChanging",mu);var E0=function(M0){xu.language=M0,xu.languages=xu.services.languageUtils.toResolveHierarchy(M0),xu.resolvedLanguage=void 0,xu.setResolvedLanguage(M0)},j0=function(M0){mu||M0||!xu.services.languageDetector||(M0=[]);var B0=typeof M0=="string"?M0:xu.services.languageUtils.getBestMatchFromCodes(M0);B0&&(xu.language||E0(B0),xu.translator.language||xu.translator.changeLanguage(B0),xu.services.languageDetector&&xu.services.languageDetector.cacheUserLanguage&&xu.services.languageDetector.cacheUserLanguage(B0)),xu.loadResources(B0,function(q0){(function(y1,v1){v1?(E0(v1),xu.translator.changeLanguage(v1),xu.isLanguageChangingTo=void 0,xu.emit("languageChanged",v1),xu.logger.log("languageChanged",v1)):xu.isLanguageChangingTo=void 0,l0.resolve(function(){return xu.t.apply(xu,arguments)}),Mu&&Mu(y1,function(){return xu.t.apply(xu,arguments)})})(q0,B0)})};return mu||!this.services.languageDetector||this.services.languageDetector.async?!mu&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(j0):this.services.languageDetector.detect(j0):j0(mu):j0(this.services.languageDetector.detect()),l0}},{key:"getFixedT",value:function(mu,Mu,xu){var l0=this,E0=function j0(M0,B0){var q0;if(XM(B0)!=="object"){for(var y1=arguments.length,v1=new Array(y1>2?y1-2:0),F1=2;F11&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var l0=xu.lng||this.resolvedLanguage||this.languages[0],E0=!!this.options&&this.options.fallbackLng,j0=this.languages[this.languages.length-1];if(l0.toLowerCase()==="cimode")return!0;var M0=function(q0,y1){var v1=Mu.services.backendConnector.state["".concat(q0,"|").concat(y1)];return v1===-1||v1===2};if(xu.precheck){var B0=xu.precheck(this,M0);if(B0!==void 0)return B0}return!(!this.hasResourceBundle(l0,mu)&&this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages)&&(!M0(l0,mu)||E0&&!M0(j0,mu)))}},{key:"loadNamespaces",value:function(mu,Mu){var xu=this,l0=QM();return this.options.ns?(typeof mu=="string"&&(mu=[mu]),mu.forEach(function(E0){xu.options.ns.indexOf(E0)<0&&xu.options.ns.push(E0)}),this.loadResources(function(E0){l0.resolve(),Mu&&Mu(E0)}),l0):(Mu&&Mu(),Promise.resolve())}},{key:"loadLanguages",value:function(mu,Mu){var xu=QM();typeof mu=="string"&&(mu=[mu]);var l0=this.options.preload||[],E0=mu.filter(function(j0){return l0.indexOf(j0)<0});return E0.length?(this.options.preload=l0.concat(E0),this.loadResources(function(j0){xu.resolve(),Mu&&Mu(j0)}),xu):(Mu&&Mu(),Promise.resolve())}},{key:"dir",value:function(mu){if(mu||(mu=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!mu)return"rtl";var Mu=this.services&&this.services.languageUtils||new M5(Soe());return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(Mu.getLanguagePartFromCode(mu))>-1||mu.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var mu=this,Mu=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},xu=arguments.length>1&&arguments[1]!==void 0?arguments[1]:AX,l0=P5(P5(P5({},this.options),Mu),{isClone:!0}),E0=new _c(l0);return Mu.debug===void 0&&Mu.prefix===void 0||(E0.logger=E0.logger.clone(Mu)),["store","services","language"].forEach(function(j0){E0[j0]=mu[j0]}),E0.services=P5({},this.services),E0.services.utils={hasLoadedNamespace:E0.hasLoadedNamespace.bind(E0)},E0.translator=new $X(E0.services,E0.options),E0.translator.on("*",function(j0){for(var M0=arguments.length,B0=new Array(M0>1?M0-1:0),q0=1;q00&&arguments[0]!==void 0?arguments[0]:{},arguments.length>1?arguments[1]:void 0)});var n8=_X.createInstance();n8.createInstance=_X.createInstance;var nD=n8.createInstance;n8.dir,n8.init,n8.loadResources,n8.reloadResources,n8.use,n8.changeLanguage,n8.getFixedT,n8.t,n8.exists,n8.setDefaultNamespace,n8.hasLoadedNamespace,n8.loadNamespaces,n8.loadLanguages;var AU,_U="0.20.4";o.PROVIDER_UPDATE_TYPE=void 0,(AU=o.PROVIDER_UPDATE_TYPE||(o.PROVIDER_UPDATE_TYPE={})).TERMINATE="terminate",AU.EXTENSION="extension",AU.INITIALIZED="initialized";const koe=typeof window<"u"&&window.localStorage;function Coe(yt){var ir,_c;return s$(this,void 0,void 0,function*(){R2("[MetaMaskSDK: connectWithExtensionProvider()] ",yt),yt.sdkProvider=yt.activeProvider,yt.activeProvider=window.extension,window.ethereum=window.extension;try{const mu=yield(ir=window.extension)===null||ir===void 0?void 0:ir.request({method:"eth_requestAccounts"});R2(`[MetaMaskSDK: connectWithExtensionProvider()] accounts=${mu}`)}catch(mu){return void console.warn("[MetaMaskSDK: connectWithExtensionProvider()] can't request accounts error",mu)}localStorage.setItem(vX,"extension"),yt.extensionActive=!0,yt.emit(o.EventType.PROVIDER_UPDATE,o.PROVIDER_UPDATE_TYPE.EXTENSION),yt.options.enableAnalytics&&((_c=yt.analytics)===null||_c===void 0||_c.send({event:W6.SDK_USE_EXTENSION}))})}var iD;(function(yt){yt.INPAGE="metamask-inpage",yt.CONTENT_SCRIPT="metamask-contentscript",yt.PROVIDER="metamask-provider"})(iD||(iD={}));const PK="https://metamask.app.link/connect",uP="metamask://connect",Fde={NAME:"MetaMask",RDNS:"io.metamask"},kge=/(?:^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}$)|(?:^0{8}-0{4}-0{4}-0{4}-0{12}$)/u,SX=36e5;class wx{constructor({shouldSetOnWindow:ir,connectionStream:_c,shouldSendMetadata:mu=!1,shouldShimWeb3:Mu}){const xu=new boe({connectionStream:_c,shouldSendMetadata:mu,shouldSetOnWindow:ir,shouldShimWeb3:Mu,autoRequestAccounts:!1}),l0=new Proxy(xu,{deleteProperty:()=>!0});var E0;this.provider=l0,ir&&typeof window<"u"&&(E0=this.provider,window.ethereum=E0,window.dispatchEvent(new Event("ethereum#initialized"))),Mu&&typeof window<"u"&&function(j0,M0=console){let B0=!1,q0=!1;if(!window.web3){const y1="__isMetaMaskShim__";let v1={currentProvider:j0};Object.defineProperty(v1,y1,{value:!0,enumerable:!0,configurable:!1,writable:!1}),v1=new Proxy(v1,{get:(F1,ov,...bv)=>(ov!=="currentProvider"||B0?ov==="currentProvider"||ov===y1||q0||(q0=!0,M0.error("MetaMask no longer injects web3. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3"),j0.request({method:"metamask_logWeb3ShimUsage"}).catch(gv=>{M0.debug("MetaMask: Failed to log web3 shim usage.",gv)})):(B0=!0,M0.warn("You are accessing the MetaMask window.web3.currentProvider shim. This property is deprecated; use window.ethereum instead. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3")),Reflect.get(F1,ov,...bv)),set:(...F1)=>(M0.warn("You are accessing the MetaMask window.web3 shim. This object is deprecated; use window.ethereum instead. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3"),Reflect.set(...F1))}),Object.defineProperty(window,"web3",{value:v1,enumerable:!1,configurable:!0,writable:!0})}}(this.provider),this.provider.on("_initialized",()=>{const j0={chainId:this.provider.getChainId(),isConnected:this.provider.isConnected(),isMetaNask:this.provider.isMetaMask,selectedAddress:this.provider.getSelectedAddress(),networkVersion:this.provider.getNetworkVersion()};R2("[Ethereum: constructor()] provider initialized",j0)})}static init(ir){var _c;return R2("[Ethereum: init()] Initializing Ethereum service"),this.instance=new wx(ir),(_c=this.instance)===null||_c===void 0?void 0:_c.provider}static destroy(){wx.instance=void 0}static getInstance(){var ir;if(!(!((ir=this.instance)===null||ir===void 0)&&ir.provider))throw new Error("Ethereum instance not intiialized - call Ethereum.factory first.");return this.instance}static getProvider(){var ir;if(!(!((ir=this.instance)===null||ir===void 0)&&ir.provider))throw new Error("Ethereum instance not intiialized - call Ethereum.factory first.");return this.instance.provider}}class xX extends AO.Duplex{constructor({name:ir,remote:_c,platformManager:mu}){super({objectMode:!0}),this.state={_name:null,remote:null,platformManager:null},this.state._name=ir,this.state.remote=_c,this.state.platformManager=mu,this._onMessage=this._onMessage.bind(this),this.state.remote.on(o.EventType.MESSAGE,this._onMessage)}_write(ir,_c,mu){return s$(this,void 0,void 0,function*(){return function(Mu,xu,l0,E0){var j0,M0,B0,q0,y1,v1,F1,ov,bv,gv,xv,hy,oy,fy;return s$(this,void 0,void 0,function*(){const Fy=(j0=Mu.state.remote)===null||j0===void 0?void 0:j0.isReady(),qv=(M0=Mu.state.remote)===null||M0===void 0?void 0:M0.isConnected(),Qv=(B0=Mu.state.remote)===null||B0===void 0?void 0:B0.isPaused(),T0=wx.getProvider(),X0=(q0=Mu.state.remote)===null||q0===void 0?void 0:q0.getChannelId(),s0=(y1=Mu.state.remote)===null||y1===void 0?void 0:y1.isAuthorized(),{method:g0,data:d0}=(c0=>{var a0;let S0;return F0.isBuffer(c0)?(S0=c0.toJSON(),S0._isBuffer=!0):S0=c0,{method:(a0=S0==null?void 0:S0.data)===null||a0===void 0?void 0:a0.method,data:S0}})(xu);if(R2(`[RCPMS: write()] method='${g0}' isRemoteReady=${Fy} channelId=${X0} isSocketConnected=${qv} isRemotePaused=${Qv} providerConnected=${T0.isConnected()}`,xu),!X0)return g0!==$E.METAMASK_GETPROVIDERSTATE&&R2("[RCPMS: write()] Invalid channel id -- undefined"),E0();R2(`[RCPMS: write()] remote.isPaused()=${(v1=Mu.state.remote)===null||v1===void 0?void 0:v1.isPaused()} authorized=${s0} ready=${Fy} socketConnected=${qv}`,xu);try{if((F1=Mu.state.remote)===null||F1===void 0||F1.sendMessage(d0==null?void 0:d0.data).then(()=>{R2(`[RCPMS: _write()] ${g0} sent successfully`)}).catch(S0=>{R2("[RCPMS: _write()] error sending message",S0)}),!(!((ov=Mu.state.platformManager)===null||ov===void 0)&&ov.isSecure()))return R2(`[RCPMS: _write()] unsecure platform for method ${g0} -- return callback`),E0();if(!qv&&!Fy)return R2(`[RCPMS: _write()] invalid connection status targetMethod=${g0} socketConnected=${qv} ready=${Fy} providerConnected=${T0.isConnected()}`),E0();if(!qv&&Fy)return console.warn("[RCPMS: _write()] invalid socket status -- shouldn't happen"),E0();const c0=(xv=(gv=(bv=Mu.state.remote)===null||bv===void 0?void 0:bv.getKeyInfo())===null||gv===void 0?void 0:gv.ecies.public)!==null&&xv!==void 0?xv:"",a0=encodeURI(`channelId=${X0}&pubkey=${c0}&comm=socket&t=d&v=2`);XB[g0]?(R2(`[RCPMS: _write()] redirect link for '${g0}' socketConnected=${qv} connect?${a0}`),(hy=Mu.state.platformManager)===null||hy===void 0||hy.openDeeplink(`${PK}?${a0}`,`${uP}?${a0}`,"_self")):!((oy=Mu.state.remote)===null||oy===void 0)&&oy.isPaused()?(R2(`[RCPMS: _write()] MM is PAUSED! deeplink with connect! targetMethod=${g0}`),(fy=Mu.state.platformManager)===null||fy===void 0||fy.openDeeplink(`${PK}?redirect=true&${a0}`,`${uP}?redirect=true&${a0}`,"_self")):R2(`[RCPMS: _write()] method ${g0} doesn't need redirect.`)}catch(c0){return R2("[RCPMS: _write()] error sending message",c0),E0(new Error("RemoteCommunicationPostMessageStream - disconnected"))}return E0()})}(this,ir,0,mu)})}_read(){}_onMessage(ir){return function(_c,mu){try{if(R2("[RCPMS: onMessage()] message",mu),!mu||typeof mu!="object"||typeof(mu==null?void 0:mu.data)!="object")return;if(!(mu!=null&&mu.name))return void R2(`[RCPMS: onMessage()] ignore message without name message=${mu}`);if((mu==null?void 0:mu.name)!==iD.PROVIDER)return void R2(`[RCPMS: onMessage()] ignore message with wrong name message=${mu}`);if(F0.isBuffer(mu)){const Mu=F0.from(mu);_c.push(Mu)}else _c.push(mu)}catch(Mu){R2(`[RCPMS: onMessage()] ignore message error err=${Mu}`)}}(this,ir)}start(){}}var kX={exports:{}};(function(yt,ir){var _c=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||c!==void 0&&c,mu=function(){function xu(){this.fetch=!1,this.DOMException=_c.DOMException}return xu.prototype=_c,new xu}();(function(xu){(function(l0){var E0=xu!==void 0&&xu||typeof self<"u"&&self||E0!==void 0&&E0,j0="URLSearchParams"in E0,M0="Symbol"in E0&&"iterator"in Symbol,B0="FileReader"in E0&&"Blob"in E0&&function(){try{return new Blob,!0}catch{return!1}}(),q0="FormData"in E0,y1="ArrayBuffer"in E0;if(y1)var v1=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],F1=ArrayBuffer.isView||function(c0){return c0&&v1.indexOf(Object.prototype.toString.call(c0))>-1};function ov(c0){if(typeof c0!="string"&&(c0=String(c0)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(c0)||c0==="")throw new TypeError('Invalid character in header field name: "'+c0+'"');return c0.toLowerCase()}function bv(c0){return typeof c0!="string"&&(c0=String(c0)),c0}function gv(c0){var a0={next:function(){var S0=c0.shift();return{done:S0===void 0,value:S0}}};return M0&&(a0[Symbol.iterator]=function(){return a0}),a0}function xv(c0){this.map={},c0 instanceof xv?c0.forEach(function(a0,S0){this.append(S0,a0)},this):Array.isArray(c0)?c0.forEach(function(a0){this.append(a0[0],a0[1])},this):c0&&Object.getOwnPropertyNames(c0).forEach(function(a0){this.append(a0,c0[a0])},this)}function hy(c0){if(c0.bodyUsed)return Promise.reject(new TypeError("Already read"));c0.bodyUsed=!0}function oy(c0){return new Promise(function(a0,S0){c0.onload=function(){a0(c0.result)},c0.onerror=function(){S0(c0.error)}})}function fy(c0){var a0=new FileReader,S0=oy(a0);return a0.readAsArrayBuffer(c0),S0}function Fy(c0){if(c0.slice)return c0.slice(0);var a0=new Uint8Array(c0.byteLength);return a0.set(new Uint8Array(c0)),a0.buffer}function qv(){return this.bodyUsed=!1,this._initBody=function(c0){this.bodyUsed=this.bodyUsed,this._bodyInit=c0,c0?typeof c0=="string"?this._bodyText=c0:B0&&Blob.prototype.isPrototypeOf(c0)?this._bodyBlob=c0:q0&&FormData.prototype.isPrototypeOf(c0)?this._bodyFormData=c0:j0&&URLSearchParams.prototype.isPrototypeOf(c0)?this._bodyText=c0.toString():y1&&B0&&function(a0){return a0&&DataView.prototype.isPrototypeOf(a0)}(c0)?(this._bodyArrayBuffer=Fy(c0.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):y1&&(ArrayBuffer.prototype.isPrototypeOf(c0)||F1(c0))?this._bodyArrayBuffer=Fy(c0):this._bodyText=c0=Object.prototype.toString.call(c0):this._bodyText="",this.headers.get("content-type")||(typeof c0=="string"?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):j0&&URLSearchParams.prototype.isPrototypeOf(c0)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},B0&&(this.blob=function(){var c0=hy(this);if(c0)return c0;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?hy(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(fy)}),this.text=function(){var c0,a0,S0,z0=hy(this);if(z0)return z0;if(this._bodyBlob)return c0=this._bodyBlob,S0=oy(a0=new FileReader),a0.readAsText(c0),S0;if(this._bodyArrayBuffer)return Promise.resolve(function(Q0){for(var p1=new Uint8Array(Q0),T1=new Array(p1.length),U1=0;U1-1?p1:Q0}(a0.method||this.method||"GET"),this.mode=a0.mode||this.mode||null,this.signal=a0.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&S0)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(S0),!(this.method!=="GET"&&this.method!=="HEAD"||a0.cache!=="no-store"&&a0.cache!=="no-cache")){var z0=/([?&])_=[^&]*/;z0.test(this.url)?this.url=this.url.replace(z0,"$1_="+new Date().getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+new Date().getTime()}}function X0(c0){var a0=new FormData;return c0.trim().split("&").forEach(function(S0){if(S0){var z0=S0.split("="),Q0=z0.shift().replace(/\+/g," "),p1=z0.join("=").replace(/\+/g," ");a0.append(decodeURIComponent(Q0),decodeURIComponent(p1))}}),a0}function s0(c0,a0){if(!(this instanceof s0))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');a0||(a0={}),this.type="default",this.status=a0.status===void 0?200:a0.status,this.ok=this.status>=200&&this.status<300,this.statusText=a0.statusText===void 0?"":""+a0.statusText,this.headers=new xv(a0.headers),this.url=a0.url||"",this._initBody(c0)}T0.prototype.clone=function(){return new T0(this,{body:this._bodyInit})},qv.call(T0.prototype),qv.call(s0.prototype),s0.prototype.clone=function(){return new s0(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new xv(this.headers),url:this.url})},s0.error=function(){var c0=new s0(null,{status:0,statusText:""});return c0.type="error",c0};var g0=[301,302,303,307,308];s0.redirect=function(c0,a0){if(g0.indexOf(a0)===-1)throw new RangeError("Invalid status code");return new s0(null,{status:a0,headers:{location:c0}})},l0.DOMException=E0.DOMException;try{new l0.DOMException}catch{l0.DOMException=function(a0,S0){this.message=a0,this.name=S0;var z0=Error(a0);this.stack=z0.stack},l0.DOMException.prototype=Object.create(Error.prototype),l0.DOMException.prototype.constructor=l0.DOMException}function d0(c0,a0){return new Promise(function(S0,z0){var Q0=new T0(c0,a0);if(Q0.signal&&Q0.signal.aborted)return z0(new l0.DOMException("Aborted","AbortError"));var p1=new XMLHttpRequest;function T1(){p1.abort()}p1.onload=function(){var U1,S1,n1={status:p1.status,statusText:p1.statusText,headers:(U1=p1.getAllResponseHeaders()||"",S1=new xv,U1.replace(/\r?\n[\t ]+/g," ").split("\r").map(function(J1){return J1.indexOf(` +`)===0?J1.substr(1,J1.length):J1}).forEach(function(J1){var wv=J1.split(":"),Sv=wv.shift().trim();if(Sv){var Hv=wv.join(":").trim();S1.append(Sv,Hv)}}),S1)};n1.url="responseURL"in p1?p1.responseURL:n1.headers.get("X-Request-URL");var V1="response"in p1?p1.response:p1.responseText;setTimeout(function(){S0(new s0(V1,n1))},0)},p1.onerror=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.ontimeout=function(){setTimeout(function(){z0(new TypeError("Network request failed"))},0)},p1.onabort=function(){setTimeout(function(){z0(new l0.DOMException("Aborted","AbortError"))},0)},p1.open(Q0.method,function(U1){try{return U1===""&&E0.location.href?E0.location.href:U1}catch{return U1}}(Q0.url),!0),Q0.credentials==="include"?p1.withCredentials=!0:Q0.credentials==="omit"&&(p1.withCredentials=!1),"responseType"in p1&&(B0?p1.responseType="blob":y1&&Q0.headers.get("Content-Type")&&Q0.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(p1.responseType="arraybuffer")),!a0||typeof a0.headers!="object"||a0.headers instanceof xv?Q0.headers.forEach(function(U1,S1){p1.setRequestHeader(S1,U1)}):Object.getOwnPropertyNames(a0.headers).forEach(function(U1){p1.setRequestHeader(U1,bv(a0.headers[U1]))}),Q0.signal&&(Q0.signal.addEventListener("abort",T1),p1.onreadystatechange=function(){p1.readyState===4&&Q0.signal.removeEventListener("abort",T1)}),p1.send(Q0._bodyInit===void 0?null:Q0._bodyInit)})}d0.polyfill=!0,E0.fetch||(E0.fetch=d0,E0.Headers=xv,E0.Request=T0,E0.Response=s0),l0.Headers=xv,l0.Request=T0,l0.Response=s0,l0.fetch=d0})({})})(mu),mu.fetch.ponyfill=!0,delete mu.fetch.polyfill;var Mu=_c.fetch?_c:mu;(ir=Mu.fetch).default=Mu.fetch,ir.fetch=Mu.fetch,ir.Headers=Mu.Headers,ir.Request=Mu.Request,ir.Response=Mu.Response,yt.exports=ir})(kX,kX.exports);var CX=d(kX.exports);let Ude=1;const zde=yt=>new Promise(ir=>{setTimeout(()=>{ir(!0)},yt)}),Hde=({checkInstallationOnAllCalls:yt=!1,communicationLayerPreference:ir,injectProvider:_c,shouldShimWeb3:mu,platformManager:Mu,installer:xu,sdk:l0,remoteConnection:E0,debug:j0})=>s$(void 0,void 0,void 0,function*(){var M0,B0;const q0=(({name:X0,remoteConnection:s0})=>{if(!s0||!(s0!=null&&s0.getConnector()))throw new Error("Missing remote connection parameter");return new xX({name:X0,remote:s0==null?void 0:s0.getConnector(),platformManager:s0==null?void 0:s0.getPlatformManager()})})({name:iD.INPAGE,target:iD.CONTENT_SCRIPT,platformManager:Mu,communicationLayerPreference:ir,remoteConnection:E0}),y1=Mu.getPlatformType(),v1=l0.options.dappMetadata,F1=`Sdk/Javascript SdkVersion/${_U} Platform/${y1} dApp/${(M0=v1.url)!==null&&M0!==void 0?M0:v1.name} dAppTitle/${v1.name}`;let ov=null,bv=null;const gv=(B0=l0.options.storage)===null||B0===void 0?void 0:B0.storageManager;if(gv){try{const X0=yield gv.getCachedAccounts();X0.length>0&&(ov=X0[0])}catch(X0){console.error(`[initializeMobileProvider] failed to get cached addresses: ${X0}`)}try{const X0=yield gv.getCachedChainId();X0&&(bv=X0)}catch(X0){console.error(`[initializeMobileProvider] failed to parse cached chainId: ${X0}`)}}R2(`[initializeMobileProvider] cachedAccountAddress: ${ov}, cachedChainId: ${bv}`);const xv=!(!_c||y1===o.PlatformType.NonBrowser||y1===o.PlatformType.ReactNative),hy=wx.init({shouldSetOnWindow:xv,connectionStream:q0,shouldShimWeb3:mu});let oy=!1;const fy=X0=>{oy=X0},Fy=()=>oy,qv=(X0,s0,g0,d0)=>s$(void 0,void 0,void 0,function*(){var c0,a0,S0,z0,Q0,p1,T1,U1,S1;if(oy){E0==null||E0.showActiveModal();let Av=Fy();for(;Av;)yield zde(1e3),Av=Fy();return R2("[initializeMobileProvider: sendRequest()] initial method completed -- prevent installation and call provider"),g0(...s0)}const n1=Mu.isMetaMaskInstalled(),V1=E0==null?void 0:E0.isConnected(),J1=wx.getProvider();let wv=null,Sv=null;if(wv=(c0=J1.getSelectedAddress())!==null&&c0!==void 0?c0:ov,Sv=J1.getChainId()||bv,wv&&gv&&wv!==ov&&gv.persistAccounts([wv]).catch(Av=>{console.error(`[initializeMobileProvider] failed to persist account: ${Av}`)}),Sv&&(bv=Sv,gv&&gv.persistChainId(Sv).catch(Av=>{console.error(`[initializeMobileProvider] failed to persist chainId: ${Av}`)})),R2("[initializeMobileProvider: sendRequest()]",{selectedAddress:wv,chainId:Sv}),d0&&R2(`[initializeMobileProvider: sendRequest()] method=${X0} ongoing=${oy} selectedAddress=${wv} isInstalled=${n1} checkInstallationOnAllCalls=${yt} socketConnected=${V1}`),wv&&X0.toLowerCase()===$E.ETH_ACCOUNTS.toLowerCase())return[wv];if(Sv&&X0.toLowerCase()===$E.ETH_CHAINID.toLowerCase())return Sv;const Hv=[$E.ETH_REQUESTACCOUNTS,$E.WALLET_REQUESTPERMISSIONS,$E.METAMASK_CONNECTSIGN,$E.METAMASK_CONNECTWITH],ty=!XB[X0],gy=(a0=l0.options.readonlyRPCMap)===null||a0===void 0?void 0:a0[Sv];if(gy&&ty)try{const Av=(S0=s0==null?void 0:s0[0])===null||S0===void 0?void 0:S0.params,Dv=yield(({rpcEndpoint:ry,method:Jv,sdkInfo:Fv,params:iy})=>s$(void 0,void 0,void 0,function*(){const cy=JSON.stringify({jsonrpc:"2.0",method:Jv,params:iy,id:(Ude+=1,Ude)}),Uy={Accept:"application/json","Content-Type":"application/json"};let r2;ry.includes("infura")&&(Uy["Metamask-Sdk-Info"]=Fv);try{r2=yield CX(ry,{method:"POST",headers:Uy,body:cy})}catch(f2){throw f2 instanceof Error?new Error(`Failed to fetch from RPC: ${f2.message}`):new Error(`Failed to fetch from RPC: ${f2}`)}if(!r2.ok)throw new Error(`Server responded with a status of ${r2.status}`);return(yield r2.json()).result}))({rpcEndpoint:gy,sdkInfo:F1,method:X0,params:Av||[]});return d0&&R2(`initializeProvider::ReadOnlyRPCResponse ${Dv}`),Dv}catch(Av){console.warn(`[initializeMobileProvider: sendRequest()] method=${X0} readOnlyRPCRequest failed:`,Av)}if((!n1||n1&&!V1)&&X0!==$E.METAMASK_GETPROVIDERSTATE){const Av=((z0=s0==null?void 0:s0[0])===null||z0===void 0?void 0:z0.params)||[];if(Hv.indexOf(X0)!==-1||yt){fy(!0);try{yield xu.start({wait:!1})}catch(ry){if(fy(!1),o.PROVIDER_UPDATE_TYPE.EXTENSION===ry){if(R2(`[initializeMobileProvider: sendRequest()] extension provider detect: re-create ${X0} on the active provider`),X0.toLowerCase()===$E.METAMASK_CONNECTSIGN.toLowerCase()){const Jv=yield(Q0=l0.getProvider())===null||Q0===void 0?void 0:Q0.request({method:$E.ETH_REQUESTACCOUNTS,params:[]});if(!Jv.length)throw new Error("SDK state invalid -- undefined accounts");return yield(p1=l0.getProvider())===null||p1===void 0?void 0:p1.request({method:$E.PERSONAL_SIGN,params:[Av[0],Jv[0]]})}if(X0.toLowerCase()===$E.METAMASK_CONNECTWITH.toLowerCase()){const[Jv]=Av;return yield(({method:Fv,sdk:iy,params:cy})=>s$(void 0,void 0,void 0,function*(){var Uy,r2,f2,j2;if(!iy.isExtensionActive())throw new Error("SDK state invalid -- extension is not active");R2("[MetaMaskProvider: extensionConnectWithOverwrite()] Overwriting request method",Fv,cy);const mw=yield(Uy=iy.getProvider())===null||Uy===void 0?void 0:Uy.request({method:$E.ETH_REQUESTACCOUNTS,params:[]});if(!mw.length)throw new Error("SDK state invalid -- undefined accounts");if((Fv==null?void 0:Fv.toLowerCase())===$E.PERSONAL_SIGN.toLowerCase()){const p2={method:Fv,params:[cy[0],mw[0]]};return yield(r2=iy.getProvider())===null||r2===void 0?void 0:r2.request(p2)}if((Fv==null?void 0:Fv.toLowerCase())===$E.ETH_SENDTRANSACTION.toLowerCase()){const p2={method:Fv,params:[Object.assign(Object.assign({},cy[0]),{from:mw[0]})]};return yield(f2=iy.getProvider())===null||f2===void 0?void 0:f2.request(p2)}return Ege.includes(Fv.toLowerCase())?(console.warn(`MetaMaskSDK connectWith method=${Fv} -- not handled by the extension -- call separately`),mw):yield(j2=iy.getProvider())===null||j2===void 0?void 0:j2.request({method:Fv,params:cy})}))({method:Jv.method,sdk:l0,params:Jv.params})}return R2(`[initializeMobileProvider: sendRequest()] sending '${X0}' on active provider`,Av),yield(T1=l0.getProvider())===null||T1===void 0?void 0:T1.request({method:X0,params:Av})}throw R2(`[initializeMobileProvider: sendRequest()] failed to start installer: ${ry}`),ry}const Dv=g0(...s0);try{yield new Promise((ry,Jv)=>{E0==null||E0.getConnector().once(o.EventType.AUTHORIZED,()=>{ry(!0)}),l0.once(o.EventType.PROVIDER_UPDATE,Fv=>{R2(`[initializeMobileProvider: sendRequest()] PROVIDER_UPDATE --- remote provider request interupted type=${Fv}`),Fv===o.PROVIDER_UPDATE_TYPE.EXTENSION?Jv(o.EventType.PROVIDER_UPDATE):Jv(new Error("Connection Terminated"))})})}catch(ry){if(fy(!1),ry===o.EventType.PROVIDER_UPDATE)return yield(U1=l0.getProvider())===null||U1===void 0?void 0:U1.request({method:X0,params:Av});throw ry}return fy(!1),Dv}if(Mu.isSecure()&&XB[X0])return g0(...s0);if(l0.isExtensionActive())return R2(`[initializeMobileProvider: sendRequest()] EXTENSION active - redirect request '${X0}' to it`,s0,Av),yield(S1=l0.getProvider())===null||S1===void 0?void 0:S1.request({method:X0,params:Av});throw R2(`[initializeMobileProvider: sendRequest()] method=${X0} --- skip --- not connected/installed`),new Error("MetaMask is not connected/installed, please call eth_requestAccounts to connect first.")}const yv=yield g0(...s0);return R2(`[initializeMobileProvider: sendRequest()] method=${X0} rpcResponse: ${yv}`),yv}),{request:Qv}=hy;hy.request=(...X0)=>s$(void 0,void 0,void 0,function*(){return qv(X0==null?void 0:X0[0].method,X0,Qv,j0)});const{send:T0}=hy;return hy.send=(...X0)=>s$(void 0,void 0,void 0,function*(){return qv(X0==null?void 0:X0[0],X0,T0,j0)}),R2("[initializeMobileProvider: sendRequest()] metamaskStream.start()"),q0.start(),hy});var BW,X6,TX;class Kde{constructor({serverUrl:ir,enabled:_c,originatorInfo:mu}){BW.set(this,LB),X6.set(this,void 0),TX.set(this,void 0),wne(this,BW,ir),wne(this,TX,mu),wne(this,X6,_c==null||_c)}send({event:ir,params:_c}){if(!bne(this,X6))return;const mu={id:"sdk",event:ir,sdkVersion:_U,originationInfo:bne(this,TX),params:_c};R2(`[Analytics: send()] event: ${ir}`,mu),FH(mu,bne(this,BW)).catch(Mu=>{R2(`[Analytics: send()] error: ${Mu}`)})}}BW=new WeakMap,X6=new WeakMap,TX=new WeakMap;const DW=({provider:yt,sdkInstance:ir})=>{if("state"in yt)throw new Error("INVALID EXTENSION PROVIDER");return new Proxy(yt,{get:(_c,mu)=>mu==="request"?function(Mu){var xu,l0,E0;return s$(this,void 0,void 0,function*(){R2("[wrapExtensionProvider()] Overwriting request method",Mu);const{method:j0,params:M0}=Mu,B0=hoe.includes(j0.toLowerCase());if(B0&&((xu=ir.analytics)===null||xu===void 0||xu.send({event:W6.SDK_RPC_REQUEST,params:{method:j0,from:"extension"}})),j0===$E.METAMASK_BATCH&&Array.isArray(M0)){for(const v1 of M0)yield yt==null?void 0:yt.request({method:v1.method,params:v1.params});const y1=yield _c.request(Mu);return B0&&((l0=ir.analytics)===null||l0===void 0||l0.send({event:W6.SDK_RPC_REQUEST_DONE,params:{method:j0,from:"extension"}})),y1}const q0=yield _c.request(Mu);return B0&&((E0=ir.analytics)===null||E0===void 0||E0.send({event:W6.SDK_RPC_REQUEST_DONE,params:{method:j0,from:"extension"}})),q0})}:mu==="getChainId"?function(){return yt.chainId}:mu==="getNetworkVersion"?function(){return yt.networkVersion}:mu==="getSelectedAddress"?function(){return yt.selectedAddress}:mu==="isConnected"?function(){return yt._state.isConnected}:_c[mu]})};var jK;(function(yt){yt.Announce="eip6963:announceProvider",yt.Request="eip6963:requestProvider"})(jK||(jK={}));var Toe={exports:{}};(function(yt,ir){yt.exports=function(_c){var mu={};function Mu(xu){if(mu[xu])return mu[xu].exports;var l0=mu[xu]={i:xu,l:!1,exports:{}};return _c[xu].call(l0.exports,l0,l0.exports,Mu),l0.l=!0,l0.exports}return Mu.m=_c,Mu.c=mu,Mu.d=function(xu,l0,E0){Mu.o(xu,l0)||Object.defineProperty(xu,l0,{enumerable:!0,get:E0})},Mu.r=function(xu){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(xu,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(xu,"__esModule",{value:!0})},Mu.t=function(xu,l0){if(1&l0&&(xu=Mu(xu)),8&l0||4&l0&&typeof xu=="object"&&xu&&xu.__esModule)return xu;var E0=Object.create(null);if(Mu.r(E0),Object.defineProperty(E0,"default",{enumerable:!0,value:xu}),2&l0&&typeof xu!="string")for(var j0 in xu)Mu.d(E0,j0,(function(M0){return xu[M0]}).bind(null,j0));return E0},Mu.n=function(xu){var l0=xu&&xu.__esModule?function(){return xu.default}:function(){return xu};return Mu.d(l0,"a",l0),l0},Mu.o=function(xu,l0){return Object.prototype.hasOwnProperty.call(xu,l0)},Mu.p="",Mu(Mu.s=90)}({17:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var xu=Mu(18),l0=function(){function E0(){}return E0.getFirstMatch=function(j0,M0){var B0=M0.match(j0);return B0&&B0.length>0&&B0[1]||""},E0.getSecondMatch=function(j0,M0){var B0=M0.match(j0);return B0&&B0.length>1&&B0[2]||""},E0.matchAndReturnConst=function(j0,M0,B0){if(j0.test(M0))return B0},E0.getWindowsVersionName=function(j0){switch(j0){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},E0.getMacOSVersionName=function(j0){var M0=j0.split(".").splice(0,2).map(function(B0){return parseInt(B0,10)||0});if(M0.push(0),M0[0]===10)switch(M0[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},E0.getAndroidVersionName=function(j0){var M0=j0.split(".").splice(0,2).map(function(B0){return parseInt(B0,10)||0});if(M0.push(0),!(M0[0]===1&&M0[1]<5))return M0[0]===1&&M0[1]<6?"Cupcake":M0[0]===1&&M0[1]>=6?"Donut":M0[0]===2&&M0[1]<2?"Eclair":M0[0]===2&&M0[1]===2?"Froyo":M0[0]===2&&M0[1]>2?"Gingerbread":M0[0]===3?"Honeycomb":M0[0]===4&&M0[1]<1?"Ice Cream Sandwich":M0[0]===4&&M0[1]<4?"Jelly Bean":M0[0]===4&&M0[1]>=4?"KitKat":M0[0]===5?"Lollipop":M0[0]===6?"Marshmallow":M0[0]===7?"Nougat":M0[0]===8?"Oreo":M0[0]===9?"Pie":void 0},E0.getVersionPrecision=function(j0){return j0.split(".").length},E0.compareVersions=function(j0,M0,B0){B0===void 0&&(B0=!1);var q0=E0.getVersionPrecision(j0),y1=E0.getVersionPrecision(M0),v1=Math.max(q0,y1),F1=0,ov=E0.map([j0,M0],function(bv){var gv=v1-E0.getVersionPrecision(bv),xv=bv+new Array(gv+1).join(".0");return E0.map(xv.split("."),function(hy){return new Array(20-hy.length).join("0")+hy}).reverse()});for(B0&&(F1=v1-Math.min(q0,y1)),v1-=1;v1>=F1;){if(ov[0][v1]>ov[1][v1])return 1;if(ov[0][v1]===ov[1][v1]){if(v1===F1)return 0;v1-=1}else if(ov[0][v1]1?y1-1:0),F1=1;F10){var oy=Object.keys(bv),fy=M0.default.find(oy,function(s0){return ov.isOS(s0)});if(fy){var Fy=this.satisfies(bv[fy]);if(Fy!==void 0)return Fy}var qv=M0.default.find(oy,function(s0){return ov.isPlatform(s0)});if(qv){var Qv=this.satisfies(bv[qv]);if(Qv!==void 0)return Qv}}if(hy>0){var T0=Object.keys(xv),X0=M0.default.find(T0,function(s0){return ov.isBrowser(s0,!0)});if(X0!==void 0)return this.compareVersion(xv[X0])}},v1.isBrowser=function(F1,ov){ov===void 0&&(ov=!1);var bv=this.getBrowserName().toLowerCase(),gv=F1.toLowerCase(),xv=M0.default.getBrowserTypeByAlias(gv);return ov&&xv&&(gv=xv.toLowerCase()),gv===bv},v1.compareVersion=function(F1){var ov=[0],bv=F1,gv=!1,xv=this.getBrowserVersion();if(typeof xv=="string")return F1[0]===">"||F1[0]==="<"?(bv=F1.substr(1),F1[1]==="="?(gv=!0,bv=F1.substr(2)):ov=[],F1[0]===">"?ov.push(1):ov.push(-1)):F1[0]==="="?bv=F1.substr(1):F1[0]==="~"&&(gv=!0,bv=F1.substr(1)),ov.indexOf(M0.default.compareVersions(xv,bv,gv))>-1},v1.isOS=function(F1){return this.getOSName(!0)===String(F1).toLowerCase()},v1.isPlatform=function(F1){return this.getPlatformType(!0)===String(F1).toLowerCase()},v1.isEngine=function(F1){return this.getEngineName(!0)===String(F1).toLowerCase()},v1.is=function(F1,ov){return ov===void 0&&(ov=!1),this.isBrowser(F1,ov)||this.isOS(F1)||this.isPlatform(F1)},v1.some=function(F1){var ov=this;return F1===void 0&&(F1=[]),F1.some(function(bv){return ov.is(bv)})},y1}();mu.default=q0,_c.exports=mu.default},92:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var xu,l0=(xu=Mu(17))&&xu.__esModule?xu:{default:xu},E0=/version\/(\d+(\.?_?\d+)+)/i,j0=[{test:[/googlebot/i],describe:function(M0){var B0={name:"Googlebot"},q0=l0.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/opera/i],describe:function(M0){var B0={name:"Opera"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/opr\/|opios/i],describe:function(M0){var B0={name:"Opera"},q0=l0.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/SamsungBrowser/i],describe:function(M0){var B0={name:"Samsung Internet for Android"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/Whale/i],describe:function(M0){var B0={name:"NAVER Whale Browser"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/MZBrowser/i],describe:function(M0){var B0={name:"MZ Browser"},q0=l0.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/focus/i],describe:function(M0){var B0={name:"Focus"},q0=l0.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/swing/i],describe:function(M0){var B0={name:"Swing"},q0=l0.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/coast/i],describe:function(M0){var B0={name:"Opera Coast"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(M0){var B0={name:"Opera Touch"},q0=l0.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/yabrowser/i],describe:function(M0){var B0={name:"Yandex Browser"},q0=l0.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/ucbrowser/i],describe:function(M0){var B0={name:"UC Browser"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/Maxthon|mxios/i],describe:function(M0){var B0={name:"Maxthon"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/epiphany/i],describe:function(M0){var B0={name:"Epiphany"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/puffin/i],describe:function(M0){var B0={name:"Puffin"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/sleipnir/i],describe:function(M0){var B0={name:"Sleipnir"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/k-meleon/i],describe:function(M0){var B0={name:"K-Meleon"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/micromessenger/i],describe:function(M0){var B0={name:"WeChat"},q0=l0.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/qqbrowser/i],describe:function(M0){var B0={name:/qqbrowserlite/i.test(M0)?"QQ Browser Lite":"QQ Browser"},q0=l0.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/msie|trident/i],describe:function(M0){var B0={name:"Internet Explorer"},q0=l0.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/\sedg\//i],describe:function(M0){var B0={name:"Microsoft Edge"},q0=l0.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/edg([ea]|ios)/i],describe:function(M0){var B0={name:"Microsoft Edge"},q0=l0.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/vivaldi/i],describe:function(M0){var B0={name:"Vivaldi"},q0=l0.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/seamonkey/i],describe:function(M0){var B0={name:"SeaMonkey"},q0=l0.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/sailfish/i],describe:function(M0){var B0={name:"Sailfish"},q0=l0.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/silk/i],describe:function(M0){var B0={name:"Amazon Silk"},q0=l0.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/phantom/i],describe:function(M0){var B0={name:"PhantomJS"},q0=l0.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/slimerjs/i],describe:function(M0){var B0={name:"SlimerJS"},q0=l0.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(M0){var B0={name:"BlackBerry"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/(web|hpw)[o0]s/i],describe:function(M0){var B0={name:"WebOS Browser"},q0=l0.default.getFirstMatch(E0,M0)||l0.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/bada/i],describe:function(M0){var B0={name:"Bada"},q0=l0.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/tizen/i],describe:function(M0){var B0={name:"Tizen"},q0=l0.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/qupzilla/i],describe:function(M0){var B0={name:"QupZilla"},q0=l0.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/firefox|iceweasel|fxios/i],describe:function(M0){var B0={name:"Firefox"},q0=l0.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/electron/i],describe:function(M0){var B0={name:"Electron"},q0=l0.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/MiuiBrowser/i],describe:function(M0){var B0={name:"Miui"},q0=l0.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/chromium/i],describe:function(M0){var B0={name:"Chromium"},q0=l0.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,M0)||l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/chrome|crios|crmo/i],describe:function(M0){var B0={name:"Chrome"},q0=l0.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/GSA/i],describe:function(M0){var B0={name:"Google Search"},q0=l0.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:function(M0){var B0=!M0.test(/like android/i),q0=M0.test(/android/i);return B0&&q0},describe:function(M0){var B0={name:"Android Browser"},q0=l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/playstation 4/i],describe:function(M0){var B0={name:"PlayStation 4"},q0=l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/safari|applewebkit/i],describe:function(M0){var B0={name:"Safari"},q0=l0.default.getFirstMatch(E0,M0);return q0&&(B0.version=q0),B0}},{test:[/.*/i],describe:function(M0){var B0=M0.search("\\(")!==-1?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:l0.default.getFirstMatch(B0,M0),version:l0.default.getSecondMatch(B0,M0)}}}];mu.default=j0,_c.exports=mu.default},93:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var xu,l0=(xu=Mu(17))&&xu.__esModule?xu:{default:xu},E0=Mu(18),j0=[{test:[/Roku\/DVP/],describe:function(M0){var B0=l0.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,M0);return{name:E0.OS_MAP.Roku,version:B0}}},{test:[/windows phone/i],describe:function(M0){var B0=l0.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.WindowsPhone,version:B0}}},{test:[/windows /i],describe:function(M0){var B0=l0.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,M0),q0=l0.default.getWindowsVersionName(B0);return{name:E0.OS_MAP.Windows,version:B0,versionName:q0}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(M0){var B0={name:E0.OS_MAP.iOS},q0=l0.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,M0);return q0&&(B0.version=q0),B0}},{test:[/macintosh/i],describe:function(M0){var B0=l0.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,M0).replace(/[_\s]/g,"."),q0=l0.default.getMacOSVersionName(B0),y1={name:E0.OS_MAP.MacOS,version:B0};return q0&&(y1.versionName=q0),y1}},{test:[/(ipod|iphone|ipad)/i],describe:function(M0){var B0=l0.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,M0).replace(/[_\s]/g,".");return{name:E0.OS_MAP.iOS,version:B0}}},{test:function(M0){var B0=!M0.test(/like android/i),q0=M0.test(/android/i);return B0&&q0},describe:function(M0){var B0=l0.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,M0),q0=l0.default.getAndroidVersionName(B0),y1={name:E0.OS_MAP.Android,version:B0};return q0&&(y1.versionName=q0),y1}},{test:[/(web|hpw)[o0]s/i],describe:function(M0){var B0=l0.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,M0),q0={name:E0.OS_MAP.WebOS};return B0&&B0.length&&(q0.version=B0),q0}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(M0){var B0=l0.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,M0)||l0.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,M0)||l0.default.getFirstMatch(/\bbb(\d+)/i,M0);return{name:E0.OS_MAP.BlackBerry,version:B0}}},{test:[/bada/i],describe:function(M0){var B0=l0.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.Bada,version:B0}}},{test:[/tizen/i],describe:function(M0){var B0=l0.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.Tizen,version:B0}}},{test:[/linux/i],describe:function(){return{name:E0.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:E0.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(M0){var B0=l0.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,M0);return{name:E0.OS_MAP.PlayStation4,version:B0}}}];mu.default=j0,_c.exports=mu.default},94:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var xu,l0=(xu=Mu(17))&&xu.__esModule?xu:{default:xu},E0=Mu(18),j0=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(M0){var B0=l0.default.getFirstMatch(/(can-l01)/i,M0)&&"Nova",q0={type:E0.PLATFORMS_MAP.mobile,vendor:"Huawei"};return B0&&(q0.model=B0),q0}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:E0.PLATFORMS_MAP.tablet}}},{test:function(M0){var B0=M0.test(/ipod|iphone/i),q0=M0.test(/like (ipod|iphone)/i);return B0&&!q0},describe:function(M0){var B0=l0.default.getFirstMatch(/(ipod|iphone)/i,M0);return{type:E0.PLATFORMS_MAP.mobile,vendor:"Apple",model:B0}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:E0.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:E0.PLATFORMS_MAP.mobile}}},{test:function(M0){return M0.getBrowserName(!0)==="blackberry"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(M0){return M0.getBrowserName(!0)==="bada"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile}}},{test:function(M0){return M0.getBrowserName()==="windows phone"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(M0){var B0=Number(String(M0.getOSVersion()).split(".")[0]);return M0.getOSName(!0)==="android"&&B0>=3},describe:function(){return{type:E0.PLATFORMS_MAP.tablet}}},{test:function(M0){return M0.getOSName(!0)==="android"},describe:function(){return{type:E0.PLATFORMS_MAP.mobile}}},{test:function(M0){return M0.getOSName(!0)==="macos"},describe:function(){return{type:E0.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(M0){return M0.getOSName(!0)==="windows"},describe:function(){return{type:E0.PLATFORMS_MAP.desktop}}},{test:function(M0){return M0.getOSName(!0)==="linux"},describe:function(){return{type:E0.PLATFORMS_MAP.desktop}}},{test:function(M0){return M0.getOSName(!0)==="playstation 4"},describe:function(){return{type:E0.PLATFORMS_MAP.tv}}},{test:function(M0){return M0.getOSName(!0)==="roku"},describe:function(){return{type:E0.PLATFORMS_MAP.tv}}}];mu.default=j0,_c.exports=mu.default},95:function(_c,mu,Mu){mu.__esModule=!0,mu.default=void 0;var xu,l0=(xu=Mu(17))&&xu.__esModule?xu:{default:xu},E0=Mu(18),j0=[{test:function(M0){return M0.getBrowserName(!0)==="microsoft edge"},describe:function(M0){if(/\sedg\//i.test(M0))return{name:E0.ENGINE_MAP.Blink};var B0=l0.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,M0);return{name:E0.ENGINE_MAP.EdgeHTML,version:B0}}},{test:[/trident/i],describe:function(M0){var B0={name:E0.ENGINE_MAP.Trident},q0=l0.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:function(M0){return M0.test(/presto/i)},describe:function(M0){var B0={name:E0.ENGINE_MAP.Presto},q0=l0.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:function(M0){var B0=M0.test(/gecko/i),q0=M0.test(/like gecko/i);return B0&&!q0},describe:function(M0){var B0={name:E0.ENGINE_MAP.Gecko},q0=l0.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:E0.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(M0){var B0={name:E0.ENGINE_MAP.WebKit},q0=l0.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,M0);return q0&&(B0.version=q0),B0}}];mu.default=j0,_c.exports=mu.default}})})(Toe);var oD,Vde=d(Toe.exports);(function(yt){yt.Disabled="Disabled",yt.Temporary="Temporary",yt.UntilResponse="UntilResponse"})(oD||(oD={}));const RX=()=>"wakeLock"in navigator,FW=()=>{if(typeof navigator>"u")return!1;const{userAgent:yt}=navigator,ir=/CPU (?:iPhone )?OS (\d+)(?:_\d+)?_?\d+ like Mac OS X/iu.exec(yt);return!!ir&&parseInt(ir[1],10)<10&&!window.MSStream};class Cge{constructor(ir){this.enabled=!1,this._eventsAdded=!1,this.debug=ir!=null&&ir}start(){if(this.enabled=!1,RX()&&!this._eventsAdded){this._eventsAdded=!0,this._wakeLock=void 0;const ir=()=>s$(this,void 0,void 0,function*(){this._wakeLock!==null&&document.visibilityState==="visible"&&(yield this.enable())});document.addEventListener("visibilitychange",ir),document.addEventListener("fullscreenchange",ir)}else FW()?this.noSleepTimer=void 0:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","MetaMask SDK - Listening for responses"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm","data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK"),this._addSourceToVideo(this.noSleepVideo,"mp4","data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"),this.noSleepVideo.addEventListener("loadedmetadata",()=>{R2("[WakeLockManager: start()] video loadedmetadata",this.noSleepVideo),this.noSleepVideo&&(this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo&&this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())}))}))}_addSourceToVideo(ir,_c,mu){const Mu=document.createElement("source");Mu.src=mu,Mu.type=`video/${_c}`,ir.appendChild(Mu)}isEnabled(){return this.enabled}setDebug(ir){R2("[WakeLockManager: setDebug()] activate debug mode"),this.debug=ir}enable(){return s$(this,void 0,void 0,function*(){this.enabled&&this.disable("from_enable");const ir=RX(),_c=FW();if(R2(`[WakeLockManager: enable()] hasWakelock=${ir} isOldIos=${_c}`,this.noSleepVideo),this.start(),RX())try{const mu=yield navigator.wakeLock.request("screen");this._wakeLock=mu,this.enabled=!0}catch(mu){return R2("[WakeLockManager: enable()] failed to enable wake lock",mu),this.enabled=!1,!1}else if(FW())return this.disable("from_enable_old_ios"),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,!0;return!!this.noSleepVideo&&(this.noSleepVideo.play().then(()=>{R2("[WakeLockManager: enable()] video started playing successfully")}).catch(mu=>{console.warn("[WakeLockManager: enable()] video failed to play",mu)}),this.enabled=!0,!0)})}disable(ir){if(this.enabled){if(R2(`[WakeLockManager: disable()] context=${ir}`),RX())this._wakeLock&&(R2("[WakeLockManager: disable()] release wake lock"),this._wakeLock.release()),this._wakeLock=void 0;else if(FW())this.noSleepTimer&&(console.warn(` NoSleep now disabled for older iOS devices. - `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=void 0);else try{if(!this.noSleepVideo)return void R2("[WakeLockManager: disable()] noSleepVideo is undefined");R2("[WakeLockManager: disable()] pause noSleepVideo"),this.noSleepVideo.firstChild&&(this.noSleepVideo.removeChild(this.noSleepVideo.firstChild),this.noSleepVideo.load()),this.noSleepVideo.pause(),this.noSleepVideo.src="",this.noSleepVideo.remove()}catch(_c){console.log(_c)}this.enabled=!1}}}class qde{constructor({useDeepLink:ir,preferredOpenLink:_c,wakeLockStatus:mu=oD.UntilResponse,debug:Mu=!1}){this.state={wakeLock:new Cge,wakeLockStatus:oD.UntilResponse,wakeLockTimer:void 0,wakeLockFeatureActive:!1,platformType:void 0,useDeeplink:!1,preferredOpenLink:void 0,debug:!1},this.state.platformType=this.getPlatformType(),this.state.useDeeplink=ir,this.state.preferredOpenLink=_c,this.state.wakeLockStatus=mu,this.state.debug=Mu,this.state.wakeLock.setDebug(Mu)}enableWakeLock(){return function(ir){const{state:_c}=ir;if(_c.wakeLockStatus===oD.Disabled)return void R2("[PlatfformManager: enableWakeLock()] WakeLock is disabled");_c.wakeLock.enable().catch(Mu=>{console.error("[PlatfformManager: enableWakeLock()] WakeLock is not supported",Mu)});const mu=_c.wakeLockStatus===oD.Temporary?2e3:4e4;_c.wakeLockTimer=setTimeout(()=>{ir.disableWakeLock()},mu),_c.wakeLockFeatureActive||_c.wakeLockStatus!==oD.UntilResponse||(_c.wakeLockFeatureActive=!0,window.addEventListener("focus",()=>{ir.disableWakeLock()}))}(this)}disableWakeLock(){return function(ir){const{state:_c}=ir;_c.wakeLockStatus!==oD.Disabled&&(_c.wakeLockTimer&&clearTimeout(_c.wakeLockTimer),_c.wakeLock.disable("disableWakeLock"))}(this)}openDeeplink(ir,_c,mu){return function(Mu,Su,l0,E0){const{state:j0}=Mu;R2(`[PlatfformManager: openDeeplink()] universalLink --> ${Su}`),R2(`[PlatfformManager: openDeeplink()] deepLink --> ${l0}`),Mu.isBrowser()&&Mu.enableWakeLock();try{if(j0.preferredOpenLink)return void j0.preferredOpenLink(j0.useDeeplink?l0:Su,E0);if(R2(`[PlatfformManager: openDeeplink()] open link now useDeepLink=${j0.useDeeplink} link=${j0.useDeeplink?l0:Su}`),typeof window<"u"){let M0;M0=j0.useDeeplink?window.open(l0,"_blank"):window.open(Su,"_blank"),setTimeout(()=>{var B0;return(B0=M0==null?void 0:M0.close)===null||B0===void 0?void 0:B0.call(M0)},500)}}catch(M0){console.log("[PlatfformManager: openDeeplink()] can't open link",M0)}}(this,ir,_c,mu)}isReactNative(){var ir;return this.isNotBrowser()&&typeof window<"u"&&(window==null?void 0:window.navigator)&&((ir=window.navigator)===null||ir===void 0?void 0:ir.product)==="ReactNative"}isMetaMaskInstalled(){return function(){const ir=wx.getProvider()||(window==null?void 0:window.ethereum);return R2(`[PlatfformManager: isMetaMaskInstalled()] isMetaMask=${ir==null?void 0:ir.isMetaMask} isConnected=${ir==null?void 0:ir.isConnected()}`),(ir==null?void 0:ir.isMetaMask)&&(ir==null?void 0:ir.isConnected())}()}isDesktopWeb(){return this.isBrowser()&&!this.isMobileWeb()}isMobile(){var ir,_c;const mu=Vde.parse(window.navigator.userAgent);return((ir=mu==null?void 0:mu.platform)===null||ir===void 0?void 0:ir.type)==="mobile"||((_c=mu==null?void 0:mu.platform)===null||_c===void 0?void 0:_c.type)==="tablet"}isSecure(){return this.isReactNative()||this.isMobileWeb()}isMetaMaskMobileWebView(){return typeof window<"u"&&!!window.ReactNativeWebView&&!!navigator.userAgent.endsWith("MetaMaskMobile")}isMobileWeb(){return this.state.platformType===o.PlatformType.MobileWeb}isNotBrowser(){var ir;return typeof window>"u"||!(window!=null&&window.navigator)||y!==void 0&&((ir=y==null?void 0:y.navigator)===null||ir===void 0?void 0:ir.product)==="ReactNative"||(navigator==null?void 0:navigator.product)==="ReactNative"}isNodeJS(){return this.isNotBrowser()&&!this.isReactNative()}isBrowser(){return!this.isNotBrowser()}isUseDeepLink(){return this.state.useDeeplink}getPlatformType(){return function(ir){const{state:_c}=ir;return _c.platformType?_c.platformType:ir.isReactNative()?o.PlatformType.ReactNative:ir.isNotBrowser()?o.PlatformType.NonBrowser:ir.isMetaMaskMobileWebView()?o.PlatformType.MetaMaskMobileWebview:ir.isMobile()?o.PlatformType.MobileWeb:o.PlatformType.DesktopWeb}(this)}}/*! ***************************************************************************** + `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=void 0);else try{if(!this.noSleepVideo)return void R2("[WakeLockManager: disable()] noSleepVideo is undefined");R2("[WakeLockManager: disable()] pause noSleepVideo"),this.noSleepVideo.firstChild&&(this.noSleepVideo.removeChild(this.noSleepVideo.firstChild),this.noSleepVideo.load()),this.noSleepVideo.pause(),this.noSleepVideo.src="",this.noSleepVideo.remove()}catch(_c){console.log(_c)}this.enabled=!1}}}class qde{constructor({useDeepLink:ir,preferredOpenLink:_c,wakeLockStatus:mu=oD.UntilResponse,debug:Mu=!1}){this.state={wakeLock:new Cge,wakeLockStatus:oD.UntilResponse,wakeLockTimer:void 0,wakeLockFeatureActive:!1,platformType:void 0,useDeeplink:!1,preferredOpenLink:void 0,debug:!1},this.state.platformType=this.getPlatformType(),this.state.useDeeplink=ir,this.state.preferredOpenLink=_c,this.state.wakeLockStatus=mu,this.state.debug=Mu,this.state.wakeLock.setDebug(Mu)}enableWakeLock(){return function(ir){const{state:_c}=ir;if(_c.wakeLockStatus===oD.Disabled)return void R2("[PlatfformManager: enableWakeLock()] WakeLock is disabled");_c.wakeLock.enable().catch(Mu=>{console.error("[PlatfformManager: enableWakeLock()] WakeLock is not supported",Mu)});const mu=_c.wakeLockStatus===oD.Temporary?2e3:4e4;_c.wakeLockTimer=setTimeout(()=>{ir.disableWakeLock()},mu),_c.wakeLockFeatureActive||_c.wakeLockStatus!==oD.UntilResponse||(_c.wakeLockFeatureActive=!0,window.addEventListener("focus",()=>{ir.disableWakeLock()}))}(this)}disableWakeLock(){return function(ir){const{state:_c}=ir;_c.wakeLockStatus!==oD.Disabled&&(_c.wakeLockTimer&&clearTimeout(_c.wakeLockTimer),_c.wakeLock.disable("disableWakeLock"))}(this)}openDeeplink(ir,_c,mu){return function(Mu,xu,l0,E0){const{state:j0}=Mu;R2(`[PlatfformManager: openDeeplink()] universalLink --> ${xu}`),R2(`[PlatfformManager: openDeeplink()] deepLink --> ${l0}`),Mu.isBrowser()&&Mu.enableWakeLock();try{if(j0.preferredOpenLink)return void j0.preferredOpenLink(j0.useDeeplink?l0:xu,E0);if(R2(`[PlatfformManager: openDeeplink()] open link now useDeepLink=${j0.useDeeplink} link=${j0.useDeeplink?l0:xu}`),typeof window<"u"){let M0;M0=j0.useDeeplink?window.open(l0,"_blank"):window.open(xu,"_blank"),setTimeout(()=>{var B0;return(B0=M0==null?void 0:M0.close)===null||B0===void 0?void 0:B0.call(M0)},500)}}catch(M0){console.log("[PlatfformManager: openDeeplink()] can't open link",M0)}}(this,ir,_c,mu)}isReactNative(){var ir;return this.isNotBrowser()&&typeof window<"u"&&(window==null?void 0:window.navigator)&&((ir=window.navigator)===null||ir===void 0?void 0:ir.product)==="ReactNative"}isMetaMaskInstalled(){return function(){const ir=wx.getProvider()||(window==null?void 0:window.ethereum);return R2(`[PlatfformManager: isMetaMaskInstalled()] isMetaMask=${ir==null?void 0:ir.isMetaMask} isConnected=${ir==null?void 0:ir.isConnected()}`),(ir==null?void 0:ir.isMetaMask)&&(ir==null?void 0:ir.isConnected())}()}isDesktopWeb(){return this.isBrowser()&&!this.isMobileWeb()}isMobile(){var ir,_c;const mu=Vde.parse(window.navigator.userAgent);return((ir=mu==null?void 0:mu.platform)===null||ir===void 0?void 0:ir.type)==="mobile"||((_c=mu==null?void 0:mu.platform)===null||_c===void 0?void 0:_c.type)==="tablet"}isSecure(){return this.isReactNative()||this.isMobileWeb()}isMetaMaskMobileWebView(){return typeof window<"u"&&!!window.ReactNativeWebView&&!!navigator.userAgent.endsWith("MetaMaskMobile")}isMobileWeb(){return this.state.platformType===o.PlatformType.MobileWeb}isNotBrowser(){var ir;return typeof window>"u"||!(window!=null&&window.navigator)||y!==void 0&&((ir=y==null?void 0:y.navigator)===null||ir===void 0?void 0:ir.product)==="ReactNative"||(navigator==null?void 0:navigator.product)==="ReactNative"}isNodeJS(){return this.isNotBrowser()&&!this.isReactNative()}isBrowser(){return!this.isNotBrowser()}isUseDeepLink(){return this.state.useDeeplink}getPlatformType(){return function(ir){const{state:_c}=ir;return _c.platformType?_c.platformType:ir.isReactNative()?o.PlatformType.ReactNative:ir.isNotBrowser()?o.PlatformType.NonBrowser:ir.isMetaMaskMobileWebView()?o.PlatformType.MetaMaskMobileWebview:ir.isMobile()?o.PlatformType.MobileWeb:o.PlatformType.DesktopWeb}(this)}}/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -1745,7 +1745,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var tI="INSTALLED",Roe="NOT_INSTALLED",Wde="REGISTERED",Moe="REGISTERING",fP="RELOADING",SU={CHROME:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn",FIREFOX:"https://addons.mozilla.org/firefox/addon/ether-metamask/",DEFAULT:"https://metamask.io"},MX="REGISTRATION_IN_PROGRESS",Ioe="FORWARDER_ID",Gde=function(){function yt(ir){var _c=ir===void 0?{}:ir,mu=_c.forwarderOrigin,Mu=mu===void 0?"https://fwd.metamask.io":mu,Su=_c.forwarderMode,l0=Su===void 0?yt.FORWARDER_MODE.INJECT:Su;this.forwarderOrigin=Mu,this.forwarderMode=l0,this.state=yt.isMetaMaskInstalled()?tI:Roe;var E0=yt._detectBrowser();this.downloadUrl=E0?SU[E0]:SU.DEFAULT,this._onMessage=this._onMessage.bind(this),this._onMessageFromForwarder=this._onMessageFromForwarder.bind(this),this._openForwarder=this._openForwarder.bind(this),this._openDownloadPage=this._openDownloadPage.bind(this),this.startOnboarding=this.startOnboarding.bind(this),this.stopOnboarding=this.stopOnboarding.bind(this),window.addEventListener("message",this._onMessage),l0===yt.FORWARDER_MODE.INJECT&&sessionStorage.getItem(MX)==="true"&&yt._injectForwarder(this.forwarderOrigin)}return yt.prototype._onMessage=function(ir){if(ir.origin===this.forwarderOrigin)return ir.data.type==="metamask:reload"?this._onMessageFromForwarder(ir):void console.debug("Unknown message from '"+ir.origin+"' with data "+JSON.stringify(ir.data))},yt.prototype._onMessageUnknownStateError=function(ir){throw new Error("Unknown state: '"+ir+"'")},yt.prototype._onMessageFromForwarder=function(ir){return function(_c,mu,Mu,Su){return new(Mu||(Mu=Promise))(function(l0,E0){function j0(V0){try{B0(Su.next(V0))}catch(y1){E0(y1)}}function M0(V0){try{B0(Su.throw(V0))}catch(y1){E0(y1)}}function B0(V0){V0.done?l0(V0.value):function(y1){return y1 instanceof Mu?y1:new Mu(function(v1){v1(y1)})}(V0.value).then(j0,M0)}B0((Su=Su.apply(_c,[])).next())})}(this,void 0,void 0,function(){return function(_c,mu){var Mu,Su,l0,E0,j0={label:0,sent:function(){if(1&l0[0])throw l0[1];return l0[1]},trys:[],ops:[]};return E0={next:M0(0),throw:M0(1),return:M0(2)},typeof Symbol=="function"&&(E0[Symbol.iterator]=function(){return this}),E0;function M0(B0){return function(V0){return function(y1){if(Mu)throw new TypeError("Generator is already executing.");for(;j0;)try{if(Mu=1,Su&&(l0=2&y1[0]?Su.return:y1[0]?Su.throw||((l0=Su.return)&&l0.call(Su),0):Su.next)&&!(l0=l0.call(Su,y1[1])).done)return l0;switch(Su=0,l0&&(y1=[2&y1[0],l0.value]),y1[0]){case 0:case 1:l0=y1;break;case 4:return j0.label++,{value:y1[1],done:!1};case 5:j0.label++,Su=y1[1],y1=[0];continue;case 7:y1=j0.ops.pop(),j0.trys.pop();continue;default:if(!((l0=(l0=j0.trys).length>0&&l0[l0.length-1])||y1[0]!==6&&y1[0]!==2)){j0=0;continue}if(y1[0]===3&&(!l0||y1[1]>l0[0]&&y1[1]1?iv-1:0),Bv=1;Bv1?iv-1:0),Bv=1;Bv1){for(var Ry=Array(Py),my=0;my1){for(var n2=Array(my),u2=0;u20&&l0[l0.length-1])||y1[0]!==6&&y1[0]!==2)){j0=0;continue}if(y1[0]===3&&(!l0||y1[1]>l0[0]&&y1[1]1?iv-1:0),Bv=1;Bv1?iv-1:0),Bv=1;Bv1){for(var Ry=Array(Py),my=0;my1){for(var n2=Array(my),u2=0;u2 import('./MyComponent')) @@ -1753,7 +1753,7 @@ Your code should look like: Did you accidentally put curly braces around the import?`,Bv),"default"in Bv||S0(`lazy: Expected the result of a dynamic import() call. Instead received: %s Your code should look like: - const MyComponent = lazy(() => import('./MyComponent'))`,Bv),Bv.default}throw I1._result}function Ws(I1){return typeof I1=="string"||typeof I1=="function"||!!(I1===Mu||I1===l0||d0||I1===Su||I1===B0||I1===V0||g0||I1===F1||T0||X0||s0)||typeof I1=="object"&&I1!==null&&(I1.$$typeof===v1||I1.$$typeof===y1||I1.$$typeof===E0||I1.$$typeof===j0||I1.$$typeof===M0||I1.$$typeof===vt||I1.getModuleId!==void 0)}function pu(){var I1=xv.current;return I1===null&&S0(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: + const MyComponent = lazy(() => import('./MyComponent'))`,Bv),Bv.default}throw I1._result}function Ys(I1){return typeof I1=="string"||typeof I1=="function"||!!(I1===Mu||I1===l0||d0||I1===xu||I1===B0||I1===q0||g0||I1===F1||T0||X0||s0)||typeof I1=="object"&&I1!==null&&(I1.$$typeof===v1||I1.$$typeof===y1||I1.$$typeof===E0||I1.$$typeof===j0||I1.$$typeof===M0||I1.$$typeof===vt||I1.getModuleId!==void 0)}function pu(){var I1=xv.current;return I1===null&&S0(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: 1. You might have mismatching versions of React and the renderer (such as React DOM) 2. You might be breaking the Rules of Hooks 3. You might have more than one copy of React in the same app @@ -1761,13 +1761,13 @@ See https://reactjs.org/link/invalid-hook-call for tips about how to debug and f `+a1+I1}var W1,_g=!1,uv=typeof WeakMap=="function"?WeakMap:Map;function Tv(I1,iv){if(!I1||_g)return"";var hv,Bv=W1.get(I1);if(Bv!==void 0)return Bv;_g=!0;var pv,mv=Error.prepareStackTrace;Error.prepareStackTrace=void 0,pv=x1.current,x1.current=null,function(){if(N0===0){Ru=console.log,wu=console.info,t0=console.warn,m0=console.error,k0=console.group,_0=console.groupCollapsed,R0=console.groupEnd;var Ky={configurable:!0,enumerable:!0,value:l1,writable:!0};Object.defineProperties(console,{info:Ky,log:Ky,warn:Ky,error:Ky,group:Ky,groupCollapsed:Ky,groupEnd:Ky})}N0++}();try{if(iv){var _v=function(){throw Error()};if(Object.defineProperty(_v.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(_v,[])}catch(Ky){hv=Ky}Reflect.construct(I1,[],_v)}else{try{_v.call()}catch(Ky){hv=Ky}I1.call(_v.prototype)}}else{try{throw Error()}catch(Ky){hv=Ky}I1()}}catch(Ky){if(Ky&&hv&&typeof Ky.stack=="string"){for(var zv=Ky.stack.split(` `),ey=hv.stack.split(` `),Py=zv.length-1,Ry=ey.length-1;Py>=1&&Ry>=0&&zv[Py]!==ey[Ry];)Ry--;for(;Py>=1&&Ry>=0;Py--,Ry--)if(zv[Py]!==ey[Ry]){if(Py!==1||Ry!==1)do if(Py--,--Ry<0||zv[Py]!==ey[Ry]){var my=` -`+zv[Py].replace(" at new "," at ");return I1.displayName&&my.includes("")&&(my=my.replace("",I1.displayName)),typeof I1=="function"&&W1.set(I1,my),my}while(Py>=1&&Ry>=0);break}}}finally{_g=!1,x1.current=pv,function(){if(--N0==0){var Ky={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:U1({},Ky,{value:Ru}),info:U1({},Ky,{value:wu}),warn:U1({},Ky,{value:t0}),error:U1({},Ky,{value:m0}),group:U1({},Ky,{value:k0}),groupCollapsed:U1({},Ky,{value:_0}),groupEnd:U1({},Ky,{value:R0})})}N0<0&&S0("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=mv}var n2=I1?I1.displayName||I1.name:"",u2=n2?K1(n2):"";return typeof I1=="function"&&W1.set(I1,u2),u2}function Uv(I1,iv,hv){if(I1==null)return"";if(typeof I1=="function")return Tv(I1,function(_v){var zv=_v.prototype;return!(!zv||!zv.isReactComponent)}(I1));if(typeof I1=="string")return K1(I1);switch(I1){case B0:return K1("Suspense");case V0:return K1("SuspenseList")}if(typeof I1=="object")switch(I1.$$typeof){case M0:return Tv(I1.render,!1);case y1:return Uv(I1.type,iv,hv);case v1:var Bv=I1,pv=Bv._payload,mv=Bv._init;try{return Uv(mv(pv),iv,hv)}catch{}}return""}W1=new uv;var Wv,ny={},Rv=c0.ReactDebugCurrentFrame;function Gv(I1){if(I1){var iv=I1._owner,hv=Uv(I1.type,I1._source,iv?iv.type:null);Rv.setExtraStackFrame(hv)}else Rv.setExtraStackFrame(null)}function C0(I1){if(I1){var iv=I1._owner;Qv(Uv(I1.type,I1._source,iv?iv.type:null))}else Qv(null)}function J0(){if(fy.current){var I1=Jv(fy.current.type);if(I1)return` +`+zv[Py].replace(" at new "," at ");return I1.displayName&&my.includes("")&&(my=my.replace("",I1.displayName)),typeof I1=="function"&&W1.set(I1,my),my}while(Py>=1&&Ry>=0);break}}}finally{_g=!1,x1.current=pv,function(){if(--N0==0){var Ky={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:U1({},Ky,{value:Ru}),info:U1({},Ky,{value:wu}),warn:U1({},Ky,{value:t0}),error:U1({},Ky,{value:m0}),group:U1({},Ky,{value:k0}),groupCollapsed:U1({},Ky,{value:_0}),groupEnd:U1({},Ky,{value:R0})})}N0<0&&S0("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=mv}var n2=I1?I1.displayName||I1.name:"",u2=n2?K1(n2):"";return typeof I1=="function"&&W1.set(I1,u2),u2}function Uv(I1,iv,hv){if(I1==null)return"";if(typeof I1=="function")return Tv(I1,function(_v){var zv=_v.prototype;return!(!zv||!zv.isReactComponent)}(I1));if(typeof I1=="string")return K1(I1);switch(I1){case B0:return K1("Suspense");case q0:return K1("SuspenseList")}if(typeof I1=="object")switch(I1.$$typeof){case M0:return Tv(I1.render,!1);case y1:return Uv(I1.type,iv,hv);case v1:var Bv=I1,pv=Bv._payload,mv=Bv._init;try{return Uv(mv(pv),iv,hv)}catch{}}return""}W1=new uv;var Wv,ny={},Rv=c0.ReactDebugCurrentFrame;function Gv(I1){if(I1){var iv=I1._owner,hv=Uv(I1.type,I1._source,iv?iv.type:null);Rv.setExtraStackFrame(hv)}else Rv.setExtraStackFrame(null)}function C0(I1){if(I1){var iv=I1._owner;Qv(Uv(I1.type,I1._source,iv?iv.type:null))}else Qv(null)}function J0(){if(fy.current){var I1=Jv(fy.current.type);if(I1)return` Check the render method of \``+I1+"`."}return""}Wv=!1;var f0={};function v0(I1,iv){if(I1._store&&!I1._store.validated&&I1.key==null){I1._store.validated=!0;var hv=function(pv){var mv=J0();if(!mv){var _v=typeof pv=="string"?pv:pv.displayName||pv.name;_v&&(mv=` -Check the top-level render call using <`+_v+">.")}return mv}(iv);if(!f0[hv]){f0[hv]=!0;var Bv="";I1&&I1._owner&&I1._owner!==fy.current&&(Bv=" It was passed a child from "+Jv(I1._owner.type)+"."),C0(I1),S0('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',hv,Bv),C0(null)}}}function h0(I1,iv){if(typeof I1=="object"){if(yv(I1))for(var hv=0;hv.")}return mv}(iv);if(!f0[hv]){f0[hv]=!0;var Bv="";I1&&I1._owner&&I1._owner!==fy.current&&(Bv=" It was passed a child from "+Jv(I1._owner.type)+"."),C0(I1),S0('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',hv,Bv),C0(null)}}}function h0(I1,iv){if(typeof I1=="object"){if(yv(I1))for(var hv=0;hv",zv=" Did you accidentally export a JSX literal instead of a component?"):_v=typeof I1,S0("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",_v,zv)}var ey=p2.apply(this,arguments);if(ey==null)return ey;if(mv)for(var Py=2;Py"u"&&S0("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var Py=new MessageChannel;Py.port1.onmessage=ey,Py.port2.postMessage(void 0)}}e1(pv)}(function(){Bv.length===0?(oy.current=null,iv(I1)):L1(I1,iv,hv)})}catch(pv){hv(pv)}else iv(I1)}var A1=!1;function M1(I1){if(!A1){A1=!0;var iv=0;try{for(;iv is not supported and will be removed in a future major release. Did you mean to render instead?")),iv.Provider},set:function(_v){iv.Provider=_v}},_currentValue:{get:function(){return iv._currentValue},set:function(_v){iv._currentValue=_v}},_currentValue2:{get:function(){return iv._currentValue2},set:function(_v){iv._currentValue2=_v}},_threadCount:{get:function(){return iv._threadCount},set:function(_v){iv._threadCount=_v}},Consumer:{get:function(){return hv||(hv=!0,S0("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),iv.Consumer}},displayName:{get:function(){return iv.displayName},set:function(_v){pv||(a0("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",_v),pv=!0)}}}),iv.Consumer=mv,iv._currentRenderer=null,iv._currentRenderer2=null,iv},ir.createElement=X1,ir.createFactory=function(I1){var iv=o0.bind(null,I1);return iv.type=I1,x0||(x0=!0,a0("React.createFactory() is deprecated and will be removed in a future major release. Consider using JSX or use React.createElement() directly instead.")),Object.defineProperty(iv,"type",{enumerable:!1,get:function(){return a0("Factory.type is deprecated. Access the class directly before passing it to createFactory."),Object.defineProperty(this,"type",{value:I1}),I1}}),iv},ir.createRef=function(){var I1={current:null};return Object.seal(I1),I1},ir.forwardRef=function(I1){I1!=null&&I1.$$typeof===y1?S0("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof I1!="function"?S0("forwardRef requires a render function but was given %s.",I1===null?"null":typeof I1):I1.length!==0&&I1.length!==2&&S0("forwardRef render functions accept exactly two parameters: props and ref. %s",I1.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),I1!=null&&(I1.defaultProps==null&&I1.propTypes==null||S0("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?"));var iv,hv={$$typeof:M0,render:I1};return Object.defineProperty(hv,"displayName",{enumerable:!1,configurable:!0,get:function(){return iv},set:function(Bv){iv=Bv,I1.name||I1.displayName||(I1.displayName=Bv)}}),hv},ir.isValidElement=Ew,ir.lazy=function(I1){var iv,hv,Bv={$$typeof:v1,_payload:{_status:-1,_result:I1},_init:wt};return Object.defineProperties(Bv,{defaultProps:{configurable:!0,get:function(){return iv},set:function(pv){S0("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),iv=pv,Object.defineProperty(Bv,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return hv},set:function(pv){S0("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),hv=pv,Object.defineProperty(Bv,"propTypes",{enumerable:!0})}}}),Bv},ir.memo=function(I1,iv){Ws(I1)||S0("memo: The first argument must be a component. Instead received: %s",I1===null?"null":typeof I1);var hv,Bv={$$typeof:y1,type:I1,compare:iv===void 0?null:iv};return Object.defineProperty(Bv,"displayName",{enumerable:!1,configurable:!0,get:function(){return hv},set:function(pv){hv=pv,I1.name||I1.displayName||(I1.displayName=pv)}}),Bv},ir.startTransition=function(I1,iv){var hv=hy.transition;hy.transition={};var Bv=hy.transition;hy.transition._updatedFibers=new Set;try{I1()}finally{hy.transition=hv,hv===null&&Bv._updatedFibers&&(Bv._updatedFibers.size>10&&a0("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),Bv._updatedFibers.clear())}},ir.unstable_act=function(I1){var iv=h1;h1++,oy.current===null&&(oy.current=[]);var hv,Bv=oy.isBatchingLegacy;try{if(oy.isBatchingLegacy=!0,hv=I1(),!Bv&&oy.didScheduleLegacyUpdate){var pv=oy.current;pv!==null&&(oy.didScheduleLegacyUpdate=!1,M1(pv))}}catch(Ry){throw q1(iv),Ry}finally{oy.isBatchingLegacy=Bv}if(hv!==null&&typeof hv=="object"&&typeof hv.then=="function"){var mv=hv,_v=!1,zv={then:function(Ry,my){_v=!0,mv.then(function(n2){q1(iv),h1===0?L1(n2,Ry,my):Ry(n2)},function(n2){q1(iv),my(n2)})}};return k1||typeof Promise>"u"||Promise.resolve().then(function(){}).then(function(){_v||(k1=!0,S0("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),zv}var ey=hv;if(q1(iv),h1===0){var Py=oy.current;return Py!==null&&(M1(Py),oy.current=null),{then:function(Ry,my){oy.current===null?(oy.current=[],L1(ey,Ry,my)):Ry(ey)}}}return{then:function(Ry,my){Ry(ey)}}},ir.useCallback=function(I1,iv){return pu().useCallback(I1,iv)},ir.useContext=function(I1){var iv=pu();if(I1._context!==void 0){var hv=I1._context;hv.Consumer===I1?S0("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):hv.Provider===I1&&S0("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return iv.useContext(I1)},ir.useDebugValue=function(I1,iv){return pu().useDebugValue(I1,iv)},ir.useDeferredValue=function(I1){return pu().useDeferredValue(I1)},ir.useEffect=function(I1,iv){return pu().useEffect(I1,iv)},ir.useId=function(){return pu().useId()},ir.useImperativeHandle=function(I1,iv,hv){return pu().useImperativeHandle(I1,iv,hv)},ir.useInsertionEffect=function(I1,iv){return pu().useInsertionEffect(I1,iv)},ir.useLayoutEffect=function(I1,iv){return pu().useLayoutEffect(I1,iv)},ir.useMemo=function(I1,iv){return pu().useMemo(I1,iv)},ir.useReducer=function(I1,iv,hv){return pu().useReducer(I1,iv,hv)},ir.useRef=function(I1){return pu().useRef(I1)},ir.useState=function(I1){return pu().useState(I1)},ir.useSyncExternalStore=function(I1,iv,hv){return pu().useSyncExternalStore(I1,iv,hv)},ir.useTransition=function(){return pu().useTransition()},ir.version="18.2.0",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()}(xU,xU.exports)),xU.exports}function E9(){return Zde||(Zde=1,Kv.env.NODE_ENV==="production"?IX.exports=function(){if(Yde)return AE;Yde=1;var yt=Symbol.for("react.element"),ir=Symbol.for("react.portal"),_c=Symbol.for("react.fragment"),mu=Symbol.for("react.strict_mode"),Mu=Symbol.for("react.profiler"),Su=Symbol.for("react.provider"),l0=Symbol.for("react.context"),E0=Symbol.for("react.forward_ref"),j0=Symbol.for("react.suspense"),M0=Symbol.for("react.memo"),B0=Symbol.for("react.lazy"),V0=Symbol.iterator,y1={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},v1=Object.assign,F1={};function ov(z0,Q0,p1){this.props=z0,this.context=Q0,this.refs=F1,this.updater=p1||y1}function bv(){}function gv(z0,Q0,p1){this.props=z0,this.context=Q0,this.refs=F1,this.updater=p1||y1}ov.prototype.isReactComponent={},ov.prototype.setState=function(z0,Q0){if(typeof z0!="object"&&typeof z0!="function"&&z0!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,z0,Q0,"setState")},ov.prototype.forceUpdate=function(z0){this.updater.enqueueForceUpdate(this,z0,"forceUpdate")},bv.prototype=ov.prototype;var xv=gv.prototype=new bv;xv.constructor=gv,v1(xv,ov.prototype),xv.isPureReactComponent=!0;var hy=Array.isArray,oy=Object.prototype.hasOwnProperty,fy={current:null},Fy={key:!0,ref:!0,__self:!0,__source:!0};function qv(z0,Q0,p1){var T1,U1={},S1=null,n1=null;if(Q0!=null)for(T1 in Q0.ref!==void 0&&(n1=Q0.ref),Q0.key!==void 0&&(S1=""+Q0.key),Q0)oy.call(Q0,T1)&&!Fy.hasOwnProperty(T1)&&(U1[T1]=Q0[T1]);var V1=arguments.length-2;if(V1===1)U1.children=p1;else if(1>>1,S1=Q0[U1];if(!(0>>1;U1Mu(J1,T1))wvMu(Sv,J1)?(Q0[U1]=Sv,Q0[wv]=T1,U1=wv):(Q0[U1]=J1,Q0[V1]=T1,U1=V1);else{if(!(wvMu(Sv,T1)))break e;Q0[U1]=Sv,Q0[wv]=T1,U1=wv}}}return p1}function Mu(Q0,p1){var T1=Q0.sortIndex-p1.sortIndex;return T1!==0?T1:Q0.id-p1.id}if(typeof performance=="object"&&typeof performance.now=="function"){var Su=performance;yt.unstable_now=function(){return Su.now()}}else{var l0=Date,E0=l0.now();yt.unstable_now=function(){return l0.now()-E0}}var j0=[],M0=[],B0=1,V0=null,y1=3,v1=!1,F1=!1,ov=!1,bv=typeof setTimeout=="function"?setTimeout:null,gv=typeof clearTimeout=="function"?clearTimeout:null,xv=typeof setImmediate<"u"?setImmediate:null;function hy(Q0){for(var p1=_c(M0);p1!==null;){if(p1.callback===null)mu(M0);else{if(!(p1.startTime<=Q0))break;mu(M0),p1.sortIndex=p1.expirationTime,ir(j0,p1)}p1=_c(M0)}}function oy(Q0){if(ov=!1,hy(Q0),!F1)if(_c(j0)!==null)F1=!0,S0(fy);else{var p1=_c(M0);p1!==null&&z0(oy,p1.startTime-Q0)}}function fy(Q0,p1){F1=!1,ov&&(ov=!1,gv(T0),T0=-1),v1=!0;var T1=y1;try{for(hy(p1),V0=_c(j0);V0!==null&&(!(V0.expirationTime>p1)||Q0&&!g0());){var U1=V0.callback;if(typeof U1=="function"){V0.callback=null,y1=V0.priorityLevel;var S1=U1(V0.expirationTime<=p1);p1=yt.unstable_now(),typeof S1=="function"?V0.callback=S1:V0===_c(j0)&&mu(j0),hy(p1)}else mu(j0);V0=_c(j0)}if(V0!==null)var n1=!0;else{var V1=_c(M0);V1!==null&&z0(oy,V1.startTime-p1),n1=!1}return n1}finally{V0=null,y1=T1,v1=!1}}typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var Fy,qv=!1,Qv=null,T0=-1,X0=5,s0=-1;function g0(){return!(yt.unstable_now()-s0Q0||125U1?(Q0.sortIndex=T1,ir(M0,Q0),_c(j0)===null&&Q0===_c(M0)&&(ov?(gv(T0),T0=-1):ov=!0,z0(oy,T1-U1))):(Q0.sortIndex=S1,ir(j0,Q0),F1||v1||(F1=!0,S0(fy))),Q0},yt.unstable_shouldYield=g0,yt.unstable_wrapCallback=function(Q0){var p1=y1;return function(){var T1=y1;y1=p1;try{return Q0.apply(this,arguments)}finally{y1=T1}}}}(Poe)),Poe):RU.exports=(PX||(PX=1,function(yt){Kv.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var ir=!1,_c=!1;function mu(U1,S1){var n1=U1.length;U1.push(S1),function(V1,J1,wv){for(var Sv=wv;Sv>0;){var Hv=Sv-1>>>1,ty=V1[Hv];if(!(l0(ty,J1)>0))return;V1[Hv]=J1,V1[Sv]=ty,Sv=Hv}}(U1,S1,n1)}function Mu(U1){return U1.length===0?null:U1[0]}function Su(U1){if(U1.length===0)return null;var S1=U1[0],n1=U1.pop();return n1!==S1&&(U1[0]=n1,function(V1,J1,wv){for(var Sv=0,Hv=V1.length,ty=Hv>>>1;Svwv)||V1&&!d0());){var Sv=v1.callback;if(typeof Sv=="function"){v1.callback=null,F1=v1.priorityLevel;var Hv=Sv(v1.expirationTime<=wv);wv=yt.unstable_now(),typeof Hv=="function"?v1.callback=Hv:v1===Mu(B0)&&Su(B0),fy(wv)}else Su(B0);v1=Mu(B0)}if(v1!==null)return!0;var ty=Mu(V0);return ty!==null&&p1(Fy,ty.startTime-wv),!1}(U1,S1)}finally{v1=null,F1=n1,ov=!1}}typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var Qv=!1,T0=null,X0=-1,s0=5,g0=-1;function d0(){return!(yt.unstable_now()-g0125?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):s0=U1>0?Math.floor(1e3/U1):5},yt.unstable_getCurrentPriorityLevel=function(){return F1},yt.unstable_getFirstCallbackNode=function(){return Mu(B0)},yt.unstable_next=function(U1){var S1;switch(F1){case 1:case 2:case 3:S1=3;break;default:S1=F1}var n1=F1;F1=S1;try{return U1()}finally{F1=n1}},yt.unstable_pauseExecution=function(){},yt.unstable_requestPaint=function(){},yt.unstable_runWithPriority=function(U1,S1){switch(U1){case 1:case 2:case 3:case 4:case 5:break;default:U1=3}var n1=F1;F1=U1;try{return S1()}finally{F1=n1}},yt.unstable_scheduleCallback=function(U1,S1,n1){var V1,J1,wv=yt.unstable_now();if(typeof n1=="object"&&n1!==null){var Sv=n1.delay;V1=typeof Sv=="number"&&Sv>0?wv+Sv:wv}else V1=wv;switch(U1){case 1:J1=-1;break;case 2:J1=250;break;case 5:J1=1073741823;break;case 4:J1=1e4;break;default:J1=5e3}var Hv=V1+J1,ty={id:y1++,callback:S1,priorityLevel:U1,startTime:V1,expirationTime:Hv,sortIndex:-1};return V1>wv?(ty.sortIndex=V1,mu(V0,ty),Mu(B0)===null&&ty===Mu(V0)&&(gv?T1():gv=!0,p1(Fy,V1-wv))):(ty.sortIndex=Hv,mu(B0,ty),bv||ov||(bv=!0,Q0(qv))),ty},yt.unstable_shouldYield=d0,yt.unstable_wrapCallback=function(U1){var S1=F1;return function(){var n1=F1;F1=S1;try{return U1.apply(this,arguments)}finally{F1=n1}}},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()}(Qde)),Qde)),RU.exports}/** +Check your code at `+pv.fileName.replace(/^.*[\\\/]/,"")+":"+pv.lineNumber+".":"")||J0(),I1===null?_v="null":yv(I1)?_v="array":I1!==void 0&&I1.$$typeof===_c?(_v="<"+(Jv(I1.type)||"Unknown")+" />",zv=" Did you accidentally export a JSX literal instead of a component?"):_v=typeof I1,S0("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",_v,zv)}var ey=p2.apply(this,arguments);if(ey==null)return ey;if(mv)for(var Py=2;Py"u"&&S0("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var Py=new MessageChannel;Py.port1.onmessage=ey,Py.port2.postMessage(void 0)}}e1(pv)}(function(){Bv.length===0?(oy.current=null,iv(I1)):L1(I1,iv,hv)})}catch(pv){hv(pv)}else iv(I1)}var A1=!1;function M1(I1){if(!A1){A1=!0;var iv=0;try{for(;iv is not supported and will be removed in a future major release. Did you mean to render instead?")),iv.Provider},set:function(_v){iv.Provider=_v}},_currentValue:{get:function(){return iv._currentValue},set:function(_v){iv._currentValue=_v}},_currentValue2:{get:function(){return iv._currentValue2},set:function(_v){iv._currentValue2=_v}},_threadCount:{get:function(){return iv._threadCount},set:function(_v){iv._threadCount=_v}},Consumer:{get:function(){return hv||(hv=!0,S0("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),iv.Consumer}},displayName:{get:function(){return iv.displayName},set:function(_v){pv||(a0("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",_v),pv=!0)}}}),iv.Consumer=mv,iv._currentRenderer=null,iv._currentRenderer2=null,iv},ir.createElement=X1,ir.createFactory=function(I1){var iv=o0.bind(null,I1);return iv.type=I1,x0||(x0=!0,a0("React.createFactory() is deprecated and will be removed in a future major release. Consider using JSX or use React.createElement() directly instead.")),Object.defineProperty(iv,"type",{enumerable:!1,get:function(){return a0("Factory.type is deprecated. Access the class directly before passing it to createFactory."),Object.defineProperty(this,"type",{value:I1}),I1}}),iv},ir.createRef=function(){var I1={current:null};return Object.seal(I1),I1},ir.forwardRef=function(I1){I1!=null&&I1.$$typeof===y1?S0("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof I1!="function"?S0("forwardRef requires a render function but was given %s.",I1===null?"null":typeof I1):I1.length!==0&&I1.length!==2&&S0("forwardRef render functions accept exactly two parameters: props and ref. %s",I1.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),I1!=null&&(I1.defaultProps==null&&I1.propTypes==null||S0("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?"));var iv,hv={$$typeof:M0,render:I1};return Object.defineProperty(hv,"displayName",{enumerable:!1,configurable:!0,get:function(){return iv},set:function(Bv){iv=Bv,I1.name||I1.displayName||(I1.displayName=Bv)}}),hv},ir.isValidElement=Ew,ir.lazy=function(I1){var iv,hv,Bv={$$typeof:v1,_payload:{_status:-1,_result:I1},_init:wt};return Object.defineProperties(Bv,{defaultProps:{configurable:!0,get:function(){return iv},set:function(pv){S0("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),iv=pv,Object.defineProperty(Bv,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return hv},set:function(pv){S0("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),hv=pv,Object.defineProperty(Bv,"propTypes",{enumerable:!0})}}}),Bv},ir.memo=function(I1,iv){Ys(I1)||S0("memo: The first argument must be a component. Instead received: %s",I1===null?"null":typeof I1);var hv,Bv={$$typeof:y1,type:I1,compare:iv===void 0?null:iv};return Object.defineProperty(Bv,"displayName",{enumerable:!1,configurable:!0,get:function(){return hv},set:function(pv){hv=pv,I1.name||I1.displayName||(I1.displayName=pv)}}),Bv},ir.startTransition=function(I1,iv){var hv=hy.transition;hy.transition={};var Bv=hy.transition;hy.transition._updatedFibers=new Set;try{I1()}finally{hy.transition=hv,hv===null&&Bv._updatedFibers&&(Bv._updatedFibers.size>10&&a0("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),Bv._updatedFibers.clear())}},ir.unstable_act=function(I1){var iv=h1;h1++,oy.current===null&&(oy.current=[]);var hv,Bv=oy.isBatchingLegacy;try{if(oy.isBatchingLegacy=!0,hv=I1(),!Bv&&oy.didScheduleLegacyUpdate){var pv=oy.current;pv!==null&&(oy.didScheduleLegacyUpdate=!1,M1(pv))}}catch(Ry){throw q1(iv),Ry}finally{oy.isBatchingLegacy=Bv}if(hv!==null&&typeof hv=="object"&&typeof hv.then=="function"){var mv=hv,_v=!1,zv={then:function(Ry,my){_v=!0,mv.then(function(n2){q1(iv),h1===0?L1(n2,Ry,my):Ry(n2)},function(n2){q1(iv),my(n2)})}};return k1||typeof Promise>"u"||Promise.resolve().then(function(){}).then(function(){_v||(k1=!0,S0("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),zv}var ey=hv;if(q1(iv),h1===0){var Py=oy.current;return Py!==null&&(M1(Py),oy.current=null),{then:function(Ry,my){oy.current===null?(oy.current=[],L1(ey,Ry,my)):Ry(ey)}}}return{then:function(Ry,my){Ry(ey)}}},ir.useCallback=function(I1,iv){return pu().useCallback(I1,iv)},ir.useContext=function(I1){var iv=pu();if(I1._context!==void 0){var hv=I1._context;hv.Consumer===I1?S0("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):hv.Provider===I1&&S0("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return iv.useContext(I1)},ir.useDebugValue=function(I1,iv){return pu().useDebugValue(I1,iv)},ir.useDeferredValue=function(I1){return pu().useDeferredValue(I1)},ir.useEffect=function(I1,iv){return pu().useEffect(I1,iv)},ir.useId=function(){return pu().useId()},ir.useImperativeHandle=function(I1,iv,hv){return pu().useImperativeHandle(I1,iv,hv)},ir.useInsertionEffect=function(I1,iv){return pu().useInsertionEffect(I1,iv)},ir.useLayoutEffect=function(I1,iv){return pu().useLayoutEffect(I1,iv)},ir.useMemo=function(I1,iv){return pu().useMemo(I1,iv)},ir.useReducer=function(I1,iv,hv){return pu().useReducer(I1,iv,hv)},ir.useRef=function(I1){return pu().useRef(I1)},ir.useState=function(I1){return pu().useState(I1)},ir.useSyncExternalStore=function(I1,iv,hv){return pu().useSyncExternalStore(I1,iv,hv)},ir.useTransition=function(){return pu().useTransition()},ir.version="18.2.0",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()}(xU,xU.exports)),xU.exports}function E9(){return Zde||(Zde=1,Kv.env.NODE_ENV==="production"?IX.exports=function(){if(Yde)return AE;Yde=1;var yt=Symbol.for("react.element"),ir=Symbol.for("react.portal"),_c=Symbol.for("react.fragment"),mu=Symbol.for("react.strict_mode"),Mu=Symbol.for("react.profiler"),xu=Symbol.for("react.provider"),l0=Symbol.for("react.context"),E0=Symbol.for("react.forward_ref"),j0=Symbol.for("react.suspense"),M0=Symbol.for("react.memo"),B0=Symbol.for("react.lazy"),q0=Symbol.iterator,y1={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},v1=Object.assign,F1={};function ov(z0,Q0,p1){this.props=z0,this.context=Q0,this.refs=F1,this.updater=p1||y1}function bv(){}function gv(z0,Q0,p1){this.props=z0,this.context=Q0,this.refs=F1,this.updater=p1||y1}ov.prototype.isReactComponent={},ov.prototype.setState=function(z0,Q0){if(typeof z0!="object"&&typeof z0!="function"&&z0!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,z0,Q0,"setState")},ov.prototype.forceUpdate=function(z0){this.updater.enqueueForceUpdate(this,z0,"forceUpdate")},bv.prototype=ov.prototype;var xv=gv.prototype=new bv;xv.constructor=gv,v1(xv,ov.prototype),xv.isPureReactComponent=!0;var hy=Array.isArray,oy=Object.prototype.hasOwnProperty,fy={current:null},Fy={key:!0,ref:!0,__self:!0,__source:!0};function qv(z0,Q0,p1){var T1,U1={},S1=null,n1=null;if(Q0!=null)for(T1 in Q0.ref!==void 0&&(n1=Q0.ref),Q0.key!==void 0&&(S1=""+Q0.key),Q0)oy.call(Q0,T1)&&!Fy.hasOwnProperty(T1)&&(U1[T1]=Q0[T1]);var V1=arguments.length-2;if(V1===1)U1.children=p1;else if(1>>1,S1=Q0[U1];if(!(0>>1;U1Mu(J1,T1))wvMu(Sv,J1)?(Q0[U1]=Sv,Q0[wv]=T1,U1=wv):(Q0[U1]=J1,Q0[V1]=T1,U1=V1);else{if(!(wvMu(Sv,T1)))break e;Q0[U1]=Sv,Q0[wv]=T1,U1=wv}}}return p1}function Mu(Q0,p1){var T1=Q0.sortIndex-p1.sortIndex;return T1!==0?T1:Q0.id-p1.id}if(typeof performance=="object"&&typeof performance.now=="function"){var xu=performance;yt.unstable_now=function(){return xu.now()}}else{var l0=Date,E0=l0.now();yt.unstable_now=function(){return l0.now()-E0}}var j0=[],M0=[],B0=1,q0=null,y1=3,v1=!1,F1=!1,ov=!1,bv=typeof setTimeout=="function"?setTimeout:null,gv=typeof clearTimeout=="function"?clearTimeout:null,xv=typeof setImmediate<"u"?setImmediate:null;function hy(Q0){for(var p1=_c(M0);p1!==null;){if(p1.callback===null)mu(M0);else{if(!(p1.startTime<=Q0))break;mu(M0),p1.sortIndex=p1.expirationTime,ir(j0,p1)}p1=_c(M0)}}function oy(Q0){if(ov=!1,hy(Q0),!F1)if(_c(j0)!==null)F1=!0,S0(fy);else{var p1=_c(M0);p1!==null&&z0(oy,p1.startTime-Q0)}}function fy(Q0,p1){F1=!1,ov&&(ov=!1,gv(T0),T0=-1),v1=!0;var T1=y1;try{for(hy(p1),q0=_c(j0);q0!==null&&(!(q0.expirationTime>p1)||Q0&&!g0());){var U1=q0.callback;if(typeof U1=="function"){q0.callback=null,y1=q0.priorityLevel;var S1=U1(q0.expirationTime<=p1);p1=yt.unstable_now(),typeof S1=="function"?q0.callback=S1:q0===_c(j0)&&mu(j0),hy(p1)}else mu(j0);q0=_c(j0)}if(q0!==null)var n1=!0;else{var V1=_c(M0);V1!==null&&z0(oy,V1.startTime-p1),n1=!1}return n1}finally{q0=null,y1=T1,v1=!1}}typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var Fy,qv=!1,Qv=null,T0=-1,X0=5,s0=-1;function g0(){return!(yt.unstable_now()-s0Q0||125U1?(Q0.sortIndex=T1,ir(M0,Q0),_c(j0)===null&&Q0===_c(M0)&&(ov?(gv(T0),T0=-1):ov=!0,z0(oy,T1-U1))):(Q0.sortIndex=S1,ir(j0,Q0),F1||v1||(F1=!0,S0(fy))),Q0},yt.unstable_shouldYield=g0,yt.unstable_wrapCallback=function(Q0){var p1=y1;return function(){var T1=y1;y1=p1;try{return Q0.apply(this,arguments)}finally{y1=T1}}}}(Poe)),Poe):RU.exports=(PX||(PX=1,function(yt){Kv.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var ir=!1,_c=!1;function mu(U1,S1){var n1=U1.length;U1.push(S1),function(V1,J1,wv){for(var Sv=wv;Sv>0;){var Hv=Sv-1>>>1,ty=V1[Hv];if(!(l0(ty,J1)>0))return;V1[Hv]=J1,V1[Sv]=ty,Sv=Hv}}(U1,S1,n1)}function Mu(U1){return U1.length===0?null:U1[0]}function xu(U1){if(U1.length===0)return null;var S1=U1[0],n1=U1.pop();return n1!==S1&&(U1[0]=n1,function(V1,J1,wv){for(var Sv=0,Hv=V1.length,ty=Hv>>>1;Svwv)||V1&&!d0());){var Sv=v1.callback;if(typeof Sv=="function"){v1.callback=null,F1=v1.priorityLevel;var Hv=Sv(v1.expirationTime<=wv);wv=yt.unstable_now(),typeof Hv=="function"?v1.callback=Hv:v1===Mu(B0)&&xu(B0),fy(wv)}else xu(B0);v1=Mu(B0)}if(v1!==null)return!0;var ty=Mu(q0);return ty!==null&&p1(Fy,ty.startTime-wv),!1}(U1,S1)}finally{v1=null,F1=n1,ov=!1}}typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var Qv=!1,T0=null,X0=-1,s0=5,g0=-1;function d0(){return!(yt.unstable_now()-g0125?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):s0=U1>0?Math.floor(1e3/U1):5},yt.unstable_getCurrentPriorityLevel=function(){return F1},yt.unstable_getFirstCallbackNode=function(){return Mu(B0)},yt.unstable_next=function(U1){var S1;switch(F1){case 1:case 2:case 3:S1=3;break;default:S1=F1}var n1=F1;F1=S1;try{return U1()}finally{F1=n1}},yt.unstable_pauseExecution=function(){},yt.unstable_requestPaint=function(){},yt.unstable_runWithPriority=function(U1,S1){switch(U1){case 1:case 2:case 3:case 4:case 5:break;default:U1=3}var n1=F1;F1=U1;try{return S1()}finally{F1=n1}},yt.unstable_scheduleCallback=function(U1,S1,n1){var V1,J1,wv=yt.unstable_now();if(typeof n1=="object"&&n1!==null){var Sv=n1.delay;V1=typeof Sv=="number"&&Sv>0?wv+Sv:wv}else V1=wv;switch(U1){case 1:J1=-1;break;case 2:J1=250;break;case 5:J1=1073741823;break;case 4:J1=1e4;break;default:J1=5e3}var Hv=V1+J1,ty={id:y1++,callback:S1,priorityLevel:U1,startTime:V1,expirationTime:Hv,sortIndex:-1};return V1>wv?(ty.sortIndex=V1,mu(q0,ty),Mu(B0)===null&&ty===Mu(q0)&&(gv?T1():gv=!0,p1(Fy,V1-wv))):(ty.sortIndex=Hv,mu(B0,ty),bv||ov||(bv=!0,Q0(qv))),ty},yt.unstable_shouldYield=d0,yt.unstable_wrapCallback=function(U1){var S1=F1;return function(){var n1=F1;F1=S1;try{return U1.apply(this,arguments)}finally{F1=n1}}},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()}(Qde)),Qde)),RU.exports}/** * @license React * react-dom.production.min.js * @@ -1775,22 +1775,22 @@ Check your code at `+pv.fileName.replace(/^.*[\\\/]/,"")+":"+pv.lineNumber+".":" * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */function $x(){if(Xde)return L7;Xde=1;var yt=E9(),ir=ehe();function _c(n0){for(var y0="https://reactjs.org/docs/error-decoder.html?invariant="+n0,H0=1;H0"u"||window.document===void 0||window.document.createElement===void 0),j0=Object.prototype.hasOwnProperty,M0=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,B0={},V0={};function y1(n0,y0,H0,$1,H1,nv,Ov){this.acceptsBooleans=y0===2||y0===3||y0===4,this.attributeName=$1,this.attributeNamespace=H1,this.mustUseProperty=H0,this.propertyName=n0,this.type=y0,this.sanitizeURL=nv,this.removeEmptyString=Ov}var v1={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(n0){v1[n0]=new y1(n0,0,!1,n0,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(n0){var y0=n0[0];v1[y0]=new y1(y0,1,!1,n0[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(n0){v1[n0]=new y1(n0,2,!1,n0.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(n0){v1[n0]=new y1(n0,2,!1,n0,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(n0){v1[n0]=new y1(n0,3,!1,n0.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(n0){v1[n0]=new y1(n0,3,!0,n0,null,!1,!1)}),["capture","download"].forEach(function(n0){v1[n0]=new y1(n0,4,!1,n0,null,!1,!1)}),["cols","rows","size","span"].forEach(function(n0){v1[n0]=new y1(n0,6,!1,n0,null,!1,!1)}),["rowSpan","start"].forEach(function(n0){v1[n0]=new y1(n0,5,!1,n0.toLowerCase(),null,!1,!1)});var F1=/[\-:]([a-z])/g;function ov(n0){return n0[1].toUpperCase()}function bv(n0,y0,H0,$1){var H1=v1.hasOwnProperty(y0)?v1[y0]:null;(H1!==null?H1.type!==0:$1||!(2Ov}return!1}(y0,H0,H1,$1)&&(H0=null),$1||H1===null?function(nv){return!!j0.call(V0,nv)||!j0.call(B0,nv)&&(M0.test(nv)?V0[nv]=!0:(B0[nv]=!0,!1))}(y0)&&(H0===null?n0.removeAttribute(y0):n0.setAttribute(y0,""+H0)):H1.mustUseProperty?n0[H1.propertyName]=H0===null?H1.type!==3&&"":H0:(y0=H1.attributeName,$1=H1.attributeNamespace,H0===null?n0.removeAttribute(y0):(H0=(H1=H1.type)===3||H1===4&&H0===!0?"":""+H0,$1?n0.setAttributeNS($1,y0,H0):n0.setAttribute(y0,H0))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(n0){var y0=n0.replace(F1,ov);v1[y0]=new y1(y0,1,!1,n0,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(n0){var y0=n0.replace(F1,ov);v1[y0]=new y1(y0,1,!1,n0,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(n0){var y0=n0.replace(F1,ov);v1[y0]=new y1(y0,1,!1,n0,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(n0){v1[n0]=new y1(n0,1,!1,n0.toLowerCase(),null,!1,!1)}),v1.xlinkHref=new y1("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(n0){v1[n0]=new y1(n0,1,!1,n0.toLowerCase(),null,!0,!0)});var gv=yt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,xv=Symbol.for("react.element"),hy=Symbol.for("react.portal"),oy=Symbol.for("react.fragment"),fy=Symbol.for("react.strict_mode"),Fy=Symbol.for("react.profiler"),qv=Symbol.for("react.provider"),Qv=Symbol.for("react.context"),T0=Symbol.for("react.forward_ref"),X0=Symbol.for("react.suspense"),s0=Symbol.for("react.suspense_list"),g0=Symbol.for("react.memo"),d0=Symbol.for("react.lazy"),c0=Symbol.for("react.offscreen"),a0=Symbol.iterator;function S0(n0){return n0===null||typeof n0!="object"?null:typeof(n0=a0&&n0[a0]||n0["@@iterator"])=="function"?n0:null}var z0,Q0=Object.assign;function p1(n0){if(z0===void 0)try{throw Error()}catch(H0){var y0=H0.stack.trim().match(/\n( *(at )?)/);z0=y0&&y0[1]||""}return` -`+z0+n0}var T1=!1;function U1(n0,y0){if(!n0||T1)return"";T1=!0;var H0=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(y0)if(y0=function(){throw Error()},Object.defineProperty(y0.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(y0,[])}catch(Zy){var $1=Zy}Reflect.construct(n0,[],y0)}else{try{y0.call()}catch(Zy){$1=Zy}n0.call(y0.prototype)}else{try{throw Error()}catch(Zy){$1=Zy}n0()}}catch(Zy){if(Zy&&$1&&typeof Zy.stack=="string"){for(var H1=Zy.stack.split(` + */function $x(){if(Xde)return L7;Xde=1;var yt=E9(),ir=ehe();function _c(i0){for(var b0="https://reactjs.org/docs/error-decoder.html?invariant="+i0,H0=1;H0"u"||window.document===void 0||window.document.createElement===void 0),j0=Object.prototype.hasOwnProperty,M0=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,B0={},q0={};function y1(i0,b0,H0,$1,H1,nv,Ov){this.acceptsBooleans=b0===2||b0===3||b0===4,this.attributeName=$1,this.attributeNamespace=H1,this.mustUseProperty=H0,this.propertyName=i0,this.type=b0,this.sanitizeURL=nv,this.removeEmptyString=Ov}var v1={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(i0){v1[i0]=new y1(i0,0,!1,i0,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(i0){var b0=i0[0];v1[b0]=new y1(b0,1,!1,i0[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(i0){v1[i0]=new y1(i0,2,!1,i0.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(i0){v1[i0]=new y1(i0,2,!1,i0,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(i0){v1[i0]=new y1(i0,3,!1,i0.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(i0){v1[i0]=new y1(i0,3,!0,i0,null,!1,!1)}),["capture","download"].forEach(function(i0){v1[i0]=new y1(i0,4,!1,i0,null,!1,!1)}),["cols","rows","size","span"].forEach(function(i0){v1[i0]=new y1(i0,6,!1,i0,null,!1,!1)}),["rowSpan","start"].forEach(function(i0){v1[i0]=new y1(i0,5,!1,i0.toLowerCase(),null,!1,!1)});var F1=/[\-:]([a-z])/g;function ov(i0){return i0[1].toUpperCase()}function bv(i0,b0,H0,$1){var H1=v1.hasOwnProperty(b0)?v1[b0]:null;(H1!==null?H1.type!==0:$1||!(2Ov}return!1}(b0,H0,H1,$1)&&(H0=null),$1||H1===null?function(nv){return!!j0.call(q0,nv)||!j0.call(B0,nv)&&(M0.test(nv)?q0[nv]=!0:(B0[nv]=!0,!1))}(b0)&&(H0===null?i0.removeAttribute(b0):i0.setAttribute(b0,""+H0)):H1.mustUseProperty?i0[H1.propertyName]=H0===null?H1.type!==3&&"":H0:(b0=H1.attributeName,$1=H1.attributeNamespace,H0===null?i0.removeAttribute(b0):(H0=(H1=H1.type)===3||H1===4&&H0===!0?"":""+H0,$1?i0.setAttributeNS($1,b0,H0):i0.setAttribute(b0,H0))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(i0){var b0=i0.replace(F1,ov);v1[b0]=new y1(b0,1,!1,i0,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(i0){var b0=i0.replace(F1,ov);v1[b0]=new y1(b0,1,!1,i0,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(i0){var b0=i0.replace(F1,ov);v1[b0]=new y1(b0,1,!1,i0,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(i0){v1[i0]=new y1(i0,1,!1,i0.toLowerCase(),null,!1,!1)}),v1.xlinkHref=new y1("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(i0){v1[i0]=new y1(i0,1,!1,i0.toLowerCase(),null,!0,!0)});var gv=yt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,xv=Symbol.for("react.element"),hy=Symbol.for("react.portal"),oy=Symbol.for("react.fragment"),fy=Symbol.for("react.strict_mode"),Fy=Symbol.for("react.profiler"),qv=Symbol.for("react.provider"),Qv=Symbol.for("react.context"),T0=Symbol.for("react.forward_ref"),X0=Symbol.for("react.suspense"),s0=Symbol.for("react.suspense_list"),g0=Symbol.for("react.memo"),d0=Symbol.for("react.lazy"),c0=Symbol.for("react.offscreen"),a0=Symbol.iterator;function S0(i0){return i0===null||typeof i0!="object"?null:typeof(i0=a0&&i0[a0]||i0["@@iterator"])=="function"?i0:null}var z0,Q0=Object.assign;function p1(i0){if(z0===void 0)try{throw Error()}catch(H0){var b0=H0.stack.trim().match(/\n( *(at )?)/);z0=b0&&b0[1]||""}return` +`+z0+i0}var T1=!1;function U1(i0,b0){if(!i0||T1)return"";T1=!0;var H0=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b0)if(b0=function(){throw Error()},Object.defineProperty(b0.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(b0,[])}catch(Zy){var $1=Zy}Reflect.construct(i0,[],b0)}else{try{b0.call()}catch(Zy){$1=Zy}i0.call(b0.prototype)}else{try{throw Error()}catch(Zy){$1=Zy}i0()}}catch(Zy){if(Zy&&$1&&typeof Zy.stack=="string"){for(var H1=Zy.stack.split(` `),nv=$1.stack.split(` `),Ov=H1.length-1,yy=nv.length-1;1<=Ov&&0<=yy&&H1[Ov]!==nv[yy];)yy--;for(;1<=Ov&&0<=yy;Ov--,yy--)if(H1[Ov]!==nv[yy]){if(Ov!==1||yy!==1)do if(Ov--,0>--yy||H1[Ov]!==nv[yy]){var Ty=` -`+H1[Ov].replace(" at new "," at ");return n0.displayName&&Ty.includes("")&&(Ty=Ty.replace("",n0.displayName)),Ty}while(1<=Ov&&0<=yy);break}}}finally{T1=!1,Error.prepareStackTrace=H0}return(n0=n0?n0.displayName||n0.name:"")?p1(n0):""}function S1(n0){switch(n0.tag){case 5:return p1(n0.type);case 16:return p1("Lazy");case 13:return p1("Suspense");case 19:return p1("SuspenseList");case 0:case 2:case 15:return U1(n0.type,!1);case 11:return U1(n0.type.render,!1);case 1:return U1(n0.type,!0);default:return""}}function n1(n0){if(n0==null)return null;if(typeof n0=="function")return n0.displayName||n0.name||null;if(typeof n0=="string")return n0;switch(n0){case oy:return"Fragment";case hy:return"Portal";case Fy:return"Profiler";case fy:return"StrictMode";case X0:return"Suspense";case s0:return"SuspenseList"}if(typeof n0=="object")switch(n0.$$typeof){case Qv:return(n0.displayName||"Context")+".Consumer";case qv:return(n0._context.displayName||"Context")+".Provider";case T0:var y0=n0.render;return(n0=n0.displayName)||(n0=(n0=y0.displayName||y0.name||"")!==""?"ForwardRef("+n0+")":"ForwardRef"),n0;case g0:return(y0=n0.displayName||null)!==null?y0:n1(n0.type)||"Memo";case d0:y0=n0._payload,n0=n0._init;try{return n1(n0(y0))}catch{}}return null}function V1(n0){var y0=n0.type;switch(n0.tag){case 24:return"Cache";case 9:return(y0.displayName||"Context")+".Consumer";case 10:return(y0._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return n0=(n0=y0.render).displayName||n0.name||"",y0.displayName||(n0!==""?"ForwardRef("+n0+")":"ForwardRef");case 7:return"Fragment";case 5:return y0;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return n1(y0);case 8:return y0===fy?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof y0=="function")return y0.displayName||y0.name||null;if(typeof y0=="string")return y0}return null}function J1(n0){switch(typeof n0){case"boolean":case"number":case"string":case"undefined":case"object":return n0;default:return""}}function wv(n0){var y0=n0.type;return(n0=n0.nodeName)&&n0.toLowerCase()==="input"&&(y0==="checkbox"||y0==="radio")}function Sv(n0){n0._valueTracker||(n0._valueTracker=function(y0){var H0=wv(y0)?"checked":"value",$1=Object.getOwnPropertyDescriptor(y0.constructor.prototype,H0),H1=""+y0[H0];if(!y0.hasOwnProperty(H0)&&$1!==void 0&&typeof $1.get=="function"&&typeof $1.set=="function"){var nv=$1.get,Ov=$1.set;return Object.defineProperty(y0,H0,{configurable:!0,get:function(){return nv.call(this)},set:function(yy){H1=""+yy,Ov.call(this,yy)}}),Object.defineProperty(y0,H0,{enumerable:$1.enumerable}),{getValue:function(){return H1},setValue:function(yy){H1=""+yy},stopTracking:function(){y0._valueTracker=null,delete y0[H0]}}}}(n0))}function Hv(n0){if(!n0)return!1;var y0=n0._valueTracker;if(!y0)return!0;var H0=y0.getValue(),$1="";return n0&&($1=wv(n0)?n0.checked?"true":"false":n0.value),(n0=$1)!==H0&&(y0.setValue(n0),!0)}function ty(n0){if((n0=n0||(typeof document<"u"?document:void 0))===void 0)return null;try{return n0.activeElement||n0.body}catch{return n0.body}}function gy(n0,y0){var H0=y0.checked;return Q0({},y0,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:H0??n0._wrapperState.initialChecked})}function yv(n0,y0){var H0=y0.defaultValue==null?"":y0.defaultValue,$1=y0.checked!=null?y0.checked:y0.defaultChecked;H0=J1(y0.value!=null?y0.value:H0),n0._wrapperState={initialChecked:$1,initialValue:H0,controlled:y0.type==="checkbox"||y0.type==="radio"?y0.checked!=null:y0.value!=null}}function Av(n0,y0){(y0=y0.checked)!=null&&bv(n0,"checked",y0,!1)}function Dv(n0,y0){Av(n0,y0);var H0=J1(y0.value),$1=y0.type;if(H0!=null)$1==="number"?(H0===0&&n0.value===""||n0.value!=H0)&&(n0.value=""+H0):n0.value!==""+H0&&(n0.value=""+H0);else if($1==="submit"||$1==="reset")return void n0.removeAttribute("value");y0.hasOwnProperty("value")?Jv(n0,y0.type,H0):y0.hasOwnProperty("defaultValue")&&Jv(n0,y0.type,J1(y0.defaultValue)),y0.checked==null&&y0.defaultChecked!=null&&(n0.defaultChecked=!!y0.defaultChecked)}function ry(n0,y0,H0){if(y0.hasOwnProperty("value")||y0.hasOwnProperty("defaultValue")){var $1=y0.type;if(!($1!=="submit"&&$1!=="reset"||y0.value!==void 0&&y0.value!==null))return;y0=""+n0._wrapperState.initialValue,H0||y0===n0.value||(n0.value=y0),n0.defaultValue=y0}(H0=n0.name)!==""&&(n0.name=""),n0.defaultChecked=!!n0._wrapperState.initialChecked,H0!==""&&(n0.name=H0)}function Jv(n0,y0,H0){y0==="number"&&ty(n0.ownerDocument)===n0||(H0==null?n0.defaultValue=""+n0._wrapperState.initialValue:n0.defaultValue!==""+H0&&(n0.defaultValue=""+H0))}var Fv=Array.isArray;function iy(n0,y0,H0,$1){if(n0=n0.options,y0){y0={};for(var H1=0;H1"+y0.valueOf().toString()+"",y0=p2.firstChild;n0.firstChild;)n0.removeChild(n0.firstChild);for(;y0.firstChild;)n0.appendChild(y0.firstChild)}},typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(n0,y0,H0,$1){MSApp.execUnsafeLocalFunction(function(){return Vw(n0,y0)})}:Vw);function q2(n0,y0){if(y0){var H0=n0.firstChild;if(H0&&H0===n0.lastChild&&H0.nodeType===3)return void(H0.nodeValue=y0)}n0.textContent=y0}var $3={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Rw=["Webkit","ms","Moz","O"];function K2(n0,y0,H0){return y0==null||typeof y0=="boolean"||y0===""?"":H0||typeof y0!="number"||y0===0||$3.hasOwnProperty(n0)&&$3[n0]?(""+y0).trim():y0+"px"}function Xw(n0,y0){for(var H0 in n0=n0.style,y0)if(y0.hasOwnProperty(H0)){var $1=H0.indexOf("--")===0,H1=K2(H0,y0[H0],$1);H0==="float"&&(H0="cssFloat"),$1?n0.setProperty(H0,H1):n0[H0]=H1}}Object.keys($3).forEach(function(n0){Rw.forEach(function(y0){y0=y0+n0.charAt(0).toUpperCase()+n0.substring(1),$3[y0]=$3[n0]})});var a3=Q0({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function F2(n0,y0){if(y0){if(a3[n0]&&(y0.children!=null||y0.dangerouslySetInnerHTML!=null))throw Error(_c(137,n0));if(y0.dangerouslySetInnerHTML!=null){if(y0.children!=null)throw Error(_c(60));if(typeof y0.dangerouslySetInnerHTML!="object"||!("__html"in y0.dangerouslySetInnerHTML))throw Error(_c(61))}if(y0.style!=null&&typeof y0.style!="object")throw Error(_c(62))}}function Qw(n0,y0){if(n0.indexOf("-")===-1)return typeof y0.is=="string";switch(n0){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var vt=null;function wt(n0){return(n0=n0.target||n0.srcElement||window).correspondingUseElement&&(n0=n0.correspondingUseElement),n0.nodeType===3?n0.parentNode:n0}var Ws=null,pu=null,Ru=null;function wu(n0){if(n0=lI(n0)){if(typeof Ws!="function")throw Error(_c(280));var y0=n0.stateNode;y0&&(y0=vP(y0),Ws(n0.stateNode,n0.type,y0))}}function t0(n0){pu?Ru?Ru.push(n0):Ru=[n0]:pu=n0}function m0(){if(pu){var n0=pu,y0=Ru;if(Ru=pu=null,wu(n0),y0)for(n0=0;n0>>=0)==0?32:31-(X1(n0)/dv|0)|0},X1=Math.log,dv=Math.LN2,I1=64,iv=4194304;function hv(n0){switch(n0&-n0){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&n0;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&n0;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return n0}}function Bv(n0,y0){var H0=n0.pendingLanes;if(H0===0)return 0;var $1=0,H1=n0.suspendedLanes,nv=n0.pingedLanes,Ov=268435455&H0;if(Ov!==0){var yy=Ov&~H1;yy!==0?$1=hv(yy):(nv&=Ov)!=0&&($1=hv(nv))}else(Ov=H0&~H1)!=0?$1=hv(Ov):nv!==0&&($1=hv(nv));if($1===0)return 0;if(y0!==0&&y0!==$1&&!(y0&H1)&&((H1=$1&-$1)>=(nv=y0&-y0)||H1===16&&4194240&nv))return y0;if(4&$1&&($1|=16&H0),(y0=n0.entangledLanes)!==0)for(n0=n0.entanglements,y0&=$1;0H0;H0++)y0.push(n0);return y0}function ey(n0,y0,H0){n0.pendingLanes|=y0,y0!==536870912&&(n0.suspendedLanes=0,n0.pingedLanes=0),(n0=n0.eventTimes)[y0=31-M1(y0)]=H0}function Py(n0,y0){var H0=n0.entangledLanes|=y0;for(n0=n0.entanglements;H0;){var $1=31-M1(H0),H1=1<<$1;H1&y0|n0[$1]&y0&&(n0[$1]|=y0),H0&=~H1}}var Ry=0;function my(n0){return 1<(n0&=-n0)?4=E2),Q3=" ",n3=!1;function P3(n0,y0){switch(n0){case"keyup":return Nv.indexOf(y0.keyCode)!==-1;case"keydown":return y0.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function I$(n0){return typeof(n0=n0.detail)=="object"&&"data"in n0?n0.data:null}var u$=!1,e$={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function t$(n0){var y0=n0&&n0.nodeName&&n0.nodeName.toLowerCase();return y0==="input"?!!e$[n0.type]:y0==="textarea"}function gE(n0,y0,H0,$1){t0($1),0<(y0=e7(y0,"onChange")).length&&(H0=new OA("onChange","change",null,H0,$1),n0.push({event:H0,listeners:y0}))}var RE=null,l$=null;function __(n0){eE(n0,0)}function i8(n0){if(Hv(a8(n0)))return n0}function Ex(n0,y0){if(n0==="change")return y0}var B7=!1;if(E0){var nI;if(E0){var z_="oninput"in document;if(!z_){var fT=document.createElement("div");fT.setAttribute("oninput","return;"),z_=typeof fT.oninput=="function"}nI=z_}else nI=!1;B7=nI&&(!document.documentMode||9=y0)return{node:$1,offset:y0-n0};n0=H0}e:{for(;$1;){if($1.nextSibling){$1=$1.nextSibling;break e}$1=$1.parentNode}$1=void 0}$1=nL($1)}}function hT(n0,y0){return!(!n0||!y0)&&(n0===y0||(!n0||n0.nodeType!==3)&&(y0&&y0.nodeType===3?hT(n0,y0.parentNode):"contains"in n0?n0.contains(y0):!!n0.compareDocumentPosition&&!!(16&n0.compareDocumentPosition(y0))))}function yC(){for(var n0=window,y0=ty();y0 instanceof n0.HTMLIFrameElement;){try{var H0=typeof y0.contentWindow.location.href=="string"}catch{H0=!1}if(!H0)break;y0=ty((n0=y0.contentWindow).document)}return y0}function iI(n0){var y0=n0&&n0.nodeName&&n0.nodeName.toLowerCase();return y0&&(y0==="input"&&(n0.type==="text"||n0.type==="search"||n0.type==="tel"||n0.type==="url"||n0.type==="password")||y0==="textarea"||n0.contentEditable==="true")}function OU(n0){var y0=yC(),H0=n0.focusedElem,$1=n0.selectionRange;if(y0!==H0&&H0&&H0.ownerDocument&&hT(H0.ownerDocument.documentElement,H0)){if($1!==null&&iI(H0)){if(y0=$1.start,(n0=$1.end)===void 0&&(n0=y0),"selectionStart"in H0)H0.selectionStart=y0,H0.selectionEnd=Math.min(n0,H0.value.length);else if((n0=(y0=H0.ownerDocument||document)&&y0.defaultView||window).getSelection){n0=n0.getSelection();var H1=H0.textContent.length,nv=Math.min($1.start,H1);$1=$1.end===void 0?nv:Math.min($1.end,H1),!n0.extend&&nv>$1&&(H1=$1,$1=nv,nv=H1),H1=iL(H0,nv);var Ov=iL(H0,$1);H1&&Ov&&(n0.rangeCount!==1||n0.anchorNode!==H1.node||n0.anchorOffset!==H1.offset||n0.focusNode!==Ov.node||n0.focusOffset!==Ov.offset)&&((y0=y0.createRange()).setStart(H1.node,H1.offset),n0.removeAllRanges(),nv>$1?(n0.addRange(y0),n0.extend(Ov.node,Ov.offset)):(y0.setEnd(Ov.node,Ov.offset),n0.addRange(y0)))}}for(y0=[],n0=H0;n0=n0.parentNode;)n0.nodeType===1&&y0.push({element:n0,left:n0.scrollLeft,top:n0.scrollTop});for(typeof H0.focus=="function"&&H0.focus(),H0=0;H0=document.documentMode,pT=null,oI=null,A9=null,BR=!1;function mT(n0,y0,H0){var $1=H0.window===H0?H0.document:H0.nodeType===9?H0:H0.ownerDocument;BR||pT==null||pT!==ty($1)||($1="selectionStart"in($1=pT)&&iI($1)?{start:$1.selectionStart,end:$1.selectionEnd}:{anchorNode:($1=($1.ownerDocument&&$1.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:$1.anchorOffset,focusNode:$1.focusNode,focusOffset:$1.focusOffset},A9&&D7(A9,$1)||(A9=$1,0<($1=e7(oI,"onSelect")).length&&(y0=new OA("onSelect","select",null,y0,H0),n0.push({event:y0,listeners:$1}),y0.target=pT)))}function aI(n0,y0){var H0={};return H0[n0.toLowerCase()]=y0.toLowerCase(),H0["Webkit"+n0]="webkit"+y0,H0["Moz"+n0]="moz"+y0,H0}var t_={animationend:aI("Animation","AnimationEnd"),animationiteration:aI("Animation","AnimationIteration"),animationstart:aI("Animation","AnimationStart"),transitionend:aI("Transition","TransitionEnd")},D5={},dP={};function bC(n0){if(D5[n0])return D5[n0];if(!t_[n0])return n0;var y0,H0=t_[n0];for(y0 in H0)if(H0.hasOwnProperty(y0)&&y0 in dP)return D5[n0]=H0[y0];return n0}E0&&(dP=document.createElement("div").style,"AnimationEvent"in window||(delete t_.animationend.animation,delete t_.animationiteration.animation,delete t_.animationstart.animation),"TransitionEvent"in window||delete t_.transitionend.transition);var Q6=bC("animationend"),DR=bC("animationiteration"),wC=bC("animationstart"),F5=bC("transitionend"),FR=new Map,oL="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function $C(n0,y0){FR.set(n0,y0),Su(y0,[n0])}for(var o8=0;o8yP||(n0.current=fD[yP],fD[yP]=null,yP--)}function O$(n0,y0){yP++,fD[yP]=n0.current,n0.current=y0}var _C={},n_=G8(_C),$S=G8(!1),x8=_C;function cI(n0,y0){var H0=n0.type.contextTypes;if(!H0)return _C;var $1=n0.stateNode;if($1&&$1.__reactInternalMemoizedUnmaskedChildContext===y0)return $1.__reactInternalMemoizedMaskedChildContext;var H1,nv={};for(H1 in H0)nv[H1]=y0[H1];return $1&&((n0=n0.stateNode).__reactInternalMemoizedUnmaskedChildContext=y0,n0.__reactInternalMemoizedMaskedChildContext=nv),nv}function ES(n0){return n0.childContextTypes!=null}function _9(){pA($S),pA(n_)}function zR(n0,y0,H0){if(n_.current!==_C)throw Error(_c(168));O$(n_,y0),O$($S,H0)}function _x(n0,y0,H0){var $1=n0.stateNode;if(y0=y0.childContextTypes,typeof $1.getChildContext!="function")return H0;for(var H1 in $1=$1.getChildContext())if(!(H1 in y0))throw Error(_c(108,V1(n0)||"Unknown",H1));return Q0({},H0,$1)}function x_(n0){return n0=(n0=n0.stateNode)&&n0.__reactInternalMemoizedMergedChildContext||_C,x8=n_.current,O$(n_,n0),O$($S,$S.current),!0}function u3(n0,y0,H0){var $1=n0.stateNode;if(!$1)throw Error(_c(169));H0?(n0=_x(n0,y0,x8),$1.__reactInternalMemoizedMergedChildContext=n0,pA($S),pA(n_),O$(n_,n0)):pA($S),O$($S,H0)}var k_=null,s8=!1,i_=!1;function jU(n0){k_===null?k_=[n0]:k_.push(n0)}function Sx(){if(!i_&&k_!==null){i_=!0;var n0=0,y0=Ry;try{var H0=k_;for(Ry=1;n0>=Ov,H1-=Ov,AS=1<<32-M1(y0)+H1|H0<w$?(A$=s3,s3=null):A$=s3.sibling;var v$=m2(c2,s3,l2[w$],L2);if(v$===null){s3===null&&(s3=A$);break}n0&&s3&&v$.alternate===null&&y0(c2,s3),Wy=nv(v$,Wy,w$),k$===null?t3=v$:k$.sibling=v$,k$=v$,s3=A$}if(w$===l2.length)return H0(c2,s3),qw&&i7(c2,w$),t3;if(s3===null){for(;w$w$?(A$=s3,s3=null):A$=s3.sibling;var J3=m2(c2,s3,v$.value,L2);if(J3===null){s3===null&&(s3=A$);break}n0&&s3&&J3.alternate===null&&y0(c2,s3),Wy=nv(J3,Wy,w$),k$===null?t3=J3:k$.sibling=J3,k$=J3,s3=A$}if(v$.done)return H0(c2,s3),qw&&i7(c2,w$),t3;if(s3===null){for(;!v$.done;w$++,v$=l2.next())(v$=b2(c2,v$.value,L2))!==null&&(Wy=nv(v$,Wy,w$),k$===null?t3=v$:k$.sibling=v$,k$=v$);return qw&&i7(c2,w$),t3}for(s3=$1(c2,s3);!v$.done;w$++,v$=l2.next())(v$=g2(s3,c2,w$,v$.value,L2))!==null&&(n0&&v$.alternate!==null&&s3.delete(v$.key===null?w$:v$.key),Wy=nv(v$,Wy,w$),k$===null?t3=v$:k$.sibling=v$,k$=v$);return n0&&s3.forEach(function(v7){return y0(c2,v7)}),qw&&i7(c2,w$),t3}return function c2(Wy,l2,L2,t3){if(typeof L2=="object"&&L2!==null&&L2.type===oy&&L2.key===null&&(L2=L2.props.children),typeof L2=="object"&&L2!==null){switch(L2.$$typeof){case xv:e:{for(var k$=L2.key,s3=l2;s3!==null;){if(s3.key===k$){if((k$=L2.type)===oy){if(s3.tag===7){H0(Wy,s3.sibling),(l2=H1(s3,L2.props.children)).return=Wy,Wy=l2;break e}}else if(s3.elementType===k$||typeof k$=="object"&&k$!==null&&k$.$$typeof===d0&&VR(k$)===s3.type){H0(Wy,s3.sibling),(l2=H1(s3,L2.props)).ref=Z8(Wy,s3,L2),l2.return=Wy,Wy=l2;break e}H0(Wy,s3);break}y0(Wy,s3),s3=s3.sibling}L2.type===oy?((l2=rM(L2.props.children,Wy.mode,t3,L2.key)).return=Wy,Wy=l2):((t3=m7(L2.type,L2.key,L2.props,null,Wy.mode,t3)).ref=Z8(Wy,l2,L2),t3.return=Wy,Wy=t3)}return Ov(Wy);case hy:e:{for(s3=L2.key;l2!==null;){if(l2.key===s3){if(l2.tag===4&&l2.stateNode.containerInfo===L2.containerInfo&&l2.stateNode.implementation===L2.implementation){H0(Wy,l2.sibling),(l2=H1(l2,L2.children||[])).return=Wy,Wy=l2;break e}H0(Wy,l2);break}y0(Wy,l2),l2=l2.sibling}(l2=iO(L2,Wy.mode,t3)).return=Wy,Wy=l2}return Ov(Wy);case d0:return c2(Wy,l2,(s3=L2._init)(L2._payload),t3)}if(Fv(L2))return tw(Wy,l2,L2,t3);if(S0(L2))return sw(Wy,l2,L2,t3);_E(Wy,L2)}return typeof L2=="string"&&L2!==""||typeof L2=="number"?(L2=""+L2,l2!==null&&l2.tag===6?(H0(Wy,l2.sibling),(l2=H1(l2,L2)).return=Wy,Wy=l2):(H0(Wy,l2),(l2=nO(L2,Wy.mode,t3)).return=Wy,Wy=l2),Ov(Wy)):H0(Wy,l2)}}var Cx=ME(!0),qR=ME(!1),dI={},V_=G8(dI),hI=G8(dI),l6=G8(dI);function k9(n0){if(n0===dI)throw Error(_c(174));return n0}function $P(n0,y0){switch(O$(l6,y0),O$(hI,n0),O$(V_,dI),n0=y0.nodeType){case 9:case 11:y0=(y0=y0.documentElement)?y0.namespaceURI:mw(null,"");break;default:y0=mw(y0=(n0=n0===8?y0.parentNode:y0).namespaceURI||null,n0=n0.tagName)}pA(V_),O$(V_,y0)}function C9(){pA(V_),pA(hI),pA(l6)}function iA(n0){k9(l6.current);var y0=k9(V_.current),H0=mw(y0,n0.type);y0!==H0&&(O$(hI,n0),O$(V_,H0))}function Zw(n0){hI.current===n0&&(pA(V_),pA(hI))}var K$=G8(0);function C8(n0){for(var y0=n0;y0!==null;){if(y0.tag===13){var H0=y0.memoizedState;if(H0!==null&&((H0=H0.dehydrated)===null||H0.data==="$?"||H0.data==="$!"))return y0}else if(y0.tag===19&&y0.memoizedProps.revealOrder!==void 0){if(128&y0.flags)return y0}else if(y0.child!==null){y0.child.return=y0,y0=y0.child;continue}if(y0===n0)break;for(;y0.sibling===null;){if(y0.return===null||y0.return===n0)return null;y0=y0.return}y0.sibling.return=y0.return,y0=y0.sibling}return null}var vE=[];function T8(){for(var n0=0;n0H0?H0:4,n0(!0);var $1=T9.transition;T9.transition={};try{n0(!1),y0()}finally{Ry=H0,T9.transition=$1}}function kT(){return Z$().memoizedState}function gI(n0,y0,H0){var $1=Nx(n0);H0={lane:$1,action:H0,hasEagerState:!1,eagerState:null,next:null},uL(n0)?V5(y0,H0):(H0=SS(n0,y0,H0,$1))!==null&&(PS(H0,n0,$1,rE()),Mx(H0,y0,$1))}function cL(n0,y0,H0){var $1=Nx(n0),H1={lane:$1,action:H0,hasEagerState:!1,eagerState:null,next:null};if(uL(n0))V5(y0,H1);else{var nv=n0.alternate;if(n0.lanes===0&&(nv===null||nv.lanes===0)&&(nv=y0.lastRenderedReducer)!==null)try{var Ov=y0.lastRenderedState,yy=nv(Ov,H0);if(H1.hasEagerState=!0,H1.eagerState=yy,QS(yy,Ov)){var Ty=y0.interleaved;return Ty===null?(H1.next=H1,uI(y0)):(H1.next=Ty.next,Ty.next=H1),void(y0.interleaved=H1)}}catch{}(H0=SS(n0,y0,H1,$1))!==null&&(PS(H0,n0,$1,H1=rE()),Mx(H0,y0,$1))}}function uL(n0){var y0=n0.alternate;return n0===uE||y0!==null&&y0===uE}function V5(n0,y0){pI=WR=!0;var H0=n0.pending;H0===null?y0.next=y0:(y0.next=H0.next,H0.next=y0),n0.pending=y0}function Mx(n0,y0,H0){if(4194240&H0){var $1=y0.lanes;H0|=$1&=n0.pendingLanes,y0.lanes=H0,Py(n0,H0)}}var CT={readContext:Y8,useCallback:V$,useContext:V$,useEffect:V$,useImperativeHandle:V$,useInsertionEffect:V$,useLayoutEffect:V$,useMemo:V$,useReducer:V$,useRef:V$,useState:V$,useDebugValue:V$,useDeferredValue:V$,useTransition:V$,useMutableSource:V$,useSyncExternalStore:V$,useId:V$,unstable_isNewReconciler:!1},SP={readContext:Y8,useCallback:function(n0,y0){return b$().memoizedState=[n0,y0===void 0?null:y0],n0},useContext:Y8,useEffect:R8,useImperativeHandle:function(n0,y0,H0){return H0=H0!=null?H0.concat([n0]):null,X8(4194308,4,f6.bind(null,y0,n0),H0)},useLayoutEffect:function(n0,y0){return X8(4194308,4,n0,y0)},useInsertionEffect:function(n0,y0){return X8(4,2,n0,y0)},useMemo:function(n0,y0){var H0=b$();return y0=y0===void 0?null:y0,n0=n0(),H0.memoizedState=[n0,y0],n0},useReducer:function(n0,y0,H0){var $1=b$();return y0=H0!==void 0?H0(y0):y0,$1.memoizedState=$1.baseState=y0,n0={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:n0,lastRenderedState:y0},$1.queue=n0,n0=n0.dispatch=gI.bind(null,uE,n0),[$1.memoizedState,n0]},useRef:function(n0){return n0={current:n0},b$().memoizedState=n0},useState:R9,useDebugValue:ST,useDeferredValue:function(n0){return b$().memoizedState=n0},useTransition:function(){var n0=R9(!1),y0=n0[0];return n0=xT.bind(null,n0[1]),b$().memoizedState=n0,[y0,n0]},useMutableSource:function(){},useSyncExternalStore:function(n0,y0,H0){var $1=uE,H1=b$();if(qw){if(H0===void 0)throw Error(_c(407));H0=H0()}else{if(H0=y0(),u8===null)throw Error(_c(349));30&q_||hw($1,y0,H0)}H1.memoizedState=H0;var nv={value:H0,getSnapshot:y0};return H1.queue=nv,R8(p$.bind(null,$1,nv,n0),[n0]),$1.flags|=2048,v_(9,oA.bind(null,$1,nv,H0,y0),void 0,null),H0},useId:function(){var n0=b$(),y0=u8.identifierPrefix;if(qw){var H0=n7;y0=":"+y0+"R"+(H0=(AS&~(1<<32-M1(AS)-1)).toString(32)+H0),0<(H0=J8++)&&(y0+="H"+H0.toString(32)),y0+=":"}else y0=":"+y0+"r"+(H0=c7++).toString(32)+":";return n0.memoizedState=y0},unstable_isNewReconciler:!1},fL={readContext:Y8,useCallback:_P,useContext:Y8,useEffect:Q8,useImperativeHandle:Tx,useInsertionEffect:EP,useLayoutEffect:AP,useMemo:Rx,useReducer:AT,useRef:u7,useState:function(){return AT(R_)},useDebugValue:ST,useDeferredValue:function(n0){return f7(Z$(),mA.memoizedState,n0)},useTransition:function(){return[AT(R_)[0],Z$().memoizedState]},useMutableSource:u6,useSyncExternalStore:G_,useId:kT,unstable_isNewReconciler:!1},GR={readContext:Y8,useCallback:_P,useContext:Y8,useEffect:Q8,useImperativeHandle:Tx,useInsertionEffect:EP,useLayoutEffect:AP,useMemo:Rx,useReducer:mI,useRef:u7,useState:function(){return mI(R_)},useDebugValue:ST,useDeferredValue:function(n0){var y0=Z$();return mA===null?y0.memoizedState=n0:f7(y0,mA.memoizedState,n0)},useTransition:function(){return[mI(R_)[0],Z$().memoizedState]},useMutableSource:u6,useSyncExternalStore:G_,useId:kT,unstable_isNewReconciler:!1};function M9(n0,y0){try{var H0="",$1=y0;do H0+=S1($1),$1=$1.return;while($1);var H1=H0}catch(nv){H1=` +`+H1[Ov].replace(" at new "," at ");return i0.displayName&&Ty.includes("")&&(Ty=Ty.replace("",i0.displayName)),Ty}while(1<=Ov&&0<=yy);break}}}finally{T1=!1,Error.prepareStackTrace=H0}return(i0=i0?i0.displayName||i0.name:"")?p1(i0):""}function S1(i0){switch(i0.tag){case 5:return p1(i0.type);case 16:return p1("Lazy");case 13:return p1("Suspense");case 19:return p1("SuspenseList");case 0:case 2:case 15:return U1(i0.type,!1);case 11:return U1(i0.type.render,!1);case 1:return U1(i0.type,!0);default:return""}}function n1(i0){if(i0==null)return null;if(typeof i0=="function")return i0.displayName||i0.name||null;if(typeof i0=="string")return i0;switch(i0){case oy:return"Fragment";case hy:return"Portal";case Fy:return"Profiler";case fy:return"StrictMode";case X0:return"Suspense";case s0:return"SuspenseList"}if(typeof i0=="object")switch(i0.$$typeof){case Qv:return(i0.displayName||"Context")+".Consumer";case qv:return(i0._context.displayName||"Context")+".Provider";case T0:var b0=i0.render;return(i0=i0.displayName)||(i0=(i0=b0.displayName||b0.name||"")!==""?"ForwardRef("+i0+")":"ForwardRef"),i0;case g0:return(b0=i0.displayName||null)!==null?b0:n1(i0.type)||"Memo";case d0:b0=i0._payload,i0=i0._init;try{return n1(i0(b0))}catch{}}return null}function V1(i0){var b0=i0.type;switch(i0.tag){case 24:return"Cache";case 9:return(b0.displayName||"Context")+".Consumer";case 10:return(b0._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return i0=(i0=b0.render).displayName||i0.name||"",b0.displayName||(i0!==""?"ForwardRef("+i0+")":"ForwardRef");case 7:return"Fragment";case 5:return b0;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return n1(b0);case 8:return b0===fy?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof b0=="function")return b0.displayName||b0.name||null;if(typeof b0=="string")return b0}return null}function J1(i0){switch(typeof i0){case"boolean":case"number":case"string":case"undefined":case"object":return i0;default:return""}}function wv(i0){var b0=i0.type;return(i0=i0.nodeName)&&i0.toLowerCase()==="input"&&(b0==="checkbox"||b0==="radio")}function Sv(i0){i0._valueTracker||(i0._valueTracker=function(b0){var H0=wv(b0)?"checked":"value",$1=Object.getOwnPropertyDescriptor(b0.constructor.prototype,H0),H1=""+b0[H0];if(!b0.hasOwnProperty(H0)&&$1!==void 0&&typeof $1.get=="function"&&typeof $1.set=="function"){var nv=$1.get,Ov=$1.set;return Object.defineProperty(b0,H0,{configurable:!0,get:function(){return nv.call(this)},set:function(yy){H1=""+yy,Ov.call(this,yy)}}),Object.defineProperty(b0,H0,{enumerable:$1.enumerable}),{getValue:function(){return H1},setValue:function(yy){H1=""+yy},stopTracking:function(){b0._valueTracker=null,delete b0[H0]}}}}(i0))}function Hv(i0){if(!i0)return!1;var b0=i0._valueTracker;if(!b0)return!0;var H0=b0.getValue(),$1="";return i0&&($1=wv(i0)?i0.checked?"true":"false":i0.value),(i0=$1)!==H0&&(b0.setValue(i0),!0)}function ty(i0){if((i0=i0||(typeof document<"u"?document:void 0))===void 0)return null;try{return i0.activeElement||i0.body}catch{return i0.body}}function gy(i0,b0){var H0=b0.checked;return Q0({},b0,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:H0??i0._wrapperState.initialChecked})}function yv(i0,b0){var H0=b0.defaultValue==null?"":b0.defaultValue,$1=b0.checked!=null?b0.checked:b0.defaultChecked;H0=J1(b0.value!=null?b0.value:H0),i0._wrapperState={initialChecked:$1,initialValue:H0,controlled:b0.type==="checkbox"||b0.type==="radio"?b0.checked!=null:b0.value!=null}}function Av(i0,b0){(b0=b0.checked)!=null&&bv(i0,"checked",b0,!1)}function Dv(i0,b0){Av(i0,b0);var H0=J1(b0.value),$1=b0.type;if(H0!=null)$1==="number"?(H0===0&&i0.value===""||i0.value!=H0)&&(i0.value=""+H0):i0.value!==""+H0&&(i0.value=""+H0);else if($1==="submit"||$1==="reset")return void i0.removeAttribute("value");b0.hasOwnProperty("value")?Jv(i0,b0.type,H0):b0.hasOwnProperty("defaultValue")&&Jv(i0,b0.type,J1(b0.defaultValue)),b0.checked==null&&b0.defaultChecked!=null&&(i0.defaultChecked=!!b0.defaultChecked)}function ry(i0,b0,H0){if(b0.hasOwnProperty("value")||b0.hasOwnProperty("defaultValue")){var $1=b0.type;if(!($1!=="submit"&&$1!=="reset"||b0.value!==void 0&&b0.value!==null))return;b0=""+i0._wrapperState.initialValue,H0||b0===i0.value||(i0.value=b0),i0.defaultValue=b0}(H0=i0.name)!==""&&(i0.name=""),i0.defaultChecked=!!i0._wrapperState.initialChecked,H0!==""&&(i0.name=H0)}function Jv(i0,b0,H0){b0==="number"&&ty(i0.ownerDocument)===i0||(H0==null?i0.defaultValue=""+i0._wrapperState.initialValue:i0.defaultValue!==""+H0&&(i0.defaultValue=""+H0))}var Fv=Array.isArray;function iy(i0,b0,H0,$1){if(i0=i0.options,b0){b0={};for(var H1=0;H1"+b0.valueOf().toString()+"",b0=p2.firstChild;i0.firstChild;)i0.removeChild(i0.firstChild);for(;b0.firstChild;)i0.appendChild(b0.firstChild)}},typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(i0,b0,H0,$1){MSApp.execUnsafeLocalFunction(function(){return Vw(i0,b0)})}:Vw);function q2(i0,b0){if(b0){var H0=i0.firstChild;if(H0&&H0===i0.lastChild&&H0.nodeType===3)return void(H0.nodeValue=b0)}i0.textContent=b0}var $3={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Rw=["Webkit","ms","Moz","O"];function K2(i0,b0,H0){return b0==null||typeof b0=="boolean"||b0===""?"":H0||typeof b0!="number"||b0===0||$3.hasOwnProperty(i0)&&$3[i0]?(""+b0).trim():b0+"px"}function Xw(i0,b0){for(var H0 in i0=i0.style,b0)if(b0.hasOwnProperty(H0)){var $1=H0.indexOf("--")===0,H1=K2(H0,b0[H0],$1);H0==="float"&&(H0="cssFloat"),$1?i0.setProperty(H0,H1):i0[H0]=H1}}Object.keys($3).forEach(function(i0){Rw.forEach(function(b0){b0=b0+i0.charAt(0).toUpperCase()+i0.substring(1),$3[b0]=$3[i0]})});var a3=Q0({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function F2(i0,b0){if(b0){if(a3[i0]&&(b0.children!=null||b0.dangerouslySetInnerHTML!=null))throw Error(_c(137,i0));if(b0.dangerouslySetInnerHTML!=null){if(b0.children!=null)throw Error(_c(60));if(typeof b0.dangerouslySetInnerHTML!="object"||!("__html"in b0.dangerouslySetInnerHTML))throw Error(_c(61))}if(b0.style!=null&&typeof b0.style!="object")throw Error(_c(62))}}function Qw(i0,b0){if(i0.indexOf("-")===-1)return typeof b0.is=="string";switch(i0){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var vt=null;function wt(i0){return(i0=i0.target||i0.srcElement||window).correspondingUseElement&&(i0=i0.correspondingUseElement),i0.nodeType===3?i0.parentNode:i0}var Ys=null,pu=null,Ru=null;function wu(i0){if(i0=lI(i0)){if(typeof Ys!="function")throw Error(_c(280));var b0=i0.stateNode;b0&&(b0=vP(b0),Ys(i0.stateNode,i0.type,b0))}}function t0(i0){pu?Ru?Ru.push(i0):Ru=[i0]:pu=i0}function m0(){if(pu){var i0=pu,b0=Ru;if(Ru=pu=null,wu(i0),b0)for(i0=0;i0>>=0)==0?32:31-(X1(i0)/dv|0)|0},X1=Math.log,dv=Math.LN2,I1=64,iv=4194304;function hv(i0){switch(i0&-i0){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&i0;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&i0;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return i0}}function Bv(i0,b0){var H0=i0.pendingLanes;if(H0===0)return 0;var $1=0,H1=i0.suspendedLanes,nv=i0.pingedLanes,Ov=268435455&H0;if(Ov!==0){var yy=Ov&~H1;yy!==0?$1=hv(yy):(nv&=Ov)!=0&&($1=hv(nv))}else(Ov=H0&~H1)!=0?$1=hv(Ov):nv!==0&&($1=hv(nv));if($1===0)return 0;if(b0!==0&&b0!==$1&&!(b0&H1)&&((H1=$1&-$1)>=(nv=b0&-b0)||H1===16&&4194240&nv))return b0;if(4&$1&&($1|=16&H0),(b0=i0.entangledLanes)!==0)for(i0=i0.entanglements,b0&=$1;0H0;H0++)b0.push(i0);return b0}function ey(i0,b0,H0){i0.pendingLanes|=b0,b0!==536870912&&(i0.suspendedLanes=0,i0.pingedLanes=0),(i0=i0.eventTimes)[b0=31-M1(b0)]=H0}function Py(i0,b0){var H0=i0.entangledLanes|=b0;for(i0=i0.entanglements;H0;){var $1=31-M1(H0),H1=1<<$1;H1&b0|i0[$1]&b0&&(i0[$1]|=b0),H0&=~H1}}var Ry=0;function my(i0){return 1<(i0&=-i0)?4=E2),Q3=" ",n3=!1;function P3(i0,b0){switch(i0){case"keyup":return Nv.indexOf(b0.keyCode)!==-1;case"keydown":return b0.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function I$(i0){return typeof(i0=i0.detail)=="object"&&"data"in i0?i0.data:null}var u$=!1,e$={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function t$(i0){var b0=i0&&i0.nodeName&&i0.nodeName.toLowerCase();return b0==="input"?!!e$[i0.type]:b0==="textarea"}function gE(i0,b0,H0,$1){t0($1),0<(b0=e7(b0,"onChange")).length&&(H0=new OA("onChange","change",null,H0,$1),i0.push({event:H0,listeners:b0}))}var RE=null,l$=null;function __(i0){eE(i0,0)}function i8(i0){if(Hv(a8(i0)))return i0}function Ex(i0,b0){if(i0==="change")return b0}var B7=!1;if(E0){var nI;if(E0){var z_="oninput"in document;if(!z_){var fT=document.createElement("div");fT.setAttribute("oninput","return;"),z_=typeof fT.oninput=="function"}nI=z_}else nI=!1;B7=nI&&(!document.documentMode||9=b0)return{node:$1,offset:b0-i0};i0=H0}e:{for(;$1;){if($1.nextSibling){$1=$1.nextSibling;break e}$1=$1.parentNode}$1=void 0}$1=nL($1)}}function hT(i0,b0){return!(!i0||!b0)&&(i0===b0||(!i0||i0.nodeType!==3)&&(b0&&b0.nodeType===3?hT(i0,b0.parentNode):"contains"in i0?i0.contains(b0):!!i0.compareDocumentPosition&&!!(16&i0.compareDocumentPosition(b0))))}function yC(){for(var i0=window,b0=ty();b0 instanceof i0.HTMLIFrameElement;){try{var H0=typeof b0.contentWindow.location.href=="string"}catch{H0=!1}if(!H0)break;b0=ty((i0=b0.contentWindow).document)}return b0}function iI(i0){var b0=i0&&i0.nodeName&&i0.nodeName.toLowerCase();return b0&&(b0==="input"&&(i0.type==="text"||i0.type==="search"||i0.type==="tel"||i0.type==="url"||i0.type==="password")||b0==="textarea"||i0.contentEditable==="true")}function OU(i0){var b0=yC(),H0=i0.focusedElem,$1=i0.selectionRange;if(b0!==H0&&H0&&H0.ownerDocument&&hT(H0.ownerDocument.documentElement,H0)){if($1!==null&&iI(H0)){if(b0=$1.start,(i0=$1.end)===void 0&&(i0=b0),"selectionStart"in H0)H0.selectionStart=b0,H0.selectionEnd=Math.min(i0,H0.value.length);else if((i0=(b0=H0.ownerDocument||document)&&b0.defaultView||window).getSelection){i0=i0.getSelection();var H1=H0.textContent.length,nv=Math.min($1.start,H1);$1=$1.end===void 0?nv:Math.min($1.end,H1),!i0.extend&&nv>$1&&(H1=$1,$1=nv,nv=H1),H1=iL(H0,nv);var Ov=iL(H0,$1);H1&&Ov&&(i0.rangeCount!==1||i0.anchorNode!==H1.node||i0.anchorOffset!==H1.offset||i0.focusNode!==Ov.node||i0.focusOffset!==Ov.offset)&&((b0=b0.createRange()).setStart(H1.node,H1.offset),i0.removeAllRanges(),nv>$1?(i0.addRange(b0),i0.extend(Ov.node,Ov.offset)):(b0.setEnd(Ov.node,Ov.offset),i0.addRange(b0)))}}for(b0=[],i0=H0;i0=i0.parentNode;)i0.nodeType===1&&b0.push({element:i0,left:i0.scrollLeft,top:i0.scrollTop});for(typeof H0.focus=="function"&&H0.focus(),H0=0;H0=document.documentMode,pT=null,oI=null,A9=null,BR=!1;function mT(i0,b0,H0){var $1=H0.window===H0?H0.document:H0.nodeType===9?H0:H0.ownerDocument;BR||pT==null||pT!==ty($1)||($1="selectionStart"in($1=pT)&&iI($1)?{start:$1.selectionStart,end:$1.selectionEnd}:{anchorNode:($1=($1.ownerDocument&&$1.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:$1.anchorOffset,focusNode:$1.focusNode,focusOffset:$1.focusOffset},A9&&D7(A9,$1)||(A9=$1,0<($1=e7(oI,"onSelect")).length&&(b0=new OA("onSelect","select",null,b0,H0),i0.push({event:b0,listeners:$1}),b0.target=pT)))}function aI(i0,b0){var H0={};return H0[i0.toLowerCase()]=b0.toLowerCase(),H0["Webkit"+i0]="webkit"+b0,H0["Moz"+i0]="moz"+b0,H0}var t_={animationend:aI("Animation","AnimationEnd"),animationiteration:aI("Animation","AnimationIteration"),animationstart:aI("Animation","AnimationStart"),transitionend:aI("Transition","TransitionEnd")},D5={},dP={};function bC(i0){if(D5[i0])return D5[i0];if(!t_[i0])return i0;var b0,H0=t_[i0];for(b0 in H0)if(H0.hasOwnProperty(b0)&&b0 in dP)return D5[i0]=H0[b0];return i0}E0&&(dP=document.createElement("div").style,"AnimationEvent"in window||(delete t_.animationend.animation,delete t_.animationiteration.animation,delete t_.animationstart.animation),"TransitionEvent"in window||delete t_.transitionend.transition);var Q6=bC("animationend"),DR=bC("animationiteration"),wC=bC("animationstart"),F5=bC("transitionend"),FR=new Map,oL="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function $C(i0,b0){FR.set(i0,b0),xu(b0,[i0])}for(var o8=0;o8yP||(i0.current=fD[yP],fD[yP]=null,yP--)}function O$(i0,b0){yP++,fD[yP]=i0.current,i0.current=b0}var _C={},n_=G8(_C),$S=G8(!1),x8=_C;function cI(i0,b0){var H0=i0.type.contextTypes;if(!H0)return _C;var $1=i0.stateNode;if($1&&$1.__reactInternalMemoizedUnmaskedChildContext===b0)return $1.__reactInternalMemoizedMaskedChildContext;var H1,nv={};for(H1 in H0)nv[H1]=b0[H1];return $1&&((i0=i0.stateNode).__reactInternalMemoizedUnmaskedChildContext=b0,i0.__reactInternalMemoizedMaskedChildContext=nv),nv}function ES(i0){return i0.childContextTypes!=null}function _9(){pA($S),pA(n_)}function zR(i0,b0,H0){if(n_.current!==_C)throw Error(_c(168));O$(n_,b0),O$($S,H0)}function _x(i0,b0,H0){var $1=i0.stateNode;if(b0=b0.childContextTypes,typeof $1.getChildContext!="function")return H0;for(var H1 in $1=$1.getChildContext())if(!(H1 in b0))throw Error(_c(108,V1(i0)||"Unknown",H1));return Q0({},H0,$1)}function x_(i0){return i0=(i0=i0.stateNode)&&i0.__reactInternalMemoizedMergedChildContext||_C,x8=n_.current,O$(n_,i0),O$($S,$S.current),!0}function u3(i0,b0,H0){var $1=i0.stateNode;if(!$1)throw Error(_c(169));H0?(i0=_x(i0,b0,x8),$1.__reactInternalMemoizedMergedChildContext=i0,pA($S),pA(n_),O$(n_,i0)):pA($S),O$($S,H0)}var k_=null,s8=!1,i_=!1;function jU(i0){k_===null?k_=[i0]:k_.push(i0)}function Sx(){if(!i_&&k_!==null){i_=!0;var i0=0,b0=Ry;try{var H0=k_;for(Ry=1;i0>=Ov,H1-=Ov,AS=1<<32-M1(b0)+H1|H0<w$?(A$=s3,s3=null):A$=s3.sibling;var v$=m2(c2,s3,l2[w$],L2);if(v$===null){s3===null&&(s3=A$);break}i0&&s3&&v$.alternate===null&&b0(c2,s3),Wy=nv(v$,Wy,w$),k$===null?t3=v$:k$.sibling=v$,k$=v$,s3=A$}if(w$===l2.length)return H0(c2,s3),qw&&i7(c2,w$),t3;if(s3===null){for(;w$w$?(A$=s3,s3=null):A$=s3.sibling;var J3=m2(c2,s3,v$.value,L2);if(J3===null){s3===null&&(s3=A$);break}i0&&s3&&J3.alternate===null&&b0(c2,s3),Wy=nv(J3,Wy,w$),k$===null?t3=J3:k$.sibling=J3,k$=J3,s3=A$}if(v$.done)return H0(c2,s3),qw&&i7(c2,w$),t3;if(s3===null){for(;!v$.done;w$++,v$=l2.next())(v$=b2(c2,v$.value,L2))!==null&&(Wy=nv(v$,Wy,w$),k$===null?t3=v$:k$.sibling=v$,k$=v$);return qw&&i7(c2,w$),t3}for(s3=$1(c2,s3);!v$.done;w$++,v$=l2.next())(v$=g2(s3,c2,w$,v$.value,L2))!==null&&(i0&&v$.alternate!==null&&s3.delete(v$.key===null?w$:v$.key),Wy=nv(v$,Wy,w$),k$===null?t3=v$:k$.sibling=v$,k$=v$);return i0&&s3.forEach(function(v7){return b0(c2,v7)}),qw&&i7(c2,w$),t3}return function c2(Wy,l2,L2,t3){if(typeof L2=="object"&&L2!==null&&L2.type===oy&&L2.key===null&&(L2=L2.props.children),typeof L2=="object"&&L2!==null){switch(L2.$$typeof){case xv:e:{for(var k$=L2.key,s3=l2;s3!==null;){if(s3.key===k$){if((k$=L2.type)===oy){if(s3.tag===7){H0(Wy,s3.sibling),(l2=H1(s3,L2.props.children)).return=Wy,Wy=l2;break e}}else if(s3.elementType===k$||typeof k$=="object"&&k$!==null&&k$.$$typeof===d0&&VR(k$)===s3.type){H0(Wy,s3.sibling),(l2=H1(s3,L2.props)).ref=Z8(Wy,s3,L2),l2.return=Wy,Wy=l2;break e}H0(Wy,s3);break}b0(Wy,s3),s3=s3.sibling}L2.type===oy?((l2=rM(L2.props.children,Wy.mode,t3,L2.key)).return=Wy,Wy=l2):((t3=m7(L2.type,L2.key,L2.props,null,Wy.mode,t3)).ref=Z8(Wy,l2,L2),t3.return=Wy,Wy=t3)}return Ov(Wy);case hy:e:{for(s3=L2.key;l2!==null;){if(l2.key===s3){if(l2.tag===4&&l2.stateNode.containerInfo===L2.containerInfo&&l2.stateNode.implementation===L2.implementation){H0(Wy,l2.sibling),(l2=H1(l2,L2.children||[])).return=Wy,Wy=l2;break e}H0(Wy,l2);break}b0(Wy,l2),l2=l2.sibling}(l2=iO(L2,Wy.mode,t3)).return=Wy,Wy=l2}return Ov(Wy);case d0:return c2(Wy,l2,(s3=L2._init)(L2._payload),t3)}if(Fv(L2))return tw(Wy,l2,L2,t3);if(S0(L2))return sw(Wy,l2,L2,t3);_E(Wy,L2)}return typeof L2=="string"&&L2!==""||typeof L2=="number"?(L2=""+L2,l2!==null&&l2.tag===6?(H0(Wy,l2.sibling),(l2=H1(l2,L2)).return=Wy,Wy=l2):(H0(Wy,l2),(l2=nO(L2,Wy.mode,t3)).return=Wy,Wy=l2),Ov(Wy)):H0(Wy,l2)}}var Cx=ME(!0),qR=ME(!1),dI={},V_=G8(dI),hI=G8(dI),l6=G8(dI);function k9(i0){if(i0===dI)throw Error(_c(174));return i0}function $P(i0,b0){switch(O$(l6,b0),O$(hI,i0),O$(V_,dI),i0=b0.nodeType){case 9:case 11:b0=(b0=b0.documentElement)?b0.namespaceURI:mw(null,"");break;default:b0=mw(b0=(i0=i0===8?b0.parentNode:b0).namespaceURI||null,i0=i0.tagName)}pA(V_),O$(V_,b0)}function C9(){pA(V_),pA(hI),pA(l6)}function iA(i0){k9(l6.current);var b0=k9(V_.current),H0=mw(b0,i0.type);b0!==H0&&(O$(hI,i0),O$(V_,H0))}function Zw(i0){hI.current===i0&&(pA(V_),pA(hI))}var K$=G8(0);function C8(i0){for(var b0=i0;b0!==null;){if(b0.tag===13){var H0=b0.memoizedState;if(H0!==null&&((H0=H0.dehydrated)===null||H0.data==="$?"||H0.data==="$!"))return b0}else if(b0.tag===19&&b0.memoizedProps.revealOrder!==void 0){if(128&b0.flags)return b0}else if(b0.child!==null){b0.child.return=b0,b0=b0.child;continue}if(b0===i0)break;for(;b0.sibling===null;){if(b0.return===null||b0.return===i0)return null;b0=b0.return}b0.sibling.return=b0.return,b0=b0.sibling}return null}var vE=[];function T8(){for(var i0=0;i0H0?H0:4,i0(!0);var $1=T9.transition;T9.transition={};try{i0(!1),b0()}finally{Ry=H0,T9.transition=$1}}function kT(){return Z$().memoizedState}function gI(i0,b0,H0){var $1=Nx(i0);H0={lane:$1,action:H0,hasEagerState:!1,eagerState:null,next:null},uL(i0)?V5(b0,H0):(H0=SS(i0,b0,H0,$1))!==null&&(PS(H0,i0,$1,rE()),Mx(H0,b0,$1))}function cL(i0,b0,H0){var $1=Nx(i0),H1={lane:$1,action:H0,hasEagerState:!1,eagerState:null,next:null};if(uL(i0))V5(b0,H1);else{var nv=i0.alternate;if(i0.lanes===0&&(nv===null||nv.lanes===0)&&(nv=b0.lastRenderedReducer)!==null)try{var Ov=b0.lastRenderedState,yy=nv(Ov,H0);if(H1.hasEagerState=!0,H1.eagerState=yy,QS(yy,Ov)){var Ty=b0.interleaved;return Ty===null?(H1.next=H1,uI(b0)):(H1.next=Ty.next,Ty.next=H1),void(b0.interleaved=H1)}}catch{}(H0=SS(i0,b0,H1,$1))!==null&&(PS(H0,i0,$1,H1=rE()),Mx(H0,b0,$1))}}function uL(i0){var b0=i0.alternate;return i0===uE||b0!==null&&b0===uE}function V5(i0,b0){pI=WR=!0;var H0=i0.pending;H0===null?b0.next=b0:(b0.next=H0.next,H0.next=b0),i0.pending=b0}function Mx(i0,b0,H0){if(4194240&H0){var $1=b0.lanes;H0|=$1&=i0.pendingLanes,b0.lanes=H0,Py(i0,H0)}}var CT={readContext:Y8,useCallback:V$,useContext:V$,useEffect:V$,useImperativeHandle:V$,useInsertionEffect:V$,useLayoutEffect:V$,useMemo:V$,useReducer:V$,useRef:V$,useState:V$,useDebugValue:V$,useDeferredValue:V$,useTransition:V$,useMutableSource:V$,useSyncExternalStore:V$,useId:V$,unstable_isNewReconciler:!1},SP={readContext:Y8,useCallback:function(i0,b0){return b$().memoizedState=[i0,b0===void 0?null:b0],i0},useContext:Y8,useEffect:R8,useImperativeHandle:function(i0,b0,H0){return H0=H0!=null?H0.concat([i0]):null,X8(4194308,4,f6.bind(null,b0,i0),H0)},useLayoutEffect:function(i0,b0){return X8(4194308,4,i0,b0)},useInsertionEffect:function(i0,b0){return X8(4,2,i0,b0)},useMemo:function(i0,b0){var H0=b$();return b0=b0===void 0?null:b0,i0=i0(),H0.memoizedState=[i0,b0],i0},useReducer:function(i0,b0,H0){var $1=b$();return b0=H0!==void 0?H0(b0):b0,$1.memoizedState=$1.baseState=b0,i0={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:i0,lastRenderedState:b0},$1.queue=i0,i0=i0.dispatch=gI.bind(null,uE,i0),[$1.memoizedState,i0]},useRef:function(i0){return i0={current:i0},b$().memoizedState=i0},useState:R9,useDebugValue:ST,useDeferredValue:function(i0){return b$().memoizedState=i0},useTransition:function(){var i0=R9(!1),b0=i0[0];return i0=xT.bind(null,i0[1]),b$().memoizedState=i0,[b0,i0]},useMutableSource:function(){},useSyncExternalStore:function(i0,b0,H0){var $1=uE,H1=b$();if(qw){if(H0===void 0)throw Error(_c(407));H0=H0()}else{if(H0=b0(),u8===null)throw Error(_c(349));30&q_||hw($1,b0,H0)}H1.memoizedState=H0;var nv={value:H0,getSnapshot:b0};return H1.queue=nv,R8(p$.bind(null,$1,nv,i0),[i0]),$1.flags|=2048,v_(9,oA.bind(null,$1,nv,H0,b0),void 0,null),H0},useId:function(){var i0=b$(),b0=u8.identifierPrefix;if(qw){var H0=n7;b0=":"+b0+"R"+(H0=(AS&~(1<<32-M1(AS)-1)).toString(32)+H0),0<(H0=J8++)&&(b0+="H"+H0.toString(32)),b0+=":"}else b0=":"+b0+"r"+(H0=c7++).toString(32)+":";return i0.memoizedState=b0},unstable_isNewReconciler:!1},fL={readContext:Y8,useCallback:_P,useContext:Y8,useEffect:Q8,useImperativeHandle:Tx,useInsertionEffect:EP,useLayoutEffect:AP,useMemo:Rx,useReducer:AT,useRef:u7,useState:function(){return AT(R_)},useDebugValue:ST,useDeferredValue:function(i0){return f7(Z$(),mA.memoizedState,i0)},useTransition:function(){return[AT(R_)[0],Z$().memoizedState]},useMutableSource:u6,useSyncExternalStore:G_,useId:kT,unstable_isNewReconciler:!1},GR={readContext:Y8,useCallback:_P,useContext:Y8,useEffect:Q8,useImperativeHandle:Tx,useInsertionEffect:EP,useLayoutEffect:AP,useMemo:Rx,useReducer:mI,useRef:u7,useState:function(){return mI(R_)},useDebugValue:ST,useDeferredValue:function(i0){var b0=Z$();return mA===null?b0.memoizedState=i0:f7(b0,mA.memoizedState,i0)},useTransition:function(){return[mI(R_)[0],Z$().memoizedState]},useMutableSource:u6,useSyncExternalStore:G_,useId:kT,unstable_isNewReconciler:!1};function M9(i0,b0){try{var H0="",$1=b0;do H0+=S1($1),$1=$1.return;while($1);var H1=H0}catch(nv){H1=` Error generating stack: `+nv.message+` -`+nv.stack}return{value:n0,source:y0,stack:H1,digest:null}}function I9(n0,y0,H0){return{value:n0,source:null,stack:H0??null,digest:y0??null}}function xP(n0,y0){try{console.error(y0.value)}catch(H0){setTimeout(function(){throw H0})}}var q5=typeof WeakMap=="function"?WeakMap:Map;function d6(n0,y0,H0){(H0=o6(-1,H0)).tag=3,H0.payload={element:null};var $1=y0.value;return H0.callback=function(){$I||($I=!0,jT=$1),xP(0,y0)},H0}function eS(n0,y0,H0){(H0=o6(-1,H0)).tag=3;var $1=n0.type.getDerivedStateFromError;if(typeof $1=="function"){var H1=y0.value;H0.payload=function(){return $1(H1)},H0.callback=function(){xP(0,y0)}}var nv=n0.stateNode;return nv!==null&&typeof nv.componentDidCatch=="function"&&(H0.callback=function(){xP(0,y0),typeof $1!="function"&&(NT===null?NT=new Set([this]):NT.add(this));var Ov=y0.stack;this.componentDidCatch(y0.value,{componentStack:Ov!==null?Ov:""})}),H0}function W5(n0,y0,H0){var $1=n0.pingCache;if($1===null){$1=n0.pingCache=new q5;var H1=new Set;$1.set(y0,H1)}else(H1=$1.get(y0))===void 0&&(H1=new Set,$1.set(y0,H1));H1.has(H0)||(H1.add(H0),n0=PP.bind(null,n0,y0,H0),y0.then(n0,n0))}function C$(n0){do{var y0;if((y0=n0.tag===13)&&(y0=(y0=n0.memoizedState)===null||y0.dehydrated!==null),y0)return n0;n0=n0.return}while(n0!==null);return null}function TT(n0,y0,H0,$1,H1){return 1&n0.mode?(n0.flags|=65536,n0.lanes=H1,n0):(n0===y0?n0.flags|=65536:(n0.flags|=128,H0.flags|=131072,H0.flags&=-52805,H0.tag===1&&(H0.alternate===null?H0.tag=17:((y0=o6(-1,1)).tag=2,k8(H0,y0,1))),H0.lanes|=1),n0)}var YR=gv.ReactCurrentOwner,gA=!1;function o_(n0,y0,H0,$1){y0.child=n0===null?qR(y0,null,H0,$1):Cx(y0,n0.child,H0,$1)}function ZR(n0,y0,H0,$1,H1){H0=H0.render;var nv=y0.ref;return KR(y0,H1),$1=h$(n0,y0,H0,$1,nv,H1),H0=tE(),n0===null||gA?(qw&&H0&&g$(y0),y0.flags|=1,o_(n0,y0,$1,H1),y0.child):(y0.updateQueue=n0.updateQueue,y0.flags&=-2053,n0.lanes&=~H1,p6(n0,y0,H1))}function JR(n0,y0,H0,$1,H1){if(n0===null){var nv=H0.type;return typeof nv!="function"||j8(nv)||nv.defaultProps!==void 0||H0.compare!==null||H0.defaultProps!==void 0?((n0=m7(H0.type,null,$1,y0,y0.mode,H1)).ref=y0.ref,n0.return=y0,y0.child=n0):(y0.tag=15,y0.type=nv,kP(n0,y0,nv,$1,H1))}if(nv=n0.child,(n0.lanes&H1)==0){var Ov=nv.memoizedProps;if((H0=(H0=H0.compare)!==null?H0:D7)(Ov,$1)&&n0.ref===y0.ref)return p6(n0,y0,H1)}return y0.flags|=1,(n0=tM(nv,$1)).ref=y0.ref,n0.return=y0,y0.child=n0}function kP(n0,y0,H0,$1,H1){if(n0!==null){var nv=n0.memoizedProps;if(D7(nv,$1)&&n0.ref===y0.ref){if(gA=!1,y0.pendingProps=$1=nv,(n0.lanes&H1)==0)return y0.lanes=n0.lanes,p6(n0,y0,H1);131072&n0.flags&&(gA=!0)}}return CP(n0,y0,H0,$1,H1)}function AA(n0,y0,H0){var $1=y0.pendingProps,H1=$1.children,nv=n0!==null?n0.memoizedState:null;if($1.mode==="hidden")if(!(1&y0.mode))y0.memoizedState={baseLanes:0,cachePool:null,transitions:null},O$(Q7,tS),tS|=H0;else{if(!(1073741824&H0))return n0=nv!==null?nv.baseLanes|H0:H0,y0.lanes=y0.childLanes=1073741824,y0.memoizedState={baseLanes:n0,cachePool:null,transitions:null},y0.updateQueue=null,O$(Q7,tS),tS|=n0,null;y0.memoizedState={baseLanes:0,cachePool:null,transitions:null},$1=nv!==null?nv.baseLanes:H0,O$(Q7,tS),tS|=$1}else nv!==null?($1=nv.baseLanes|H0,y0.memoizedState=null):$1=H0,O$(Q7,tS),tS|=$1;return o_(n0,y0,H1,H0),y0.child}function XR(n0,y0){var H0=y0.ref;(n0===null&&H0!==null||n0!==null&&n0.ref!==H0)&&(y0.flags|=512,y0.flags|=2097152)}function CP(n0,y0,H0,$1,H1){var nv=ES(H0)?x8:n_.current;return nv=cI(y0,nv),KR(y0,H1),H0=h$(n0,y0,H0,$1,nv,H1),$1=tE(),n0===null||gA?(qw&&$1&&g$(y0),y0.flags|=1,o_(n0,y0,H0,H1),y0.child):(y0.updateQueue=n0.updateQueue,y0.flags&=-2053,n0.lanes&=~H1,p6(n0,y0,H1))}function G5(n0,y0,H0,$1,H1){if(ES(H0)){var nv=!0;x_(y0)}else nv=!1;if(KR(y0,H1),y0.stateNode===null)h6(n0,y0),ZE(y0,H0,$1),JE(y0,H0,$1,H1),$1=!0;else if(n0===null){var Ov=y0.stateNode,yy=y0.memoizedProps;Ov.props=yy;var Ty=Ov.context,Zy=H0.contextType;Zy=typeof Zy=="object"&&Zy!==null?Y8(Zy):cI(y0,Zy=ES(H0)?x8:n_.current);var s2=H0.getDerivedStateFromProps,b2=typeof s2=="function"||typeof Ov.getSnapshotBeforeUpdate=="function";b2||typeof Ov.UNSAFE_componentWillReceiveProps!="function"&&typeof Ov.componentWillReceiveProps!="function"||(yy!==$1||Ty!==Zy)&&s6(y0,Ov,$1,Zy),i6=!1;var m2=y0.memoizedState;Ov.state=m2,kx(y0,$1,Ov,H1),Ty=y0.memoizedState,yy!==$1||m2!==Ty||$S.current||i6?(typeof s2=="function"&&(ET(y0,H0,s2,$1),Ty=y0.memoizedState),(yy=i6||EA(y0,H0,yy,$1,m2,Ty,Zy))?(b2||typeof Ov.UNSAFE_componentWillMount!="function"&&typeof Ov.componentWillMount!="function"||(typeof Ov.componentWillMount=="function"&&Ov.componentWillMount(),typeof Ov.UNSAFE_componentWillMount=="function"&&Ov.UNSAFE_componentWillMount()),typeof Ov.componentDidMount=="function"&&(y0.flags|=4194308)):(typeof Ov.componentDidMount=="function"&&(y0.flags|=4194308),y0.memoizedProps=$1,y0.memoizedState=Ty),Ov.props=$1,Ov.state=Ty,Ov.context=Zy,$1=yy):(typeof Ov.componentDidMount=="function"&&(y0.flags|=4194308),$1=!1)}else{Ov=y0.stateNode,$T(n0,y0),yy=y0.memoizedProps,Zy=y0.type===y0.elementType?yy:LA(y0.type,yy),Ov.props=Zy,b2=y0.pendingProps,m2=Ov.context,Ty=typeof(Ty=H0.contextType)=="object"&&Ty!==null?Y8(Ty):cI(y0,Ty=ES(H0)?x8:n_.current);var g2=H0.getDerivedStateFromProps;(s2=typeof g2=="function"||typeof Ov.getSnapshotBeforeUpdate=="function")||typeof Ov.UNSAFE_componentWillReceiveProps!="function"&&typeof Ov.componentWillReceiveProps!="function"||(yy!==b2||m2!==Ty)&&s6(y0,Ov,$1,Ty),i6=!1,m2=y0.memoizedState,Ov.state=m2,kx(y0,$1,Ov,H1);var tw=y0.memoizedState;yy!==b2||m2!==tw||$S.current||i6?(typeof g2=="function"&&(ET(y0,H0,g2,$1),tw=y0.memoizedState),(Zy=i6||EA(y0,H0,Zy,$1,m2,tw,Ty)||!1)?(s2||typeof Ov.UNSAFE_componentWillUpdate!="function"&&typeof Ov.componentWillUpdate!="function"||(typeof Ov.componentWillUpdate=="function"&&Ov.componentWillUpdate($1,tw,Ty),typeof Ov.UNSAFE_componentWillUpdate=="function"&&Ov.UNSAFE_componentWillUpdate($1,tw,Ty)),typeof Ov.componentDidUpdate=="function"&&(y0.flags|=4),typeof Ov.getSnapshotBeforeUpdate=="function"&&(y0.flags|=1024)):(typeof Ov.componentDidUpdate!="function"||yy===n0.memoizedProps&&m2===n0.memoizedState||(y0.flags|=4),typeof Ov.getSnapshotBeforeUpdate!="function"||yy===n0.memoizedProps&&m2===n0.memoizedState||(y0.flags|=1024),y0.memoizedProps=$1,y0.memoizedState=tw),Ov.props=$1,Ov.state=tw,Ov.context=Ty,$1=Zy):(typeof Ov.componentDidUpdate!="function"||yy===n0.memoizedProps&&m2===n0.memoizedState||(y0.flags|=4),typeof Ov.getSnapshotBeforeUpdate!="function"||yy===n0.memoizedProps&&m2===n0.memoizedState||(y0.flags|=1024),$1=!1)}return Ix(n0,y0,H0,$1,nv,H1)}function Ix(n0,y0,H0,$1,H1,nv){XR(n0,y0);var Ov=(128&y0.flags)!=0;if(!$1&&!Ov)return H1&&u3(y0,H0,!1),p6(n0,y0,nv);$1=y0.stateNode,YR.current=y0;var yy=Ov&&typeof H0.getDerivedStateFromError!="function"?null:$1.render();return y0.flags|=1,n0!==null&&Ov?(y0.child=Cx(y0,n0.child,null,nv),y0.child=Cx(y0,null,yy,nv)):o_(n0,y0,yy,nv),y0.memoizedState=$1.state,H1&&u3(y0,H0,!0),y0.child}function vI(n0){var y0=n0.stateNode;y0.pendingContext?zR(0,y0.pendingContext,y0.pendingContext!==y0.context):y0.context&&zR(0,y0.context,!1),$P(n0,y0.containerInfo)}function d7(n0,y0,H0,$1,H1){return K_(),n6(H1),y0.flags|=256,o_(n0,y0,H0,$1),y0.child}var BA,LE,a_,T$,RT={dehydrated:null,treeContext:null,retryLane:0};function MT(n0){return{baseLanes:n0,cachePool:null,transitions:null}}function dD(n0,y0,H0){var $1,H1=y0.pendingProps,nv=K$.current,Ov=!1,yy=(128&y0.flags)!=0;if(($1=yy)||($1=(n0===null||n0.memoizedState!==null)&&(2&nv)!=0),$1?(Ov=!0,y0.flags&=-129):n0!==null&&n0.memoizedState===null||(nv|=1),O$(K$,1&nv),n0===null)return rw(y0),(n0=y0.memoizedState)!==null&&(n0=n0.dehydrated)!==null?(1&y0.mode?n0.data==="$!"?y0.lanes=8:y0.lanes=1073741824:y0.lanes=1,null):(yy=H1.children,n0=H1.fallback,Ov?(H1=y0.mode,Ov=y0.child,yy={mode:"hidden",children:yy},!(1&H1)&&Ov!==null?(Ov.childLanes=0,Ov.pendingProps=yy):Ov=SI(yy,H1,0,null),n0=rM(n0,H1,H0,null),Ov.return=y0,n0.return=y0,Ov.sibling=n0,y0.child=Ov,y0.child.memoizedState=MT(H0),y0.memoizedState=RT,n0):M_(y0,yy));if((nv=n0.memoizedState)!==null&&($1=nv.dehydrated)!==null)return function(Zy,s2,b2,m2,g2,tw,sw){if(b2)return 256&s2.flags?(s2.flags&=-257,yI(Zy,s2,sw,m2=I9(Error(_c(422))))):s2.memoizedState!==null?(s2.child=Zy.child,s2.flags|=128,null):(tw=m2.fallback,g2=s2.mode,m2=SI({mode:"visible",children:m2.children},g2,0,null),(tw=rM(tw,g2,sw,null)).flags|=2,m2.return=s2,tw.return=s2,m2.sibling=tw,s2.child=m2,1&s2.mode&&Cx(s2,Zy.child,null,sw),s2.child.memoizedState=MT(sw),s2.memoizedState=RT,tw);if(!(1&s2.mode))return yI(Zy,s2,sw,null);if(g2.data==="$!"){if(m2=g2.nextSibling&&g2.nextSibling.dataset)var c2=m2.dgst;return m2=c2,yI(Zy,s2,sw,m2=I9(tw=Error(_c(419)),m2,void 0))}if(c2=(sw&Zy.childLanes)!=0,gA||c2){if((m2=u8)!==null){switch(sw&-sw){case 4:g2=2;break;case 16:g2=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:g2=32;break;case 536870912:g2=268435456;break;default:g2=0}(g2=g2&(m2.suspendedLanes|sw)?0:g2)!==0&&g2!==tw.retryLane&&(tw.retryLane=g2,g_(Zy,g2),PS(m2,Zy,g2,-1))}return h3(),yI(Zy,s2,sw,m2=I9(Error(_c(421))))}return g2.data==="$?"?(s2.flags|=128,s2.child=Zy.child,s2=p7.bind(null,Zy),g2._reactRetry=s2,null):(Zy=tw.treeContext,sE=yS(g2.nextSibling),S3=s2,qw=!0,H_=null,Zy!==null&&(r7[r6++]=AS,r7[r6++]=n7,r7[r6++]=V7,AS=Zy.id,n7=Zy.overflow,V7=s2),(s2=M_(s2,m2.children)).flags|=4096,s2)}(n0,y0,yy,H1,$1,nv,H0);if(Ov){Ov=H1.fallback,yy=y0.mode,$1=(nv=n0.child).sibling;var Ty={mode:"hidden",children:H1.children};return!(1&yy)&&y0.child!==nv?((H1=y0.child).childLanes=0,H1.pendingProps=Ty,y0.deletions=null):(H1=tM(nv,Ty)).subtreeFlags=14680064&nv.subtreeFlags,$1!==null?Ov=tM($1,Ov):(Ov=rM(Ov,yy,H0,null)).flags|=2,Ov.return=y0,H1.return=y0,H1.sibling=Ov,y0.child=H1,H1=Ov,Ov=y0.child,yy=(yy=n0.child.memoizedState)===null?MT(H0):{baseLanes:yy.baseLanes|H0,cachePool:null,transitions:yy.transitions},Ov.memoizedState=yy,Ov.childLanes=n0.childLanes&~H0,y0.memoizedState=RT,H1}return n0=(Ov=n0.child).sibling,H1=tM(Ov,{mode:"visible",children:H1.children}),!(1&y0.mode)&&(H1.lanes=H0),H1.return=y0,H1.sibling=null,n0!==null&&((H0=y0.deletions)===null?(y0.deletions=[n0],y0.flags|=16):H0.push(n0)),y0.child=H1,y0.memoizedState=null,H1}function M_(n0,y0){return(y0=SI({mode:"visible",children:y0},n0.mode,0,null)).return=n0,n0.child=y0}function yI(n0,y0,H0,$1){return $1!==null&&n6($1),Cx(y0,n0.child,null,H0),(n0=M_(y0,y0.pendingProps.children)).flags|=2,y0.memoizedState=null,n0}function TP(n0,y0,H0){n0.lanes|=y0;var $1=n0.alternate;$1!==null&&($1.lanes|=y0),H5(n0.return,y0,H0)}function RP(n0,y0,H0,$1,H1){var nv=n0.memoizedState;nv===null?n0.memoizedState={isBackwards:y0,rendering:null,renderingStartTime:0,last:$1,tail:H0,tailMode:H1}:(nv.isBackwards=y0,nv.rendering=null,nv.renderingStartTime=0,nv.last=$1,nv.tail=H0,nv.tailMode=H1)}function Ox(n0,y0,H0){var $1=y0.pendingProps,H1=$1.revealOrder,nv=$1.tail;if(o_(n0,y0,$1.children,H0),(2&($1=K$.current))!=0)$1=1&$1|2,y0.flags|=128;else{if(n0!==null&&128&n0.flags)e:for(n0=y0.child;n0!==null;){if(n0.tag===13)n0.memoizedState!==null&&TP(n0,H0,y0);else if(n0.tag===19)TP(n0,H0,y0);else if(n0.child!==null){n0.child.return=n0,n0=n0.child;continue}if(n0===y0)break e;for(;n0.sibling===null;){if(n0.return===null||n0.return===y0)break e;n0=n0.return}n0.sibling.return=n0.return,n0=n0.sibling}$1&=1}if(O$(K$,$1),(1&y0.mode)==0)y0.memoizedState=null;else switch(H1){case"forwards":for(H0=y0.child,H1=null;H0!==null;)(n0=H0.alternate)!==null&&C8(n0)===null&&(H1=H0),H0=H0.sibling;(H0=H1)===null?(H1=y0.child,y0.child=null):(H1=H0.sibling,H0.sibling=null),RP(y0,!1,H1,H0,nv);break;case"backwards":for(H0=null,H1=y0.child,y0.child=null;H1!==null;){if((n0=H1.alternate)!==null&&C8(n0)===null){y0.child=H1;break}n0=H1.sibling,H1.sibling=H0,H0=H1,H1=n0}RP(y0,!0,H0,null,nv);break;case"together":RP(y0,!1,null,null,void 0);break;default:y0.memoizedState=null}return y0.child}function h6(n0,y0){!(1&y0.mode)&&n0!==null&&(n0.alternate=null,y0.alternate=null,y0.flags|=2)}function p6(n0,y0,H0){if(n0!==null&&(y0.dependencies=n0.dependencies),DA|=y0.lanes,(H0&y0.childLanes)==0)return null;if(n0!==null&&y0.child!==n0.child)throw Error(_c(153));if(y0.child!==null){for(H0=tM(n0=y0.child,n0.pendingProps),y0.child=H0,H0.return=y0;n0.sibling!==null;)n0=n0.sibling,(H0=H0.sibling=tM(n0,n0.pendingProps)).return=y0;H0.sibling=null}return y0.child}function IT(n0,y0){if(!qw)switch(n0.tailMode){case"hidden":y0=n0.tail;for(var H0=null;y0!==null;)y0.alternate!==null&&(H0=y0),y0=y0.sibling;H0===null?n0.tail=null:H0.sibling=null;break;case"collapsed":H0=n0.tail;for(var $1=null;H0!==null;)H0.alternate!==null&&($1=H0),H0=H0.sibling;$1===null?y0||n0.tail===null?n0.tail=null:n0.tail.sibling=null:$1.sibling=null}}function I_(n0){var y0=n0.alternate!==null&&n0.alternate.child===n0.child,H0=0,$1=0;if(y0)for(var H1=n0.child;H1!==null;)H0|=H1.lanes|H1.childLanes,$1|=14680064&H1.subtreeFlags,$1|=14680064&H1.flags,H1.return=n0,H1=H1.sibling;else for(H1=n0.child;H1!==null;)H0|=H1.lanes|H1.childLanes,$1|=H1.subtreeFlags,$1|=H1.flags,H1.return=n0,H1=H1.sibling;return n0.subtreeFlags|=$1,n0.childLanes=H0,y0}function NU(n0,y0,H0){var $1=y0.pendingProps;switch(Y$(y0),y0.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return I_(y0),null;case 1:case 17:return ES(y0.type)&&_9(),I_(y0),null;case 3:return $1=y0.stateNode,C9(),pA($S),pA(n_),T8(),$1.pendingContext&&($1.context=$1.pendingContext,$1.pendingContext=null),n0!==null&&n0.child!==null||(Yw(y0)?y0.flags|=4:n0===null||n0.memoizedState.isDehydrated&&!(256&y0.flags)||(y0.flags|=1024,H_!==null&&(AI(H_),H_=null))),LE(n0,y0),I_(y0),null;case 5:Zw(y0);var H1=k9(l6.current);if(H0=y0.type,n0!==null&&y0.stateNode!=null)a_(n0,y0,H0,$1,H1),n0.ref!==y0.ref&&(y0.flags|=512,y0.flags|=2097152);else{if(!$1){if(y0.stateNode===null)throw Error(_c(166));return I_(y0),null}if(n0=k9(V_.current),Yw(y0)){$1=y0.stateNode,H0=y0.type;var nv=y0.memoizedProps;switch($1[H7]=y0,$1[t6]=nv,n0=(1&y0.mode)!=0,H0){case"dialog":YE("cancel",$1),YE("close",$1);break;case"iframe":case"object":case"embed":YE("load",$1);break;case"video":case"audio":for(H1=0;H1<\/script>",n0=n0.removeChild(n0.firstChild)):typeof $1.is=="string"?n0=Ov.createElement(H0,{is:$1.is}):(n0=Ov.createElement(H0),H0==="select"&&(Ov=n0,$1.multiple?Ov.multiple=!0:$1.size&&(Ov.size=$1.size))):n0=Ov.createElementNS(n0,H0),n0[H7]=y0,n0[t6]=$1,BA(n0,y0,!1,!1),y0.stateNode=n0;e:{switch(Ov=Qw(H0,$1),H0){case"dialog":YE("cancel",n0),YE("close",n0),H1=$1;break;case"iframe":case"object":case"embed":YE("load",n0),H1=$1;break;case"video":case"audio":for(H1=0;H1jx&&(y0.flags|=128,$1=!0,IT(nv,!1),y0.lanes=4194304)}else{if(!$1)if((n0=C8(Ov))!==null){if(y0.flags|=128,$1=!0,(H0=n0.updateQueue)!==null&&(y0.updateQueue=H0,y0.flags|=4),IT(nv,!0),nv.tail===null&&nv.tailMode==="hidden"&&!Ov.alternate&&!qw)return I_(y0),null}else 2*o0()-nv.renderingStartTime>jx&&H0!==1073741824&&(y0.flags|=128,$1=!0,IT(nv,!1),y0.lanes=4194304);nv.isBackwards?(Ov.sibling=y0.child,y0.child=Ov):((H0=nv.last)!==null?H0.sibling=Ov:y0.child=Ov,nv.last=Ov)}return nv.tail!==null?(y0=nv.tail,nv.rendering=y0,nv.tail=y0.sibling,nv.renderingStartTime=o0(),y0.sibling=null,H0=K$.current,O$(K$,$1?1&H0|2:1&H0),y0):(I_(y0),null);case 22:case 23:return mL(),$1=y0.memoizedState!==null,n0!==null&&n0.memoizedState!==null!==$1&&(y0.flags|=8192),$1&&1&y0.mode?1073741824&tS&&(I_(y0),6&y0.subtreeFlags&&(y0.flags|=8192)):I_(y0),null;case 24:case 25:return null}throw Error(_c(156,y0.tag))}function W7(n0,y0){switch(Y$(y0),y0.tag){case 1:return ES(y0.type)&&_9(),65536&(n0=y0.flags)?(y0.flags=-65537&n0|128,y0):null;case 3:return C9(),pA($S),pA(n_),T8(),65536&(n0=y0.flags)&&!(128&n0)?(y0.flags=-65537&n0|128,y0):null;case 5:return Zw(y0),null;case 13:if(pA(K$),(n0=y0.memoizedState)!==null&&n0.dehydrated!==null){if(y0.alternate===null)throw Error(_c(340));K_()}return 65536&(n0=y0.flags)?(y0.flags=-65537&n0|128,y0):null;case 19:return pA(K$),null;case 4:return C9(),null;case 10:return l8(y0.type._context),null;case 22:case 23:return mL(),null;default:return null}}BA=function(n0,y0){for(var H0=y0.child;H0!==null;){if(H0.tag===5||H0.tag===6)n0.appendChild(H0.stateNode);else if(H0.tag!==4&&H0.child!==null){H0.child.return=H0,H0=H0.child;continue}if(H0===y0)break;for(;H0.sibling===null;){if(H0.return===null||H0.return===y0)return;H0=H0.return}H0.sibling.return=H0.return,H0=H0.sibling}},LE=function(){},a_=function(n0,y0,H0,$1){var H1=n0.memoizedProps;if(H1!==$1){n0=y0.stateNode,k9(V_.current);var nv,Ov=null;switch(H0){case"input":H1=gy(n0,H1),$1=gy(n0,$1),Ov=[];break;case"select":H1=Q0({},H1,{value:void 0}),$1=Q0({},$1,{value:void 0}),Ov=[];break;case"textarea":H1=cy(n0,H1),$1=cy(n0,$1),Ov=[];break;default:typeof H1.onClick!="function"&&typeof $1.onClick=="function"&&(n0.onclick=S8)}for(Zy in F2(H0,$1),H0=null,H1)if(!$1.hasOwnProperty(Zy)&&H1.hasOwnProperty(Zy)&&H1[Zy]!=null)if(Zy==="style"){var yy=H1[Zy];for(nv in yy)yy.hasOwnProperty(nv)&&(H0||(H0={}),H0[nv]="")}else Zy!=="dangerouslySetInnerHTML"&&Zy!=="children"&&Zy!=="suppressContentEditableWarning"&&Zy!=="suppressHydrationWarning"&&Zy!=="autoFocus"&&(Mu.hasOwnProperty(Zy)?Ov||(Ov=[]):(Ov=Ov||[]).push(Zy,null));for(Zy in $1){var Ty=$1[Zy];if(yy=H1!=null?H1[Zy]:void 0,$1.hasOwnProperty(Zy)&&Ty!==yy&&(Ty!=null||yy!=null))if(Zy==="style")if(yy){for(nv in yy)!yy.hasOwnProperty(nv)||Ty&&Ty.hasOwnProperty(nv)||(H0||(H0={}),H0[nv]="");for(nv in Ty)Ty.hasOwnProperty(nv)&&yy[nv]!==Ty[nv]&&(H0||(H0={}),H0[nv]=Ty[nv])}else H0||(Ov||(Ov=[]),Ov.push(Zy,H0)),H0=Ty;else Zy==="dangerouslySetInnerHTML"?(Ty=Ty?Ty.__html:void 0,yy=yy?yy.__html:void 0,Ty!=null&&yy!==Ty&&(Ov=Ov||[]).push(Zy,Ty)):Zy==="children"?typeof Ty!="string"&&typeof Ty!="number"||(Ov=Ov||[]).push(Zy,""+Ty):Zy!=="suppressContentEditableWarning"&&Zy!=="suppressHydrationWarning"&&(Mu.hasOwnProperty(Zy)?(Ty!=null&&Zy==="onScroll"&&YE("scroll",n0),Ov||yy===Ty||(Ov=[])):(Ov=Ov||[]).push(Zy,Ty))}H0&&(Ov=Ov||[]).push("style",H0);var Zy=Ov;(y0.updateQueue=Zy)&&(y0.flags|=4)}},T$=function(n0,y0,H0,$1){H0!==$1&&(y0.flags|=4)};var G7=!1,HA=!1,MP=typeof WeakSet=="function"?WeakSet:Set,y3=null;function CS(n0,y0){var H0=n0.ref;if(H0!==null)if(typeof H0=="function")try{H0(null)}catch($1){SE(n0,y0,$1)}else H0.current=null}function M8(n0,y0,H0){try{H0()}catch($1){SE(n0,y0,$1)}}var O9=!1;function Y5(n0,y0,H0){var $1=y0.updateQueue;if(($1=$1!==null?$1.lastEffect:null)!==null){var H1=$1=$1.next;do{if((H1.tag&n0)===n0){var nv=H1.destroy;H1.destroy=void 0,nv!==void 0&&M8(y0,H0,nv)}H1=H1.next}while(H1!==$1)}}function OT(n0,y0){if((y0=(y0=y0.updateQueue)!==null?y0.lastEffect:null)!==null){var H0=y0=y0.next;do{if((H0.tag&n0)===n0){var $1=H0.create;H0.destroy=$1()}H0=H0.next}while(H0!==y0)}}function Z5(n0){var y0=n0.ref;if(y0!==null){var H0=n0.stateNode;n0.tag,n0=H0,typeof y0=="function"?y0(n0):y0.current=n0}}function IP(n0){var y0=n0.alternate;y0!==null&&(n0.alternate=null,IP(y0)),n0.child=null,n0.deletions=null,n0.sibling=null,n0.tag===5&&(y0=n0.stateNode)!==null&&(delete y0[H7],delete y0[t6],delete y0[gP],delete y0[uD],delete y0[PU]),n0.stateNode=null,n0.return=null,n0.dependencies=null,n0.memoizedProps=null,n0.memoizedState=null,n0.pendingProps=null,n0.stateNode=null,n0.updateQueue=null}function PT(n0){return n0.tag===5||n0.tag===3||n0.tag===4}function Y7(n0){e:for(;;){for(;n0.sibling===null;){if(n0.return===null||PT(n0.return))return null;n0=n0.return}for(n0.sibling.return=n0.return,n0=n0.sibling;n0.tag!==5&&n0.tag!==6&&n0.tag!==18;){if(2&n0.flags||n0.child===null||n0.tag===4)continue e;n0.child.return=n0,n0=n0.child}if(!(2&n0.flags))return n0.stateNode}}function SC(n0,y0,H0){var $1=n0.tag;if($1===5||$1===6)n0=n0.stateNode,y0?H0.nodeType===8?H0.parentNode.insertBefore(n0,y0):H0.insertBefore(n0,y0):(H0.nodeType===8?(y0=H0.parentNode).insertBefore(n0,H0):(y0=H0).appendChild(n0),(H0=H0._reactRootContainer)!=null||y0.onclick!==null||(y0.onclick=S8));else if($1!==4&&(n0=n0.child)!==null)for(SC(n0,y0,H0),n0=n0.sibling;n0!==null;)SC(n0,y0,H0),n0=n0.sibling}function Z7(n0,y0,H0){var $1=n0.tag;if($1===5||$1===6)n0=n0.stateNode,y0?H0.insertBefore(n0,y0):H0.appendChild(n0);else if($1!==4&&(n0=n0.child)!==null)for(Z7(n0,y0,H0),n0=n0.sibling;n0!==null;)Z7(n0,y0,H0),n0=n0.sibling}var c8=null,TS=!1;function RS(n0,y0,H0){for(H0=H0.child;H0!==null;)hD(n0,y0,H0),H0=H0.sibling}function hD(n0,y0,H0){if(A1&&typeof A1.onCommitFiberUnmount=="function")try{A1.onCommitFiberUnmount(L1,H0)}catch{}switch(H0.tag){case 5:HA||CS(H0,y0);case 6:var $1=c8,H1=TS;c8=null,RS(n0,y0,H0),TS=H1,(c8=$1)!==null&&(TS?(n0=c8,H0=H0.stateNode,n0.nodeType===8?n0.parentNode.removeChild(H0):n0.removeChild(H0)):c8.removeChild(H0.stateNode));break;case 18:c8!==null&&(TS?(n0=c8,H0=H0.stateNode,n0.nodeType===8?mP(n0.parentNode,H0):n0.nodeType===1&&mP(n0,H0),W3(n0)):mP(c8,H0.stateNode));break;case 4:$1=c8,H1=TS,c8=H0.stateNode.containerInfo,TS=!0,RS(n0,y0,H0),c8=$1,TS=H1;break;case 0:case 11:case 14:case 15:if(!HA&&($1=H0.updateQueue)!==null&&($1=$1.lastEffect)!==null){H1=$1=$1.next;do{var nv=H1,Ov=nv.destroy;nv=nv.tag,Ov!==void 0&&(2&nv||4&nv)&&M8(H0,y0,Ov),H1=H1.next}while(H1!==$1)}RS(n0,y0,H0);break;case 1:if(!HA&&(CS(H0,y0),typeof($1=H0.stateNode).componentWillUnmount=="function"))try{$1.props=H0.memoizedProps,$1.state=H0.memoizedState,$1.componentWillUnmount()}catch(yy){SE(H0,y0,yy)}RS(n0,y0,H0);break;case 21:RS(n0,y0,H0);break;case 22:1&H0.mode?(HA=($1=HA)||H0.memoizedState!==null,RS(n0,y0,H0),HA=$1):RS(n0,y0,H0);break;default:RS(n0,y0,H0)}}function pD(n0){var y0=n0.updateQueue;if(y0!==null){n0.updateQueue=null;var H0=n0.stateNode;H0===null&&(H0=n0.stateNode=new MP),y0.forEach(function($1){var H1=j9.bind(null,n0,$1);H0.has($1)||(H0.add($1),$1.then(H1,H1))})}}function J7(n0,y0){var H0=y0.deletions;if(H0!==null)for(var $1=0;$1H1&&(H1=Ov),$1&=~nv}if($1=H1,10<($1=(120>($1=o0()-$1)?120:480>$1?480:1080>$1?1080:1920>$1?1920:3e3>$1?3e3:4320>$1?4320:1960*LU($1/1960))-$1)){n0.timeoutHandle=yT(v6.bind(null,n0,O8,m6),$1);break}v6(n0,O8,m6);break;default:throw Error(_c(329))}}}return P8(n0,o0()),n0.callbackNode===H0?pL.bind(null,n0):null}function rO(n0,y0){var H0=I8;return n0.current.memoizedState.isDehydrated&&(P9(n0,y0).flags|=256),(n0=zT(n0,y0))!==2&&(y0=O8,O8=H0,y0!==null&&AI(y0)),n0}function AI(n0){O8===null?O8=n0:O8.push.apply(O8,n0)}function f8(n0,y0){for(y0&=~eO,y0&=~KA,n0.suspendedLanes|=y0,n0.pingedLanes&=~y0,n0=n0.expirationTimes;0n0?16:n0,BT===null)var $1=!1;else{if(n0=BT,BT=null,DT=0,(6&fE)!=0)throw Error(_c(331));var H1=fE;for(fE|=4,y3=n0.current;y3!==null;){var nv=y3,Ov=nv.child;if(16&y3.flags){var yy=nv.deletions;if(yy!==null){for(var Ty=0;Tyo0()-tO?P9(n0,0):eO|=H0),P8(n0,y0)}function yD(n0,y0){y0===0&&(1&n0.mode?(y0=iv,!(130023424&(iv<<=1))&&(iv=4194304)):y0=1);var H0=rE();(n0=g_(n0,y0))!==null&&(ey(n0,y0,H0),P8(n0,H0))}function p7(n0){var y0=n0.memoizedState,H0=0;y0!==null&&(H0=y0.retryLane),yD(n0,H0)}function j9(n0,y0){var H0=0;switch(n0.tag){case 13:var $1=n0.stateNode,H1=n0.memoizedState;H1!==null&&(H0=H1.retryLane);break;case 19:$1=n0.stateNode;break;default:throw Error(_c(314))}$1!==null&&$1.delete(y0),yD(n0,H0)}function L9(n0,y0){return f0(n0,y0)}function bD(n0,y0,H0,$1){this.tag=n0,this.key=H0,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=y0,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=$1,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function y6(n0,y0,H0,$1){return new bD(n0,y0,H0,$1)}function j8(n0){return!(!(n0=n0.prototype)||!n0.isReactComponent)}function tM(n0,y0){var H0=n0.alternate;return H0===null?((H0=y6(n0.tag,y0,n0.key,n0.mode)).elementType=n0.elementType,H0.type=n0.type,H0.stateNode=n0.stateNode,H0.alternate=n0,n0.alternate=H0):(H0.pendingProps=y0,H0.type=n0.type,H0.flags=0,H0.subtreeFlags=0,H0.deletions=null),H0.flags=14680064&n0.flags,H0.childLanes=n0.childLanes,H0.lanes=n0.lanes,H0.child=n0.child,H0.memoizedProps=n0.memoizedProps,H0.memoizedState=n0.memoizedState,H0.updateQueue=n0.updateQueue,y0=n0.dependencies,H0.dependencies=y0===null?null:{lanes:y0.lanes,firstContext:y0.firstContext},H0.sibling=n0.sibling,H0.index=n0.index,H0.ref=n0.ref,H0}function m7(n0,y0,H0,$1,H1,nv){var Ov=2;if($1=n0,typeof n0=="function")j8(n0)&&(Ov=1);else if(typeof n0=="string")Ov=5;else e:switch(n0){case oy:return rM(H0.children,H1,nv,y0);case fy:Ov=8,H1|=8;break;case Fy:return(n0=y6(12,H0,y0,2|H1)).elementType=Fy,n0.lanes=nv,n0;case X0:return(n0=y6(13,H0,y0,H1)).elementType=X0,n0.lanes=nv,n0;case s0:return(n0=y6(19,H0,y0,H1)).elementType=s0,n0.lanes=nv,n0;case c0:return SI(H0,H1,nv,y0);default:if(typeof n0=="object"&&n0!==null)switch(n0.$$typeof){case qv:Ov=10;break e;case Qv:Ov=9;break e;case T0:Ov=11;break e;case g0:Ov=14;break e;case d0:Ov=16,$1=null;break e}throw Error(_c(130,n0==null?n0:typeof n0,""))}return(y0=y6(Ov,H0,y0,H1)).elementType=n0,y0.type=$1,y0.lanes=nv,y0}function rM(n0,y0,H0,$1){return(n0=y6(7,n0,$1,y0)).lanes=H0,n0}function SI(n0,y0,H0,$1){return(n0=y6(22,n0,$1,y0)).elementType=c0,n0.lanes=H0,n0.stateNode={isHidden:!1},n0}function nO(n0,y0,H0){return(n0=y6(6,n0,null,y0)).lanes=H0,n0}function iO(n0,y0,H0){return(y0=y6(4,n0.children!==null?n0.children:[],n0.key,y0)).lanes=H0,y0.stateNode={containerInfo:n0.containerInfo,pendingChildren:null,implementation:n0.implementation},y0}function jP(n0,y0,H0,$1,H1){this.tag=y0,this.containerInfo=n0,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zv(0),this.expirationTimes=zv(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zv(0),this.identifierPrefix=$1,this.onRecoverableError=H1,this.mutableSourceEagerHydrationData=null}function xI(n0,y0,H0,$1,H1,nv,Ov,yy,Ty){return n0=new jP(n0,y0,H0,yy,Ty),y0===1?(y0=1,nv===!0&&(y0|=8)):y0=0,nv=y6(3,null,null,y0),n0.current=nv,nv.stateNode=n0,nv.memoizedState={element:$1,isDehydrated:H0,cache:null,transitions:null,pendingSuspenseBoundaries:null},s7(nv),n0}function LK(n0){if(!n0)return _C;e:{if(ny(n0=n0._reactInternals)!==n0||n0.tag!==1)throw Error(_c(170));var y0=n0;do{switch(y0.tag){case 3:y0=y0.stateNode.context;break e;case 1:if(ES(y0.type)){y0=y0.stateNode.__reactInternalMemoizedMergedChildContext;break e}}y0=y0.return}while(y0!==null);throw Error(_c(171))}if(n0.tag===1){var H0=n0.type;if(ES(H0))return _x(n0,H0,y0)}return y0}function NP(n0,y0,H0,$1,H1,nv,Ov,yy,Ty){return(n0=xI(H0,$1,!0,n0,0,nv,0,yy,Ty)).context=LK(null),H0=n0.current,(nv=o6($1=rE(),H1=Nx(H0))).callback=y0??null,k8(H0,nv,H1),n0.current.lanes=H1,ey(n0,H1,$1),P8(n0,$1),n0}function LP(n0,y0,H0,$1){var H1=y0.current,nv=rE(),Ov=Nx(H1);return H0=LK(H0),y0.context===null?y0.context=H0:y0.pendingContext=H0,(y0=o6(nv,Ov)).payload={element:n0},($1=$1===void 0?null:$1)!==null&&(y0.callback=$1),(n0=k8(H1,y0,Ov))!==null&&(PS(n0,H1,Ov,nv),l7(n0,H1,Ov)),Ov}function g7(n0){return(n0=n0.current).child?(n0.child.tag,n0.child.stateNode):null}function P$(n0,y0){if((n0=n0.memoizedState)!==null&&n0.dehydrated!==null){var H0=n0.retryLane;n0.retryLane=H0!==0&&H01?e0-1:0),Y0=1;Y01?e0-1:0),Y0=1;Y0"u"||window.document===void 0||window.document.createElement===void 0),Av=Object.prototype.hasOwnProperty;function Dv(Lu){return typeof Symbol=="function"&&Symbol.toStringTag&&Lu[Symbol.toStringTag]||Lu.constructor.name||"Object"}function ry(Lu){try{return Jv(Lu),!1}catch{return!0}}function Jv(Lu){return""+Lu}function Fv(Lu,e0){if(ry(Lu))return Su("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before before using it here.",e0,Dv(Lu)),Jv(Lu)}function iy(Lu){if(ry(Lu))return Su("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before before using it here.",Dv(Lu)),Jv(Lu)}var cy=0,Uy=3,r2=4,f2=5,j2=6,mw=":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",p2=mw+"\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040",Vw=new RegExp("^["+mw+"]["+p2+"]*$"),Ew={},q2={};function $3(Lu){return!!Av.call(q2,Lu)||!Av.call(Ew,Lu)&&(Vw.test(Lu)?(q2[Lu]=!0,!0):(Ew[Lu]=!0,Su("Invalid attribute name: `%s`",Lu),!1))}function Rw(Lu,e0,P0){return e0!==null?e0.type===cy:!P0&&Lu.length>2&&(Lu[0]==="o"||Lu[0]==="O")&&(Lu[1]==="n"||Lu[1]==="N")}function K2(Lu,e0,P0,Y0){if(P0!==null&&P0.type===cy)return!1;switch(typeof e0){case"function":case"symbol":return!0;case"boolean":if(Y0)return!1;if(P0!==null)return!P0.acceptsBooleans;var s1=Lu.toLowerCase().slice(0,5);return s1!=="data-"&&s1!=="aria-";default:return!1}}function Xw(Lu,e0,P0,Y0){if(e0==null||K2(Lu,e0,P0,Y0))return!0;if(Y0)return!1;if(P0!==null)switch(P0.type){case Uy:return!e0;case r2:return e0===!1;case f2:return isNaN(e0);case j2:return isNaN(e0)||e0<1}return!1}function a3(Lu){return Qw.hasOwnProperty(Lu)?Qw[Lu]:null}function F2(Lu,e0,P0,Y0,s1,P1,Z1){this.acceptsBooleans=e0===2||e0===Uy||e0===r2,this.attributeName=Y0,this.attributeNamespace=s1,this.mustUseProperty=P0,this.propertyName=Lu,this.type=e0,this.sanitizeURL=P1,this.removeEmptyString=Z1}var Qw={};["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"].forEach(function(Lu){Qw[Lu]=new F2(Lu,cy,!1,Lu,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(Lu){var e0=Lu[0],P0=Lu[1];Qw[e0]=new F2(e0,1,!1,P0,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(Lu){Qw[Lu]=new F2(Lu,2,!1,Lu.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(Lu){Qw[Lu]=new F2(Lu,2,!1,Lu,null,!1,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(Lu){Qw[Lu]=new F2(Lu,Uy,!1,Lu.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(Lu){Qw[Lu]=new F2(Lu,Uy,!0,Lu,null,!1,!1)}),["capture","download"].forEach(function(Lu){Qw[Lu]=new F2(Lu,r2,!1,Lu,null,!1,!1)}),["cols","rows","size","span"].forEach(function(Lu){Qw[Lu]=new F2(Lu,j2,!1,Lu,null,!1,!1)}),["rowSpan","start"].forEach(function(Lu){Qw[Lu]=new F2(Lu,f2,!1,Lu.toLowerCase(),null,!1,!1)});var vt=/[\-\:]([a-z])/g,wt=function(Lu){return Lu[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(Lu){var e0=Lu.replace(vt,wt);Qw[e0]=new F2(e0,1,!1,Lu,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(Lu){var e0=Lu.replace(vt,wt);Qw[e0]=new F2(e0,1,!1,Lu,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(Lu){var e0=Lu.replace(vt,wt);Qw[e0]=new F2(e0,1,!1,Lu,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(Lu){Qw[Lu]=new F2(Lu,1,!1,Lu.toLowerCase(),null,!1,!1)}),Qw.xlinkHref=new F2("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(Lu){Qw[Lu]=new F2(Lu,1,!1,Lu.toLowerCase(),null,!0,!0)});var Ws=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,pu=!1;function Ru(Lu){!pu&&Ws.test(Lu)&&(pu=!0,Su("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(Lu)))}function wu(Lu,e0,P0,Y0){if(Y0.mustUseProperty)return Lu[Y0.propertyName];Fv(P0,e0),Y0.sanitizeURL&&Ru(""+P0);var s1=Y0.attributeName,P1=null;if(Y0.type===r2){if(Lu.hasAttribute(s1)){var Z1=Lu.getAttribute(s1);return Z1===""||(Xw(e0,P0,Y0,!1)?Z1:Z1===""+P0?P0:Z1)}}else if(Lu.hasAttribute(s1)){if(Xw(e0,P0,Y0,!1))return Lu.getAttribute(s1);if(Y0.type===Uy)return P0;P1=Lu.getAttribute(s1)}return Xw(e0,P0,Y0,!1)?P1===null?P0:P1:P1===""+P0?P0:P1}function t0(Lu,e0,P0,Y0){if($3(e0)){if(!Lu.hasAttribute(e0))return P0===void 0?void 0:null;var s1=Lu.getAttribute(e0);return Fv(P0,e0),s1===""+P0?P0:s1}}function m0(Lu,e0,P0,Y0){var s1=a3(e0);if(!Rw(e0,s1,Y0))if(Xw(e0,P0,s1,Y0)&&(P0=null),Y0||s1===null){if($3(e0)){var P1=e0;P0===null?Lu.removeAttribute(P1):(Fv(P0,e0),Lu.setAttribute(P1,""+P0))}}else if(s1.mustUseProperty){var Z1=s1.propertyName;if(P0===null){var vv=s1.type;Lu[Z1]=vv!==Uy&&""}else Lu[Z1]=P0}else{var Ev=s1.attributeName,jv=s1.attributeNamespace;if(P0===null)Lu.removeAttribute(Ev);else{var sy,ky=s1.type;ky===Uy||ky===r2&&P0===!0?sy="":(Fv(P0,Ev),sy=""+P0,s1.sanitizeURL&&Ru(sy.toString())),jv?Lu.setAttributeNS(jv,Ev,sy):Lu.setAttribute(Ev,sy)}}}var k0=Symbol.for("react.element"),_0=Symbol.for("react.portal"),R0=Symbol.for("react.fragment"),N0=Symbol.for("react.strict_mode"),l1=Symbol.for("react.profiler"),a1=Symbol.for("react.provider"),x1=Symbol.for("react.context"),K1=Symbol.for("react.forward_ref"),W1=Symbol.for("react.suspense"),_g=Symbol.for("react.suspense_list"),uv=Symbol.for("react.memo"),Tv=Symbol.for("react.lazy"),Uv=Symbol.for("react.offscreen"),Wv=Symbol.iterator,ny="@@iterator";function Rv(Lu){if(Lu===null||typeof Lu!="object")return null;var e0=Wv&&Lu[Wv]||Lu[ny];return typeof e0=="function"?e0:null}var Gv,C0,J0,f0,v0,h0,u0,o0=Object.assign,x0=0;function U0(){}U0.__reactDisabledLog=!0;var e1,h1=_c.ReactCurrentDispatcher;function k1(Lu,e0,P0){if(e1===void 0)try{throw Error()}catch(s1){var Y0=s1.stack.trim().match(/\n( *(at )?)/);e1=Y0&&Y0[1]||""}return` +`+nv.stack}return{value:i0,source:b0,stack:H1,digest:null}}function I9(i0,b0,H0){return{value:i0,source:null,stack:H0??null,digest:b0??null}}function xP(i0,b0){try{console.error(b0.value)}catch(H0){setTimeout(function(){throw H0})}}var q5=typeof WeakMap=="function"?WeakMap:Map;function d6(i0,b0,H0){(H0=o6(-1,H0)).tag=3,H0.payload={element:null};var $1=b0.value;return H0.callback=function(){$I||($I=!0,jT=$1),xP(0,b0)},H0}function eS(i0,b0,H0){(H0=o6(-1,H0)).tag=3;var $1=i0.type.getDerivedStateFromError;if(typeof $1=="function"){var H1=b0.value;H0.payload=function(){return $1(H1)},H0.callback=function(){xP(0,b0)}}var nv=i0.stateNode;return nv!==null&&typeof nv.componentDidCatch=="function"&&(H0.callback=function(){xP(0,b0),typeof $1!="function"&&(NT===null?NT=new Set([this]):NT.add(this));var Ov=b0.stack;this.componentDidCatch(b0.value,{componentStack:Ov!==null?Ov:""})}),H0}function W5(i0,b0,H0){var $1=i0.pingCache;if($1===null){$1=i0.pingCache=new q5;var H1=new Set;$1.set(b0,H1)}else(H1=$1.get(b0))===void 0&&(H1=new Set,$1.set(b0,H1));H1.has(H0)||(H1.add(H0),i0=PP.bind(null,i0,b0,H0),b0.then(i0,i0))}function C$(i0){do{var b0;if((b0=i0.tag===13)&&(b0=(b0=i0.memoizedState)===null||b0.dehydrated!==null),b0)return i0;i0=i0.return}while(i0!==null);return null}function TT(i0,b0,H0,$1,H1){return 1&i0.mode?(i0.flags|=65536,i0.lanes=H1,i0):(i0===b0?i0.flags|=65536:(i0.flags|=128,H0.flags|=131072,H0.flags&=-52805,H0.tag===1&&(H0.alternate===null?H0.tag=17:((b0=o6(-1,1)).tag=2,k8(H0,b0,1))),H0.lanes|=1),i0)}var YR=gv.ReactCurrentOwner,gA=!1;function o_(i0,b0,H0,$1){b0.child=i0===null?qR(b0,null,H0,$1):Cx(b0,i0.child,H0,$1)}function ZR(i0,b0,H0,$1,H1){H0=H0.render;var nv=b0.ref;return KR(b0,H1),$1=h$(i0,b0,H0,$1,nv,H1),H0=tE(),i0===null||gA?(qw&&H0&&g$(b0),b0.flags|=1,o_(i0,b0,$1,H1),b0.child):(b0.updateQueue=i0.updateQueue,b0.flags&=-2053,i0.lanes&=~H1,p6(i0,b0,H1))}function JR(i0,b0,H0,$1,H1){if(i0===null){var nv=H0.type;return typeof nv!="function"||j8(nv)||nv.defaultProps!==void 0||H0.compare!==null||H0.defaultProps!==void 0?((i0=m7(H0.type,null,$1,b0,b0.mode,H1)).ref=b0.ref,i0.return=b0,b0.child=i0):(b0.tag=15,b0.type=nv,kP(i0,b0,nv,$1,H1))}if(nv=i0.child,(i0.lanes&H1)==0){var Ov=nv.memoizedProps;if((H0=(H0=H0.compare)!==null?H0:D7)(Ov,$1)&&i0.ref===b0.ref)return p6(i0,b0,H1)}return b0.flags|=1,(i0=tM(nv,$1)).ref=b0.ref,i0.return=b0,b0.child=i0}function kP(i0,b0,H0,$1,H1){if(i0!==null){var nv=i0.memoizedProps;if(D7(nv,$1)&&i0.ref===b0.ref){if(gA=!1,b0.pendingProps=$1=nv,(i0.lanes&H1)==0)return b0.lanes=i0.lanes,p6(i0,b0,H1);131072&i0.flags&&(gA=!0)}}return CP(i0,b0,H0,$1,H1)}function AA(i0,b0,H0){var $1=b0.pendingProps,H1=$1.children,nv=i0!==null?i0.memoizedState:null;if($1.mode==="hidden")if(!(1&b0.mode))b0.memoizedState={baseLanes:0,cachePool:null,transitions:null},O$(Q7,tS),tS|=H0;else{if(!(1073741824&H0))return i0=nv!==null?nv.baseLanes|H0:H0,b0.lanes=b0.childLanes=1073741824,b0.memoizedState={baseLanes:i0,cachePool:null,transitions:null},b0.updateQueue=null,O$(Q7,tS),tS|=i0,null;b0.memoizedState={baseLanes:0,cachePool:null,transitions:null},$1=nv!==null?nv.baseLanes:H0,O$(Q7,tS),tS|=$1}else nv!==null?($1=nv.baseLanes|H0,b0.memoizedState=null):$1=H0,O$(Q7,tS),tS|=$1;return o_(i0,b0,H1,H0),b0.child}function XR(i0,b0){var H0=b0.ref;(i0===null&&H0!==null||i0!==null&&i0.ref!==H0)&&(b0.flags|=512,b0.flags|=2097152)}function CP(i0,b0,H0,$1,H1){var nv=ES(H0)?x8:n_.current;return nv=cI(b0,nv),KR(b0,H1),H0=h$(i0,b0,H0,$1,nv,H1),$1=tE(),i0===null||gA?(qw&&$1&&g$(b0),b0.flags|=1,o_(i0,b0,H0,H1),b0.child):(b0.updateQueue=i0.updateQueue,b0.flags&=-2053,i0.lanes&=~H1,p6(i0,b0,H1))}function G5(i0,b0,H0,$1,H1){if(ES(H0)){var nv=!0;x_(b0)}else nv=!1;if(KR(b0,H1),b0.stateNode===null)h6(i0,b0),ZE(b0,H0,$1),JE(b0,H0,$1,H1),$1=!0;else if(i0===null){var Ov=b0.stateNode,yy=b0.memoizedProps;Ov.props=yy;var Ty=Ov.context,Zy=H0.contextType;Zy=typeof Zy=="object"&&Zy!==null?Y8(Zy):cI(b0,Zy=ES(H0)?x8:n_.current);var s2=H0.getDerivedStateFromProps,b2=typeof s2=="function"||typeof Ov.getSnapshotBeforeUpdate=="function";b2||typeof Ov.UNSAFE_componentWillReceiveProps!="function"&&typeof Ov.componentWillReceiveProps!="function"||(yy!==$1||Ty!==Zy)&&s6(b0,Ov,$1,Zy),i6=!1;var m2=b0.memoizedState;Ov.state=m2,kx(b0,$1,Ov,H1),Ty=b0.memoizedState,yy!==$1||m2!==Ty||$S.current||i6?(typeof s2=="function"&&(ET(b0,H0,s2,$1),Ty=b0.memoizedState),(yy=i6||EA(b0,H0,yy,$1,m2,Ty,Zy))?(b2||typeof Ov.UNSAFE_componentWillMount!="function"&&typeof Ov.componentWillMount!="function"||(typeof Ov.componentWillMount=="function"&&Ov.componentWillMount(),typeof Ov.UNSAFE_componentWillMount=="function"&&Ov.UNSAFE_componentWillMount()),typeof Ov.componentDidMount=="function"&&(b0.flags|=4194308)):(typeof Ov.componentDidMount=="function"&&(b0.flags|=4194308),b0.memoizedProps=$1,b0.memoizedState=Ty),Ov.props=$1,Ov.state=Ty,Ov.context=Zy,$1=yy):(typeof Ov.componentDidMount=="function"&&(b0.flags|=4194308),$1=!1)}else{Ov=b0.stateNode,$T(i0,b0),yy=b0.memoizedProps,Zy=b0.type===b0.elementType?yy:LA(b0.type,yy),Ov.props=Zy,b2=b0.pendingProps,m2=Ov.context,Ty=typeof(Ty=H0.contextType)=="object"&&Ty!==null?Y8(Ty):cI(b0,Ty=ES(H0)?x8:n_.current);var g2=H0.getDerivedStateFromProps;(s2=typeof g2=="function"||typeof Ov.getSnapshotBeforeUpdate=="function")||typeof Ov.UNSAFE_componentWillReceiveProps!="function"&&typeof Ov.componentWillReceiveProps!="function"||(yy!==b2||m2!==Ty)&&s6(b0,Ov,$1,Ty),i6=!1,m2=b0.memoizedState,Ov.state=m2,kx(b0,$1,Ov,H1);var tw=b0.memoizedState;yy!==b2||m2!==tw||$S.current||i6?(typeof g2=="function"&&(ET(b0,H0,g2,$1),tw=b0.memoizedState),(Zy=i6||EA(b0,H0,Zy,$1,m2,tw,Ty)||!1)?(s2||typeof Ov.UNSAFE_componentWillUpdate!="function"&&typeof Ov.componentWillUpdate!="function"||(typeof Ov.componentWillUpdate=="function"&&Ov.componentWillUpdate($1,tw,Ty),typeof Ov.UNSAFE_componentWillUpdate=="function"&&Ov.UNSAFE_componentWillUpdate($1,tw,Ty)),typeof Ov.componentDidUpdate=="function"&&(b0.flags|=4),typeof Ov.getSnapshotBeforeUpdate=="function"&&(b0.flags|=1024)):(typeof Ov.componentDidUpdate!="function"||yy===i0.memoizedProps&&m2===i0.memoizedState||(b0.flags|=4),typeof Ov.getSnapshotBeforeUpdate!="function"||yy===i0.memoizedProps&&m2===i0.memoizedState||(b0.flags|=1024),b0.memoizedProps=$1,b0.memoizedState=tw),Ov.props=$1,Ov.state=tw,Ov.context=Ty,$1=Zy):(typeof Ov.componentDidUpdate!="function"||yy===i0.memoizedProps&&m2===i0.memoizedState||(b0.flags|=4),typeof Ov.getSnapshotBeforeUpdate!="function"||yy===i0.memoizedProps&&m2===i0.memoizedState||(b0.flags|=1024),$1=!1)}return Ix(i0,b0,H0,$1,nv,H1)}function Ix(i0,b0,H0,$1,H1,nv){XR(i0,b0);var Ov=(128&b0.flags)!=0;if(!$1&&!Ov)return H1&&u3(b0,H0,!1),p6(i0,b0,nv);$1=b0.stateNode,YR.current=b0;var yy=Ov&&typeof H0.getDerivedStateFromError!="function"?null:$1.render();return b0.flags|=1,i0!==null&&Ov?(b0.child=Cx(b0,i0.child,null,nv),b0.child=Cx(b0,null,yy,nv)):o_(i0,b0,yy,nv),b0.memoizedState=$1.state,H1&&u3(b0,H0,!0),b0.child}function vI(i0){var b0=i0.stateNode;b0.pendingContext?zR(0,b0.pendingContext,b0.pendingContext!==b0.context):b0.context&&zR(0,b0.context,!1),$P(i0,b0.containerInfo)}function d7(i0,b0,H0,$1,H1){return K_(),n6(H1),b0.flags|=256,o_(i0,b0,H0,$1),b0.child}var BA,LE,a_,T$,RT={dehydrated:null,treeContext:null,retryLane:0};function MT(i0){return{baseLanes:i0,cachePool:null,transitions:null}}function dD(i0,b0,H0){var $1,H1=b0.pendingProps,nv=K$.current,Ov=!1,yy=(128&b0.flags)!=0;if(($1=yy)||($1=(i0===null||i0.memoizedState!==null)&&(2&nv)!=0),$1?(Ov=!0,b0.flags&=-129):i0!==null&&i0.memoizedState===null||(nv|=1),O$(K$,1&nv),i0===null)return rw(b0),(i0=b0.memoizedState)!==null&&(i0=i0.dehydrated)!==null?(1&b0.mode?i0.data==="$!"?b0.lanes=8:b0.lanes=1073741824:b0.lanes=1,null):(yy=H1.children,i0=H1.fallback,Ov?(H1=b0.mode,Ov=b0.child,yy={mode:"hidden",children:yy},!(1&H1)&&Ov!==null?(Ov.childLanes=0,Ov.pendingProps=yy):Ov=SI(yy,H1,0,null),i0=rM(i0,H1,H0,null),Ov.return=b0,i0.return=b0,Ov.sibling=i0,b0.child=Ov,b0.child.memoizedState=MT(H0),b0.memoizedState=RT,i0):M_(b0,yy));if((nv=i0.memoizedState)!==null&&($1=nv.dehydrated)!==null)return function(Zy,s2,b2,m2,g2,tw,sw){if(b2)return 256&s2.flags?(s2.flags&=-257,yI(Zy,s2,sw,m2=I9(Error(_c(422))))):s2.memoizedState!==null?(s2.child=Zy.child,s2.flags|=128,null):(tw=m2.fallback,g2=s2.mode,m2=SI({mode:"visible",children:m2.children},g2,0,null),(tw=rM(tw,g2,sw,null)).flags|=2,m2.return=s2,tw.return=s2,m2.sibling=tw,s2.child=m2,1&s2.mode&&Cx(s2,Zy.child,null,sw),s2.child.memoizedState=MT(sw),s2.memoizedState=RT,tw);if(!(1&s2.mode))return yI(Zy,s2,sw,null);if(g2.data==="$!"){if(m2=g2.nextSibling&&g2.nextSibling.dataset)var c2=m2.dgst;return m2=c2,yI(Zy,s2,sw,m2=I9(tw=Error(_c(419)),m2,void 0))}if(c2=(sw&Zy.childLanes)!=0,gA||c2){if((m2=u8)!==null){switch(sw&-sw){case 4:g2=2;break;case 16:g2=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:g2=32;break;case 536870912:g2=268435456;break;default:g2=0}(g2=g2&(m2.suspendedLanes|sw)?0:g2)!==0&&g2!==tw.retryLane&&(tw.retryLane=g2,g_(Zy,g2),PS(m2,Zy,g2,-1))}return h3(),yI(Zy,s2,sw,m2=I9(Error(_c(421))))}return g2.data==="$?"?(s2.flags|=128,s2.child=Zy.child,s2=p7.bind(null,Zy),g2._reactRetry=s2,null):(Zy=tw.treeContext,sE=yS(g2.nextSibling),S3=s2,qw=!0,H_=null,Zy!==null&&(r7[r6++]=AS,r7[r6++]=n7,r7[r6++]=V7,AS=Zy.id,n7=Zy.overflow,V7=s2),(s2=M_(s2,m2.children)).flags|=4096,s2)}(i0,b0,yy,H1,$1,nv,H0);if(Ov){Ov=H1.fallback,yy=b0.mode,$1=(nv=i0.child).sibling;var Ty={mode:"hidden",children:H1.children};return!(1&yy)&&b0.child!==nv?((H1=b0.child).childLanes=0,H1.pendingProps=Ty,b0.deletions=null):(H1=tM(nv,Ty)).subtreeFlags=14680064&nv.subtreeFlags,$1!==null?Ov=tM($1,Ov):(Ov=rM(Ov,yy,H0,null)).flags|=2,Ov.return=b0,H1.return=b0,H1.sibling=Ov,b0.child=H1,H1=Ov,Ov=b0.child,yy=(yy=i0.child.memoizedState)===null?MT(H0):{baseLanes:yy.baseLanes|H0,cachePool:null,transitions:yy.transitions},Ov.memoizedState=yy,Ov.childLanes=i0.childLanes&~H0,b0.memoizedState=RT,H1}return i0=(Ov=i0.child).sibling,H1=tM(Ov,{mode:"visible",children:H1.children}),!(1&b0.mode)&&(H1.lanes=H0),H1.return=b0,H1.sibling=null,i0!==null&&((H0=b0.deletions)===null?(b0.deletions=[i0],b0.flags|=16):H0.push(i0)),b0.child=H1,b0.memoizedState=null,H1}function M_(i0,b0){return(b0=SI({mode:"visible",children:b0},i0.mode,0,null)).return=i0,i0.child=b0}function yI(i0,b0,H0,$1){return $1!==null&&n6($1),Cx(b0,i0.child,null,H0),(i0=M_(b0,b0.pendingProps.children)).flags|=2,b0.memoizedState=null,i0}function TP(i0,b0,H0){i0.lanes|=b0;var $1=i0.alternate;$1!==null&&($1.lanes|=b0),H5(i0.return,b0,H0)}function RP(i0,b0,H0,$1,H1){var nv=i0.memoizedState;nv===null?i0.memoizedState={isBackwards:b0,rendering:null,renderingStartTime:0,last:$1,tail:H0,tailMode:H1}:(nv.isBackwards=b0,nv.rendering=null,nv.renderingStartTime=0,nv.last=$1,nv.tail=H0,nv.tailMode=H1)}function Ox(i0,b0,H0){var $1=b0.pendingProps,H1=$1.revealOrder,nv=$1.tail;if(o_(i0,b0,$1.children,H0),(2&($1=K$.current))!=0)$1=1&$1|2,b0.flags|=128;else{if(i0!==null&&128&i0.flags)e:for(i0=b0.child;i0!==null;){if(i0.tag===13)i0.memoizedState!==null&&TP(i0,H0,b0);else if(i0.tag===19)TP(i0,H0,b0);else if(i0.child!==null){i0.child.return=i0,i0=i0.child;continue}if(i0===b0)break e;for(;i0.sibling===null;){if(i0.return===null||i0.return===b0)break e;i0=i0.return}i0.sibling.return=i0.return,i0=i0.sibling}$1&=1}if(O$(K$,$1),(1&b0.mode)==0)b0.memoizedState=null;else switch(H1){case"forwards":for(H0=b0.child,H1=null;H0!==null;)(i0=H0.alternate)!==null&&C8(i0)===null&&(H1=H0),H0=H0.sibling;(H0=H1)===null?(H1=b0.child,b0.child=null):(H1=H0.sibling,H0.sibling=null),RP(b0,!1,H1,H0,nv);break;case"backwards":for(H0=null,H1=b0.child,b0.child=null;H1!==null;){if((i0=H1.alternate)!==null&&C8(i0)===null){b0.child=H1;break}i0=H1.sibling,H1.sibling=H0,H0=H1,H1=i0}RP(b0,!0,H0,null,nv);break;case"together":RP(b0,!1,null,null,void 0);break;default:b0.memoizedState=null}return b0.child}function h6(i0,b0){!(1&b0.mode)&&i0!==null&&(i0.alternate=null,b0.alternate=null,b0.flags|=2)}function p6(i0,b0,H0){if(i0!==null&&(b0.dependencies=i0.dependencies),DA|=b0.lanes,(H0&b0.childLanes)==0)return null;if(i0!==null&&b0.child!==i0.child)throw Error(_c(153));if(b0.child!==null){for(H0=tM(i0=b0.child,i0.pendingProps),b0.child=H0,H0.return=b0;i0.sibling!==null;)i0=i0.sibling,(H0=H0.sibling=tM(i0,i0.pendingProps)).return=b0;H0.sibling=null}return b0.child}function IT(i0,b0){if(!qw)switch(i0.tailMode){case"hidden":b0=i0.tail;for(var H0=null;b0!==null;)b0.alternate!==null&&(H0=b0),b0=b0.sibling;H0===null?i0.tail=null:H0.sibling=null;break;case"collapsed":H0=i0.tail;for(var $1=null;H0!==null;)H0.alternate!==null&&($1=H0),H0=H0.sibling;$1===null?b0||i0.tail===null?i0.tail=null:i0.tail.sibling=null:$1.sibling=null}}function I_(i0){var b0=i0.alternate!==null&&i0.alternate.child===i0.child,H0=0,$1=0;if(b0)for(var H1=i0.child;H1!==null;)H0|=H1.lanes|H1.childLanes,$1|=14680064&H1.subtreeFlags,$1|=14680064&H1.flags,H1.return=i0,H1=H1.sibling;else for(H1=i0.child;H1!==null;)H0|=H1.lanes|H1.childLanes,$1|=H1.subtreeFlags,$1|=H1.flags,H1.return=i0,H1=H1.sibling;return i0.subtreeFlags|=$1,i0.childLanes=H0,b0}function NU(i0,b0,H0){var $1=b0.pendingProps;switch(Y$(b0),b0.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return I_(b0),null;case 1:case 17:return ES(b0.type)&&_9(),I_(b0),null;case 3:return $1=b0.stateNode,C9(),pA($S),pA(n_),T8(),$1.pendingContext&&($1.context=$1.pendingContext,$1.pendingContext=null),i0!==null&&i0.child!==null||(Yw(b0)?b0.flags|=4:i0===null||i0.memoizedState.isDehydrated&&!(256&b0.flags)||(b0.flags|=1024,H_!==null&&(AI(H_),H_=null))),LE(i0,b0),I_(b0),null;case 5:Zw(b0);var H1=k9(l6.current);if(H0=b0.type,i0!==null&&b0.stateNode!=null)a_(i0,b0,H0,$1,H1),i0.ref!==b0.ref&&(b0.flags|=512,b0.flags|=2097152);else{if(!$1){if(b0.stateNode===null)throw Error(_c(166));return I_(b0),null}if(i0=k9(V_.current),Yw(b0)){$1=b0.stateNode,H0=b0.type;var nv=b0.memoizedProps;switch($1[H7]=b0,$1[t6]=nv,i0=(1&b0.mode)!=0,H0){case"dialog":YE("cancel",$1),YE("close",$1);break;case"iframe":case"object":case"embed":YE("load",$1);break;case"video":case"audio":for(H1=0;H1<\/script>",i0=i0.removeChild(i0.firstChild)):typeof $1.is=="string"?i0=Ov.createElement(H0,{is:$1.is}):(i0=Ov.createElement(H0),H0==="select"&&(Ov=i0,$1.multiple?Ov.multiple=!0:$1.size&&(Ov.size=$1.size))):i0=Ov.createElementNS(i0,H0),i0[H7]=b0,i0[t6]=$1,BA(i0,b0,!1,!1),b0.stateNode=i0;e:{switch(Ov=Qw(H0,$1),H0){case"dialog":YE("cancel",i0),YE("close",i0),H1=$1;break;case"iframe":case"object":case"embed":YE("load",i0),H1=$1;break;case"video":case"audio":for(H1=0;H1jx&&(b0.flags|=128,$1=!0,IT(nv,!1),b0.lanes=4194304)}else{if(!$1)if((i0=C8(Ov))!==null){if(b0.flags|=128,$1=!0,(H0=i0.updateQueue)!==null&&(b0.updateQueue=H0,b0.flags|=4),IT(nv,!0),nv.tail===null&&nv.tailMode==="hidden"&&!Ov.alternate&&!qw)return I_(b0),null}else 2*o0()-nv.renderingStartTime>jx&&H0!==1073741824&&(b0.flags|=128,$1=!0,IT(nv,!1),b0.lanes=4194304);nv.isBackwards?(Ov.sibling=b0.child,b0.child=Ov):((H0=nv.last)!==null?H0.sibling=Ov:b0.child=Ov,nv.last=Ov)}return nv.tail!==null?(b0=nv.tail,nv.rendering=b0,nv.tail=b0.sibling,nv.renderingStartTime=o0(),b0.sibling=null,H0=K$.current,O$(K$,$1?1&H0|2:1&H0),b0):(I_(b0),null);case 22:case 23:return mL(),$1=b0.memoizedState!==null,i0!==null&&i0.memoizedState!==null!==$1&&(b0.flags|=8192),$1&&1&b0.mode?1073741824&tS&&(I_(b0),6&b0.subtreeFlags&&(b0.flags|=8192)):I_(b0),null;case 24:case 25:return null}throw Error(_c(156,b0.tag))}function W7(i0,b0){switch(Y$(b0),b0.tag){case 1:return ES(b0.type)&&_9(),65536&(i0=b0.flags)?(b0.flags=-65537&i0|128,b0):null;case 3:return C9(),pA($S),pA(n_),T8(),65536&(i0=b0.flags)&&!(128&i0)?(b0.flags=-65537&i0|128,b0):null;case 5:return Zw(b0),null;case 13:if(pA(K$),(i0=b0.memoizedState)!==null&&i0.dehydrated!==null){if(b0.alternate===null)throw Error(_c(340));K_()}return 65536&(i0=b0.flags)?(b0.flags=-65537&i0|128,b0):null;case 19:return pA(K$),null;case 4:return C9(),null;case 10:return l8(b0.type._context),null;case 22:case 23:return mL(),null;default:return null}}BA=function(i0,b0){for(var H0=b0.child;H0!==null;){if(H0.tag===5||H0.tag===6)i0.appendChild(H0.stateNode);else if(H0.tag!==4&&H0.child!==null){H0.child.return=H0,H0=H0.child;continue}if(H0===b0)break;for(;H0.sibling===null;){if(H0.return===null||H0.return===b0)return;H0=H0.return}H0.sibling.return=H0.return,H0=H0.sibling}},LE=function(){},a_=function(i0,b0,H0,$1){var H1=i0.memoizedProps;if(H1!==$1){i0=b0.stateNode,k9(V_.current);var nv,Ov=null;switch(H0){case"input":H1=gy(i0,H1),$1=gy(i0,$1),Ov=[];break;case"select":H1=Q0({},H1,{value:void 0}),$1=Q0({},$1,{value:void 0}),Ov=[];break;case"textarea":H1=cy(i0,H1),$1=cy(i0,$1),Ov=[];break;default:typeof H1.onClick!="function"&&typeof $1.onClick=="function"&&(i0.onclick=S8)}for(Zy in F2(H0,$1),H0=null,H1)if(!$1.hasOwnProperty(Zy)&&H1.hasOwnProperty(Zy)&&H1[Zy]!=null)if(Zy==="style"){var yy=H1[Zy];for(nv in yy)yy.hasOwnProperty(nv)&&(H0||(H0={}),H0[nv]="")}else Zy!=="dangerouslySetInnerHTML"&&Zy!=="children"&&Zy!=="suppressContentEditableWarning"&&Zy!=="suppressHydrationWarning"&&Zy!=="autoFocus"&&(Mu.hasOwnProperty(Zy)?Ov||(Ov=[]):(Ov=Ov||[]).push(Zy,null));for(Zy in $1){var Ty=$1[Zy];if(yy=H1!=null?H1[Zy]:void 0,$1.hasOwnProperty(Zy)&&Ty!==yy&&(Ty!=null||yy!=null))if(Zy==="style")if(yy){for(nv in yy)!yy.hasOwnProperty(nv)||Ty&&Ty.hasOwnProperty(nv)||(H0||(H0={}),H0[nv]="");for(nv in Ty)Ty.hasOwnProperty(nv)&&yy[nv]!==Ty[nv]&&(H0||(H0={}),H0[nv]=Ty[nv])}else H0||(Ov||(Ov=[]),Ov.push(Zy,H0)),H0=Ty;else Zy==="dangerouslySetInnerHTML"?(Ty=Ty?Ty.__html:void 0,yy=yy?yy.__html:void 0,Ty!=null&&yy!==Ty&&(Ov=Ov||[]).push(Zy,Ty)):Zy==="children"?typeof Ty!="string"&&typeof Ty!="number"||(Ov=Ov||[]).push(Zy,""+Ty):Zy!=="suppressContentEditableWarning"&&Zy!=="suppressHydrationWarning"&&(Mu.hasOwnProperty(Zy)?(Ty!=null&&Zy==="onScroll"&&YE("scroll",i0),Ov||yy===Ty||(Ov=[])):(Ov=Ov||[]).push(Zy,Ty))}H0&&(Ov=Ov||[]).push("style",H0);var Zy=Ov;(b0.updateQueue=Zy)&&(b0.flags|=4)}},T$=function(i0,b0,H0,$1){H0!==$1&&(b0.flags|=4)};var G7=!1,HA=!1,MP=typeof WeakSet=="function"?WeakSet:Set,y3=null;function CS(i0,b0){var H0=i0.ref;if(H0!==null)if(typeof H0=="function")try{H0(null)}catch($1){SE(i0,b0,$1)}else H0.current=null}function M8(i0,b0,H0){try{H0()}catch($1){SE(i0,b0,$1)}}var O9=!1;function Y5(i0,b0,H0){var $1=b0.updateQueue;if(($1=$1!==null?$1.lastEffect:null)!==null){var H1=$1=$1.next;do{if((H1.tag&i0)===i0){var nv=H1.destroy;H1.destroy=void 0,nv!==void 0&&M8(b0,H0,nv)}H1=H1.next}while(H1!==$1)}}function OT(i0,b0){if((b0=(b0=b0.updateQueue)!==null?b0.lastEffect:null)!==null){var H0=b0=b0.next;do{if((H0.tag&i0)===i0){var $1=H0.create;H0.destroy=$1()}H0=H0.next}while(H0!==b0)}}function Z5(i0){var b0=i0.ref;if(b0!==null){var H0=i0.stateNode;i0.tag,i0=H0,typeof b0=="function"?b0(i0):b0.current=i0}}function IP(i0){var b0=i0.alternate;b0!==null&&(i0.alternate=null,IP(b0)),i0.child=null,i0.deletions=null,i0.sibling=null,i0.tag===5&&(b0=i0.stateNode)!==null&&(delete b0[H7],delete b0[t6],delete b0[gP],delete b0[uD],delete b0[PU]),i0.stateNode=null,i0.return=null,i0.dependencies=null,i0.memoizedProps=null,i0.memoizedState=null,i0.pendingProps=null,i0.stateNode=null,i0.updateQueue=null}function PT(i0){return i0.tag===5||i0.tag===3||i0.tag===4}function Y7(i0){e:for(;;){for(;i0.sibling===null;){if(i0.return===null||PT(i0.return))return null;i0=i0.return}for(i0.sibling.return=i0.return,i0=i0.sibling;i0.tag!==5&&i0.tag!==6&&i0.tag!==18;){if(2&i0.flags||i0.child===null||i0.tag===4)continue e;i0.child.return=i0,i0=i0.child}if(!(2&i0.flags))return i0.stateNode}}function SC(i0,b0,H0){var $1=i0.tag;if($1===5||$1===6)i0=i0.stateNode,b0?H0.nodeType===8?H0.parentNode.insertBefore(i0,b0):H0.insertBefore(i0,b0):(H0.nodeType===8?(b0=H0.parentNode).insertBefore(i0,H0):(b0=H0).appendChild(i0),(H0=H0._reactRootContainer)!=null||b0.onclick!==null||(b0.onclick=S8));else if($1!==4&&(i0=i0.child)!==null)for(SC(i0,b0,H0),i0=i0.sibling;i0!==null;)SC(i0,b0,H0),i0=i0.sibling}function Z7(i0,b0,H0){var $1=i0.tag;if($1===5||$1===6)i0=i0.stateNode,b0?H0.insertBefore(i0,b0):H0.appendChild(i0);else if($1!==4&&(i0=i0.child)!==null)for(Z7(i0,b0,H0),i0=i0.sibling;i0!==null;)Z7(i0,b0,H0),i0=i0.sibling}var c8=null,TS=!1;function RS(i0,b0,H0){for(H0=H0.child;H0!==null;)hD(i0,b0,H0),H0=H0.sibling}function hD(i0,b0,H0){if(A1&&typeof A1.onCommitFiberUnmount=="function")try{A1.onCommitFiberUnmount(L1,H0)}catch{}switch(H0.tag){case 5:HA||CS(H0,b0);case 6:var $1=c8,H1=TS;c8=null,RS(i0,b0,H0),TS=H1,(c8=$1)!==null&&(TS?(i0=c8,H0=H0.stateNode,i0.nodeType===8?i0.parentNode.removeChild(H0):i0.removeChild(H0)):c8.removeChild(H0.stateNode));break;case 18:c8!==null&&(TS?(i0=c8,H0=H0.stateNode,i0.nodeType===8?mP(i0.parentNode,H0):i0.nodeType===1&&mP(i0,H0),W3(i0)):mP(c8,H0.stateNode));break;case 4:$1=c8,H1=TS,c8=H0.stateNode.containerInfo,TS=!0,RS(i0,b0,H0),c8=$1,TS=H1;break;case 0:case 11:case 14:case 15:if(!HA&&($1=H0.updateQueue)!==null&&($1=$1.lastEffect)!==null){H1=$1=$1.next;do{var nv=H1,Ov=nv.destroy;nv=nv.tag,Ov!==void 0&&(2&nv||4&nv)&&M8(H0,b0,Ov),H1=H1.next}while(H1!==$1)}RS(i0,b0,H0);break;case 1:if(!HA&&(CS(H0,b0),typeof($1=H0.stateNode).componentWillUnmount=="function"))try{$1.props=H0.memoizedProps,$1.state=H0.memoizedState,$1.componentWillUnmount()}catch(yy){SE(H0,b0,yy)}RS(i0,b0,H0);break;case 21:RS(i0,b0,H0);break;case 22:1&H0.mode?(HA=($1=HA)||H0.memoizedState!==null,RS(i0,b0,H0),HA=$1):RS(i0,b0,H0);break;default:RS(i0,b0,H0)}}function pD(i0){var b0=i0.updateQueue;if(b0!==null){i0.updateQueue=null;var H0=i0.stateNode;H0===null&&(H0=i0.stateNode=new MP),b0.forEach(function($1){var H1=j9.bind(null,i0,$1);H0.has($1)||(H0.add($1),$1.then(H1,H1))})}}function J7(i0,b0){var H0=b0.deletions;if(H0!==null)for(var $1=0;$1H1&&(H1=Ov),$1&=~nv}if($1=H1,10<($1=(120>($1=o0()-$1)?120:480>$1?480:1080>$1?1080:1920>$1?1920:3e3>$1?3e3:4320>$1?4320:1960*LU($1/1960))-$1)){i0.timeoutHandle=yT(v6.bind(null,i0,O8,m6),$1);break}v6(i0,O8,m6);break;default:throw Error(_c(329))}}}return P8(i0,o0()),i0.callbackNode===H0?pL.bind(null,i0):null}function rO(i0,b0){var H0=I8;return i0.current.memoizedState.isDehydrated&&(P9(i0,b0).flags|=256),(i0=zT(i0,b0))!==2&&(b0=O8,O8=H0,b0!==null&&AI(b0)),i0}function AI(i0){O8===null?O8=i0:O8.push.apply(O8,i0)}function f8(i0,b0){for(b0&=~eO,b0&=~KA,i0.suspendedLanes|=b0,i0.pingedLanes&=~b0,i0=i0.expirationTimes;0i0?16:i0,BT===null)var $1=!1;else{if(i0=BT,BT=null,DT=0,(6&fE)!=0)throw Error(_c(331));var H1=fE;for(fE|=4,y3=i0.current;y3!==null;){var nv=y3,Ov=nv.child;if(16&y3.flags){var yy=nv.deletions;if(yy!==null){for(var Ty=0;Tyo0()-tO?P9(i0,0):eO|=H0),P8(i0,b0)}function yD(i0,b0){b0===0&&(1&i0.mode?(b0=iv,!(130023424&(iv<<=1))&&(iv=4194304)):b0=1);var H0=rE();(i0=g_(i0,b0))!==null&&(ey(i0,b0,H0),P8(i0,H0))}function p7(i0){var b0=i0.memoizedState,H0=0;b0!==null&&(H0=b0.retryLane),yD(i0,H0)}function j9(i0,b0){var H0=0;switch(i0.tag){case 13:var $1=i0.stateNode,H1=i0.memoizedState;H1!==null&&(H0=H1.retryLane);break;case 19:$1=i0.stateNode;break;default:throw Error(_c(314))}$1!==null&&$1.delete(b0),yD(i0,H0)}function L9(i0,b0){return f0(i0,b0)}function bD(i0,b0,H0,$1){this.tag=i0,this.key=H0,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=b0,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=$1,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function y6(i0,b0,H0,$1){return new bD(i0,b0,H0,$1)}function j8(i0){return!(!(i0=i0.prototype)||!i0.isReactComponent)}function tM(i0,b0){var H0=i0.alternate;return H0===null?((H0=y6(i0.tag,b0,i0.key,i0.mode)).elementType=i0.elementType,H0.type=i0.type,H0.stateNode=i0.stateNode,H0.alternate=i0,i0.alternate=H0):(H0.pendingProps=b0,H0.type=i0.type,H0.flags=0,H0.subtreeFlags=0,H0.deletions=null),H0.flags=14680064&i0.flags,H0.childLanes=i0.childLanes,H0.lanes=i0.lanes,H0.child=i0.child,H0.memoizedProps=i0.memoizedProps,H0.memoizedState=i0.memoizedState,H0.updateQueue=i0.updateQueue,b0=i0.dependencies,H0.dependencies=b0===null?null:{lanes:b0.lanes,firstContext:b0.firstContext},H0.sibling=i0.sibling,H0.index=i0.index,H0.ref=i0.ref,H0}function m7(i0,b0,H0,$1,H1,nv){var Ov=2;if($1=i0,typeof i0=="function")j8(i0)&&(Ov=1);else if(typeof i0=="string")Ov=5;else e:switch(i0){case oy:return rM(H0.children,H1,nv,b0);case fy:Ov=8,H1|=8;break;case Fy:return(i0=y6(12,H0,b0,2|H1)).elementType=Fy,i0.lanes=nv,i0;case X0:return(i0=y6(13,H0,b0,H1)).elementType=X0,i0.lanes=nv,i0;case s0:return(i0=y6(19,H0,b0,H1)).elementType=s0,i0.lanes=nv,i0;case c0:return SI(H0,H1,nv,b0);default:if(typeof i0=="object"&&i0!==null)switch(i0.$$typeof){case qv:Ov=10;break e;case Qv:Ov=9;break e;case T0:Ov=11;break e;case g0:Ov=14;break e;case d0:Ov=16,$1=null;break e}throw Error(_c(130,i0==null?i0:typeof i0,""))}return(b0=y6(Ov,H0,b0,H1)).elementType=i0,b0.type=$1,b0.lanes=nv,b0}function rM(i0,b0,H0,$1){return(i0=y6(7,i0,$1,b0)).lanes=H0,i0}function SI(i0,b0,H0,$1){return(i0=y6(22,i0,$1,b0)).elementType=c0,i0.lanes=H0,i0.stateNode={isHidden:!1},i0}function nO(i0,b0,H0){return(i0=y6(6,i0,null,b0)).lanes=H0,i0}function iO(i0,b0,H0){return(b0=y6(4,i0.children!==null?i0.children:[],i0.key,b0)).lanes=H0,b0.stateNode={containerInfo:i0.containerInfo,pendingChildren:null,implementation:i0.implementation},b0}function jP(i0,b0,H0,$1,H1){this.tag=b0,this.containerInfo=i0,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zv(0),this.expirationTimes=zv(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zv(0),this.identifierPrefix=$1,this.onRecoverableError=H1,this.mutableSourceEagerHydrationData=null}function xI(i0,b0,H0,$1,H1,nv,Ov,yy,Ty){return i0=new jP(i0,b0,H0,yy,Ty),b0===1?(b0=1,nv===!0&&(b0|=8)):b0=0,nv=y6(3,null,null,b0),i0.current=nv,nv.stateNode=i0,nv.memoizedState={element:$1,isDehydrated:H0,cache:null,transitions:null,pendingSuspenseBoundaries:null},s7(nv),i0}function LK(i0){if(!i0)return _C;e:{if(ny(i0=i0._reactInternals)!==i0||i0.tag!==1)throw Error(_c(170));var b0=i0;do{switch(b0.tag){case 3:b0=b0.stateNode.context;break e;case 1:if(ES(b0.type)){b0=b0.stateNode.__reactInternalMemoizedMergedChildContext;break e}}b0=b0.return}while(b0!==null);throw Error(_c(171))}if(i0.tag===1){var H0=i0.type;if(ES(H0))return _x(i0,H0,b0)}return b0}function NP(i0,b0,H0,$1,H1,nv,Ov,yy,Ty){return(i0=xI(H0,$1,!0,i0,0,nv,0,yy,Ty)).context=LK(null),H0=i0.current,(nv=o6($1=rE(),H1=Nx(H0))).callback=b0??null,k8(H0,nv,H1),i0.current.lanes=H1,ey(i0,H1,$1),P8(i0,$1),i0}function LP(i0,b0,H0,$1){var H1=b0.current,nv=rE(),Ov=Nx(H1);return H0=LK(H0),b0.context===null?b0.context=H0:b0.pendingContext=H0,(b0=o6(nv,Ov)).payload={element:i0},($1=$1===void 0?null:$1)!==null&&(b0.callback=$1),(i0=k8(H1,b0,Ov))!==null&&(PS(i0,H1,Ov,nv),l7(i0,H1,Ov)),Ov}function g7(i0){return(i0=i0.current).child?(i0.child.tag,i0.child.stateNode):null}function P$(i0,b0){if((i0=i0.memoizedState)!==null&&i0.dehydrated!==null){var H0=i0.retryLane;i0.retryLane=H0!==0&&H01?e0-1:0),Y0=1;Y01?e0-1:0),Y0=1;Y0"u"||window.document===void 0||window.document.createElement===void 0),Av=Object.prototype.hasOwnProperty;function Dv(Lu){return typeof Symbol=="function"&&Symbol.toStringTag&&Lu[Symbol.toStringTag]||Lu.constructor.name||"Object"}function ry(Lu){try{return Jv(Lu),!1}catch{return!0}}function Jv(Lu){return""+Lu}function Fv(Lu,e0){if(ry(Lu))return xu("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before before using it here.",e0,Dv(Lu)),Jv(Lu)}function iy(Lu){if(ry(Lu))return xu("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before before using it here.",Dv(Lu)),Jv(Lu)}var cy=0,Uy=3,r2=4,f2=5,j2=6,mw=":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",p2=mw+"\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040",Vw=new RegExp("^["+mw+"]["+p2+"]*$"),Ew={},q2={};function $3(Lu){return!!Av.call(q2,Lu)||!Av.call(Ew,Lu)&&(Vw.test(Lu)?(q2[Lu]=!0,!0):(Ew[Lu]=!0,xu("Invalid attribute name: `%s`",Lu),!1))}function Rw(Lu,e0,P0){return e0!==null?e0.type===cy:!P0&&Lu.length>2&&(Lu[0]==="o"||Lu[0]==="O")&&(Lu[1]==="n"||Lu[1]==="N")}function K2(Lu,e0,P0,Y0){if(P0!==null&&P0.type===cy)return!1;switch(typeof e0){case"function":case"symbol":return!0;case"boolean":if(Y0)return!1;if(P0!==null)return!P0.acceptsBooleans;var s1=Lu.toLowerCase().slice(0,5);return s1!=="data-"&&s1!=="aria-";default:return!1}}function Xw(Lu,e0,P0,Y0){if(e0==null||K2(Lu,e0,P0,Y0))return!0;if(Y0)return!1;if(P0!==null)switch(P0.type){case Uy:return!e0;case r2:return e0===!1;case f2:return isNaN(e0);case j2:return isNaN(e0)||e0<1}return!1}function a3(Lu){return Qw.hasOwnProperty(Lu)?Qw[Lu]:null}function F2(Lu,e0,P0,Y0,s1,P1,Z1){this.acceptsBooleans=e0===2||e0===Uy||e0===r2,this.attributeName=Y0,this.attributeNamespace=s1,this.mustUseProperty=P0,this.propertyName=Lu,this.type=e0,this.sanitizeURL=P1,this.removeEmptyString=Z1}var Qw={};["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"].forEach(function(Lu){Qw[Lu]=new F2(Lu,cy,!1,Lu,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(Lu){var e0=Lu[0],P0=Lu[1];Qw[e0]=new F2(e0,1,!1,P0,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(Lu){Qw[Lu]=new F2(Lu,2,!1,Lu.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(Lu){Qw[Lu]=new F2(Lu,2,!1,Lu,null,!1,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(Lu){Qw[Lu]=new F2(Lu,Uy,!1,Lu.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(Lu){Qw[Lu]=new F2(Lu,Uy,!0,Lu,null,!1,!1)}),["capture","download"].forEach(function(Lu){Qw[Lu]=new F2(Lu,r2,!1,Lu,null,!1,!1)}),["cols","rows","size","span"].forEach(function(Lu){Qw[Lu]=new F2(Lu,j2,!1,Lu,null,!1,!1)}),["rowSpan","start"].forEach(function(Lu){Qw[Lu]=new F2(Lu,f2,!1,Lu.toLowerCase(),null,!1,!1)});var vt=/[\-\:]([a-z])/g,wt=function(Lu){return Lu[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(Lu){var e0=Lu.replace(vt,wt);Qw[e0]=new F2(e0,1,!1,Lu,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(Lu){var e0=Lu.replace(vt,wt);Qw[e0]=new F2(e0,1,!1,Lu,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(Lu){var e0=Lu.replace(vt,wt);Qw[e0]=new F2(e0,1,!1,Lu,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(Lu){Qw[Lu]=new F2(Lu,1,!1,Lu.toLowerCase(),null,!1,!1)}),Qw.xlinkHref=new F2("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(Lu){Qw[Lu]=new F2(Lu,1,!1,Lu.toLowerCase(),null,!0,!0)});var Ys=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,pu=!1;function Ru(Lu){!pu&&Ys.test(Lu)&&(pu=!0,xu("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(Lu)))}function wu(Lu,e0,P0,Y0){if(Y0.mustUseProperty)return Lu[Y0.propertyName];Fv(P0,e0),Y0.sanitizeURL&&Ru(""+P0);var s1=Y0.attributeName,P1=null;if(Y0.type===r2){if(Lu.hasAttribute(s1)){var Z1=Lu.getAttribute(s1);return Z1===""||(Xw(e0,P0,Y0,!1)?Z1:Z1===""+P0?P0:Z1)}}else if(Lu.hasAttribute(s1)){if(Xw(e0,P0,Y0,!1))return Lu.getAttribute(s1);if(Y0.type===Uy)return P0;P1=Lu.getAttribute(s1)}return Xw(e0,P0,Y0,!1)?P1===null?P0:P1:P1===""+P0?P0:P1}function t0(Lu,e0,P0,Y0){if($3(e0)){if(!Lu.hasAttribute(e0))return P0===void 0?void 0:null;var s1=Lu.getAttribute(e0);return Fv(P0,e0),s1===""+P0?P0:s1}}function m0(Lu,e0,P0,Y0){var s1=a3(e0);if(!Rw(e0,s1,Y0))if(Xw(e0,P0,s1,Y0)&&(P0=null),Y0||s1===null){if($3(e0)){var P1=e0;P0===null?Lu.removeAttribute(P1):(Fv(P0,e0),Lu.setAttribute(P1,""+P0))}}else if(s1.mustUseProperty){var Z1=s1.propertyName;if(P0===null){var vv=s1.type;Lu[Z1]=vv!==Uy&&""}else Lu[Z1]=P0}else{var Ev=s1.attributeName,jv=s1.attributeNamespace;if(P0===null)Lu.removeAttribute(Ev);else{var sy,ky=s1.type;ky===Uy||ky===r2&&P0===!0?sy="":(Fv(P0,Ev),sy=""+P0,s1.sanitizeURL&&Ru(sy.toString())),jv?Lu.setAttributeNS(jv,Ev,sy):Lu.setAttribute(Ev,sy)}}}var k0=Symbol.for("react.element"),_0=Symbol.for("react.portal"),R0=Symbol.for("react.fragment"),N0=Symbol.for("react.strict_mode"),l1=Symbol.for("react.profiler"),a1=Symbol.for("react.provider"),x1=Symbol.for("react.context"),K1=Symbol.for("react.forward_ref"),W1=Symbol.for("react.suspense"),_g=Symbol.for("react.suspense_list"),uv=Symbol.for("react.memo"),Tv=Symbol.for("react.lazy"),Uv=Symbol.for("react.offscreen"),Wv=Symbol.iterator,ny="@@iterator";function Rv(Lu){if(Lu===null||typeof Lu!="object")return null;var e0=Wv&&Lu[Wv]||Lu[ny];return typeof e0=="function"?e0:null}var Gv,C0,J0,f0,v0,h0,u0,o0=Object.assign,x0=0;function U0(){}U0.__reactDisabledLog=!0;var e1,h1=_c.ReactCurrentDispatcher;function k1(Lu,e0,P0){if(e1===void 0)try{throw Error()}catch(s1){var Y0=s1.stack.trim().match(/\n( *(at )?)/);e1=Y0&&Y0[1]||""}return` `+e1+Lu}var q1,L1=!1,A1=typeof WeakMap=="function"?WeakMap:Map;function M1(Lu,e0){if(!Lu||L1)return"";var P0,Y0=q1.get(Lu);if(Y0!==void 0)return Y0;L1=!0;var s1,P1=Error.prepareStackTrace;Error.prepareStackTrace=void 0,s1=h1.current,h1.current=null,function(){if(x0===0){Gv=console.log,C0=console.info,J0=console.warn,f0=console.error,v0=console.group,h0=console.groupCollapsed,u0=console.groupEnd;var uy={configurable:!0,enumerable:!0,value:U0,writable:!0};Object.defineProperties(console,{info:uy,log:uy,warn:uy,error:uy,group:uy,groupCollapsed:uy,groupEnd:uy})}x0++}();try{if(e0){var Z1=function(){throw Error()};if(Object.defineProperty(Z1.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Z1,[])}catch(uy){P0=uy}Reflect.construct(Lu,[],Z1)}else{try{Z1.call()}catch(uy){P0=uy}Lu.call(Z1.prototype)}}else{try{throw Error()}catch(uy){P0=uy}Lu()}}catch(uy){if(uy&&P0&&typeof uy.stack=="string"){for(var vv=uy.stack.split(` `),Ev=P0.stack.split(` `),jv=vv.length-1,sy=Ev.length-1;jv>=1&&sy>=0&&vv[jv]!==Ev[sy];)sy--;for(;jv>=1&&sy>=0;jv--,sy--)if(vv[jv]!==Ev[sy]){if(jv!==1||sy!==1)do if(jv--,--sy<0||vv[jv]!==Ev[sy]){var ky=` -`+vv[jv].replace(" at new "," at ");return Lu.displayName&&ky.includes("")&&(ky=ky.replace("",Lu.displayName)),typeof Lu=="function"&&q1.set(Lu,ky),ky}while(jv>=1&&sy>=0);break}}}finally{L1=!1,h1.current=s1,function(){if(--x0==0){var uy={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:o0({},uy,{value:Gv}),info:o0({},uy,{value:C0}),warn:o0({},uy,{value:J0}),error:o0({},uy,{value:f0}),group:o0({},uy,{value:v0}),groupCollapsed:o0({},uy,{value:h0}),groupEnd:o0({},uy,{value:u0})})}x0<0&&Su("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=P1}var jy=Lu?Lu.displayName||Lu.name:"",Ay=jy?k1(jy):"";return typeof Lu=="function"&&q1.set(Lu,Ay),Ay}function X1(Lu,e0,P0){return M1(Lu,!1)}function dv(Lu,e0,P0){if(Lu==null)return"";if(typeof Lu=="function")return M1(Lu,!(!(Y0=Lu.prototype)||!Y0.isReactComponent));var Y0;if(typeof Lu=="string")return k1(Lu);switch(Lu){case W1:return k1("Suspense");case _g:return k1("SuspenseList")}if(typeof Lu=="object")switch(Lu.$$typeof){case K1:return X1(Lu.render);case uv:return dv(Lu.type,e0,P0);case Tv:var s1=Lu,P1=s1._payload,Z1=s1._init;try{return dv(Z1(P1),e0,P0)}catch{}}return""}function I1(Lu){switch(Lu._debugOwner&&Lu._debugOwner.type,Lu._debugSource,Lu.tag){case y1:return k1(Lu.type);case qv:return k1("Lazy");case oy:return k1("Suspense");case X0:return k1("SuspenseList");case E0:case M0:case Fy:return X1(Lu.type);case xv:return X1(Lu.type.render);case j0:return M1(Lu.type,!0);default:return""}}function iv(Lu){try{var e0="",P0=Lu;do e0+=I1(P0),P0=P0.return;while(P0);return e0}catch(Y0){return` +`+vv[jv].replace(" at new "," at ");return Lu.displayName&&ky.includes("")&&(ky=ky.replace("",Lu.displayName)),typeof Lu=="function"&&q1.set(Lu,ky),ky}while(jv>=1&&sy>=0);break}}}finally{L1=!1,h1.current=s1,function(){if(--x0==0){var uy={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:o0({},uy,{value:Gv}),info:o0({},uy,{value:C0}),warn:o0({},uy,{value:J0}),error:o0({},uy,{value:f0}),group:o0({},uy,{value:v0}),groupCollapsed:o0({},uy,{value:h0}),groupEnd:o0({},uy,{value:u0})})}x0<0&&xu("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=P1}var jy=Lu?Lu.displayName||Lu.name:"",Ay=jy?k1(jy):"";return typeof Lu=="function"&&q1.set(Lu,Ay),Ay}function X1(Lu,e0,P0){return M1(Lu,!1)}function dv(Lu,e0,P0){if(Lu==null)return"";if(typeof Lu=="function")return M1(Lu,!(!(Y0=Lu.prototype)||!Y0.isReactComponent));var Y0;if(typeof Lu=="string")return k1(Lu);switch(Lu){case W1:return k1("Suspense");case _g:return k1("SuspenseList")}if(typeof Lu=="object")switch(Lu.$$typeof){case K1:return X1(Lu.render);case uv:return dv(Lu.type,e0,P0);case Tv:var s1=Lu,P1=s1._payload,Z1=s1._init;try{return dv(Z1(P1),e0,P0)}catch{}}return""}function I1(Lu){switch(Lu._debugOwner&&Lu._debugOwner.type,Lu._debugSource,Lu.tag){case y1:return k1(Lu.type);case qv:return k1("Lazy");case oy:return k1("Suspense");case X0:return k1("SuspenseList");case E0:case M0:case Fy:return X1(Lu.type);case xv:return X1(Lu.type.render);case j0:return M1(Lu.type,!0);default:return""}}function iv(Lu){try{var e0="",P0=Lu;do e0+=I1(P0),P0=P0.return;while(P0);return e0}catch(Y0){return` Error generating stack: `+Y0.message+` -`+Y0.stack}}function hv(Lu){return Lu.displayName||"Context"}function Bv(Lu){if(Lu==null)return null;if(typeof Lu.tag=="number"&&Su("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof Lu=="function")return Lu.displayName||Lu.name||null;if(typeof Lu=="string")return Lu;switch(Lu){case R0:return"Fragment";case _0:return"Portal";case l1:return"Profiler";case N0:return"StrictMode";case W1:return"Suspense";case _g:return"SuspenseList"}if(typeof Lu=="object")switch(Lu.$$typeof){case x1:return hv(Lu)+".Consumer";case a1:return hv(Lu._context)+".Provider";case K1:return function(P1,Z1,vv){var Ev=P1.displayName;if(Ev)return Ev;var jv=Z1.displayName||Z1.name||"";return jv!==""?vv+"("+jv+")":vv}(Lu,Lu.render,"ForwardRef");case uv:var e0=Lu.displayName||null;return e0!==null?e0:Bv(Lu.type)||"Memo";case Tv:var P0=Lu,Y0=P0._payload,s1=P0._init;try{return Bv(s1(Y0))}catch{return null}}return null}function pv(Lu){return Lu.displayName||"Context"}function mv(Lu){var e0,P0,Y0,s1,P1=Lu.tag,Z1=Lu.type;switch(P1){case c0:return"Cache";case bv:return pv(Z1)+".Consumer";case gv:return pv(Z1._context)+".Provider";case T0:return"DehydratedFragment";case xv:return e0=Z1,Y0="ForwardRef",s1=(P0=Z1.render).displayName||P0.name||"",e0.displayName||(s1!==""?Y0+"("+s1+")":Y0);case F1:return"Fragment";case y1:return Z1;case V0:return"Portal";case B0:return"Root";case v1:return"Text";case qv:return Bv(Z1);case ov:return Z1===N0?"StrictMode":"Mode";case g0:return"Offscreen";case hy:return"Profiler";case s0:return"Scope";case oy:return"Suspense";case X0:return"SuspenseList";case a0:return"TracingMarker";case j0:case E0:case Qv:case M0:case fy:case Fy:if(typeof Z1=="function")return Z1.displayName||Z1.name||null;if(typeof Z1=="string")return Z1}return null}q1=new A1;var _v=_c.ReactDebugCurrentFrame,zv=null,ey=!1;function Py(){if(zv===null)return null;var Lu=zv._debugOwner;return Lu!=null?mv(Lu):null}function Ry(){return zv===null?"":iv(zv)}function my(){_v.getCurrentStack=null,zv=null,ey=!1}function n2(Lu){_v.getCurrentStack=Lu===null?null:Ry,zv=Lu,ey=!1}function u2(Lu){ey=Lu}function Ky(Lu){return""+Lu}function cw(Lu){switch(typeof Lu){case"boolean":case"number":case"string":case"undefined":return Lu;case"object":return iy(Lu),Lu;default:return""}}var M2={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0};function v2(Lu,e0){M2[e0.type]||e0.onChange||e0.onInput||e0.readOnly||e0.disabled||e0.value==null||Su("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."),e0.onChange||e0.readOnly||e0.disabled||e0.checked==null||Su("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}function X2(Lu){var e0=Lu.type,P0=Lu.nodeName;return P0&&P0.toLowerCase()==="input"&&(e0==="checkbox"||e0==="radio")}function nw(Lu){return Lu._valueTracker}function z2(Lu){nw(Lu)||(Lu._valueTracker=function(e0){var P0=X2(e0)?"checked":"value",Y0=Object.getOwnPropertyDescriptor(e0.constructor.prototype,P0);iy(e0[P0]);var s1=""+e0[P0];if(!e0.hasOwnProperty(P0)&&Y0!==void 0&&typeof Y0.get=="function"&&typeof Y0.set=="function"){var P1=Y0.get,Z1=Y0.set;Object.defineProperty(e0,P0,{configurable:!0,get:function(){return P1.call(this)},set:function(Ev){iy(Ev),s1=""+Ev,Z1.call(this,Ev)}}),Object.defineProperty(e0,P0,{enumerable:Y0.enumerable});var vv={getValue:function(){return s1},setValue:function(Ev){iy(Ev),s1=""+Ev},stopTracking:function(){(function(Ev){Ev._valueTracker=null})(e0),delete e0[P0]}};return vv}}(Lu))}function Dw(Lu){if(!Lu)return!1;var e0=nw(Lu);if(!e0)return!0;var P0=e0.getValue(),Y0=function(s1){var P1="";return s1?P1=X2(s1)?s1.checked?"true":"false":s1.value:P1}(Lu);return Y0!==P0&&(e0.setValue(Y0),!0)}function bw(Lu){if((Lu=Lu||(typeof document<"u"?document:void 0))===void 0)return null;try{return Lu.activeElement||Lu.body}catch{return Lu.body}}var H2=!1,Iw=!1,e3=!1,G2=!1;function Ow(Lu){return Lu.type==="checkbox"||Lu.type==="radio"?Lu.checked!=null:Lu.value!=null}function Fw(Lu,e0){var P0=Lu,Y0=e0.checked;return o0({},e0,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:Y0??P0._wrapperState.initialChecked})}function dw(Lu,e0){v2(0,e0),e0.checked===void 0||e0.defaultChecked===void 0||Iw||(Su("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",Py()||"A component",e0.type),Iw=!0),e0.value===void 0||e0.defaultValue===void 0||H2||(Su("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",Py()||"A component",e0.type),H2=!0);var P0=Lu,Y0=e0.defaultValue==null?"":e0.defaultValue;P0._wrapperState={initialChecked:e0.checked!=null?e0.checked:e0.defaultChecked,initialValue:cw(e0.value!=null?e0.value:Y0),controlled:Ow(e0)}}function q3(Lu,e0){var P0=Lu,Y0=e0.checked;Y0!=null&&m0(P0,"checked",Y0,!1)}function k3(Lu,e0){var P0=Lu,Y0=Ow(e0);P0._wrapperState.controlled||!Y0||G2||(Su("A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),G2=!0),!P0._wrapperState.controlled||Y0||e3||(Su("A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),e3=!0),q3(Lu,e0);var s1=cw(e0.value),P1=e0.type;if(s1!=null)P1==="number"?(s1===0&&P0.value===""||P0.value!=s1)&&(P0.value=Ky(s1)):P0.value!==Ky(s1)&&(P0.value=Ky(s1));else if(P1==="submit"||P1==="reset")return void P0.removeAttribute("value");e0.hasOwnProperty("value")?W3(P0,e0.type,s1):e0.hasOwnProperty("defaultValue")&&W3(P0,e0.type,cw(e0.defaultValue)),e0.checked==null&&e0.defaultChecked!=null&&(P0.defaultChecked=!!e0.defaultChecked)}function Aw(Lu,e0,P0){var Y0=Lu;if(e0.hasOwnProperty("value")||e0.hasOwnProperty("defaultValue")){var s1=e0.type;if(!(s1!=="submit"&&s1!=="reset"||e0.value!==void 0&&e0.value!==null))return;var P1=Ky(Y0._wrapperState.initialValue);P0||P1!==Y0.value&&(Y0.value=P1),Y0.defaultValue=P1}var Z1=Y0.name;Z1!==""&&(Y0.name=""),Y0.defaultChecked=!Y0.defaultChecked,Y0.defaultChecked=!!Y0._wrapperState.initialChecked,Z1!==""&&(Y0.name=Z1)}function W3(Lu,e0,P0){e0==="number"&&bw(Lu.ownerDocument)===Lu||(P0==null?Lu.defaultValue=Ky(Lu._wrapperState.initialValue):Lu.defaultValue!==Ky(P0)&&(Lu.defaultValue=Ky(P0)))}var A3=!1,iw=!1,L3=!1;function C3(Lu,e0){e0.value==null&&(typeof e0.children=="object"&&e0.children!==null?yt.Children.forEach(e0.children,function(P0){P0!=null&&typeof P0!="string"&&typeof P0!="number"&&(iw||(iw=!0,Su("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to