diff --git a/Cargo.lock b/Cargo.lock index 1e4aa19b..580c91a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -215,8 +215,7 @@ dependencies = [ [[package]] name = "bp-consensus" version = "0.11.0-beta.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3a99a46063d23d20a3177a04923652b245f31c2a04a6d0c47d5a93dc201a80" +source = "git+https://github.com/BP-WG/bp-core?branch=methods#725a24e3ec1d5e3951cb317eae95c200115295ff" dependencies = [ "amplify", "chrono", @@ -230,8 +229,7 @@ dependencies = [ [[package]] name = "bp-core" version = "0.11.0-beta.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b8caf04291e2703ce267b1f8baf14f03879a6d1a5afe76e011ada489f172f9" +source = "git+https://github.com/BP-WG/bp-core?branch=methods#725a24e3ec1d5e3951cb317eae95c200115295ff" dependencies = [ "amplify", "bp-consensus", @@ -249,8 +247,7 @@ dependencies = [ [[package]] name = "bp-dbc" version = "0.11.0-beta.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11fc4081db2147411381b9650765ce683e5065559f1125508696f79cc4cbfedf" +source = "git+https://github.com/BP-WG/bp-core?branch=methods#725a24e3ec1d5e3951cb317eae95c200115295ff" dependencies = [ "amplify", "base85", @@ -276,8 +273,7 @@ dependencies = [ [[package]] name = "bp-seals" version = "0.11.0-beta.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d607238c2bf2c34d048d14cd798a6365306e0fb6b02211235f3ccad0bc7fa8f1" +source = "git+https://github.com/BP-WG/bp-core?branch=methods#725a24e3ec1d5e3951cb317eae95c200115295ff" dependencies = [ "amplify", "baid64", @@ -669,8 +665,7 @@ dependencies = [ [[package]] name = "rgb-core" version = "0.11.0-beta.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43dc70212f5eff8189f3cdfef2d11f53f7be4c4128db9839b5d56a0f9ef60c98" +source = "git+https://github.com/RGB-WG/rgb-core?branch=methods#6ea499ddadf24c98b806b9a7342ca5d3fa5d5b70" dependencies = [ "aluvm", "amplify", diff --git a/Cargo.toml b/Cargo.toml index b4715406..93b41b58 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -97,3 +97,10 @@ wasm-bindgen-test = "0.3" [package.metadata.docs.rs] features = ["all"] + +[patch.crates-io] +bp-consensus = { git = "https://github.com/BP-WG/bp-core", branch = "methods" } +bp-dbc = { git = "https://github.com/BP-WG/bp-core", branch = "methods" } +bp-seals = { git = "https://github.com/BP-WG/bp-core", branch = "methods" } +bp-core = { git = "https://github.com/BP-WG/bp-core", branch = "methods" } +rgb-core = { git = "https://github.com/RGB-WG/rgb-core", branch = "methods" } diff --git a/src/containers/anchors.rs b/src/containers/anchors.rs index d9beb866..92ff6853 100644 --- a/src/containers/anchors.rs +++ b/src/containers/anchors.rs @@ -20,18 +20,36 @@ // limitations under the License. use std::cmp::Ordering; +use std::vec; use amplify::ByteArray; use bp::dbc::opret::OpretProof; use bp::dbc::tapret::TapretProof; use bp::dbc::{anchor, Anchor}; -use bp::{Tx, Txid}; +use bp::{dbc, Tx, Txid}; use commit_verify::mpc; -use rgb::validation::DbcProof; -use rgb::{BundleId, DiscloseHash, TransitionBundle, XChain, XWitnessId}; +use rgb::validation::{DbcProof, EAnchor}; +use rgb::{ + BundleId, DiscloseHash, OpId, Operation, Transition, TransitionBundle, XChain, XGraphSeal, + XWitnessId, +}; use strict_encoding::StrictDumb; -use crate::{MergeReveal, MergeRevealError, LIB_NAME_RGB_STD}; +use crate::containers::Dichotomy; +use crate::{MergeReveal, MergeRevealError, TypedAssignsExt, LIB_NAME_RGB_STD}; + +#[derive(Clone, Eq, PartialEq, Debug, Display, Error)] +#[display("state transition {0} is not a part of the bundle.")] +pub struct UnrelatedTransition(OpId, Transition); + +#[derive(Copy, Clone, Eq, PartialEq, Debug, Display, Error)] +#[display(doc_comments)] +pub enum AnchoredBundleMismatch { + /// witness bundle for witness id {0} already has both opret and tapret information. + AlreadyDouble(XWitnessId), + /// the combined anchored bundles for witness id {0} are of the same type. + SameBundleType(XWitnessId), +} #[derive(Clone, Eq, PartialEq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] @@ -159,36 +177,256 @@ impl PubWitness { )] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = DiscloseHash)] -pub struct WitnessBundle { +pub struct WitnessBundle { pub pub_witness: XPubWitness, - pub anchor: Anchor, - pub bundle: TransitionBundle, + pub anchored_bundles: AnchoredBundles, } -impl PartialEq for WitnessBundle

{ +impl PartialEq for WitnessBundle { fn eq(&self, other: &Self) -> bool { self.pub_witness == other.pub_witness } } -impl Ord for WitnessBundle

{ +impl Ord for WitnessBundle { fn cmp(&self, other: &Self) -> Ordering { self.pub_witness.cmp(&other.pub_witness) } } -impl PartialOrd for WitnessBundle

{ +impl PartialOrd for WitnessBundle { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } -impl WitnessBundle { +impl WitnessBundle { + #[inline] + pub fn with(pub_witness: XPubWitness, anchored_bundle: ClientBundle) -> Self { + Self { + pub_witness, + anchored_bundles: AnchoredBundles::from(anchored_bundle), + } + } + + pub fn into_double(mut self, other: ClientBundle) -> Result { + match (self.anchored_bundles, other.dbc_proof) { + (AnchoredBundles::Double { .. }, _) => { + return Err(AnchoredBundleMismatch::AlreadyDouble( + self.pub_witness.to_witness_id(), + )); + } + (AnchoredBundles::Opret(opret), DbcProof::Tapret(tapret)) => { + self.anchored_bundles = AnchoredBundles::Double { + tapret: ClientBundle::new(other.mpc_proof, tapret, other.bundle), + opret, + } + } + (AnchoredBundles::Tapret(tapret), DbcProof::Opret(opret)) => { + self.anchored_bundles = AnchoredBundles::Double { + opret: ClientBundle::new(other.mpc_proof, opret, other.bundle), + tapret, + } + } + _ => { + return Err(AnchoredBundleMismatch::SameBundleType( + self.pub_witness.to_witness_id(), + )); + } + } + Ok(self) + } + pub fn witness_id(&self) -> XWitnessId { self.pub_witness.to_witness_id() } + + pub fn reveal_seal(&mut self, bundle_id: BundleId, seal: XGraphSeal) -> bool { + let bundle = match &mut self.anchored_bundles { + AnchoredBundles::Tapret(tapret) | AnchoredBundles::Double { tapret, .. } + if tapret.bundle.bundle_id() == bundle_id => + { + Some(&mut tapret.bundle) + } + AnchoredBundles::Opret(opret) | AnchoredBundles::Double { opret, .. } + if opret.bundle.bundle_id() == bundle_id => + { + Some(&mut opret.bundle) + } + _ => None, + }; + let Some(bundle) = bundle else { + return false; + }; + bundle + .known_transitions + .values_mut() + .flat_map(|t| t.assignments.values_mut()) + .for_each(|a| a.reveal_seal(seal)); + + true + } + + pub fn anchored_bundles(&self) -> impl Iterator { + self.anchored_bundles.iter() + } + + #[inline] + pub fn known_transitions(&self) -> impl Iterator { + self.anchored_bundles + .bundles() + .flat_map(|bundle| bundle.known_transitions.values()) + } } -impl WitnessBundle { - pub fn merge_reveal(mut self, other: Self) -> Result { - self.pub_witness = self.pub_witness.merge_reveal(other.pub_witness)?; - if self.anchor != other.anchor { - return Err(MergeRevealError::AnchorsNonEqual(self.bundle.bundle_id())); +/// Keeps client-side data - a combination of client-side witness (anchor) and state (transition +/// bundle). Ensures that transition bundle uses the same DBC close method as used by the +/// client-side witness (anchor). +#[derive(Clone, PartialEq, Eq, Debug)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_STD)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase") +)] +pub struct ClientBundle { + mpc_proof: mpc::MerkleProof, + dbc_proof: D, + bundle: TransitionBundle, +} + +impl ClientBundle { + /// # Panics + /// + /// Panics if DBC proof and bundle have different closing methods + pub fn new(mpc_proof: mpc::MerkleProof, dbc_proof: D, bundle: TransitionBundle) -> Self { + assert_eq!(dbc_proof.method(), bundle.close_method); + Self { + mpc_proof, + dbc_proof, + bundle, } - self.bundle = self.bundle.merge_reveal(other.bundle)?; - Ok(self) + } + + #[inline] + pub fn bundle_id(&self) -> BundleId { self.bundle.bundle_id() } + + pub fn reveal_transition( + &mut self, + transition: Transition, + ) -> Result { + let opid = transition.id(); + if self.bundle.input_map.values().all(|id| *id != opid) { + return Err(UnrelatedTransition(opid, transition)); + } + if self.bundle.known_transitions.contains_key(&opid) { + return Ok(false); + } + self.bundle + .known_transitions + .insert(opid, transition) + .expect("same size as input map"); + Ok(true) + } +} + +#[derive(Clone, PartialEq, Eq, Debug)] +#[derive(StrictType, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_STD, tags = custom)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase") +)] +pub enum AnchoredBundles { + #[strict_type(tag = 0x01)] + Tapret(ClientBundle), + #[strict_type(tag = 0x02)] + Opret(ClientBundle), + #[strict_type(tag = 0x03)] + Double { + tapret: ClientBundle, + opret: ClientBundle, + }, +} + +impl StrictDumb for AnchoredBundles { + fn strict_dumb() -> Self { Self::Opret(strict_dumb!()) } +} + +impl From for AnchoredBundles { + fn from(ab: ClientBundle) -> Self { + match ab.dbc_proof { + DbcProof::Opret(proof) => { + Self::Opret(ClientBundle::::new(ab.mpc_proof, proof, ab.bundle)) + } + DbcProof::Tapret(proof) => { + Self::Tapret(ClientBundle::::new(ab.mpc_proof, proof, ab.bundle)) + } + } + } +} + +impl AnchoredBundles { + pub fn bundles(&self) -> impl Iterator { + match self { + AnchoredBundles::Tapret(tapret) => Dichotomy::single(&tapret.bundle), + AnchoredBundles::Opret(opret) => Dichotomy::single(&opret.bundle), + AnchoredBundles::Double { tapret, opret } => { + Dichotomy::double(&tapret.bundle, &opret.bundle) + } + } + .into_iter() + } + + pub fn into_bundles(self) -> impl Iterator { + match self { + AnchoredBundles::Tapret(tapret) => Dichotomy::single(tapret.bundle), + AnchoredBundles::Opret(opret) => Dichotomy::single(opret.bundle), + AnchoredBundles::Double { tapret, opret } => { + Dichotomy::double(tapret.bundle, opret.bundle) + } + } + .into_iter() + } + + pub fn iter(&self) -> impl Iterator { + match self { + AnchoredBundles::Tapret(tapret) => { + let anchor = + EAnchor::new(tapret.mpc_proof.clone(), tapret.dbc_proof.clone().into()); + Dichotomy::single((anchor, &tapret.bundle)) + } + AnchoredBundles::Opret(opret) => { + let anchor = EAnchor::new(opret.mpc_proof.clone(), opret.dbc_proof.clone().into()); + Dichotomy::single((anchor, &opret.bundle)) + } + AnchoredBundles::Double { tapret, opret } => { + let tapret_anchor = + EAnchor::new(tapret.mpc_proof.clone(), tapret.dbc_proof.clone().into()); + let opret_anchor = + EAnchor::new(opret.mpc_proof.clone(), opret.dbc_proof.clone().into()); + Dichotomy::double((tapret_anchor, &tapret.bundle), (opret_anchor, &opret.bundle)) + } + } + .into_iter() + } +} + +impl IntoIterator for AnchoredBundles { + type Item = (EAnchor, TransitionBundle); + type IntoIter = vec::IntoIter<(EAnchor, TransitionBundle)>; + + fn into_iter(self) -> Self::IntoIter { + match self { + AnchoredBundles::Tapret(tapret) => { + let anchor = EAnchor::new(tapret.mpc_proof, tapret.dbc_proof.into()); + Dichotomy::single((anchor, tapret.bundle)) + } + AnchoredBundles::Opret(opret) => { + let anchor = EAnchor::new(opret.mpc_proof, opret.dbc_proof.into()); + Dichotomy::single((anchor, opret.bundle)) + } + AnchoredBundles::Double { tapret, opret } => { + let tapret_anchor = EAnchor::new(tapret.mpc_proof, tapret.dbc_proof.into()); + let opret_anchor = EAnchor::new(opret.mpc_proof, opret.dbc_proof.into()); + Dichotomy::double((tapret_anchor, tapret.bundle), (opret_anchor, opret.bundle)) + } + } + .into_iter() } } diff --git a/src/containers/consignment.rs b/src/containers/consignment.rs index cd91798f..045bc9c1 100644 --- a/src/containers/consignment.rs +++ b/src/containers/consignment.rs @@ -50,7 +50,7 @@ use super::{ use crate::interface::{Iface, IfaceImpl}; use crate::persistence::{MemContract, MemContractState}; use crate::resolvers::ConsignmentResolver; -use crate::{BundleExt, SecretSeal, LIB_NAME_RGB_STD}; +use crate::{SecretSeal, LIB_NAME_RGB_STD}; pub type Transfer = Consignment; pub type Contract = Consignment; @@ -296,10 +296,7 @@ impl Consignment { for mut witness_bundle in self.bundles { for (bundle_id, secret) in &self.terminals { if let Some(seal) = f(*secret)? { - if witness_bundle.bundle.bundle_id() == *bundle_id { - witness_bundle.bundle.reveal_seal(seal); - break; - } + witness_bundle.reveal_seal(*bundle_id, seal); } } bundles.push(witness_bundle).ok(); diff --git a/src/containers/indexed.rs b/src/containers/indexed.rs index a8e332a5..355d8c28 100644 --- a/src/containers/indexed.rs +++ b/src/containers/indexed.rs @@ -36,7 +36,7 @@ use crate::containers::anchors::ToWitnessId; pub struct IndexedConsignment<'c, const TRANSFER: bool> { consignment: &'c Consignment, scripts: Scripts, - anchor_idx: BTreeMap, + anchor_idx: BTreeMap, bundle_idx: BTreeMap, op_witness_idx: BTreeMap, op_bundle_idx: BTreeMap, @@ -61,14 +61,15 @@ impl<'c, const TRANSFER: bool> IndexedConsignment<'c, TRANSFER> { for witness_bundle in &consignment.bundles { witness_idx .insert(witness_bundle.pub_witness.to_witness_id(), &witness_bundle.pub_witness); - let bundle = &witness_bundle.bundle; - let bundle_id = bundle.bundle_id(); let witness_id = witness_bundle.pub_witness.to_witness_id(); - bundle_idx.insert(bundle_id, bundle); - anchor_idx.insert(bundle_id, (witness_id, &witness_bundle.anchor)); - for opid in witness_bundle.bundle.known_transitions.keys() { - op_witness_idx.insert(*opid, witness_id); - op_bundle_idx.insert(*opid, bundle_id); + for (anchor, bundle) in witness_bundle.anchored_bundles() { + let bundle_id = bundle.bundle_id(); + bundle_idx.insert(bundle_id, bundle); + anchor_idx.insert(bundle_id, (witness_id, anchor)); + for opid in bundle.known_transitions.keys() { + op_witness_idx.insert(*opid, witness_id); + op_bundle_idx.insert(*opid, bundle_id); + } } } for extension in &consignment.extensions { @@ -137,7 +138,7 @@ impl<'c, const TRANSFER: bool> ConsignmentApi for IndexedConsignment<'c, TRANSFE } fn anchor(&self, bundle_id: BundleId) -> Option<(XWitnessId, &EAnchor)> { - self.anchor_idx.get(&bundle_id).map(|(id, set)| (*id, *set)) + self.anchor_idx.get(&bundle_id).map(|(id, set)| (*id, set)) } fn op_witness_id(&self, opid: OpId) -> Option { diff --git a/src/containers/mod.rs b/src/containers/mod.rs index 277138e2..76ed6377 100644 --- a/src/containers/mod.rs +++ b/src/containers/mod.rs @@ -38,7 +38,10 @@ mod file; mod kit; mod suppl; -pub use anchors::{AnchorSet, PubWitness, SealWitness, ToWitnessId, WitnessBundle, XPubWitness}; +pub use anchors::{ + AnchorSet, AnchoredBundleMismatch, AnchoredBundles, ClientBundle, PubWitness, SealWitness, + ToWitnessId, UnrelatedTransition, WitnessBundle, XPubWitness, +}; pub use consignment::{ Consignment, ConsignmentExt, ConsignmentId, ConsignmentParseError, Contract, Transfer, ValidConsignment, ValidContract, ValidTransfer, diff --git a/src/containers/partials.rs b/src/containers/partials.rs index 28e9ca61..c46ccb5b 100644 --- a/src/containers/partials.rs +++ b/src/containers/partials.rs @@ -31,7 +31,10 @@ use rgb::{ ContractId, OpId, Operation, Transition, TransitionBundle, TxoSeal, XOutpoint, XOutputSeal, XWitnessId, }; -use strict_encoding::{StrictDecode, StrictDeserialize, StrictDumb, StrictEncode, StrictSerialize}; +use strict_encoding::{ + DecodeError, ReadStruct, StrictDecode, StrictDeserialize, StrictDumb, StrictEncode, + StrictProduct, StrictSerialize, StrictStruct, StrictType, TypedRead, TypedWrite, WriteStruct, +}; use crate::containers::{AnchorSet, XPubWitness}; use crate::LIB_NAME_RGB_STD; @@ -247,20 +250,54 @@ impl Batch { pub type BundleDichotomy = Dichotomy; pub type TransitionDichotomy = Dichotomy; +// TODO: Move to amplify #[derive(Clone, PartialEq, Eq, Hash, Debug)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB_STD)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), serde(crate = "serde_crate", rename_all = "camelCase") )] -pub struct Dichotomy { +pub struct Dichotomy { pub first: T, pub second: Option, } -impl FromIterator for Dichotomy { +impl StrictType for Dichotomy { + const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB_STD; +} +impl StrictProduct for Dichotomy {} +impl StrictStruct for Dichotomy { + const ALL_FIELDS: &'static [&'static str] = &["first", "second"]; +} +impl StrictEncode for Dichotomy { + fn strict_encode(&self, writer: W) -> std::io::Result { + writer.write_struct::(|w| { + Ok(w.write_field(fname!("first"), &self.first)? + .write_field(fname!("second"), &self.second)? + .complete()) + }) + } +} +impl StrictDecode for Dichotomy { + fn strict_decode(reader: &mut impl TypedRead) -> Result { + reader.read_struct(|r| { + Ok(Self { + first: r.read_field(fname!("first"))?, + second: r.read_field(fname!("second"))?, + }) + }) + } +} +impl StrictDumb for Dichotomy { + fn strict_dumb() -> Self { + Self { + first: T::strict_dumb(), + second: None, + } + } +} + +impl FromIterator for Dichotomy { fn from_iter>(iter: I) -> Self { let mut iter = iter.into_iter(); let first = iter.next().expect("iterator must have at least one item"); @@ -270,7 +307,7 @@ impl FromIterator for Dichotomy< } } -impl IntoIterator for Dichotomy { +impl IntoIterator for Dichotomy { type Item = T; type IntoIter = vec::IntoIter; @@ -284,7 +321,21 @@ impl IntoIterator for Dichotomy } } -impl Dichotomy { +impl Dichotomy { + pub fn single(first: T) -> Self { + Self { + first, + second: None, + } + } + + pub fn double(first: T, second: T) -> Self { + Self { + first, + second: Some(second), + } + } + pub fn with(first: T, second: Option) -> Self { Self { first, second } } pub fn iter(&self) -> vec::IntoIter<&T> { diff --git a/src/contract/bundle.rs b/src/contract/bundle.rs deleted file mode 100644 index ef9788ca..00000000 --- a/src/contract/bundle.rs +++ /dev/null @@ -1,68 +0,0 @@ -// RGB standard library for working with smart contracts on Bitcoin & Lightning -// -// SPDX-License-Identifier: Apache-2.0 -// -// Written in 2019-2024 by -// Dr Maxim Orlovsky -// -// Copyright (C) 2019-2024 LNP/BP Standards Association. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use rgb::{GraphSeal, OpId, Operation, Transition, TransitionBundle, XChain}; - -use crate::contract::TypedAssignsExt; - -#[derive(Clone, Eq, PartialEq, Debug, Display, Error)] -#[display(doc_comments)] -pub enum RevealError { - /// the provided state transition is not a part of the bundle - UnrelatedTransition(OpId, Transition), -} - -pub trait BundleExt { - /// Ensures that the seal is revealed inside the bundle. - fn reveal_seal(&mut self, seal: XChain); - - /// Ensures that the transition is revealed inside the bundle. - /// - /// # Returns - /// - /// `true` if the transition was previously concealed; `false` if it was - /// already revealed; error if the transition is unrelated to the bundle. - fn reveal_transition(&mut self, transition: Transition) -> Result; -} - -impl BundleExt for TransitionBundle { - fn reveal_seal(&mut self, seal: XChain) { - for (_, transition) in self.known_transitions.keyed_values_mut() { - for (_, assign) in transition.assignments.keyed_values_mut() { - assign.reveal_seal(seal) - } - } - } - - fn reveal_transition(&mut self, transition: Transition) -> Result { - let opid = transition.id(); - if self.input_map.values().all(|id| id != &opid) { - return Err(RevealError::UnrelatedTransition(opid, transition)); - } - if self.known_transitions.contains_key(&opid) { - return Ok(false); - } - self.known_transitions - .insert(opid, transition) - .expect("same size as input map"); - Ok(true) - } -} diff --git a/src/contract/mod.rs b/src/contract/mod.rs index 9322b78e..624830ed 100644 --- a/src/contract/mod.rs +++ b/src/contract/mod.rs @@ -20,11 +20,9 @@ // limitations under the License. mod assignments; -mod bundle; mod merge_reveal; pub use assignments::{KnownState, OutputAssignment, TypedAssignsExt, WitnessInfo}; -pub use bundle::{BundleExt, RevealError}; pub use merge_reveal::{MergeReveal, MergeRevealError}; use rgb::vm::OrdOpRef; use rgb::{ExtensionType, OpId, TransitionType, XWitnessId}; diff --git a/src/lib.rs b/src/lib.rs index b2531ffd..d428aa06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,8 +47,7 @@ pub mod info; pub use bp::{Outpoint, Txid}; pub use contract::{ - BundleExt, KnownState, MergeReveal, MergeRevealError, OutputAssignment, RevealError, - TypedAssignsExt, WitnessInfo, + KnownState, MergeReveal, MergeRevealError, OutputAssignment, TypedAssignsExt, WitnessInfo, }; pub use invoice::{Allocation, Amount, CoinAmount, OwnedFraction, Precision, TokenIndex}; pub use rgb::prelude::*; diff --git a/src/persistence/index.rs b/src/persistence/index.rs index a047d7d0..b07b831c 100644 --- a/src/persistence/index.rs +++ b/src/persistence/index.rs @@ -171,12 +171,13 @@ impl Index

{ } for WitnessBundle { pub_witness, - bundle, - anchor: _, + anchored_bundles, } in consignment.bundled_witnesses() { let witness_id = pub_witness.to_witness_id(); - self.index_bundle(contract_id, bundle, witness_id)?; + for bundle in anchored_bundles.bundles() { + self.index_bundle(contract_id, bundle, witness_id)?; + } } Ok(()) diff --git a/src/persistence/memory.rs b/src/persistence/memory.rs index a37d1756..5b5d229e 100644 --- a/src/persistence/memory.rs +++ b/src/persistence/memory.rs @@ -580,7 +580,7 @@ impl StateReadProvider for MemState { let ord = self .witnesses .get(&witness_id) - .ok_or(StateInconsistency::AbsentValidWitness)?; + .ok_or(StateInconsistency::AbsentWitness(witness_id))?; Ok(ord.is_valid()) } } @@ -1345,7 +1345,7 @@ impl IndexReadProvider for MemIndex { &self, bundle_id: BundleId, ) -> Result<(impl Iterator, ContractId), IndexReadError> { - let witness_ids = self + let witness_id = self .bundle_witness_index .get(&bundle_id) .ok_or(IndexInconsistency::BundleWitnessUnknown(bundle_id))?; @@ -1353,7 +1353,7 @@ impl IndexReadProvider for MemIndex { .bundle_contract_index .get(&bundle_id) .ok_or(IndexInconsistency::BundleContractUnknown(bundle_id))?; - Ok((witness_ids.iter().copied(), *contract_id)) + Ok((witness_id.iter().cloned(), *contract_id)) } } @@ -1387,12 +1387,10 @@ impl IndexWriteProvider for MemIndex { } .into()); } - let mut set = self - .bundle_witness_index - .remove(&bundle_id)? - .unwrap_or_default(); - set.push(witness_id)?; - self.bundle_witness_index.insert(bundle_id, set)?; + self.bundle_witness_index + .entry(bundle_id)? + .or_default() + .push(witness_id)?; let present2 = self .bundle_contract_index .insert(bundle_id, contract_id)? @@ -1521,7 +1519,10 @@ impl MemIndex { .remove(&seal) .expect("can have zero elements") { - Some(mut existing_opouts) => existing_opouts.push(opout)?, + Some(mut existing_opouts) => { + existing_opouts.push(opout)?; + let _ = self.terminal_index.insert(seal, existing_opouts); + } None => { self.terminal_index.insert(seal, tiny_bset![opout])?; } diff --git a/src/persistence/stash.rs b/src/persistence/stash.rs index 0924fdd0..dd0d6abb 100644 --- a/src/persistence/stash.rs +++ b/src/persistence/stash.rs @@ -513,8 +513,8 @@ impl Stash

{ .map_err(StashError::WriteProvider)?; } - for bw in consignment.bundles { - self.consume_bundled_witness(contract_id, bw)?; + for witness_bundles in consignment.bundles { + self.consume_witness_bundle(contract_id, witness_bundles)?; } for (id, attach) in consignment.attachments { @@ -545,28 +545,95 @@ impl Stash

{ }) } - fn consume_bundled_witness( + fn consume_witness_bundle( &mut self, contract_id: ContractId, - bundled_witness: WitnessBundle, + witness_bundle: WitnessBundle, ) -> Result<(), StashError

> { let WitnessBundle { pub_witness, - bundle, - anchor, - } = bundled_witness; + anchored_bundles, + } = witness_bundle; - // TODO: Save pub witness transaction and SPVs + // TODO: Save pub witness transaction SPVs - let bundle_id = bundle.bundle_id(); - self.consume_bundle(bundle)?; + let mut anchors = Vec::with_capacity(2); + for (anchor, bundle) in anchored_bundles.into_iter() { + let bundle_id = bundle.bundle_id(); + self.consume_bundle(bundle)?; - let proto = mpc::ProtocolId::from_byte_array(contract_id.to_byte_array()); - let msg = mpc::Message::from_byte_array(bundle_id.to_byte_array()); - let merkle_block = MerkleBlock::with(&anchor.mpc_proof, proto, msg)?; - let anchors = match anchor.dbc_proof { - DbcProof::Tapret(tapret) => AnchorSet::Tapret(Anchor::new(merkle_block, tapret)), - DbcProof::Opret(opret) => AnchorSet::Opret(Anchor::new(merkle_block, opret)), + let proto = mpc::ProtocolId::from_byte_array(contract_id.to_byte_array()); + let msg = mpc::Message::from_byte_array(bundle_id.to_byte_array()); + let merkle_block = MerkleBlock::with(&anchor.mpc_proof, proto, msg)?; + anchors.push(Anchor::new(merkle_block, anchor.dbc_proof)); + } + + let anchors = match (anchors.pop().unwrap(), anchors.pop()) { + ( + Anchor { + dbc_proof: DbcProof::Opret(opret), + mpc_proof, + .. + }, + None, + ) => AnchorSet::Opret(Anchor::new(mpc_proof, opret)), + ( + Anchor { + dbc_proof: DbcProof::Tapret(tapret), + mpc_proof, + .. + }, + None, + ) => AnchorSet::Tapret(Anchor::new(mpc_proof, tapret)), + ( + Anchor { + dbc_proof: DbcProof::Tapret(tapret), + mpc_proof: mpc_proof_tapret, + .. + }, + Some(Anchor { + dbc_proof: DbcProof::Opret(opret), + mpc_proof: mpc_proof_opret, + .. + }), + ) + | ( + Anchor { + dbc_proof: DbcProof::Opret(opret), + mpc_proof: mpc_proof_opret, + .. + }, + Some(Anchor { + dbc_proof: DbcProof::Tapret(tapret), + mpc_proof: mpc_proof_tapret, + .. + }), + ) => AnchorSet::Double { + tapret: Anchor::new(mpc_proof_tapret, tapret), + opret: Anchor::new(mpc_proof_opret, opret), + }, + ( + Anchor { + dbc_proof: DbcProof::Opret(_), + .. + }, + Some(Anchor { + dbc_proof: DbcProof::Opret(_), + .. + }), + ) + | ( + Anchor { + dbc_proof: DbcProof::Tapret(_), + .. + }, + Some(Anchor { + dbc_proof: DbcProof::Tapret(_), + .. + }), + ) => unreachable!( + "these combinations must be prevented at the `AnchoredBundles` structure level" + ), }; let witness = SealWitness { public: pub_witness.clone(), diff --git a/src/persistence/state.rs b/src/persistence/state.rs index 91e5356d..4e8c21d8 100644 --- a/src/persistence/state.rs +++ b/src/persistence/state.rs @@ -52,6 +52,10 @@ pub enum StateError { #[display(doc_comments)] Resolver(XWitnessId, WitnessResolverError), + /// valid (non-archived) witness is absent in the list of witnesses for a + /// state transition bundle. + AbsentValidWitness, + /// {0} /// /// It may happen due to RGB standard library bug, or indicate internal @@ -66,9 +70,8 @@ pub enum StateError { pub enum StateInconsistency { /// contract state {0} is not known. UnknownContract(ContractId), - /// valid (non-archived) witness is absent in the list of witnesses for a - /// state transition bundle. - AbsentValidWitness, + /// a witness {0} is absent from the state data. + AbsentWitness(XWitnessId), } #[derive(Clone, Eq, PartialEq, Debug, Hash)] @@ -148,7 +151,7 @@ impl State

{ return Ok(witness_id); } } - Err(StateError::Inconsistency(StateInconsistency::AbsentValidWitness)) + Err(StateError::AbsentValidWitness) } pub fn update_from_bundle( @@ -190,7 +193,7 @@ impl State

{ .collect::>(); let mut ordered_extensions = BTreeMap::new(); for witness_bundle in consignment.bundled_witnesses() { - for transition in witness_bundle.bundle.known_transitions.values() { + for transition in witness_bundle.known_transitions() { let witness_id = witness_bundle.pub_witness.to_witness_id(); let witness_ord = resolver .resolve_pub_witness_ord(witness_id) diff --git a/src/persistence/stock.rs b/src/persistence/stock.rs index ebc366a0..b90c3052 100644 --- a/src/persistence/stock.rs +++ b/src/persistence/stock.rs @@ -27,7 +27,7 @@ use std::fmt::Debug; use amplify::confinement::{Confined, U24}; use amplify::Wrapper; -use bp::dbc::{Anchor, Method}; +use bp::dbc::Method; use bp::seals::txout::CloseMethod; use bp::Vout; use chrono::Utc; @@ -49,17 +49,18 @@ use super::{ StateWriteProvider, StoreTransaction, }; use crate::containers::{ - AnchorSet, Batch, BuilderSeal, Consignment, ContainerVer, ContentId, ContentRef, Contract, - Fascia, Kit, SealWitness, SupplItem, SupplSub, Transfer, TransitionDichotomy, TransitionInfo, - TransitionInfoError, ValidConsignment, ValidContract, ValidKit, ValidTransfer, VelocityHint, - WitnessBundle, SUPPL_ANNOT_VELOCITY, + AnchorSet, AnchoredBundleMismatch, Batch, BuilderSeal, ClientBundle, Consignment, ContainerVer, + ContentId, ContentRef, Contract, Fascia, Kit, SealWitness, SupplItem, SupplSub, Transfer, + TransitionDichotomy, TransitionInfo, TransitionInfoError, UnrelatedTransition, + ValidConsignment, ValidContract, ValidKit, ValidTransfer, VelocityHint, WitnessBundle, + SUPPL_ANNOT_VELOCITY, }; use crate::info::{ContractInfo, IfaceInfo, SchemaInfo}; use crate::interface::{ BuilderError, ContractBuilder, ContractIface, Iface, IfaceClass, IfaceId, IfaceRef, IfaceWrapper, TransitionBuilder, }; -use crate::{BundleExt, MergeRevealError, RevealError}; +use crate::MergeRevealError; pub type ContractAssignments = HashMap>; @@ -107,6 +108,10 @@ pub enum StockError< #[from] StashData(StashDataError), + /// valid (non-archived) witness is absent in the list of witnesses for a + /// state transition bundle. + AbsentValidWitness, + /// witness {0} can't be resolved: {1} WitnessUnresolved(XWitnessId, WitnessResolverError), } @@ -133,6 +138,7 @@ impl From Self::StateWrite(err), StateError::Inconsistency(e) => Self::StateInconsistency(e), StateError::Resolver(id, e) => Self::WitnessUnresolved(id, e), + StateError::AbsentValidWitness => Self::AbsentValidWitness, } } } @@ -169,7 +175,11 @@ pub enum ConsignError { #[from] #[display(inner)] - Reveal(RevealError), + Transition(UnrelatedTransition), + + #[from] + #[display(inner)] + AnchoredBundle(AnchoredBundleMismatch), /// the spent state from transition {1} inside bundle {0} is concealed. Concealed(BundleId, OpId), @@ -187,10 +197,16 @@ impl From Self { Self::InvalidInput(err.into()) } } -impl From +impl From for StockError { - fn from(err: RevealError) -> Self { Self::InvalidInput(err.into()) } + fn from(err: UnrelatedTransition) -> Self { Self::InvalidInput(err.into()) } +} + +impl From + for StockError +{ + fn from(err: AnchoredBundleMismatch) -> Self { Self::InvalidInput(err.into()) } } #[derive(Clone, PartialEq, Eq, Debug, Display, Error, From)] @@ -303,6 +319,7 @@ macro_rules! stock_err_conv { StockError::IndexWrite(e) => StockError::IndexWrite(e), StockError::StateRead(e) => StockError::StateRead(e), StockError::StateWrite(e) => StockError::StateWrite(e), + StockError::AbsentValidWitness => StockError::AbsentValidWitness, StockError::StashData(e) => StockError::StashData(e), StockError::StashInconsistency(e) => StockError::StashInconsistency(e), StockError::StateInconsistency(e) => StockError::StateInconsistency(e), @@ -751,7 +768,7 @@ impl Stock { opouts.extend(self.index.opouts_by_terminals(secret_seal.into_iter())?); // 1.3. Collect all state transitions assigning state to the provided outpoints - let mut witness_bundles = BTreeMap::::new(); + let mut anchored_bundles = BTreeMap::::new(); let mut transitions = BTreeMap::::new(); let mut terminals = BTreeMap::>::new(); for opout in opouts { @@ -774,9 +791,8 @@ impl Stock { } } - if let Entry::Vacant(entry) = witness_bundles.entry(bundle_id) { - let bw = self.witness_bundle(bundle_id)?; - entry.insert(bw); + if let Entry::Vacant(entry) = anchored_bundles.entry(bundle_id) { + entry.insert(self.client_bundle(bundle_id)?); } } @@ -793,10 +809,9 @@ impl Stock { ids.extend(transition.inputs().iter().map(|input| input.prev_out.op)); transitions.insert(id, transition.clone()); let bundle_id = self.index.bundle_id_for_op(transition.id())?; - witness_bundles + anchored_bundles .entry(bundle_id) - .or_insert(self.witness_bundle(bundle_id)?.clone()) - .bundle + .or_insert(self.client_bundle(bundle_id)?.clone()) .reveal_transition(transition.clone())?; } @@ -842,16 +857,16 @@ impl Stock { let ifaces = Confined::from_checked(ifaces); let mut bundles = BTreeMap::::new(); - for witness_bundle in witness_bundles.into_values() { - let witness_id = witness_bundle.witness_id(); - match bundles.get_mut(&witness_id) { - Some(prev) => { - *prev = prev.clone().merge_reveal(witness_bundle)?; - } - None => { - bundles.insert(witness_id, witness_bundle); - } - } + for anchored_bundle in anchored_bundles.into_values() { + let witness_ids = self.index.bundle_info(anchored_bundle.bundle_id())?.0; + let witness_id = self.state.select_valid_witness(witness_ids)?; + let pub_witness = self.stash.witness(witness_id)?.public.clone(); + let wb = match bundles.remove(&witness_id) { + Some(bundle) => bundle.into_double(anchored_bundle)?, + None => WitnessBundle::with(pub_witness, anchored_bundle), + }; + let res = bundles.insert(witness_id, wb); + debug_assert!(res.is_none()); } let bundles = Confined::try_from_iter(bundles.into_values()) .map_err(|_| ConsignError::TooManyBundles)?; @@ -1346,7 +1361,7 @@ impl Stock { .ok_or(ConsignError::Concealed(bundle_id, opid).into()) } - fn witness_bundle(&self, bundle_id: BundleId) -> Result> { + fn client_bundle(&self, bundle_id: BundleId) -> Result> { let (witness_ids, contract_id) = self.index.bundle_info(bundle_id)?; let bundle = self.stash.bundle(bundle_id)?.clone(); @@ -1376,15 +1391,10 @@ impl Stock { ) .into()); }; - let anchor = Anchor::new(mpc_proof, dbc); // TODO: Conceal all transitions except the one we need - Ok(WitnessBundle { - pub_witness: witness.public.clone(), - bundle, - anchor, - }) + Ok(ClientBundle::new(mpc_proof, dbc, bundle)) } pub fn store_secret_seal( diff --git a/src/stl/stl.rs b/src/stl/stl.rs index 2aeb050b..959cf478 100644 --- a/src/stl/stl.rs +++ b/src/stl/stl.rs @@ -41,7 +41,7 @@ use crate::LIB_NAME_RGB_STD; /// Strict types id for the library providing standard data types which may be /// used in RGB smart contracts. pub const LIB_ID_RGB_STORAGE: &str = - "stl:YBgLtVmT-FuzNBPe-1fxIqay-JW4Evd5-Za7fm9w-GLF6JAg#transit-xray-giraffe"; + "stl:hHEaUT1x-VjyiUK0-v$pgYr0-xQwdM5m-S3UaY23-nj7!2vM#orbit-virgo-basil"; /// Strict types id for the library providing standard data types which may be /// used in RGB smart contracts. @@ -50,7 +50,7 @@ pub const LIB_ID_RGB_CONTRACT: &str = /// Strict types id for the library representing of RGB StdLib data types. pub const LIB_ID_RGB_STD: &str = - "stl:H1HLPfyC-5YLlAk!-KWhcUo1-0vtex!9-ODxSmIA-zj1J$qc#western-craft-bogart"; + "stl:JhUC5JgH-Kwps4cO-ZNUklUj-UP6boFp-OY!18Kx-xOSJaVQ#hair-magnum-helena"; fn _rgb_std_stl() -> Result { LibBuilder::new(libname!(LIB_NAME_RGB_STD), tiny_bset! { diff --git a/stl/RGBStd@0.11.0.sta b/stl/RGBStd@0.11.0.sta index bec475b7..5c9d924c 100644 --- a/stl/RGBStd@0.11.0.sta +++ b/stl/RGBStd@0.11.0.sta @@ -1,306 +1,311 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:H1HLPfyC-5YLlAk!-KWhcUo1-0vtex!9-ODxSmIA-zj1J$qc#western-craft-bogart +Id: stl:JhUC5JgH-Kwps4cO-ZNUklUj-UP6boFp-OY!18Kx-xOSJaVQ#hair-magnum-helena Name: RGBStd Dependencies: + RGBCommit#harvest-person-orion, StrictTypes#century-comrade-chess, + BPCore#austin-story-retro, AluVM#congo-archive-folio, - RGBCommit#tuna-safari-design, - RGBLogic#explain-marvin-bless, CommitVerify#miller-pancake-elastic, - BPCore#totem-holiday-helena, Std#ralph-blue-lucky, Bitcoin#signal-color-cipher -Check-SHA256: 04b8598c3e334bc5ad1ed6d7f4d5b7aaec4e86a6205329e4b40d3a089dbc918f +Check-SHA256: 6a9228bc3dd61ed396d19a0d3e71c3a3dfc999d232e57ec13c1488bb0b6eeb91 -22w{tQ*>kqMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r3sZD*X=8L$d2nTOVsJHoA?4$swuZp1 -Wc+9AOf`(TIbyKWjTy4WkGaM+1wm|eR!wBY)d@|xKsr716mTQmaB}ROZ@Dgs2ia_2=g^?i+KdTOM?yny -ZEb0EZYmQ7jMFx!r5s@rJ-O*H1;I5Y*Jq{lbOS_Kbz-c)2vSEvOmAmtV|oJ}-)Viz@~C%8KNS}Z0aQ3s -^SOqbBwN-D{wl@OCJaMwZEb0ER%LQ&W_hMrvQRIBF~gy)hQg^4yxce6i-HaxmCGKABZpBR?$8E8P(yEW -Wy&lbZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCj(P-Wc6$lVk7oBr%DNv+($;q`HHK!gIHa)*%m(- -e#9sm3I{@IbYpL6ZU_ZIY;{&m1^^NSr?vtRe2PRb^)}W8ZdqCQlr&gKJ5X<}{fp(f$H -b>aU=OZ$bvG|>z)+>9PT;Au-7)~D;-++hbyX<}1pbY+s|KgxOTbXgHlB~91)qbQqD?1jgn -N8blYb74+lZDpr0RRS&fT*&Z=qeY@Wmfle*z!SF)@h8|JkU^FEQwjx4X<|uavkfUR&BN*@p#4(ibP}+p -taQ)Oq;;uu>eaRuf?``QO_k(5tm>UaGoca9LuK7Ij+X8IutaRAF#(Wpqw&WMxoca&&HGau2p2m_Hir -tB!lh<{Yi-S-!KI0_27BH<@sVme~^s3=33YaB^jIP;zf?W)s9yQf4Q+L?w(nXY|a%e*XOAC%4aD5B-6U -FMfO2d=FG%aB^jIP+@dvP;zf?W-hl7CAn^87TS9h9ibhaZ&^Bcn*B*;w|~I;-PD|t>jq6_bZBp6I6q=8 -aZ}RBA(1@GcO9QSWZ!o3C{DXc_Cg)w39@m$R6qOEzWQ+NTC@=;{OM>iY* -&c?b?aZznm(1lyi>kUF|X>MdwWnpYocxhy@ZeT05|jA;vvYupWm6Q)O{ZZweWZ*HiKem1Z9kJM|+< -C6E3~$lVDiq#NV}y^f+rssvPcNp2zIK10Q-T=FR=Q=>S+XYD&bY*ifyRPVjiFd`Y2QhLn&64&owka*miGSR> --o?7a>3`V^RAF#VZ)9aiVRL9T+8q@+Aa1+e+@!-jhcW8%o2S}z-#y5JARJB>wYeM!OmAarRB3HxICTWE -OMDJSZAYFLM|~u8B!Bn=Wb8dls`ok|_d#@P2~%ljQ)6;zaCBd+*=^-NPQ?`2v5jYd+6t@dEhY>7H!Y*U -dZb-BpG^u(WnpGhV{&P5bdWn_aCwA}8zxgKpy7|rEn>a@Jg9&ldILR+=b-aAzAVr?5I2ooM2Ulry -Ze??Gqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B1XOrwWTLLzo&{8RR%LRjg@kugo@o29zwXDHA;ech!BqJAy+4@X(~&*rw>NkSNp5sya&BR4P;0g`38@&r -wvr8Q$XKK#ha*N>X+Ls92fzOv*E(~7PRR#MWnpGkWpcj!9{gsd8U18ZYC02#KAOx^Y=h@ -bX*KmV{&P5bWn9-Yh`)Fa%+!|DA9Vsm&hHC4WXN2M4aZ(WL^Hp>3BS~hw-BaLV0v$Q*?60dm);?_c?BI -Mu4qFRxf<)p=@qHCf(fs{C;c$=G;UARCwrWK+Rkw`Mu(V|7oQWGN(Z+AyvH&RuaL#N4?X)a%pCH1^_soLxv|6 -1vo|i^jdP;% -w2}rc(F;vwa%*g5P;zf?W|Q||cyL4!ji%3ykIJtwI*nu%&Q~z;Vl^%5w -S6(#;{6ajG64wDPk{-(rQe|^xa&~28LV0v$b2R>f7D?ZDzCQez5c=X9w<(f6`q$DH-G17V_XV{1(H;&` -Wpib6c4cHjd30rSI0;fmLPKwDZE18w00U?O%&6V>N}#h955#ht!=;R2Lj=uo+MI7C_W0!u+z&-~bY*UH -X>V>*V`yb|`fdzI -Y;R&=Y*t}xb!BrDB|MH$#iox7(epK^GJZz3uq*Cb2l>R6Lh9EroO>_{O=WapR$**)WfhrcWXrXyKnGOw -A#t$mH2bG7pQ)aE=^FQF!@KkQhzLn;aCLM|VQ?5o)zidWvABmX&uCxQ{9vUAsn@)h(<^=)@3p(i4FwHH -Wo~72X>(I!Xk~3-Bv(?{Wq|OU%4#DwR1!oWV0@!2f9}lj6c7M!3JEHV3_)ykOksItaxqh7bR|V}zQMU~ -Cv3(oCX8r!*SiR9zOp;)>$$b(q=dpw@(@pVZe?UsbYXO5Q)6glZDA=T4hF%Q&3qd{UvF)tP|M@Vc@bh1 -|A(%Z=^thBTg(YTb8}^MRAFaxF0!Tm7r-z?Fqq(6n;Tke)*kJ44PoBPfF{#q^A_Q|307}uWK(oubY(K0 -R#67|O%*Grnxkw0HI;&$`LH+T3zWkAaKFZV1ceDiVRT_rbYXO5G*S<)6P6lYy(#<=BR_>s@(?%#f7ArN --=Rj?7Ns(14peesZgXjLX>V>+d2nSm!8D=zpn(&o-7tVWUa<1Q{n`|;)uYyv!)~4rGOBqCPh(?sa&l#E -V`XzWC-dJ*Ygad93@i9pCb+uV$agN<27ESr7(9FG*~&H@L349yXKq$+X=GD$VRU6eY-w&}Q)OXnRCrKy -ayffohRF9oualB}P71SaJfwx=uHX^JIK`}x&T2C;PAKlCCveQ{N4udSh#@3Dqj&&J9b8~5DZf#|5baO&% -X>MdwWnpYocu;h5M(yUq2ps*m=2xUDT;RqCgn#@WzFu~@adfH5^@&-|3szxlWo~16RC#b^NWB_v7yE`g -7JPmsUNvXifRDiWpZ<6ZbNTvZE19EWo~pzXnF^bIJ{KZXc;Wm98lWo=MdwWnpYocxhx>Z)vk7 -zTZV$_{ZYwZsV-}v4k`%cR+ywTd+-_+35lqRC#b^WI=OtX=iS8LTqVnWK(5fY*ct@WLl4N2_;P0H1c!=^sIJb7^O8Qe}2!VQgh&L}7GcLTqVnWK(5fY*ct@WMS$T_RVyy866uW -6(UoUJMwlSx^W#RES3wGAo{t~Y8XLtb7^O8ZDnqBb3$xsZe&wsVQf@*X=G$|9zv-Vp*%wog4O?q)g04A -aHEjnO6;Ie%sNwVNZt)acywiMb7^mGRC#b^ZA8ZOFKPukLlqCE=E5w*=z8TWl=ueJ45i$M_H~V*5K?7! -WnpY(WJYyvXK7+=WpE8;5VC@SZy&ckV>*V`yb+BFjcr)z~Z#|7V!q4uVJ{nYcaAjmcb8~5D -ZgWCxX>MdwWnpYocu;h5fgb0V4v@cHO73HjlbgFm42mCs2<+~e+;O=m63^mMAVG6;X=iRyWp-s@Y-MCb -VRT_aY-w&}Q)OXnRCrKya)JyEuWS7@0e2{bYWv?No0k%_$#~gq^1qCzduE|50q|r -gTt*-ZIkqGqXDRHN7@cTY-w&}X>MmmVPkY}a)xYW^+v~7{W03rq(;firJ6j(!OVQFqcY-w&}Q)OXnRCrKy -a+46efUz`Mi!Z}iQtl5;XwV(E`Zdd&WRj~^37YhpmjzF7Z*_E&z?57PmRE;x*JyQZ??N1%-?X%h&UrKU%$CX5lEZwTb6rTk%m8vvBgJ_74J{Jehz7Np5g;baSek)I|~ROXFB3|9;oFKZ_7pLug@XZcue%S7~%^Wpi_{jhE2@R4ADY@XOb3WHJm&VktwD1&R~J8Qi15 -W{8UrRB~Z%b7^#GZ*D?$Ze(m_w&;L{94K`ndk%K5+?9Jv$dw7jc}U5p5@2#$kUJ%u2uWmRZggpMdB|&m -dkb29#*qXha^)f?kI>J>8dqqbOFybHKpQ-MBMCulbWCA+WpXjekD95&21^?K{bw7Oyej@6CZq~drvB7pz2;cIXd9lO&nf5a*AnfQld~-bdb4MdwWnpYocu;h5+M7`mSQb`xkca!3_>4e9YQ#rfba;u!+d5tm#=h2RwFD4YLug@XZc}Ara%FT=WnpaHg=PS6VPp{$?vC--s`v@B8YHl) -C#jpVFzBk!DMw8SR$**qZewX>bKWD7Yo@G%*b#-tU^&3KX?w7l?~*Sh8@1jRRblZzybDKcZ(?C=Q*>c; -W#7-Kk@bh=O+>c=6Nvv2!%yAASLvLGVedrqOkAVG6;X=iRyWp-s@Y-MCtVQh6}LTqVnWK(5fY*ct@WC&76LQHRGX=4EZ -4!$0V0pzZFIpSn)xsYw`yZK|qY&x6i)e}5MB-6;q2t;CIP;zf?W&=}nWC#E!gwc#^4#qsMUl{*1zNe>I -^CwqAYJB+ZKALhJOg5MaL2PhnVMAeXb4b1;7b@t4MVjY>G@u4Q3HlB(d+LiLJm-R=h;`?dxDG*cV`*tn -a%paKVPb4$VTK~nd#>@6JWikDr@YkEAs#9)9JJvRH-Qc7Q2s%Kf+=VCy -OABEU3kOtrQ)O*QWJFFoaz*WZZ5##rf6bm&7qffY6*N`B##bI~HzDmr7z##dWo%?qWo=1hQx*t>6v={g -sJ=SZlTl1iF5eQ8IAl(q%E@>So406W2vm7+WlmvjWn_%h53p;7sgGx&z)8&prN#D&cR=tS@df05SQ3Z* -PZCvbZeeX@WJYOaY-Dp&Wo=1hYXqYdo~D%m7H6OD0<^0n_2##VWXRdjy=DB@qgYOj1yf~hNo0M=LMPN> -0NEy%g(UCHeUkYj{YR7-159lqXIqm$}teZO^;JC(UrZ-Ks{e+7M1*ZDnLeX=Q9=b5mt)No1EHgR0RS -PeIWLGZ_*YTjUMn3>33lep74@i%V@}#Ze4JZgp)|VRC6;+#Z*Ep$ -a%o|1baPW>ZAoPPfv$so3kRF1PV2}fOp_vjQ6FdFHId|V>$VQpmv0RRO80?I5NZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCnto_jB5_YJg;9E|1`d*r&;qS -S3+uh`0YNLave-Im;eX@$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#cxiZMvTM3tQ2*(p5s~Z{ -6V3QiK&W#-F~+s6raGiL0000000000{r~^~000003qfvfZ**aFX>V?G1pxpG0WnM89|TAhYfrNblQVQ` -LpZXKteHopy#|_NJkG`K5da7P06+i$00000009600000000000000000093000000000X?b8~5DZb@cg -V`T;e3U7CAWn@!yVRU5y-Vzs+-~y(u)KQ?3g=q&>T!Ej;9TxQjc0+10Fg2)p25@y^Y-wWx$}AplgPGkh -3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#VTK~nd#>C -WCF@89&dx0-7pM3Z=O*v*GCA9fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?|;InIPy66cFfOYp#JM2r7 -_Du+Fb!>ELaBO7)$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#VTK~nd#>V=;l-_zLn%tmAe68Jly{Qj?Kss0ny)C8x -zFm#1PkyMk2y}8`ZgXa3astXM9&dx0-7pM3Z=O*v*GCA9fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?| -;InIPy66cFfOYp#JM2r7_DuKtpQ8M_qJyiO1VIUJ=H=)@ii_0000000000|Nj60000002WMq&WpinB0%XM12~D{` -Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjO?=JcE6dyPJT+tk%Iz|R3_dTDo~ZL;TN>NvV?G00{zQ#MKE+xj;HS^AvC+-Eea3oo~4=i3iziU+2)E(%Otur}OFoDdEE8rbT!M3y4gMJ*2_uUvGVL -lsE)B`jpK80000000030|Ns9000007Vs&n0Y-Mu*2?0Hl)<>d4I}(*_lNXA@iYQk^RnB@|WjyHfhANam -kKF(O0000000960|Nj60000JaV`ybV!Z000000RI300000001I<Z4!V -_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HLtfv$so3kRF1PV2}fOp_vjQ6FdFHId|lr&gK9B000000000400000000YNbaY{3Xl-R~baMa-0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u -(4f-VjD&FwlPpg3!?y@aX^XIja4CK{WF&t@k=WXUZP9(YH~kpAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{j2~tNwLvL+uX>>*EqhH(h&*4NaBbD49mT$3z|G4nQgoFBhHh%l@K06L}1!AJ%| +P(yEWWnyqOe<9`Lptgpr6F_xjAC6(~TLj#*ewiHU&X!byiJ!10COKearHwcS=7M7YzYaI8*bv +hMOc?)(rkC#nUDXLvL+uX>?X)a%pCH$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#15DT%6aZ| +SrJerP1pIOD57`7Ol|-ogQ6Pjg~y>s-v>!^VNPLfWv4Jz0xkJm$nc4yMWR2J-cc#Q6SofWC)gp7L6!Sc +3I$AQVo7AP4Jk3r!|EoW{Zi$060oMN(jLzPuNboiNpoRSWoOdj7+WWC1?EKi+6QrwlvP$n +l8x-M691f9z+~t)>6ivgX<}1lX9hx0LvM0r3IG9o2VDR_OBR)w8yCZ2EylR&t_^>1Sz?kFbz0>alMxYA +VQ_L~bWU$%Wl&*qbZ%vG54IneKN{_;j(f`H9IfkFzO$PGD6U0+e +W+%HuC5$^~^vuG3{`}-8x6fV={eh1!etXz_4^&}ra%FT-VRUFva&K>DF1HXRxo%|^+Itiop&gxXSvq){ +{YhrGf57_P)SQy*22EvjXm4aVKVmL%Q_{#Gkvz+H9iKg9-*)mSRaq_gMnjYqO>G4cRAF#(Wpq+$XJ~Xn +a$#;`XhtWfE>N`F8f<{_M@^MEhcVy#omh=bI-rl&{j_4Y)eb^zX>MdwWnpYocu;h5M^4XN(CAD)cag{3QuryWpq$-Z*OL38SA{&vly$FvzVnzHf7z~rv`86=_Ka^V5yX|y#`JS +Q)OdvWpq?<6X>Jq%0U2$DDaiKPL`@Y=jhu|Vo)3+Q0$Mw; +ks-!CQm`I}1yf~lPHzeskk?c43YBIb6Fc=IN+pl}OUT^`C!`zX1ig-;MydoD@qdC-Hdlhx3aZBNPbr@aHF*SPB$t~%I3sYlqX>fEx +d30rSF}tqlgo$^>um>@6G0l?pFt#Zz&53{9y57aQ#OZ(83shlnPH$voNMUnmHQF5&IUsJk-Q1+ZJ%=&s +@|&mHbl*M5f*>4D7PYw?2uyEdYgB1%WjJ*Nu}gdoMr}u)7e{?0bR>WH17z$yORD!eAooFZYY9_nXH#Qx +X>fF3tl4elKTgFI*|CjhfZ7VH>n$b={WmS6z+ej~gaaD&)?_rinzL +Q&_n0fy*YdyZ9}hJM#rpcu#e7m-W{MLar(^k|jH+P94s~ljFZW({ZtfbA~le%!q<(1XE#jbDdR_th)Kl +;F~x`_=5>?(>Td5ZgsqT;~+(zt2h~^9tT%xbZ%vHbEASn^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1 +Rs>XdX=JE;#(89COl4taR%LR& +{2u&fr5XKXQffLAhd}4?5G@P7|2n}&PV@Ibc63|}Q)6;zaCA_0Vryl2#Bytok0{Z4!I#J#jt!xkVnm$g +&}3cy$LV-HwTJPe2SRytWm9x=#d{%|zxO$Aaz=oyMOH6-?4fLKKPKJW|NMSz1LoXB0#tbDYCz3gCHcML +g#T%!5i+MiDe1kloHngE|MP04pL=vWpZ|9WI}m#WpgzCf)+{N +c)mXTm=OBn8@DNvJ^I(u7Ttc@lJ^C)`OzK@Qe|^xa&~28LV0v$b2tf7M?ynyZEb0EL;wS50?er0_e!9% +6%WL6o5Q7yVM7GXa@w44CHDB`4cre!cywiMb7^mGQ)6glZD9j@leIk>g)RqK0VQ|Mwn6X+txo3vSYd;; +z)HQ~0$d0}b#7#AWl3ZSwto`e>uZ$?1z+)WysMU3t2e*FfKh32^DD>YKF13Ts`WEp!#kMM{I9mVQf}mY;|RG6eT>4P{pQ?3(@m6s4{*=wy-PiS_k>W +l|t&*Fr0fZ2~A~mVOC*mb!8QqXJpH@t3U@-^C5At>@@qQFQ2KNd+8eYXv4en`-lihZg6#UO<`~tNY&HC +T(P)^FVARS*Zg3m2dUS*m(weL9PhQe$_)h#M`dnhb7^x^V`ybEPw9I +@e~jMZwd)2j0{0+bWCA+WpXi7WppJ)biTp4ZzpWVEhda;c-OlKZN9QQ?CZI;=cI(fPVx{>cWz~5Q*>c; +Wm98lWo=<8B@PC`naz9~L0@lerBKV`$$1fC6#s{=m+2p6@mtIZL349ubW~wyb1t%_{ujV7L@=1(T$>wO +Y}Ov_b`4?P%YY`+Wb+o`y9rirX=GD$VRU6Oo>ox?`Aroor<$W|05z3@o%yggc;Wi(O`t`n9TUcD*&5hFi^PVx{q1b@^7zTcrn*%qZTXbx0zVQzD2bZKvHRC#b^Ho-KZ`k;Xmr`<4s +JYKN!!u{G5u+^j1lf!PF4>GEG3r}NXb#iiLZewM0IVbbqN^4g)WDG0#SSGl-+Q@e<+6H_!d>A}?>eT16ofolpo#8 +?XuHZHx7d=!p7E)2#$3bL349yXKrm}Zgg`(Y-w&}Q)OXnRCrKyaz^du!w4MxxaL=+DqP^k2!wz9AHH68 +xp8!<%Jqp^&I?vyY-Mg^c~p6DWk|gmZWsH8I~II?C0;dW+k!*yDqgzlqQwf$39g<|8WK=tWMy)5Wo|=n +ZEb0EZDnqBN@#iqkT|?l*=bx{^0c**fmF&H)l(b`S3$sb4!MK-5kqfoV`X7%Wn@NmZf9v?Y-Ljs%|ogz +QLxC5#{z1Bs(ImjcZKu%4y_xMoB3q3{238PY;R&=Y*Tb$bY)XxXk~3-Q>XLl0V(0al +>0fVsbCfs)I{K8&2}O8xWo~n6Z*Ei2ZB|09R9osd9G^&mV=@u*B|k@iff^?C=mvC@noA);b8~5DZc=4- +WnpY(WI=RvVPj}QY-w&}Q)OXnRCsA*T5oByCBEN9T=>W0>u%$${;`BKEO$VG0b8(5pxNmH8B}?2Wn@8f +b7^O8b3$xsZe&wsVQf@*X=GZDa|tC)BU>oS@xONigke(HCtahRyiRHf-TMdwWnpYocxhy0bsj>g6`?#s5rWnKhSeO?L~x^!;Y#eFP|P}0Z%Ez^MR;^&ZgXjGZd7@2Wo<;p^e<`! +Iztr?rsl#d#OQkEER^^L)C{HEhxT=ipb%1Jc4c8~Wn@NmZf9v?Y-Ml_We~E0fo~tTJ>?Q(lLJ=>rBY$7 +0^roXTE)+&>In@)Z*F5{VQgh&L}7Gcb>vO>-_DBy8`Vb0jGrW9$=2qSMXvL3HlVN`i= +Wp=e2Xp5rzopjE#5h98`u~h0v`BV8NkLOrpFzp4z*br25VQzD2bZKvHQ)6glZDD(|HElq4!)_b{H>!() +nCt8iM0hjp5N|z=I>OKHojw{=d2nT9L349yXKr&sY-w&}Q)OXnRCrKya)BP_mkyA>T}tj_kdvFcMGT4` +fC%jFncQ)?C=$=&Q6NEcb7^O8Qe}2!VQgh&L}7GcLTqVnWK(5fY*ctqbaH|W4XEgn0epQ +k*PX+nL>xOm%pK>soN7+Lug@XZbEEnZe&wsVQf@*X=H?P4U;TR^uxCZOKFR+hj1x=IbKf +Z0H=mhJ>?uV^xB4~9n`Dx!RtcK)nwJGn +aBp>VlfaZ*5|&qoaMx&cZSO)Ho!_*yjLvyQo1^f$X+6j;96@t)X=iR$Z)s#xbYXO5LTqVnWK(5fY*ct@ +WRz0V+XJhss8OG%_CC-Q>(otsF+cqN0Qy}ddQ=3E5C~IaXk~3-No1AC=6W7=VqesjRYGc!>wZFzp>JB4 +@xD;^wu&SY_r(NHa7kpJ2rNlD$O59e#ogQsB77jPl+h5j^*S;NLvL<$a$#e1No1ysFp)<~ +$~wYgjK`HkjV#@&#T1_fGnK3MJXK)_7bXoxb#7;AVr*qobYXO5siJyUlgOLOB};96cGdSG6&iv=7PD~j +ruGj4o;;a=21#ykb#!y8wrKJIUBJXnP(l%Y$cDDuY1Bm#?@QxYCjWldxIc>!SVL%GX>L$;VpnN&Ze??G +uZ@?{0aPfN4Did>Ze%hHN@6KPlLd+s#TneAz-EYx5L9wuZgXjLX>V>qb#7#AWwz*mh8!q$B6|*YuiTY; +OURW8#d%1{rxIXtTaY^?oCrx|Wo~q7ba}{Yf_n>Eea4XlBy!~v3=AX`3Ri2tjjmWpq?wXVr~g2n?Horiuqf0^m>2O`jNR +ziT$b7#=ya6uYYC;sr@=aCLOm?vf5kh_h+&YE#h%O8d1V_{UOl9{V;uR#^q%R5PSyeIwjVvMyte)HLS3WfgRB~Z%b7^#GZ*JDSGqJ&TQwZPkn|ZOr{h9VN +EFkRYIec?G`g2UV1s5Vgb8~5DZc=4-WnpY(WI=RvVPj}QY-w&}Q)OXnRCrKya@w0w6Id2jc94hrndMfL +ayEe1ISdA&%p{mB1!VWk)dNOmcG|`19mwqd!6t9MpF6k$l8zT&IM0)BxIjDir5zArRUtuhb7^O8Qe}2! +VQgh&R$**)WkPIeZe&wsVQf@*P;_$Jidq_i6cBYN^7xEELu$lFU37Sf$J;ty5yrmOX|)6pSVL%GX>LWpmymk!z-`g4hv-$6z_Y +xoLZ_neUP>BpbEf7FA*KKfDV^Y;R&=Y*Tb$bY;{@O*mP8`7qV21dnrCyk{{a-lF$FG0V5TNAc?Tc{K=4 +WprU=VRT{n^sESGu0eNZ)cp(*eFU-DRQ(QTUJ^TE1nY56>E%WYMs;pyX<}?;RC#b^{4_<~U(XE-|Ev|H +db$N7;9H9;8!%;3hl7uME$faw4?}NmV`X7%Wn@8gbYWv?|7c^tcv66A`G>fI&S@S1XLTY^Y?LL}v9ZWWu2|;XdXkkNP +aC1n$BNr;@ghiU?gEXK9KMDE{F?;HZBRuDVqlk6qmbeZmb;*F> +vukd;=m`ygb@x#_>`RmOO$0)3Z)|vJcxJL|x?WKK>7x;m>=zTw_)ojDN{iR+YxT1qeJQTRI%yh?{hxxA$ +L2PhnVMAeXb4+h!VRLBFJq*Jt8?Abrta^#~Iw-!oZ%zqO(A&rh^vGm~tg_w^L2PhnVN-2kY-~(#WMOk? +3sZD*X=8L$d2nTO4*&^LN2X=Q9=Q)O*QWK$LhgcQkwbf~^M){{|8P%hsRk~m~ep32F151Y4W +WC&DwaAi(mZDnMP)DN(0hN+Kdp}ZAoN($wDX8VgT7DmW3qm%zcviBmGB|7z0dgBIJ4& +sCG^VR$+2!VQzGR(<~&{!{{>E!(#o&^pB98KZhv1GEPn8Orhb4n;8ZMQ)zl>ZfBCy0{K32d-H~a`3x8b +375ImR&CF_#3#*gz1^xtuG$bzVQpn(MrmbiWOGwxZAoO8A%m*X98W>f2s0TH8C&EH;|vtDTYgh)4~t7} +WW`YoMQ(L%R$+2!VQzGDn938Qb#DiI%LhXtBc@pg0t!L7$2{bU&sPXOO(dS=5LRJwX<=@3Np5CuQ)O*Q +Wc?UbbJ9Xwr}~3wv^yxa@v}v^+kiGSR2X#8M$tG2GZIy9X>V>;VRC6_vj93RHP;Wm9=`bY*QQ01rWKV`y)3Wn@BiZe(m_a|8nc26SO?a%FS?1pxsz +U(P2B2NqiWU>yu4AB#Dm;I?Y3kL%RWN&q1Y-Ioj0tR$paB^jI0XARGCkqD_TK!-h3?(0nIicXTch2QnD}62L@rHg-X9aI? +a%FS@hd|-Wi=lHam_X!<3uvO83$-e(J0!3HH}n+hlR66r4nb~iZ**aFX>V>$VQpmv0RRO80?I5NZ-bfL +FbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCnto_jB5_YJg;9E|1`d*r&;qSS3+uh`0YNLave-Im;eX@$}Apl +gPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#cxiZMvTM3tQ2*(p5s~Z{6V3QiK&W#-F~+s6raGiL00000 +00000{r~^~000003qfvfZ**aFX>V?G1pxpG0WnM89|TAhYfrNblQVQ`LpZXKteHopy#|_NJkG`K5da7P +06+i$00000009600000000000000000093000000000X?b8~5DZb@cgV`T;e3U7CAWn@!yVRU5y-Vzs+ +-~y(u)KQ?3g=q&>T!Ej;9TxQjc0+10Fg2)p25@y^Y-wWx$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~G +Yywm#VTK~nd#>CWCF@89&dx0-7pM3Z=O*v*GCA9 +fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?|;InIPy66cFfOYp#JM2r7_Du+Fb!>ELaBO7)$}AplgPGkh +3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#VTK~nd#>0|;$!V^DH$Z)O5|10COKearHwcS=7M7YzYaI8*bvhMOc?)(rkC#nUE*(LK3V +&vL%&i(~ao9rExlGMgPx_&tqtqVlwo1}@PEWMX4ba&K>D0#*~&*VKn|nRBmPlPrrd^EP>$AHP6|FsuXs +I;G3ONJmc3T+rxDK6vW;JU&?LxLM72H?wDC1Zo}=N}D)4mj+^WZe(m_0w7l>toMja192_(UwD?W=?zm* +&IhOn$k(lG-qz;DsjrQf(E(H_nGEpD*KTAo3`$}tLz4xH6U7D0(t`--)Viz@~C%8KNS}Z0aQ3s^SOqbBwN-D{wl@OCWX;GxmM3|zUzx)^-Ue} +@Gdf&9Z>i^jdP;%w2}rc(FkN>V^DH$Z)O5k6V}(%hjW>8uUwNXi!t*yd7K}=K!`A`1OPgv%fUzwwjY>3 +8tto&d&=ez4Ev5gyU5%_yeyFzybaG*Cb7p070?I5NZ-bfLFbqC#o>4E?M+l67UG^w8 +*<_XZ#%uyqCt-#n(R;4&W&+>mb;*F>vukd;=m`ygb@x#_>`RmOO$l^ma&2jDVQg~%3IZTkC#?5~OapN( +_Fs6GvFQy{P|gRa2*}s1Y~I%9#i;{(leIk>g)RqK0VQ|Mwn6X+txo3vSYd;;z)HQ~0$c(hS0}9Zh)e@< +E%sk{ma*v#Q&7$as0hf{t!&=b=EbSoidq_i6cBYN^7xEELu$lFU37Sf$J;ty5yrmOX|)6Z0000000030 +{{R3000007XJu|>b7^w|AXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{j?6T%|znQ^KeoD%bg94CL +Cf*q;P?fLY7qq^#2NiM*3T1e7Wo~n6Z*Fq{2?8KjC#?5~OapN(_Fs6GvFQy{P|gRa2*}s1Y~I%9#i>)L +^XdU9;lkvmMR*4bh)jz;q`~Q5Z+&x=I0QQSl+6GD0000000960|Nj60000MKb#7#AWpe-t0nT^OmoUfe +VvhY+ARw!>`>M$upk~C-sV(3xjy;4dI{*Lx000000RR90{{R3000whoXk~3-0w7l>toMja192_(UwD?W +=?zm*&IhOn$k(lG-qz;DsX2RKhRF9oualB}P71SaJfwx=uHX^JIK`}#x3$o4Af`kVHyQ&~TYCSRqgWgjZ$<5FZnjcuT6B5B6)POqpHCTrHl4#QtZa;zni700000 +00000{{R30000003v+dFaBO95Wo~qH00{wOJ=2M>OG#EL&$!Mwbx&PZd +lOljoA7|k;k>s6qoa5|8f~f~{V{&P5baMa+0%CAAe<9`Lptgpr6F_xjAC6(~TLj#*ewiHWCD< +wgM1*ibOB +_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jgmDd%EKc;pw+KsVi?D}qDSkO*B!5Mb*xG|_(S5o&00;m8 +KmY&$000000RR900000000000000000RR6000000019(yXKrD1b#i5M015%()D=(>(T2L(qY0=?Nz4Ev5gyU5%_yeyFzybaG*C +b7p070?I5NZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCt-#n(R;4&W&+>mb;*F>vukd;=m`ygb@x#_ +>`RmOO$l^ma&2jDVQg~%3IZTkC#?5~OapN(_Fs6GvFQy{P|gRa2*}s1Y~I%9#i;{(leIk>g)RqK0VQ|M +wn6X+txo3vSYd;;z)HQ~0$c(hS0}9Zh)e@b7^w|AXg`>_lQgbaV_>=c$Ts04O39g +2dD_h*R5>c*5<{j?6T%|znQ^KeoD%bg94CLCf*q;P?fLY7qq^#2NiM*3T1e7Wo~n6Z*Fq{2?8KjC#?5~ +OapN(_Fs6GvFQy{P|gRa2*}s1Y~I%9#i>)L^XdU9;lkvmMR*4bh)jz;q`~Q5Z+&x=I0QQSl+6GD00000 +00960|Nj60000MKb#7#AWpe-t0nT^OmoUfeVvhY+ARw!>`>M$upk~C-sV(3xjy;4dI{*Lx000000RR90 +{{R3000whoXk~3-0w7l>toMja192_(UwD?W=?zm*&IhOn$k(lG-qz;DsX2RKhRF9oualB}P71SaJfwx= +uHX^JIK`}#x3$o4Af`kVHyQ&~TYCSRqgWgjZ$<5FZnj +cuT6B5B6)POqpHCTrHl4#QtZa;zni70000000000{{R30000003v+dFaBO95Wo~qH00{wOJ=2M>OG#EL +&$!Mwbx&PZdlOljoA7|k;k>s6qoa5|8f~f~{V{&P5baMa+0%CAAe<9`L +ptgpr6F_xjAC6(~TLj#*ewiHWCD_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jgmDd%EKc;p +w+KsVi?D}qDSkO*B!5Mb*xG|_(S5o&00;m8KmY&$000000RR900000000000000000RR6000000019(y +XKrD1b#i5M015%()D=(>(T2L(qY0=?N_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jp9m~TI>-W|y2ahx +3nF|Vuawki#7NH?S|Q-Q!u2{b0tIPiVPjm(ZiUQ7;QU9z@vLsQUy3b9HcVYybrT0cSFYzzA^b +6`Drj_fC5M7<0km5x1u)VS{2*yf9yYl?p>|ZggdCbW&wz1OxyEb7N>_ZD9Zf0RkXbC#?5~OapN(_Fs6G +vFQy{P|gRa2*}s1Y~I%9#i^81)7t~9tEf?*r}jS36zkMYeK9}${s8)2BzjZ?kPra}XJu|>b7^w`1pxve +S0}9Zh)e@2rNlD$O59e#ogQsB77jPl+h5j^*S;F +1!-nsV`TsZ0RcP8z<~n@;VY|KA!vt$qMEp^75#kD_Tqj3WXX=Y(#Wl3#tYybrT0anNlc)Z3! +7CPHT_+Dq|&?jn_(4)LjFAF^$MA+G=`wK&FZggdCbW>?(a|Hna3IZTkC#?5~OapN(_Fs6GvFQy{P|gRa +2*}s1Y~I%9#i_RFfQB3>bs~EXcCXx(drQcb3B`Fx$)^%va$Ar)C7b~v#}{qTDnK1gUZ=~4IPtBJuMnKC +WEcQ$kD_ZvQg;gh000000000A000000000EMR;^&ZgXjGZb@cgV`T;j2yJg~GYywm# +VTK~nd#>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0000000000{{R30000002WM<= +Vqt7^015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jHo-KZ`k;Xmr`<4sJYKN!!u{G5u+^j1 +lf!PF4>GEG0000000000{{R30000003t@9}X=iS2Wo~qH015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7 +Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p_lQgbaV_>=c$Ts04O39g2dD_h +*R5>c*5<{jHo-KZ`k;Xmr`<4sJYKN!!u{G5u+^j1lf!PF4>GEG0000000000{{R30000002XbX(Wo2!1 +00{y`>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pa{vhfMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r +8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0000000000{{R300000024!+`Z*p@02?9mxqhH(h +&Z4!V_T!KN +I`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pa{vhfMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{ +AMw{vgzX#P!9p!}0yp?_0000000000{{R300000024!+`Z*p@02?9mxqhH(hNn`*70ssVVZ*FA(00035b8l^B00jX8Me3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C +`}q*rYXqYdo~D%m7H6OD0<^0n_2##VWXRdjy=DB@qgYOj2y$g{b!l>CWCF@89&dx0-7pM3Z=O*v*GCA9 +fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?|;InIPy66cFfOYp#JM2r7_Du+Fb!>ELaBO7)$}AplgPGkh +3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#VTK~nd#>Z4!V_T!KNI`QJ|h6;Zj +^jB$MPK+?7Lu3>C`4HJt76^nC$%1sKzB<;EQA|)S-x88IWKN#S$#@T&w`gPtX>Mp`a%psP00;p)%D{mG +2;nQMTOnwNgyXhzrB~SH04;UKo5i(1Vxw^Y00000000300000000009bZKp6b97;CZ~y>E2yJC_VPs)+ +VE_sOMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!} +0yp?_0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*=q!&6rQG)02XJT?*g=|B=zREie$*y(7k2+ +*P~cYjQ{`u000000RI300000001IbqZ(?C=Q*>c;WdI5SMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C +`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0m=yGke?j1l!xqXd>q7+-P0pRHy9#PwIC +`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0ZXaKh^f@$D{A?t{IfX>#}PNp!L%7{0GY9x +pq!KXGXMYp000000RI3000000010+sY-Mg^X=QT&3IavyqhH(hb7^w{b?qhoJW!8=sKG~^&Ni^C7tcO}co=3CQC(GPVoWSC3v_Z} +ZgXjLX>V?G015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p< +?Hl01LM?X!H~4Y^Hx3&bJ$HXE2K+s|vHZ6#&ske5?JSDZAfr}PGrQJ;0000000000{{R30000003T1e7 +Wo~n6Z*Fq{3IavyqhH(hD`aAk5~bZKvH00aU61a5C`WdHyG0R(ezZDjxj0RlzpqhH(hC`}q*r35LOoBKkGaY9#cS7Qj{WgyAGcS>>g~&^g7bS0}9Zh)e@p#+${pKVqYC33O>~Wpi|4ZEyepNC<6ZbYWy+bYTDq0lk5UVp0y6#Opn49V(cQc;WdI2QadI6-(bd|-i#!&GYaF>qoh8ar +da{vheR)?jU+FZ2DLr`QR#xHIKjC^A48Li8o +%k$8HEod=_0000000000{{R30000003v_Z}ZgXjLX>V?G00{v&KD$)QXhhr5^*YH=BF-=c +yOsxg-v9sr000000RI300000000w1pa&K~T00{xZXXT7NJOW`Spw3o_*cmz+=1%_1gm*5-D79nn{HtC7 +00000000300000000009WMy_`Y;SO7asnV%C#?5~OapN(_Fs6GvFQy{P|gRa2*}s1Y~I%9#i_RFfQB3> +bs~EXcCXx(drQcb3B`Fx$)^%va$Ar)C7cFHZE$Q!WCZ~L2LJ#-AOHhPX>#x3$o4Af`kVHyQ&~TYC +SRqgV00000000300000000008b7N>_ZDDj_00{yhS0}9Zh)e@ite$I%(jAWg00000000300000000006X=!b6Y;yn!0fbj(2M`|< +m3T|4oDcSEr%ah$$XqR+hQ$77qvA$o%>V!Z000000RI300000001I<Z4!V_T!KNI`QJ|h6;Zj +^jB$MPK+?7Lu3>C`4HLtfv$so3kRF1PV2}fOp_vjQ6FdFHId|lr&gK9B00000 0096000000000VeX=iR>bairNa{vkf;?xyT5z&Ua+M@}mOiDpYxh>^^GknUxTJ!XL#OUcE0frb5ENEw7 -&f?o%+)B!ZpG}K!%4G?I4vp$|ttu*CMF0Q*000000RI300000001rcNZgXj8Zf#|5baZlcWd;ogc4cyN -X>V=;l-_zLn%tmAe68Jly{Qj?Kss0ny)C8xzFm#1PkyMk2y}8`ZgXa3astXM9&dx0-7pM3Z=O*v*GCA9 -fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?|;InIPy66cFfOYp#JM2r7_DuKtpQ8M_qJyiO1VIUJ=H=)@ii_00000 -00000|Nj60000002WMq&WpinB0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjO?=JcE6dyPJT+t -k%Iz|R3_dTDo~ZL;TN>NvV?G00{zQ#MKE+xj;HS^AvC+-Eea3oo~4=i3iziU+2)E -(%Otur}OFoDdEE8rbT!M3y4gMJ*2_uUvGVLlsE)B`jpK80000000030|Ns9000007Vs&n0Y-Mu*2?0Hl -)<>d4I}(*_lNXA@iYQk^RnB@|WjyHfhANamkKF(O0000000960|Nj60000JaV`ybV!Z000000RI300000001I<Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HLtfv$so3kRF1 -PV2}fOp_vjQ6FdFHId|lr&gK9B000000000400000000YNbaY{3Xl-R~baMa- -0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjD&FwlPpg3!?y@aX^XIja4CK{WF&t@k=WXUZP9(Y -H~bairNa{vkf;?xyT5z&Ua+M@}m -OiDpYxh>^^GknUxTJ!XL#OUcE0frb5ENEw7&f?o%+)B!ZpG}K!%4G?I4vp$|ttu*CMF0Q*000000RI30 -0000001QKKZggR3Ze?;-WpV=n0(LS22}5sgbY*UINn`{C00whoXk~3-00jX8WW?18O}RiiJ@XWBBi(Rv -?4579E{O-(Y+vWlpwilmlv2~%1FNg3QJ<&wKF}2F)J=UcKm7gx`duV?R0NO^0S9MgZe??6a{vVa0%XM1 -2~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjGqWBNjk^^qPoT1+zTRnAg`3vXv9d*8d@RXy~6c6G6Dr@ -W?^Gx00jX7JIcU;0|?p#+${pKVqYC0|{wnVPj=UZE$P=1pxt8$PakD#zGc4 -+eY|aXXwx;YM0QXyiqR;Jsw2Z*{J&j1#@+9aBKht0Rd++hrkGM>lK-W|y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b0tIPiVPjm(ZiUQ7;QU9z@vL -sQU{;Z*FvDZgf*=XLAJs015(R#MKE+xj;HS^AvC+-Eea3oo~4=i3iziU+2)E(%Ou+=zxYCD0L!x4tB5H -m3vFbl?lapNXe%XU~*fKJ0+X}A;%YO&?-P3O4E?M+l67UG^w8*<_XZ#%uyqCt-#n(R;4&W&+>mb;*F>vukd;=m`yg -b@x#_>`RmOO$cpebYWy+bYTDq0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs7 -0;T-agdg$OP=xIp;K4#IcLF!~asU7T000000RI300000000(DmZ(?C=a{vkgMe3tp+xFv-0Xp&G?S=|} -9rRaeU`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0%XM12~D{`Iz96ga3kGt -a_pUNxh{zZ*=%3u(4f-Vj5fhEq57bK6Q|uUfIMEX^1}Vv6tLB!)|10-o)0prc>n+a000000RI3000000 -01IJrb7^O8ZDnqBa{vkgMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{ -AMw{vgzX#P!9p!}0yp?_0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-Vj5fhEq57bK6Q|uUfIMEX -^1}Vv6tLB!)|10-o)0prc>n+a000000RI300000000(kqWMyS-a{vhfMe3tp+xFv-0Xp&G?S=|}9rRae -U`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0000000000{{R300000033g#@ -Wo~0>Wpe-t0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp -;K4#IcLF!~asU7T000000RI300000000w1pa&K~T00{y`>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C -`4HI&hQW&>`ZdvNB=ndTz*X~v;Uq>`<)y^XImOPdju4Lk0000000030000000000HWMyVyb!>D&b8~5D -Zf#|5bN~bb00eGtZe;)f009JZZ*64&1pxv@>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1 -V6JV*{3!yZ{M3XW@z+pZODNcTE%yi#yB_`&o2yJC_VPs)+VE_pNMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r -8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0000000000{{R30000002WM<=Vqt7^015&{>Z4!V -_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pGEG00000 -00000{{R30000003t@9}X=iS2Wo~qH015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1 -V6JV*{3!yZ{M3XW@z+pGEG0000000000{{R300000033g#@Wo~0>Wpe-t0!8YhU)%QM -kO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~asU7T00000 -0RI300000000w1pa&K~T00{y`>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI&hQW&>`ZdvNB=ndT -z*X~v;Uq>`<)y^XImOPdju4Lk0000000030000000000BM{I9mVQfieVPjM0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*=q!&6rQG)02XJT?*g=|B=zRE -ie$*y(7k2+*P~cYjRuJC38 --{*D7fZ(%hZo23R4S;p`Q9JBQllDyrZFOvPX>e?10?I5NZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyq -Ct-#n(R;4&W&+>mb;*F>vukd;=m`ygb@x#_>`RmOO$AA2VPjC`}q*rQx*t>6v={g -sJ=SZlTl1iF5eQ8IAl(q%E@>So406W2x)F;WpZhBa{vedJIcU;0|?p#+${p -KVqYC0000000000{{R300000033O>~Wpi|4ZEyepNC<6ZbYWy+bYTDr0!8YhU)%QMkO4aJ;_ZeCe;xE! -X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~asox_qhH(hioJpYH;+t0eX2w~A!Q+0eaZ{MVycPK^Kn000000093000000000YT -Y;R&=Y*Tb$bY%bv0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$O -P=xIp;K4#IcLF!~askQ+=8&Hpw3LVJZG0TWlikxJMmHEDQne=0G(X}F$%Fs^000000093000000000YN -b8~5DZf#|5baMa-0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$O -P=xIp;K4#IcLF!~asf-J$cU-b<11?Ur~I=y495{S&B3%8Yyg?DnxLGM`ZE9k000000093000000000Sg -VQgh?V`*h`015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p< -?Hl01LM?X!H~4Y^K5OyylhJC`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0XGgC8a;P^F9!TQ -ys`YZF3(w8EA1?b(;%Z(R5QEQf&c&j000000RI3000000019PzbY*UHX>V?G015&{>Z4!V_T!KNI`QJ| -h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p&VRUJ4ZU6)V00eGtZe;)f -009JZZ*64&1pxv@>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p< -?Hl01LM?X!H~4Y}WpZ+Fa&rI*0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*$IZhiz50p(P||0 -m=?fQ^Mv6fMp@;h#Lzj#&aRFSj{pb&0RR91000000RI300000000000000000RI3000000010Gec4cgD -aAk4=WW?18O}RiiJ@XWBBi(Rv?4579E{O-(Y+vWlpwilmw&;L{94K`ndk%K5+?9Jv$dw7jc}U5p5@2#$ -kUJ%u2T5jOV`WKX1pxpD002NB00~KEVPj=UZE$P`3n8fQnYaJ?>kL6XG(3esa0W5QyJn#ohg24a)0000000930 -00000000YTY;R&=Y*Tb$bY%bu0daC2M$y&U#EU!@hie?UNS!6hQhW-W8INxxf{Fuzg#Z8m000000RI30 -0000001IJrb7^O8ZDnqBa{vhenIb5$QI^$V6PNW$vdMt6d#0>Rmk*`=dQ)K)k7d+w0000000000{{R30 -0000033g#@Wo~0>Wpe-t0ak~ln%Z2n%R^9PBgQXo1&n-R?HR4hpUd;mfGub-hyVZp000000RI3000000 -01I?-VQzD2bZKvHa{vheI6k{n`X+XC81LasyqR+($`>jwnD57lV5q8m)(2RS0000000000{{R3000000 -3T1e7Wo~n6Z*Fq{2?1%uWwlwnKfCTqC!TnpV`xO%(e*mXP$JGS1-q69d*1*6000000093000000000JM -a&m8Sa{vhe!)N7;Jv;(oC!o$&iP#xB8s<*^%!GF?$0)U9@BFJ?0000000000{{R300000031nq0{baMa+0b@PWiLgsaRw~c9&Ny{YCK_TCaeS`x+X~XLW@}|U -wEzGB000000RI300000000ne;aAk7>Me3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r{eiB7ehUYi -s7~w1CQOqefKeZ3;Wd%uopqe!>_vj92XkX`X>fFN00{zOa5aA+<>R2XhQO_4{AcS-HH^7AVzASV8M4NY -xyCjU1gEwF5PXV6FZDLo1#Vec_~kix7WfVQ#Sd|CM9$^_0000000030{{R300000Ab7^O8VRUtJWpe-u -0pipZP!Z9Fy4s@&s7y*hO1UlNfirx{z*_V4e8lMKApwRM5G-hCV9w&(UffE`hM!G~aLQ!~gAR@AcC9KZ -Uqt`_000000093000000000P0Z)9m^X=QQ)0|;Sab98cHV{`xrZ+2yJa%p5`0R?7hZeeWy7*1hrWn@Na -Wo%?Yb8~5DZf#|5bX0k8Wd;KRX=DOq#MKE+xj;HS^AvC+-Eea3oo~4=i3iziU+2)E(%OuN{^Dg=h-~N_ -zJ`Red1EINWrM}GXaQb}6c#qIM2EQqZeeX@0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ2 -0rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~atLx|b7gXNWn=<+10COKearHwcS=7M7YzYaI8*bvhMOc? -)(rkC#nUG5>JtwI*nu%&Q~z;Vl^%5wS6(#;{6ajG64wDPk{-(!PGN0jWJYOaY-B}vbY*UHX>V>+d2nS0 -0|IGe0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjAV5lLa7y@JVOzJ)&GXo9MeQ_qmbcB?4VH0 -I#X{*-UM!8ZDj&Q>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p< -?Hl01LM?X!H~4Z0a%FR6a&~280(t`--)Viz@~C%8KNS}Z0aQ3s^SOqbBwN-D{wl@OChzJK4+YqPF=12x -aaxrgbrDxyH3xis%LHy=ZDj&Q>Z4!V +&f?o%+)B!ZpG}K!%4G?I4vp$|ttu*CMF0Q*000000RI300000000>QQWNBt;WpV=p2w`G#baG*1bN~o% +c4cyMX=G&q1!ie(VQl{xPGN0jWJYOaY-B-mb7^O8ZDnqBRC#b^1_J_VWC9>pC#?5~OapN(_Fs6GvFQy{ +P|gRa2*}s1Y~I%9#i@t>;$>KfZ0H=mhJ>?uVC`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_2y$g}WpZ|9WCD5v +9p7nv%krpqNFdAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jWOW`w +sTH9-LlJ`2|Ay5Z(?oEikl{+~pis;@Q*TJ#1a4t%WdcR&qhH(he1kloHngE|MP08BSqsWn@NaWo%?eY;R&=Y*Tb$ +bY)a|aAgJq0%>FdAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{j)$WoGNre1kloHngE|MP05>8=lWn@NaWo%?kWprUwd2nS00|IGe0w7l>toMja192_( +UwD?W=?zm*&IhOn$k(lG-qz;DsdeN{_}|Wp0vpvv$c&#PW69R$ltr%da5t5w^x+8!q6BVXZDj&Q>Z4!V _T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pC -`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_2y$g}WpZ|9WCD5v9p7nv%krpqNV>+d2nS00|IGe0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-Vj5JaYt`n9TUcD*&5hFi^PVx{q -1b@^7zTcrn*%qZTXasIyZDj&Q>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ -{M3XW@z+pZ4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+ppG1a4t%WdcR&qhH(he1kloHngE|MP03Qu=#Wn@WaVPjZ4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HJ_1fvw5rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEpSWb-! -P<3KgX>@L7b8`d&00eY+X=DHe0Rr`G6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VaL=Li5Yl(a@n1 -+Ku60FILp}Zw|!7cE!MGSxid=WmW+Kba(&-0Rr`G6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VbdG -A)3GUIc{=BfUQMVFMRBwY;Hd$-Q55DeryBg+(ZXcX=g%gZ(;=j00;m8Kmh;%00000000mG0000000&cb -aByr%WCZ~L2LJ#-AOHzdb#QQONpxjx1O)&GWMyVyb!>D100037ba`-PPHzAO0RR935eRg7aAi(mZDjxj -0RlzpqhH(hOi(W05|TJ%PM*ricn_Pm -Xk-!zW@%+?WKLmiWdH>M0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-a -gdg$OP=xIp;K4#IcLF!~auW-7VRC6NdhVC3z)=0wst0Y0}#&o=rIt`?a&Fa))1(#TPD!jC~PR_M88ajEx^RR910000000RI3000000 -00>icaByr>bz%bw25EG2Wo%{u1Z`z>VF3nbY;R&=Yyt&ucWz~50|$0tY-Mg^c?1e!b8~5DZf#|5bOi@z -Wo~72X>$e&baG*Cb7^#GZ*B((Wq5RDZgXjGZU_lwcw=R7bZKvH2?|qnaBys8ZDnqB1_TLXZ*FvDZgfdx -0S1_@x7s+uExGllhUte$e$Op^sMk_Bzn7+|3$axzr3rLtZDn(GVQp{#07wU8a%Ew3Z*l@;#MKE+xj;HS -^AvC+-Eea3oo~4=i3iziU+2)E(%Ou+=zxYCD0L!x4tB5Hm3vFbl?lapNXe%XU~*fKJ0+Y8VQy}3bYXO9 -Z*Fq{3ISO55nb$VTQ?X>xA?XXJF{2H^dT~zWT)b=0OBT1J2L^)|BtqCIH`QK6F1|v)Z${_U85pQj^zm^ -DU~vi8uS+c0000000030000000000FRB~Z%b7^#GZ*ECuVPj4E?M+l67UG^w8*<_XZ#%uyqCt-#n -(R;4&W&+>mb;*F>vukd;=m`ygb@x#_>`RmOO$cpebYWy+bYTDq0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_ -Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~asU7T000000RI300000000(DmZ(?C= -a{vkgMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!} -0yp?_0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-Vj5fhEq57bK6Q|uUfIMEX^1}Vv6tLB!)|10- -o)0prc>n+a000000RI300000000wDpaCLNZ015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~ -v{(W1V6JV*{3!yZ{M3XW@z+pGEG0000000000{{R30000003t@9}X=iS2Wo~qH015&{ ->Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pGEG -0000000000{{R300000033g#@Wo~0>Wpe-t0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ2 -0rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~asU7T000000RI300000000w1pa&K~T00{y`>Z4!V_T!KN -I`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI&hQW&>`ZdvNB=ndTz*X~v;Uq>`<)y^XImOPdju4Lk0000000030 -000000000HWMyVyb!>D&b8~5DZf#|5bN~bb00eGtZe;)f009JZZ*64&1pxv@>Z4!V_T!KNI`QJ|h6;Zj -^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+p~GYywm#VTK~nd#>Ze%hHN@6KPlLd+s#TneA -z-EYx +0WOjr%NR~!ZDnLeX=Q9=RB~Z%b7^#GZ*Ek1aAgJq0%>FdAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c +*5<{jG*S<)6P6lYy(#<=BR_>s@(?%#f7ArN-=Rj?7Ns(11a4t%WdcR&qhH(he1kloHngE|MP06;5GoWn@NaWo%?t +VQgh?V|i40aAgJq0%>FdAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jM(yUq2ps*m=2xUDT;RqC +gn#@WzFu~@adfH5^@&-|1a4t%WdcR&qhH(he1kloHngE|MP04o+chWn@-ia%o|1bagle0|IGe00035ZeeX@0!8Yh +U)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*$IZhiz50p(P||0m=?fQ^Mv6fMp@;h#Lzj#&aRFSj|g&Q +b7gXNWn=<+10COKearHwcS=7M7YzYaI8*bvhMOc?)(rkC#nUG5>JtwI*nu%&Q~z;Vl^%5wS6(#;{6ajG +64wDPk{-(nPj_x*WJzXWV`T&e00Uuec>n+a0S0nuXJ~YD0000224QV)b#8P30009AVQzUuVRT^t000CD +VQzUrbaY{3XaE2J1q5VabYTDm0RlzpqhH(hioJ +pYH;+t0eX2w~A!Q+0eaZ{MVycPK^psbz)a(bZ%vHa|8ka1ax?5WB>&L0`+VYVk7oBr%DNv+($;q`HHK! +gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RsjNZcmM?f0`+VYVk7oBr%DNv ++($;q`HHK!gIHa)*%m(-e#9sm3dMUNn!oosZgNI|twmNZeC(lYZa*g7-2eQ3Yy;-pL1po(RWoBV@Y;*ts009Pc +d2nS;ZvX`W0006J2y}UHWlmvjWdH>M0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*;5t>gcQkw +bf~^M){{|8P%hsRk~m~ep32F151Y4WWD*HxX=Q9=PGN0j00jX8Me3tp+xFv-0Xp&G?S=|}9rRaeU`~uM +rbA>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_6AN}>a%o|1bWUMyWdH>M0!8YhU)%QM +kO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*$IZhiz50p(P||0m=?fQ^Mv6fMp@;h#Lzj#&aRFSj|fwBaByr* +VQ>Wj015$yz}|oy`cC#6Uw2{wE+Sw~);*uMH+9Bf@aCY-RuiZDn*}0S0GmZ(?C=0tIh(Ze?Tx +2XWo~161PWnub7^O8ZDnqB1qWwkZe??6a|Q}@a$#@6CZU+fvcywiMb7^mG2nl6)V`Xr3X>V=` +3R87(aBO95Wo~o^1PNnrZggdCbV+0Z2AHk4+Bm{3x%H=p>4!*u&n~Wpi|4 +ZEyepNC#tbWnpx0asnV%C#?5~OapN(_Fs6GvFQy{P|gRa2*}s1Y~I%9#i_RFfQB3>bs~EXcCXx(drQcb +3B`Fx$)^%va$Ar)C7cUkZfdKHyBH|__hx_vscRWAu^w2r{b^x;wDWyGXd29 +kG60)seH8)H{-R`;$q)jqasX>@6CZb@cgV`T;j +2yJg~GYywm#VTK~nd#>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_ +0000000000{{R30000002WM<=Vqt7^015&{>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1 +V6JV*{3!yZ{M3XW@z+p_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jHo-KZ +`k;Xmr`<4sJYKN!!u{G5u+^j1lf!PF4>GEG0000000000{{R300000025D|^b#!w83IavyqhH(ha{vhfMe3tp+xFv-0Xp&G +?S=|}9rRaeU`~uMrbA>C`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_0000000000{{R30 +0000024!+`Z*p@02?9mxqhH(huJC38-{*D7fZ(%hZo23R4S;p`Q9JBQllDyoR%LQdZvz4Xb}#?}b}<1BS7~%^Wpi^vb#7#AWd;HY +aCKr=X>@L7b8`Y9S0}9Zh)e@zVQyn+Z*pa1LUnFrY-Mu+hzwODL;*@eYE_8FVm19wjO(ZbIvDI)B0PALl`~a8 -----END STRICT TYPE LIB----- diff --git a/stl/RGBStd@0.11.0.stl b/stl/RGBStd@0.11.0.stl index 986636e0..aa9bc8cd 100644 Binary files a/stl/RGBStd@0.11.0.stl and b/stl/RGBStd@0.11.0.stl differ diff --git a/stl/RGBStd@0.11.0.sty b/stl/RGBStd@0.11.0.sty index 1501e86a..25c3be31 100644 --- a/stl/RGBStd@0.11.0.sty +++ b/stl/RGBStd@0.11.0.sty @@ -1,5 +1,5 @@ {- - Id: stl:H1HLPfyC-5YLlAk!-KWhcUo1-0vtex!9-ODxSmIA-zj1J$qc#western-craft-bogart + Id: stl:JhUC5JgH-Kwps4cO-ZNUklUj-UP6boFp-OY!18Kx-xOSJaVQ#hair-magnum-helena Name: RGBStd Version: 0.11.0 Description: RGB standard library @@ -11,32 +11,7 @@ @context typelib RGBStd -import StrictTypes#century-comrade-chess - use VariantName#theory-austin-before - use FieldName#present-flute-herman - use Primitive#deliver-arrow-boxer - use TySemId#popcorn-super-young - use FieldSemId#spiral-road-marco - use TypeName#edgar-carol-mystery - use UnnamedFieldsSemId#freedom-degree-gregory - use SemId#logic-absorb-hilton - use Variant#humor-regard-promise - use Sizing#courage-alien-salon - use NamedFieldsSemId#solar-salad-smoke - use EnumVariants#dispute-natasha-vega - use VariantInfoSemId#museum-edward-mirror - use UnionVariantsSemId#santana-address-pepper - use TypeSystem#adrian-boris-sponsor - -import AluVM#congo-archive-folio - use Lib#gate-biology-optimal - use LibSite#ultra-grace-message - use IsaName#taboo-olympic-cloud - use LibId#germany-culture-olivia - use IsaSeg#size-shake-olga - use LibSeg#lemon-philips-horse - -import RGBCommit#tuna-safari-design +import RGBCommit#harvest-person-orion use ExtensionSchema#active-eddie-empty use BundleId#carmen-farmer-diesel use AttachState#lady-japan-fiesta @@ -106,18 +81,24 @@ import RGBCommit#tuna-safari-design use RevealedData#olivia-copper-stamp use AssignRevealedValueBlindSealTxid#photo-jump-silicon -import RGBLogic#explain-marvin-bless - use DbcProof#needle-change-forest - -import CommitVerify#miller-pancake-elastic - use MerkleHash#horse-popcorn-bundle - use MerkleProof#price-aloha-grid - use ReservedBytes1#origin-roger-relax - use ReservedBytes2#florida-libra-circus - use ReservedBytes4#young-goblin-academy - use ReservedBytes8#rudolf-tape-adrian +import StrictTypes#century-comrade-chess + use VariantName#theory-austin-before + use FieldName#present-flute-herman + use Primitive#deliver-arrow-boxer + use TySemId#popcorn-super-young + use FieldSemId#spiral-road-marco + use TypeName#edgar-carol-mystery + use UnnamedFieldsSemId#freedom-degree-gregory + use SemId#logic-absorb-hilton + use Variant#humor-regard-promise + use Sizing#courage-alien-salon + use NamedFieldsSemId#solar-salad-smoke + use EnumVariants#dispute-natasha-vega + use VariantInfoSemId#museum-edward-mirror + use UnionVariantsSemId#santana-address-pepper + use TypeSystem#adrian-boris-sponsor -import BPCore#totem-holiday-helena +import BPCore#austin-story-retro use TapretNodePartner#roger-member-educate use TapretProof#marco-border-sample use TapretPathProof#kiwi-mirror-paris @@ -126,10 +107,25 @@ import BPCore#totem-holiday-helena use BlindSealTxPtr#fortune-iron-salmon use OpretProof#good-village-flex use SecretSeal#dollar-iris-wizard - use AnchorMerkleProofDbcProof#flash-justice-paradox use BlindSealTxid#media-judge-anita use TxPtr#italian-july-eddie +import AluVM#congo-archive-folio + use Lib#gate-biology-optimal + use LibSite#ultra-grace-message + use IsaName#taboo-olympic-cloud + use LibId#germany-culture-olivia + use IsaSeg#size-shake-olga + use LibSeg#lemon-philips-horse + +import CommitVerify#miller-pancake-elastic + use MerkleHash#horse-popcorn-bundle + use MerkleProof#price-aloha-grid + use ReservedBytes1#origin-roger-relax + use ReservedBytes2#florida-libra-circus + use ReservedBytes4#young-goblin-academy + use ReservedBytes8#rudolf-tape-adrian + import Std#ralph-blue-lucky use AlphaCaps#picnic-soprano-aurora use AsciiPrintable#ultra-sunset-format @@ -163,6 +159,11 @@ import Bitcoin#signal-color-cipher use XOnlyPk#clever-swim-carpet +@mnemonic(mayday-rider-diploma) +data AnchoredBundles : tapret#1 ClientBundleTapretProof + | opret ClientBundleOpretProof + | double (tapret ClientBundleTapretProof, opret ClientBundleOpretProof) + @mnemonic(domino-waiter-orlando) data AnnotationName : Std.AlphaCaps, [Std.AlphaNumDash ^ ..0xfe] @@ -175,6 +176,16 @@ data AssignIface : ownedState OwnedIface , required Std.Bool , multiple Std.Bool +@mnemonic(scoop-deluxe-action) +data ClientBundleOpretProof : mpcProof CommitVerify.MerkleProof + , dbcProof BPCore.OpretProof + , bundle RGBCommit.TransitionBundle + +@mnemonic(fame-iris-habitat) +data ClientBundleTapretProof : mpcProof CommitVerify.MerkleProof + , dbcProof BPCore.TapretProof + , bundle RGBCommit.TransitionBundle + @mnemonic(tango-hotel-jamaica) data Consignmentfalse : version ContainerVer , transfer Std.Bool @@ -392,9 +403,7 @@ data ValencyIface : required Std.Bool data VerNo : v0 | v1 -@mnemonic(special-almond-anatomy) -data WitnessBundle : pubWitness RGBCommit.XChainPubWitness - , anchor BPCore.AnchorMerkleProofDbcProof - , bundle RGBCommit.TransitionBundle +@mnemonic(storm-left-reflex) +data WitnessBundle : pubWitness RGBCommit.XChainPubWitness, anchoredBundles AnchoredBundles diff --git a/stl/RGBStorage@0.11.0.sta b/stl/RGBStorage@0.11.0.sta index 85b7610d..22529f61 100644 --- a/stl/RGBStorage@0.11.0.sta +++ b/stl/RGBStorage@0.11.0.sta @@ -1,23 +1,23 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:YBgLtVmT-FuzNBPe-1fxIqay-JW4Evd5-Za7fm9w-GLF6JAg#transit-xray-giraffe +Id: stl:hHEaUT1x-VjyiUK0-v$pgYr0-xQwdM5m-S3UaY23-nj7!2vM#orbit-virgo-basil Name: RGBStorage Dependencies: - RGBStd#western-craft-bogart, + RGBCommit#harvest-person-orion, + RGBStd#hair-magnum-helena, StrictTypes#century-comrade-chess, + BPCore#austin-story-retro, AluVM#congo-archive-folio, - RGBCommit#tuna-safari-design, - RGBLogic#explain-marvin-bless, CommitVerify#miller-pancake-elastic, - BPCore#totem-holiday-helena, + RGBLogic#rapid-baboon-satire, Std#ralph-blue-lucky, Bitcoin#signal-color-cipher -Check-SHA256: d9ad4313afd685354c6846af7c3cc13a907b553af88f8e584482c6541807b6dd +Check-SHA256: 21288028263f43cb6a61761336c6ffb69b6e948258d2077d35c0264ad5b8e685 -3Q|WxQ*>`~VP|CtA5qIa{DS3zlS>Z4!V_T!KNI`QJ| -h6;Zj^jB$MPK+?7Lu3>C`4HI)Q*?4^V{}w`aAk91a5aA+<>R2XhQO_4{AcS-HH^7AVzASV8M4NYxyCjH -L2PwaO=QH?2~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-Vj0sXlLPKwDZE19FDia2b(>AB29AOeYx#=(k -!8In=XQlLX14LMLVywRiQb$5eZ)a&^dIKHbX?@G`sCP;~6&DQwR5(-fxrUo0Th*%N~j&hfyEy&;~+KLvM0r$}AplgPGkh3_fq3Q7_j=2#kPT +3Q|WxQ*>`~VP|CtAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{j2~tNwLvL+uX>=wP0_2znD++Ak +!AD4^=04ZLvBczwX;cPMM?zC{WJT(uU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*$Y#2 +a%p39RC#b^b5;}9*VKn|nRBmPlPrrd^EP>$AHP6|FsuXsI;G3ONCrYsLvM0rVsJHoA?4$swuZp1Wc+9A +Of`(TIbyKWjTy4WkGaM+1wm|eR!w>X9p7nv%krpqN>ouDKt(|ZPQb$5eZ)a&^$}AplgPGkh3_fq3Q7_j=2#kPT _9!;lWR>~GYywm#15DT%6aZ|SrJerP1pIOD57`7Ol|-ogQ6Pjg~y>s-v>!^VNPLfWv4Jz0xkJm$nc4y @@ -25,12 +25,12 @@ MWR2J-cc#Q6SofWC)gp7L6!Sc3I$AQVo7AP4Jk3r!|EoW{Zi$060oMN(jLzPuNboiNpoRS WoOdj7+WWC1?EKi+6QrwlvP$nl8x-M691f9z+~t)>6ivgX<}1lX9hx0LvM0r4FCar2VDR_OBR)w8yCZ2 EylR&t_^>1Sz?kFbz0>alMxYAVQ_L~bWU$%Wl&*qbZ%vG1JyK;>qK>mX$cszrKCL=@F5H{a;)B(Tlt4r og*WC5Jh-!Y-wX@bW>$vY*ct@WDm98Wft0d6dj=*oo`t> -c$)o5X19O9`rXu=lIsRdWprq7WH>)!E^$-R$RUwD%Xb~0J!Ic@@+ehVE%-)5lom~G1rbzXaB^jIQfX&s -bV71rZewUhC#Wt^wA&hNfbvI8l{tqo-}{|djZ8YAkJtUQVz<=}LTqVnWK(5fY*ctqbaF>d&s@;xOg?z( -`#e5a?6_IYcQ>qF5t# -xf?-lV`y)3O=WUxY-K`hZ)0muaB^jIP;zf?W@s7fyw$T9tCzEwrAszt-P)%HZ|LbH=L2A=l(W4CP6|_H +W)s9yQf4Q+L?w(nXY|a%e*XOAC%4aD5B-6UFMfO2d=FG%aB^jIP+@dvP;zf?W-hl7CAn^87TS9h9ibha +Z&^Bcn*B*;w|~I;-PD|t>jq6_bZBp6I6q=8aZ}RBA(1@GcO9QSWZ!o3C{DWI)5Jeow&v$k6@5bjw%EMbM&T%L^glVtzy>c`nt +RvSTXV`y)3O=WUxY-K`hZ)0muaB^jIP;zf?W@s7fyw$T9tCzEwrAszt-P)%HZ|LbH=L2A=l(W4CP6|_H V{&D5Q)OXnu*Pw&hI`xNV4B0;>oUbhHyi-Y#=22)QEgSwgbZe&wsVQf@*X=JhGI5`vwIKJ?2 8qdBQV5M*2;q-lY2q<~K(fZR6A>9R3cu;h52SRCdV{d706aWDkZG|bw_S!^E6;6$ujJ=)@jfnzUJFt-< #ywK79)|@}WpPe#3K@{sQ}POxW*-wf^&?6pkN!)@-3ce88{`DNj-p1Y1XOrQZXx47L&d6G@+l`%qd385 @@ -116,20 +116,20 @@ KDgmdc1Y|2T5mrLR$**qZew{#W?^GxKDS8EHu@2+7MVFP1hs6^$We8|k3le2=(%KZsrQgo3qfvfZ**aF X>V?GOR30+snp{uYWb)9vpEdM5jV}jv>9vwnX#InoRj)93qf;pX=iRpW?^GxOmsqKkxP5xCLpf?kur-g (F6&@HI9dWN1yNftOldQ1y*HpPH$F+rJCAYw97+KWFy8eZUu~dV(l5N%b&~h(10yyF^CmTVQpn(Mrmbi WL9BpWo~16RC#b^R>%){yv9NnI@?D0UT5ggCu*0_qr6cs3q2l0*x9K221#vjY)NET_7Pp|Zd*4POSky8 -4?DA0%Jd;JpJb=vumIvFO*=CPQ+04~Y*Te&UNH8E>xBrIwS50cCx~Y4>vpbO6eBrP2Wxp8;c>|H3sYrb -Y*%S?Ze??GU_W_(!uc?s(BakzdJ7?EF9^9Gyf?ad??x_c(9*_N98Yz0aCLM+b8~5DZf#|5bW&w@WnpY( -WJFFkgU`2UB%$aBN9rX=%!lt4v-5=I26&L{nTGW3do8V16r+p^9tR;mq;f9#3_2aCLM+ -b8~5DZf#|5bW&w@WnpY(WI=RvVPj}%#AUTvyg$3{N++IppJQl5+tKwp$xtHBFa^7o2YcTaPGN0jWJYOa -Y-B}vbY*UHX>V>+d2nTFC(1LJY0Wqjnq=?-uFQU?YI{u_&s!j~X7+MC!AG3V -Hn6J~&pv~A7-khwT~%sgOe`@BM`dnhb7^x)W?^GxgjZ$<5FZnjcuT6B5B6)POqpHCTrHl4#QtZa;zni7 -2}x#QV`WKgaBPMc5G-hCV9w&(UffE`hM!G~aLQ!~gAR@AcC9KZUquT;Z*FvDZgf*=XLE+Y-hdqXPWBsL -cVYo9B4AF|J)gHXb;e-i?Yrhg(m4rJb#QQONpxjxlpOD6#%EY0CLclTa6hZC<#>ZODNcTE%yi#yB_`&o -2u*KfX=Z6cbOl5XuY`uYqVp0y6#Opn49V(cQFkgU`2UB%$aBN9rX=%!lt4v-5=I26&L{nTGW3do8 +V16r+p^9tR;mq;f9#3_2aCLM+b8~5DZf#|5bW&w@WnpY(WI=RvVPj}%#AUTvyg$3{N++IppJQl5+tKwp +$xtHBFa^7o2YcTaPGN0jWJYOaY-B}vbY*UHX>V>+d2nTMaves|)!M|1JQjy*9JxrHCCXBK3Y-~_ZzF<= +1A>JaPGN0jWJYOaY-C4lZ(?C=Q*>c;WmI`^Wp(W({yb2RgQ&qroX$3|s~68cgLoKb6;WMPYGO<*F$_m# +Ze??6b4g}lV`X?XAL+Ysh`sOZo#5Z(1rNy0kurbdTRL{_?asbjCtV3aZewU~a#Lk=gjZ$<5FZnjcuT6B +5B6)POqpHCTrHl4#QtZa;zni72}x#QV`WKgaBPMc5G-hCV9w&(UffE`hM!G~aLQ!~gAR@AcC9KZUquT; +Z*FvDZgf*=XLE+Y-hdqXPWBsLcVYo9B4AF|J)gHXb;e-i?Yrhg(m4rJb#QQONpxjxlpOD6#%EY0CLclT +a6hZC<#>ZODNcTE%yi#yB_`&o2u*KfX=Z6cbOl5Xu +Y`uYqVp0y6#Opn49V(cQE2s&92Kh8W}@zf2sFIAPZAvVQg1vbZ%vHbIJ(jke?j1 l!xqXd>q7+-P0pRHy9#PwI0NEy%g(UCHeUkYj{YR7-159lq i%V@}#Ze4JZgp)|VRC6;+#Z*Ep$a%o|1baPW>ZAoPPfv$so3kRF1 PV2}fOp_vjQ6FdFHId|V -a{vhfWW?18O}RiiJ@XWBBi(Rv?4579E{O-(Y+vWlpwilmlMuXsu{2tXFT+?;?hj39&>gq>HOrf1lB-q; -n)I5N0000000000|Ns90000004sUgIaBpdDbWd<^b#!w83Ib%r)d@|xKsr716mTQmaB}ROZ@Dgs2ia_2 -=g^?i+Kka>7rjFg@b(FW?*48~9t#5lC;3juy9JUg#K|!ymZ|^=0%XM12~D{`Iz96ga3kGta_pUNxh{zZ -*=%3u(4f-VjFS+&fUz`Mi!Z}iQtl5;XwV(E`Zdd&WRj~^37YhpmjD0&000000RR90000000000000000 -0RR900000001!=OZ9{KvbaG*1bW?O;bY%ty2yJmcWTI{*Lx000000RI300000000wetXJ~YD00{ygQOiC2g5`qc -0#Axs7ZjsiFSYD`^x*MIVgSxPN&ctwsMp|!ND`2%gc_Nxrh2qVwA%Us#V;Pkm;mDO$Szy}0000000030 -|Ns9000009W_507X<}?;a{vhfA5qIa{DS3z$bhcTl`&GYj0000000000|NsC0000001Y}`!VE_pNA5qIa{DS3z6r)`)wd{WM;PFag0M0#0{-c;Wd;HTYi@6MZU71bA5qIa{DS3z00Rh3Wo=1rWMy~;1r2X-LUnFrY-LGqWMy~&3Ib%r)d@|xKsr716mTQmaB}ROZ@Dgs2ia_2 -=g^?i+KiRR=6W7=VqesjRYGc!>wZFzp>JB4@xD;^wu&SY_r(Ha#MKE+xj;HS^AvC+-Eea3oo~4=i3izi -U+2)E(%Oszdy}<28ig(gSpg+?&9*`C2(3=%09avzwZKZf-~wC#0000000030|Nj600000JVs&n0Y-K}l -Zgg^CV{}PwWMy~&3Ib%r)d@|xKsr716mTQmaB}ROZ@Dgs2ia_2=g^?i+KdBxleIk>g)RqK0VQ|Mwn6X+ -txo3vSYd;;z)HQ~0$c)Q#MKE+xj;HS^AvC+-Eea3oo~4=i3iziU+2)E(%Oul2rNlD$O59e#ogQsB77jP -l+h5j^*S;D0000000030|Nj600000IVs&n0Y-LwzbZ%vHb4hMwWq1Gz0%XM12~D{`Iz96g -a3kGta_pUNxh{zZ*=%3u(4f-Vj01aUXjT --wZT0^&Yy7N)`YB000000093000000000eiWpZt4ZeeUmZe(S6015(R#MKE+xj;HS^AvC+-Eea3oo~4= -i3iziU+2)E(%OvMidq_i6cBYN^7xEELu$lFU37Sf$J;ty5yrmOX|)6Z2?Auq)d@|xKsr716mTQmaB}RO -Z@Dgs2ia_2=g^?i+KiJBynwMZT8l5kSW@l}O=!>^xB4~9n`Dx!RtcK)nwJ0o00000009300000000000 -0000000960{{R30000P0Wo=V*VRL8(4G42%Xk~3-bYTDr0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u -(4f-VjFeK-+XJhss8OG%_CC-Q>(otsF+cqN0Qy}ddQ=3E5CR`j%RT&p<$~n`Pl{R>6r)`)wd{WM;PFag -0M0#0{-@G+FLmd)8^C0+InTyb%?WTG%$DZ$m;bAR)ya#VGE@Kn000000093000000000JQW?^Gxa{vkg -A5qIa{DS3zp#+${pKVqYC -0v}P!J^X^@g5?5Fidq*Gqg^kx?0)p%@k(L<&OJ%~r#Z(OK7J55&$qsubbafuzL1-^j%|=cN>I>nnK4)) -Pyhe`000000RI300000000(DfZe??2a{vkgWW?18O}RiiJ@XWBBi(Rv?4579E{O-(Y+vWlpwilmp9m~T -I>-W|y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjO?=J -cE6dyPJT+tk%Iz|R3_dTDo~ZL;TN>Nv6r)`)wd{WM;PFag0M0#0{-*|*t+(1Z!Y#S=r-tc=NPf>PeW=$`IKP*ssSB}HE2RJl0v}P!J^X^@ -g5?5Fidq*Gqg^kx?0)p%@k(L<&OJ%~r(-?SiLgsaRw~c9&Ny{YCK_TCaeS`x+X~XLW@}|UwEzGB00000 -0RI300000000000000000RI300000000&}qZe(m_a{vkgWW?18O}RiiJ@XWBBi(Rv?4579E{O-(Y+vWl -pwilm1ACLTJsO2B2U!6ncg?mz@CdC==Kxq?gSEg)z2E{|0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u -(4f-VjIWKC(E(H_nGEpD*KTAo3`$}tLz4xH6U7V?G -015(R#MKE+xj;HS^AvC+-Eea3oo~4=i3iziU+2)E(%Oub$mV(;bz)!CmQ_M(k?Vd!kfCo{nDM?)_qK{8 -68FUdWW?18O}RiiJ@XWBBi(Rv?4579E{O-(Y+vWlpwilmQ>XLl0V(0al>0fVsbCfs) -I{K8&0000000000|NsC00000033q99Ze??GWpe-u0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-V -jEQSlCC$c=UszhlV5m?Ru@{iVU*wrVdeH+Q@FPbX@d6)F%RT&p<$~n`Pl{R>6r)`)wd{WM;PFag0M0#0 -{-<6r_K53+2$;2e|4Ao^X6@^Cu3Qu&Ia3E~c^u(!$n*dJ0000000960|Nj60000YNbaY{3Xl-R~baMa- -0%XM12~D{`Iz96ga3kGta_pUNxh{zZ*=%3u(4f-VjD&FwlPpg3!?y@aX^XIja4CK{WF&t@k=WXUZP9(Y -H~bW>$vY;yn!0%XM12~D{`Iz96g -a3kGta_pUNxh{zZ*=%3u(4f-VjE}p*=tr7P_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jlMuXsu{2tXFT+?;?hj39&>gq>HOrf1lB-q; +n)I5N0000000000|Ns90000004sUgIaBpdDbWd<^b#!w83IZTkC#?5~OapN(_Fs6GvFQy{P|gRa2*}s1 +Y~I%9#i`L}7rjFg@b(FW?*48~9t#5lC;3juy9JUg#K|!ymZ|^=0w7l>toMja192_(UwD?W=?zm*&IhOn +$k(lG-qz;Dsgn@AfUz`Mi!Z}iQtl5;XwV(E`Zdd&WRj~^37YhpmjD0&000000RR90000000000000000 +0RR900000001!=OZ9{KvbaG*1bW?O;bY%ty2ypC#?5~OapN(_Fs6GvFQy{P|gRa2*}s1 +Y~I%9#i^81)7t~9tEf?*r}jS36zkMYeK9}${s8)2BzjZ?kPr%EZ*FvQVPkYjWC9>pC#?5~OapN(_Fs6G +vFQy{P|gRa2*}s1Y~I%9#i^eNEJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+@lY;R&=Yyb)ZAXg`> +_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{j)$WoGNrJmcWTI{*Lx000000RI300000000wetXJ~YD00{yn6$0d#2P+C} +;lr6VNhMM>59zuEq~<=?!m-5UiD^{ysMp|!ND`2%gc_Nxrh2qVwA%Us#V;Pkm;mDO$Szy}0000000030 +|Ns9000009W_507X<}?;a{vhfCKUqYmH4o{!1*GOa*TS*H$bhcTl`&GYj0000000000|NsC0000001Y}`!VE_pNCKUqYmH4o{! +1*GOa*TS*HAD4^=04ZLvBczwX;f)x%8{!~UIganLWV?BTpVMu5IA6dE0Lj! +YuMq;@!bFb0000000960|Nj60000h6Wo<`nZ(?C=Q*>c;Wd;HTYi@6MZU71bCKUqYm +H4o{!1*GOa*TS*HtoMja192_(UwD?W +=?zm*&IhOn$k(lG-qz;DsWP5cQ3m-<6)UHjqig^*m4co5us7ukl*0UQzs7w8g#Z8m000000RR90{{R30 +00nGmZE17>00Rh3Wo=1rWMy~;1r2X-LUnFrY-LGqWMy~&3IZTkC#?5~OapN(_Fs6GvFQy{P|gRa2*}s1 +Y~I%9#i^CZ=6W7=VqesjRYGc!>wZFzp>JB4@xD;^wu&SY_r(GrS0}9Zh)e@g)RqK0VQ|Mwn6X+ +txo3vSYd;;z)HQ~0$c(hS0}9Zh)e@2rNlD$O59e#ogQsB77jP +l+h5j^*S;D0000000030|Nj600000IVs&n0Y-LwzbZ%vHb4hMwWq1Gz0w7l>toMja192_( +UwD?W=?zm*&IhOn$k(lG-qz;DsRMhHwLKbzE(ciwC3nrXLGTEzPUiqvVS}~6O1_lQgb +aV_>=c$Ts04O39g2dD_h*R5>c*5<{jiECIT&Bl;lSX#$ms8AQN7m&qYtoMja192_(UwD?W=?zm*&IhOn +$k(lG-qz;DshUXjT +-wZT0^&Yy7N)`YB000000093000000000eiWpZt4ZeeUmZe(S6015&iS0}9Zh)e@^xB4~9n`Dx!RtcK)nwJ0o00000009300000000000 +0000000960{{R30000P0Wo=V*VRL8(4G42%Xk~3-bYTDr0w7l>toMja192_(UwD?W=?zm*&IhOn$k(lG +-qz;DsgzRF+XJhss8OG%_CC-Q>(otsF+cqN0Qy}ddQ=3E5CSF@0_2znD++Ak!AD4^=04ZL +vBczwX;jj8FLmd)8^C0+InTyb%?WTG%$DZ$m;bAR)ya#VGE@Kn000000093000000000JQW?^Gxa{vkg +CKUqYmH4o{!1*GOa*TS*Hp#+${pKVqYC +0wxs#KG(vr#N>%-R5`~QK7J55&$qsubbafuzL1-^j%|=cN>I>nnK4)) +Pyhe`000000RI300000000(DfZe??2a{vkgAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jp9m~T +I>-W|y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b0w7l>toMja192_(UwD?W=?zm*&IhOn$k(lG-qz;DsqC`m +cE6dyPJT+tk%Iz|R3_dTDo~ZL;TN>NvAD4^=04ZLvBczwX;cQ7t+(1Z!Y#S=r-tc=NPf>PeW=$`IKP*ssSB}HE2RJl0wxs#KG(vr#N>%-RAW8UiLgsaRw~c9&Ny{YCK_TCaeS`x+X~XLW@}|UwEzGB00000 +0RI300000000000000000RI300000000&}qZe(m_a{vkgAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c +*5<{j1ACLTJsO2B2U!6ncg?mz@CdC==Kxq?gSEg)z2E{|0w7l>toMja192_(UwD?W=?zm*&IhOn$k(lG +-qz;DsjrQf(E(H_nGEpD*KTAo3`$}tLz4xH6U7V?G +015&iS0}9Zh)e@_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jQ>XLl0V(0al>0fVsbCfs) +I{K8&0000000000|NsC00000033q99Ze??GWpe-u0w7l>toMja192_(UwD?W=?zm*&IhOn$k(lG-qz;D +sflY?CC$c=UszhlV5m?Ru@{iVU*wrVdeH+Q@FPbX@d73l0_2znD++Ak!AD4^=04ZLvBczw +X;jBwX*pITEeW==xua`S>RI02$<40II2sv4aet}zMj!wH0000000960|Nj60000YNbaY{3Xl-R~baMa- +0w7l>toMja192_(UwD?W=?zm*&IhOn$k(lG-qz;Dsf2M2lPpg3!?y@aX^XIja4CK{WF&t@k=WXUZP9(Y +H~bW>$vY;yn!0w7l>toMja192_( +UwD?W=?zm*&IhOn$k(lG-qz;DsgJwD=tr7PH4o{!1*GOa*TS*Hr6F_xjAC6(~TLj#*ewiHWCD6r)`)wd{WM;PFag0M0#0{-=f*5G-hCV9w&(UffE` -hM!G~aLQ!~gAR@AcC9KZUqt`_000000096000000000P0Wo=V*VRU5%0tt6%bZ%vHb7gY?3Ib%r)d@|x -Ksr716mTQmaB}ROZ@Dgs2ia_2=g^?i+Kh>7SS8KIkY89@$6%;X7qJ(R#b4x^L3+^xAn+qc8}R~eDia2b -(>AB29AOeYx#=(k!8In=XQlLX14LMLVywUR3nQ8ri$WPp5w@a4b3LR7M69fMnD+{F6rHCsWOZ=>00000 -00030|Ns9000009V{dMBa$#e1a{vkgWW?18O}RiiJ@XWBBi(Rv?4579E{O-(Y+vWlpwilmp9m~TI>-W| +0RR600000000eVsXLA4w0wxs#KG(vr#N>%-RN~YXP!Z9Fy4s@&s7y*h +O1UlNfirx{z*_V4e8lMKAp#~90_2znD++Ak!AD4^=04ZLvBczwX;g+75G-hCV9w&(UffE` +hM!G~aLQ!~gAR@AcC9KZUqt`_000000096000000000P0Wo=V*VRU5%0tt6%bZ%vHb7gY?3IZTkC#?5~ +OapN(_Fs6GvFQy{P|gRa2*}s1Y~I%9#i@yFSS8KIkY89@$6%;X7qJ(R#b4x^L3+^xAn+qc8}R~*|CjUw +a13d{WJ1%*`n^wC{{=S47&=@>>ouDKt(|c83nQ8ri$WPp5w@a4b3LR7M69fMnD+{F6rHCsWOZ=>00000 +00030|Ns9000009V{dMBa$#e1a{vkgAXg`>_lQgbaV_>=c$Ts04O39g2dD_h*R5>c*5<{jp9m~TI>-W| y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b0d|^F*?W9|>m72;^XjNjCf456piKdvUO#1@>k1Zy`v3p{00000 0RI300000000 diff --git a/stl/RGBStorage@0.11.0.stl b/stl/RGBStorage@0.11.0.stl index ccf4334f..ede9ff69 100644 Binary files a/stl/RGBStorage@0.11.0.stl and b/stl/RGBStorage@0.11.0.stl differ diff --git a/stl/RGBStorage@0.11.0.sty b/stl/RGBStorage@0.11.0.sty index c647d3e2..d3a44b8b 100644 --- a/stl/RGBStorage@0.11.0.sty +++ b/stl/RGBStorage@0.11.0.sty @@ -1,5 +1,5 @@ {- - Id: stl:YBgLtVmT-FuzNBPe-1fxIqay-JW4Evd5-Za7fm9w-GLF6JAg#transit-xray-giraffe + Id: stl:hHEaUT1x-VjyiUK0-v$pgYr0-xQwdM5m-S3UaY23-nj7!2vM#orbit-virgo-basil Name: RGBStorage Version: 0.11.0 Description: RGB storage library @@ -11,76 +11,7 @@ @context typelib RGBStorage -import RGBStd#western-craft-bogart - use PubWitness#paper-visa-storm - use ContentRef#polo-ramirez-parker - use SigBlob#insect-cello-avalon - use AnnotationName#domino-waiter-orlando - use TransitionIface#axiom-parker-pyramid - use NamedFieldTransitionType#express-brush-desire - use ExtensionIface#model-ramirez-mentor - use Iface#violin-student-system - use IfaceId#nova-cola-carbon - use ValencyIface#buzzer-holiday-fiber - use Annotations#spend-linda-romeo - use AssignIface#fractal-baker-outside - use VerNo#textile-next-stretch - use NamedFieldValencyType#invest-apollo-inca - use ImplId#seminar-data-table - use SupplSub#canoe-denmark-short - use SealWitness#vanilla-crimson-zero - use OutputAssignmentRevealedData#dinner-honey-saturn - use Supplement#caviar-zebra-precise - use SupplId#pilot-claudia-minute - use OutputAssignmentRevealedAttach#miami-diagram-mineral - use NamedFieldExtensionType#tuna-archer-melon - use AnchorSet#shadow-dominic-pencil - use NamedFieldGlobalStateType#museum-ohio-arizona - use GenesisIface#rocket-paradox-press - use IfaceImpl#permit-learn-samba - use ContentSigs#oval-sister-triton - use SupplItem#jargon-orchid-forget - use Modifier#saturn-escort-jordan - use NamedFieldAssignmentType#origin-caramel-flipper - use TrustLevel#cobra-script-albino - use NamedFieldMetaType#prefix-carmen-artist - use NamedVariantu8#star-pilgrim-pilgrim - use OpWitness#valid-toronto-gibson - use GlobalIface#concert-combat-charm - use SchemaIfaces#fossil-nepal-airline - use OutputAssignmentRevealedValue#aspect-caramel-diana - use SupplMap#sailor-observe-bundle - use OwnedIface#delphi-athlete-fresh - use ContentId#scarlet-portal-office - use GlobalOut#capital-agatha-bruno - use OutputAssignmentVoidState#mars-alabama-public - -import StrictTypes#century-comrade-chess - use VariantName#theory-austin-before - use FieldName#present-flute-herman - use Primitive#deliver-arrow-boxer - use TySemId#popcorn-super-young - use FieldSemId#spiral-road-marco - use TypeName#edgar-carol-mystery - use UnnamedFieldsSemId#freedom-degree-gregory - use SemId#logic-absorb-hilton - use Variant#humor-regard-promise - use Sizing#courage-alien-salon - use NamedFieldsSemId#solar-salad-smoke - use EnumVariants#dispute-natasha-vega - use VariantInfoSemId#museum-edward-mirror - use UnionVariantsSemId#santana-address-pepper - use TypeSystem#adrian-boris-sponsor - -import AluVM#congo-archive-folio - use Lib#gate-biology-optimal - use LibSite#ultra-grace-message - use IsaName#taboo-olympic-cloud - use LibId#germany-culture-olivia - use IsaSeg#size-shake-olga - use LibSeg#lemon-philips-horse - -import RGBCommit#tuna-safari-design +import RGBCommit#harvest-person-orion use ExtensionSchema#active-eddie-empty use BundleId#carmen-farmer-diesel use AttachState#lady-japan-fiesta @@ -152,36 +83,105 @@ import RGBCommit#tuna-safari-design use RevealedData#olivia-copper-stamp use AssignRevealedValueBlindSealTxid#photo-jump-silicon -import RGBLogic#explain-marvin-bless - use WitnessPos#snow-local-tonight - use WitnessOrd#exhibit-erosion-dallas +import RGBStd#hair-magnum-helena + use PubWitness#paper-visa-storm + use ContentRef#polo-ramirez-parker + use SigBlob#insect-cello-avalon + use AnnotationName#domino-waiter-orlando + use TransitionIface#axiom-parker-pyramid + use NamedFieldTransitionType#express-brush-desire + use ExtensionIface#model-ramirez-mentor + use Iface#violin-student-system + use IfaceId#nova-cola-carbon + use ValencyIface#buzzer-holiday-fiber + use Annotations#spend-linda-romeo + use AssignIface#fractal-baker-outside + use VerNo#textile-next-stretch + use NamedFieldValencyType#invest-apollo-inca + use ImplId#seminar-data-table + use SupplSub#canoe-denmark-short + use OutputAssignmentRevealedData#dinner-honey-saturn + use Supplement#caviar-zebra-precise + use SupplId#pilot-claudia-minute + use OutputAssignmentRevealedAttach#miami-diagram-mineral + use NamedFieldExtensionType#tuna-archer-melon + use NamedFieldGlobalStateType#museum-ohio-arizona + use GenesisIface#rocket-paradox-press + use AnchorSet#pluto-plasma-diagram + use IfaceImpl#permit-learn-samba + use ContentSigs#oval-sister-triton + use SupplItem#jargon-orchid-forget + use Modifier#saturn-escort-jordan + use NamedFieldAssignmentType#origin-caramel-flipper + use TrustLevel#cobra-script-albino + use NamedFieldMetaType#prefix-carmen-artist + use NamedVariantu8#star-pilgrim-pilgrim + use OpWitness#valid-toronto-gibson + use SealWitness#cotton-lopez-isabel + use GlobalIface#concert-combat-charm + use SchemaIfaces#fossil-nepal-airline + use OutputAssignmentRevealedValue#aspect-caramel-diana + use SupplMap#sailor-observe-bundle + use OwnedIface#delphi-athlete-fresh + use ContentId#scarlet-portal-office + use GlobalOut#capital-agatha-bruno + use OutputAssignmentVoidState#mars-alabama-public -import CommitVerify#miller-pancake-elastic - use ProtocolId#shadow-eclipse-program - use Message#druid-blitz-rover - use MerkleHash#horse-popcorn-bundle - use MerkleBlock#pegasus-delta-eddie - use ReservedBytes1#origin-roger-relax - use ReservedBytes2#florida-libra-circus - use TreeNode#kansas-scarlet-ricardo - use ReservedBytes4#young-goblin-academy - use ReservedBytes8#rudolf-tape-adrian +import StrictTypes#century-comrade-chess + use VariantName#theory-austin-before + use FieldName#present-flute-herman + use Primitive#deliver-arrow-boxer + use TySemId#popcorn-super-young + use FieldSemId#spiral-road-marco + use TypeName#edgar-carol-mystery + use UnnamedFieldsSemId#freedom-degree-gregory + use SemId#logic-absorb-hilton + use Variant#humor-regard-promise + use Sizing#courage-alien-salon + use NamedFieldsSemId#solar-salad-smoke + use EnumVariants#dispute-natasha-vega + use VariantInfoSemId#museum-edward-mirror + use UnionVariantsSemId#santana-address-pepper + use TypeSystem#adrian-boris-sponsor -import BPCore#totem-holiday-helena +import BPCore#austin-story-retro use TapretNodePartner#roger-member-educate use ExplicitSealTxid#nova-roger-campus use TapretProof#marco-border-sample use TapretPathProof#kiwi-mirror-paris - use AnchorMerkleBlockTapretProof#poem-serpent-broken use Method#bali-boris-plasma use TapretRightBranch#miracle-patriot-touch use BlindSealTxPtr#fortune-iron-salmon use OpretProof#good-village-flex - use AnchorMerkleBlockOpretProof#gentle-gate-page + use AnchorMerkleBlockTapretProof#ventura-palma-trumpet + use AnchorMerkleBlockOpretProof#sheriff-alex-degree use SecretSeal#dollar-iris-wizard use BlindSealTxid#media-judge-anita use TxPtr#italian-july-eddie +import AluVM#congo-archive-folio + use Lib#gate-biology-optimal + use LibSite#ultra-grace-message + use IsaName#taboo-olympic-cloud + use LibId#germany-culture-olivia + use IsaSeg#size-shake-olga + use LibSeg#lemon-philips-horse + +import CommitVerify#miller-pancake-elastic + use ProtocolId#shadow-eclipse-program + use Message#druid-blitz-rover + use MerkleHash#horse-popcorn-bundle + use MerkleBlock#pegasus-delta-eddie + use ReservedBytes1#origin-roger-relax + use ReservedBytes2#florida-libra-circus + use TreeNode#kansas-scarlet-ricardo + use ReservedBytes4#young-goblin-academy + use ReservedBytes8#rudolf-tape-adrian + +import RGBLogic#rapid-baboon-satire + use WitnessPos#snow-local-tonight + use WitnessOrd#exhibit-erosion-dallas + import Std#ralph-blue-lucky use AlphaCaps#picnic-soprano-aurora use AsciiPrintable#ultra-sunset-format @@ -238,7 +238,7 @@ data MemIndex : opBundleIndex {RGBCommit.OpId -> ^ ..0xffffff RGBCommit , contractIndex {RGBCommit.ContractId -> ^ ..0xff ContractIndex} , terminalIndex {RGBCommit.XChainSecretSeal -> ^ ..0xffffff {RGBCommit.Opout ^ ..0xff}} -@mnemonic(ultra-sweden-limbo) +@mnemonic(level-open-morph) data MemStash : schemata {RGBCommit.SchemaId -> ^ ..0xff RGBStd.SchemaIfaces} , ifaces {RGBStd.IfaceId -> ^ ..0xff RGBStd.Iface} , geneses {RGBCommit.ContractId -> ^ ..0xff RGBCommit.Genesis} diff --git a/stl/Transfer.vesper b/stl/Transfer.vesper index 737079e6..ca6ac774 100644 --- a/stl/Transfer.vesper +++ b/stl/Transfer.vesper @@ -473,263 +473,1072 @@ Consignmenttrue rec witness bytes len=2 aka=ReservedBytes2 bundles set len=0..MAX32 WitnessBundle rec - bundle rec TransitionBundle - closeMethod enum Method opretFirst=0 tapretFirst=1 - inputMap map len=1..MAX16 aka=InputMap - key is U32 aka=Vout - value bytes len=32 aka=OpId - knownTransitions map len=1..MAX16 - key bytes len=32 aka=OpId - value rec Transition - ffv is U16 aka=Ffv - contractId bytes len=32 aka=ContractId - nonce is U64 - transitionType is U16 aka=TransitionType - metadata map len=0..MAX8 aka=Metadata - key is U16 aka=MetaType - value bytes len=0..MAX16 aka=MetaValue - globals map len=0..MAX8 aka=GlobalState - key is U16 aka=GlobalStateType - value list len=1..MAX16 aka=GlobalValues - element bytes len=0..MAX16 aka=DataState - inputs set len=0..MAX16 aka=Inputs - Input rec - prevOut rec Opout - op bytes len=32 aka=OpId - ty is U16 aka=AssignmentType - no is U16 - reserved bytes len=2 aka=ReservedBytes2 - assignments map len=0..MAX8 aka=AssignmentsBlindSealTxPtr - key is U16 aka=AssignmentType - value union TypedAssignsBlindSealTxPtr - declarative list len=0..MAX16 wrapped tag=0 - AssignVoidStateBlindSealTxPtr union - confidential rec tag=0 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state is Unit aka=VoidState - lock bytes len=2 aka=ReservedBytes2 - confidentialState rec tag=1 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state is Unit aka=VoidState - lock bytes len=2 aka=ReservedBytes2 - confidentialSeal rec tag=2 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state is Unit aka=VoidState - lock bytes len=2 aka=ReservedBytes2 - revealed rec tag=3 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state is Unit aka=VoidState - lock bytes len=2 aka=ReservedBytes2 - fungible list len=0..MAX16 wrapped tag=1 - AssignRevealedValueBlindSealTxPtr union - confidential rec tag=0 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state rec ConcealedFungible - commitment bytes len=33 aka=PedersenCommitment - rangeProof bytes len=33 aka=PedersenCommitment - lock bytes len=2 aka=ReservedBytes2 - confidentialState rec tag=1 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state rec ConcealedFungible - commitment bytes len=33 aka=PedersenCommitment - rangeProof bytes len=33 aka=PedersenCommitment - lock bytes len=2 aka=ReservedBytes2 - confidentialSeal rec tag=2 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state rec RevealedFungible - value union FungibleState - bits64 is U64 wrapped tag=0 - blinding bytes len=32 aka=BlindingFactor - tag bytes len=32 aka=AssetTag - lock bytes len=2 aka=ReservedBytes2 - revealed rec tag=3 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state rec RevealedFungible - value union FungibleState - bits64 is U64 wrapped tag=0 - blinding bytes len=32 aka=BlindingFactor - tag bytes len=32 aka=AssetTag - lock bytes len=2 aka=ReservedBytes2 - structured list len=0..MAX16 wrapped tag=2 - AssignRevealedDataBlindSealTxPtr union - confidential rec tag=0 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state bytes len=32 aka=ConcealedData - lock bytes len=2 aka=ReservedBytes2 - confidentialState rec tag=1 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state bytes len=32 aka=ConcealedData - lock bytes len=2 aka=ReservedBytes2 - confidentialSeal rec tag=2 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state rec RevealedData - value bytes len=0..MAX16 aka=DataState - salt is U128 - lock bytes len=2 aka=ReservedBytes2 - revealed rec tag=3 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state rec RevealedData - value bytes len=0..MAX16 aka=DataState - salt is U128 - lock bytes len=2 aka=ReservedBytes2 - attachment list len=0..MAX16 wrapped tag=3 - AssignRevealedAttachBlindSealTxPtr union - confidential rec tag=0 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state bytes len=32 aka=ConcealedAttach - lock bytes len=2 aka=ReservedBytes2 - confidentialState rec tag=1 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state bytes len=32 aka=ConcealedAttach - lock bytes len=2 aka=ReservedBytes2 - confidentialSeal rec tag=2 - seal union XChainSecretSeal - bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 - liquid bytes len=32 wrapped aka=SecretSeal tag=1 - state rec RevealedAttach - file rec AttachState - id bytes len=32 aka=AttachId - mediaType enum MediaType any=255 - salt is U64 - lock bytes len=2 aka=ReservedBytes2 - revealed rec tag=3 - seal union XChainBlindSealTxPtr - bitcoin rec BlindSealTxPtr wrapped tag=0 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - liquid rec BlindSealTxPtr wrapped tag=1 - method enum Method opretFirst=0 tapretFirst=1 - txid union TxPtr - witnessTx is Unit tag=0 - txid bytes len=32 wrapped aka=Txid tag=1 - vout is U32 aka=Vout - blinding is U64 - state rec RevealedAttach - file rec AttachState - id bytes len=32 aka=AttachId - mediaType enum MediaType any=255 - salt is U64 - lock bytes len=2 aka=ReservedBytes2 - valencies set len=0..MAX8 aka=Valencies - element is U16 aka=ValencyType - validator bytes len=1 aka=ReservedBytes1 - witness bytes len=2 aka=ReservedBytes2 + anchoredBundles union AnchoredBundles + tapret rec ClientBundleTapretProof wrapped tag=0 + mpcProof rec MerkleProof + pos is U32 + cofactor is U16 + path list len=0..32 + element bytes len=32 aka=MerkleHash + dbcProof rec TapretProof + pathProof rec TapretPathProof + some union TapretNodePartner option wrapped tag=1 + rightBranch rec TapretRightBranch wrapped tag=2 + nonce is U8 + bundle rec TransitionBundle + closeMethod enum Method opretFirst=0 tapretFirst=1 + inputMap map len=1..MAX16 aka=InputMap + key is U32 aka=Vout + value bytes len=32 aka=OpId + knownTransitions map len=1..MAX16 + key bytes len=32 aka=OpId + value rec Transition + ffv is U16 aka=Ffv + contractId bytes len=32 aka=ContractId + nonce is U64 + transitionType is U16 aka=TransitionType + metadata map len=0..MAX8 aka=Metadata + key is U16 aka=MetaType + value bytes len=0..MAX16 aka=MetaValue + globals map len=0..MAX8 aka=GlobalState + key is U16 aka=GlobalStateType + value list len=1..MAX16 aka=GlobalValues + element bytes len=0..MAX16 aka=DataState + inputs set len=0..MAX16 aka=Inputs + Input rec + prevOut rec Opout + op bytes len=32 aka=OpId + ty is U16 aka=AssignmentType + no is U16 + reserved bytes len=2 aka=ReservedBytes2 + assignments map len=0..MAX8 aka=AssignmentsBlindSealTxPtr + key is U16 aka=AssignmentType + value union TypedAssignsBlindSealTxPtr + declarative list len=0..MAX16 wrapped tag=0 + AssignVoidStateBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + fungible list len=0..MAX16 wrapped tag=1 + AssignRevealedValueBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + structured list len=0..MAX16 wrapped tag=2 + AssignRevealedDataBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + attachment list len=0..MAX16 wrapped tag=3 + AssignRevealedAttachBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + valencies set len=0..MAX8 aka=Valencies + element is U16 aka=ValencyType + validator bytes len=1 aka=ReservedBytes1 + witness bytes len=2 aka=ReservedBytes2 + opret rec ClientBundleOpretProof wrapped tag=1 + mpcProof rec MerkleProof + pos is U32 + cofactor is U16 + path list len=0..32 + element bytes len=32 aka=MerkleHash + dbcProof is Unit aka=OpretProof + bundle rec TransitionBundle + closeMethod enum Method opretFirst=0 tapretFirst=1 + inputMap map len=1..MAX16 aka=InputMap + key is U32 aka=Vout + value bytes len=32 aka=OpId + knownTransitions map len=1..MAX16 + key bytes len=32 aka=OpId + value rec Transition + ffv is U16 aka=Ffv + contractId bytes len=32 aka=ContractId + nonce is U64 + transitionType is U16 aka=TransitionType + metadata map len=0..MAX8 aka=Metadata + key is U16 aka=MetaType + value bytes len=0..MAX16 aka=MetaValue + globals map len=0..MAX8 aka=GlobalState + key is U16 aka=GlobalStateType + value list len=1..MAX16 aka=GlobalValues + element bytes len=0..MAX16 aka=DataState + inputs set len=0..MAX16 aka=Inputs + Input rec + prevOut rec Opout + op bytes len=32 aka=OpId + ty is U16 aka=AssignmentType + no is U16 + reserved bytes len=2 aka=ReservedBytes2 + assignments map len=0..MAX8 aka=AssignmentsBlindSealTxPtr + key is U16 aka=AssignmentType + value union TypedAssignsBlindSealTxPtr + declarative list len=0..MAX16 wrapped tag=0 + AssignVoidStateBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + fungible list len=0..MAX16 wrapped tag=1 + AssignRevealedValueBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + structured list len=0..MAX16 wrapped tag=2 + AssignRevealedDataBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + attachment list len=0..MAX16 wrapped tag=3 + AssignRevealedAttachBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + valencies set len=0..MAX8 aka=Valencies + element is U16 aka=ValencyType + validator bytes len=1 aka=ReservedBytes1 + witness bytes len=2 aka=ReservedBytes2 + double rec tag=2 + tapret rec ClientBundleTapretProof + mpcProof rec MerkleProof + pos is U32 + cofactor is U16 + path list len=0..32 + element bytes len=32 aka=MerkleHash + dbcProof rec TapretProof + pathProof rec TapretPathProof + some union TapretNodePartner option wrapped tag=1 + rightBranch rec TapretRightBranch wrapped tag=2 + nonce is U8 + bundle rec TransitionBundle + closeMethod enum Method opretFirst=0 tapretFirst=1 + inputMap map len=1..MAX16 aka=InputMap + key is U32 aka=Vout + value bytes len=32 aka=OpId + knownTransitions map len=1..MAX16 + key bytes len=32 aka=OpId + value rec Transition + ffv is U16 aka=Ffv + contractId bytes len=32 aka=ContractId + nonce is U64 + transitionType is U16 aka=TransitionType + metadata map len=0..MAX8 aka=Metadata + key is U16 aka=MetaType + value bytes len=0..MAX16 aka=MetaValue + globals map len=0..MAX8 aka=GlobalState + key is U16 aka=GlobalStateType + value list len=1..MAX16 aka=GlobalValues + element bytes len=0..MAX16 aka=DataState + inputs set len=0..MAX16 aka=Inputs + Input rec + prevOut rec Opout + op bytes len=32 aka=OpId + ty is U16 aka=AssignmentType + no is U16 + reserved bytes len=2 aka=ReservedBytes2 + assignments map len=0..MAX8 aka=AssignmentsBlindSealTxPtr + key is U16 aka=AssignmentType + value union TypedAssignsBlindSealTxPtr + declarative list len=0..MAX16 wrapped tag=0 + AssignVoidStateBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + fungible list len=0..MAX16 wrapped tag=1 + AssignRevealedValueBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + structured list len=0..MAX16 wrapped tag=2 + AssignRevealedDataBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + attachment list len=0..MAX16 wrapped tag=3 + AssignRevealedAttachBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + valencies set len=0..MAX8 aka=Valencies + element is U16 aka=ValencyType + validator bytes len=1 aka=ReservedBytes1 + witness bytes len=2 aka=ReservedBytes2 + opret rec ClientBundleOpretProof + mpcProof rec MerkleProof + pos is U32 + cofactor is U16 + path list len=0..32 + element bytes len=32 aka=MerkleHash + dbcProof is Unit aka=OpretProof + bundle rec TransitionBundle + closeMethod enum Method opretFirst=0 tapretFirst=1 + inputMap map len=1..MAX16 aka=InputMap + key is U32 aka=Vout + value bytes len=32 aka=OpId + knownTransitions map len=1..MAX16 + key bytes len=32 aka=OpId + value rec Transition + ffv is U16 aka=Ffv + contractId bytes len=32 aka=ContractId + nonce is U64 + transitionType is U16 aka=TransitionType + metadata map len=0..MAX8 aka=Metadata + key is U16 aka=MetaType + value bytes len=0..MAX16 aka=MetaValue + globals map len=0..MAX8 aka=GlobalState + key is U16 aka=GlobalStateType + value list len=1..MAX16 aka=GlobalValues + element bytes len=0..MAX16 aka=DataState + inputs set len=0..MAX16 aka=Inputs + Input rec + prevOut rec Opout + op bytes len=32 aka=OpId + ty is U16 aka=AssignmentType + no is U16 + reserved bytes len=2 aka=ReservedBytes2 + assignments map len=0..MAX8 aka=AssignmentsBlindSealTxPtr + key is U16 aka=AssignmentType + value union TypedAssignsBlindSealTxPtr + declarative list len=0..MAX16 wrapped tag=0 + AssignVoidStateBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state is Unit aka=VoidState + lock bytes len=2 aka=ReservedBytes2 + fungible list len=0..MAX16 wrapped tag=1 + AssignRevealedValueBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec ConcealedFungible + commitment bytes len=33 aka=PedersenCommitment + rangeProof bytes len=33 aka=PedersenCommitment + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedFungible + value union FungibleState + bits64 is U64 wrapped tag=0 + blinding bytes len=32 aka=BlindingFactor + tag bytes len=32 aka=AssetTag + lock bytes len=2 aka=ReservedBytes2 + structured list len=0..MAX16 wrapped tag=2 + AssignRevealedDataBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedData + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedData + value bytes len=0..MAX16 aka=DataState + salt is U128 + lock bytes len=2 aka=ReservedBytes2 + attachment list len=0..MAX16 wrapped tag=3 + AssignRevealedAttachBlindSealTxPtr union + confidential rec tag=0 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialState rec tag=1 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state bytes len=32 aka=ConcealedAttach + lock bytes len=2 aka=ReservedBytes2 + confidentialSeal rec tag=2 + seal union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + revealed rec tag=3 + seal union XChainBlindSealTxPtr + bitcoin rec BlindSealTxPtr wrapped tag=0 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + liquid rec BlindSealTxPtr wrapped tag=1 + method enum Method opretFirst=0 tapretFirst=1 + txid union TxPtr + witnessTx is Unit tag=0 + txid bytes len=32 wrapped aka=Txid tag=1 + vout is U32 aka=Vout + blinding is U64 + state rec RevealedAttach + file rec AttachState + id bytes len=32 aka=AttachId + mediaType enum MediaType any=255 + salt is U64 + lock bytes len=2 aka=ReservedBytes2 + valencies set len=0..MAX8 aka=Valencies + element is U16 aka=ValencyType + validator bytes len=1 aka=ReservedBytes1 + witness bytes len=2 aka=ReservedBytes2 schema rec Schema ffv is U16 aka=Ffv flags bytes len=1 aka=ReservedBytes1